summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2018-01-17 14:14:45 -0800
committerTodd Gamblin <tgamblin@llnl.gov>2018-01-17 14:14:45 -0800
commitc2a10a2aa23f3905ee22bb4b7c79ab963d966a9d (patch)
tree18d502edbbc09b8f9cf255697bd135e9718fb584
parent52a9e5d2a31b4a66ce51d0ff03ab709417dee6dc (diff)
parentba6c39310b537bbeafd4eb00836623ac2bb19d99 (diff)
downloadspack-c2a10a2aa23f3905ee22bb4b7c79ab963d966a9d.tar.gz
spack-c2a10a2aa23f3905ee22bb4b7c79ab963d966a9d.tar.bz2
spack-c2a10a2aa23f3905ee22bb4b7c79ab963d966a9d.tar.xz
spack-c2a10a2aa23f3905ee22bb4b7c79ab963d966a9d.zip
Merge branch 'releases/v0.11.0'v0.11.0
-rw-r--r--.codecov.yml36
-rw-r--r--.flake817
-rw-r--r--.flake8_packages22
-rw-r--r--.gitignore5
-rw-r--r--.travis.yml129
-rw-r--r--CODE_OF_CONDUCT.md46
-rw-r--r--CONTRIBUTING.md5
-rw-r--r--LICENSE640
-rw-r--r--NOTICE32
-rw-r--r--README.md89
-rwxr-xr-xbin/sbang23
-rwxr-xr-xbin/spack199
-rwxr-xr-xbin/spack-python6
-rw-r--r--etc/spack/defaults/config.yaml9
-rw-r--r--etc/spack/defaults/modules.yaml4
-rw-r--r--etc/spack/defaults/packages.yaml16
-rw-r--r--lib/spack/docs/.gitignore2
-rw-r--r--lib/spack/docs/Makefile10
-rw-r--r--lib/spack/docs/_themes/sphinx_rtd_theme/footer.html2
-rw-r--r--lib/spack/docs/basic_usage.rst43
-rw-r--r--lib/spack/docs/binary_caches.rst132
-rw-r--r--lib/spack/docs/build_settings.rst4
-rw-r--r--lib/spack/docs/conf.py60
-rw-r--r--lib/spack/docs/config_yaml.rst93
-rw-r--r--lib/spack/docs/configuration.rst89
-rw-r--r--lib/spack/docs/contribution_guide.rst18
-rw-r--r--lib/spack/docs/developer_guide.rst147
-rw-r--r--lib/spack/docs/exts/sphinxcontrib/__init__.py9
-rw-r--r--lib/spack/docs/exts/sphinxcontrib/programoutput.py263
-rw-r--r--lib/spack/docs/getting_started.rst301
-rw-r--r--lib/spack/docs/index.rst17
-rw-r--r--lib/spack/docs/known_issues.rst110
-rw-r--r--lib/spack/docs/mirrors.rst4
-rw-r--r--lib/spack/docs/module_file_generation.svg989
-rw-r--r--lib/spack/docs/module_file_support.rst319
-rw-r--r--lib/spack/docs/packaging_guide.rst1781
-rw-r--r--lib/spack/docs/requirements.txt5
-rw-r--r--lib/spack/docs/tutorial.rst (renamed from lib/spack/docs/tutorial_sc16.rst)16
-rw-r--r--lib/spack/docs/tutorial/examples/0.package.py21
-rw-r--r--lib/spack/docs/tutorial/examples/1.package.py24
-rw-r--r--lib/spack/docs/tutorial/examples/2.package.py17
-rw-r--r--lib/spack/docs/tutorial/examples/3.package.py17
-rw-r--r--lib/spack/docs/tutorial/examples/4.package.py24
-rw-r--r--lib/spack/docs/tutorial/examples/5.package.py53
-rw-r--r--lib/spack/docs/tutorial/examples/Autotools/0.package.py46
-rw-r--r--lib/spack/docs/tutorial/examples/Autotools/1.package.py51
-rw-r--r--lib/spack/docs/tutorial/examples/Autotools/autotools_class.py460
-rw-r--r--lib/spack/docs/tutorial/examples/Cmake/0.package.py60
-rw-r--r--lib/spack/docs/tutorial/examples/Cmake/1.package.py42
-rw-r--r--lib/spack/docs/tutorial/examples/Cmake/2.package.py52
-rw-r--r--lib/spack/docs/tutorial/examples/Cmake/cmake_class.py224
-rw-r--r--lib/spack/docs/tutorial/examples/Makefile/0.package.py45
-rw-r--r--lib/spack/docs/tutorial/examples/Makefile/1.package.py46
-rw-r--r--lib/spack/docs/tutorial/examples/Makefile/2.package.py44
-rw-r--r--lib/spack/docs/tutorial/examples/Makefile/3.package.py53
-rw-r--r--lib/spack/docs/tutorial/examples/Makefile/makefile_class.py129
-rw-r--r--lib/spack/docs/tutorial/examples/PyPackage/0.package.py60
-rw-r--r--lib/spack/docs/tutorial/examples/PyPackage/1.package.py51
-rw-r--r--lib/spack/docs/tutorial/examples/PyPackage/python_package_class.py399
-rw-r--r--lib/spack/docs/tutorial_advanced_packaging.rst563
-rw-r--r--lib/spack/docs/tutorial_basics.rst1747
-rw-r--r--lib/spack/docs/tutorial_buildsystems.rst795
-rw-r--r--lib/spack/docs/tutorial_configuration.rst843
-rw-r--r--lib/spack/docs/tutorial_modules.rst1541
-rw-r--r--lib/spack/docs/tutorial_packaging.rst (renamed from lib/spack/docs/tutorial_sc16_packaging.rst)232
-rw-r--r--lib/spack/docs/tutorial_sc16_modules.rst982
-rw-r--r--lib/spack/docs/tutorial_sc16_spack_basics.rst1255
-rw-r--r--lib/spack/docs/workflows.rst263
-rwxr-xr-xlib/spack/env/cc27
l---------lib/spack/env/clang/flang1
l---------lib/spack/env/xl_r/xlc++_r1
l---------lib/spack/env/xl_r/xlc_r1
l---------lib/spack/env/xl_r/xlf90_r1
l---------lib/spack/env/xl_r/xlf_r1
-rw-r--r--lib/spack/external/__init__.py8
-rw-r--r--lib/spack/external/_pytest/pytester.py2
-rw-r--r--lib/spack/external/ctest_log_parser.py313
-rw-r--r--lib/spack/external/distro.py19
-rw-r--r--lib/spack/external/functools_backport.py17
-rw-r--r--lib/spack/external/jinja2/AUTHORS33
-rw-r--r--lib/spack/external/jinja2/LICENSE (renamed from lib/spack/docs/exts/sphinxcontrib/LICENSE)56
-rw-r--r--lib/spack/external/jinja2/README.rst51
-rw-r--r--lib/spack/external/jinja2/__init__.py82
-rw-r--r--lib/spack/external/jinja2/_compat.py99
-rw-r--r--lib/spack/external/jinja2/_stringdefs.py71
-rw-r--r--lib/spack/external/jinja2/asyncfilters.py146
-rw-r--r--lib/spack/external/jinja2/asyncsupport.py254
-rw-r--r--lib/spack/external/jinja2/bccache.py362
-rw-r--r--lib/spack/external/jinja2/compiler.py1653
-rw-r--r--lib/spack/external/jinja2/constants.py32
-rw-r--r--lib/spack/external/jinja2/debug.py372
-rw-r--r--lib/spack/external/jinja2/defaults.py54
-rw-r--r--lib/spack/external/jinja2/environment.py1276
-rw-r--r--lib/spack/external/jinja2/exceptions.py146
-rw-r--r--lib/spack/external/jinja2/ext.py609
-rw-r--r--lib/spack/external/jinja2/filters.py1073
-rw-r--r--lib/spack/external/jinja2/idtracking.py273
-rw-r--r--lib/spack/external/jinja2/lexer.py737
-rw-r--r--lib/spack/external/jinja2/loaders.py481
-rw-r--r--lib/spack/external/jinja2/meta.py106
-rw-r--r--lib/spack/external/jinja2/nodes.py939
-rw-r--r--lib/spack/external/jinja2/optimizer.py49
-rw-r--r--lib/spack/external/jinja2/parser.py898
-rw-r--r--lib/spack/external/jinja2/runtime.py787
-rw-r--r--lib/spack/external/jinja2/sandbox.py475
-rw-r--r--lib/spack/external/jinja2/tests.py185
-rw-r--r--lib/spack/external/jinja2/utils.py624
-rw-r--r--lib/spack/external/jinja2/visitor.py87
-rw-r--r--lib/spack/external/markupsafe/AUTHORS13
-rw-r--r--lib/spack/external/markupsafe/LICENSE33
-rw-r--r--lib/spack/external/markupsafe/README.rst113
-rw-r--r--lib/spack/external/markupsafe/__init__.py305
-rw-r--r--lib/spack/external/markupsafe/_compat.py26
-rw-r--r--lib/spack/external/markupsafe/_constants.py267
-rw-r--r--lib/spack/external/markupsafe/_native.py46
-rw-r--r--lib/spack/external/ordereddict_backport.py8
-rwxr-xr-xlib/spack/external/pyqver2.py70
-rwxr-xr-xlib/spack/external/pyqver3.py248
-rw-r--r--lib/spack/external/six.py886
-rw-r--r--lib/spack/external/yaml/README2
-rw-r--r--lib/spack/external/yaml/lib/yaml/__init__.py (renamed from lib/spack/external/yaml/__init__.py)2
-rw-r--r--lib/spack/external/yaml/lib/yaml/composer.py (renamed from lib/spack/external/yaml/composer.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/constructor.py (renamed from lib/spack/external/yaml/constructor.py)3
-rw-r--r--lib/spack/external/yaml/lib/yaml/cyaml.py85
-rw-r--r--lib/spack/external/yaml/lib/yaml/dumper.py (renamed from lib/spack/external/yaml/dumper.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/emitter.py (renamed from lib/spack/external/yaml/emitter.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/error.py (renamed from lib/spack/external/yaml/error.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/events.py (renamed from lib/spack/external/yaml/events.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/loader.py (renamed from lib/spack/external/yaml/loader.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/nodes.py (renamed from lib/spack/external/yaml/nodes.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/parser.py (renamed from lib/spack/external/yaml/parser.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/reader.py (renamed from lib/spack/external/yaml/reader.py)9
-rw-r--r--lib/spack/external/yaml/lib/yaml/representer.py (renamed from lib/spack/external/yaml/representer.py)4
-rw-r--r--lib/spack/external/yaml/lib/yaml/resolver.py (renamed from lib/spack/external/yaml/resolver.py)5
-rw-r--r--lib/spack/external/yaml/lib/yaml/scanner.py (renamed from lib/spack/external/yaml/scanner.py)8
-rw-r--r--lib/spack/external/yaml/lib/yaml/serializer.py (renamed from lib/spack/external/yaml/serializer.py)0
-rw-r--r--lib/spack/external/yaml/lib/yaml/tokens.py (renamed from lib/spack/external/yaml/tokens.py)0
-rw-r--r--lib/spack/external/yaml/lib3/yaml/__init__.py312
-rw-r--r--lib/spack/external/yaml/lib3/yaml/composer.py139
-rw-r--r--lib/spack/external/yaml/lib3/yaml/constructor.py686
-rw-r--r--lib/spack/external/yaml/lib3/yaml/cyaml.py85
-rw-r--r--lib/spack/external/yaml/lib3/yaml/dumper.py62
-rw-r--r--lib/spack/external/yaml/lib3/yaml/emitter.py1137
-rw-r--r--lib/spack/external/yaml/lib3/yaml/error.py75
-rw-r--r--lib/spack/external/yaml/lib3/yaml/events.py86
-rw-r--r--lib/spack/external/yaml/lib3/yaml/loader.py40
-rw-r--r--lib/spack/external/yaml/lib3/yaml/nodes.py49
-rw-r--r--lib/spack/external/yaml/lib3/yaml/parser.py589
-rw-r--r--lib/spack/external/yaml/lib3/yaml/reader.py192
-rw-r--r--lib/spack/external/yaml/lib3/yaml/representer.py387
-rw-r--r--lib/spack/external/yaml/lib3/yaml/resolver.py227
-rw-r--r--lib/spack/external/yaml/lib3/yaml/scanner.py1444
-rw-r--r--lib/spack/external/yaml/lib3/yaml/serializer.py111
-rw-r--r--lib/spack/external/yaml/lib3/yaml/tokens.py104
-rw-r--r--lib/spack/llnl/__init__.py6
-rw-r--r--lib/spack/llnl/util/__init__.py6
-rw-r--r--lib/spack/llnl/util/filesystem.py801
-rw-r--r--lib/spack/llnl/util/lang.py188
-rw-r--r--lib/spack/llnl/util/link_tree.py37
-rw-r--r--lib/spack/llnl/util/lock.py35
-rw-r--r--lib/spack/llnl/util/tty/__init__.py60
-rw-r--r--lib/spack/llnl/util/tty/colify.py72
-rw-r--r--lib/spack/llnl/util/tty/color.py134
-rw-r--r--lib/spack/llnl/util/tty/log.py539
-rw-r--r--lib/spack/spack/__init__.py99
-rw-r--r--lib/spack/spack/abi.py18
-rw-r--r--lib/spack/spack/architecture.py10
-rw-r--r--lib/spack/spack/binary_distribution.py527
-rw-r--r--lib/spack/spack/build_environment.py585
-rw-r--r--lib/spack/spack/build_systems/__init__.py6
-rw-r--r--lib/spack/spack/build_systems/aspell_dict.py57
-rw-r--r--lib/spack/spack/build_systems/autotools.py405
-rw-r--r--lib/spack/spack/build_systems/cmake.py188
-rw-r--r--lib/spack/spack/build_systems/intel.py192
-rw-r--r--lib/spack/spack/build_systems/makefile.py93
-rw-r--r--lib/spack/spack/build_systems/perl.py119
-rw-r--r--lib/spack/spack/build_systems/python.py124
-rw-r--r--lib/spack/spack/build_systems/qmake.py87
-rw-r--r--lib/spack/spack/build_systems/r.py60
-rw-r--r--lib/spack/spack/build_systems/scons.py92
-rw-r--r--lib/spack/spack/build_systems/waf.py148
-rw-r--r--lib/spack/spack/cmd/__init__.py120
-rw-r--r--lib/spack/spack/cmd/activate.py26
-rw-r--r--lib/spack/spack/cmd/arch.py18
-rw-r--r--lib/spack/spack/cmd/blame.py131
-rw-r--r--lib/spack/spack/cmd/bootstrap.py133
-rw-r--r--lib/spack/spack/cmd/build.py27
-rw-r--r--lib/spack/spack/cmd/buildcache.py335
-rw-r--r--lib/spack/spack/cmd/cd.py10
-rw-r--r--lib/spack/spack/cmd/checksum.py108
-rw-r--r--lib/spack/spack/cmd/clean.py65
-rw-r--r--lib/spack/spack/cmd/clone.py107
-rw-r--r--lib/spack/spack/cmd/common/__init__.py28
-rw-r--r--lib/spack/spack/cmd/common/arguments.py72
-rw-r--r--lib/spack/spack/cmd/compiler.py84
-rw-r--r--lib/spack/spack/cmd/compilers.py12
-rw-r--r--lib/spack/spack/cmd/config.py29
-rw-r--r--lib/spack/spack/cmd/configure.py26
-rw-r--r--lib/spack/spack/cmd/create.py288
-rw-r--r--lib/spack/spack/cmd/deactivate.py47
-rw-r--r--lib/spack/spack/cmd/debug.py12
-rw-r--r--lib/spack/spack/cmd/dependencies.py87
-rw-r--r--lib/spack/spack/cmd/dependents.py93
-rw-r--r--lib/spack/spack/cmd/diy.py20
-rw-r--r--lib/spack/spack/cmd/docs.py33
-rw-r--r--lib/spack/spack/cmd/edit.py31
-rw-r--r--lib/spack/spack/cmd/env.py29
-rw-r--r--lib/spack/spack/cmd/extensions.py121
-rw-r--r--lib/spack/spack/cmd/fetch.py27
-rw-r--r--lib/spack/spack/cmd/find.py57
-rw-r--r--lib/spack/spack/cmd/flake8.py237
-rw-r--r--lib/spack/spack/cmd/gpg.py174
-rw-r--r--lib/spack/spack/cmd/graph.py40
-rw-r--r--lib/spack/spack/cmd/help.py98
-rw-r--r--lib/spack/spack/cmd/info.py223
-rw-r--r--lib/spack/spack/cmd/install.py225
-rw-r--r--lib/spack/spack/cmd/list.py65
-rw-r--r--lib/spack/spack/cmd/load.py18
-rw-r--r--lib/spack/spack/cmd/location.py49
-rw-r--r--lib/spack/spack/cmd/md5.py34
-rw-r--r--lib/spack/spack/cmd/mirror.py42
-rw-r--r--lib/spack/spack/cmd/module.py317
-rw-r--r--lib/spack/spack/cmd/patch.py12
-rw-r--r--lib/spack/spack/cmd/pkg.py65
-rw-r--r--lib/spack/spack/cmd/providers.py12
-rw-r--r--lib/spack/spack/cmd/purge.py58
-rw-r--r--lib/spack/spack/cmd/pydoc.py (renamed from lib/spack/spack/cmd/doc.py)14
-rw-r--r--lib/spack/spack/cmd/python.py21
-rw-r--r--lib/spack/spack/cmd/reindex.py11
-rw-r--r--lib/spack/spack/cmd/repo.py32
-rw-r--r--lib/spack/spack/cmd/restage.py10
-rw-r--r--lib/spack/spack/cmd/setup.py23
-rw-r--r--lib/spack/spack/cmd/sha256.py40
-rw-r--r--lib/spack/spack/cmd/spec.py51
-rw-r--r--lib/spack/spack/cmd/stage.py14
-rw-r--r--lib/spack/spack/cmd/test.py28
-rw-r--r--lib/spack/spack/cmd/uninstall.py82
-rw-r--r--lib/spack/spack/cmd/unload.py16
-rw-r--r--lib/spack/spack/cmd/unuse.py16
-rw-r--r--lib/spack/spack/cmd/url.py389
-rw-r--r--lib/spack/spack/cmd/url_parse.py79
-rw-r--r--lib/spack/spack/cmd/urls.py59
-rw-r--r--lib/spack/spack/cmd/use.py16
-rw-r--r--lib/spack/spack/cmd/versions.py18
-rw-r--r--lib/spack/spack/cmd/view.py354
-rw-r--r--lib/spack/spack/compiler.py54
-rw-r--r--lib/spack/spack/compilers/__init__.py218
-rw-r--r--lib/spack/spack/compilers/cce.py22
-rw-r--r--lib/spack/spack/compilers/clang.py102
-rw-r--r--lib/spack/spack/compilers/gcc.py23
-rw-r--r--lib/spack/spack/compilers/intel.py9
-rw-r--r--lib/spack/spack/compilers/nag.py8
-rw-r--r--lib/spack/spack/compilers/pgi.py20
-rw-r--r--lib/spack/spack/compilers/xl.py26
-rw-r--r--lib/spack/spack/compilers/xl_r.py123
-rw-r--r--lib/spack/spack/concretize.py351
-rw-r--r--lib/spack/spack/config.py36
-rw-r--r--lib/spack/spack/database.py202
-rw-r--r--lib/spack/spack/dependency.py132
-rw-r--r--lib/spack/spack/directives.py306
-rw-r--r--lib/spack/spack/directory_layout.py282
-rw-r--r--lib/spack/spack/environment.py346
-rw-r--r--lib/spack/spack/error.py57
-rw-r--r--lib/spack/spack/fetch_strategy.py340
-rw-r--r--lib/spack/spack/file_cache.py14
-rw-r--r--lib/spack/spack/filesystem_view.py547
-rw-r--r--lib/spack/spack/graph.py46
-rw-r--r--lib/spack/spack/hooks/__init__.py15
-rw-r--r--lib/spack/spack/hooks/case_consistency.py31
-rw-r--r--lib/spack/spack/hooks/extensions.py14
-rw-r--r--lib/spack/spack/hooks/licensing.py19
-rw-r--r--lib/spack/spack/hooks/module_file_generation.py34
-rw-r--r--lib/spack/spack/hooks/sbang.py34
-rw-r--r--lib/spack/spack/hooks/yaml_version_check.py6
-rw-r--r--lib/spack/spack/main.py554
-rw-r--r--lib/spack/spack/mirror.py59
-rw-r--r--lib/spack/spack/modules.py874
-rw-r--r--lib/spack/spack/modules/__init__.py46
-rw-r--r--lib/spack/spack/modules/common.py740
-rw-r--r--lib/spack/spack/modules/dotkit.py78
-rw-r--r--lib/spack/spack/modules/lmod.py418
-rw-r--r--lib/spack/spack/modules/tcl.py116
-rw-r--r--lib/spack/spack/multimethod.py20
-rw-r--r--lib/spack/spack/operating_systems/__init__.py6
-rw-r--r--lib/spack/spack/operating_systems/cnk.py6
-rw-r--r--lib/spack/spack/operating_systems/cnl.py19
-rw-r--r--lib/spack/spack/operating_systems/cray_frontend.py76
-rw-r--r--lib/spack/spack/operating_systems/linux_distro.py13
-rw-r--r--lib/spack/spack/operating_systems/mac_os.py18
-rw-r--r--lib/spack/spack/package.py1160
-rw-r--r--lib/spack/spack/package_prefs.py385
-rw-r--r--lib/spack/spack/package_test.py28
-rw-r--r--lib/spack/spack/parse.py18
-rw-r--r--lib/spack/spack/patch.py144
-rw-r--r--lib/spack/spack/platforms/__init__.py6
-rw-r--r--lib/spack/spack/platforms/bgq.py6
-rw-r--r--lib/spack/spack/platforms/cray.py14
-rw-r--r--lib/spack/spack/platforms/darwin.py6
-rw-r--r--lib/spack/spack/platforms/linux.py6
-rw-r--r--lib/spack/spack/platforms/test.py6
-rw-r--r--lib/spack/spack/provider_index.py19
-rw-r--r--lib/spack/spack/relocate.py304
-rw-r--r--lib/spack/spack/repository.py437
-rw-r--r--lib/spack/spack/resource.py6
-rw-r--r--lib/spack/spack/schema/__init__.py6
-rw-r--r--lib/spack/spack/schema/compilers.py6
-rw-r--r--lib/spack/spack/schema/config.py14
-rw-r--r--lib/spack/spack/schema/mirrors.py6
-rw-r--r--lib/spack/spack/schema/modules.py13
-rw-r--r--lib/spack/spack/schema/packages.py6
-rw-r--r--lib/spack/spack/schema/repos.py6
-rw-r--r--lib/spack/spack/spec.py1774
-rw-r--r--lib/spack/spack/stage.py122
-rw-r--r--lib/spack/spack/store.py15
-rw-r--r--lib/spack/spack/tengine.py120
-rw-r--r--lib/spack/spack/test/__init__.py6
-rw-r--r--lib/spack/spack/test/architecture.py12
-rw-r--r--lib/spack/spack/test/build_environment.py99
-rw-r--r--lib/spack/spack/test/build_system_guess.py13
-rw-r--r--lib/spack/spack/test/build_systems.py39
-rw-r--r--lib/spack/spack/test/cc.py14
-rw-r--r--lib/spack/spack/test/cmd/__init__.py6
-rw-r--r--lib/spack/spack/test/cmd/blame.py71
-rw-r--r--lib/spack/spack/test/cmd/clean.py68
-rw-r--r--lib/spack/spack/test/cmd/dependencies.py77
-rw-r--r--lib/spack/spack/test/cmd/dependents.py77
-rw-r--r--lib/spack/spack/test/cmd/env.py48
-rw-r--r--lib/spack/spack/test/cmd/find.py63
-rw-r--r--lib/spack/spack/test/cmd/flake8.py94
-rw-r--r--lib/spack/spack/test/cmd/gpg.py154
-rw-r--r--lib/spack/spack/test/cmd/info.py92
-rw-r--r--lib/spack/spack/test/cmd/install.py359
-rw-r--r--lib/spack/spack/test/cmd/list.py73
-rw-r--r--lib/spack/spack/test/cmd/module.py38
-rw-r--r--lib/spack/spack/test/cmd/python.py33
-rw-r--r--lib/spack/spack/test/cmd/test_compiler_cmd.py16
-rw-r--r--lib/spack/spack/test/cmd/uninstall.py41
-rw-r--r--lib/spack/spack/test/cmd/url.py136
-rw-r--r--lib/spack/spack/test/cmd/view.py165
-rw-r--r--lib/spack/spack/test/compilers.py69
-rw-r--r--lib/spack/spack/test/concretize.py191
-rw-r--r--lib/spack/spack/test/concretize_preferences.py21
-rw-r--r--lib/spack/spack/test/config.py34
-rw-r--r--lib/spack/spack/test/conftest.py476
-rw-r--r--lib/spack/spack/test/data/config.yaml4
-rw-r--r--lib/spack/spack/test/data/config/modules.yaml42
-rw-r--r--lib/spack/spack/test/data/directory_search/README.txt1
-rw-r--r--lib/spack/spack/test/data/directory_search/a/c.h0
-rw-r--r--lib/spack/spack/test/data/directory_search/a/libc.a0
-rw-r--r--lib/spack/spack/test/data/directory_search/a/libc.dylib0
-rw-r--r--lib/spack/spack/test/data/directory_search/a/libc.so0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/b.h0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/d.h0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/liba.a0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/liba.dylib0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/liba.so0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/libd.a0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/libd.dylib0
-rw-r--r--lib/spack/spack/test/data/directory_search/b/libd.so0
-rw-r--r--lib/spack/spack/test/data/directory_search/c/a.h0
-rw-r--r--lib/spack/spack/test/data/directory_search/c/libb.a0
-rw-r--r--lib/spack/spack/test/data/directory_search/c/libb.dylib0
-rw-r--r--lib/spack/spack/test/data/directory_search/c/libb.so0
-rw-r--r--lib/spack/spack/test/data/modules/dotkit/autoload_direct.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/dotkit/override_template.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/lmod/alter_environment.yaml27
-rw-r--r--lib/spack/spack/test/data/modules/lmod/autoload_all.yaml11
-rw-r--r--lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml10
-rw-r--r--lib/spack/spack/test/data/modules/lmod/blacklist.yaml12
-rw-r--r--lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml17
-rw-r--r--lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml6
-rw-r--r--lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/lmod/no_hash.yaml10
-rw-r--r--lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml11
-rw-r--r--lib/spack/spack/test/data/modules/lmod/override_template.yaml10
-rw-r--r--lib/spack/spack/test/data/modules/tcl/alter_environment.yaml22
-rw-r--r--lib/spack/spack/test/data/modules/tcl/autoload_all.yaml6
-rw-r--r--lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/tcl/blacklist.yaml10
-rw-r--r--lib/spack/spack/test/data/modules/tcl/conflicts.yaml8
-rw-r--r--lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml21
-rw-r--r--lib/spack/spack/test/data/modules/tcl/override_template.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml5
-rw-r--r--lib/spack/spack/test/data/modules/tcl/suffix.yaml7
-rw-r--r--lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml7
-rw-r--r--lib/spack/spack/test/data/patch/foo.patch7
-rw-r--r--lib/spack/spack/test/data/patch/foo.tgzbin0 -> 229 bytes
-rw-r--r--lib/spack/spack/test/data/sourceme_first.sh6
-rw-r--r--lib/spack/spack/test/data/sourceme_parameters.sh6
-rw-r--r--lib/spack/spack/test/data/sourceme_second.sh6
-rw-r--r--lib/spack/spack/test/data/sourceme_unicode.sh34
-rw-r--r--lib/spack/spack/test/data/templates/a.txt1
-rw-r--r--lib/spack/spack/test/data/templates/extension.tcl4
-rw-r--r--lib/spack/spack/test/data/templates/override.txt1
-rw-r--r--lib/spack/spack/test/data/templates_again/b.txt1
-rw-r--r--lib/spack/spack/test/data/templates_again/override_from_modules.txt1
-rw-r--r--lib/spack/spack/test/data/web/1.html10
-rw-r--r--lib/spack/spack/test/data/web/2.html12
-rw-r--r--lib/spack/spack/test/data/web/3.html11
-rw-r--r--lib/spack/spack/test/data/web/4.html11
-rw-r--r--lib/spack/spack/test/data/web/index.html10
-rw-r--r--lib/spack/spack/test/database.py91
-rw-r--r--lib/spack/spack/test/directory_layout.py73
-rw-r--r--lib/spack/spack/test/environment.py459
-rw-r--r--lib/spack/spack/test/file_cache.py86
-rw-r--r--lib/spack/spack/test/git_fetch.py96
-rw-r--r--lib/spack/spack/test/graph.py138
-rw-r--r--lib/spack/spack/test/hg_fetch.py56
-rw-r--r--lib/spack/spack/test/install.py205
-rw-r--r--lib/spack/spack/test/library_list.py111
-rw-r--r--lib/spack/spack/test/link_tree.py143
-rw-r--r--lib/spack/spack/test/llnl/util/file_list.py277
-rw-r--r--lib/spack/spack/test/llnl/util/lang.py96
-rw-r--r--lib/spack/spack/test/llnl/util/link_tree.py152
-rw-r--r--lib/spack/spack/test/llnl/util/lock.py902
-rw-r--r--lib/spack/spack/test/llnl/util/log.py100
-rw-r--r--lib/spack/spack/test/lock.py587
-rw-r--r--lib/spack/spack/test/make_executable.py10
-rw-r--r--lib/spack/spack/test/mirror.py45
-rw-r--r--lib/spack/spack/test/module_parsing.py148
-rw-r--r--lib/spack/spack/test/modules.py498
-rw-r--r--lib/spack/spack/test/modules/common.py53
-rw-r--r--lib/spack/spack/test/modules/conftest.py154
-rw-r--r--lib/spack/spack/test/modules/dotkit.py72
-rw-r--r--lib/spack/spack/test/modules/lmod.py248
-rw-r--r--lib/spack/spack/test/modules/tcl.py279
-rw-r--r--lib/spack/spack/test/multimethod.py19
-rw-r--r--lib/spack/spack/test/namespace_trie.py128
-rw-r--r--lib/spack/spack/test/optional_deps.py125
-rw-r--r--lib/spack/spack/test/package_sanity.py63
-rw-r--r--lib/spack/spack/test/packages.py210
-rw-r--r--lib/spack/spack/test/packaging.py378
-rw-r--r--lib/spack/spack/test/patch.py194
-rw-r--r--lib/spack/spack/test/pattern.py126
-rw-r--r--lib/spack/spack/test/provider_index.py13
-rw-r--r--lib/spack/spack/test/python_version.py207
-rw-r--r--lib/spack/spack/test/repo.py76
-rw-r--r--lib/spack/spack/test/sbang.py172
-rw-r--r--lib/spack/spack/test/spack_yaml.py142
-rw-r--r--lib/spack/spack/test/spec_dag.py445
-rw-r--r--lib/spack/spack/test/spec_semantics.py238
-rw-r--r--lib/spack/spack/test/spec_syntax.py201
-rw-r--r--lib/spack/spack/test/spec_yaml.py33
-rw-r--r--lib/spack/spack/test/stage.py126
-rw-r--r--lib/spack/spack/test/svn_fetch.py60
-rw-r--r--lib/spack/spack/test/tengine.py110
-rw-r--r--lib/spack/spack/test/test_activations.py271
-rw-r--r--lib/spack/spack/test/url_extrapolate.py101
-rw-r--r--lib/spack/spack/test/url_fetch.py109
-rw-r--r--lib/spack/spack/test/url_parse.py763
-rw-r--r--lib/spack/spack/test/url_substitution.py78
-rw-r--r--lib/spack/spack/test/util/filesystem.py61
-rw-r--r--lib/spack/spack/test/util/log_parser.py53
-rw-r--r--lib/spack/spack/test/util/prefix.py66
-rw-r--r--lib/spack/spack/test/variant.py713
-rw-r--r--lib/spack/spack/test/versions.py898
-rw-r--r--lib/spack/spack/test/web.py162
-rw-r--r--lib/spack/spack/url.py810
-rw-r--r--lib/spack/spack/util/__init__.py6
-rw-r--r--lib/spack/spack/util/compression.py6
-rw-r--r--lib/spack/spack/util/crypto.py32
-rw-r--r--lib/spack/spack/util/debug.py6
-rw-r--r--lib/spack/spack/util/environment.py33
-rw-r--r--lib/spack/spack/util/executable.py209
-rw-r--r--lib/spack/spack/util/gpg.py120
-rw-r--r--lib/spack/spack/util/log_parse.py93
-rw-r--r--lib/spack/spack/util/module_cmd.py201
-rw-r--r--lib/spack/spack/util/multiproc.py11
-rw-r--r--lib/spack/spack/util/naming.py59
-rw-r--r--lib/spack/spack/util/path.py10
-rw-r--r--lib/spack/spack/util/pattern.py80
-rw-r--r--lib/spack/spack/util/prefix.py85
-rw-r--r--lib/spack/spack/util/spack_json.py44
-rw-r--r--lib/spack/spack/util/spack_yaml.py24
-rw-r--r--lib/spack/spack/util/string.py6
-rw-r--r--lib/spack/spack/util/web.py283
-rw-r--r--lib/spack/spack/variant.py656
-rw-r--r--lib/spack/spack/version.py182
-rw-r--r--share/spack/docs/docker/module-file-tutorial/Dockerfile52
-rw-r--r--share/spack/docs/docker/module-file-tutorial/packages.yaml9
-rw-r--r--share/spack/docs/docker/module-file-tutorial/spack.sh8
-rw-r--r--share/spack/logo/spack-logo-text-64.pngbin18644 -> 0 bytes
-rw-r--r--share/spack/logo/spack-logo-text-bottom.svg66
-rw-r--r--share/spack/logo/spack-logo-text.svg64
-rw-r--r--share/spack/logo/spack-logo-white-text-48.pngbin12201 -> 0 bytes
-rw-r--r--share/spack/logo/spack-logo-white-text-bottom.svg66
-rw-r--r--share/spack/logo/spack-logo-white-text.svg64
-rw-r--r--share/spack/logo/spack-logo-white.svg61
-rw-r--r--share/spack/logo/spack-logo.svg61
-rwxr-xr-xshare/spack/qa/check_dependencies96
-rw-r--r--share/spack/qa/configuration/packages.yaml13
-rwxr-xr-xshare/spack/qa/run-build-tests29
-rwxr-xr-xshare/spack/qa/run-doc-tests31
-rwxr-xr-xshare/spack/qa/run-flake8-tests23
-rwxr-xr-xshare/spack/qa/run-unit-tests45
-rwxr-xr-xshare/spack/qa/setup.sh118
-rwxr-xr-xshare/spack/setup-env.csh18
-rwxr-xr-xshare/spack/setup-env.sh64
-rwxr-xr-xshare/spack/spack-completion.bash953
-rw-r--r--templates/modules/modulefile.dk31
-rw-r--r--templates/modules/modulefile.lua91
-rw-r--r--templates/modules/modulefile.tcl82
-rw-r--r--var/spack/gpg.mock/README.md3
-rw-r--r--var/spack/gpg.mock/data/content.txt1
-rw-r--r--var/spack/gpg.mock/data/content.txt.asc17
-rw-r--r--var/spack/gpg.mock/keys/external.key30
-rw-r--r--var/spack/gpg/README.md5
-rw-r--r--var/spack/repos/builtin.mock/packages/a/package.py45
-rw-r--r--var/spack/repos/builtin.mock/packages/b/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/boost/package.py83
-rw-r--r--var/spack/repos/builtin.mock/packages/build-error/package.py49
-rw-r--r--var/spack/repos/builtin.mock/packages/c/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/callpath/package.py9
-rw-r--r--var/spack/repos/builtin.mock/packages/canfail/package.py41
-rw-r--r--var/spack/repos/builtin.mock/packages/cmake-client/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/cmake/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/conflict-parent/package.py46
-rw-r--r--var/spack/repos/builtin.mock/packages/conflict/package.py46
-rw-r--r--var/spack/repos/builtin.mock/packages/conflicting-dependent/package.py41
-rw-r--r--var/spack/repos/builtin.mock/packages/dependency-install/package.py38
-rw-r--r--var/spack/repos/builtin.mock/packages/dependent-install/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/develop-test/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/direct-mpich/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dt-diamond-bottom/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dt-diamond-left/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dt-diamond-right/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dt-diamond/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtbuild1/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtbuild2/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtbuild3/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtlink1/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtlink2/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtlink3/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtlink4/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtlink5/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtrun1/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtrun2/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtrun3/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dttop/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dtuse/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/dyninst/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/e/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/extendee/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/extension1/package.py43
-rw-r--r--var/spack/repos/builtin.mock/packages/extension2/package.py44
-rw-r--r--var/spack/repos/builtin.mock/packages/externalmodule/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/externalprereq/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/externaltest/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/externaltool/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/externalvirtual/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/failing-build/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/fake/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/flake8/hyper-specific-patch-that-fixes-some-random-bug-that-probably-only-affects-one-user.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/flake8/package.py83
-rw-r--r--var/spack/repos/builtin.mock/packages/git-test/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/hg-test/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/hypre/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/indirect-mpich/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/libdwarf/package.py8
-rw-r--r--var/spack/repos/builtin.mock/packages/libelf/package.py15
-rw-r--r--var/spack/repos/builtin.mock/packages/mixedversions/package.py36
-rw-r--r--var/spack/repos/builtin.mock/packages/mpich/package.py8
-rw-r--r--var/spack/repos/builtin.mock/packages/mpich2/package.py8
-rw-r--r--var/spack/repos/builtin.mock/packages/mpileaks/package.py12
-rw-r--r--var/spack/repos/builtin.mock/packages/multi-provider-mpi/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/multimethod-base/package.py40
-rw-r--r--var/spack/repos/builtin.mock/packages/multimethod/package.py24
-rw-r--r--var/spack/repos/builtin.mock/packages/multivalue_variant/package.py59
-rw-r--r--var/spack/repos/builtin.mock/packages/netlib-blas/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/netlib-lapack/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/openblas-with-lapack/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/openblas/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/optional-dep-test/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/othervirtual/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/override-context-templates/package.py42
-rw-r--r--var/spack/repos/builtin.mock/packages/override-module-templates/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-a-dependency/foo.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-a-dependency/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-several-dependencies/bar.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-several-dependencies/baz.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-several-dependencies/foo.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch-several-dependencies/package.py60
-rw-r--r--var/spack/repos/builtin.mock/packages/patch/bar.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch/baz.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch/foo.patch1
-rw-r--r--var/spack/repos/builtin.mock/packages/patch/package.py41
-rw-r--r--var/spack/repos/builtin.mock/packages/patchelf/package.py41
-rw-r--r--var/spack/repos/builtin.mock/packages/printing-package/package.py45
-rw-r--r--var/spack/repos/builtin.mock/packages/python/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/singlevalue-variant-dependent/package.py39
-rw-r--r--var/spack/repos/builtin.mock/packages/svn-test/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/trivial-install-test-package/package.py6
-rw-r--r--var/spack/repos/builtin.mock/packages/url-list-test/package.py49
-rw-r--r--var/spack/repos/builtin.mock/packages/url-test/package.py35
-rw-r--r--var/spack/repos/builtin.mock/packages/zmpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/abinit/package.py148
-rw-r--r--var/spack/repos/builtin/packages/abyss/package.py59
-rw-r--r--var/spack/repos/builtin/packages/ack/package.py10
-rw-r--r--var/spack/repos/builtin/packages/activeharmony/package.py6
-rw-r--r--var/spack/repos/builtin/packages/adept-utils/package.py19
-rw-r--r--var/spack/repos/builtin/packages/adios/package.py162
-rw-r--r--var/spack/repos/builtin/packages/adios/python.patch10
-rw-r--r--var/spack/repos/builtin/packages/adios2/package.py119
-rw-r--r--var/spack/repos/builtin/packages/adlbx/package.py41
-rw-r--r--var/spack/repos/builtin/packages/adol-c/package.py76
-rw-r--r--var/spack/repos/builtin/packages/albert/package.py41
-rw-r--r--var/spack/repos/builtin/packages/alglib/Makefile20
-rw-r--r--var/spack/repos/builtin/packages/alglib/package.py61
-rw-r--r--var/spack/repos/builtin/packages/allinea-forge/package.py8
-rw-r--r--var/spack/repos/builtin/packages/allinea-reports/package.py8
-rw-r--r--var/spack/repos/builtin/packages/allpaths-lg/package.py45
-rw-r--r--var/spack/repos/builtin/packages/alquimia/package.py68
-rw-r--r--var/spack/repos/builtin/packages/alsa-lib/package.py36
-rw-r--r--var/spack/repos/builtin/packages/amg/package.py74
-rw-r--r--var/spack/repos/builtin/packages/amg2013/package.py77
-rw-r--r--var/spack/repos/builtin/packages/ampliconnoise/package.py67
-rw-r--r--var/spack/repos/builtin/packages/amr-exp-parabolic/package.py95
-rw-r--r--var/spack/repos/builtin/packages/amrex/package.py86
-rw-r--r--var/spack/repos/builtin/packages/andi/package.py42
-rw-r--r--var/spack/repos/builtin/packages/angsd/package.py50
-rw-r--r--var/spack/repos/builtin/packages/ant/package.py17
-rw-r--r--var/spack/repos/builtin/packages/antlr/gcc.patch15
-rw-r--r--var/spack/repos/builtin/packages/antlr/package.py29
-rw-r--r--var/spack/repos/builtin/packages/ape/package.py8
-rw-r--r--var/spack/repos/builtin/packages/apex/package.py38
-rw-r--r--var/spack/repos/builtin/packages/applewmproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/appres/package.py14
-rw-r--r--var/spack/repos/builtin/packages/apr-util/package.py98
-rw-r--r--var/spack/repos/builtin/packages/apr/package.py20
-rw-r--r--var/spack/repos/builtin/packages/archer/package.py49
-rw-r--r--var/spack/repos/builtin/packages/argtable/package.py36
-rw-r--r--var/spack/repos/builtin/packages/arlecore/package.py40
-rw-r--r--var/spack/repos/builtin/packages/armadillo/package.py44
-rw-r--r--var/spack/repos/builtin/packages/armadillo/undef_linux.patch4
-rw-r--r--var/spack/repos/builtin/packages/arpack-ng/package.py30
-rw-r--r--var/spack/repos/builtin/packages/arpack/package.py73
-rw-r--r--var/spack/repos/builtin/packages/ascent/package.py333
-rw-r--r--var/spack/repos/builtin/packages/asciidoc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/aspa/package.py71
-rw-r--r--var/spack/repos/builtin/packages/aspell/package.py85
-rw-r--r--var/spack/repos/builtin/packages/aspell6-de/package.py34
-rw-r--r--var/spack/repos/builtin/packages/aspell6-en/package.py34
-rw-r--r--var/spack/repos/builtin/packages/aspell6-es/package.py34
-rw-r--r--var/spack/repos/builtin/packages/assimp/package.py41
-rw-r--r--var/spack/repos/builtin/packages/astra/package.py6
-rw-r--r--var/spack/repos/builtin/packages/astral/astral.sh3
-rw-r--r--var/spack/repos/builtin/packages/astral/package.py64
-rw-r--r--var/spack/repos/builtin/packages/astyle/package.py19
-rw-r--r--var/spack/repos/builtin/packages/atk/package.py18
-rw-r--r--var/spack/repos/builtin/packages/atlas/package.py33
-rw-r--r--var/spack/repos/builtin/packages/atompaw/package.py8
-rw-r--r--var/spack/repos/builtin/packages/atop/package.py9
-rw-r--r--var/spack/repos/builtin/packages/augustus/package.py72
-rw-r--r--var/spack/repos/builtin/packages/autoconf/package.py33
-rw-r--r--var/spack/repos/builtin/packages/autodock-vina/main.patch29
-rw-r--r--var/spack/repos/builtin/packages/autodock-vina/package.py72
-rw-r--r--var/spack/repos/builtin/packages/autodock-vina/split.patch29
-rw-r--r--var/spack/repos/builtin/packages/autogen/package.py62
-rw-r--r--var/spack/repos/builtin/packages/automaded/package.py16
-rw-r--r--var/spack/repos/builtin/packages/automake/package.py19
-rw-r--r--var/spack/repos/builtin/packages/bamtools/package.py24
-rw-r--r--var/spack/repos/builtin/packages/bamutil/libstatgen-issue-9.patch11
-rw-r--r--var/spack/repos/builtin/packages/bamutil/package.py47
-rw-r--r--var/spack/repos/builtin/packages/bash-completion/package.py25
-rw-r--r--var/spack/repos/builtin/packages/bash/package.py32
-rw-r--r--var/spack/repos/builtin/packages/bats/package.py38
-rw-r--r--var/spack/repos/builtin/packages/bazel/package.py28
-rw-r--r--var/spack/repos/builtin/packages/bbcp/package.py6
-rw-r--r--var/spack/repos/builtin/packages/bbmap/package.py39
-rw-r--r--var/spack/repos/builtin/packages/bcftools/package.py14
-rw-r--r--var/spack/repos/builtin/packages/bcl2fastq2/cmake-macros.patch10
-rw-r--r--var/spack/repos/builtin/packages/bcl2fastq2/cxxConfigure-cmake.patch12
-rw-r--r--var/spack/repos/builtin/packages/bcl2fastq2/package.py110
-rw-r--r--var/spack/repos/builtin/packages/bdftopcf/package.py16
-rw-r--r--var/spack/repos/builtin/packages/bdw-gc/package.py22
-rw-r--r--var/spack/repos/builtin/packages/bear/package.py19
-rw-r--r--var/spack/repos/builtin/packages/beast2/package.py51
-rw-r--r--var/spack/repos/builtin/packages/bedtools2/package.py7
-rw-r--r--var/spack/repos/builtin/packages/beforelight/package.py14
-rw-r--r--var/spack/repos/builtin/packages/benchmark/package.py (renamed from var/spack/repos/builtin/packages/gbenchmark/package.py)35
-rw-r--r--var/spack/repos/builtin/packages/berkeley-db/package.py47
-rw-r--r--var/spack/repos/builtin/packages/bertini/package.py14
-rw-r--r--var/spack/repos/builtin/packages/bib2xhtml/package.py9
-rw-r--r--var/spack/repos/builtin/packages/bigreqsproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch52
-rw-r--r--var/spack/repos/builtin/packages/binutils/package.py46
-rw-r--r--var/spack/repos/builtin/packages/bioawk/package.py51
-rw-r--r--var/spack/repos/builtin/packages/bison/package.py24
-rw-r--r--var/spack/repos/builtin/packages/bison/pgi.patch10
-rw-r--r--var/spack/repos/builtin/packages/bison/secure_snprintf.patch15
-rw-r--r--var/spack/repos/builtin/packages/bitmap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/blast-plus/blast-make-fix2.5.0.diff22
-rw-r--r--var/spack/repos/builtin/packages/blast-plus/package.py221
-rw-r--r--var/spack/repos/builtin/packages/blat/package.py44
-rw-r--r--var/spack/repos/builtin/packages/blaze/package.py58
-rw-r--r--var/spack/repos/builtin/packages/bliss/package.py6
-rw-r--r--var/spack/repos/builtin/packages/blitz/package.py6
-rw-r--r--var/spack/repos/builtin/packages/bml/package.py62
-rw-r--r--var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch290
-rw-r--r--var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch250
-rw-r--r--var/spack/repos/builtin/packages/boost/call_once_variadic.patch (renamed from var/spack/repos/builtin/packages/boost/boost_10125.patch)6
-rw-r--r--var/spack/repos/builtin/packages/boost/package.py115
-rw-r--r--var/spack/repos/builtin/packages/boost/python_jam.patch42
-rw-r--r--var/spack/repos/builtin/packages/boost/python_jam_pre156.patch42
-rw-r--r--var/spack/repos/builtin/packages/boost/xl_1_62_0_le.patch787
-rw-r--r--var/spack/repos/builtin/packages/boostmplcartesianproduct/package.py40
-rw-r--r--var/spack/repos/builtin/packages/bowtie/package.py53
-rw-r--r--var/spack/repos/builtin/packages/bowtie2/bowtie2-2.2.5.patch (renamed from var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch)0
-rw-r--r--var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.0.patch16
-rw-r--r--var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.1.patch17
-rw-r--r--var/spack/repos/builtin/packages/bowtie2/package.py51
-rw-r--r--var/spack/repos/builtin/packages/boxlib/package.py15
-rw-r--r--var/spack/repos/builtin/packages/bpp-core/package.py16
-rw-r--r--var/spack/repos/builtin/packages/bpp-phyl/package.py16
-rw-r--r--var/spack/repos/builtin/packages/bpp-seq/package.py16
-rw-r--r--var/spack/repos/builtin/packages/bpp-suite/package.py15
-rw-r--r--var/spack/repos/builtin/packages/braker/package.py52
-rw-r--r--var/spack/repos/builtin/packages/branson/package.py61
-rw-r--r--var/spack/repos/builtin/packages/brigand/package.py45
-rw-r--r--var/spack/repos/builtin/packages/bsseeker2/package.py49
-rw-r--r--var/spack/repos/builtin/packages/bucky/package.py57
-rw-r--r--var/spack/repos/builtin/packages/busco/package.py59
-rw-r--r--var/spack/repos/builtin/packages/butter/package.py46
-rw-r--r--var/spack/repos/builtin/packages/bwa/package.py19
-rw-r--r--var/spack/repos/builtin/packages/byobu/package.py37
-rw-r--r--var/spack/repos/builtin/packages/bzip2/package.py57
-rw-r--r--var/spack/repos/builtin/packages/c-blosc/package.py46
-rw-r--r--var/spack/repos/builtin/packages/caffe/package.py103
-rw-r--r--var/spack/repos/builtin/packages/cairo/package.py11
-rw-r--r--var/spack/repos/builtin/packages/caliper/package.py66
-rw-r--r--var/spack/repos/builtin/packages/callpath/package.py34
-rw-r--r--var/spack/repos/builtin/packages/candle-benchmarks/package.py52
-rw-r--r--var/spack/repos/builtin/packages/cantera/package.py155
-rw-r--r--var/spack/repos/builtin/packages/canu/package.py61
-rw-r--r--var/spack/repos/builtin/packages/cap3/package.py43
-rw-r--r--var/spack/repos/builtin/packages/cares/package.py41
-rw-r--r--var/spack/repos/builtin/packages/cask/package.py6
-rw-r--r--var/spack/repos/builtin/packages/catch/package.py23
-rw-r--r--var/spack/repos/builtin/packages/cbench/package.py92
-rw-r--r--var/spack/repos/builtin/packages/cblas/package.py6
-rw-r--r--var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py97
-rw-r--r--var/spack/repos/builtin/packages/cbtf-argonavis/package.py103
-rw-r--r--var/spack/repos/builtin/packages/cbtf-krell/package.py198
-rw-r--r--var/spack/repos/builtin/packages/cbtf-lanl/package.py87
-rw-r--r--var/spack/repos/builtin/packages/cbtf/package.py124
-rw-r--r--var/spack/repos/builtin/packages/ccache/package.py11
-rw-r--r--var/spack/repos/builtin/packages/cctools/package.py67
-rw-r--r--var/spack/repos/builtin/packages/cdbfasta/package.py39
-rw-r--r--var/spack/repos/builtin/packages/cdd/package.py10
-rw-r--r--var/spack/repos/builtin/packages/cddlib/package.py29
-rw-r--r--var/spack/repos/builtin/packages/cdhit/package.py49
-rw-r--r--var/spack/repos/builtin/packages/cdo/package.py149
-rw-r--r--var/spack/repos/builtin/packages/cereal/Boost.patch14
-rw-r--r--var/spack/repos/builtin/packages/cereal/Boost2.patch10
-rw-r--r--var/spack/repos/builtin/packages/cereal/package.py40
-rw-r--r--var/spack/repos/builtin/packages/cereal/pointers.patch (renamed from var/spack/repos/builtin/packages/cereal/Werror.patch)14
-rw-r--r--var/spack/repos/builtin/packages/cfitsio/package.py37
-rw-r--r--var/spack/repos/builtin/packages/cgal/package.py36
-rw-r--r--var/spack/repos/builtin/packages/cgm/package.py56
-rw-r--r--var/spack/repos/builtin/packages/cgns/package.py34
-rw-r--r--var/spack/repos/builtin/packages/charm/package.py88
-rw-r--r--var/spack/repos/builtin/packages/check/package.py39
-rw-r--r--var/spack/repos/builtin/packages/chlorop/chlorop.patch36
-rw-r--r--var/spack/repos/builtin/packages/chlorop/package.py53
-rw-r--r--var/spack/repos/builtin/packages/chombo/Make.defs.local.template.patch23
-rw-r--r--var/spack/repos/builtin/packages/chombo/hdf5-16api.patch12
-rw-r--r--var/spack/repos/builtin/packages/chombo/package.py140
-rw-r--r--var/spack/repos/builtin/packages/cityhash/package.py16
-rw-r--r--var/spack/repos/builtin/packages/clamr/package.py78
-rw-r--r--var/spack/repos/builtin/packages/cleaveland4/package.py48
-rw-r--r--var/spack/repos/builtin/packages/cleverleaf/package.py21
-rw-r--r--var/spack/repos/builtin/packages/clfft/package.py53
-rw-r--r--var/spack/repos/builtin/packages/clhep/package.py52
-rw-r--r--var/spack/repos/builtin/packages/cloc/package.py50
-rw-r--r--var/spack/repos/builtin/packages/cloog/package.py6
-rw-r--r--var/spack/repos/builtin/packages/cloverleaf/package.py110
-rw-r--r--var/spack/repos/builtin/packages/cloverleaf3d/package.py93
-rw-r--r--var/spack/repos/builtin/packages/clustalo/package.py36
-rw-r--r--var/spack/repos/builtin/packages/clustalw/package.py34
-rw-r--r--var/spack/repos/builtin/packages/cmake/package.py97
-rw-r--r--var/spack/repos/builtin/packages/cmocka/package.py22
-rw-r--r--var/spack/repos/builtin/packages/cmor/package.py10
-rw-r--r--var/spack/repos/builtin/packages/cnmem/package.py13
-rw-r--r--var/spack/repos/builtin/packages/cnpy/package.py34
-rw-r--r--var/spack/repos/builtin/packages/cns-nospec/package.py109
-rw-r--r--var/spack/repos/builtin/packages/cntk/build.patch386
-rw-r--r--var/spack/repos/builtin/packages/cntk/kaldireader-openblas.patch32
-rw-r--r--var/spack/repos/builtin/packages/cntk/lock-file.patch20
-rw-r--r--var/spack/repos/builtin/packages/cntk/package.py123
-rw-r--r--var/spack/repos/builtin/packages/cntk1bitsgd/package.py44
-rw-r--r--var/spack/repos/builtin/packages/codar-cheetah/package.py45
-rw-r--r--var/spack/repos/builtin/packages/coevp/package.py89
-rw-r--r--var/spack/repos/builtin/packages/cohmm/package.py61
-rw-r--r--var/spack/repos/builtin/packages/coinhsl/package.py47
-rw-r--r--var/spack/repos/builtin/packages/comd/package.py112
-rw-r--r--var/spack/repos/builtin/packages/compiz/package.py14
-rw-r--r--var/spack/repos/builtin/packages/compositeproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/conduit/package.py90
-rw-r--r--var/spack/repos/builtin/packages/constype/package.py14
-rw-r--r--var/spack/repos/builtin/packages/converge/package.py209
-rw-r--r--var/spack/repos/builtin/packages/coreutils/package.py16
-rw-r--r--var/spack/repos/builtin/packages/corset/package.py44
-rw-r--r--var/spack/repos/builtin/packages/cosmomc/Makefile.patch26
-rw-r--r--var/spack/repos/builtin/packages/cosmomc/errorstop.patch11
-rw-r--r--var/spack/repos/builtin/packages/cosmomc/package.py210
-rw-r--r--var/spack/repos/builtin/packages/cosp2/package.py74
-rw-r--r--var/spack/repos/builtin/packages/cp2k/package.py114
-rw-r--r--var/spack/repos/builtin/packages/cppad/package.py13
-rw-r--r--var/spack/repos/builtin/packages/cppcheck/package.py15
-rw-r--r--var/spack/repos/builtin/packages/cpprestsdk/package.py41
-rw-r--r--var/spack/repos/builtin/packages/cppunit/package.py6
-rw-r--r--var/spack/repos/builtin/packages/cppzmq/package.py40
-rw-r--r--var/spack/repos/builtin/packages/cram/package.py19
-rw-r--r--var/spack/repos/builtin/packages/cryptopp/package.py7
-rw-r--r--var/spack/repos/builtin/packages/cscope/package.py15
-rw-r--r--var/spack/repos/builtin/packages/csdp/package.py43
-rw-r--r--var/spack/repos/builtin/packages/cub/package.py41
-rw-r--r--var/spack/repos/builtin/packages/cube/package.py41
-rw-r--r--var/spack/repos/builtin/packages/cuda-memtest/package.py45
-rw-r--r--var/spack/repos/builtin/packages/cuda/package.py39
-rw-r--r--var/spack/repos/builtin/packages/cudnn/package.py43
-rw-r--r--var/spack/repos/builtin/packages/cufflinks/package.py46
-rw-r--r--var/spack/repos/builtin/packages/cups/package.py44
-rw-r--r--var/spack/repos/builtin/packages/curl/package.py33
-rw-r--r--var/spack/repos/builtin/packages/cvs/package.py36
-rw-r--r--var/spack/repos/builtin/packages/czmq/package.py40
-rw-r--r--var/spack/repos/builtin/packages/dakota/package.py42
-rw-r--r--var/spack/repos/builtin/packages/daligner/package.py51
-rw-r--r--var/spack/repos/builtin/packages/damageproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/damselfly/package.py16
-rw-r--r--var/spack/repos/builtin/packages/darshan-runtime/package.py8
-rw-r--r--var/spack/repos/builtin/packages/darshan-util/package.py8
-rw-r--r--var/spack/repos/builtin/packages/dash/package.py48
-rw-r--r--var/spack/repos/builtin/packages/datamash/package.py13
-rw-r--r--var/spack/repos/builtin/packages/dataspaces/package.py91
-rw-r--r--var/spack/repos/builtin/packages/dbus/package.py6
-rw-r--r--var/spack/repos/builtin/packages/dealii/package.py172
-rw-r--r--var/spack/repos/builtin/packages/dejagnu/package.py43
-rw-r--r--var/spack/repos/builtin/packages/delly2/package.py65
-rw-r--r--var/spack/repos/builtin/packages/dia/package.py24
-rw-r--r--var/spack/repos/builtin/packages/dialign-tx/package.py52
-rw-r--r--var/spack/repos/builtin/packages/direnv/package.py39
-rw-r--r--var/spack/repos/builtin/packages/discovar/package.py36
-rw-r--r--var/spack/repos/builtin/packages/dlpack/package.py37
-rw-r--r--var/spack/repos/builtin/packages/dmlc-core/cmake.patch21
-rw-r--r--var/spack/repos/builtin/packages/dmlc-core/package.py57
-rw-r--r--var/spack/repos/builtin/packages/dmxproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/docbook-xml/package.py10
-rw-r--r--var/spack/repos/builtin/packages/docbook-xsl/package.py10
-rw-r--r--var/spack/repos/builtin/packages/dos2unix/package.py37
-rw-r--r--var/spack/repos/builtin/packages/double-conversion/package.py50
-rw-r--r--var/spack/repos/builtin/packages/doxygen/package.py14
-rw-r--r--var/spack/repos/builtin/packages/dri2proto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/dri3proto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/dtcmp/package.py7
-rw-r--r--var/spack/repos/builtin/packages/dyninst/package.py20
-rw-r--r--var/spack/repos/builtin/packages/ea-utils/package.py51
-rw-r--r--var/spack/repos/builtin/packages/easybuild/package.py38
-rw-r--r--var/spack/repos/builtin/packages/ebms/package.py69
-rw-r--r--var/spack/repos/builtin/packages/eccodes/enable_only_jasper.patch26
-rw-r--r--var/spack/repos/builtin/packages/eccodes/enable_only_openjpeg.patch32
-rw-r--r--var/spack/repos/builtin/packages/eccodes/package.py94
-rw-r--r--var/spack/repos/builtin/packages/ecp-proxy-apps/package.py65
-rw-r--r--var/spack/repos/builtin/packages/editres/package.py14
-rw-r--r--var/spack/repos/builtin/packages/eigen/package.py38
-rw-r--r--var/spack/repos/builtin/packages/elemental/cmake_0.87.7.patch22
-rw-r--r--var/spack/repos/builtin/packages/elemental/elemental_cublas.patch668
-rw-r--r--var/spack/repos/builtin/packages/elemental/package.py172
-rw-r--r--var/spack/repos/builtin/packages/elfutils/package.py35
-rw-r--r--var/spack/repos/builtin/packages/elk/package.py27
-rw-r--r--var/spack/repos/builtin/packages/elpa/package.py87
-rw-r--r--var/spack/repos/builtin/packages/emacs/package.py34
-rw-r--r--var/spack/repos/builtin/packages/emboss/package.py40
-rw-r--r--var/spack/repos/builtin/packages/encodings/package.py6
-rw-r--r--var/spack/repos/builtin/packages/environment-modules/package.py11
-rw-r--r--var/spack/repos/builtin/packages/es/package.py41
-rw-r--r--var/spack/repos/builtin/packages/esmf/gcc.patch26
-rw-r--r--var/spack/repos/builtin/packages/esmf/mvapich2.patch225
-rw-r--r--var/spack/repos/builtin/packages/esmf/package.py256
-rw-r--r--var/spack/repos/builtin/packages/espresso/dspev_drv_elpa.patch42
-rw-r--r--var/spack/repos/builtin/packages/espresso/package.py121
-rw-r--r--var/spack/repos/builtin/packages/etsf-io/package.py6
-rw-r--r--var/spack/repos/builtin/packages/everytrace-example/package.py10
-rw-r--r--var/spack/repos/builtin/packages/everytrace/package.py10
-rw-r--r--var/spack/repos/builtin/packages/evieext/package.py13
-rw-r--r--var/spack/repos/builtin/packages/exabayes/package.py57
-rw-r--r--var/spack/repos/builtin/packages/exampm/package.py37
-rw-r--r--var/spack/repos/builtin/packages/exasp2/package.py94
-rw-r--r--var/spack/repos/builtin/packages/exmcutils/package.py37
-rw-r--r--var/spack/repos/builtin/packages/exodusii/cmake-exodus.patch9
-rw-r--r--var/spack/repos/builtin/packages/exodusii/package.py42
-rw-r--r--var/spack/repos/builtin/packages/exonerate/package.py8
-rw-r--r--var/spack/repos/builtin/packages/expat/package.py30
-rw-r--r--var/spack/repos/builtin/packages/expect/expect_detect_tcl_private_header_os_x_mountain_lion.patch23
-rw-r--r--var/spack/repos/builtin/packages/expect/package.py79
-rw-r--r--var/spack/repos/builtin/packages/extrae/package.py33
-rw-r--r--var/spack/repos/builtin/packages/exuberant-ctags/package.py14
-rw-r--r--var/spack/repos/builtin/packages/f90cache/package.py38
-rw-r--r--var/spack/repos/builtin/packages/falcon/package.py51
-rw-r--r--var/spack/repos/builtin/packages/farmhash/CMakeLists.txt25
-rw-r--r--var/spack/repos/builtin/packages/farmhash/package.py42
-rw-r--r--var/spack/repos/builtin/packages/fastjar/package.py36
-rw-r--r--var/spack/repos/builtin/packages/fastmath/package.py65
-rw-r--r--var/spack/repos/builtin/packages/fastme/package.py42
-rw-r--r--var/spack/repos/builtin/packages/fastphase/package.py39
-rw-r--r--var/spack/repos/builtin/packages/fastq-screen/package.py46
-rw-r--r--var/spack/repos/builtin/packages/fastqc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/fastqvalidator/package.py55
-rw-r--r--var/spack/repos/builtin/packages/fastx-toolkit/package.py14
-rw-r--r--var/spack/repos/builtin/packages/fenics/package.py51
-rw-r--r--var/spack/repos/builtin/packages/ferret/package.py24
-rw-r--r--var/spack/repos/builtin/packages/ffmpeg/package.py49
-rw-r--r--var/spack/repos/builtin/packages/fftw/package.py122
-rw-r--r--var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch121
-rw-r--r--var/spack/repos/builtin/packages/fimpute/package.py40
-rw-r--r--var/spack/repos/builtin/packages/findutils/package.py53
-rw-r--r--var/spack/repos/builtin/packages/fio/package.py56
-rw-r--r--var/spack/repos/builtin/packages/fish/package.py16
-rw-r--r--var/spack/repos/builtin/packages/fixesproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/flac/package.py39
-rw-r--r--var/spack/repos/builtin/packages/flang/package.py82
-rw-r--r--var/spack/repos/builtin/packages/flann/package.py149
-rw-r--r--var/spack/repos/builtin/packages/flash/package.py42
-rw-r--r--var/spack/repos/builtin/packages/flecsale/package.py58
-rw-r--r--var/spack/repos/builtin/packages/flecsi/package.py59
-rw-r--r--var/spack/repos/builtin/packages/flex/package.py38
-rw-r--r--var/spack/repos/builtin/packages/flint/package.py6
-rw-r--r--var/spack/repos/builtin/packages/fltk/package.py6
-rw-r--r--var/spack/repos/builtin/packages/flux/package.py33
-rw-r--r--var/spack/repos/builtin/packages/fmt/package.py47
-rw-r--r--var/spack/repos/builtin/packages/foam-extend/package.py546
-rw-r--r--var/spack/repos/builtin/packages/folly/package.py65
-rw-r--r--var/spack/repos/builtin/packages/font-adobe-100dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-adobe-75dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-adobe-utopia-100dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-adobe-utopia-75dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-adobe-utopia-type1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-alias/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-arabic-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-100dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-75dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-lucidatypewriter-100dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-lucidatypewriter-75dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-ttf/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bh-type1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bitstream-100dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bitstream-75dpi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bitstream-speedo/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-bitstream-type1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-cronyx-cyrillic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-cursor-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-daewoo-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-dec-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-ibm-type1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-isas-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-jis-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-micro-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-misc-cyrillic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-misc-ethiopic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-misc-meltho/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-misc-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-mutt-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-schumacher-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-screen-cyrillic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-sony-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-sun-misc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-util/package.py14
-rw-r--r--var/spack/repos/builtin/packages/font-winitzki-cyrillic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/font-xfree86-type1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/fontcacheproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/fontconfig/package.py31
-rw-r--r--var/spack/repos/builtin/packages/fontsproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/fonttosfnt/package.py14
-rw-r--r--var/spack/repos/builtin/packages/fpc/package.py54
-rw-r--r--var/spack/repos/builtin/packages/freebayes/package.py51
-rw-r--r--var/spack/repos/builtin/packages/freetype/package.py13
-rw-r--r--var/spack/repos/builtin/packages/fseq/package.py41
-rw-r--r--var/spack/repos/builtin/packages/fsl/package.py102
-rw-r--r--var/spack/repos/builtin/packages/fslsfonts/package.py14
-rw-r--r--var/spack/repos/builtin/packages/fstobdf/package.py14
-rw-r--r--var/spack/repos/builtin/packages/funhpc/package.py63
-rw-r--r--var/spack/repos/builtin/packages/gapcloser/package.py39
-rw-r--r--var/spack/repos/builtin/packages/gapfiller/package.py52
-rw-r--r--var/spack/repos/builtin/packages/gasnet/package.py65
-rw-r--r--var/spack/repos/builtin/packages/gaussian/package.py71
-rw-r--r--var/spack/repos/builtin/packages/gawk/package.py16
-rw-r--r--var/spack/repos/builtin/packages/gblocks/package.py40
-rw-r--r--var/spack/repos/builtin/packages/gcc/darwin/apfs.patch12
-rw-r--r--var/spack/repos/builtin/packages/gcc/darwin/gcc-6.1.0-jit.patch21
-rw-r--r--var/spack/repos/builtin/packages/gcc/darwin/gcc-7.1.0-headerpad.patch19
-rw-r--r--var/spack/repos/builtin/packages/gcc/package.py283
-rw-r--r--var/spack/repos/builtin/packages/gccmakedep/package.py14
-rw-r--r--var/spack/repos/builtin/packages/gccxml/darwin-gcc.patch11
-rw-r--r--var/spack/repos/builtin/packages/gccxml/package.py36
-rw-r--r--var/spack/repos/builtin/packages/gconf/package.py16
-rw-r--r--var/spack/repos/builtin/packages/gdal/package.py10
-rw-r--r--var/spack/repos/builtin/packages/gdb/package.py7
-rw-r--r--var/spack/repos/builtin/packages/gdbm/package.py53
-rw-r--r--var/spack/repos/builtin/packages/gdk-pixbuf/package.py22
-rw-r--r--var/spack/repos/builtin/packages/geant4/package.py79
-rw-r--r--var/spack/repos/builtin/packages/gearshifft/package.py74
-rw-r--r--var/spack/repos/builtin/packages/gemmlowp/package.py40
-rw-r--r--var/spack/repos/builtin/packages/genemark-et/package.py53
-rw-r--r--var/spack/repos/builtin/packages/genometools/package.py45
-rw-r--r--var/spack/repos/builtin/packages/geos/package.py11
-rw-r--r--var/spack/repos/builtin/packages/gettext/package.py23
-rw-r--r--var/spack/repos/builtin/packages/gettext/test-verify-parallel-make-check.patch61
-rw-r--r--var/spack/repos/builtin/packages/gflags/package.py18
-rw-r--r--var/spack/repos/builtin/packages/ghostscript-fonts/package.py8
-rw-r--r--var/spack/repos/builtin/packages/ghostscript/package.py54
-rw-r--r--var/spack/repos/builtin/packages/giflib/package.py14
-rw-r--r--var/spack/repos/builtin/packages/git-lfs/package.py12
-rw-r--r--var/spack/repos/builtin/packages/git/package.py219
-rw-r--r--var/spack/repos/builtin/packages/gl2ps/package.py45
-rw-r--r--var/spack/repos/builtin/packages/glew/package.py6
-rw-r--r--var/spack/repos/builtin/packages/glib/no-Werror=format-security.patch19
-rw-r--r--var/spack/repos/builtin/packages/glib/package.py54
-rw-r--r--var/spack/repos/builtin/packages/glm/package.py20
-rw-r--r--var/spack/repos/builtin/packages/global/package.py6
-rw-r--r--var/spack/repos/builtin/packages/globalarrays/ibm-xl.patch250
-rw-r--r--var/spack/repos/builtin/packages/globalarrays/package.py66
-rw-r--r--var/spack/repos/builtin/packages/globus-toolkit/package.py13
-rw-r--r--var/spack/repos/builtin/packages/glog/package.py19
-rw-r--r--var/spack/repos/builtin/packages/glpk/package.py32
-rw-r--r--var/spack/repos/builtin/packages/glproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/gmake/package.py41
-rw-r--r--var/spack/repos/builtin/packages/gmap-gsnap/package.py36
-rw-r--r--var/spack/repos/builtin/packages/gmime/package.py39
-rw-r--r--var/spack/repos/builtin/packages/gmp/package.py15
-rw-r--r--var/spack/repos/builtin/packages/gmsh/package.py15
-rw-r--r--var/spack/repos/builtin/packages/gnat/package.py51
-rw-r--r--var/spack/repos/builtin/packages/gnu-prolog/package.py6
-rw-r--r--var/spack/repos/builtin/packages/gnupg/package.py50
-rw-r--r--var/spack/repos/builtin/packages/gnuplot/package.py116
-rw-r--r--var/spack/repos/builtin/packages/gnuplot/term_include.patch11
-rw-r--r--var/spack/repos/builtin/packages/gnutls/package.py79
-rw-r--r--var/spack/repos/builtin/packages/go-bootstrap/package.py20
-rw-r--r--var/spack/repos/builtin/packages/go/package.py46
-rw-r--r--var/spack/repos/builtin/packages/gobject-introspection/package.py44
-rw-r--r--var/spack/repos/builtin/packages/gobject-introspection/sbang.patch11
-rw-r--r--var/spack/repos/builtin/packages/googletest/package.py47
-rw-r--r--var/spack/repos/builtin/packages/gource/package.py30
-rw-r--r--var/spack/repos/builtin/packages/gperf/package.py15
-rw-r--r--var/spack/repos/builtin/packages/gperftools/package.py13
-rw-r--r--var/spack/repos/builtin/packages/grackle/package.py6
-rw-r--r--var/spack/repos/builtin/packages/gradle/package.py83
-rw-r--r--var/spack/repos/builtin/packages/grandr/package.py15
-rw-r--r--var/spack/repos/builtin/packages/graphlib/package.py16
-rw-r--r--var/spack/repos/builtin/packages/graphmap/package.py43
-rw-r--r--var/spack/repos/builtin/packages/graphviz/package.py141
-rw-r--r--var/spack/repos/builtin/packages/grib-api/package.py46
-rw-r--r--var/spack/repos/builtin/packages/groff/gropdf.patch13
-rw-r--r--var/spack/repos/builtin/packages/groff/package.py61
-rw-r--r--var/spack/repos/builtin/packages/gromacs/package.py29
-rw-r--r--var/spack/repos/builtin/packages/gsl/package.py7
-rw-r--r--var/spack/repos/builtin/packages/gtkorvo-atl/package.py44
-rw-r--r--var/spack/repos/builtin/packages/gtkorvo-cercs-env/package.py41
-rw-r--r--var/spack/repos/builtin/packages/gtkorvo-dill/package.py43
-rw-r--r--var/spack/repos/builtin/packages/gtkorvo-enet/package.py38
-rw-r--r--var/spack/repos/builtin/packages/gtkplus/no-demos.patch11
-rw-r--r--var/spack/repos/builtin/packages/gtkplus/package.py23
-rw-r--r--var/spack/repos/builtin/packages/gts/package.py13
-rw-r--r--var/spack/repos/builtin/packages/guidance/package.py66
-rw-r--r--var/spack/repos/builtin/packages/guile/package.py25
-rw-r--r--var/spack/repos/builtin/packages/h5hut/package.py8
-rw-r--r--var/spack/repos/builtin/packages/h5part/mpiio.patch26
-rw-r--r--var/spack/repos/builtin/packages/h5part/package.py46
-rw-r--r--var/spack/repos/builtin/packages/h5utils/package.py73
-rw-r--r--var/spack/repos/builtin/packages/h5z-zfp/package.py64
-rw-r--r--var/spack/repos/builtin/packages/hacckernels/package.py46
-rw-r--r--var/spack/repos/builtin/packages/hadoop/package.py8
-rw-r--r--var/spack/repos/builtin/packages/hapcut2/package.py44
-rw-r--r--var/spack/repos/builtin/packages/haploview/haploview.sh3
-rw-r--r--var/spack/repos/builtin/packages/haploview/package.py54
-rw-r--r--var/spack/repos/builtin/packages/harfbuzz/package.py14
-rw-r--r--var/spack/repos/builtin/packages/harminv/package.py23
-rw-r--r--var/spack/repos/builtin/packages/hdf/package.py33
-rw-r--r--var/spack/repos/builtin/packages/hdf5-blosc/package.py42
-rw-r--r--var/spack/repos/builtin/packages/hdf5/package.py255
-rw-r--r--var/spack/repos/builtin/packages/help2man/package.py6
-rw-r--r--var/spack/repos/builtin/packages/hepmc/package.py27
-rw-r--r--var/spack/repos/builtin/packages/heppdt/package.py14
-rw-r--r--var/spack/repos/builtin/packages/highfive/package.py52
-rw-r--r--var/spack/repos/builtin/packages/highwayhash/package.py62
-rw-r--r--var/spack/repos/builtin/packages/hisat2/package.py63
-rw-r--r--var/spack/repos/builtin/packages/hmmer/package.py6
-rw-r--r--var/spack/repos/builtin/packages/hoomd-blue/package.py66
-rw-r--r--var/spack/repos/builtin/packages/hpccg/package.py77
-rw-r--r--var/spack/repos/builtin/packages/hpctoolkit-externals/package.py13
-rw-r--r--var/spack/repos/builtin/packages/hpctoolkit/package.py15
-rw-r--r--var/spack/repos/builtin/packages/hpgmg/package.py87
-rw-r--r--var/spack/repos/builtin/packages/hpl/package.py36
-rw-r--r--var/spack/repos/builtin/packages/hpx/package.py42
-rw-r--r--var/spack/repos/builtin/packages/hpx5/configure.patch36
-rw-r--r--var/spack/repos/builtin/packages/hpx5/package.py110
-rw-r--r--var/spack/repos/builtin/packages/hsakmt/package.py14
-rw-r--r--var/spack/repos/builtin/packages/hstr/package.py43
-rw-r--r--var/spack/repos/builtin/packages/htop/package.py16
-rw-r--r--var/spack/repos/builtin/packages/htslib/package.py31
-rw-r--r--var/spack/repos/builtin/packages/httpie/package.py48
-rw-r--r--var/spack/repos/builtin/packages/hub/package.py6
-rw-r--r--var/spack/repos/builtin/packages/hunspell/package.py39
-rw-r--r--var/spack/repos/builtin/packages/hwloc/package.py43
-rw-r--r--var/spack/repos/builtin/packages/hybpiper/package.py59
-rw-r--r--var/spack/repos/builtin/packages/hydra/package.py16
-rw-r--r--var/spack/repos/builtin/packages/hypre/ibm-ppc64le.patch12
-rw-r--r--var/spack/repos/builtin/packages/hypre/package.py33
-rw-r--r--var/spack/repos/builtin/packages/ibmisc/package.py10
-rw-r--r--var/spack/repos/builtin/packages/iceauth/package.py14
-rw-r--r--var/spack/repos/builtin/packages/icedtea/package.py181
-rw-r--r--var/spack/repos/builtin/packages/icet/package.py16
-rw-r--r--var/spack/repos/builtin/packages/ico/package.py14
-rw-r--r--var/spack/repos/builtin/packages/icu4c/package.py28
-rw-r--r--var/spack/repos/builtin/packages/id3lib/id3lib-3.8.3_gcc4.diff102
-rw-r--r--var/spack/repos/builtin/packages/id3lib/package.py40
-rw-r--r--var/spack/repos/builtin/packages/idba/package.py48
-rw-r--r--var/spack/repos/builtin/packages/igraph/package.py36
-rw-r--r--var/spack/repos/builtin/packages/ilmbase/package.py12
-rw-r--r--var/spack/repos/builtin/packages/image-magick/package.py23
-rw-r--r--var/spack/repos/builtin/packages/imake/package.py14
-rw-r--r--var/spack/repos/builtin/packages/impute2/package.py39
-rw-r--r--var/spack/repos/builtin/packages/infernal/package.py49
-rw-r--r--var/spack/repos/builtin/packages/inputproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/intel-daal/package.py86
-rw-r--r--var/spack/repos/builtin/packages/intel-gpu-tools/package.py18
-rw-r--r--var/spack/repos/builtin/packages/intel-ipp/package.py82
-rw-r--r--var/spack/repos/builtin/packages/intel-mkl/package.py210
-rw-r--r--var/spack/repos/builtin/packages/intel-mpi/package.py137
-rw-r--r--var/spack/repos/builtin/packages/intel-parallel-studio/package.py746
-rw-r--r--var/spack/repos/builtin/packages/intel-tbb/package.py (renamed from var/spack/repos/builtin/packages/tbb/package.py)24
-rw-r--r--var/spack/repos/builtin/packages/intel-tbb/tbb_gcc_rtm_key.patch23
-rw-r--r--var/spack/repos/builtin/packages/intel/package.py214
-rw-r--r--var/spack/repos/builtin/packages/intltool/package.py48
-rw-r--r--var/spack/repos/builtin/packages/ior/package.py37
-rw-r--r--var/spack/repos/builtin/packages/iozone/package.py53
-rw-r--r--var/spack/repos/builtin/packages/ipopt/ipopt_ppc_build.patch26
-rw-r--r--var/spack/repos/builtin/packages/ipopt/package.py33
-rw-r--r--var/spack/repos/builtin/packages/isaac-server/jpeg.patch34
-rw-r--r--var/spack/repos/builtin/packages/isaac-server/package.py55
-rw-r--r--var/spack/repos/builtin/packages/isaac/package.py58
-rw-r--r--var/spack/repos/builtin/packages/isl/package.py26
-rw-r--r--var/spack/repos/builtin/packages/itstool/package.py13
-rw-r--r--var/spack/repos/builtin/packages/itsx/package.py44
-rw-r--r--var/spack/repos/builtin/packages/jags/package.py44
-rw-r--r--var/spack/repos/builtin/packages/jansson/package.py15
-rw-r--r--var/spack/repos/builtin/packages/jasper/package.py27
-rw-r--r--var/spack/repos/builtin/packages/jdk/package.py35
-rw-r--r--var/spack/repos/builtin/packages/jellyfish/package.py38
-rw-r--r--var/spack/repos/builtin/packages/jemalloc/package.py8
-rw-r--r--var/spack/repos/builtin/packages/jmol/package.py45
-rw-r--r--var/spack/repos/builtin/packages/jq/package.py37
-rw-r--r--var/spack/repos/builtin/packages/json-c/package.py (renamed from var/spack/repos/builtin/packages/libjson-c/package.py)19
-rw-r--r--var/spack/repos/builtin/packages/json-cwx/package.py48
-rw-r--r--var/spack/repos/builtin/packages/jsoncpp/package.py26
-rw-r--r--var/spack/repos/builtin/packages/judy/package.py15
-rw-r--r--var/spack/repos/builtin/packages/julia/package.py25
-rw-r--r--var/spack/repos/builtin/packages/kahip/package.py88
-rw-r--r--var/spack/repos/builtin/packages/kaks-calculator/package.py59
-rw-r--r--var/spack/repos/builtin/packages/kaldi/openfst-1.4.1.patch45
-rw-r--r--var/spack/repos/builtin/packages/kaldi/package.py112
-rw-r--r--var/spack/repos/builtin/packages/kallisto/package.py39
-rw-r--r--var/spack/repos/builtin/packages/kbproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/kdiff3/package.py6
-rw-r--r--var/spack/repos/builtin/packages/kealib/package.py27
-rw-r--r--var/spack/repos/builtin/packages/kentutils/package.py52
-rw-r--r--var/spack/repos/builtin/packages/kmergenie/package.py43
-rw-r--r--var/spack/repos/builtin/packages/kokkos/package.py61
-rw-r--r--var/spack/repos/builtin/packages/kraken/package.py51
-rw-r--r--var/spack/repos/builtin/packages/krims/package.py86
-rw-r--r--var/spack/repos/builtin/packages/kripke/package.py40
-rw-r--r--var/spack/repos/builtin/packages/laghos/package.py61
-rw-r--r--var/spack/repos/builtin/packages/lammps/660.patch24
-rw-r--r--var/spack/repos/builtin/packages/lammps/Makefile.inc49
-rw-r--r--var/spack/repos/builtin/packages/lammps/lib.patch13
-rw-r--r--var/spack/repos/builtin/packages/lammps/package.py112
-rw-r--r--var/spack/repos/builtin/packages/last/package.py39
-rw-r--r--var/spack/repos/builtin/packages/latte/package.py63
-rw-r--r--var/spack/repos/builtin/packages/launchmon/package.py9
-rw-r--r--var/spack/repos/builtin/packages/lazyten/package.py118
-rw-r--r--var/spack/repos/builtin/packages/lbann/package.py96
-rw-r--r--var/spack/repos/builtin/packages/lbxproxy/package.py14
-rw-r--r--var/spack/repos/builtin/packages/lcals/package.py122
-rw-r--r--var/spack/repos/builtin/packages/lcms/package.py22
-rw-r--r--var/spack/repos/builtin/packages/ldc-bootstrap/package.py65
-rw-r--r--var/spack/repos/builtin/packages/ldc/package.py85
-rw-r--r--var/spack/repos/builtin/packages/legion/package.py68
-rw-r--r--var/spack/repos/builtin/packages/leveldb/package.py31
-rw-r--r--var/spack/repos/builtin/packages/lftp/package.py53
-rw-r--r--var/spack/repos/builtin/packages/libaec/package.py43
-rw-r--r--var/spack/repos/builtin/packages/libaio/package.py12
-rw-r--r--var/spack/repos/builtin/packages/libapplewm/package.py20
-rw-r--r--var/spack/repos/builtin/packages/libarchive/package.py17
-rw-r--r--var/spack/repos/builtin/packages/libassuan/package.py41
-rw-r--r--var/spack/repos/builtin/packages/libatomic-ops/package.py16
-rw-r--r--var/spack/repos/builtin/packages/libbeagle/package.py47
-rw-r--r--var/spack/repos/builtin/packages/libbsd/cdefs.h.patch15
-rw-r--r--var/spack/repos/builtin/packages/libbsd/package.py40
-rw-r--r--var/spack/repos/builtin/packages/libbson/package.py49
-rw-r--r--var/spack/repos/builtin/packages/libcanberra/package.py68
-rw-r--r--var/spack/repos/builtin/packages/libcap/libcap-fix-the-libcap-native-building-failure-on-CentOS-6.7.patch31
-rw-r--r--var/spack/repos/builtin/packages/libcap/package.py51
-rw-r--r--var/spack/repos/builtin/packages/libcerf/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libcircle/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libconfig/package.py43
-rw-r--r--var/spack/repos/builtin/packages/libctl/package.py27
-rw-r--r--var/spack/repos/builtin/packages/libdivsufsort/package.py35
-rw-r--r--var/spack/repos/builtin/packages/libdmx/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libdrm/package.py17
-rw-r--r--var/spack/repos/builtin/packages/libdwarf/package.py86
-rw-r--r--var/spack/repos/builtin/packages/libedit/package.py23
-rw-r--r--var/spack/repos/builtin/packages/libelf/package.py8
-rw-r--r--var/spack/repos/builtin/packages/libemos/package.py41
-rw-r--r--var/spack/repos/builtin/packages/libepoxy/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libevent/package.py20
-rw-r--r--var/spack/repos/builtin/packages/libevpath/package.py49
-rw-r--r--var/spack/repos/builtin/packages/libfabric/package.py64
-rw-r--r--var/spack/repos/builtin/packages/libffi/package.py8
-rw-r--r--var/spack/repos/builtin/packages/libffs/package.py53
-rw-r--r--var/spack/repos/builtin/packages/libfontenc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libfs/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libgcrypt/package.py16
-rw-r--r--var/spack/repos/builtin/packages/libgd/package.py29
-rw-r--r--var/spack/repos/builtin/packages/libgit2/package.py41
-rw-r--r--var/spack/repos/builtin/packages/libgpg-error/package.py16
-rw-r--r--var/spack/repos/builtin/packages/libgpuarray/package.py43
-rw-r--r--var/spack/repos/builtin/packages/libgtextutils/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libgtextutils/text_line_reader.patch10
-rw-r--r--var/spack/repos/builtin/packages/libharu/package.py51
-rw-r--r--var/spack/repos/builtin/packages/libhio/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libice/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libiconv/package.py11
-rw-r--r--var/spack/repos/builtin/packages/libint/package.py67
-rw-r--r--var/spack/repos/builtin/packages/libjpeg-turbo/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libjpeg/package.py (renamed from var/spack/repos/builtin/packages/jpeg/package.py)15
-rw-r--r--var/spack/repos/builtin/packages/libksba/package.py41
-rw-r--r--var/spack/repos/builtin/packages/liblbxutil/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libmatheval/package.py42
-rw-r--r--var/spack/repos/builtin/packages/libmesh/package.py6
-rw-r--r--var/spack/repos/builtin/packages/libmng/package.py25
-rw-r--r--var/spack/repos/builtin/packages/libmongoc/package.py72
-rw-r--r--var/spack/repos/builtin/packages/libmonitor/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libnbc/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libogg/package.py35
-rw-r--r--var/spack/repos/builtin/packages/liboldx/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libpcap/package.py34
-rw-r--r--var/spack/repos/builtin/packages/libpciaccess/package.py23
-rw-r--r--var/spack/repos/builtin/packages/libpfm4/package.py48
-rw-r--r--var/spack/repos/builtin/packages/libpipeline/package.py40
-rw-r--r--var/spack/repos/builtin/packages/libpng/package.py21
-rw-r--r--var/spack/repos/builtin/packages/libpsl/package.py56
-rw-r--r--var/spack/repos/builtin/packages/libpthread-stubs/package.py16
-rw-r--r--var/spack/repos/builtin/packages/libquo/package.py50
-rw-r--r--var/spack/repos/builtin/packages/libsigsegv/package.py9
-rw-r--r--var/spack/repos/builtin/packages/libsm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libsodium/package.py21
-rw-r--r--var/spack/repos/builtin/packages/libspatialindex/package.py6
-rw-r--r--var/spack/repos/builtin/packages/libsplash/package.py19
-rw-r--r--var/spack/repos/builtin/packages/libssh2/package.py48
-rw-r--r--var/spack/repos/builtin/packages/libsvm/package.py43
-rw-r--r--var/spack/repos/builtin/packages/libszip/package.py (renamed from var/spack/repos/builtin/packages/szip/package.py)29
-rw-r--r--var/spack/repos/builtin/packages/libtermkey/package.py9
-rw-r--r--var/spack/repos/builtin/packages/libtiff/package.py10
-rw-r--r--var/spack/repos/builtin/packages/libtool/package.py12
-rw-r--r--var/spack/repos/builtin/packages/libunistring/package.py18
-rw-r--r--var/spack/repos/builtin/packages/libunwind/package.py13
-rw-r--r--var/spack/repos/builtin/packages/libuuid/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libuv/package.py17
-rw-r--r--var/spack/repos/builtin/packages/libvorbis/package.py44
-rw-r--r--var/spack/repos/builtin/packages/libvterm/package.py6
-rw-r--r--var/spack/repos/builtin/packages/libwebsockets/package.py8
-rw-r--r--var/spack/repos/builtin/packages/libwindowswm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libx11/package.py23
-rw-r--r--var/spack/repos/builtin/packages/libxau/package.py17
-rw-r--r--var/spack/repos/builtin/packages/libxaw/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxaw3d/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxc/package.py44
-rw-r--r--var/spack/repos/builtin/packages/libxcb/package.py18
-rw-r--r--var/spack/repos/builtin/packages/libxcomposite/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxcursor/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxdamage/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxdmcp/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libxevie/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxext/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxfixes/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxfont/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxfont2/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxfontcache/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxft/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxi/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxinerama/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxkbfile/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxkbui/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxml2/package.py30
-rw-r--r--var/spack/repos/builtin/packages/libxmu/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxp/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxpm/package.py20
-rw-r--r--var/spack/repos/builtin/packages/libxpresent/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxprintapputil/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxprintutil/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxrandr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxrender/package.py21
-rw-r--r--var/spack/repos/builtin/packages/libxres/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxscrnsaver/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxshmfence/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libxslt/package.py23
-rw-r--r--var/spack/repos/builtin/packages/libxsmm/package.py83
-rw-r--r--var/spack/repos/builtin/packages/libxstream/package.py10
-rw-r--r--var/spack/repos/builtin/packages/libxt/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxtrap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxtst/package.py15
-rw-r--r--var/spack/repos/builtin/packages/libxv/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxvmc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxxf86dga/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxxf86misc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libxxf86vm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/libyogrt/package.py38
-rw-r--r--var/spack/repos/builtin/packages/libzip/package.py35
-rw-r--r--var/spack/repos/builtin/packages/likwid/package.py49
-rw-r--r--var/spack/repos/builtin/packages/linkphase3/package.py41
-rw-r--r--var/spack/repos/builtin/packages/linux-headers/package.py45
-rw-r--r--var/spack/repos/builtin/packages/listres/package.py14
-rw-r--r--var/spack/repos/builtin/packages/llvm-lld/package.py31
-rw-r--r--var/spack/repos/builtin/packages/llvm-openmp-ompt/package.py88
-rw-r--r--var/spack/repos/builtin/packages/llvm/llvm_gcc7.patch10
-rw-r--r--var/spack/repos/builtin/packages/llvm/package.py332
-rw-r--r--var/spack/repos/builtin/packages/lmdb/package.py68
-rw-r--r--var/spack/repos/builtin/packages/lmod/0001-fix-problem-with-MODULESHOME-and-issue-271.patch25
-rw-r--r--var/spack/repos/builtin/packages/lmod/package.py36
-rw-r--r--var/spack/repos/builtin/packages/lndir/package.py14
-rw-r--r--var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-missing_includes.patch38
-rw-r--r--var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-narrowing-fixes-from-upstream.patch117
-rw-r--r--var/spack/repos/builtin/packages/log4cxx/package.py47
-rw-r--r--var/spack/repos/builtin/packages/lrslib/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lrzip/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lua-bitlib/package.py47
-rw-r--r--var/spack/repos/builtin/packages/lua-jit/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lua-lpeg/package.py42
-rw-r--r--var/spack/repos/builtin/packages/lua-luafilesystem/package.py13
-rw-r--r--var/spack/repos/builtin/packages/lua-luaposix/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lua-mpack/package.py44
-rw-r--r--var/spack/repos/builtin/packages/lua/package.py38
-rw-r--r--var/spack/repos/builtin/packages/luit/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lulesh/package.py71
-rw-r--r--var/spack/repos/builtin/packages/lulesh/remove_defaults.patch60
-rw-r--r--var/spack/repos/builtin/packages/lwgrp/package.py13
-rw-r--r--var/spack/repos/builtin/packages/lwm2/package.py13
-rw-r--r--var/spack/repos/builtin/packages/lz4/package.py21
-rw-r--r--var/spack/repos/builtin/packages/lzma/package.py6
-rw-r--r--var/spack/repos/builtin/packages/lzo/package.py6
-rw-r--r--var/spack/repos/builtin/packages/m4/gnulib-pgi.patch195
-rw-r--r--var/spack/repos/builtin/packages/m4/package.py18
-rw-r--r--var/spack/repos/builtin/packages/macsio/package.py116
-rw-r--r--var/spack/repos/builtin/packages/mad-numdiff/package.py36
-rw-r--r--var/spack/repos/builtin/packages/mafft/package.py6
-rw-r--r--var/spack/repos/builtin/packages/magics/no_hardcoded_python.patch5
-rw-r--r--var/spack/repos/builtin/packages/magics/package.py92
-rw-r--r--var/spack/repos/builtin/packages/magma/ibm-xl.patch248
-rw-r--r--var/spack/repos/builtin/packages/magma/package.py73
-rw-r--r--var/spack/repos/builtin/packages/makedepend/package.py15
-rw-r--r--var/spack/repos/builtin/packages/mallocmc/package.py55
-rw-r--r--var/spack/repos/builtin/packages/man-db/package.py59
-rw-r--r--var/spack/repos/builtin/packages/mariadb/package.py23
-rw-r--r--var/spack/repos/builtin/packages/masa/package.py66
-rw-r--r--var/spack/repos/builtin/packages/matio/package.py9
-rw-r--r--var/spack/repos/builtin/packages/matlab/package.py94
-rw-r--r--var/spack/repos/builtin/packages/maven/package.py11
-rw-r--r--var/spack/repos/builtin/packages/maverick/package.py48
-rw-r--r--var/spack/repos/builtin/packages/mawk/package.py36
-rw-r--r--var/spack/repos/builtin/packages/mbedtls/package.py19
-rw-r--r--var/spack/repos/builtin/packages/mcl/package.py36
-rw-r--r--var/spack/repos/builtin/packages/mdtest/package.py43
-rw-r--r--var/spack/repos/builtin/packages/meep/package.py29
-rw-r--r--var/spack/repos/builtin/packages/memaxes/package.py6
-rw-r--r--var/spack/repos/builtin/packages/meme/package.py54
-rw-r--r--var/spack/repos/builtin/packages/mercurial/package.py95
-rw-r--r--var/spack/repos/builtin/packages/mesa-glu/package.py39
-rw-r--r--var/spack/repos/builtin/packages/mesa/package.py179
-rw-r--r--var/spack/repos/builtin/packages/meshkit/package.py81
-rw-r--r--var/spack/repos/builtin/packages/meson/package.py43
-rw-r--r--var/spack/repos/builtin/packages/mesquite/package.py56
-rw-r--r--var/spack/repos/builtin/packages/metaphysicl/package.py38
-rw-r--r--var/spack/repos/builtin/packages/metis/package.py36
-rw-r--r--var/spack/repos/builtin/packages/mfem/mfem_ppc_build.patch10
-rw-r--r--var/spack/repos/builtin/packages/mfem/package.py312
-rw-r--r--var/spack/repos/builtin/packages/microbiomeutil/package.py53
-rw-r--r--var/spack/repos/builtin/packages/miniaero/package.py62
-rw-r--r--var/spack/repos/builtin/packages/miniamr/package.py66
-rw-r--r--var/spack/repos/builtin/packages/miniconda2/package.py44
-rw-r--r--var/spack/repos/builtin/packages/miniconda3/package.py44
-rw-r--r--var/spack/repos/builtin/packages/minife/package.py65
-rw-r--r--var/spack/repos/builtin/packages/minighost/package.py96
-rw-r--r--var/spack/repos/builtin/packages/minigmg/package.py67
-rw-r--r--var/spack/repos/builtin/packages/minimap2/package.py41
-rw-r--r--var/spack/repos/builtin/packages/minimd/package.py76
-rw-r--r--var/spack/repos/builtin/packages/minismac2d/package.py80
-rw-r--r--var/spack/repos/builtin/packages/minitri/package.py63
-rw-r--r--var/spack/repos/builtin/packages/minixyce/package.py80
-rw-r--r--var/spack/repos/builtin/packages/mirdeep/package.py67
-rw-r--r--var/spack/repos/builtin/packages/mitofates/package.py41
-rw-r--r--var/spack/repos/builtin/packages/mitos/package.py21
-rw-r--r--var/spack/repos/builtin/packages/mkfontdir/package.py14
-rw-r--r--var/spack/repos/builtin/packages/mkfontscale/package.py14
-rw-r--r--var/spack/repos/builtin/packages/mlhka/package.py42
-rw-r--r--var/spack/repos/builtin/packages/moab/package.py169
-rw-r--r--var/spack/repos/builtin/packages/molcas/install_driver.patch114
-rw-r--r--var/spack/repos/builtin/packages/molcas/package.py48
-rw-r--r--var/spack/repos/builtin/packages/mono/package.py66
-rw-r--r--var/spack/repos/builtin/packages/mosh/package.py49
-rw-r--r--var/spack/repos/builtin/packages/mothur/package.py59
-rw-r--r--var/spack/repos/builtin/packages/motioncor2/package.py50
-rw-r--r--var/spack/repos/builtin/packages/mozjs/package.py64
-rw-r--r--var/spack/repos/builtin/packages/mozjs/perl-bug.patch21
-rw-r--r--var/spack/repos/builtin/packages/mpc/package.py28
-rw-r--r--var/spack/repos/builtin/packages/mpe2/package.py8
-rw-r--r--var/spack/repos/builtin/packages/mpest/package.py50
-rw-r--r--var/spack/repos/builtin/packages/mpfr/package.py27
-rw-r--r--var/spack/repos/builtin/packages/mpfr/strtofr.patch92
-rw-r--r--var/spack/repos/builtin/packages/mpfr/vasprintf.patch82
-rw-r--r--var/spack/repos/builtin/packages/mpibash/package.py6
-rw-r--r--var/spack/repos/builtin/packages/mpiblast/mpiBLAST-1.6.0-patch-110806182
-rw-r--r--var/spack/repos/builtin/packages/mpiblast/package.py51
-rw-r--r--var/spack/repos/builtin/packages/mpich/mpich32_clang.patch13
-rw-r--r--var/spack/repos/builtin/packages/mpich/package.py82
-rw-r--r--var/spack/repos/builtin/packages/mpifileutils/package.py83
-rw-r--r--var/spack/repos/builtin/packages/mpileaks/package.py6
-rw-r--r--var/spack/repos/builtin/packages/mpip/package.py26
-rw-r--r--var/spack/repos/builtin/packages/mpir/package.py6
-rw-r--r--var/spack/repos/builtin/packages/mpix-launch-swift/package.py47
-rw-r--r--var/spack/repos/builtin/packages/mrbayes/package.py72
-rw-r--r--var/spack/repos/builtin/packages/mrnet/package.py23
-rw-r--r--var/spack/repos/builtin/packages/mrtrix3/package.py62
-rw-r--r--var/spack/repos/builtin/packages/msgpack-c/package.py16
-rw-r--r--var/spack/repos/builtin/packages/mshadow/package.py41
-rw-r--r--var/spack/repos/builtin/packages/multitail/package.py62
-rw-r--r--var/spack/repos/builtin/packages/multiverso/cmake-143187.patch28
-rw-r--r--var/spack/repos/builtin/packages/multiverso/package.py48
-rw-r--r--var/spack/repos/builtin/packages/mummer/Makefile.patch24
-rw-r--r--var/spack/repos/builtin/packages/mummer/package.py75
-rw-r--r--var/spack/repos/builtin/packages/mummer/scripts-Makefile.patch74
-rw-r--r--var/spack/repos/builtin/packages/mumps/mumps-5.0.2-spectrum-mpi-xl.patch75
-rw-r--r--var/spack/repos/builtin/packages/mumps/mumps-5.1.1-spectrum-mpi-xl.patch79
-rw-r--r--var/spack/repos/builtin/packages/mumps/package.py89
-rw-r--r--var/spack/repos/builtin/packages/munge/package.py6
-rw-r--r--var/spack/repos/builtin/packages/muparser/package.py6
-rw-r--r--var/spack/repos/builtin/packages/muscle/package.py45
-rw-r--r--var/spack/repos/builtin/packages/muse/package.py38
-rw-r--r--var/spack/repos/builtin/packages/muster/package.py19
-rw-r--r--var/spack/repos/builtin/packages/mvapich2/package.py323
-rw-r--r--var/spack/repos/builtin/packages/mxml/package.py32
-rw-r--r--var/spack/repos/builtin/packages/mxnet/makefile.patch81
-rw-r--r--var/spack/repos/builtin/packages/mxnet/package.py101
-rw-r--r--var/spack/repos/builtin/packages/nag/package.py12
-rw-r--r--var/spack/repos/builtin/packages/nalu/package.py66
-rw-r--r--var/spack/repos/builtin/packages/namd/package.py151
-rw-r--r--var/spack/repos/builtin/packages/nano/package.py13
-rw-r--r--var/spack/repos/builtin/packages/nanoflann/package.py39
-rw-r--r--var/spack/repos/builtin/packages/nasm/package.py13
-rw-r--r--var/spack/repos/builtin/packages/nauty/package.py111
-rw-r--r--var/spack/repos/builtin/packages/ncbi-rmblastn/package.py36
-rw-r--r--var/spack/repos/builtin/packages/nccl/package.py45
-rw-r--r--var/spack/repos/builtin/packages/nccmp/package.py6
-rw-r--r--var/spack/repos/builtin/packages/ncdu/package.py6
-rw-r--r--var/spack/repos/builtin/packages/ncftp/package.py37
-rw-r--r--var/spack/repos/builtin/packages/ncl/hdf5.patch11
-rw-r--r--var/spack/repos/builtin/packages/ncl/package.py64
-rw-r--r--var/spack/repos/builtin/packages/ncl/ymake-filter.patch33
-rw-r--r--var/spack/repos/builtin/packages/nco/NUL-0-NULL.patch51
-rw-r--r--var/spack/repos/builtin/packages/nco/package.py15
-rw-r--r--var/spack/repos/builtin/packages/ncurses/package.py97
-rw-r--r--var/spack/repos/builtin/packages/ncurses/sed_pgi.patch11
-rw-r--r--var/spack/repos/builtin/packages/ncview/package.py20
-rw-r--r--var/spack/repos/builtin/packages/ndiff/package.py6
-rw-r--r--var/spack/repos/builtin/packages/nekbone/package.py64
-rw-r--r--var/spack/repos/builtin/packages/neovim/package.py53
-rw-r--r--var/spack/repos/builtin/packages/netcdf-cxx/package.py6
-rw-r--r--var/spack/repos/builtin/packages/netcdf-cxx4/package.py13
-rw-r--r--var/spack/repos/builtin/packages/netcdf-fortran/package.py19
-rw-r--r--var/spack/repos/builtin/packages/netcdf/package.py257
-rw-r--r--var/spack/repos/builtin/packages/netgauge/package.py13
-rw-r--r--var/spack/repos/builtin/packages/netgen/package.py83
-rw-r--r--var/spack/repos/builtin/packages/netlib-lapack/ibm-xl.patch16
-rw-r--r--var/spack/repos/builtin/packages/netlib-lapack/package.py24
-rw-r--r--var/spack/repos/builtin/packages/netlib-scalapack/package.py43
-rw-r--r--var/spack/repos/builtin/packages/nettle/package.py24
-rw-r--r--var/spack/repos/builtin/packages/nextflow/package.py18
-rw-r--r--var/spack/repos/builtin/packages/nfft/package.py61
-rw-r--r--var/spack/repos/builtin/packages/nghttp2/package.py54
-rw-r--r--var/spack/repos/builtin/packages/nginx/package.py48
-rw-r--r--var/spack/repos/builtin/packages/ngmlr/package.py36
-rw-r--r--var/spack/repos/builtin/packages/ninja-fortran/package.py67
-rw-r--r--var/spack/repos/builtin/packages/ninja/package.py46
-rw-r--r--var/spack/repos/builtin/packages/nmap/package.py10
-rw-r--r--var/spack/repos/builtin/packages/nnvm/cmake.patch63
-rw-r--r--var/spack/repos/builtin/packages/nnvm/package.py50
-rw-r--r--var/spack/repos/builtin/packages/node-js/package.py14
-rw-r--r--var/spack/repos/builtin/packages/notmuch/package.py42
-rw-r--r--var/spack/repos/builtin/packages/npb/package.py231
-rw-r--r--var/spack/repos/builtin/packages/npm/package.py20
-rw-r--r--var/spack/repos/builtin/packages/npth/package.py35
-rw-r--r--var/spack/repos/builtin/packages/nspr/package.py45
-rw-r--r--var/spack/repos/builtin/packages/numactl/package.py39
-rw-r--r--var/spack/repos/builtin/packages/numdiff/package.py43
-rw-r--r--var/spack/repos/builtin/packages/nut/package.py62
-rw-r--r--var/spack/repos/builtin/packages/nwchem/package.py60
-rw-r--r--var/spack/repos/builtin/packages/ocaml/package.py6
-rw-r--r--var/spack/repos/builtin/packages/oce/package.py36
-rw-r--r--var/spack/repos/builtin/packages/oce/sierra.patch39
-rw-r--r--var/spack/repos/builtin/packages/oce/xlocale.patch13
-rw-r--r--var/spack/repos/builtin/packages/oclock/package.py14
-rw-r--r--var/spack/repos/builtin/packages/octave-splines/package.py6
-rw-r--r--var/spack/repos/builtin/packages/octave/package.py58
-rw-r--r--var/spack/repos/builtin/packages/octave/patch_4.2.1_inline.diff12
-rw-r--r--var/spack/repos/builtin/packages/octopus/package.py45
-rw-r--r--var/spack/repos/builtin/packages/of-adios-write/package.py136
-rw-r--r--var/spack/repos/builtin/packages/ompss/package.py6
-rw-r--r--var/spack/repos/builtin/packages/ompt-openmp/package.py23
-rw-r--r--var/spack/repos/builtin/packages/oniguruma/package.py34
-rw-r--r--var/spack/repos/builtin/packages/ont-albacore/package.py52
-rw-r--r--var/spack/repos/builtin/packages/opari2/package.py22
-rw-r--r--var/spack/repos/builtin/packages/openbabel/package.py80
-rw-r--r--var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch42
-rw-r--r--var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch47
-rw-r--r--var/spack/repos/builtin/packages/openblas/openblas0.2.19.diff847
-rw-r--r--var/spack/repos/builtin/packages/openblas/openblas_icc_fortran.patch12
-rw-r--r--var/spack/repos/builtin/packages/openblas/openblas_icc_openmp.patch27
-rw-r--r--var/spack/repos/builtin/packages/openblas/package.py123
-rw-r--r--var/spack/repos/builtin/packages/openblas/power8.patch7809
-rw-r--r--var/spack/repos/builtin/packages/opencoarrays/package.py15
-rw-r--r--var/spack/repos/builtin/packages/opencv/package.py205
-rw-r--r--var/spack/repos/builtin/packages/openexr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/openfast/package.py93
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-bin.patch503
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-build.patch17
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-etc.patch41
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-mgridgen-lib.patch41
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-mpi.patch36
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-scotch-metis-lib.patch48
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-site.patch42
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/1612-zoltan-lib.patch84
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/common/README2
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/common/README-spack15
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/common/change-sitedir.sh94
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/common/change-userdir.sh94
-rwxr-xr-xvar/spack/repos/builtin/packages/openfoam-com/common/spack-Allwmake22
-rwxr-xr-xvar/spack/repos/builtin/packages/openfoam-com/common/spack-derived-Allwmake26
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/openfoam-site.patch35
-rw-r--r--var/spack/repos/builtin/packages/openfoam-com/package.py807
-rw-r--r--var/spack/repos/builtin/packages/openfoam-org/41-etc.patch25
-rw-r--r--var/spack/repos/builtin/packages/openfoam-org/41-site.patch42
-rwxr-xr-xvar/spack/repos/builtin/packages/openfoam-org/assets/bin/foamEtcFile417
-rw-r--r--var/spack/repos/builtin/packages/openfoam-org/package.py359
-rw-r--r--var/spack/repos/builtin/packages/openfst/openfst-1.4.1.patch227
-rw-r--r--var/spack/repos/builtin/packages/openfst/openfst_gcc41up.patch28
-rw-r--r--var/spack/repos/builtin/packages/openfst/package.py56
-rw-r--r--var/spack/repos/builtin/packages/openjpeg/package.py10
-rw-r--r--var/spack/repos/builtin/packages/openmc/package.py91
-rw-r--r--var/spack/repos/builtin/packages/openmpi/fix_multidef_pmi_class.patch54
-rw-r--r--var/spack/repos/builtin/packages/openmpi/package.py316
-rw-r--r--var/spack/repos/builtin/packages/openscenegraph/package.py42
-rw-r--r--var/spack/repos/builtin/packages/openspeedshop/package.py317
-rw-r--r--var/spack/repos/builtin/packages/openssh/package.py54
-rw-r--r--var/spack/repos/builtin/packages/openssl/package.py49
-rw-r--r--var/spack/repos/builtin/packages/opium/package.py8
-rw-r--r--var/spack/repos/builtin/packages/opus/package.py55
-rw-r--r--var/spack/repos/builtin/packages/orfm/package.py37
-rw-r--r--var/spack/repos/builtin/packages/orthomcl/package.py49
-rw-r--r--var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py25
-rw-r--r--var/spack/repos/builtin/packages/otf/package.py6
-rw-r--r--var/spack/repos/builtin/packages/otf2/package.py40
-rw-r--r--var/spack/repos/builtin/packages/p4est/package.py22
-rw-r--r--var/spack/repos/builtin/packages/p7zip/package.py41
-rw-r--r--var/spack/repos/builtin/packages/pacbio-daligner/package.py48
-rw-r--r--var/spack/repos/builtin/packages/pacbio-damasker/package.py47
-rw-r--r--var/spack/repos/builtin/packages/pacbio-dazz-db/package.py55
-rw-r--r--var/spack/repos/builtin/packages/pacbio-dextractor/package.py51
-rw-r--r--var/spack/repos/builtin/packages/pagit/package.py68
-rw-r--r--var/spack/repos/builtin/packages/pagmo/package.py118
-rw-r--r--var/spack/repos/builtin/packages/paml/package.py52
-rw-r--r--var/spack/repos/builtin/packages/panda/package.py22
-rw-r--r--var/spack/repos/builtin/packages/pango/package.py28
-rw-r--r--var/spack/repos/builtin/packages/papi/package.py7
-rw-r--r--var/spack/repos/builtin/packages/paradiseo/package.py36
-rw-r--r--var/spack/repos/builtin/packages/parallel-netcdf/package.py21
-rw-r--r--var/spack/repos/builtin/packages/parallel/package.py34
-rw-r--r--var/spack/repos/builtin/packages/paraver/package.py13
-rw-r--r--var/spack/repos/builtin/packages/paraview/gcc-compiler-pv501.patch22
-rw-r--r--var/spack/repos/builtin/packages/paraview/package.py192
-rw-r--r--var/spack/repos/builtin/packages/paraview/stl-reader-pv440.patch11
-rw-r--r--var/spack/repos/builtin/packages/paraview/ui_pqExportStateWizard.patch11
-rw-r--r--var/spack/repos/builtin/packages/parmetis/package.py30
-rw-r--r--var/spack/repos/builtin/packages/parmgridgen/package.py46
-rw-r--r--var/spack/repos/builtin/packages/parpack/package.py68
-rw-r--r--var/spack/repos/builtin/packages/parsimonator/package.py65
-rw-r--r--var/spack/repos/builtin/packages/parsplice/package.py49
-rw-r--r--var/spack/repos/builtin/packages/partitionfinder/package.py52
-rw-r--r--var/spack/repos/builtin/packages/patch/package.py8
-rw-r--r--var/spack/repos/builtin/packages/patchelf/package.py15
-rw-r--r--var/spack/repos/builtin/packages/pathfinder/package.py (renamed from var/spack/repos/builtin/packages/daal/package.py)41
-rw-r--r--var/spack/repos/builtin/packages/pax-utils/package.py35
-rw-r--r--var/spack/repos/builtin/packages/pbmpi/package.py48
-rw-r--r--var/spack/repos/builtin/packages/pcma/package.py43
-rw-r--r--var/spack/repos/builtin/packages/pcre/package.py41
-rw-r--r--var/spack/repos/builtin/packages/pcre2/package.py15
-rw-r--r--var/spack/repos/builtin/packages/pdsh/package.py48
-rw-r--r--var/spack/repos/builtin/packages/pdt/package.py41
-rw-r--r--var/spack/repos/builtin/packages/pegtl/package.py41
-rw-r--r--var/spack/repos/builtin/packages/pennant/package.py99
-rw-r--r--var/spack/repos/builtin/packages/perl-algorithm-diff/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-b-hooks-endofscope/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-bio-perl/package.py71
-rw-r--r--var/spack/repos/builtin/packages/perl-capture-tiny/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-class-data-inheritable/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-class-load-xs/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-class-load/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-cpan-meta-check/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-data-optlist/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-data-stag/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-dbfile/package.py41
-rw-r--r--var/spack/repos/builtin/packages/perl-dbi/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-devel-cycle/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-devel-globaldestruction/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-devel-overloadinfo/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-devel-stacktrace/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-dist-checkconflicts/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-eval-closure/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-exception-class/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-extutils-makemaker/package.py38
-rw-r--r--var/spack/repos/builtin/packages/perl-extutils-pkgconfig/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-file-pushd/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-font-ttf/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-gd-graph/package.py39
-rw-r--r--var/spack/repos/builtin/packages/perl-gd-text/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-gd/package.py39
-rw-r--r--var/spack/repos/builtin/packages/perl-intervaltree/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-io-string/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-math-cdf/package.py35
-rw-r--r--var/spack/repos/builtin/packages/perl-module-build/package.py41
-rw-r--r--var/spack/repos/builtin/packages/perl-module-runtime-conflicts/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-moose/package.py46
-rw-r--r--var/spack/repos/builtin/packages/perl-mro-compat/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-namespace-clean/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-package-deprecationmanager/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-package-stash-xs/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-package-stash/package.py39
-rw-r--r--var/spack/repos/builtin/packages/perl-padwalker/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-params-util/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-pdf-api2/package.py38
-rw-r--r--var/spack/repos/builtin/packages/perl-star-fusion/package.py59
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-exporter-progressive/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-exporter/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-identify/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-install/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-name/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-sub-uplevel/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-term-readkey/package.py40
-rw-r--r--var/spack/repos/builtin/packages/perl-test-cleannamespaces/package.py45
-rw-r--r--var/spack/repos/builtin/packages/perl-test-deep/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-test-differences/package.py38
-rw-r--r--var/spack/repos/builtin/packages/perl-test-exception/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-test-fatal/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-test-memory-cycle/package.py37
-rw-r--r--var/spack/repos/builtin/packages/perl-test-most/package.py40
-rw-r--r--var/spack/repos/builtin/packages/perl-test-needs/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-test-requires/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-test-warn/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-test-warnings/package.py34
-rw-r--r--var/spack/repos/builtin/packages/perl-text-diff/package.py36
-rw-r--r--var/spack/repos/builtin/packages/perl-uri-escape/package.py39
-rw-r--r--var/spack/repos/builtin/packages/perl-xml-parser/package.py47
-rw-r--r--var/spack/repos/builtin/packages/perl/package.py234
-rw-r--r--var/spack/repos/builtin/packages/perl/protect-quotes-in-ccflags.patch36
-rw-r--r--var/spack/repos/builtin/packages/petsc/macos-clang-8.1.0.diff18
-rw-r--r--var/spack/repos/builtin/packages/petsc/package.py91
-rw-r--r--var/spack/repos/builtin/packages/pexsi/make.inc4
-rw-r--r--var/spack/repos/builtin/packages/pexsi/package.py55
-rw-r--r--var/spack/repos/builtin/packages/pfft/package.py61
-rw-r--r--var/spack/repos/builtin/packages/pflotran/package.py17
-rw-r--r--var/spack/repos/builtin/packages/pgdspider/package.py57
-rw-r--r--var/spack/repos/builtin/packages/pgdspider/pgdspider.sh3
-rw-r--r--var/spack/repos/builtin/packages/pgi/package.py38
-rw-r--r--var/spack/repos/builtin/packages/phasta/package.py61
-rw-r--r--var/spack/repos/builtin/packages/phylip/package.py45
-rw-r--r--var/spack/repos/builtin/packages/picard/package.py75
-rw-r--r--var/spack/repos/builtin/packages/picard/picard.sh3
-rw-r--r--var/spack/repos/builtin/packages/pidx/package.py18
-rw-r--r--var/spack/repos/builtin/packages/pigz/package.py46
-rw-r--r--var/spack/repos/builtin/packages/piranha/package.py31
-rw-r--r--var/spack/repos/builtin/packages/pixman/package.py28
-rw-r--r--var/spack/repos/builtin/packages/pkg-config/package.py43
-rw-r--r--var/spack/repos/builtin/packages/pkgconf/package.py43
-rw-r--r--var/spack/repos/builtin/packages/planck-likelihood/fortran.patch11
-rw-r--r--var/spack/repos/builtin/packages/planck-likelihood/make.patch21
-rw-r--r--var/spack/repos/builtin/packages/planck-likelihood/package.py148
-rw-r--r--var/spack/repos/builtin/packages/plasma/package.py90
-rw-r--r--var/spack/repos/builtin/packages/plasma/remove_absolute_mkl_include.patch55
-rw-r--r--var/spack/repos/builtin/packages/plink/package.py41
-rw-r--r--var/spack/repos/builtin/packages/plumed/package.py135
-rw-r--r--var/spack/repos/builtin/packages/pmgr-collective/package.py6
-rw-r--r--var/spack/repos/builtin/packages/pmix/package.py71
-rw-r--r--var/spack/repos/builtin/packages/pnfft/package.py88
-rw-r--r--var/spack/repos/builtin/packages/pngwriter/package.py20
-rw-r--r--var/spack/repos/builtin/packages/poamsa/package.py50
-rw-r--r--var/spack/repos/builtin/packages/pocl/example1.c232
-rw-r--r--var/spack/repos/builtin/packages/pocl/example1.out5
-rw-r--r--var/spack/repos/builtin/packages/pocl/package.py115
-rw-r--r--var/spack/repos/builtin/packages/pocl/uint.patch11
-rw-r--r--var/spack/repos/builtin/packages/pocl/vecmathlib.patch75
-rw-r--r--var/spack/repos/builtin/packages/polymake/package.py6
-rw-r--r--var/spack/repos/builtin/packages/porta/package.py6
-rw-r--r--var/spack/repos/builtin/packages/portage/package.py61
-rw-r--r--var/spack/repos/builtin/packages/postgresql/package.py23
-rw-r--r--var/spack/repos/builtin/packages/ppl/package.py6
-rw-r--r--var/spack/repos/builtin/packages/prank/package.py8
-rw-r--r--var/spack/repos/builtin/packages/presentproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/preseq/package.py44
-rw-r--r--var/spack/repos/builtin/packages/price/package.py40
-rw-r--r--var/spack/repos/builtin/packages/primer3/package.py46
-rw-r--r--var/spack/repos/builtin/packages/printproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/probconsrna/package.py44
-rw-r--r--var/spack/repos/builtin/packages/proj/package.py16
-rw-r--r--var/spack/repos/builtin/packages/protobuf/package.py48
-rw-r--r--var/spack/repos/builtin/packages/protobuf/pkgconfig.patch58
-rw-r--r--var/spack/repos/builtin/packages/proxymngr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/pruners-ninja/package.py40
-rw-r--r--var/spack/repos/builtin/packages/ps-lite/cmake.patch22
-rw-r--r--var/spack/repos/builtin/packages/ps-lite/package.py42
-rw-r--r--var/spack/repos/builtin/packages/psi4/package.py48
-rw-r--r--var/spack/repos/builtin/packages/pstreams/package.py39
-rw-r--r--var/spack/repos/builtin/packages/pugixml/package.py35
-rw-r--r--var/spack/repos/builtin/packages/pumi/package.py65
-rw-r--r--var/spack/repos/builtin/packages/pumi/phiotimer.cc.darwin.patch21
-rw-r--r--var/spack/repos/builtin/packages/pvm/package.py63
-rw-r--r--var/spack/repos/builtin/packages/py-3to2/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-4suite-xml/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-abipy/package.py77
-rw-r--r--var/spack/repos/builtin/packages/py-alabaster/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-apache-libcloud/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-apipkg/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-appdirs/package.py47
-rw-r--r--var/spack/repos/builtin/packages/py-appdirs/setuptools-import.patch17
-rw-r--r--var/spack/repos/builtin/packages/py-appnope/package.py34
-rw-r--r--var/spack/repos/builtin/packages/py-apscheduler/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-argcomplete/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-argparse/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-ase/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-asn1crypto/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-astroid/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-astropy/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-attrs/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-autopep8/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-babel/package.py14
-rw-r--r--var/spack/repos/builtin/packages/py-backports-abc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-backports-shutil-get-terminal-size/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-backports-ssl-match-hostname/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-basemap/package.py88
-rw-r--r--var/spack/repos/builtin/packages/py-beautifulsoup4/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-binwalk/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-biom-format/package.py48
-rw-r--r--var/spack/repos/builtin/packages/py-biopython/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-bleach/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-blessings/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-bokeh/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-boltons/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-bottleneck/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-brian/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-brian2/package.py50
-rw-r--r--var/spack/repos/builtin/packages/py-bsddb3/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-cclib/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-cdat-lite/package.py53
-rw-r--r--var/spack/repos/builtin/packages/py-cdo/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-certifi/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-cffi/package.py18
-rw-r--r--var/spack/repos/builtin/packages/py-chardet/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-click/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-colorama/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-colormath/package.py (renamed from var/spack/repos/builtin/packages/py-netcdf/package.py)20
-rw-r--r--var/spack/repos/builtin/packages/py-configparser/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-counter/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-coverage/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-cpuinfo/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-cryptography/package.py46
-rw-r--r--var/spack/repos/builtin/packages/py-csvkit/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-current/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-cutadapt/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-cycler/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-cython/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-dask/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-dateutil/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-dbf/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-decorator/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-deeptools/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-dev/__init__.py.patch10
-rw-r--r--var/spack/repos/builtin/packages/py-dev/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-dill/package.py44
-rw-r--r--var/spack/repos/builtin/packages/py-dlcpar/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-docutils/package.py22
-rw-r--r--var/spack/repos/builtin/packages/py-doxypy/package.py34
-rw-r--r--var/spack/repos/builtin/packages/py-doxypypy/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-dryscrape/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-dxchange/package.py51
-rw-r--r--var/spack/repos/builtin/packages/py-dxfile/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-easybuild-easyblocks/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-easybuild-easyconfigs/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-easybuild-framework/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-edffile/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-elasticsearch/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-elephant/package.py48
-rw-r--r--var/spack/repos/builtin/packages/py-emcee/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-entrypoints/package.py19
-rw-r--r--var/spack/repos/builtin/packages/py-enum34/package.py18
-rw-r--r--var/spack/repos/builtin/packages/py-epydoc/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-espresso/package.py52
-rw-r--r--var/spack/repos/builtin/packages/py-espressopp/package.py (renamed from var/spack/repos/builtin/packages/espressopp/package.py)30
-rw-r--r--var/spack/repos/builtin/packages/py-et-xmlfile/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-execnet/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-fastaindex/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-fasteners/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-faststructure/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-fiscalyear/package.py48
-rw-r--r--var/spack/repos/builtin/packages/py-flake8/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-flask/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-flexx/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-funcsigs/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-functools32/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-future/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-futures/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-genders/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-genshi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-git-review/package.py49
-rw-r--r--var/spack/repos/builtin/packages/py-git2/package.py50
-rw-r--r--var/spack/repos/builtin/packages/py-gnuplot/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-griddataformats/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-guidata/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-guiqwt/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-h5py/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-html2text/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-html5lib/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-httpbin/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-hypothesis/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-idna/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-igraph/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-imagesize/package.py15
-rw-r--r--var/spack/repos/builtin/packages/py-iminuit/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-importlib/package.py34
-rw-r--r--var/spack/repos/builtin/packages/py-ipaddress/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-ipdb/package.py15
-rw-r--r--var/spack/repos/builtin/packages/py-ipykernel/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-ipython-genutils/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-ipython/package.py32
-rw-r--r--var/spack/repos/builtin/packages/py-ipywidgets/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-itsdangerous/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-jdcal/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-jedi/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-jinja2/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-joblib/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-jpype/package.py44
-rw-r--r--var/spack/repos/builtin/packages/py-jsonschema/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-junit-xml/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-jupyter-client/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-jupyter-console/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-jupyter-core/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-jupyter-notebook/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-keras/package.py46
-rw-r--r--var/spack/repos/builtin/packages/py-latexcodec/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-lazy/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-lazyarray/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-libconf/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-line-profiler/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-lit/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-lmfit/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-lockfile/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-logilab-common/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-lxml/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-lzstring/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-macholib/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-machotools/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-macs2/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-mako/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-mappy/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-markdown/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-markupsafe/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-matplotlib/package.py31
-rw-r--r--var/spack/repos/builtin/packages/py-mccabe/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-mdanalysis/package.py59
-rw-r--r--var/spack/repos/builtin/packages/py-meep/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-memory-profiler/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-methylcode/package.py44
-rw-r--r--var/spack/repos/builtin/packages/py-misopy/package.py46
-rw-r--r--var/spack/repos/builtin/packages/py-mistune/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-mock/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-mongo/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-monotonic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-monty/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-mpi4py/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-mpmath/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-multiprocess/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-multiqc/package.py48
-rw-r--r--var/spack/repos/builtin/packages/py-mx/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-mxnet/package.py58
-rw-r--r--var/spack/repos/builtin/packages/py-myhdl/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-mysqldb1/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-nbconvert/package.py20
-rw-r--r--var/spack/repos/builtin/packages/py-nbconvert/style.min.css37
-rw-r--r--var/spack/repos/builtin/packages/py-nbformat/package.py7
-rw-r--r--var/spack/repos/builtin/packages/py-neo/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-nestle/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-netcdf4/package.py43
-rw-r--r--var/spack/repos/builtin/packages/py-netifaces/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-networkx/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-nose/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-nosexcover/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-numexpr/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-numpy/package.py129
-rw-r--r--var/spack/repos/builtin/packages/py-numpydoc/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-olefile/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-ont-fast5-api/package.py43
-rw-r--r--var/spack/repos/builtin/packages/py-openpyxl/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-ordereddict/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-oset/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-packaging/package.py47
-rw-r--r--var/spack/repos/builtin/packages/py-palettable/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-pandas/package.py14
-rw-r--r--var/spack/repos/builtin/packages/py-paramiko/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pathlib2/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pathos/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-pathspec/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-patsy/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-pbr/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-periodictable/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-petsc4py/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-pexpect/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-phonopy/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pickleshare/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pil/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pillow/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-pip/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-pipits/package.py80
-rw-r--r--var/spack/repos/builtin/packages/py-pkgconfig/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-ply/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pmw/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pox/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-ppft/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-prettytable/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-proj/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-prompt-toolkit/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-protobuf/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-psutil/package.py14
-rw-r--r--var/spack/repos/builtin/packages/py-ptyprocess/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pudb/package.py17
-rw-r--r--var/spack/repos/builtin/packages/py-py/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-py2bit/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-py2cairo/package.py23
-rw-r--r--var/spack/repos/builtin/packages/py-py2neo/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-py4j/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-pyasn1/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-pybigwig/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-pybind11/package.py52
-rw-r--r--var/spack/repos/builtin/packages/py-pybtex-docutils/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-pybtex/package.py55
-rw-r--r--var/spack/repos/builtin/packages/py-pychecker/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pycodestyle/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pycparser/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-pycrypto/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-pycurl/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-pydatalog/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pydispatcher/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-pydot/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pyelftools/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pyfasta/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pyfftw/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-pyflakes/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pygments/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-pygobject/package.py19
-rw-r--r--var/spack/repos/builtin/packages/py-pygobject/pygobject-2.28.6-gio-types-2.32.patch50
-rw-r--r--var/spack/repos/builtin/packages/py-pygtk/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-pylint/package.py15
-rw-r--r--var/spack/repos/builtin/packages/py-pymatgen/package.py54
-rw-r--r--var/spack/repos/builtin/packages/py-pyminifier/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-pympler/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-pynn/package.py51
-rw-r--r--var/spack/repos/builtin/packages/py-pypar/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-pyparsing/package.py25
-rw-r--r--var/spack/repos/builtin/packages/py-pyparsing/setuptools-import.patch20
-rw-r--r--var/spack/repos/builtin/packages/py-pypeflow/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-pyprof2html/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch10
-rw-r--r--var/spack/repos/builtin/packages/py-pyqt/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pyrad/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-pysam/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pyscaf/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-pyserial/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-pyside/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-pysocks/package.py35
-rw-r--r--var/spack/repos/builtin/packages/py-pytables/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-cov/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-flake8/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-httpbin/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-mock/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-runner/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-pytest-xdist/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-pytest/package.py29
-rw-r--r--var/spack/repos/builtin/packages/py-python-daemon/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-python-gitlab/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-pythonqwt/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-pytz/package.py24
-rw-r--r--var/spack/repos/builtin/packages/py-pywavelets/package.py42
-rw-r--r--var/spack/repos/builtin/packages/py-pyyaml/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-qtawesome/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-qtconsole/package.py47
-rw-r--r--var/spack/repos/builtin/packages/py-qtpy/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-quantities/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-radical-utils/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-ranger/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-readme-renderer/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-regex/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-requests/package.py55
-rw-r--r--var/spack/repos/builtin/packages/py-restview/package.py11
-rw-r--r--var/spack/repos/builtin/packages/py-rope/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-rpy2/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-rsa/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-rtree/package.py23
-rw-r--r--var/spack/repos/builtin/packages/py-saga-python/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-scientificpython/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-scikit-image/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-scikit-learn/package.py17
-rw-r--r--var/spack/repos/builtin/packages/py-scipy/package.py70
-rw-r--r--var/spack/repos/builtin/packages/py-seaborn/package.py46
-rw-r--r--var/spack/repos/builtin/packages/py-setuptools/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-sh/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-shiboken/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-simplegeneric/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-simplejson/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-singledispatch/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-sip/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-six/package.py17
-rw-r--r--var/spack/repos/builtin/packages/py-slepc4py/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-sncosmo/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-snowballstemmer/package.py12
-rw-r--r--var/spack/repos/builtin/packages/py-spectra/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-spefile/package.py43
-rw-r--r--var/spack/repos/builtin/packages/py-spglib/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-sphinx-bootstrap-theme/package.py13
-rw-r--r--var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py16
-rw-r--r--var/spack/repos/builtin/packages/py-sphinx/package.py68
-rw-r--r--var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py45
-rw-r--r--var/spack/repos/builtin/packages/py-sphinxcontrib-programoutput/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-sphinxcontrib-websupport/package.py47
-rw-r--r--var/spack/repos/builtin/packages/py-spyder/package.py55
-rw-r--r--var/spack/repos/builtin/packages/py-spykeutils/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-sqlalchemy/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-statsmodels/package.py49
-rw-r--r--var/spack/repos/builtin/packages/py-storm/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-subprocess32/package.py34
-rw-r--r--var/spack/repos/builtin/packages/py-symengine/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-symfit/package.py41
-rw-r--r--var/spack/repos/builtin/packages/py-sympy/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-tabulate/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-tappy/package.py10
-rw-r--r--var/spack/repos/builtin/packages/py-terminado/package.py7
-rw-r--r--var/spack/repos/builtin/packages/py-theano/package.py55
-rw-r--r--var/spack/repos/builtin/packages/py-tifffile/package.py39
-rw-r--r--var/spack/repos/builtin/packages/py-tomopy/package.py51
-rw-r--r--var/spack/repos/builtin/packages/py-tornado/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-tqdm/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-traitlets/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-tuiview/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-twisted/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-typing/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-tzlocal/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-unittest2/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-unittest2py3k/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-urllib3/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-urwid/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-vcversioner/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-virtualenv/package.py21
-rw-r--r--var/spack/repos/builtin/packages/py-vsc-base/package.py35
-rw-r--r--var/spack/repos/builtin/packages/py-vsc-install/package.py36
-rw-r--r--var/spack/repos/builtin/packages/py-wcsaxes/package.py7
-rw-r--r--var/spack/repos/builtin/packages/py-wcwidth/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-webkit-server/package.py35
-rw-r--r--var/spack/repos/builtin/packages/py-werkzeug/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-wheel/package.py9
-rw-r--r--var/spack/repos/builtin/packages/py-widgetsnbextension/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-wrapt/package.py34
-rw-r--r--var/spack/repos/builtin/packages/py-xarray/package.py38
-rw-r--r--var/spack/repos/builtin/packages/py-xlrd/package.py8
-rw-r--r--var/spack/repos/builtin/packages/py-xlsxwriter/package.py35
-rw-r--r--var/spack/repos/builtin/packages/py-xmlrunner/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-xopen/package.py40
-rw-r--r--var/spack/repos/builtin/packages/py-xpyb/package.py14
-rw-r--r--var/spack/repos/builtin/packages/py-xvfbwrapper/package.py37
-rw-r--r--var/spack/repos/builtin/packages/py-yapf/package.py6
-rw-r--r--var/spack/repos/builtin/packages/py-yt/package.py25
-rw-r--r--var/spack/repos/builtin/packages/py-zmq/package.py7
-rw-r--r--var/spack/repos/builtin/packages/python/cray-rpath-2.3.patch12
-rw-r--r--var/spack/repos/builtin/packages/python/cray-rpath-3.1.patch15
-rw-r--r--var/spack/repos/builtin/packages/python/package.py381
-rw-r--r--var/spack/repos/builtin/packages/qbank/package.py87
-rw-r--r--var/spack/repos/builtin/packages/qbox/package.py93
-rw-r--r--var/spack/repos/builtin/packages/qhull/package.py8
-rw-r--r--var/spack/repos/builtin/packages/qhull/qhull-unused-intel-17.02.patch18
-rw-r--r--var/spack/repos/builtin/packages/qmcpack/package.py234
-rw-r--r--var/spack/repos/builtin/packages/qmd-progress/package.py67
-rw-r--r--var/spack/repos/builtin/packages/qrupdate/package.py6
-rw-r--r--var/spack/repos/builtin/packages/qt-creator/package.py43
-rw-r--r--var/spack/repos/builtin/packages/qt/QTBUG-57656.patch17
-rw-r--r--var/spack/repos/builtin/packages/qt/QTBUG-58038.patch12
-rw-r--r--var/spack/repos/builtin/packages/qt/package.py130
-rw-r--r--var/spack/repos/builtin/packages/qt/qt5-pcre.patch33
-rw-r--r--var/spack/repos/builtin/packages/qtgraph/package.py73
-rw-r--r--var/spack/repos/builtin/packages/qthreads/package.py23
-rw-r--r--var/spack/repos/builtin/packages/quinoa/package.py56
-rw-r--r--var/spack/repos/builtin/packages/qwt/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-a4/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-a4base/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-a4classif/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-a4core/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-a4preproc/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-a4reporting/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-abadata/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-abaenrichment/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-abind/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-absseq/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-acde/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-acepack/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-acgh/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-acme/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-ada/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-adabag/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-ade4/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-adegenet/package.py55
-rw-r--r--var/spack/repos/builtin/packages/r-adsplit/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-affxparser/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-affy/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-affycomp/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-affycompatible/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-affycontam/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-affycoretools/package.py54
-rw-r--r--var/spack/repos/builtin/packages/r-affydata/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-affyexpress/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-affyilm/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-affyio/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-affypdnn/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-affyplm/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-affyqcreport/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-affyrnadegradation/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-agdex/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-agilp/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-agimicrorna/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-aims/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-aldex2/package.py51
-rw-r--r--var/spack/repos/builtin/packages/r-allelicimbalance/package.py56
-rw-r--r--var/spack/repos/builtin/packages/r-alpine/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-als/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-alsace/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-altcdfenvs/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-ampliqueso/package.py51
-rw-r--r--var/spack/repos/builtin/packages/r-analysispageserver/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-anaquin/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-aneufinder/package.py57
-rw-r--r--var/spack/repos/builtin/packages/r-aneufinderdata/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-annaffy/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-annotate/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-annotationdbi/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-annotationfilter/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-annotationforge/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-annotationhub/package.py51
-rw-r--r--var/spack/repos/builtin/packages/r-ape/package.py51
-rw-r--r--var/spack/repos/builtin/packages/r-assertthat/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-backports/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-bamsignals/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-base64/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-base64enc/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-beanplot/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-bh/package.py10
-rw-r--r--var/spack/repos/builtin/packages/r-biobase/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-biocgenerics/package.py21
-rw-r--r--var/spack/repos/builtin/packages/r-biocinstaller/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-biocparallel/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-biomart/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-biostrings/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-biovizbase/package.py58
-rw-r--r--var/spack/repos/builtin/packages/r-bit/package.py34
-rw-r--r--var/spack/repos/builtin/packages/r-bit64/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-bitops/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-blob/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-boot/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-brew/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-bsgenome/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-bumphunter/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-c50/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-callr/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-car/package.py19
-rw-r--r--var/spack/repos/builtin/packages/r-caret/package.py26
-rw-r--r--var/spack/repos/builtin/packages/r-category/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-catools/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-cellranger/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-checkmate/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-checkpoint/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-chron/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-circlize/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-class/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-clipr/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-cluster/package.py10
-rw-r--r--var/spack/repos/builtin/packages/r-coda/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-codetools/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-coin/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-colorspace/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-complexheatmap/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-corpcor/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-corrplot/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-covr/package.py48
-rw-r--r--var/spack/repos/builtin/packages/r-cowplot/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-crayon/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-cubature/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-cubist/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-curl/package.py13
-rw-r--r--var/spack/repos/builtin/packages/r-data-table/package.py (renamed from var/spack/repos/builtin/packages/r-datatable/package.py)16
-rw-r--r--var/spack/repos/builtin/packages/r-dbi/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-delayedarray/package.py55
-rw-r--r--var/spack/repos/builtin/packages/r-deldir/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-dendextend/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-deoptim/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-deoptimr/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-deseq/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-deseq2/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-desolve/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-devtools/package.py19
-rw-r--r--var/spack/repos/builtin/packages/r-diagrammer/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-dichromat/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-digest/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-diptest/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-dnacopy/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-domc/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-doparallel/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-dorng/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-downloader/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-dplyr/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-dt/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-dygraphs/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-e1071/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-edger/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-ellipse/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-ensembldb/package.py62
-rw-r--r--var/spack/repos/builtin/packages/r-ergm/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-evaluate/package.py18
-rw-r--r--var/spack/repos/builtin/packages/r-expm/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-factoextra/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-factominer/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-ff/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-filehash/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-flashclust/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-flexmix/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-foreach/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-forecast/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-foreign/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-formatr/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-formula/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-fpc/package.py48
-rw-r--r--var/spack/repos/builtin/packages/r-fracdiff/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-futile-logger/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-futile-options/package.py34
-rw-r--r--var/spack/repos/builtin/packages/r-gbm/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-gcrma/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-gdata/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-geiger/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-genefilter/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-geneplotter/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-genomeinfodb/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-genomicalignments/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-genomicfeatures/package.py58
-rw-r--r--var/spack/repos/builtin/packages/r-genomicranges/package.py51
-rw-r--r--var/spack/repos/builtin/packages/r-geomorph/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-geoquery/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-geosphere/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-getoptlong/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-ggally/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-ggbio/package.py69
-rw-r--r--var/spack/repos/builtin/packages/r-ggdendro/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-ggmap/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-ggplot2/package.py19
-rw-r--r--var/spack/repos/builtin/packages/r-ggpubr/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-ggrepel/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-ggsci/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-ggvis/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-gistr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-git2r/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-glmnet/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-globaloptions/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-gmodels/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-gmp/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-go-db/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-googlevis/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-gostats/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-gplots/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-graph/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-gridbase/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-gridextra/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-gseabase/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-gsubfn/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-gtable/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-gtools/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-gtrellis/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-gviz/package.py63
-rw-r--r--var/spack/repos/builtin/packages/r-hexbin/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-highr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-hmisc/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-hms/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-htmltable/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-htmltools/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-htmlwidgets/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-httpuv/package.py15
-rw-r--r--var/spack/repos/builtin/packages/r-httr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-hwriter/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-hypergraph/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-igraph/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-illuminaio/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-impute/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-influencer/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-inline/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-interactivedisplaybase/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-ipred/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-iranges/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-irdisplay/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-irkernel/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-irlba/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-iso/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-iterators/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-jpeg/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-jsonlite/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-kegg-db/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-keggrest/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-kernlab/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-kernsmooth/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-kknn/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-knitr/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-labeling/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-lambda-r/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-laplacesdemon/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-lattice/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-latticeextra/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-lava/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-lazyeval/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-leaflet/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-leaps/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-learnbayes/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-limma/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-lme4/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-lmtest/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-locfit/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-log4r/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-lpsolve/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-lsei/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-lubridate/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-magic/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-magrittr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-makecdfenv/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-maldiquant/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-mapproj/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-maps/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-maptools/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-markdown/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-mass/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-matrix/package.py13
-rw-r--r--var/spack/repos/builtin/packages/r-matrixmodels/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-matrixstats/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-mclust/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-mcmcglmm/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-mda/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-memoise/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-mergemaid/package.py48
-rw-r--r--var/spack/repos/builtin/packages/r-methodss3/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-mgcv/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-mime/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-minfi/package.py63
-rw-r--r--var/spack/repos/builtin/packages/r-minqa/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-mlbench/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-mlinterfaces/package.py52
-rw-r--r--var/spack/repos/builtin/packages/r-modelmetrics/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-modeltools/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-mpm/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-msnbase/package.py57
-rw-r--r--var/spack/repos/builtin/packages/r-multcomp/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-multtest/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-munsell/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-mvtnorm/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-mzid/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-mzr/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-ncbit/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-ncdf4/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-network/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-networkd3/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-nlme/package.py10
-rw-r--r--var/spack/repos/builtin/packages/r-nloptr/package.py29
-rw-r--r--var/spack/repos/builtin/packages/r-nmf/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-nnet/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-nnls/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-nor1mix/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-np/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-numderiv/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-oligoclasses/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-oo/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-openssl/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-organismdbi/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-packrat/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-pacman/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-pamr/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-party/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-partykit/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-pbdzmq/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-pbkrtest/package.py13
-rw-r--r--var/spack/repos/builtin/packages/r-pcamethods/package.py48
-rw-r--r--var/spack/repos/builtin/packages/r-permute/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-pfam-db/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-pkgconfig/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-pkgmaker/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-plogr/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-plotrix/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-pls/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-plyr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-pmcmr/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-png/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-prabclus/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-praise/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-preprocesscore/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-prettyunits/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-prodlim/package.py44
-rw-r--r--var/spack/repos/builtin/packages/r-progress/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-protgenerics/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-proto/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-proxy/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-pryr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-ptw/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-purrr/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-quadprog/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-quantmod/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-quantreg/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-quantro/package.py49
-rw-r--r--var/spack/repos/builtin/packages/r-qvalue/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-r6/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-randomforest/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-raster/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rbgl/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-rbokeh/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rcolorbrewer/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rcpp/package.py14
-rw-r--r--var/spack/repos/builtin/packages/r-rcpparmadillo/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-rcppeigen/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-rcurl/package.py62
-rw-r--r--var/spack/repos/builtin/packages/r-rda/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-readr/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-readxl/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-registry/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rematch/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-reordercluster/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-reportingtools/package.py67
-rw-r--r--var/spack/repos/builtin/packages/r-repr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-reprex/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-reshape/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-reshape2/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-rex/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-rgl/package.py61
-rw-r--r--var/spack/repos/builtin/packages/r-rgooglemaps/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rhtslib/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-rinside/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rjava/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-rjson/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rjsonio/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rlang/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-rmarkdown/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rminer/package.py54
-rw-r--r--var/spack/repos/builtin/packages/r-rmpfr/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-rmpi/package.py63
-rw-r--r--var/spack/repos/builtin/packages/r-rmysql/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rngtools/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-robustbase/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-rocr/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-rodbc/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-roxygen2/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rpart-plot/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-rpart/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-rpostgresql/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rsamtools/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-rsnns/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rsqlite/package.py18
-rw-r--r--var/spack/repos/builtin/packages/r-rstan/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rstudioapi/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-rtracklayer/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-rvest/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-rzmq/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-s4vectors/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-samr/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-sandwich/package.py8
-rw-r--r--var/spack/repos/builtin/packages/r-scales/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-scatterplot3d/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-segmented/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-selectr/package.py45
-rw-r--r--var/spack/repos/builtin/packages/r-seqinr/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-sfsmisc/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-shape/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-shiny/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-siggenes/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-simpleaffy/package.py46
-rw-r--r--var/spack/repos/builtin/packages/r-snow/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-somaticsignatures/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-sourcetools/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-sp/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-sparsem/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-spdep/package.py56
-rw-r--r--var/spack/repos/builtin/packages/r-speedglm/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-sqldf/package.py50
-rw-r--r--var/spack/repos/builtin/packages/r-stanheaders/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-statmod/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-statnet-common/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-stringi/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-stringr/package.py10
-rw-r--r--var/spack/repos/builtin/packages/r-strucchange/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-subplex/package.py35
-rw-r--r--var/spack/repos/builtin/packages/r-summarizedexperiment/package.py47
-rw-r--r--var/spack/repos/builtin/packages/r-survey/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-survival/package.py10
-rw-r--r--var/spack/repos/builtin/packages/r-tarifx/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-tensora/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-testit/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r-testthat/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-th-data/package.py (renamed from var/spack/repos/builtin/packages/r-thdata/package.py)11
-rw-r--r--var/spack/repos/builtin/packages/r-threejs/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-tibble/package.py20
-rw-r--r--var/spack/repos/builtin/packages/r-tidyr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-tiff/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-timedate/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-trimcluster/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-trust/package.py36
-rw-r--r--var/spack/repos/builtin/packages/r-tseries/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-ttr/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-utils/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-uuid/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-variantannotation/package.py54
-rw-r--r--var/spack/repos/builtin/packages/r-varselrf/package.py41
-rw-r--r--var/spack/repos/builtin/packages/r-vcd/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-vegan/package.py39
-rw-r--r--var/spack/repos/builtin/packages/r-viridis/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-viridislite/package.py37
-rw-r--r--var/spack/repos/builtin/packages/r-visnetwork/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-vsn/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-whisker/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-withr/package.py11
-rw-r--r--var/spack/repos/builtin/packages/r-xde/package.py43
-rw-r--r--var/spack/repos/builtin/packages/r-xgboost/package.py21
-rw-r--r--var/spack/repos/builtin/packages/r-xlconnect/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-xlconnectjars/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-xlsx/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-xlsxjars/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-xmapbridge/package.py38
-rw-r--r--var/spack/repos/builtin/packages/r-xml/package.py12
-rw-r--r--var/spack/repos/builtin/packages/r-xml2/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-xtable/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-xts/package.py6
-rw-r--r--var/spack/repos/builtin/packages/r-xvector/package.py42
-rw-r--r--var/spack/repos/builtin/packages/r-yaml/package.py7
-rw-r--r--var/spack/repos/builtin/packages/r-yapsa/package.py57
-rw-r--r--var/spack/repos/builtin/packages/r-yaqcaffy/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-yarn/package.py53
-rw-r--r--var/spack/repos/builtin/packages/r-zlibbioc/package.py40
-rw-r--r--var/spack/repos/builtin/packages/r-zoo/package.py9
-rw-r--r--var/spack/repos/builtin/packages/r/package.py83
-rw-r--r--var/spack/repos/builtin/packages/r/zlib.patch29
-rw-r--r--var/spack/repos/builtin/packages/raft/package.py52
-rw-r--r--var/spack/repos/builtin/packages/raja/package.py16
-rw-r--r--var/spack/repos/builtin/packages/randfold/package.py40
-rw-r--r--var/spack/repos/builtin/packages/random123/package.py45
-rw-r--r--var/spack/repos/builtin/packages/randrproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/ravel/package.py14
-rw-r--r--var/spack/repos/builtin/packages/raxml/package.py107
-rw-r--r--var/spack/repos/builtin/packages/ray/package.py44
-rw-r--r--var/spack/repos/builtin/packages/rdp-classifier/package.py45
-rw-r--r--var/spack/repos/builtin/packages/readline/package.py38
-rw-r--r--var/spack/repos/builtin/packages/readline/readline-6.3-upstream_fixes-1.patch90
-rw-r--r--var/spack/repos/builtin/packages/recordproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/redundans/package.py57
-rw-r--r--var/spack/repos/builtin/packages/relion/package.py66
-rw-r--r--var/spack/repos/builtin/packages/rempi/package.py39
-rw-r--r--var/spack/repos/builtin/packages/rename/package.py6
-rw-r--r--var/spack/repos/builtin/packages/rendercheck/package.py14
-rw-r--r--var/spack/repos/builtin/packages/renderproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/repeatmasker/package.py80
-rw-r--r--var/spack/repos/builtin/packages/resourceproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/revbayes/package.py62
-rw-r--r--var/spack/repos/builtin/packages/rgb/package.py15
-rw-r--r--var/spack/repos/builtin/packages/rhash/package.py78
-rw-r--r--var/spack/repos/builtin/packages/rockstar/adjust_buildscript.patch13
-rw-r--r--var/spack/repos/builtin/packages/rockstar/package.py69
-rw-r--r--var/spack/repos/builtin/packages/root/package.py123
-rw-r--r--var/spack/repos/builtin/packages/rose/package.py71
-rw-r--r--var/spack/repos/builtin/packages/rr/package.py66
-rw-r--r--var/spack/repos/builtin/packages/rsbench/package.py66
-rw-r--r--var/spack/repos/builtin/packages/rsem/package.py45
-rw-r--r--var/spack/repos/builtin/packages/rstart/package.py14
-rw-r--r--var/spack/repos/builtin/packages/rsync/package.py14
-rw-r--r--var/spack/repos/builtin/packages/rtags/add_string_iterator_erase_compile_check.patch67
-rw-r--r--var/spack/repos/builtin/packages/rtags/package.py49
-rw-r--r--var/spack/repos/builtin/packages/rtax/package.py43
-rw-r--r--var/spack/repos/builtin/packages/ruby/package.py14
-rw-r--r--var/spack/repos/builtin/packages/rust-bindgen/package.py10
-rw-r--r--var/spack/repos/builtin/packages/rust/package.py8
-rw-r--r--var/spack/repos/builtin/packages/sabre/package.py48
-rw-r--r--var/spack/repos/builtin/packages/salmon/package.py41
-rw-r--r--var/spack/repos/builtin/packages/sambamba/Makefile.patch11
-rw-r--r--var/spack/repos/builtin/packages/sambamba/package.py52
-rw-r--r--var/spack/repos/builtin/packages/samrai/package.py70
-rw-r--r--var/spack/repos/builtin/packages/samtools/package.py18
-rw-r--r--var/spack/repos/builtin/packages/sandbox/package.py34
-rw-r--r--var/spack/repos/builtin/packages/sas/package.py47
-rw-r--r--var/spack/repos/builtin/packages/satsuma2/package.py41
-rw-r--r--var/spack/repos/builtin/packages/savanna/package.py (renamed from var/spack/repos/builtin/packages/ipp/package.py)39
-rw-r--r--var/spack/repos/builtin/packages/saws/package.py36
-rw-r--r--var/spack/repos/builtin/packages/sbt/package.py8
-rw-r--r--var/spack/repos/builtin/packages/scala/package.py53
-rw-r--r--var/spack/repos/builtin/packages/scalasca/package.py59
-rw-r--r--var/spack/repos/builtin/packages/scalpel/package.py101
-rw-r--r--var/spack/repos/builtin/packages/scons/package.py15
-rw-r--r--var/spack/repos/builtin/packages/scorec-core/package.py59
-rw-r--r--var/spack/repos/builtin/packages/scorep/gcc7.patch42
-rw-r--r--var/spack/repos/builtin/packages/scorep/package.py86
-rw-r--r--var/spack/repos/builtin/packages/scotch/esmumps-ldflags-6.0.4.patch11
-rw-r--r--var/spack/repos/builtin/packages/scotch/nonthreaded-6.0.4.patch11
-rw-r--r--var/spack/repos/builtin/packages/scotch/package.py78
-rw-r--r--var/spack/repos/builtin/packages/scr/package.py131
-rw-r--r--var/spack/repos/builtin/packages/screen/package.py13
-rw-r--r--var/spack/repos/builtin/packages/scripts/package.py14
-rw-r--r--var/spack/repos/builtin/packages/scrnsaverproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/sctk/package.py53
-rw-r--r--var/spack/repos/builtin/packages/sdl2-image/package.py14
-rw-r--r--var/spack/repos/builtin/packages/sdl2/package.py17
-rw-r--r--var/spack/repos/builtin/packages/sed/package.py14
-rw-r--r--var/spack/repos/builtin/packages/seqprep/package.py39
-rw-r--r--var/spack/repos/builtin/packages/seqtk/package.py6
-rw-r--r--var/spack/repos/builtin/packages/serf/package.py74
-rw-r--r--var/spack/repos/builtin/packages/sessreg/package.py14
-rw-r--r--var/spack/repos/builtin/packages/setxkbmap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/sga/package.py61
-rw-r--r--var/spack/repos/builtin/packages/shapeit/package.py44
-rw-r--r--var/spack/repos/builtin/packages/shared-mime-info/package.py49
-rw-r--r--var/spack/repos/builtin/packages/shiny-server/package.py75
-rw-r--r--var/spack/repos/builtin/packages/shortstack/package.py45
-rw-r--r--var/spack/repos/builtin/packages/showfont/package.py14
-rw-r--r--var/spack/repos/builtin/packages/sickle/package.py43
-rw-r--r--var/spack/repos/builtin/packages/signalp/package.py61
-rw-r--r--var/spack/repos/builtin/packages/silo/package.py24
-rw-r--r--var/spack/repos/builtin/packages/silo/remove-mpiposix.patch40
-rw-r--r--var/spack/repos/builtin/packages/simplemoc/package.py68
-rw-r--r--var/spack/repos/builtin/packages/simul/package.py47
-rw-r--r--var/spack/repos/builtin/packages/simulationio/package.py63
-rw-r--r--var/spack/repos/builtin/packages/singularity/package.py41
-rw-r--r--var/spack/repos/builtin/packages/slepc/package.py25
-rw-r--r--var/spack/repos/builtin/packages/slurm/package.py109
-rw-r--r--var/spack/repos/builtin/packages/smalt/package.py34
-rw-r--r--var/spack/repos/builtin/packages/smc/package.py83
-rw-r--r--var/spack/repos/builtin/packages/smproxy/package.py14
-rw-r--r--var/spack/repos/builtin/packages/snakemake/package.py39
-rw-r--r--var/spack/repos/builtin/packages/snap-berkeley/package.py57
-rw-r--r--var/spack/repos/builtin/packages/snap-korf/package.py62
-rw-r--r--var/spack/repos/builtin/packages/snap/package.py64
-rw-r--r--var/spack/repos/builtin/packages/snappy/package.py47
-rw-r--r--var/spack/repos/builtin/packages/snbone/package.py64
-rw-r--r--var/spack/repos/builtin/packages/sniffles/package.py42
-rw-r--r--var/spack/repos/builtin/packages/snptest/package.py39
-rw-r--r--var/spack/repos/builtin/packages/soap2/package.py42
-rw-r--r--var/spack/repos/builtin/packages/soapindel/package.py53
-rw-r--r--var/spack/repos/builtin/packages/soapsnp/package.py42
-rw-r--r--var/spack/repos/builtin/packages/somatic-sniper/package.py38
-rw-r--r--var/spack/repos/builtin/packages/sortmerna/package.py44
-rw-r--r--var/spack/repos/builtin/packages/sosflow/package.py51
-rw-r--r--var/spack/repos/builtin/packages/sowing/package.py12
-rw-r--r--var/spack/repos/builtin/packages/sox/package.py40
-rw-r--r--var/spack/repos/builtin/packages/spades/package.py43
-rw-r--r--var/spack/repos/builtin/packages/spark/package.py29
-rw-r--r--var/spack/repos/builtin/packages/sparsehash/package.py14
-rw-r--r--var/spack/repos/builtin/packages/sparta/package.py46
-rw-r--r--var/spack/repos/builtin/packages/spdlog/package.py6
-rw-r--r--var/spack/repos/builtin/packages/spectrum-mpi/package.py70
-rw-r--r--var/spack/repos/builtin/packages/speex/package.py35
-rw-r--r--var/spack/repos/builtin/packages/sph2pipe/cmake.patch10
-rw-r--r--var/spack/repos/builtin/packages/sph2pipe/package.py37
-rw-r--r--var/spack/repos/builtin/packages/spherepack/package.py42
-rw-r--r--var/spack/repos/builtin/packages/spindle/package.py14
-rw-r--r--var/spack/repos/builtin/packages/spot/package.py23
-rw-r--r--var/spack/repos/builtin/packages/sqlite/package.py34
-rw-r--r--var/spack/repos/builtin/packages/sqlite/sqlite_b0.patch13
-rw-r--r--var/spack/repos/builtin/packages/squid/package.py33
-rw-r--r--var/spack/repos/builtin/packages/sra-toolkit/package.py45
-rw-r--r--var/spack/repos/builtin/packages/sspace-longread/package.py52
-rw-r--r--var/spack/repos/builtin/packages/sspace-standard/package.py56
-rw-r--r--var/spack/repos/builtin/packages/sst-dumpi/package.py52
-rw-r--r--var/spack/repos/builtin/packages/sst-macro/package.py64
-rw-r--r--var/spack/repos/builtin/packages/stacks/package.py48
-rw-r--r--var/spack/repos/builtin/packages/staden-io-lib/package.py37
-rw-r--r--var/spack/repos/builtin/packages/star-ccm-plus/package.py11
-rw-r--r--var/spack/repos/builtin/packages/star/package.py44
-rw-r--r--var/spack/repos/builtin/packages/stat/package.py37
-rw-r--r--var/spack/repos/builtin/packages/stc/package.py43
-rw-r--r--var/spack/repos/builtin/packages/stream/package.py12
-rw-r--r--var/spack/repos/builtin/packages/strelka/package.py88
-rw-r--r--var/spack/repos/builtin/packages/stress/package.py37
-rw-r--r--var/spack/repos/builtin/packages/stringtie/package.py41
-rw-r--r--var/spack/repos/builtin/packages/structure/package.py47
-rw-r--r--var/spack/repos/builtin/packages/sublime-text/package.py12
-rw-r--r--var/spack/repos/builtin/packages/subread/package.py52
-rw-r--r--var/spack/repos/builtin/packages/subversion/package.py43
-rw-r--r--var/spack/repos/builtin/packages/suite-sparse/package.py108
-rw-r--r--var/spack/repos/builtin/packages/suite-sparse/pgi.patch12
-rw-r--r--var/spack/repos/builtin/packages/sumaclust/package.py42
-rw-r--r--var/spack/repos/builtin/packages/sundials/package.py494
-rw-r--r--var/spack/repos/builtin/packages/sundials/test_nvector_parhyp.patch18
-rw-r--r--var/spack/repos/builtin/packages/superlu-dist/package.py37
-rw-r--r--var/spack/repos/builtin/packages/superlu-mt/package.py8
-rw-r--r--var/spack/repos/builtin/packages/superlu/package.py20
-rw-r--r--var/spack/repos/builtin/packages/sw4lite/package.py98
-rw-r--r--var/spack/repos/builtin/packages/swarm/package.py41
-rw-r--r--var/spack/repos/builtin/packages/swfft/package.py49
-rw-r--r--var/spack/repos/builtin/packages/swiftsim/package.py13
-rw-r--r--var/spack/repos/builtin/packages/swig/package.py31
-rw-r--r--var/spack/repos/builtin/packages/symengine/package.py102
-rw-r--r--var/spack/repos/builtin/packages/sympol/package.py15
-rw-r--r--var/spack/repos/builtin/packages/sz/package.py50
-rw-r--r--var/spack/repos/builtin/packages/tabix/package.py50
-rw-r--r--var/spack/repos/builtin/packages/talloc/package.py35
-rw-r--r--var/spack/repos/builtin/packages/tar/argp-pgi.patch25
-rw-r--r--var/spack/repos/builtin/packages/tar/config-pgi.patch10
-rw-r--r--var/spack/repos/builtin/packages/tar/gnutar-configure-xattrs.patch6
-rw-r--r--var/spack/repos/builtin/packages/tar/package.py16
-rw-r--r--var/spack/repos/builtin/packages/tar/se-selinux.patch66
-rw-r--r--var/spack/repos/builtin/packages/tar/tar-pgi.patch66
-rw-r--r--var/spack/repos/builtin/packages/targetp/package.py67
-rw-r--r--var/spack/repos/builtin/packages/task/package.py23
-rw-r--r--var/spack/repos/builtin/packages/taskd/package.py22
-rw-r--r--var/spack/repos/builtin/packages/tassel/package.py45
-rw-r--r--var/spack/repos/builtin/packages/tau/package.py6
-rw-r--r--var/spack/repos/builtin/packages/tcl/package.py28
-rw-r--r--var/spack/repos/builtin/packages/tcoffee/package.py57
-rw-r--r--var/spack/repos/builtin/packages/tcsh/package.py65
-rw-r--r--var/spack/repos/builtin/packages/tealeaf/package.py77
-rw-r--r--var/spack/repos/builtin/packages/tetgen/package.py8
-rw-r--r--var/spack/repos/builtin/packages/tethex/package.py19
-rw-r--r--var/spack/repos/builtin/packages/texinfo/package.py6
-rw-r--r--var/spack/repos/builtin/packages/texlive/package.py40
-rw-r--r--var/spack/repos/builtin/packages/the-platinum-searcher/package.py6
-rw-r--r--var/spack/repos/builtin/packages/the-silver-searcher/package.py17
-rw-r--r--var/spack/repos/builtin/packages/thrift/package.py12
-rw-r--r--var/spack/repos/builtin/packages/thrust/package.py40
-rw-r--r--var/spack/repos/builtin/packages/tig/package.py36
-rw-r--r--var/spack/repos/builtin/packages/tinyxml/package.py13
-rw-r--r--var/spack/repos/builtin/packages/tinyxml2/package.py6
-rw-r--r--var/spack/repos/builtin/packages/tk/package.py26
-rw-r--r--var/spack/repos/builtin/packages/tmalign/package.py39
-rw-r--r--var/spack/repos/builtin/packages/tmhmm/package.py56
-rw-r--r--var/spack/repos/builtin/packages/tmux/package.py33
-rw-r--r--var/spack/repos/builtin/packages/tmuxinator/package.py6
-rw-r--r--var/spack/repos/builtin/packages/tophat/package.py47
-rw-r--r--var/spack/repos/builtin/packages/tppred/package.py54
-rw-r--r--var/spack/repos/builtin/packages/transabyss/package.py45
-rw-r--r--var/spack/repos/builtin/packages/transdecoder/package.py50
-rw-r--r--var/spack/repos/builtin/packages/transposome/package.py37
-rw-r--r--var/spack/repos/builtin/packages/transset/package.py14
-rw-r--r--var/spack/repos/builtin/packages/trapproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/tree/package.py6
-rw-r--r--var/spack/repos/builtin/packages/trf/package.py46
-rw-r--r--var/spack/repos/builtin/packages/triangle/package.py6
-rw-r--r--var/spack/repos/builtin/packages/trilinos/package.py459
-rw-r--r--var/spack/repos/builtin/packages/trilinos/xlf_seacas.patch12
-rw-r--r--var/spack/repos/builtin/packages/trimgalore/package.py44
-rw-r--r--var/spack/repos/builtin/packages/trimmomatic/package.py65
-rw-r--r--var/spack/repos/builtin/packages/trimmomatic/trimmomatic.sh3
-rw-r--r--var/spack/repos/builtin/packages/turbine/package.py46
-rw-r--r--var/spack/repos/builtin/packages/turbomole/package.py6
-rw-r--r--var/spack/repos/builtin/packages/tut/package.py43
-rw-r--r--var/spack/repos/builtin/packages/twm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/tycho2/package.py56
-rw-r--r--var/spack/repos/builtin/packages/typhonio/package.py60
-rw-r--r--var/spack/repos/builtin/packages/uberftp/package.py14
-rw-r--r--var/spack/repos/builtin/packages/udunits2/package.py15
-rw-r--r--var/spack/repos/builtin/packages/uncrustify/package.py13
-rw-r--r--var/spack/repos/builtin/packages/unibilium/package.py6
-rw-r--r--var/spack/repos/builtin/packages/unison/package.py8
-rw-r--r--var/spack/repos/builtin/packages/units/package.py36
-rw-r--r--var/spack/repos/builtin/packages/unixodbc/package.py17
-rw-r--r--var/spack/repos/builtin/packages/usearch/package.py49
-rw-r--r--var/spack/repos/builtin/packages/util-linux/package.py35
-rw-r--r--var/spack/repos/builtin/packages/util-macros/package.py16
-rw-r--r--var/spack/repos/builtin/packages/uuid/package.py6
-rw-r--r--var/spack/repos/builtin/packages/valgrind/package.py43
-rw-r--r--var/spack/repos/builtin/packages/valgrind/valgrind_3_12_0_osx.patch13
-rw-r--r--var/spack/repos/builtin/packages/vampirtrace/package.py73
-rw-r--r--var/spack/repos/builtin/packages/vardictjava/package.py47
-rw-r--r--var/spack/repos/builtin/packages/varscan/package.py59
-rw-r--r--var/spack/repos/builtin/packages/varscan/varscan.sh3
-rw-r--r--var/spack/repos/builtin/packages/vc/package.py41
-rw-r--r--var/spack/repos/builtin/packages/vcftools/package.py75
-rw-r--r--var/spack/repos/builtin/packages/vcsh/package.py44
-rw-r--r--var/spack/repos/builtin/packages/vdt/package.py38
-rw-r--r--var/spack/repos/builtin/packages/vecgeom/package.py54
-rw-r--r--var/spack/repos/builtin/packages/veclibfort/package.py28
-rw-r--r--var/spack/repos/builtin/packages/vegas2/package.py49
-rw-r--r--var/spack/repos/builtin/packages/velvet/package.py40
-rw-r--r--var/spack/repos/builtin/packages/videoproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/viennarna/package.py61
-rw-r--r--var/spack/repos/builtin/packages/viewres/package.py14
-rw-r--r--var/spack/repos/builtin/packages/vim/package.py59
-rw-r--r--var/spack/repos/builtin/packages/virtualgl/package.py45
-rw-r--r--var/spack/repos/builtin/packages/visit/package.py42
-rw-r--r--var/spack/repos/builtin/packages/vizglow/package.py63
-rw-r--r--var/spack/repos/builtin/packages/vmatch/package.py42
-rw-r--r--var/spack/repos/builtin/packages/voropp/package.py44
-rw-r--r--var/spack/repos/builtin/packages/votca-csg/package.py46
-rw-r--r--var/spack/repos/builtin/packages/votca-ctp/package.py45
-rw-r--r--var/spack/repos/builtin/packages/votca-moo/package.py43
-rw-r--r--var/spack/repos/builtin/packages/votca-tools/package.py48
-rw-r--r--var/spack/repos/builtin/packages/votca-xtp/package.py48
-rw-r--r--var/spack/repos/builtin/packages/vpfft/package.py67
-rw-r--r--var/spack/repos/builtin/packages/vpic/package.py49
-rw-r--r--var/spack/repos/builtin/packages/vsearch/package.py39
-rw-r--r--var/spack/repos/builtin/packages/vtk/package.py110
-rw-r--r--var/spack/repos/builtin/packages/vtkh/package.py97
-rw-r--r--var/spack/repos/builtin/packages/vtkm/package.py83
-rw-r--r--var/spack/repos/builtin/packages/wannier90/package.py56
-rw-r--r--var/spack/repos/builtin/packages/wget/package.py94
-rw-r--r--var/spack/repos/builtin/packages/windowswmproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/wt/package.py95
-rw-r--r--var/spack/repos/builtin/packages/wx/package.py36
-rw-r--r--var/spack/repos/builtin/packages/wxpropgrid/package.py6
-rw-r--r--var/spack/repos/builtin/packages/x11perf/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xapian-core/package.py39
-rw-r--r--var/spack/repos/builtin/packages/xauth/package.py15
-rw-r--r--var/spack/repos/builtin/packages/xbacklight/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xbiff/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xbitmaps/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xcalc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcb-demo/package.py19
-rw-r--r--var/spack/repos/builtin/packages/xcb-proto/package.py17
-rw-r--r--var/spack/repos/builtin/packages/xcb-proto/xcb-proto-1.12-schema-1.patch52
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-cursor/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-errors/package.py15
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-image/package.py15
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-keysyms/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-renderutil/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcb-util-wm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcb-util/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xclip/package.py46
-rw-r--r--var/spack/repos/builtin/packages/xclipboard/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xclock/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcmiscproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xcmsdb/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcompmgr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xconsole/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xcursor-themes/package.py6
-rw-r--r--var/spack/repos/builtin/packages/xcursorgen/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xdbedizzy/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xditview/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xdm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xdpyinfo/package.py17
-rw-r--r--var/spack/repos/builtin/packages/xdriinfo/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xedit/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xerces-c/package.py22
-rw-r--r--var/spack/repos/builtin/packages/xev/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xextproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xeyes/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xf86bigfontproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xf86dga/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xf86dgaproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xf86driproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xf86miscproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xf86rushproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xf86vidmodeproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xfd/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xfindproxy/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xfontsel/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xfs/package.py15
-rw-r--r--var/spack/repos/builtin/packages/xfsinfo/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xfwp/package.py18
-rw-r--r--var/spack/repos/builtin/packages/xgamma/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xgc/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xhost/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xineramaproto/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xinit/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xinput/package.py17
-rw-r--r--var/spack/repos/builtin/packages/xkbcomp/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkbdata/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkbevd/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkbprint/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkbutils/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkeyboard-config/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xkill/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xload/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xlogo/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xlsatoms/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xlsclients/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xlsfonts/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xmag/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xman/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xmessage/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xmh/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xmlto/package.py18
-rw-r--r--var/spack/repos/builtin/packages/xmodmap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xmore/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xorg-cf-files/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xorg-docs/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xorg-gtest/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xorg-server/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xorg-sgml-doctools/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xphelloworld/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xplor-nih/package.py48
-rw-r--r--var/spack/repos/builtin/packages/xplsprinters/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xpr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xprehashprinterlist/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xprop/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xproto/package.py17
-rw-r--r--var/spack/repos/builtin/packages/xproxymanagementprotocol/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xqilla/package.py56
-rw-r--r--var/spack/repos/builtin/packages/xrandr/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xrdb/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xrefresh/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xrootd/package.py31
-rw-r--r--var/spack/repos/builtin/packages/xrx/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsbench/package.py66
-rw-r--r--var/spack/repos/builtin/packages/xscope/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsdk/package.py84
-rw-r--r--var/spack/repos/builtin/packages/xsdktrilinos/package.py27
-rw-r--r--var/spack/repos/builtin/packages/xset/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsetmode/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsetpointer/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsetroot/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xsm/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xstdcmap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xterm/package.py55
-rw-r--r--var/spack/repos/builtin/packages/xtrans/package.py13
-rw-r--r--var/spack/repos/builtin/packages/xtrap/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xts/package.py18
-rw-r--r--var/spack/repos/builtin/packages/xvidtune/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xvinfo/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xwd/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xwininfo/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xwud/package.py14
-rw-r--r--var/spack/repos/builtin/packages/xz/package.py20
-rw-r--r--var/spack/repos/builtin/packages/yajl/package.py35
-rw-r--r--var/spack/repos/builtin/packages/yaml-cpp/package.py21
-rw-r--r--var/spack/repos/builtin/packages/yasm/package.py13
-rw-r--r--var/spack/repos/builtin/packages/yorick/package.py18
-rw-r--r--var/spack/repos/builtin/packages/z3/package.py55
-rw-r--r--var/spack/repos/builtin/packages/zeromq/package.py31
-rw-r--r--var/spack/repos/builtin/packages/zfp/package.py64
-rw-r--r--var/spack/repos/builtin/packages/zip/package.py46
-rw-r--r--var/spack/repos/builtin/packages/zlib/package.py49
-rw-r--r--var/spack/repos/builtin/packages/zlib/w_patch.patch13
-rw-r--r--var/spack/repos/builtin/packages/zoltan/package.py26
-rw-r--r--var/spack/repos/builtin/packages/zsh/package.py28
-rw-r--r--var/spack/repos/builtin/packages/zstd/package.py40
2961 files changed, 152202 insertions, 27813 deletions
diff --git a/.codecov.yml b/.codecov.yml
new file mode 100644
index 0000000000..11af0577da
--- /dev/null
+++ b/.codecov.yml
@@ -0,0 +1,36 @@
+coverage:
+ precision: 2
+ round: nearest
+ range: 60...90
+ status:
+ project:
+ default: true
+ llnl:
+ threshold: 0.5
+ paths:
+ - lib/spack/llnl
+ commands:
+ threshold: 0.5
+ paths:
+ - lib/spack/spack/cmd
+ build_systems:
+ threshold: 0.5
+ paths:
+ - lib/spack/spack/build_systems
+ modules:
+ threshold: 0.5
+ paths:
+ - lib/spack/spack/modules
+ core:
+ threshold: 0.5
+ paths:
+ - "!lib/spack/llnl"
+ - "!lib/spack/spack/cmd"
+
+ignore:
+ - lib/spack/spack/test/.*
+ - lib/spack/env/.*
+ - lib/spack/docs/.*
+ - lib/spack/external/.*
+
+comment: off
diff --git a/.flake8 b/.flake8
index 023f392952..49199b35c8 100644
--- a/.flake8
+++ b/.flake8
@@ -1,8 +1,8 @@
# -*- conf -*-
-# flake8 settings for Spack.
+# flake8 settings for Spack core files.
#
-# Below we describe which flake8 checks Spack ignores and what the
-# rationale is.
+# These exceptions ar for Spack core files. We're slightly more lenient
+# with packages. See .flake8_packages for that.
#
# Let people line things up nicely:
# - E129: visually indented line with same indent as next logical line
@@ -11,16 +11,11 @@
# - E272: multiple spaces before keyword
#
# Let people use terse Python features:
-# - E731 : lambda expressions
+# - E731: lambda expressions
#
-# Spack allows wildcard imports:
-# - F403: disable wildcard import
-#
-# These are required to get the package.py files to test clean.
-# - F405: `name` may be undefined, or undefined from star imports: `module`
-# - F821: undefined name `name` (needed for cmake, configure, etc.)
+# These are required to get the package.py files to test clean:
# - F999: syntax error in doctest
#
[flake8]
-ignore = E129,E221,E241,E272,E731,F403,F405,F821,F999
+ignore = E129,E221,E241,E272,E731,F999
max-line-length = 79
diff --git a/.flake8_packages b/.flake8_packages
new file mode 100644
index 0000000000..9fcc3b86d4
--- /dev/null
+++ b/.flake8_packages
@@ -0,0 +1,22 @@
+# -*- conf -*-
+# flake8 settings for Spack package files.
+#
+# This should include all the same exceptions that we use for core files.
+#
+# In Spack packages, we also allow the single `from spack import *`
+# wildcard import and dependencies can set globals for their
+# dependents. So we add exceptions for checks related to undefined names.
+#
+# Note that we also add *per-line* exemptions for certain patters in the
+# `spack flake8` command. This is where F403 for `from spack import *`
+# is added (beause we *only* allow that wildcard).
+#
+# See .flake8 for regular exceptions.
+#
+# Redefinition exceptions:
+# - F405: `name` may be undefined, or undefined from star imports: `module`
+# - F821: undefined name `name` (needed for cmake, configure, etc.)
+#
+[flake8]
+ignore = E129,E221,E241,E272,E731,F999,F405,F821
+max-line-length = 79
diff --git a/.gitignore b/.gitignore
index 1a95d49377..49bc74063e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,8 +8,9 @@
*~
.DS_Store
.idea
-/etc/spack/licenses
-/etc/spack/*.yaml
+# Ignore everything in /etc/spack except /etc/spack/defaults
+/etc/spack/*
+!/etc/spack/defaults
/etc/spackconfig
/share/spack/dotkit
/share/spack/modules
diff --git a/.travis.yml b/.travis.yml
index 0a9a118b73..ec88f02e39 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,8 +1,6 @@
#=============================================================================
# Project settings
#=============================================================================
-language: python
-
# Only build master and develop on push; do not build every branch.
branches:
only:
@@ -13,29 +11,87 @@ branches:
#=============================================================================
# Build matrix
#=============================================================================
-python:
- - 2.6
- - 2.7
-
-env:
- - TEST_SUITE=unit
- - TEST_SUITE=flake8
- - TEST_SUITE=doc
-
-matrix:
- # Flake8 and Sphinx no longer support Python 2.6, and one run is enough.
- exclude:
- - python: 2.6
- env: TEST_SUITE=flake8
- - python: 2.6
- env: TEST_SUITE=doc
- # Explicitly include an OS X build with homebrew's python.
- # Works around Python issues on Travis for OSX, described here:
- # http://blog.fizyk.net.pl/blog/running-python-tests-on-traviss-osx-workers.html
+jobs:
+ fast_finish: true
include:
- - os: osx
- language: generic
- env: TEST_SUITE=unit
+ - stage: 'flake8'
+ python: '2.7'
+ os: linux
+ language: python
+ env: TEST_SUITE=flake8
+ - stage: 'unit tests + documentation'
+ python: '2.6'
+ os: linux
+ language: python
+ env: TEST_SUITE=unit
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=unit, COVERAGE=true ]
+ - python: '3.3'
+ os: linux
+ language: python
+ env: TEST_SUITE=unit
+ - python: '3.4'
+ os: linux
+ language: python
+ env: TEST_SUITE=unit
+ - python: '3.5'
+ os: linux
+ language: python
+ env: TEST_SUITE=unit
+ - python: '3.6'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=unit, COVERAGE=true ]
+ - os: osx
+ language: generic
+ env: [ TEST_SUITE=unit, PYTHON_VERSION=2.7, COVERAGE=true ]
+ - python: '2.7'
+ os: linux
+ language: python
+ env: TEST_SUITE=doc
+# mpich (AutotoolsPackage)
+ - stage: 'build tests'
+ python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=mpich' ]
+# astyle (MakefilePackage)
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=astyle' ]
+# tut (WafPackage)
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=tut' ]
+# py-setuptools (PythonPackage)
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=py-setuptools' ]
+# perl-dbi (PerlPackage)
+# - python: '2.7'
+# os: linux
+# language: python
+# env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=perl-dbi' ]
+# openjpeg (CMakePackage + external cmake)
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=openjpeg' ]
+# r-rcpp (RPackage + external R)
+ - python: '2.7'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=r-rcpp' ]
+# mpich (AutotoolsPackage)
+ - python: '3.6'
+ os: linux
+ language: python
+ env: [ TEST_SUITE=build, COVERAGE=true, 'SPEC=mpich' ]
#=============================================================================
# Environment
@@ -48,23 +104,35 @@ addons:
apt:
packages:
- gfortran
+ - mercurial
- graphviz
- - libyaml-dev
+ - gnupg2
+ - cmake
+ - r-base
+ - r-base-core
+ - r-base-dev
+ - perl
+ - perl-base
+
+cache: pip
# Work around Travis's lack of support for Python on OSX
before_install:
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions python > /dev/null || brew install python; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions gcc > /dev/null || brew install gcc; fi
+ - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew ls --versions gnupg2 > /dev/null || brew install gnupg2; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then virtualenv venv; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source venv/bin/activate; fi
# Install various dependencies
install:
- - pip install --upgrade coveralls
+ - pip install --upgrade pip
+ - pip install --upgrade six
+ - pip install --upgrade setuptools
+ - pip install --upgrade codecov
- pip install --upgrade flake8
- - pip install --upgrade sphinx
- - pip install --upgrade mercurial
+ - if [[ "$TEST_SUITE" == "doc" ]]; then pip install --upgrade -r lib/spack/docs/requirements.txt; fi
before_script:
# Need this for the git tests to succeed.
@@ -74,13 +142,16 @@ before_script:
# Need this to be able to compute the list of changed files
- git fetch origin develop:develop
+ # Set up external dependencies for build tests, because the take too long to compile
+ - if [[ "$TEST_SUITE" == "build" ]]; then cp share/spack/qa/configuration/packages.yaml etc/spack/packages.yaml; fi
+
#=============================================================================
# Building
#=============================================================================
script: share/spack/qa/run-$TEST_SUITE-tests
after_success:
- - if [[ $TEST_SUITE == unit && $TRAVIS_PYTHON_VERSION == 2.7 && $TRAVIS_OS_NAME == "linux" ]]; then coveralls; fi
+ - codecov --env PY_VERSION
#=============================================================================
# Notifications
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000000..7561d97c2f
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at maintainers@spack.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000000..b72967ae54
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,5 @@
+# Contributing to Spack
+
+Before contributing to Spack you should read the
+[Contribution Guide](https://spack.readthedocs.io/en/latest/contribution_guide.html),
+which is maintained as part of Spack's documentation.
diff --git a/LICENSE b/LICENSE
index d7d101a3ac..744bb9f3b5 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,135 +1,197 @@
-########################################################################
-GNU LESSER GENERAL PUBLIC LICENSE (Lesser GPL)
-Version 2.1, February 1999
-########################################################################
-Copyright (c) 2013-2016, 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
-
-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
-
-########################################################################
-LLNL NOTICE AND TERMS AND CONDITIONS OF THE GNU LGPL
-
-LLNL Preamble Notice
-
-A. This notice is required to be provided under LLNL's contract with
- the U.S. Department of Energy (DOE). This work was produced at the
- Lawrence Livermore National Laboratory under Contract
- No. DE-AC52-07NA27344 with the DOE.
-
-B. Neither the United States Government nor Lawrence Livermore
- National Security, LLC nor any of their employees, makes any
- warranty, express or implied, or assumes any liability or
- responsibility for the accuracy, completeness, or usefulness of any
- information, apparatus, product, or process disclosed, or
- represents that its use would not infringe privately-owned rights.
-
-C. Also, reference herein to any specific commercial products,
- process, or services by trade name, trademark, manufacturer or
- otherwise does not necessarily constitute or imply its endorsement,
- recommendation, or favoring by the United States Government or
- Lawrence Livermore National Security, LLC. The views and opinions
- of authors expressed herein do not necessarily state or reflect
- those of the United States Government or Lawrence Livermore
- National Security, LLC, and shall not be used for advertising or
- product endorsement purposes.
-
-The precise terms and conditions for copying, distribution and
-modification follows.
-
-########################################################################
-GNU LESSER GENERAL PUBLIC LICENSE
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. This License Agreement applies to any software library or other
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License"). Each
-licensee is addressed as "you".
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
-A "library" means a collection of software functions and/or data
+ A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
-The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
+straightforwardly into another language. (Hereinafter, translation is
included without limitation in the term "modification".)
-"Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control
-compilation and installation of the library. Activities other than
-copying, distribution and modification are not covered by this
-License; they are outside its scope. The act of running a program
-using the Library is not restricted, and output from such a program is
-covered only if its contents constitute a work based on the Library
-(independent of the use of the Library in a tool for writing
-it). Whether that is true depends on what the Library does and what
-the program that uses the Library does.
-
-1. You may copy and distribute verbatim copies of the Library's
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
-Library. You may charge a fee for the physical act of transferring a
-copy, and you may at your option offer warranty protection in exchange
-for a fee.
-
-2. You may modify your copy or copies of the Library or any portion of
-it, thus forming a work based on the Library, and copy and distribute
-such modifications or work under the terms of Section 1 above,
-provided that you also meet all of these conditions:
-
-a) The modified work must itself be a software library.
-
-b) You must cause the files modified to carry prominent notices
-stating that you changed the files and the date of any change.
-
-c) You must cause the whole of the work to be licensed at no charge to
-all third parties under the terms of this License.
-
-d) If a facility in the modified Library refers to a function or a
-table of data to be supplied by an application program that uses the
-facility, other than as an argument passed when the facility is
-invoked, then you must make a good faith effort to ensure that, in the
-event an application does not supply such function or table, the
-facility still operates, and performs whatever part of its purpose
-remains meaningful. (For example, a function in a library to compute
-square roots has a purpose that is entirely well-defined independent
-of the application. Therefore, Subsection 2d requires that any
-application-supplied function or table used by this function must be
-optional: if the application does not supply it, the square root
-function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
+sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
@@ -146,189 +208,191 @@ with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
-3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
+instead of to this License. (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
+that version instead if you wish.) Do not make any other change in
these notices.
-Once this change is made in a given copy, it is irreversible for that
-copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy. This
-option is useful when you wish to copy part of the code of the Library
-into a program that is not a library.
-
-4. You may copy and distribute the Library (or a portion or derivative
-of it, under Section 2) in object code or executable form under the
-terms of Sections 1 and 2 above provided that you accompany it with
-the complete corresponding machine- readable source code, which must
-be distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange.
-
-If distribution of object code is made by offering access to copy from
-a designated place, then offering equivalent access to copy the source
-code from the same place satisfies the requirement to distribute the
-source code, even though third parties are not compelled to copy the
-source along with the object code.
-
-5. A program that contains no derivative of any portion of the
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a work,
-in isolation, is not a derivative work of the Library, and therefore
-falls outside the scope of this License.
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
-However, linking a "work that uses the Library" with the Library
+ However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License. Section
-6 states terms for distribution of such executables.
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
-When a "work that uses the Library" uses material from a header file
+ When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is
-not. Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
threshold for this to be true is not precisely defined by law.
-If such an object file uses only numerical parameters, data structure
-layouts and accessors, and small macros and small inline functions
-(ten lines or less in length), then the use of the object file is
-unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under section 6.)
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
-Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section
-6. Any executables containing that work also fall under Section 6,
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
-6. As an exception to the Sections above, you may also combine or link
-a "work that uses the Library" with the Library to produce a work
-containing portions of the Library, and distribute that work under
-terms of your choice, provided that the terms permit modification of
-the work for the customer's own use and reverse engineering for
-debugging such modifications.
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
-You must give prominent notice with each copy of the work that the
+ You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
+this License. You must supply a copy of this License. If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
+directing the user to the copy of this License. Also, you must do one
of these things:
-a) Accompany the work with the complete corresponding machine-readable
-source code for the Library including whatever changes were used in
-the work (which must be distributed under Sections 1 and 2 above);
-and, if the work is an executable liked with the Library, with the
-complete machine-readable "work that uses the Library", as object code
-and/or source code, so that the user can modify the Library and then
-relink to produce a modified executable containing the modified
-Library. (It is understood that the user who changes the contents of
-definitions files in the Library will not necessarily be able to
-recompile the application to use the modified definitions.)
-
-b) Use a suitable shared library mechanism for linking with the
-Library. A suitable mechanism is one that (1) uses at run time a copy
-of the library already present on the user's computer system, rather
-than copying library functions into the executable, and (2) will
-operate properly with a modified version of the library, if the user
-installs one, as long as the modified version is interface- compatible
-with the version that the work was made with.
-
-c) Accompany the work with a written offer, valid for at least three
-years, to give the same user the materials specified in Subsection 6a,
-above, for a charge no more than the cost of performing this
-distribution.
-
-d) If distribution of the work is made by offering access to copy from
-a designated place, offer equivalent access to copy the above
-specified materials from the same place.
-
-e) Verify that the user has already received a copy of these materials
-or that you have already sent this user a copy.
-
-For an executable, the required form of the "work that uses the
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
+reproducing the executable from it. However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
-It may happen that this requirement contradicts the license
-restrictions of other propriety libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
-7. You may place library facilities that are a work based on the
+ 7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
-a) Accompany the combined library with a copy of the same work based
-on the Library, uncombined with any other library facilities. This
-must be distributed under the terms of the Sections above.
-
-b) Give prominent notice with the combined library of the fact that
-part of it is a work based on the Library, and explaining where to
-find the accompanying uncombined form of the same work.
-
-1 You may not copy, modify, sublicense, link with, or distribute the
-Library except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense, link with, or distribute the
-Library is void, and will automatically terminate your rights under
-this License. However, parties who have received copies, or rights,
-from you under this License will not have their licenses terminated so
-long as such parties remain in full compliance.
-
-2 You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
-3 Each time you redistribute the Library (or any work based on the
+ 10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted
-herein. You are not responsible for enforcing compliance by third
-parties with this License.
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
-4 If, as a consequence of a court judgment or allegation of patent
+ 11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
+excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
+may not distribute the Library at all. For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply, and the section as a whole is intended to apply in other
-circumstances.
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
+implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
@@ -338,56 +402,102 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
-1 If the distribution and/or use of the Library is restricted in
+ 12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time. Such
-new versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
+the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
-2 If you wish to incorporate parts of the Library into other free
+ 14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
+write to the author to ask for permission. For software which is
copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
+Software Foundation; we sometimes make exceptions for this. Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
-NO WARRANTY
+ NO WARRANTY
-1 BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
-WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER
-PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND,
-EITHER EXPRESSED OR IMPLIED INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-2 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE
-
-LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL
-OR CONSQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library 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; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library 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 GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000000..ed0d0df792
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,32 @@
+########################################################################
+LLNL NOTICE AND TERMS AND CONDITIONS OF THE GNU LGPL
+########################################################################
+
+LLNL Preamble Notice
+
+A. This notice is required to be provided under LLNL's contract with
+ the U.S. Department of Energy (DOE). This work was produced at the
+ Lawrence Livermore National Laboratory under Contract
+ No. DE-AC52-07NA27344 with the DOE.
+
+B. Neither the United States Government nor Lawrence Livermore
+ National Security, LLC nor any of their employees, makes any
+ warranty, express or implied, or assumes any liability or
+ responsibility for the accuracy, completeness, or usefulness of any
+ information, apparatus, product, or process disclosed, or
+ represents that its use would not infringe privately-owned rights.
+
+C. Also, reference herein to any specific commercial products,
+ process, or services by trade name, trademark, manufacturer or
+ otherwise does not necessarily constitute or imply its endorsement,
+ recommendation, or favoring by the United States Government or
+ Lawrence Livermore National Security, LLC. The views and opinions
+ of authors expressed herein do not necessarily state or reflect
+ those of the United States Government or Lawrence Livermore
+ National Security, LLC, and shall not be used for advertising or
+ product endorsement purposes.
+
+See the LICENSE file for the precise terms and conditions for copying,
+distribution and modification.
+
+########################################################################
diff --git a/README.md b/README.md
index 9d005605eb..04b047f722 100644
--- a/README.md
+++ b/README.md
@@ -1,31 +1,30 @@
-![image](share/spack/logo/spack-logo-text-64.png "Spack")
-============
-
-[![Build Status](https://travis-ci.org/LLNL/spack.svg?branch=develop)](https://travis-ci.org/LLNL/spack)
-[![Coverage Status](https://coveralls.io/repos/github/LLNL/spack/badge.svg?branch=develop)](https://coveralls.io/github/LLNL/spack?branch=develop)
-
-Spack is a package management tool designed to support multiple
-versions and configurations of software on a wide variety of platforms
-and environments. It was designed for large supercomputing centers,
-where many users and application teams share common installations of
-software on clusters with exotic architectures, using libraries that
-do not have a standard ABI. Spack is non-destructive: installing a new
-version does not break existing installations, so many configurations
-can coexist on the same system.
-
-Most importantly, Spack is simple. It offers a simple spec syntax so
-that users can specify versions and configuration options
-concisely. Spack is also simple for package authors: package files are
-written in pure Python, and specs allow package authors to write a
-single build script for many different builds of the same package.
+# <img src="https://cdn.rawgit.com/spack/spack/develop/share/spack/logo/spack-logo.svg" width="64" valign="middle" alt="Spack"/> Spack
+
+[![Build Status](https://travis-ci.org/spack/spack.svg?branch=develop)](https://travis-ci.org/spack/spack)
+[![codecov](https://codecov.io/gh/spack/spack/branch/develop/graph/badge.svg)](https://codecov.io/gh/spack/spack)
+[![Read the Docs](https://readthedocs.org/projects/spack/badge/?version=latest)](https://spack.readthedocs.io)
+[![Slack](https://spackpm.herokuapp.com/badge.svg)](https://spackpm.herokuapp.com)
+
+Spack is a multi-platform package manager that builds and installs
+multiple versions and configurations of software. It works on Linux,
+macOS, and many supercomputers. Spack is non-destructive: installing a
+new version of a package does not break existing installations, so many
+configurations of the same package can coexist.
+
+Spack offers a simple "spec" syntax that allows users to specify versions
+and configuration options. Package files are written in pure Python, and
+specs allow package authors to write a single script for many different
+builds of the same package. With Spack, you can build your software
+*all* the ways you want to.
See the
[Feature Overview](http://spack.readthedocs.io/en/latest/features.html)
for examples and highlights.
-To install spack and install your first package:
+To install spack and your first package, make sure you have Python.
+Then:
- $ git clone https://github.com/llnl/spack.git
+ $ git clone https://github.com/spack/spack.git
$ cd spack/bin
$ ./spack install libelf
@@ -35,15 +34,16 @@ Documentation
[**Full documentation**](http://spack.readthedocs.io/) for Spack is
the first place to look.
-We've also got a [**Spack 101 Tutorial**](http://spack.readthedocs.io/en/latest/tutorial_sc16.html),
-so you can learn Spack yourself, or teach users at your own site.
+Try the
+[**Spack Tutorial**](http://spack.readthedocs.io/en/latest/tutorial.html),
+to learn how to use spack, write packages, or deploy packages for users
+at your site.
See also:
* [Technical paper](http://www.computer.org/csdl/proceedings/sc/2015/3723/00/2807623.pdf) and
[slides](https://tgamblin.github.io/files/Gamblin-Spack-SC15-Talk.pdf) on Spack's design and implementation.
* [Short presentation](https://tgamblin.github.io/files/Gamblin-Spack-Lightning-Talk-BOF-SC15.pdf) from the *Getting Scientific Software Installed* BOF session at Supercomputing 2015.
-
Get Involved!
------------------------
@@ -53,37 +53,44 @@ packages to bugfixes, or even new core features.
### Mailing list
-If you are interested in contributing to spack, the first step is to
-join the mailing list. We're using a Google Group for this, and you
-can join it here:
+If you are interested in contributing to spack, join the mailing list.
+We're using Google Groups for this:
* [Spack Google Group](https://groups.google.com/d/forum/spack)
+### Slack channel
+
+Spack has a Slack channel where you can chat about all things Spack:
+
+ * [Spack on Slack](https://spackpm.slack.com)
+
+[Sign up here](https://spackpm.herokuapp.com) to get an invitation mailed
+to you.
+
### Contributions
Contributing to Spack is relatively easy. Just send us a
[pull request](https://help.github.com/articles/using-pull-requests/).
When you send your request, make ``develop`` the destination branch on the
-[Spack repository](https://github.com/LLNL/spack).
+[Spack repository](https://github.com/spack/spack).
Your PR must pass Spack's unit tests and documentation tests, and must be
-[PEP 8](https://www.python.org/dev/peps/pep-0008/) compliant.
-We enforce these guidelines with [Travis CI](https://travis-ci.org/LLNL/spack).
-To run these tests locally, and for helpful tips on git, see our
+[PEP 8](https://www.python.org/dev/peps/pep-0008/) compliant. We enforce
+these guidelines with [Travis CI](https://travis-ci.org/spack/spack). To
+run these tests locally, and for helpful tips on git, see our
[Contribution Guide](http://spack.readthedocs.io/en/latest/contribution_guide.html).
-Spack uses a rough approximation of the [Git
-Flow](http://nvie.com/posts/a-successful-git-branching-model/)
+Spack uses a rough approximation of the
+[Git Flow](http://nvie.com/posts/a-successful-git-branching-model/)
branching model. The ``develop`` branch contains the latest
-contributions, and ``master`` is always tagged and points to the
-latest stable release.
-
+contributions, and ``master`` is always tagged and points to the latest
+stable release.
Authors
----------------
-Many thanks go to Spack's [contributors](https://github.com/llnl/spack/graphs/contributors).
+Many thanks go to Spack's [contributors](https://github.com/spack/spack/graphs/contributors).
-Spack was originally written by Todd Gamblin, tgamblin@llnl.gov.
+Spack was created by Todd Gamblin, tgamblin@llnl.gov.
### Citing Spack
@@ -97,6 +104,8 @@ If you are referencing Spack in a publication, please cite the following paper:
Release
----------------
Spack is released under an LGPL license. For more details see the
-LICENSE file.
+NOTICE and LICENSE files.
``LLNL-CODE-647188``
+
+![Analytics](https://ga-beacon.appspot.com/UA-101208306-3/welcome-page?pixel)
diff --git a/bin/sbang b/bin/sbang
index e71074b330..f7182c0f23 100755
--- a/bin/sbang
+++ b/bin/sbang
@@ -1,14 +1,14 @@
#!/bin/bash
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -104,18 +104,27 @@ lines=0
while read line && ((lines < 2)) ; do
if [[ "$line" = '#!'* ]]; then
interpreter="${line#\#!}"
+ elif [[ "$line" = '//!'*node* ]]; then
+ interpreter="${line#//!}"
elif [[ "$line" = '--!'*lua* ]]; then
interpreter="${line#--!}"
fi
lines=$((lines+1))
done < "$script"
+# this is ineeded for scripts with sbang parameter
+# like ones in intltool
+# #!/<spack-long-path>/perl -w
+# this is the interpreter line with all the parameters as a vector
+interpreter_v=(${interpreter})
+# this is the single interpreter path
+interpreter_f="${interpreter_v[0]}"
# Invoke any interpreter found, or raise an error if none was found.
-if [[ -n "$interpreter" ]]; then
- if [[ "${interpreter##*/}" = "perl" ]]; then
- exec $interpreter -x "$@"
+if [[ -n "$interpreter_f" ]]; then
+ if [[ "${interpreter_f##*/}" = "perl" ]]; then
+ exec $interpreter_v -x "$@"
else
- exec $interpreter "$@"
+ exec $interpreter_v "$@"
fi
else
echo "error: sbang found no interpreter in $script"
diff --git a/bin/spack b/bin/spack
index 66bebe57e7..51dbce695b 100755
--- a/bin/spack
+++ b/bin/spack
@@ -1,15 +1,14 @@
#!/usr/bin/env python
-# flake8: noqa
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,27 +23,34 @@
# 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 __future__ import print_function
+
+import os
import sys
-if (sys.version_info[0] > 2) or (sys.version_info[:2] < (2, 6)):
+
+if sys.version_info[:2] < (2, 6):
v_info = sys.version_info[:3]
- sys.exit("Spack requires Python 2.6 or 2.7. "
+ sys.exit("Spack requires Python 2.6 or higher."
"This is Python %d.%d.%d." % v_info)
-import os
-import inspect
-
# Find spack's location and its prefix.
-SPACK_FILE = os.path.realpath(os.path.expanduser(__file__))
-os.environ["SPACK_FILE"] = SPACK_FILE
-SPACK_PREFIX = os.path.dirname(os.path.dirname(SPACK_FILE))
+spack_file = os.path.realpath(os.path.expanduser(__file__))
+spack_prefix = os.path.dirname(os.path.dirname(spack_file))
# Allow spack libs to be imported in our scripts
-SPACK_LIB_PATH = os.path.join(SPACK_PREFIX, "lib", "spack")
-sys.path.insert(0, SPACK_LIB_PATH)
+spack_lib_path = os.path.join(spack_prefix, "lib", "spack")
+sys.path.insert(0, spack_lib_path)
# Add external libs
-SPACK_EXTERNAL_LIBS = os.path.join(SPACK_LIB_PATH, "external")
-sys.path.insert(0, SPACK_EXTERNAL_LIBS)
+spack_external_libs = os.path.join(spack_lib_path, "external")
+sys.path.insert(0, spack_external_libs)
+
+# Handle vendoring of YAML specially, as it has two versions.
+if sys.version_info[0] == 2:
+ spack_yaml_libs = os.path.join(spack_external_libs, "yaml/lib")
+else:
+ spack_yaml_libs = os.path.join(spack_external_libs, "yaml/lib3")
+sys.path.insert(0, spack_yaml_libs)
# Quick and dirty check to clean orphaned .pyc files left over from
# previous revisions. These files were present in earlier versions of
@@ -52,13 +58,13 @@ sys.path.insert(0, SPACK_EXTERNAL_LIBS)
# imports. If we leave them, Spack will fail in mysterious ways.
# TODO: more elegant solution for orphaned pyc files.
orphaned_pyc_files = [
- os.path.join(SPACK_EXTERNAL_LIBS, 'functools.pyc'),
- os.path.join(SPACK_EXTERNAL_LIBS, 'ordereddict.pyc'),
- os.path.join(SPACK_LIB_PATH, 'spack', 'platforms', 'cray_xc.pyc'),
- os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'package-list.pyc'),
- os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'test-install.pyc'),
- os.path.join(SPACK_LIB_PATH, 'spack', 'cmd', 'url-parse.pyc'),
- os.path.join(SPACK_LIB_PATH, 'spack', 'test', 'yaml.pyc')
+ os.path.join(spack_external_libs, 'functools.pyc'),
+ os.path.join(spack_external_libs, 'ordereddict.pyc'),
+ os.path.join(spack_lib_path, 'spack', 'platforms', 'cray_xc.pyc'),
+ os.path.join(spack_lib_path, 'spack', 'cmd', 'package-list.pyc'),
+ os.path.join(spack_lib_path, 'spack', 'cmd', 'test-install.pyc'),
+ os.path.join(spack_lib_path, 'spack', 'cmd', 'url-parse.pyc'),
+ os.path.join(spack_lib_path, 'spack', 'test', 'yaml.pyc')
]
for pyc_file in orphaned_pyc_files:
@@ -67,146 +73,9 @@ for pyc_file in orphaned_pyc_files:
try:
os.remove(pyc_file)
except OSError as e:
- print ("WARNING: Spack may fail mysteriously. "
- "Couldn't remove orphaned .pyc file: %s" % pyc_file)
-
-# If there is no working directory, use the spack prefix.
-try:
- working_dir = os.getcwd()
-except OSError:
- os.chdir(SPACK_PREFIX)
- working_dir = SPACK_PREFIX
-
-# clean up the scope and start using spack package instead.
-del SPACK_FILE, SPACK_PREFIX, SPACK_LIB_PATH
-import llnl.util.tty as tty
-from llnl.util.tty.color import *
-import spack
-from spack.error import SpackError
-import argparse
-
-# Command parsing
-parser = argparse.ArgumentParser(
- formatter_class=argparse.RawTextHelpFormatter,
- description="Spack: the Supercomputing PACKage Manager." + colorize("""
-
-spec expressions:
- PACKAGE [CONSTRAINTS]
-
- CONSTRAINTS:
- @c{@version}
- @g{%compiler @compiler_version}
- @B{+variant}
- @r{-variant} or @r{~variant}
- @m{=architecture}
- [^DEPENDENCY [CONSTRAINTS] ...]"""))
-
-parser.add_argument('-d', '--debug', action='store_true',
- help="Write out debug logs during compile")
-parser.add_argument('-D', '--pdb', action='store_true',
- help="Run spack under the pdb debugger")
-parser.add_argument('-k', '--insecure', action='store_true',
- help="Do not check ssl certificates when downloading.")
-parser.add_argument('-m', '--mock', action='store_true',
- help="Use mock packages instead of real ones.")
-parser.add_argument('-p', '--profile', action='store_true',
- help="Profile execution using cProfile.")
-parser.add_argument('-v', '--verbose', action='store_true',
- help="Print additional output during builds")
-parser.add_argument('-s', '--stacktrace', action='store_true',
- help="Add stacktrace information to all printed statements")
-parser.add_argument('-V', '--version', action='version',
- version="%s" % spack.spack_version)
-
-# each command module implements a parser() function, to which we pass its
-# subparser for setup.
-subparsers = parser.add_subparsers(metavar='SUBCOMMAND', dest="command")
-
-
-import spack.cmd
-for cmd in spack.cmd.commands:
- module = spack.cmd.get_module(cmd)
- cmd_name = cmd.replace('_', '-')
- subparser = subparsers.add_parser(cmd_name, help=module.description)
- module.setup_parser(subparser)
-
-
-def _main(args, unknown_args):
- # Set up environment based on args.
- tty.set_verbose(args.verbose)
- tty.set_debug(args.debug)
- tty.set_stacktrace(args.stacktrace)
- spack.debug = args.debug
-
- if spack.debug:
- import spack.util.debug as debug
- debug.register_interrupt_handler()
-
- # Run any available pre-run hooks
- spack.hooks.pre_run()
-
- spack.spack_working_dir = working_dir
- if args.mock:
- from spack.repository import RepoPath
- spack.repo.swap(RepoPath(spack.mock_packages_path))
-
- # If the user asked for it, don't check ssl certs.
- if args.insecure:
- tty.warn("You asked for --insecure. Will NOT check SSL certificates.")
- spack.insecure = True
-
- # Try to load the particular command asked for and run it
- command = spack.cmd.get_command(args.command.replace('-', '_'))
-
- # Allow commands to inject an optional argument and get unknown args
- # if they want to handle them.
- info = dict(inspect.getmembers(command))
- varnames = info['__code__'].co_varnames
- argcount = info['__code__'].co_argcount
-
- # Actually execute the command
- try:
- if argcount == 3 and varnames[2] == 'unknown_args':
- return_val = command(parser, args, unknown_args)
- else:
- if unknown_args:
- tty.die('unrecognized arguments: %s' % ' '.join(unknown_args))
- return_val = command(parser, args)
- except SpackError as e:
- e.die()
- except KeyboardInterrupt:
- sys.stderr.write('\n')
- tty.die("Keyboard interrupt.")
-
- # Allow commands to return values if they want to exit with some other code.
- if return_val is None:
- sys.exit(0)
- elif isinstance(return_val, int):
- sys.exit(return_val)
- else:
- tty.die("Bad return value from command %s: %s"
- % (args.command, return_val))
-
-
-def main(args):
- # Just print help and exit if run with no arguments at all
- if len(args) == 1:
- parser.print_help()
- sys.exit(1)
-
- # actually parse the args.
- args, unknown = parser.parse_known_args()
-
- if args.profile:
- import cProfile
- cProfile.runctx('_main(args, unknown)', globals(), locals(),
- sort='time')
- elif args.pdb:
- import pdb
- pdb.runctx('_main(args, unknown)', globals(), locals())
- else:
- _main(args, unknown)
-
+ print("WARNING: Spack may fail mysteriously. "
+ "Couldn't remove orphaned .pyc file: %s" % pyc_file)
-if __name__ == '__main__':
- main(sys.argv)
+# Once we've set up the system path, run the spack main method
+import spack.main # noqa
+sys.exit(spack.main.main())
diff --git a/bin/spack-python b/bin/spack-python
index 96bc367866..2a717025bf 100755
--- a/bin/spack-python
+++ b/bin/spack-python
@@ -1,14 +1,14 @@
#!/bin/sh
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/etc/spack/defaults/config.yaml b/etc/spack/defaults/config.yaml
index 4e02d0973d..b6a09a7738 100644
--- a/etc/spack/defaults/config.yaml
+++ b/etc/spack/defaults/config.yaml
@@ -18,6 +18,9 @@ config:
# You can use $spack here to refer to the root of the spack instance.
install_tree: $spack/opt/spack
+ # Locations where templates should be found
+ template_dirs:
+ - $spack/templates
# Locations where different types of modules should be installed.
module_roots:
@@ -66,3 +69,9 @@ config:
# If set to true, `spack install` and friends will NOT clean
# potentially harmful variables from the build environment. Use wisely.
dirty: false
+
+
+ # The default number of jobs to use when running `make` in parallel.
+ # If set to 4, for example, `spack install` will run `make -j4`.
+ # If not set, all available cores are used by default.
+ # build_jobs: 4
diff --git a/etc/spack/defaults/modules.yaml b/etc/spack/defaults/modules.yaml
index 25fe2088e7..8b6f1b40af 100644
--- a/etc/spack/defaults/modules.yaml
+++ b/etc/spack/defaults/modules.yaml
@@ -40,3 +40,7 @@ modules:
- PKG_CONFIG_PATH
'':
- CMAKE_PREFIX_PATH
+
+ lmod:
+ hierarchy:
+ - mpi
diff --git a/etc/spack/defaults/packages.yaml b/etc/spack/defaults/packages.yaml
index eae7752eee..2cfdd399df 100644
--- a/etc/spack/defaults/packages.yaml
+++ b/etc/spack/defaults/packages.yaml
@@ -17,7 +17,21 @@ packages:
all:
compiler: [gcc, intel, pgi, clang, xl, nag]
providers:
- mpi: [openmpi, mpich]
+ awk: [gawk]
blas: [openblas]
+ daal: [intel-daal]
+ elf: [elfutils]
+ golang: [gcc]
+ ipp: [intel-ipp]
+ java: [jdk]
lapack: [openblas]
+ mkl: [intel-mkl]
+ mpe: [mpe2]
+ mpi: [openmpi, mpich]
+ opencl: [pocl]
+ openfoam: [openfoam-com, openfoam-org, foam-extend]
pil: [py-pillow]
+ scalapack: [netlib-scalapack]
+ szip: [libszip, libaec]
+ tbb: [intel-tbb]
+ jpeg: [libjpeg-turbo, libjpeg]
diff --git a/lib/spack/docs/.gitignore b/lib/spack/docs/.gitignore
index 0bbf78cce0..9afb658706 100644
--- a/lib/spack/docs/.gitignore
+++ b/lib/spack/docs/.gitignore
@@ -1,5 +1,5 @@
package_list.rst
command_index.rst
spack*.rst
-modules.rst
+llnl*.rst
_build
diff --git a/lib/spack/docs/Makefile b/lib/spack/docs/Makefile
index bcba423d94..3503794021 100644
--- a/lib/spack/docs/Makefile
+++ b/lib/spack/docs/Makefile
@@ -3,13 +3,12 @@
# You can set these variables from the command line.
SPHINXOPTS = -E
-JOBS ?= $(shell python -c 'import multiprocessing; print multiprocessing.cpu_count()')
-SPHINXBUILD = sphinx-build -j $(JOBS)
+SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
export PYTHONPATH := ../../spack:$(PYTHONPATH)
-APIDOC_FILES = spack*.rst
+APIDOC_FILES = spack*.rst llnl*.rst
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
@@ -58,7 +57,8 @@ upload:
git push -f github gh-pages
apidoc:
- sphinx-apidoc -T -o . $(PYTHONPATH)/spack
+ sphinx-apidoc -f -T -o . ../spack
+ sphinx-apidoc -f -T -o . ../llnl
help:
@echo "Please use \`make <target>' where <target> is one of"
@@ -83,7 +83,7 @@ help:
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
- -rm -f package_list.rst command_index.rst modules.rst
+ -rm -f package_list.rst command_index.rst
-rm -rf $(BUILDDIR)/* $(APIDOC_FILES)
html:
diff --git a/lib/spack/docs/_themes/sphinx_rtd_theme/footer.html b/lib/spack/docs/_themes/sphinx_rtd_theme/footer.html
index d000dcbc2c..958ebbd2f7 100644
--- a/lib/spack/docs/_themes/sphinx_rtd_theme/footer.html
+++ b/lib/spack/docs/_themes/sphinx_rtd_theme/footer.html
@@ -24,7 +24,7 @@
<br/>
Written by Todd Gamblin (<a href="mailto:tgamblin@llnl.gov">tgamblin@llnl.gov</a>) and
- many contributors. LLNL-CODE-647188.
+ many <a href="https://github.com/spack/spack/graphs/contributors">contributors.</a> LLNL-CODE-647188.
{%- if last_updated %}
<br/>
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst
index f25247579b..bb426b4378 100644
--- a/lib/spack/docs/basic_usage.rst
+++ b/lib/spack/docs/basic_usage.rst
@@ -808,17 +808,46 @@ Specifying Specs by Hash
^^^^^^^^^^^^^^^^^^^^^^^^
Complicated specs can become cumbersome to enter on the command line,
-especially when many of the qualifications are necessary to
-distinguish between similar installs, for example when using the
-``uninstall`` command. To avoid this, when referencing an existing spec,
+especially when many of the qualifications are necessary to distinguish
+between similar installs. To avoid this, when referencing an existing spec,
Spack allows you to reference specs by their hash. We previously
discussed the spec hash that Spack computes. In place of a spec in any
command, substitute ``/<hash>`` where ``<hash>`` is any amount from
-the beginning of a spec hash. If the given spec hash is sufficient
-to be unique, Spack will replace the reference with the spec to which
-it refers. Otherwise, it will prompt for a more qualified hash.
+the beginning of a spec hash.
-Note that this will not work to reinstall a depencency uninstalled by
+For example, lets say that you accidentally installed two different
+``mvapich2`` installations. If you want to uninstall one of them but don't
+know what the difference is, you can run:
+
+.. code-block:: console
+
+ $ spack find --long mvapich2
+ ==> 2 installed packages.
+ -- linux-centos7-x86_64 / gcc@6.3.0 ----------
+ qmt35td mvapich2@2.2%gcc
+ er3die3 mvapich2@2.2%gcc
+
+
+You can then uninstall the latter installation using:
+
+.. code-block:: console
+
+ $ spack uninstall /er3die3
+
+
+Or, if you want to build with a specific installation as a dependency,
+you can use:
+
+.. code-block:: console
+
+ $ spack install trilinos ^/er3die3
+
+
+If the given spec hash is sufficiently long as to be unique, Spack will
+replace the reference with the spec to which it refers. Otherwise, it will
+prompt for a more qualified hash.
+
+Note that this will not work to reinstall a dependency uninstalled by
``spack uninstall --force``.
.. _cmd-spack-providers:
diff --git a/lib/spack/docs/binary_caches.rst b/lib/spack/docs/binary_caches.rst
new file mode 100644
index 0000000000..c7eed69a6e
--- /dev/null
+++ b/lib/spack/docs/binary_caches.rst
@@ -0,0 +1,132 @@
+.. _binary_caches:
+
+============
+Build caches
+============
+
+Some sites may encourage users to set up their own test environments
+before carrying out central installations, or some users may prefer to set
+up these environments on their own motivation. To reduce the load of
+recompiling otherwise identical package specs in different installations,
+installed packages can be put into build cache tarballs, uploaded to
+your Spack mirror and then downloaded and installed by others.
+
+
+--------------------------
+Creating build cache files
+--------------------------
+
+A compressed tarball of an installed package is created. Tarballs are created
+for all of its link and run dependency packages as well. Compressed tarballs are
+signed with gpg and signature and tarball and put in a ``.spack`` file. Optionally,
+the rpaths (and ids and deps on macOS) can be changed to paths relative to
+the Spack install tree before the tarball is created.
+
+Build caches are created via:
+
+.. code-block:: console
+
+ $ spack buildcache create spec
+
+
+---------------------------------------
+Finding or installing build cache files
+---------------------------------------
+
+To find build caches or install build caches, a Spack mirror must be configured
+with:
+
+.. code-block:: console
+
+ $ spack mirror add <name> <url>
+
+Build caches are found via:
+
+.. code-block:: console
+
+ $ spack buildcache list
+
+Build caches are installed via:
+
+.. code-block:: console
+
+ $ spack buildcache install
+
+
+----------
+Relocation
+----------
+
+Initial build and later installation do not necessarily happen at the same
+location. Spack provides a relocation capability and corrects for RPATHs and
+non-relocatable scripts. However, many packages compile paths into binary
+artifacts directly. In such cases, the build instructions of this package would
+need to be adjusted for better re-locatability.
+
+.. _cmd-spack-buildcache:
+
+--------------------
+``spack buildcache``
+--------------------
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+``spack buildcache create``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Create tarball of installed Spack package and all dependencies.
+Tarballs are checksummed and signed if gpg2 is available.
+Places them in a directory ``build_cache`` that can be copied to a mirror.
+Commands like ``spack buildcache install`` will search Spack mirrors for build_cache to get the list of build caches.
+
+============== ========================================================================================================================
+Arguments Description
+============== ========================================================================================================================
+``<specs>`` list of partial specs or hashes with a leading ``/`` to match from installed packages and used for creating build caches
+``-d <path>`` directory in which ``build_cache`` directory is created, defaults to ``.``
+``-f`` overwrite ``.spack`` file in ``build_cache`` directory if it exists
+``-k <key>`` the key to sign package with. In the case where multiple keys exist, the package will be unsigned unless ``-k`` is used.
+``-r`` make paths in binaries relative before creating tarball
+``-y`` answer yes to all create unsigned ``build_cache`` questions
+============== ========================================================================================================================
+
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``spack buildcache list``
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Retrieves all specs for build caches available on a Spack mirror.
+
+============== =====================================================================================
+Arguments Description
+============== =====================================================================================
+``<specs>`` list of partial package specs to be matched against specs downloaded for build caches
+============== =====================================================================================
+
+E.g. ``spack buildcache list gcc`` with print only commands to install ``gcc`` package(s)
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+``spack buildcache install``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Retrieves all specs for build caches available on a Spack mirror and installs build caches
+with specs matching the specs input.
+
+============== ==============================================================================================
+Arguments Description
+============== ==============================================================================================
+``<specs>`` list of partial package specs or hashes with a leading ``/`` to be installed from build caches
+``-f`` remove install directory if it exists before unpacking tarball
+``-y`` answer yes to all to don't verify package with gpg questions
+============== ==============================================================================================
+
+^^^^^^^^^^^^^^^^^^^^^^^^^
+``spack buildcache keys``
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+List public keys available on Spack mirror.
+
+========= ==============================================
+Arguments Description
+========= ==============================================
+``-i`` trust the keys downloaded with prompt for each
+``-y`` answer yes to all trust all keys downloaded
+========= ==============================================
diff --git a/lib/spack/docs/build_settings.rst b/lib/spack/docs/build_settings.rst
index 60ff26f26f..0f935aa1ce 100644
--- a/lib/spack/docs/build_settings.rst
+++ b/lib/spack/docs/build_settings.rst
@@ -71,9 +71,9 @@ package lacks a spec component, such as missing a compiler or
package version, then Spack will guess the missing component based
on its most-favored packages, and it may guess incorrectly.
-Each package version and compilers listed in an external should
+Each package version and compiler listed in an external should
have entries in Spack's packages and compiler configuration, even
-though the package and compiler may not every be built.
+though the package and compiler may not ever be built.
The packages configuration can tell Spack to use an external location
for certain package versions, but it does not restrict Spack to using
diff --git a/lib/spack/docs/conf.py b/lib/spack/docs/conf.py
index db8d3d29dc..94d301f6d9 100644
--- a/lib/spack/docs/conf.py
+++ b/lib/spack/docs/conf.py
@@ -1,14 +1,14 @@
# flake8: noqa
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -49,8 +49,11 @@ from sphinx.apidoc import main as sphinx_apidoc
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
-sys.path.insert(0, os.path.abspath('exts'))
sys.path.insert(0, os.path.abspath('../external'))
+if sys.version_info[0] < 3:
+ sys.path.insert(0, os.path.abspath('../external/yaml/lib'))
+else:
+ sys.path.insert(0, os.path.abspath('../external/yaml/lib3'))
sys.path.append(os.path.abspath('..'))
# Add the Spack bin directory to the path so that we can use its output in docs.
@@ -58,11 +61,6 @@ spack_root = '../../..'
os.environ['SPACK_ROOT'] = spack_root
os.environ['PATH'] += '%s%s/bin' % (os.pathsep, spack_root)
-# Get the spack version for use in the docs
-spack_version = subprocess.Popen(
- [spack_root + '/bin/spack', '-V'],
- stderr=subprocess.PIPE).communicate()[1].strip().split('.')
-
# Set an environment variable so that colify will print output like it would to
# a terminal.
os.environ['COLIFY_SIZE'] = '25x120'
@@ -91,10 +89,21 @@ with open('command_index.rst', 'a') as index:
for cmd in sorted(command_names):
index.write(' * :ref:`%s`\n' % cmd)
-
+#
# Run sphinx-apidoc
-sphinx_apidoc(['-T', '-o', '.', '../spack'])
-os.remove('modules.rst')
+#
+# Remove any previous API docs
+# Read the Docs doesn't clean up after previous builds
+# Without this, the API Docs will never actually update
+#
+apidoc_args = [
+ '--force', # Older versions of Sphinx ignore the first argument
+ '--force', # Overwrite existing files
+ '--no-toc', # Don't create a table of contents file
+ '--output-dir=.', # Directory to place all output
+]
+sphinx_apidoc(apidoc_args + ['../spack'])
+sphinx_apidoc(apidoc_args + ['../llnl'])
#
# Exclude everything in spack.__all__ from indexing. All of these
@@ -110,17 +119,31 @@ handling_spack = False
for line in fileinput.input('spack.rst', inplace=1):
if handling_spack:
if not line.startswith(' :noindex:'):
- print ' :noindex: %s' % ' '.join(spack.__all__)
+ print(' :noindex: %s' % ' '.join(spack.__all__))
handling_spack = False
if line.startswith('.. automodule::'):
handling_spack = (line == '.. automodule:: spack\n')
- print line,
+ sys.stdout.write(line)
# Enable todo items
todo_include_todos = True
+#
+# Disable duplicate cross-reference warnings.
+#
+from sphinx.domains.python import PythonDomain
+class PatchedPythonDomain(PythonDomain):
+ def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
+ if 'refspecific' in node:
+ del node['refspecific']
+ return super(PatchedPythonDomain, self).resolve_xref(
+ env, fromdocname, builder, typ, target, node, contnode)
+
+def setup(sphinx):
+ sphinx.override_domain(PatchedPythonDomain)
+
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
@@ -130,6 +153,7 @@ todo_include_todos = True
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc',
'sphinx.ext.graphviz',
+ 'sphinx.ext.napoleon',
'sphinx.ext.todo',
'sphinxcontrib.programoutput']
@@ -156,16 +180,16 @@ master_doc = 'index'
# General information about the project.
project = u'Spack'
-copyright = u'2013-2015, Lawrence Livermore National Laboratory.'
+copyright = u'2013-2017, Lawrence Livermore National Laboratory.'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-version = '.'.join(spack_version[:2])
+version = str(spack.spack_version.up_to(2))
# The full version, including alpha/beta/rc tags.
-release = '.'.join(spack_version[:2])
+release = str(spack.spack_version.up_to(2))
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -225,7 +249,7 @@ html_theme_path = ["_themes"]
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-html_logo = '../../../share/spack/logo/spack-logo-white-text-48.png'
+html_logo = '../../../share/spack/logo/spack-logo-white-text.svg'
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
diff --git a/lib/spack/docs/config_yaml.rst b/lib/spack/docs/config_yaml.rst
index 56aa6ed0a1..da760f05e3 100644
--- a/lib/spack/docs/config_yaml.rst
+++ b/lib/spack/docs/config_yaml.rst
@@ -14,27 +14,6 @@ see the default settings by looking at
These settings can be overridden in ``etc/spack/config.yaml`` or
``~/.spack/config.yaml``. See :ref:`configuration-scopes` for details.
-.. _config-file-variables:
-
-------------------------------
-Config file variables
-------------------------------
-
-You may notice some variables prefixed with ``$`` in the settings above.
-Spack understands several variables that can be used in values of
-configuration parameters. They are:
-
- * ``$spack``: path to the prefix of this spack installation
- * ``$tempdir``: default system temporary directory (as specified in
- Python's `tempfile.tempdir
- <https://docs.python.org/2/library/tempfile.html#tempfile.tempdir>`_
- variable.
- * ``$user``: name of the current user
-
-Note that, as with shell variables, you can write these as ``$varname``
-or with braces to distinguish the variable from surrounding characters:
-``${varname}``.
-
--------------------
``install_tree``
--------------------
@@ -42,6 +21,43 @@ or with braces to distinguish the variable from surrounding characters:
The location where Spack will install packages and their dependencies.
Default is ``$spack/opt/spack``.
+---------------------------------------------------
+``install_hash_length`` and ``install_path_scheme``
+---------------------------------------------------
+
+The default Spack installation path can be very long and can create
+problems for scripts with hardcoded shebangs. There are two parameters
+to help with that. Firstly, the ``install_hash_length`` parameter can
+set the length of the hash in the installation path from 1 to 32. The
+default path uses the full 32 characters.
+
+Secondly, it is
+also possible to modify the entire installation scheme. By default
+Spack uses
+``${ARCHITECTURE}/${COMPILERNAME}-${COMPILERVER}/${PACKAGE}-${VERSION}-${HASH}``
+where the tokens that are available for use in this directive are the
+same as those understood by the ``Spec.format`` method. Using this parameter it
+is possible to use a different package layout or reduce the depth of
+the installation paths. For example
+
+ .. code-block:: yaml
+
+ config:
+ install_path_scheme: '${PACKAGE}/${VERSION}/${HASH:7}'
+
+would install packages into sub-directories using only the package
+name, version and a hash length of 7 characters.
+
+When using either parameter to set the hash length it only affects the
+representation of the hash in the installation directory. You
+should be aware that the smaller the hash length the more likely
+naming conflicts will occur. These parameters are independent of those
+used to configure module names.
+
+.. warning:: Modifying the installation hash length or path scheme after
+ packages have been installed will prevent Spack from being
+ able to find the old installation directories.
+
--------------------
``module_roots``
--------------------
@@ -62,8 +78,8 @@ See :ref:`modules` for details.
``build_stage``
--------------------
-Spack is designed to run out of a user home directories, and on many
-systems the home directory a (slow) network filesystem. On most systems,
+Spack is designed to run out of a user home directory, and on many
+systems the home directory is a (slow) network filesystem. On most systems,
building in a temporary filesystem results in faster builds than building
in the home directory. Usually, there is also more space available in
the temporary location than in the home directory. So, Spack tries to
@@ -85,12 +101,12 @@ See :ref:`config-file-variables` for more on ``$tempdir`` and ``$spack``.
When Spack builds a package, it creates a temporary directory within the
``build_stage``, and it creates a symbolic link to that directory in
-``$spack/var/spack/stage``. This is used totrack the stage.
+``$spack/var/spack/stage``. This is used to track the stage.
After a package is successfully installed, Spack deletes the temporary
directory it used to build. Unsuccessful builds are not deleted, but you
-can manually purge them with :ref:`spack purge --stage
-<cmd-spack-purge>`.
+can manually purge them with :ref:`spack clean --stage
+<cmd-spack-clean>`.
.. note::
@@ -105,8 +121,8 @@ can manually purge them with :ref:`spack purge --stage
Location to cache downloaded tarballs and repositories. By default these
are stored in ``$spack/var/spack/cache``. These are stored indefinitely
-by default. Can be purged with :ref:`spack purge --downloads
-<cmd-spack-purge>`.
+by default. Can be purged with :ref:`spack clean --downloads
+<cmd-spack-clean>`.
--------------------
``misc_cache``
@@ -114,7 +130,7 @@ by default. Can be purged with :ref:`spack purge --downloads
Temporary directory to store long-lived cache files, such as indices of
packages available in repositories. Defaults to ``~/.spack/cache``. Can
-be purged with :ref:`spack purge --misc-cache <cmd-spack-purge>`.
+be purged with :ref:`spack clean --misc-cache <cmd-spack-clean>`.
--------------------
``verify_ssl``
@@ -143,7 +159,24 @@ the way packages build. This includes ``LD_LIBRARY_PATH``, ``CPATH``,
``LIBRARY_PATH``, ``DYLD_LIBRARY_PATH``, and others.
By default, builds are ``clean``, but on some machines, compilers and
-other tools may need custom ``LD_LIBRARY_PATH`` setings to run. You can
+other tools may need custom ``LD_LIBRARY_PATH`` settings to run. You can
set ``dirty`` to ``true`` to skip the cleaning step and make all builds
"dirty" by default. Be aware that this will reduce the reproducibility
of builds.
+
+--------------
+``build_jobs``
+--------------
+
+Unless overridden in a package or on the command line, Spack builds all
+packages in parallel. For a build system that uses Makefiles, this means
+running ``make -j<build_jobs>``, where ``build_jobs`` is the number of
+threads to use.
+
+The default parallelism is equal to the number of cores on your machine.
+If you work on a shared login node or have a strict ulimit, it may be
+necessary to set the default to a lower value. By setting ``build_jobs``
+to 4, for example, commands like ``spack install`` will run ``make -j4``
+instead of hogging every core.
+
+To build all software in serial, set ``build_jobs`` to 1.
diff --git a/lib/spack/docs/configuration.rst b/lib/spack/docs/configuration.rst
index 32e1a8c170..f1648eb4e0 100644
--- a/lib/spack/docs/configuration.rst
+++ b/lib/spack/docs/configuration.rst
@@ -45,20 +45,27 @@ Configuration Scopes
-------------------------
Spack pulls configuration data from files in several directories. There
-are three configuration scopes. From lowest to highest:
+are four configuration scopes. From lowest to highest:
-1. **defaults**: Stored in ``$(prefix)/etc/spack/defaults/``. These are
+#. **defaults**: Stored in ``$(prefix)/etc/spack/defaults/``. These are
the "factory" settings. Users should generally not modify the settings
here, but should override them in other configuration scopes. The
defaults here will change from version to version of Spack.
-2. **site**: Stored in ``$(prefix)/etc/spack/``. Settings here affect
+#. **system**: Stored in ``/etc/spack``. These are settings for this
+ machine, or for all machines on which this file system is
+ mounted. The site scope can be used for settings idiosyncratic to a
+ particular machine, such as the locations of compilers or external
+ packages. These settings are presumably controlled by someone with
+ root access on the machine.
+
+#. **site**: Stored in ``$(prefix)/etc/spack/``. Settings here affect
only *this instance* of Spack, and they override defaults. The site
scope can can be used for per-project settings (one spack instance per
project) or for site-wide settings on a multi-user machine (e.g., for
a common spack instance).
-3. **user**: Stored in the home directory: ``~/.spack/``. These settings
+#. **user**: Stored in the home directory: ``~/.spack/``. These settings
affect all instances of Spack and take the highest precedence.
Each configuration directory may contain several configuration files,
@@ -78,22 +85,25 @@ Platform-specific scopes
-------------------------
For each scope above, there can *also* be platform-specific settings.
-For example, on Blue Gene/Q machines, Spack needs to know the location of
-cross-compilers for the compute nodes. This configuration is in
-``etc/spack/defaults/bgq/compilers.yaml``. It will take precedence over
-settings in the ``defaults`` scope, but can still be overridden by
-settings in ``site``, ``site/bgq``, ``user``, or ``user/bgq``. So, the
-full scope precedence is:
+For example, on Blue Gene/Q machines, Spack needs to know the location
+of cross-compilers for the compute nodes. This configuration is in
+``etc/spack/defaults/bgq/compilers.yaml``. It will take precedence
+over settings in the ``defaults`` scope, but can still be overridden
+by settings in ``system``, ``system/bgq``, ``site``, ``site/bgq``,
+``user``, or ``user/bgq``. So, the full scope precedence is:
1. ``defaults``
2. ``defaults/<platform>``
-3. ``site``
-4. ``site/<platform>``
-5. ``user``
-6. ``user/<platform>``
+3. ``system``
+4. ``system/<platform>``
+5. ``site``
+6. ``site/<platform>``
+7. ``user``
+8. ``user/<platform>``
You can get the name to use for ``<platform>`` by running ``spack arch
---platform``.
+--platform``. The system config scope has a ``<platform>`` section for
+sites at which ``/etc`` is mounted on multiple heterogeneous machines.
-------------------------
Scope precedence
@@ -251,3 +261,52 @@ The merged configuration would look like this:
- /lustre-scratch/$user
- ~/mystage
$ _
+
+.. _config-file-variables:
+
+------------------------------
+Config file variables
+------------------------------
+
+Spack understands several variables which can be used in config file paths
+where ever they appear. There are three sets of these variables, Spack specific
+variables, environment variables, and user path variables. Spack specific
+variables and environment variables both are indicated by prefixing the variable
+name with ``$``. User path variables are indicated at the start of the path with
+``~`` or ``~user``. Let's discuss each in turn.
+
+^^^^^^^^^^^^^^^^^^^^^^^^
+Spack Specific Variables
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Spack understands several special variables. These are:
+
+ * ``$spack``: path to the prefix of this spack installation
+ * ``$tempdir``: default system temporary directory (as specified in
+ Python's `tempfile.tempdir
+ <https://docs.python.org/2/library/tempfile.html#tempfile.tempdir>`_
+ variable.
+ * ``$user``: name of the current user
+
+Note that, as with shell variables, you can write these as ``$varname``
+or with braces to distinguish the variable from surrounding characters:
+``${varname}``. Their names are also case insensitive meaning that ``$SPACK``
+works just as well as ``$spack``. These special variables are also
+substituted first, so any environment variables with the same name will not
+be used.
+
+^^^^^^^^^^^^^^^^^^^^^
+Environment Variables
+^^^^^^^^^^^^^^^^^^^^^
+
+Spack then uses ``os.path.expandvars`` to expand any remaining environment
+variables.
+
+^^^^^^^^^^^^^^
+User Variables
+^^^^^^^^^^^^^^
+
+Spack also uses the ``os.path.expanduser`` function on the path to expand
+any user tilde paths such as ``~`` or ``~user``. These tilde paths must appear
+at the beginning of the path or ``os.path.expanduser`` will not properly
+expand them.
diff --git a/lib/spack/docs/contribution_guide.rst b/lib/spack/docs/contribution_guide.rst
index 4abf97ef92..6ee55c2f66 100644
--- a/lib/spack/docs/contribution_guide.rst
+++ b/lib/spack/docs/contribution_guide.rst
@@ -26,13 +26,13 @@ Spack uses a rough approximation of the `Git Flow <http://nvie.com/posts/a-succe
branching model. The develop branch contains the latest contributions, and
master is always tagged and points to the latest stable release. Therefore, when
you send your request, make ``develop`` the destination branch on the
-`Spack repository <https://github.com/LLNL/spack>`_.
+`Spack repository <https://github.com/spack/spack>`_.
----------------------
Continuous Integration
----------------------
-Spack uses `Travis CI <https://travis-ci.org/LLNL/spack>`_ for Continuous Integration
+Spack uses `Travis CI <https://travis-ci.org/spack/spack>`_ for Continuous Integration
testing. This means that every time you submit a pull request, a series of tests will
be run to make sure you didn't accidentally introduce any bugs into Spack. Your PR
will not be accepted until it passes all of these tests. While you can certainly wait
@@ -40,7 +40,7 @@ for the results of these tests after submitting a PR, we recommend that you run
locally to speed up the review process.
If you take a look in ``$SPACK_ROOT/.travis.yml``, you'll notice that we test
-against Python 2.6 and 2.7. We currently perform 3 types of tests:
+against Python 2.6, 2.7, and 3.3-3.6. We currently perform 3 types of tests:
^^^^^^^^^^
Unit Tests
@@ -75,7 +75,10 @@ This allows you to develop iteratively: make a change, test that change, make
another change, test that change, etc. To get a list of all available unit
tests, run:
-.. command-output:: spack test --collect-only
+.. command-output:: spack test --list
+
+A more detailed list of available unit tests can be found by running
+``spack test --long-list``.
Unit tests are crucial to making sure bugs aren't introduced into Spack. If you
are modifying core Spack libraries or adding new functionality, please consider
@@ -121,7 +124,7 @@ command:
"extends" in ``package.py`` files.
More approved flake8 exemptions can be found
-`here <https://github.com/LLNL/spack/blob/develop/.flake8>`_.
+`here <https://github.com/spack/spack/blob/develop/.flake8>`_.
If all is well, you'll see something like this:
@@ -186,6 +189,7 @@ Building the documentation requires several dependencies, all of which can be
installed with Spack:
* sphinx
+* sphinxcontrib-programoutput
* graphviz
* git
* mercurial
@@ -193,7 +197,7 @@ installed with Spack:
.. warning::
- Sphinx has `several required dependencies <https://github.com/LLNL/spack/blob/develop/var/spack/repos/builtin/packages/py-sphinx/package.py>`_.
+ Sphinx has `several required dependencies <https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/py-sphinx/package.py>`_.
If you installed ``py-sphinx`` with Spack, make sure to add all of these
dependencies to your ``PYTHONPATH``. The easiest way to do this is to run
``spack activate py-sphinx`` so that all of the dependencies are symlinked
@@ -224,7 +228,7 @@ your PR is accepted.
There is also a ``run-doc-tests`` script in the Quality Assurance directory.
The only difference between running this script and running ``make`` by hand
is that the script will exit immediately if it encounters an error or warning.
- This is necessary for Travis CI. If you made a lot of documentation tests, it
+ This is necessary for Travis CI. If you made a lot of documentation changes, it
is much quicker to run ``make`` by hand so that you can see all of the warnings
at once.
diff --git a/lib/spack/docs/developer_guide.rst b/lib/spack/docs/developer_guide.rst
index 5ddbaf2478..96b4436683 100644
--- a/lib/spack/docs/developer_guide.rst
+++ b/lib/spack/docs/developer_guide.rst
@@ -300,6 +300,46 @@ Stage objects
Writing commands
----------------
+Adding a new command to Spack is easy. Simply add a ``<name>.py`` file to
+``lib/spack/spack/cmd/``, where ``<name>`` is the name of the subcommand.
+At the bare minimum, two functions are required in this file:
+
+^^^^^^^^^^^^^^^^^^
+``setup_parser()``
+^^^^^^^^^^^^^^^^^^
+
+Unless your command doesn't accept any arguments, a ``setup_parser()``
+function is required to define what arguments and flags your command takes.
+See the `Argparse documentation <https://docs.python.org/2.7/library/argparse.html>`_
+for more details on how to add arguments.
+
+Some commands have a set of subcommands, like ``spack compiler find`` or
+``spack module refresh``. You can add subparsers to your parser to handle
+this. Check out ``spack edit --command compiler`` for an example of this.
+
+A lot of commands take the same arguments and flags. These arguments should
+be defined in ``lib/spack/spack/cmd/common/arguments.py`` so that they don't
+need to be redefined in multiple commands.
+
+^^^^^^^^^^^^
+``<name>()``
+^^^^^^^^^^^^
+
+In order to run your command, Spack searches for a function with the same
+name as your command in ``<name>.py``. This is the main method for your
+command, and can call other helper methods to handle common tasks.
+
+Remember, before adding a new command, think to yourself whether or not this
+new command is actually necessary. Sometimes, the functionality you desire
+can be added to an existing command. Also remember to add unit tests for
+your command. If it isn't used very frequently, changes to the rest of
+Spack can cause your command to break without sufficient unit tests to
+prevent this from happening.
+
+Whenever you add/remove/rename a command or flags for an existing command,
+make sure to update Spack's `Bash tab completion script
+<https://github.com/adamjstewart/spack/blob/develop/share/spack/spack-completion.bash>`_.
+
----------
Unit tests
----------
@@ -312,14 +352,121 @@ Unit testing
Developer commands
------------------
+.. _cmd-spack-doc:
+
^^^^^^^^^^^^^
``spack doc``
^^^^^^^^^^^^^
+.. _cmd-spack-test:
+
^^^^^^^^^^^^^^
``spack test``
^^^^^^^^^^^^^^
+.. _cmd-spack-python:
+
+^^^^^^^^^^^^^^^^
+``spack python``
+^^^^^^^^^^^^^^^^
+
+``spack python`` is a command that lets you import and debug things as if
+you were in a Spack interactive shell. Without any arguments, it is similar
+to a normal interactive Python shell, except you can import spack and any
+other Spack modules:
+
+.. code-block:: console
+
+ $ spack python
+ Spack version 0.10.0
+ Python 2.7.13, Linux x86_64
+ >>> from spack.version import Version
+ >>> a = Version('1.2.3')
+ >>> b = Version('1_2_3')
+ >>> a == b
+ True
+ >>> c = Version('1.2.3b')
+ >>> c > a
+ True
+ >>>
+
+You can also run a single command:
+
+.. code-block:: console
+
+ $ spack python -c 'import distro; distro.linux_distribution()'
+ ('Fedora', '25', 'Workstation Edition')
+
+or a file:
+
+.. code-block:: console
+
+ $ spack python ~/test_fetching.py
+
+just like you would with the normal ``python`` command.
+
+.. _cmd-spack-url:
+
+^^^^^^^^^^^^^
+``spack url``
+^^^^^^^^^^^^^
+
+A package containing a single URL can be used to download several different
+versions of the package. If you've ever wondered how this works, all of the
+magic is in :mod:`spack.url`. This module contains methods for extracting
+the name and version of a package from its URL. The name is used by
+``spack create`` to guess the name of the package. By determining the version
+from the URL, Spack can replace it with other versions to determine where to
+download them from.
+
+The regular expressions in ``parse_name_offset`` and ``parse_version_offset``
+are used to extract the name and version, but they aren't perfect. In order
+to debug Spack's URL parsing support, the ``spack url`` command can be used.
+
+"""""""""""""""""""
+``spack url parse``
+"""""""""""""""""""
+
+If you need to debug a single URL, you can use the following command:
+
+.. command-output:: spack url parse http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.0.tar.gz
+
+You'll notice that the name and version of this URL are correctly detected,
+and you can even see which regular expressions it was matched to. However,
+you'll notice that when it substitutes the version number in, it doesn't
+replace the ``2.2`` with ``9.9`` where we would expect ``9.9.9b`` to live.
+This particular package may require a ``list_url`` or ``url_for_version``
+function.
+
+This command also accepts a ``--spider`` flag. If provided, Spack searches
+for other versions of the package and prints the matching URLs.
+
+""""""""""""""""""
+``spack url list``
+""""""""""""""""""
+
+This command lists every URL in every package in Spack. If given the
+``--color`` and ``--extrapolation`` flags, it also colors the part of
+the string that it detected to be the name and version. The
+``--incorrect-name`` and ``--incorrect-version`` flags can be used to
+print URLs that were not being parsed correctly.
+
+"""""""""""""""""""""
+``spack url summary``
+"""""""""""""""""""""
+
+This command attempts to parse every URL for every package in Spack
+and prints a summary of how many of them are being correctly parsed.
+It also prints a histogram showing which regular expressions are being
+matched and how frequently:
+
+.. command-output:: spack url summary
+
+This command is essential for anyone adding or changing the regular
+expressions that parse names and versions. By running this command
+before and after the change, you can make sure that your regular
+expression fixes more packages than it breaks.
+
---------
Profiling
---------
diff --git a/lib/spack/docs/exts/sphinxcontrib/__init__.py b/lib/spack/docs/exts/sphinxcontrib/__init__.py
deleted file mode 100644
index 591cf0e16e..0000000000
--- a/lib/spack/docs/exts/sphinxcontrib/__init__.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- sphinxcontrib
- ~~~~~~~~~~~~~
-
- Contains 3rd party Sphinx extensions.
-"""
-
-__import__('pkg_resources').declare_namespace(__name__)
diff --git a/lib/spack/docs/exts/sphinxcontrib/programoutput.py b/lib/spack/docs/exts/sphinxcontrib/programoutput.py
deleted file mode 100644
index 3f6a4f1595..0000000000
--- a/lib/spack/docs/exts/sphinxcontrib/programoutput.py
+++ /dev/null
@@ -1,263 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (c) 2010, 2011, 2012, Sebastian Wiesner <lunaryorn@gmail.com>
-# All rights reserved.
-
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are met:
-
-# 1. Redistributions of source code must retain the above copyright notice,
-# this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
-"""
- sphinxcontrib.programoutput
- ===========================
-
- This extension provides a directive to include the output of commands as
- literal block while building the docs.
-
- .. moduleauthor:: Sebastian Wiesner <lunaryorn@gmail.com>
-"""
-
-from __future__ import (print_function, division, unicode_literals,
- absolute_import)
-
-import sys
-import os
-import shlex
-from subprocess import Popen, PIPE, STDOUT
-from collections import defaultdict, namedtuple
-
-from docutils import nodes
-from docutils.parsers import rst
-from docutils.parsers.rst.directives import flag, unchanged, nonnegative_int
-
-
-__version__ = '0.9'
-
-
-class program_output(nodes.Element):
- pass
-
-
-def _slice(value):
- parts = [int(v.strip()) for v in value.split(',')]
- if len(parts) > 2:
- raise ValueError('too many slice parts')
- return tuple((parts + [None] * 2)[:2])
-
-
-class ProgramOutputDirective(rst.Directive):
- has_content = False
- final_argument_whitespace = True
- required_arguments = 1
-
- option_spec = dict(shell=flag, prompt=flag, nostderr=flag,
- ellipsis=_slice, extraargs=unchanged,
- returncode=nonnegative_int, cwd=unchanged)
-
- def run(self):
- env = self.state.document.settings.env
-
- node = program_output()
- node.line = self.lineno
- node['command'] = self.arguments[0]
-
- if self.name == 'command-output':
- node['show_prompt'] = True
- else:
- node['show_prompt'] = 'prompt' in self.options
-
- node['hide_standard_error'] = 'nostderr' in self.options
- node['extraargs'] = self.options.get('extraargs', '')
- _, cwd = env.relfn2path(self.options.get('cwd', '/'))
- node['working_directory'] = cwd
- node['use_shell'] = 'shell' in self.options
- node['returncode'] = self.options.get('returncode', 0)
- if 'ellipsis' in self.options:
- node['strip_lines'] = self.options['ellipsis']
- return [node]
-
-
-_Command = namedtuple(
- 'Command', 'command shell hide_standard_error working_directory')
-
-
-class Command(_Command):
- """
- A command to be executed.
- """
-
- def __new__(cls, command, shell=False, hide_standard_error=False,
- working_directory='/'):
- if isinstance(command, list):
- command = tuple(command)
- # `chdir()` resolves symlinks, so we need to resolve them too for
- # caching to make sure that different symlinks to the same directory
- # don't result in different cache keys. Also normalize paths to make
- # sure that identical paths are also equal as strings.
- working_directory = os.path.normpath(os.path.realpath(
- working_directory))
- return _Command.__new__(cls, command, shell, hide_standard_error,
- working_directory)
-
- @classmethod
- def from_program_output_node(cls, node):
- """
- Create a command from a :class:`program_output` node.
- """
- extraargs = node.get('extraargs', '')
- command = (node['command'] + ' ' + extraargs).strip()
- return cls(command, node['use_shell'],
- node['hide_standard_error'], node['working_directory'])
-
- def execute(self):
- """
- Execute this command.
-
- Return the :class:`~subprocess.Popen` object representing the running
- command.
- """
- if self.shell:
- if sys.version_info[0] < 3 and isinstance(self.command, unicode):
- command = self.command.encode(sys.getfilesystemencoding())
- else:
- command = self.command
- else:
- if sys.version_info[0] < 3 and isinstance(self.command, unicode):
- command = shlex.split(self.command.encode(
- sys.getfilesystemencoding()))
- elif isinstance(self.command, str):
- command = shlex.split(self.command)
- else:
- command = self.command
- return Popen(command, shell=self.shell, stdout=PIPE,
- stderr=PIPE if self.hide_standard_error else STDOUT,
- cwd=self.working_directory)
-
- def get_output(self):
- """
- Get the output of this command.
-
- Return a tuple ``(returncode, output)``. ``returncode`` is the
- integral return code of the process, ``output`` is the output as
- unicode string, with final trailing spaces and new lines stripped.
- """
- process = self.execute()
- output = process.communicate()[0].decode(
- sys.getfilesystemencoding(), 'replace').rstrip()
- return process.returncode, output
-
- def __str__(self):
- if isinstance(self.command, tuple):
- return repr(list(self.command))
- return repr(self.command)
-
-
-class ProgramOutputCache(defaultdict):
- """
- Execute command and cache their output.
-
- This class is a mapping. Its keys are :class:`Command` objects represeting
- command invocations. Its values are tuples of the form ``(returncode,
- output)``, where ``returncode`` is the integral return code of the command,
- and ``output`` is the output as unicode string.
-
- The first time, a key is retrieved from this object, the command is
- invoked, and its result is cached. Subsequent access to the same key
- returns the cached value.
- """
-
- def __missing__(self, command):
- """
- Called, if a command was not found in the cache.
-
- ``command`` is an instance of :class:`Command`.
- """
- result = command.get_output()
- self[command] = result
- return result
-
-
-def run_programs(app, doctree):
- """
- Execute all programs represented by ``program_output`` nodes in
- ``doctree``. Each ``program_output`` node in ``doctree`` is then
- replaced with a node, that represents the output of this program.
-
- The program output is retrieved from the cache in
- ``app.env.programoutput_cache``.
- """
- if app.config.programoutput_use_ansi:
- # enable ANSI support, if requested by config
- from sphinxcontrib.ansi import ansi_literal_block
- node_class = ansi_literal_block
- else:
- node_class = nodes.literal_block
-
- cache = app.env.programoutput_cache
-
- for node in doctree.traverse(program_output):
- command = Command.from_program_output_node(node)
- try:
- returncode, output = cache[command]
- except EnvironmentError as error:
- error_message = 'Command {0} failed: {1}'.format(command, error)
- error_node = doctree.reporter.error(error_message, base_node=node)
- node.replace_self(error_node)
- else:
- if returncode != node['returncode']:
- app.warn('Unexpected return code {0} from command {1}'.format(
- returncode, command))
-
- # replace lines with ..., if ellipsis is specified
- if 'strip_lines' in node:
- lines = output.splitlines()
- start, stop = node['strip_lines']
- lines[start:stop] = ['...']
- output = '\n'.join(lines)
-
- if node['show_prompt']:
- tmpl = app.config.programoutput_prompt_template
- output = tmpl.format(command=node['command'], output=output,
- returncode=returncode)
-
- new_node = node_class(output, output)
- new_node['language'] = 'text'
- node.replace_self(new_node)
-
-
-def init_cache(app):
- """
- Initialize the cache for program output at
- ``app.env.programoutput_cache``, if not already present (e.g. being
- loaded from a pickled environment).
-
- The cache is of type :class:`ProgramOutputCache`.
- """
- if not hasattr(app.env, 'programoutput_cache'):
- app.env.programoutput_cache = ProgramOutputCache()
-
-
-def setup(app):
- app.add_config_value('programoutput_use_ansi', False, 'env')
- app.add_config_value('programoutput_prompt_template',
- '$ {command}\n{output}', 'env')
- app.add_directive('program-output', ProgramOutputDirective)
- app.add_directive('command-output', ProgramOutputDirective)
- app.connect(str('builder-inited'), init_cache)
- app.connect(str('doctree-read'), run_programs)
diff --git a/lib/spack/docs/getting_started.rst b/lib/spack/docs/getting_started.rst
index efc1965ce9..9e59b28dac 100644
--- a/lib/spack/docs/getting_started.rst
+++ b/lib/spack/docs/getting_started.rst
@@ -11,9 +11,10 @@ Prerequisites
Spack has the following minimum requirements, which must be installed
before Spack is run:
-1. Python 2.6 or 2.7
+1. Python 2 (2.6 or 2.7) or 3 (3.3 - 3.6)
2. A C/C++ compiler
3. The ``git`` and ``curl`` commands.
+4. If using the ``gpg`` subcommand, ``gnupg2`` is required.
These requirements can be easily installed on most modern Linux systems;
on Macintosh, XCode is required. Spack is designed to run on HPC
@@ -26,11 +27,11 @@ Installation
------------
Getting Spack is easy. You can clone it from the `github repository
-<https://github.com/llnl/spack>`_ using this command:
+<https://github.com/spack/spack>`_ using this command:
.. code-block:: console
- $ git clone https://github.com/llnl/spack.git
+ $ git clone https://github.com/spack/spack.git
This will create a directory called ``spack``.
@@ -51,7 +52,7 @@ For a richer experience, use Spack's shell support:
.. code-block:: console
- # For bash users
+ # For bash/zsh users
$ export SPACK_ROOT=/path/to/spack
$ . $SPACK_ROOT/share/spack/setup-env.sh
@@ -59,10 +60,15 @@ For a richer experience, use Spack's shell support:
$ setenv SPACK_ROOT /path/to/spack
$ source $SPACK_ROOT/share/spack/setup-env.csh
+
This automatically adds Spack to your ``PATH`` and allows the ``spack``
-command to :ref:`load environment modules <shell-support>` and execute
+command to be used to execute spack :ref:`commands <shell-support>` and
:ref:`useful packaging commands <packaging-shell-support>`.
+If :ref:`environment-modules or dotkit <InstallEnvironmentModules>` is
+installed and available, the ``spack`` command can also load and unload
+:ref:`modules <modules>`.
+
^^^^^^^^^^^^^^^^^
Clean Environment
^^^^^^^^^^^^^^^^^
@@ -85,30 +91,20 @@ Check Installation
With Spack installed, you should be able to run some basic Spack
commands. For example:
-.. code-block:: console
+.. command-output:: spack spec netcdf
- $ spack spec netcdf
- ...
- netcdf@4.4.1%gcc@5.3.0~hdf4+mpi arch=linux-SuSE11-x86_64
- ^curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^openssl@system%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^hdf5@1.10.0-patch1%gcc@5.3.0+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=linux-SuSE11-x86_64
- ^openmpi@1.10.1%gcc@5.3.0~mxm~pmi~psm~psm2~slurm~sqlite3~thread_multiple~tm+verbs+vt arch=linux-SuSE11-x86_64
- ^m4@1.4.17%gcc@5.3.0+sigsegv arch=linux-SuSE11-x86_64
- ^libsigsegv@2.10%gcc@5.3.0 arch=linux-SuSE11-x86_64
^^^^^^^^^^^^^^^^^^^^^^^^^^
Optional: Alternate Prefix
^^^^^^^^^^^^^^^^^^^^^^^^^^
You may want to run Spack out of a prefix other than the git repository
-you cloned. The ``spack bootstrap`` command provides this
+you cloned. The ``spack clone`` command provides this
functionality. To install spack in a new directory, simply type:
.. code-block:: console
- $ spack bootstrap /my/favorite/prefix
+ $ spack clone /my/favorite/prefix
This will install a new spack script in ``/my/favorite/prefix/bin``,
which you can use just like you would the regular spack script. Each
@@ -225,7 +221,7 @@ If you want to see specifics on a particular compiler, you can run
f77 = /usr/local/bin/ifort-15.0.090
fc = /usr/local/bin/ifort-15.0.090
modules = []
- operating system = centos6
+ operating_system = centos6
...
This shows which C, C++, and Fortran compilers were detected by Spack.
@@ -325,19 +321,6 @@ by adding the following to your ``packages.yaml`` file:
compiler: [gcc@4.9.3]
-.. tip::
-
- If you are building your own compiler, some users prefer to have a
- Spack instance just for that. For example, create a new Spack in
- ``~/spack-tools`` and then run ``~/spack-tools/bin/spack install
- gcc@4.9.3``. Once the compiler is built, don't build anything
- more in that Spack instance; instead, create a new "real" Spack
- instance, configure Spack to use the compiler you've just built,
- and then build your application software in the new Spack
- instance. Following this tip makes it easy to delete all your
- Spack packages *except* the compiler.
-
-
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Compilers Requiring Modules
^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -415,14 +398,62 @@ provides no Fortran compilers. The user is therefore forced to use a
mixed toolchain: XCode-provided Clang for C/C++ and GNU ``gfortran`` for
Fortran.
-#. You need to make sure that command-line tools are installed. To that
- end run ``$ xcode-select --install``.
+#. You need to make sure that Xcode is installed. Run the following command:
+
+ .. code-block:: console
+
+ $ xcode-select --install
+
+
+ If the Xcode command-line tools are already installed, you will see an
+ error message:
+
+ .. code-block:: none
+
+ xcode-select: error: command line tools are already installed, use "Software Update" to install updates
+
+
+#. For most packages, the Xcode command-line tools are sufficient. However,
+ some packages like ``qt`` require the full Xcode suite. You can check
+ to see which you have installed by running:
+
+ .. code-block:: console
+
+ $ xcode-select -p
+
+
+ If the output is:
+
+ .. code-block:: none
+
+ /Applications/Xcode.app/Contents/Developer
+
+
+ you already have the full Xcode suite installed. If the output is:
+
+ .. code-block:: none
+
+ /Library/Developer/CommandLineTools
+
+
+ you only have the command-line tools installed. The full Xcode suite can
+ be installed through the App Store. Make sure you launch the Xcode
+ application and accept the license agreement before using Spack.
+ It may ask you to install additional components. Alternatively, the license
+ can be accepted through the command line:
+
+ .. code-block:: console
+
+ $ sudo xcodebuild -license accept
+
-#. Run ``$ spack compiler find`` to locate Clang.
+ Note: the flag is ``-license``, not ``--license``.
+
+#. Run ``spack compiler find`` to locate Clang.
#. There are different ways to get ``gfortran`` on macOS. For example, you can
- install GCC with Spack (``$ spack install gcc``) or with Homebrew
- (``$ brew install gcc``).
+ install GCC with Spack (``spack install gcc``) or with Homebrew
+ (``brew install gcc``).
#. The only thing left to do is to edit ``~/.spack/compilers.yaml`` to provide
the path to ``gfortran``:
@@ -438,7 +469,7 @@ Fortran.
fc: /path/to/bin/gfortran
If you used Spack to install GCC, you can get the installation prefix by
- ``$ spack location -i gcc`` (this will only work if you have a single version
+ ``spack location -i gcc`` (this will only work if you have a single version
of GCC installed). Whereas for Homebrew, GCC is installed in
``/usr/local/Cellar/gcc/x.y.z``.
@@ -650,6 +681,7 @@ Or it can be set permanently in your ``compilers.yaml``:
fflags: -mismatch
spec: nag@6.1
+
---------------
System Packages
---------------
@@ -712,19 +744,22 @@ example:
$ curl -O https://github.com/ImageMagick/ImageMagick/archive/7.0.2-7.tar.gz
-The recommended way to tell Spack to use the system-supplied OpenSSL is
-to add the following to ``packages.yaml``. Note that the ``@system``
-"version" means "I don't care what version it is, just use what is
-there." This is reasonable for OpenSSL, which has a stable API.
+To tell Spack to use the system-supplied OpenSSL, first determine what
+version you have:
+
+.. code-block:: console
+
+ $ openssl version
+ OpenSSL 1.0.2g 1 Mar 2016
+Then add the following to ``~/.spack/packages.yaml``:
.. code-block:: yaml
packages:
openssl:
paths:
- openssl@system: /usr
- version: [system]
+ openssl@1.0.2g: /usr
buildable: False
@@ -740,8 +775,7 @@ to add the following to ``packages.yaml``:
packages:
netlib-lapack:
paths:
- netlib-lapack@system: /usr
- version: [system]
+ netlib-lapack@3.6.1: /usr
buildable: False
all:
providers:
@@ -750,11 +784,9 @@ to add the following to ``packages.yaml``:
.. note::
- The ``@system`` "version" means "I don't care what version it is,
- just use what is there." Above we pretend that the system-provided
- Blas/Lapack is ``netlib-lapack`` only because it is the only BLAS / LAPACK
- provider which use standard names for libraries (as opposed to, for example,
- `libopenblas.so`).
+ Above we pretend that the system-provided BLAS / LAPACK is ``netlib-lapack``
+ only because it is the only BLAS / LAPACK provider which use standard names
+ for libraries (as opposed to, for example, ``libopenblas.so``).
Although we specify external package in ``/usr``, Spack is smart enough not
to add ``/usr/lib`` to RPATHs, where it could cause unrelated system
@@ -784,7 +816,7 @@ This problem is related to OpenSSL, and in some cases might be solved
by installing a new version of ``git`` and ``openssl``:
#. Run ``spack install git``
-#. Add the output of ``spack module loads git`` to your ``.bahsrc``.
+#. Add the output of ``spack module loads git`` to your ``.bashrc``.
If this doesn't work, it is also possible to disable checking of SSL
certificates by using:
@@ -857,6 +889,10 @@ well. They can generally be activated as in the ``curl`` example above;
or some systems might already have an appropriate hand-built
environment module that may be loaded. Either way works.
+If you find that you are missing some of these programs, ``spack`` can
+build some of them for you with ``spack bootstrap``. Currently supported
+programs are ``environment-modules``.
+
A few notes on specific programs in this list:
""""""""""""""""""""""""""
@@ -893,53 +929,72 @@ Environment Modules
In order to use Spack's generated environment modules, you must have
installed one of *Environment Modules* or *Lmod*. On many Linux
distributions, this can be installed from the vendor's repository. For
-example: ``yum install environment-modules`` (Fedora/RHEL/CentOS). If
-your Linux distribution does not have Environment Modules, you can get it
-with Spack:
+example: ``yum install environment-modules`` (Fedora/RHEL/CentOS). If
+your Linux distribution does not have Environment Modules, Spack can
+build it for you!
-#. Consider using system tcl (as long as your system has Tcl version 8.0 or later):
+What follows are three steps describing how to install and use environment-modules with spack.
- #) Identify its location using ``which tclsh``
- #) Identify its version using ``echo 'puts $tcl_version;exit 0' | tclsh``
- #) Add to ``~/.spack/packages.yaml`` and modify as appropriate:
+#. Install ``environment-modules``.
- .. code-block:: yaml
+ * ``spack bootstrap`` will build ``environment-modules`` for you (and may build
+ other packages that are useful to the operation of Spack)
- packages:
- tcl:
- paths:
- tcl@8.5: /usr
- version: [8.5]
- buildable: False
+ * Install ``environment-modules`` using ``spack install`` with
+ ``spack install environment-modules~X`` (The ``~X`` variant builds without Xorg
+ dependencies, but ``environment-modules`` works fine too.)
-#. Install with:
+#. Add ``modulecmd`` to ``PATH`` and create a ``module`` command.
- .. code-block:: console
+ * If you are using ``bash`` or ``ksh``, Spack can currently do this for you as well.
+ After installing ``environment-modules`` following the step
+ above, source Spack's shell integration script. This will automatically
+ detect the lack of ``modulecmd`` and ``module``, and use the installed
+ ``environment-modules`` from ``spack bootstrap`` or ``spack install``.
+
+ .. code-block:: console
- $ spack install environment-modules
+ # For bash/zsh users
+ $ export SPACK_ROOT=/path/to/spack
+ $ . $SPACK_ROOT/share/spack/setup-env.sh
-#. Activate with the following script (or apply the updates to your
- ``.bashrc`` file manually):
- .. code-block:: sh
+ * If you prefer to do it manually, you can activate with the following
+ script (or apply the updates to your ``.bashrc`` file manually):
- TMP=`tempfile`
- echo >$TMP
- MODULE_HOME=`spack location --install-dir environment-modules`
- MODULE_VERSION=`ls -1 $MODULE_HOME/Modules | head -1`
- ${MODULE_HOME}/Modules/${MODULE_VERSION}/bin/add.modules <$TMP
- cp .bashrc $TMP
- echo "MODULE_VERSION=${MODULE_VERSION}" > .bashrc
- cat $TMP >>.bashrc
+ .. code-block:: sh
-This adds to your ``.bashrc`` (or similar) files, enabling Environment
-Modules when you log in. Re-load your .bashrc (or log out and in
-again), and then test that the ``module`` command is found with:
+ TMP=`tempfile`
+ echo >$TMP
+ MODULE_HOME=`spack location --install-dir environment-modules`
+ MODULE_VERSION=`ls -1 $MODULE_HOME/Modules | head -1`
+ ${MODULE_HOME}/Modules/${MODULE_VERSION}/bin/add.modules <$TMP
+ cp .bashrc $TMP
+ echo "MODULE_VERSION=${MODULE_VERSION}" > .bashrc
+ cat $TMP >>.bashrc
-.. code-block:: console
+ This is added to your ``.bashrc`` (or similar) files, enabling Environment
+ Modules when you log in.
+
+#. Test that the ``module`` command is found with:
- $ module avail
+ .. code-block:: console
+
+ $ module avail
+
+
+If ``tcl`` 8.0 or later is installed on your system, you can prevent
+spack from rebuilding ``tcl`` as part of the ``environment-modules`` dependency
+stack by adding the following to your ``~/.spack/packages.yaml`` replacing
+version 8.5 with whatever version is installed on your system:
+ .. code-block:: yaml
+
+ packages:
+ tcl:
+ paths:
+ tcl@8.5: /usr
+ buildable: False
^^^^^^^^^^^^^^^^^
Package Utilities
@@ -996,6 +1051,73 @@ written in C/C++/Fortran would need it. A potential workaround is to
load a recent ``binutils`` into your environment and use the ``--dirty``
flag.
+-----------
+GPG Signing
+-----------
+
+.. _cmd-spack-gpg:
+
+^^^^^^^^^^^^^
+``spack gpg``
+^^^^^^^^^^^^^
+
+Spack has support for signing and verifying packages using GPG keys. A
+separate keyring is used for Spack, so any keys available in the user's home
+directory are not used.
+
+^^^^^^^^^^^^^^^^^^
+``spack gpg init``
+^^^^^^^^^^^^^^^^^^
+
+When Spack is first installed, its keyring is empty. Keys stored in
+:file:`var/spack/gpg` are the default keys for a Spack installation. These
+keys may be imported by running ``spack gpg init``. This will import the
+default keys into the keyring as trusted keys.
+
+^^^^^^^^^^^^^
+Trusting keys
+^^^^^^^^^^^^^
+
+Additional keys may be added to the keyring using
+``spack gpg trust <keyfile>``. Once a key is trusted, packages signed by the
+owner of they key may be installed.
+
+^^^^^^^^^^^^^
+Creating keys
+^^^^^^^^^^^^^
+
+You may also create your own key so that you may sign your own packages using
+``spack gpg create <name> <email>``. By default, the key has no expiration,
+but it may be set with the ``--expires <date>`` flag (see the ``gnupg2``
+documentation for accepted date formats). It is also recommended to add a
+comment as to the use of the key using the ``--comment <comment>`` flag. The
+public half of the key can also be exported for sharing with others so that
+they may use packages you have signed using the ``--export <keyfile>`` flag.
+Secret keys may also be later exported using the
+``spack gpg export <location> [<key>...]`` command.
+
+^^^^^^^^^^^^
+Listing keys
+^^^^^^^^^^^^
+
+In order to list the keys available in the keyring, the
+``spack gpg list`` command will list trusted keys with the ``--trusted`` flag
+and keys available for signing using ``--signing``. If you would like to
+remove keys from your keyring, ``spack gpg untrust <keyid>``. Key IDs can be
+email addresses, names, or (best) fingerprints.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Signing and Verifying Packages
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In order to sign a package, ``spack gpg sign <file>`` should be used. By
+default, the signature will be written to ``<file>.asc``, but that may be
+changed by using the ``--output <file>`` flag. If there is only one signing
+key available, it will be used, but if there is more than one, the key to use
+must be specified using the ``--key <keyid>`` flag. The ``--clearsign`` flag
+may also be used to create a signed file which contains the contents, but it
+is not recommended. Signed packages may be verified by using
+``spack gpg verify <file>``.
.. _cray-support:
@@ -1091,10 +1213,13 @@ Here's an example of an external configuration for cray modules:
.. code-block:: yaml
packages:
- mpi:
+ mpich:
modules:
mpich@7.3.1%gcc@5.2.0 arch=cray_xc-haswell-CNL10: cray-mpich
mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-haswell-CNL10: cray-mpich
+ all:
+ providers:
+ mpi: [mpich]
This tells Spack that for whatever package that depends on mpi, load the
cray-mpich module into the environment. You can then be able to use whatever
@@ -1111,7 +1236,7 @@ Here is an example of a full packages.yaml used at NERSC
.. code-block:: yaml
packages:
- mpi:
+ mpich:
modules:
mpich@7.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-mpich
mpich@7.3.1%intel@16.0.0.109 arch=cray_xc-SuSE11-ivybridge: cray-mpich
@@ -1128,6 +1253,8 @@ Here is an example of a full packages.yaml used at NERSC
buildable: False
all:
compiler: [gcc@5.2.0, intel@16.0.0.109]
+ providers:
+ mpi: [mpich]
Here we tell spack that whenever we want to build with gcc use version 5.2.0 or
if we want to build with intel compilers, use version 16.0.0.109. We add a spec
diff --git a/lib/spack/docs/index.rst b/lib/spack/docs/index.rst
index 4dffe6f091..2ca737bb72 100644
--- a/lib/spack/docs/index.rst
+++ b/lib/spack/docs/index.rst
@@ -4,9 +4,13 @@
contain the root `toctree` directive.
===================
-Spack Documentation
+Spack
===================
+.. epigraph::
+
+ `These are docs for the Spack package manager. For sphere packing, see` `pyspack <https://pyspack.readthedocs.io>`_.
+
Spack is a package management tool designed to support multiple
versions and configurations of software on a wide variety of platforms
and environments. It was designed for large supercomputing centers,
@@ -25,12 +29,12 @@ maintain a single file for many different builds of the same package.
See the :doc:`features` for examples and highlights.
Get spack from the `github repository
-<https://github.com/llnl/spack>`_ and install your first
+<https://github.com/spack/spack>`_ and install your first
package:
.. code-block:: console
- $ git clone https://github.com/llnl/spack.git
+ $ git clone https://github.com/spack/spack.git
$ cd spack/bin
$ ./spack install libelf
@@ -46,7 +50,8 @@ or refer to the full manual below.
getting_started
basic_usage
workflows
- tutorial_sc16
+ tutorial
+ known_issues
.. toctree::
:maxdepth: 2
@@ -58,6 +63,7 @@ or refer to the full manual below.
mirrors
module_file_support
repositories
+ binary_caches
command_index
package_list
@@ -68,7 +74,8 @@ or refer to the full manual below.
contribution_guide
packaging_guide
developer_guide
- API Docs <spack>
+ Spack API Docs <spack>
+ LLNL API Docs <llnl>
==================
Indices and tables
diff --git a/lib/spack/docs/known_issues.rst b/lib/spack/docs/known_issues.rst
new file mode 100644
index 0000000000..c45ababc4f
--- /dev/null
+++ b/lib/spack/docs/known_issues.rst
@@ -0,0 +1,110 @@
+============
+Known Issues
+============
+
+This is a list of known bugs in Spack. It provides ways of getting around these
+problems if you encounter them.
+
+-----------------------------------------------------------------
+Default variants are not taken into account during concretization
+-----------------------------------------------------------------
+
+**Status:** Expected to be fixed in the next release
+
+Current concretization algorithm does not take into account default values
+of variants when adding extra constraints to the spec via CLI. For example
+you may encounter the following error when trying to specify which MPI provider
+to use:
+
+.. code-block:: console
+
+ $ spack install hdf5 ^openmpi
+ ==> Error: hdf5 does not depend on openmpi
+
+although the hdf5 package contains:
+
+.. code-block:: python
+
+ variant('mpi', default=True, description='Enable MPI support')
+ depends_on('mpi', when='+mpi')
+
+A workaround is to explicitly activate the variant related to the dependency:
+
+.. code-block:: console
+
+ $ spack install hdf5+mpi ^openmpi
+
+See https://github.com/spack/spack/issues/397 for further details.
+
+
+---------------------------------------------------
+Variants are not properly forwarded to dependencies
+---------------------------------------------------
+
+**Status:** Expected to be fixed in the next release
+
+Sometimes, a variant of a package can also affect how its dependencies are
+built. For example, in order to build MPI support for a package, it may
+require that its dependencies are also built with MPI support. In the
+``package.py``, this looks like:
+
+.. code-block:: python
+
+ depends_on('hdf5~mpi', when='~mpi')
+ depends_on('hdf5+mpi', when='+mpi')
+
+Spack handles this situation properly for *immediate* dependencies, and
+builds ``hdf5`` with the same variant you used for the package that
+depends on it. However, for *indirect* dependencies (dependencies of
+dependencies), Spack does not backtrack up the DAG far enough to handle
+this. Users commonly run into this situation when trying to build R with
+X11 support:
+
+.. code-block:: console
+
+ $ spack install r+X
+ ...
+ ==> Error: Invalid spec: 'cairo@1.14.8%gcc@6.2.1+X arch=linux-fedora25-x86_64 ^bzip2@1.0.6%gcc@6.2.1+shared arch=linux-fedora25-x86_64 ^font-util@1.3.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^fontconfig@2.12.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^freetype@2.7.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^gettext@0.19.8.1%gcc@6.2.1+bzip2+curses+git~libunistring+libxml2+tar+xz arch=linux-fedora25-x86_64 ^glib@2.53.1%gcc@6.2.1~libmount arch=linux-fedora25-x86_64 ^inputproto@2.3.2%gcc@6.2.1 arch=linux-fedora25-x86_64 ^kbproto@1.0.7%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libffi@3.2.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libpng@1.6.29%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libpthread-stubs@0.4%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libx11@1.6.5%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxau@1.0.8%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxcb@1.12%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxdmcp@1.1.2%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxext@1.3.3%gcc@6.2.1 arch=linux-fedora25-x86_64 ^libxml2@2.9.4%gcc@6.2.1~python arch=linux-fedora25-x86_64 ^libxrender@0.9.10%gcc@6.2.1 arch=linux-fedora25-x86_64 ^ncurses@6.0%gcc@6.2.1~symlinks arch=linux-fedora25-x86_64 ^openssl@1.0.2k%gcc@6.2.1 arch=linux-fedora25-x86_64 ^pcre@8.40%gcc@6.2.1+utf arch=linux-fedora25-x86_64 ^pixman@0.34.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^pkg-config@0.29.2%gcc@6.2.1+internal_glib arch=linux-fedora25-x86_64 ^python@2.7.13%gcc@6.2.1+shared~tk~ucs4 arch=linux-fedora25-x86_64 ^readline@7.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^renderproto@0.11.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^sqlite@3.18.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^tar^util-macros@1.19.1%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xcb-proto@1.12%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xextproto@7.3.0%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xproto@7.0.31%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xtrans@1.3.5%gcc@6.2.1 arch=linux-fedora25-x86_64 ^xz@5.2.3%gcc@6.2.1 arch=linux-fedora25-x86_64 ^zlib@1.2.11%gcc@6.2.1+pic+shared arch=linux-fedora25-x86_64'.
+ Package cairo requires variant ~X, but spec asked for +X
+
+A workaround is to explicitly activate the variants of dependencies as well:
+
+.. code-block:: console
+
+ $ spack install r+X ^cairo+X ^pango+X
+
+See https://github.com/spack/spack/issues/267 and
+https://github.com/spack/spack/issues/2546 for further details.
+
+
+---------------------------------
+``spack extensions`` doesn't work
+---------------------------------
+
+**Status:** Up for grabs if you want to try to fix it
+
+Spack provides an ``extensions`` command that lists all available extensions
+of a package, the ones that are installed, and the ones that are already
+activated. This is very useful in conjunction with ``spack activate``.
+Unfortunately, this command no longer works:
+
+.. code-block:: console
+
+ $ spack extensions python
+ ==> python@2.7.13%clang@8.0.0-apple~tk~ucs4 arch=darwin-sierra-x86_64 -ckrr4mg has no extensions.
+
+
+See https://github.com/spack/spack/issues/2895 for further details.
+
+
+----------------------------
+``spack setup`` doesn't work
+----------------------------
+
+**Status:** Work in progress
+
+Spack provides a ``setup`` command that is useful for the development of
+software outside of Spack. Unfortunately, this command no longer works.
+See https://github.com/spack/spack/issues/2597 and
+https://github.com/spack/spack/issues/2662 for details. This is expected
+to be fixed by https://github.com/spack/spack/pull/2664.
diff --git a/lib/spack/docs/mirrors.rst b/lib/spack/docs/mirrors.rst
index c69496066f..4075421e12 100644
--- a/lib/spack/docs/mirrors.rst
+++ b/lib/spack/docs/mirrors.rst
@@ -162,7 +162,7 @@ your site.
Once you have a mirror, you need to let spack know about it. This is
relatively simple. First, figure out the URL for the mirror. If it's
-a file, you can use a file URL like this one:
+a directory, you can use a file URL like this one:
.. code-block:: none
@@ -237,7 +237,7 @@ as other Spack mirrors (so it can be copied anywhere and referenced with a URL
like other mirrors). The mirror is maintained locally (within the Spack
installation directory) at :file:`var/spack/cache/`. It is always enabled (and
is always searched first when attempting to retrieve files for an installation)
-but can be cleared with :ref:`purge <cmd-spack-purge>`; the cache directory can also
+but can be cleared with :ref:`clean <cmd-spack-clean>`; the cache directory can also
be deleted manually without issue.
Caching includes retrieved tarball archives and source control repositories, but
diff --git a/lib/spack/docs/module_file_generation.svg b/lib/spack/docs/module_file_generation.svg
new file mode 100644
index 0000000000..72affd43d6
--- /dev/null
+++ b/lib/spack/docs/module_file_generation.svg
@@ -0,0 +1,989 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ width="682"
+ height="382"
+ id="svg3341"
+ inkscape:version="0.48.4 r9939"
+ sodipodi:docname="module_file_generation.svg">
+ <metadata
+ id="metadata3657">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1134"
+ id="namedview3655"
+ showgrid="false"
+ inkscape:zoom="2.0073314"
+ inkscape:cx="341"
+ inkscape:cy="191"
+ inkscape:window-x="1920"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g3345" />
+ <defs
+ id="defs3343" />
+ <g
+ inkscape:groupmode="layer"
+ id="layer1"
+ inkscape:label="Background">
+ <rect
+ style="fill:none;stroke:#ff0000;stroke-width:1.40437257;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8.42623582, 8.42623582;stroke-dashoffset:0"
+ id="rect3844"
+ width="442.15341"
+ height="375.15021"
+ x="18.745768"
+ y="3.2206354" />
+ <rect
+ style="fill:none;stroke:#0000ff;stroke-width:1.50000000000000000;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 9;stroke-dashoffset:0"
+ id="rect3844-6"
+ width="175.74904"
+ height="179.83459"
+ x="486.96402"
+ y="179.3212" />
+ </g>
+ <g
+ id="g3345">
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3347">
+ <rect
+ fill="#C0C0C0"
+ stroke="none"
+ x="297"
+ y="231"
+ width="198"
+ height="104"
+ opacity="0.2"
+ id="rect3349" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3351">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="290"
+ y="224"
+ width="198"
+ height="104"
+ id="rect3353" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3355">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 290 224 L 488 224 L 488 328 L 290 328 L 290 224 Z Z"
+ stroke-miterlimit="10"
+ id="path3357" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3359">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="280"
+ y="231"
+ width="20"
+ height="10"
+ id="rect3361" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3363">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 280 231 L 300 231 L 300 241 L 280 241 L 280 231 Z Z"
+ stroke-miterlimit="10"
+ id="path3365" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3367">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="280"
+ y="251"
+ width="20"
+ height="10"
+ id="rect3369" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3371">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 280 251 L 300 251 L 300 261 L 280 261 L 280 251 Z Z"
+ stroke-miterlimit="10"
+ id="path3373" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3375">
+ <g
+ id="g3377">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3379" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="343"
+ y="243.5"
+ id="text3381">Configuration files</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3383">
+ <rect
+ fill="#C0C0C0"
+ stroke="none"
+ x="327"
+ y="263"
+ width="98"
+ height="24"
+ opacity="0.2"
+ id="rect3385" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3387">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="320"
+ y="256"
+ width="98"
+ height="24"
+ id="rect3389" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3391">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 320 256 L 418 256 L 418 280 L 320 280 L 320 256 Z Z"
+ stroke-miterlimit="10"
+ id="path3393" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3395">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="320"
+ y="256"
+ width="98"
+ height="24"
+ id="rect3397" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3399">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 320 256 L 418 256 L 418 280 L 320 280 L 320 256 Z Z"
+ stroke-miterlimit="10"
+ id="path3401" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3403">
+ <g
+ id="g3405"
+ transform="translate(-2.8259277,-4.138916)">
+ <path
+ id="path3407"
+ d=""
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:none" />
+ <text
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="328.5"
+ y="275.5"
+ id="text3409"
+ style="font-size:13px;font-style:normal;font-weight:bold;text-decoration:none;fill:#000000;stroke:none;font-family:Arial">modules.yaml</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3411">
+ <rect
+ fill="#C0C0C0"
+ stroke="none"
+ x="335"
+ y="295"
+ width="83"
+ height="24"
+ opacity="0.2"
+ id="rect3413" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3415">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="328"
+ y="288"
+ width="83"
+ height="24"
+ id="rect3417" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3419">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 328 288 L 411 288 L 411 312 L 328 312 L 328 288 Z Z"
+ stroke-miterlimit="10"
+ id="path3421" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3423">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="328"
+ y="288"
+ width="83"
+ height="24"
+ id="rect3425" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3427">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 328 288 L 411 288 L 411 312 L 328 312 L 328 288 Z Z"
+ stroke-miterlimit="10"
+ id="path3429" />
+ </g>
+ <g
+ transform="translate(-248.92773,-218.16748)"
+ id="g3431">
+ <g
+ id="g3433">
+ <path
+ id="path3435"
+ d=""
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:none" />
+ <text
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="336.5"
+ y="307.5"
+ id="text3437"
+ style="font-size:13px;font-style:normal;font-weight:bold;text-decoration:none;fill:#000000;stroke:none;font-family:Arial">config.yaml</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3439">
+ <rect
+ fill="#C0C0C0"
+ stroke="none"
+ x="489"
+ y="407"
+ width="198"
+ height="72"
+ opacity="0.2"
+ id="rect3441" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3443">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="482"
+ y="400"
+ width="198"
+ height="72"
+ id="rect3445" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3447">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 482 400 L 680 400 L 680 472 L 482 472 L 482 400 Z Z"
+ stroke-miterlimit="10"
+ id="path3449" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3451">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="472"
+ y="407"
+ width="20"
+ height="10"
+ id="rect3453" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3455">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 472 407 L 492 407 L 492 417 L 472 417 L 472 407 Z Z"
+ stroke-miterlimit="10"
+ id="path3457" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3459">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="472"
+ y="427"
+ width="20"
+ height="10"
+ id="rect3461" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3463">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 472 427 L 492 427 L 492 437 L 472 437 L 472 427 Z Z"
+ stroke-miterlimit="10"
+ id="path3465" />
+ </g>
+ <g
+ transform="translate(-255.37842,-194.16748)"
+ id="g3467">
+ <g
+ id="g3469">
+ <path
+ id="path3471"
+ d=""
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:none" />
+ <text
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="528"
+ y="419.5"
+ id="text3473"
+ style="font-size:13px;font-style:normal;font-weight:bold;text-decoration:none;fill:#000000;stroke:none;font-family:Arial">Module subpackage</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3475">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 369 313 L 368 440 L 471 438"
+ stroke-miterlimit="10"
+ stroke-dasharray="3"
+ id="path3477" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3479">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 460.9209632639215 442.4060207072573 L 471 438 L 460.7575176559406 433.98857189624056"
+ stroke-miterlimit="10"
+ id="path3481" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3483">
+ <path
+ fill="#ffffff"
+ stroke="none"
+ d="M 256 448 L 381 448 L 391 458 L 391 496 L 256 496 L 256 448"
+ id="path3485" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3487">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 256 448 L 381 448 L 391 458 L 391 496 L 256 496 L 256 448 L 256 448"
+ stroke-miterlimit="10"
+ id="path3489" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3491">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 381 448 L 381 458 L 391 458 L 381 448"
+ stroke-miterlimit="10"
+ id="path3493" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3495">
+ <g
+ id="g3497">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3499" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="normal"
+ text-decoration="none"
+ x="261"
+ y="466"
+ id="text3501">template directory</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3503">
+ <g
+ id="g3505">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3507" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="normal"
+ text-decoration="none"
+ x="261"
+ y="481"
+ id="text3509">module file directory</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3511">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 419 439 L 393 448"
+ stroke-miterlimit="10"
+ stroke-dasharray="3"
+ id="path3513" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3515">
+ <path
+ d="M 419,267 576.40856,267.26845 576,399"
+ stroke-miterlimit="10"
+ id="path3517"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-miterlimit:10;stroke-dasharray:3"
+ sodipodi:nodetypes="ccc" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3519">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 571.790482243984 388.83732514237585 L 576 399 L 580.209517756016 388.83732514237585"
+ stroke-miterlimit="10"
+ id="path3521" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3523">
+ <path
+ fill="#ffffff"
+ stroke="none"
+ d="M 600 296 L 737 296 L 747 306 L 747 344 L 600 344 L 600 296"
+ id="path3525" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3527">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 600 296 L 737 296 L 747 306 L 747 344 L 600 344 L 600 296 L 600 296"
+ stroke-miterlimit="10"
+ id="path3529" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3531">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 737 296 L 737 306 L 747 306 L 737 296"
+ stroke-miterlimit="10"
+ id="path3533" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3535">
+ <g
+ id="g3537">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3539" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="normal"
+ text-decoration="none"
+ x="605"
+ y="314"
+ id="text3541">content customization</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3543">
+ <g
+ id="g3545">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3547" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="normal"
+ text-decoration="none"
+ x="605"
+ y="329"
+ id="text3549">layout customization</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3551">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 576 331 L 599 328"
+ stroke-miterlimit="10"
+ stroke-dasharray="3"
+ id="path3553" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3555">
+ <rect
+ fill="#C0C0C0"
+ stroke="none"
+ x="801"
+ y="415"
+ width="99"
+ height="44"
+ opacity="0.2"
+ id="rect3557" />
+ </g>
+ <g
+ transform="translate(-246,-210)"
+ id="g3559">
+ <rect
+ x="794"
+ y="408"
+ width="99"
+ height="44"
+ id="rect3561"
+ style="fill:#ffffff;stroke:none" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3563">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 794 408 L 893 408 L 893 452 L 794 452 L 794 408 Z Z"
+ stroke-miterlimit="10"
+ id="path3565" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3567">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="784"
+ y="415"
+ width="20"
+ height="10"
+ id="rect3569" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3571">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 784 415 L 804 415 L 804 425 L 784 425 L 784 415 Z Z"
+ stroke-miterlimit="10"
+ id="path3573" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3575">
+ <rect
+ fill="#ffffff"
+ stroke="none"
+ x="784"
+ y="435"
+ width="20"
+ height="10"
+ id="rect3577" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3579">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 784 435 L 804 435 L 804 445 L 784 445 L 784 435 Z Z"
+ stroke-miterlimit="10"
+ id="path3581" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3583">
+ <g
+ id="g3585"
+ transform="translate(-6.7685547,5.861084)">
+ <path
+ id="path3587"
+ d=""
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:none" />
+ <text
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="832"
+ y="427.5"
+ id="text3589"
+ style="font-size:13px;font-style:normal;font-weight:bold;text-decoration:none;fill:#000000;stroke:none;font-family:Arial">Jinja2</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3591">
+ <path
+ fill="#C0C0C0"
+ stroke="none"
+ d="M 568.9 519 L 596.34 519 L 608.1 530.76 L 608.1 568 L 568.9 568"
+ opacity="0.2"
+ id="path3593" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3595">
+ <path
+ fill="#ffffff"
+ stroke="none"
+ d="M 561.9 512 L 589.34 512 L 601.1 523.76 L 601.1 561 L 561.9 561"
+ id="path3597" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3599">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 561.9 512 L 589.34 512 L 601.1 523.76 L 601.1 561 L 561.9 561 L 561.9 512"
+ stroke-miterlimit="10"
+ id="path3601" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3603">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 589.34 512 L 589.34 523.76 L 601.1 523.76 L 589.34 512"
+ stroke-miterlimit="10"
+ id="path3605" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3607">
+ <g
+ id="g3609">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3611" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="551.5"
+ y="580.5"
+ id="text3613">Templates</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3615">
+ <path
+ d="M 620,549 836.73155,549.54866 838,453"
+ stroke-miterlimit="10"
+ id="path3617"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-miterlimit:10;stroke-dasharray:3"
+ sodipodi:nodetypes="ccc" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3619">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 842.4139237018308 463.0755782739462 L 838 453 L 833.9966056593214 463.2456251030878"
+ stroke-miterlimit="10"
+ id="path3621" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3623">
+ <path
+ d="M 680.18289,431.54866 783,431"
+ stroke-miterlimit="10"
+ id="path3625"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-miterlimit:10;stroke-dasharray:3"
+ sodipodi:nodetypes="cc" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3627">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 772.9654737429415 435.5064712133113 L 783 431 L 772.7179620834851 427.0910747917938"
+ stroke-miterlimit="10"
+ id="path3629" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3631">
+ <path
+ fill="#C0C0C0"
+ stroke="none"
+ d="M 862.4 247 L 889.84 247 L 901.6 258.76 L 901.6 296 L 862.4 296"
+ opacity="0.2"
+ id="path3633" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3635">
+ <path
+ fill="#ffffff"
+ stroke="none"
+ d="M 855.4 240 L 882.84 240 L 894.6 251.76000000000002 L 894.6 289 L 855.4 289"
+ id="path3637" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3639">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 855.4 240 L 882.84 240 L 894.6 251.76000000000002 L 894.6 289 L 855.4 289 L 855.4 240"
+ stroke-miterlimit="10"
+ id="path3641" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3643">
+ <path
+ fill="none"
+ stroke="#000000"
+ d="M 882.84 240 L 882.84 251.76000000000002 L 894.6 251.76000000000002 L 882.84 240"
+ stroke-miterlimit="10"
+ id="path3645" />
+ </g>
+ <g
+ transform="translate(-246,-214) scale(1,1)"
+ id="g3647">
+ <g
+ id="g3649">
+ <path
+ fill="none"
+ stroke="none"
+ id="path3651" />
+ <text
+ fill="#000000"
+ stroke="none"
+ font-family="Arial"
+ font-size="13px"
+ font-style="normal"
+ font-weight="bold"
+ text-decoration="none"
+ x="840.5"
+ y="308.5"
+ id="text3653">Module files</text>
+ </g>
+ </g>
+ <g
+ transform="translate(-261.34866,-222.82727)"
+ id="g3635-8">
+ <path
+ style="fill:#ffffff;stroke:none"
+ inkscape:connector-curvature="0"
+ d="m 855.4,240 27.44,0 11.76,11.76 0,37.24 -39.2,0"
+ id="path3637-9" />
+ </g>
+ <g
+ transform="translate(-261.34866,-222.82727)"
+ id="g3639-7">
+ <path
+ style="fill:none;stroke:#000000;stroke-miterlimit:10"
+ inkscape:connector-curvature="0"
+ d="m 855.4,240 27.44,0 11.76,11.76 0,37.24 -39.2,0 0,-49"
+ stroke-miterlimit="10"
+ id="path3641-3" />
+ </g>
+ <g
+ transform="translate(-261.34866,-222.82727)"
+ id="g3643-6">
+ <path
+ style="fill:none;stroke:#000000;stroke-miterlimit:10"
+ inkscape:connector-curvature="0"
+ d="m 882.84,240 0,11.76 11.76,0 L 882.84,240"
+ stroke-miterlimit="10"
+ id="path3645-1" />
+ </g>
+ <g
+ transform="translate(-278.09946,-233.44973)"
+ id="g3635-84">
+ <path
+ style="fill:#ffffff;stroke:none"
+ inkscape:connector-curvature="0"
+ d="m 855.4,240 27.44,0 11.76,11.76 0,37.24 -39.2,0"
+ id="path3637-5" />
+ </g>
+ <g
+ transform="translate(-278.09946,-233.44973)"
+ id="g3639-0">
+ <path
+ style="fill:none;stroke:#000000;stroke-miterlimit:10"
+ inkscape:connector-curvature="0"
+ d="m 855.4,240 27.44,0 11.76,11.76 0,37.24 -39.2,0 0,-49"
+ stroke-miterlimit="10"
+ id="path3641-36" />
+ </g>
+ <g
+ transform="translate(-278.09946,-233.44973)"
+ id="g3643-1">
+ <path
+ style="fill:none;stroke:#000000;stroke-miterlimit:10"
+ inkscape:connector-curvature="0"
+ d="m 882.84,240 0,11.76 11.76,0 L 882.84,240"
+ stroke-miterlimit="10"
+ id="path3645-0" />
+ </g>
+ <g
+ transform="translate(-27.431351,-208.3001)"
+ id="g3375-6" />
+ <g
+ id="g4709"
+ transform="matrix(1,0,0,0.81117898,54.337968,31.640263)">
+ <g
+ id="g3623-5"
+ transform="matrix(0,-1,1,0,121.9107,875.37876)">
+ <path
+ sodipodi:nodetypes="cc"
+ style="fill:none;stroke:#000000;stroke-miterlimit:10;stroke-dasharray:3"
+ inkscape:connector-curvature="0"
+ id="path3625-4"
+ stroke-miterlimit="10"
+ d="M 680.18289,431.54866 783,431" />
+ </g>
+ <g
+ id="g3627-7"
+ transform="matrix(0,-1,1,0,121.98695,871.00978)">
+ <path
+ id="path3629-6"
+ stroke-miterlimit="10"
+ d="M 772.96547,435.50647 783,431 772.71796,427.09107"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-miterlimit:10" />
+ </g>
+ </g>
+ </g>
+</svg>
diff --git a/lib/spack/docs/module_file_support.rst b/lib/spack/docs/module_file_support.rst
index 93c2ee33c6..6b874fbe97 100644
--- a/lib/spack/docs/module_file_support.rst
+++ b/lib/spack/docs/module_file_support.rst
@@ -7,16 +7,10 @@ Modules
The use of module systems to manage user environment in a controlled way
is a common practice at HPC centers that is often embraced also by individual
programmers on their development machines. To support this common practice
-Spack provides integration with `Environment Modules
+Spack integrates with `Environment Modules
<http://modules.sourceforge.net/>`_ , `LMod
-<http://lmod.readthedocs.io/en/latest/>`_ and `Dotkit <https://computing.llnl.gov/?set=jobs&page=dotkit>`_ by:
-
-* generating module files after a successful installation
-* providing commands that can leverage the spec syntax to manipulate modules
-
-In the following you will see how to activate shell support for commands in Spack
-that requires it, and discover what benefits this may bring with respect to deal
-directly with automatically generated module files.
+<http://lmod.readthedocs.io/en/latest/>`_ and `Dotkit <https://computing.llnl.gov/?set=jobs&page=dotkit>`_ by
+providing post-install hooks that generate module files and commands to manipulate them.
.. note::
@@ -26,89 +20,81 @@ directly with automatically generated module files.
.. _shell-support:
--------------
-Shell support
--------------
+----------------------------
+Using module files via Spack
+----------------------------
-You can enable shell support by sourcing the appropriate setup file
-in the ``$SPACK_ROOT/share/spack`` directory.
-For ``bash`` or ``ksh`` users:
+If you have installed a supported module system either manually or through
+``spack bootstrap``, you should be able to run either ``module avail`` or
+``use -l spack`` to see what module files have been installed. Here is
+sample output of those programs, showing lots of installed packages:
.. code-block:: console
- $ . ${SPACK_ROOT}/share/spack/setup-env.sh
+ $ module avail
-For ``csh`` and ``tcsh`` instead:
+ --------------------------------------------------------------- ~/spack/share/spack/modules/linux-ubuntu14-x86_64 ---------------------------------------------------------------
+ autoconf-2.69-gcc-4.8-qextxkq hwloc-1.11.6-gcc-6.3.0-akcisez m4-1.4.18-gcc-4.8-ev2znoc openblas-0.2.19-gcc-6.3.0-dhkmed6 py-setuptools-34.2.0-gcc-6.3.0-fadur4s
+ automake-1.15-gcc-4.8-maqvukj isl-0.18-gcc-4.8-afi6taq m4-1.4.18-gcc-6.3.0-uppywnz openmpi-2.1.0-gcc-6.3.0-go2s4z5 py-six-1.10.0-gcc-6.3.0-p4dhkaw
+ binutils-2.28-gcc-4.8-5s7c6rs libiconv-1.15-gcc-4.8-at46wg3 mawk-1.3.4-gcc-4.8-acjez57 openssl-1.0.2k-gcc-4.8-dkls5tk python-2.7.13-gcc-6.3.0-tyehea7
+ bison-3.0.4-gcc-4.8-ek4luo5 libpciaccess-0.13.4-gcc-6.3.0-gmufnvh mawk-1.3.4-gcc-6.3.0-ostdoms openssl-1.0.2k-gcc-6.3.0-gxgr5or readline-7.0-gcc-4.8-xhufqhn
+ bzip2-1.0.6-gcc-4.8-iffrxzn libsigsegv-2.11-gcc-4.8-pp2cvte mpc-1.0.3-gcc-4.8-g5mztc5 pcre-8.40-gcc-4.8-r5pbrxb readline-7.0-gcc-6.3.0-zzcyicg
+ bzip2-1.0.6-gcc-6.3.0-bequudr libsigsegv-2.11-gcc-6.3.0-7enifnh mpfr-3.1.5-gcc-4.8-o7xm7az perl-5.24.1-gcc-4.8-dg5j65u sqlite-3.8.5-gcc-6.3.0-6zoruzj
+ cmake-3.7.2-gcc-6.3.0-fowuuby libtool-2.4.6-gcc-4.8-7a523za mpich-3.2-gcc-6.3.0-dmvd3aw perl-5.24.1-gcc-6.3.0-6uzkpt6 tar-1.29-gcc-4.8-wse2ass
+ curl-7.53.1-gcc-4.8-3fz46n6 libtool-2.4.6-gcc-6.3.0-n7zmbzt ncurses-6.0-gcc-4.8-dcpe7ia pkg-config-0.29.2-gcc-4.8-ib33t75 tcl-8.6.6-gcc-4.8-tfxzqbr
+ expat-2.2.0-gcc-4.8-mrv6bd4 libxml2-2.9.4-gcc-4.8-ryzxnsu ncurses-6.0-gcc-6.3.0-ucbhcdy pkg-config-0.29.2-gcc-6.3.0-jpgubk3 util-macros-1.19.1-gcc-6.3.0-xorz2x2
+ flex-2.6.3-gcc-4.8-yf345oo libxml2-2.9.4-gcc-6.3.0-rltzsdh netlib-lapack-3.6.1-gcc-6.3.0-js33dog py-appdirs-1.4.0-gcc-6.3.0-jxawmw7 xz-5.2.3-gcc-4.8-mew4log
+ gcc-6.3.0-gcc-4.8-24puqve lmod-7.4.1-gcc-4.8-je4srhr netlib-scalapack-2.0.2-gcc-6.3.0-5aidk4l py-numpy-1.12.0-gcc-6.3.0-oemmoeu xz-5.2.3-gcc-6.3.0-3vqeuvb
+ gettext-0.19.8.1-gcc-4.8-yymghlh lua-5.3.4-gcc-4.8-im75yaz netlib-scalapack-2.0.2-gcc-6.3.0-hjsemcn py-packaging-16.8-gcc-6.3.0-i2n3dtl zip-3.0-gcc-4.8-rwar22d
+ gmp-6.1.2-gcc-4.8-5ub2wu5 lua-luafilesystem-1_6_3-gcc-4.8-wkey3nl netlib-scalapack-2.0.2-gcc-6.3.0-jva724b py-pyparsing-2.1.10-gcc-6.3.0-tbo6gmw zlib-1.2.11-gcc-4.8-pgxsxv7
+ help2man-1.47.4-gcc-4.8-kcnqmau lua-luaposix-33.4.0-gcc-4.8-mdod2ry netlib-scalapack-2.0.2-gcc-6.3.0-rgqfr6d py-scipy-0.19.0-gcc-6.3.0-kr7nat4 zlib-1.2.11-gcc-6.3.0-7cqp6cj
+
+The names should look familiar, as they resemble the output from ``spack find``.
+You *can* use the modules here directly. For example, you could type either of these commands
+to load the ``cmake`` module:
.. code-block:: console
- $ source $SPACK_ROOT/share/spack/setup-env.csh
+ $ use cmake-3.7.2-gcc-6.3.0-fowuuby
+.. code-block:: console
-.. note::
- You can put the source line in your ``.bashrc`` or ``.cshrc`` to
- have Spack's shell support available on the command line at any login.
+ $ module load cmake-3.7.2-gcc-6.3.0-fowuuby
+Neither of these is particularly pretty, easy to remember, or
+easy to type. Luckily, Spack has its own interface for using modules and dotkits.
-----------------------------
-Using module files via Spack
-----------------------------
+^^^^^^^^^^^^^
+Shell support
+^^^^^^^^^^^^^
-If you have shell support enabled you should be able to run either
-``module avail`` or ``use -l spack`` to see what module/dotkit files have
-been installed. Here is sample output of those programs, showing lots
-of installed packages.
+To enable additional Spack commands for loading and unloading module files,
+and to add the correct path to ``MODULEPATH``, you need to source the appropriate
+setup file in the ``$SPACK_ROOT/share/spack`` directory. This will activate shell
+support for the commands that need it. For ``bash``, ``ksh`` or ``zsh`` users:
.. code-block:: console
- $ module avail
+ $ . ${SPACK_ROOT}/share/spack/setup-env.sh
- ------- ~/spack/share/spack/modules/linux-debian7-x86_64 --------
- adept-utils@1.0%gcc@4.4.7-5adef8da libelf@0.8.13%gcc@4.4.7
- automaded@1.0%gcc@4.4.7-d9691bb0 libelf@0.8.13%intel@15.0.0
- boost@1.55.0%gcc@4.4.7 mpc@1.0.2%gcc@4.4.7-559607f5
- callpath@1.0.1%gcc@4.4.7-5dce4318 mpfr@3.1.2%gcc@4.4.7
- dyninst@8.1.2%gcc@4.4.7-b040c20e mpich@3.0.4%gcc@4.4.7
- gcc@4.9.1%gcc@4.4.7-93ab98c5 mpich@3.0.4%gcc@4.9.0
- gmp@6.0.0a%gcc@4.4.7 mrnet@4.1.0%gcc@4.4.7-72b7881d
- graphlib@2.0.0%gcc@4.4.7 netgauge@2.4.6%gcc@4.9.0-27912b7b
- launchmon@1.0.1%gcc@4.4.7 stat@2.1.0%gcc@4.4.7-51101207
- libNBC@1.1.1%gcc@4.9.0-27912b7b sundials@2.5.0%gcc@4.9.0-27912b7b
- libdwarf@20130729%gcc@4.4.7-b52fac98
+For ``csh`` and ``tcsh`` instead:
.. code-block:: console
- $ use -l spack
-
- spack ----------
- adept-utils@1.0%gcc@4.4.7-5adef8da - adept-utils @1.0
- automaded@1.0%gcc@4.4.7-d9691bb0 - automaded @1.0
- boost@1.55.0%gcc@4.4.7 - boost @1.55.0
- callpath@1.0.1%gcc@4.4.7-5dce4318 - callpath @1.0.1
- dyninst@8.1.2%gcc@4.4.7-b040c20e - dyninst @8.1.2
- gmp@6.0.0a%gcc@4.4.7 - gmp @6.0.0a
- libNBC@1.1.1%gcc@4.9.0-27912b7b - libNBC @1.1.1
- libdwarf@20130729%gcc@4.4.7-b52fac98 - libdwarf @20130729
- libelf@0.8.13%gcc@4.4.7 - libelf @0.8.13
- libelf@0.8.13%intel@15.0.0 - libelf @0.8.13
- mpc@1.0.2%gcc@4.4.7-559607f5 - mpc @1.0.2
- mpfr@3.1.2%gcc@4.4.7 - mpfr @3.1.2
- mpich@3.0.4%gcc@4.4.7 - mpich @3.0.4
- mpich@3.0.4%gcc@4.9.0 - mpich @3.0.4
- netgauge@2.4.6%gcc@4.9.0-27912b7b - netgauge @2.4.6
- sundials@2.5.0%gcc@4.9.0-27912b7b - sundials @2.5.0
-
-The names here should look familiar, they're the same ones from
-``spack find``. You *can* use the names here directly. For example,
-you could type either of these commands to load the callpath module:
+ $ set SPACK_ROOT ...
+ $ source $SPACK_ROOT/share/spack/setup-env.csh
-.. code-block:: console
+Note that in the latter case it is necessary to explicitly set ``SPACK_ROOT``
+before sourcing the setup file (you will get a meaningful error message
+if you don't).
- $ use callpath@1.0.1%gcc@4.4.7-5dce4318
+When ``bash`` and ``ksh`` users update their environment with ``setup-env.sh``, it will check for spack-installed environment modules and add the ``module`` command to their environment; This only occurs if the module command is not already available. You can install ``environment-modules`` with ``spack bootstrap`` as described in :ref:`InstallEnvironmentModules`.
-.. code-block:: console
+Finally, if you want to have Spack's shell support available on the command line at
+any login you can put this source line in one of the files that are sourced
+at startup (like ``.profile``, ``.bashrc`` or ``.cshrc``). Be aware though
+that the startup time may be slightly increased because of that.
- $ module load callpath@1.0.1%gcc@4.4.7-5dce4318
.. _cmd-spack-load:
@@ -116,12 +102,11 @@ you could type either of these commands to load the callpath module:
``spack load / unload``
^^^^^^^^^^^^^^^^^^^^^^^
-Neither of these is particularly pretty, easy to remember, or
-easy to type. Luckily, Spack has its own interface for using modules
-and dotkits. You can use the same spec syntax you're used to:
+Once you have shell support enabled you can use the same spec syntax
+you're used to:
========================= ==========================
-Environment Modules Dotkit
+Modules Dotkit
========================= ==========================
``spack load <spec>`` ``spack use <spec>``
``spack unload <spec>`` ``spack unuse <spec>``
@@ -210,7 +195,7 @@ Scripts to load modules recursively may be made with the command:
$ spack module loads --dependencies <spec>
-An equivalent alternative is:
+An equivalent alternative using `process substitution <http://tldp.org/LDP/abs/html/process-sub.html>`_ is:
.. code-block :: console
@@ -296,43 +281,46 @@ For example, consider the following on one system:
# antlr@2.7.7%gcc@5.3.0~csharp+cxx~java~python arch=linux-SuSE11-x86_64
module load linux-SuSE11-x86_64/antlr-2.7.7-gcc-5.3.0-bdpl46y
-----------------------------
-Auto-generating Module Files
-----------------------------
+-------------------------
+Module file customization
+-------------------------
Module files are generated by post-install hooks after the successful
-installation of a package. The following table summarizes the essential
+installation of a package. The table below summarizes the essential
information associated with the different file formats
that can be generated by Spack:
- +-----------------------------+--------------------+-------------------------------+----------------------+
- | | **Hook name** | **Default root directory** | **Compatible tools** |
- +=============================+====================+===============================+======================+
- | **Dotkit** | ``dotkit`` | share/spack/dotkit | DotKit |
- +-----------------------------+--------------------+-------------------------------+----------------------+
- | **TCL - Non-Hierarchical** | ``tcl`` | share/spack/modules | Env. Modules/LMod |
- +-----------------------------+--------------------+-------------------------------+----------------------+
- | **Lua - Hierarchical** | ``lmod`` | share/spack/lmod | LMod |
- +-----------------------------+--------------------+-------------------------------+----------------------+
+ +-----------------------------+--------------------+-------------------------------+----------------------------------+----------------------+
+ | | **Hook name** | **Default root directory** | **Default template file** | **Compatible tools** |
+ +=============================+====================+===============================+==================================+======================+
+ | **Dotkit** | ``dotkit`` | share/spack/dotkit | templates/modules/modulefile.dk | DotKit |
+ +-----------------------------+--------------------+-------------------------------+----------------------------------+----------------------+
+ | **TCL - Non-Hierarchical** | ``tcl`` | share/spack/modules | templates/modules/modulefile.tcl | Env. Modules/LMod |
+ +-----------------------------+--------------------+-------------------------------+----------------------------------+----------------------+
+ | **Lua - Hierarchical** | ``lmod`` | share/spack/lmod | templates/modules/modulefile.lua | LMod |
+ +-----------------------------+--------------------+-------------------------------+----------------------------------+----------------------+
-Though Spack ships with sensible defaults for the generation of module files,
-one can customize many aspects of it to accommodate package or site specific needs.
-These customizations are enabled by either:
+Spack ships with sensible defaults for the generation of module files, but
+you can customize many aspects of it to accommodate package or site specific needs.
+In general you can override or extend the default behavior by:
1. overriding certain callback APIs in the Python packages
2. writing specific rules in the ``modules.yaml`` configuration file
+ 3. writing your own templates to override or extend the defaults
-The former method fits best cases that are site independent, e.g. injecting variables
-from language interpreters into their extensions. The latter instead permits to
-fine tune the content, naming and creation of module files to meet site specific conventions.
+The former method let you express changes in the run-time environment
+that are needed to use the installed software properly, e.g. injecting variables
+from language interpreters into their extensions. The latter two instead permit to
+fine tune the filesystem layout, content and creation of module files to meet
+site specific conventions.
-^^^^^^^^^^^^^^^^^^^^
-``Package`` file API
-^^^^^^^^^^^^^^^^^^^^
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Override API calls in ``package.py``
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-There are two methods that can be overridden in any ``package.py`` to affect the
-content of generated module files. The first one is:
+There are two methods that you can override in any ``package.py`` to affect the
+content of the module files generated by Spack. The first one:
.. code-block:: python
@@ -340,8 +328,8 @@ content of generated module files. The first one is:
"""Set up the compile and runtime environments for a package."""
pass
-and can alter the content of *the same package where it is overridden*
-by adding actions to ``run_env``. The second method is:
+can alter the content of the module file associated with the same package where it is overridden.
+The second method:
.. code-block:: python
@@ -349,12 +337,13 @@ by adding actions to ``run_env``. The second method is:
"""Set up the environment of packages that depend on this one"""
pass
-and has similar effects on module file of dependees. Even in this case
-``run_env`` must be filled with the desired list of environment modifications.
+can instead inject run-time environment modifications in the module files of packages
+that depend on it. In both cases you need to fill ``run_env`` with the desired
+list of environment modifications.
.. note::
The ``r`` package and callback APIs
- A typical example in which overriding both methods prove to be useful
+ An example in which it is crucial to override both methods
is given by the ``r`` package. This package installs libraries and headers
in non-standard locations and it is possible to prepend the appropriate directory
to the corresponding environment variables:
@@ -375,37 +364,36 @@ and has similar effects on module file of dependees. Even in this case
it appropriately in the override of the second method:
.. literalinclude:: ../../../var/spack/repos/builtin/packages/r/package.py
- :lines: 128-129,146-151
+ :pyobject: R.setup_dependent_environment
.. _modules-yaml:
----------------------------------
-Configuration in ``modules.yaml``
----------------------------------
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+Write a configuration file
+^^^^^^^^^^^^^^^^^^^^^^^^^^
-The name of the configuration file that controls module generation behavior
-is ``modules.yaml``. The default configuration:
+The configuration files that control module generation behavior
+are named ``modules.yaml``. The default configuration:
.. literalinclude:: ../../../etc/spack/defaults/modules.yaml
:language: yaml
-activates generation for ``tcl`` and ``dotkit`` module files and inspects
+activates the hooks to generate ``tcl`` and ``dotkit`` module files and inspects
the installation folder of each package for the presence of a set of subdirectories
(``bin``, ``man``, ``share/man``, etc.). If any is found its full path is prepended
to the environment variables listed below the folder name.
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Activation of other systems
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""
+Activate other hooks
+""""""""""""""""""""
Any other module file generator shipped with Spack can be activated adding it to the
list under the ``enable`` key in the module file. Currently the only generator that
-is not activated by default is ``lmod``, which produces hierarchical lua module files.
-For each module system that can be enabled a finer configuration is possible.
+is not active by default is ``lmod``, which produces hierarchical lua module files.
-Directives that are aimed at driving the generation of a particular type of module files
-should be listed under a top level key that corresponds to the generator being
-customized:
+Each module system can then be configured separately. In fact, you should list configuration
+options that affect a particular type of module files under a top level key corresponding
+to the generator being customized:
.. code-block:: yaml
@@ -421,24 +409,21 @@ customized:
lmod:
# contains lmod specific customizations
-All these module sections allow for both:
-
-1. global directives that usually affect the whole layout of modules or the naming scheme
-2. directives that affect only a set of packages and modify their content
-
-For the latter point in particular it is possible to use anonymous specs
-to select an appropriate set of packages on which the modifications should be applied.
+In general, the configuration options that you can use in ``modules.yaml`` will
+either change the layout of the module files on the filesystem, or they will affect
+their content. For the latter point it is possible to use anonymous specs
+to fine tune the set of packages on which the modifications should be applied.
.. _anonymous_specs:
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""""""""""
Selection by anonymous specs
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""""""""""
-The procedure to select packages using anonymous specs is a natural
-extension of using them to install packages, the only difference being
-that specs in this case **are not required to have a root package**.
-Consider for instance this snippet:
+In the configuration file you can use *anonymous specs* (i.e. specs
+that **are not required to have a root package** and are thus used just
+to express constraints) to apply certain modifications on a selected set
+of the installed software. For instance, in the snippet below:
.. code-block:: yaml
@@ -467,8 +452,7 @@ Consider for instance this snippet:
unset:
- FOOBAR
-During module file generation, the configuration above will instruct
-Spack to set the environment variable ``BAR=bar`` for every module,
+you are instructing Spack to set the environment variable ``BAR=bar`` for every module,
unless the associated spec satisfies ``^openmpi`` in which case ``BAR=baz``.
In addition in any spec that satisfies ``zlib`` the value ``foo`` will be
prepended to ``LD_LIBRARY_PATH`` and in any spec that satisfies ``zlib%gcc@4.8``
@@ -480,15 +464,15 @@ the variable ``FOOBAR`` will be unset.
first, no matter where they appear in the configuration file. All the other
spec constraints are instead evaluated top to bottom.
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Blacklist or whitelist the generation of specific module files
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""""""""""""""""""""""""""
+Blacklist or whitelist specific module files
+""""""""""""""""""""""""""""""""""""""""""""
-Anonymous specs are also used to prevent module files from being written or
-to force them to be written. A common case for that at HPC centers is to hide
-from users all of the software that needs to be built with system compilers.
-Suppose for instance to have ``gcc@4.4.7`` provided by your system. Then
-with a configuration file like this one:
+You can use anonymous specs also to prevent module files from being written or
+to force them to be written. Consider the case where you want to hide from users
+all the boilerplate software that you had to build in order to bootstrap a new
+compiler. Suppose for instance that ``gcc@4.4.7`` is the compiler provided by
+your system. If you write a configuration file like:
.. code-block:: yaml
@@ -497,13 +481,13 @@ with a configuration file like this one:
whitelist: ['gcc', 'llvm'] # Whitelist will have precedence over blacklist
blacklist: ['%gcc@4.4.7'] # Assuming gcc@4.4.7 is the system compiler
-you will skip the generation of module files for any package that
-is compiled with ``gcc@4.4.7``, with the exception of any ``gcc``
+you will prevent the generation of module files for any package that
+is compiled with ``gcc@4.4.7``, with the only exception of any ``gcc``
or any ``llvm`` installation.
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+"""""""""""""""""""""""""""
Customize the naming scheme
-^^^^^^^^^^^^^^^^^^^^^^^^^^^
+"""""""""""""""""""""""""""
The names of environment modules generated by spack are not always easy to
fully comprehend due to the long hash in the name. There are two module
@@ -551,7 +535,9 @@ most likely via the ``+blas`` variant specification.
tcl:
naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
all:
- conflict: ['${PACKAGE}', 'intel/14.0.1']
+ conflict:
+ - '${PACKAGE}'
+ - 'intel/14.0.1'
will create module files that will conflict with ``intel/14.0.1`` and with the
base directory of the same module, effectively preventing the possibility to
@@ -563,9 +549,9 @@ most likely via the ``+blas`` variant specification.
.. note::
LMod hierarchical module files
When ``lmod`` is activated Spack will generate a set of hierarchical lua module
- files that are understood by LMod. The generated hierarchy always contains the
- three layers ``Core`` / ``Compiler`` / ``MPI`` but can be further extended to
- any other virtual dependency present in Spack. A case that could be useful in
+ files that are understood by LMod. The hierarchy will always contain the
+ two layers ``Core`` / ``Compiler`` but can be further extended to
+ any of the virtual dependencies present in Spack. A case that could be useful in
practice is for instance:
.. code-block:: yaml
@@ -574,11 +560,14 @@ most likely via the ``+blas`` variant specification.
enable:
- lmod
lmod:
- core_compilers: ['gcc@4.8']
- hierarchical_scheme: ['lapack']
-
- that will generate a hierarchy in which the ``lapack`` layer is treated as the ``mpi``
- one. This allows a site to build the same libraries or applications against different
+ core_compilers:
+ - 'gcc@4.8'
+ hierarchy:
+ - 'mpi'
+ - 'lapack'
+
+ that will generate a hierarchy in which the ``lapack`` and ``mpi`` layer can be switched
+ independently. This allows a site to build the same libraries or applications against different
implementations of ``mpi`` and ``lapack``, and let LMod switch safely from one to the
other.
@@ -587,15 +576,14 @@ most likely via the ``+blas`` variant specification.
For hierarchies that are deeper than three layers ``lmod spider`` may have some issues.
See `this discussion on the LMod project <https://github.com/TACC/Lmod/issues/114>`_.
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""""""""""""""""""
Filter out environment modifications
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+""""""""""""""""""""""""""""""""""""
-Modifications to certain environment variables in module files are generated by
-default, for instance by prefix inspections in the default configuration file.
-There are cases though where some of these modifications are unwanted.
-Suppose you need to avoid having ``CPATH`` and ``LIBRARY_PATH``
-modified by your ``dotkit`` modules:
+Modifications to certain environment variables in module files are there by
+default, for instance because they are generated by prefix inspections.
+If you want to prevent modifications to some environment variables, you can
+do so by using the environment blacklist:
.. code-block:: yaml
@@ -610,11 +598,11 @@ The configuration above will generate dotkit module files that will not contain
modifications to either ``CPATH`` or ``LIBRARY_PATH`` and environment module
files that instead will contain these modifications.
-^^^^^^^^^^^^^^^^^^^^^
+"""""""""""""""""""""
Autoload dependencies
-^^^^^^^^^^^^^^^^^^^^^
+"""""""""""""""""""""
-In some cases it can be useful to have module files directly autoload
+In some cases it can be useful to have module files that automatically load
their dependencies. This may be the case for Python extensions, if not
activated using ``spack activate``:
@@ -626,8 +614,9 @@ activated using ``spack activate``:
autoload: 'direct'
The configuration file above will produce module files that will
-automatically load their direct dependencies. The allowed values for the
-``autoload`` statement are either ``none``, ``direct`` or ``all``.
+load their direct dependencies if the package installed depends on ``python``.
+The allowed values for the ``autoload`` statement are either ``none``,
+``direct`` or ``all``.
.. note::
TCL prerequisites
diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst
index 8a39ee28e2..ac89f9724a 100644
--- a/lib/spack/docs/packaging_guide.rst
+++ b/lib/spack/docs/packaging_guide.rst
@@ -405,70 +405,22 @@ For tarball downloads, Spack can currently support checksums using the
MD5, SHA-1, SHA-224, SHA-256, SHA-384, and SHA-512 algorithms. It
determines the algorithm to use based on the hash length.
------------------------
-Package Version Numbers
------------------------
-
-Most Spack versions are numeric, a tuple of integers; for example,
-``apex@0.1``, ``ferret@6.96`` or ``py-netcdf@1.2.3.1``. Spack knows
-how to compare and sort numeric versions.
-
-Some Spack versions involve slight extensions of numeric syntax; for
-example, ``py-sphinx-rtd-theme@0.1.10a0``. In this case, numbers are
-always considered to be "newer" than letters. This is for consistency
-with `RPM <https://bugzilla.redhat.com/show_bug.cgi?id=50977>`_.
-
-Spack versions may also be arbitrary non-numeric strings; any string
-here will suffice; for example, ``@develop``, ``@master``, ``@local``.
-The following rules determine the sort order of numeric
-vs. non-numeric versions:
-
-#. The non-numeric versions ``@develop`` is considered greatest (newest).
-
-#. Numeric versions are all less than ``@develop`` version, and are
- sorted numerically.
-
-#. All other non-numeric versions are less than numeric versions, and
- are sorted alphabetically.
-
-The logic behind this sort order is two-fold:
-
-#. Non-numeric versions are usually used for special cases while
- developing or debugging a piece of software. Keeping most of them
- less than numeric versions ensures that Spack choose numeric
- versions by default whenever possible.
-
-#. The most-recent development version of a package will usually be
- newer than any released numeric versions. This allows the
- ``develop`` version to satisfy dependencies like ``depends_on(abc,
- when="@x.y.z:")``
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Concretization Version Selection
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-When concretizing, many versions might match a user-supplied spec.
-For example, the spec ``python`` matches all available versions of the
-package ``python``. Similarly, ``python@3:`` matches all versions of
-Python3. Given a set of versions that match a spec, Spack
-concretization uses the following priorities to decide which one to
-use:
+---------------------
+Versions and fetching
+---------------------
-#. If the user provided a list of versions in ``packages.yaml``, the
- first matching version in that list will be used.
+The most straightforward way to add new versions to your package is to
+add a line like this in the package class:
-#. If one or more versions is specified as ``preferred=True``, in
- either ``packages.yaml`` or ``package.py``, the largest matching
- version will be used. ("Latest" is defined by the sort order
- above).
+.. code-block:: python
+ :linenos:
-#. If no preferences in particular are specified in the package or in
- ``packages.yaml``, then the largest matching non-develop version
- will be used. By avoiding ``@develop``, this prevents users from
- accidentally installing a ``@develop`` version.
+ class Foo(Package):
+ url = 'http://example.com/foo-1.0.tar.gz'
+ version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
+ ...
-#. If all else fails and ``@develop`` is the only matching version, it
- will be used.
+Versions should be listed with the newest version first.
^^^^^^^^^^^^^
Date Versions
@@ -484,24 +436,6 @@ Alternately, you might use a hybrid release-version / date scheme.
For example, ``@1.3.2016.08.31`` would mean the version from the
``1.3`` branch, as of August 31, 2016.
-
--------------------
-Adding new versions
--------------------
-
-The most straightforward way to add new versions to your package is to
-add a line like this in the package class:
-
-.. code-block:: python
- :linenos:
-
- class Foo(Package):
- url = 'http://example.com/foo-1.0.tar.gz'
- version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
- ...
-
-Versions should be listed with the newest version first.
-
^^^^^^^^^^^^
Version URLs
^^^^^^^^^^^^
@@ -509,26 +443,31 @@ Version URLs
By default, each version's URL is extrapolated from the ``url`` field
in the package. For example, Spack is smart enough to download
version ``8.2.1.`` of the ``Foo`` package above from
-``http://example.com/foo-8.2.1.tar.gz``.
+http://example.com/foo-8.2.1.tar.gz.
If the URL is particularly complicated or changes based on the release,
you can override the default URL generation algorithm by defining your
-own ``url_for_version()`` function. For example, the developers of HDF5
-keep changing the archive layout, so the ``url_for_version()`` function
-looks like:
+own ``url_for_version()`` function. For example, the download URL for
+OpenMPI contains the major.minor version in one spot and the
+major.minor.patch version in another:
+
+https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.1.tar.bz2
-.. literalinclude:: ../../../var/spack/repos/builtin/packages/hdf5/package.py
- :pyobject: Hdf5.url_for_version
+In order to handle this, you can define a ``url_for_version()`` function
+like so:
-With the use of this ``url_for_version()``, Spack knows to download HDF5 ``1.8.16``
-from ``http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.16/src/hdf5-1.8.16.tar.gz``
-but download HDF5 ``1.10.0`` from ``http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.0/src/hdf5-1.10.0.tar.gz``.
+.. literalinclude:: ../../../var/spack/repos/builtin/packages/openmpi/package.py
+ :pyobject: Openmpi.url_for_version
-You'll notice that HDF5's ``url_for_version()`` function makes use of a special
+With the use of this ``url_for_version()``, Spack knows to download OpenMPI ``2.1.1``
+from http://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.1.tar.bz2
+but download OpenMPI ``1.10.7`` from http://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.7.tar.bz2.
+
+You'll notice that OpenMPI's ``url_for_version()`` function makes use of a special
``Version`` function called ``up_to()``. When you call ``version.up_to(2)`` on a
version like ``1.10.0``, it returns ``1.10``. ``version.up_to(1)`` would return
``1``. This can be very useful for packages that place all ``X.Y.*`` versions in
-a single directory and then places all ``X.Y.Z`` versions in a subdirectory.
+a single directory and then places all ``X.Y.Z`` versions in a sub-directory.
There are a few ``Version`` properties you should be aware of. We generally
prefer numeric versions to be separated by dots for uniformity, but not all
@@ -551,6 +490,21 @@ version.joined 123
Python properties don't need parentheses. ``version.dashed`` is correct.
``version.dashed()`` is incorrect.
+In addition, these version properties can be combined with ``up_to()``.
+For example:
+
+.. code-block:: python
+
+ >>> version = Version('1.2.3')
+ >>> version.up_to(2).dashed
+ Version('1-2')
+ >>> version.underscored.up_to(2)
+ Version('1_2')
+
+
+As you can see, order is not important. Just keep in mind that ``up_to()`` and
+the other version properties return ``Version`` objects, not strings.
+
If a URL cannot be derived systematically, or there is a special URL for one
of its versions, you can add an explicit URL for a particular version:
@@ -559,20 +513,48 @@ of its versions, you can add an explicit URL for a particular version:
version('8.2.1', '4136d7b4c04df68b686570afa26988ac',
url='http://example.com/foo-8.2.1-special-version.tar.gz')
-This is common for Python packages that download from PyPi. Since newer
-download URLs often contain a unique hash for each version, there is no
-way to guess the URL systematically.
When you supply a custom URL for a version, Spack uses that URL
*verbatim* and does not perform extrapolation.
+^^^^^^^^^^^^^^^^^^^^^
+PyPI and version URLs
+^^^^^^^^^^^^^^^^^^^^^
+
+In addition to their developer websites, many python packages are hosted at the
+`Python Package Index (PyPi) <https://pypi.python.org/pypi>`_. Although links to
+these individual files are typically `generated using a hash
+<https://bitbucket.org/pypa/pypi/issues/438>`_ it is often possible to find a
+reliable link of the format
+
+.. code-block:: sh
+
+ https://pypi.python.org/packages/source/<first letter of package>/<package>/<package>-<version>.<extension>
+
+Packages hosted on GitHub and the like are often developer versions that do not
+contain all of the files (e.g. configuration scripts) necessary to support
+compilation. For this reason it is ideal to link to a repository such as PyPi
+if possible.
+
+More recently, sources are being indexed at `pypi.io <https://pypi.io>`_ as
+well. Links obtained from this site follow a similar pattern, namely
+
+.. code-block:: sh
+
+ https://pypi.io/packages/source/<first letter of package>/<package>/<package>-<version>.<extension>
+
+These links currently redirect back to `pypi.python.org
+<https://pypi.python.org>`_, but this `may change in the future
+<https://bitbucket.org/pypa/pypi/issues/438#comment-27243225>`_.
+
+
^^^^^^^^^^^^^^^^^^^^^^^^
Skipping the expand step
^^^^^^^^^^^^^^^^^^^^^^^^
-Spack normally expands archives automatically after downloading
-them. If you want to skip this step (e.g., for self-extracting
-executables and other custom archive types), you can add
+Spack normally expands archives (e.g. `*.tar.gz` and `*.zip`) automatically
+after downloading them. If you want to skip this step (e.g., for
+self-extracting executables and other custom archive types), you can add
``expand=False`` to a ``version`` directive.
.. code-block:: python
@@ -596,6 +578,79 @@ it executable, then runs it with some arguments.
installer = Executable(self.stage.archive_file)
installer('--prefix=%s' % prefix, 'arg1', 'arg2', 'etc.')
+^^^^^^^^^^^^^^^^
+Download caching
+^^^^^^^^^^^^^^^^
+
+Spack maintains a cache (described :ref:`here <caching>`) which saves files
+retrieved during package installations to avoid re-downloading in the case that
+a package is installed with a different specification (but the same version) or
+reinstalled on account of a change in the hashing scheme.
+
+^^^^^^^^^^^^^^^^^^
+Version comparison
+^^^^^^^^^^^^^^^^^^
+
+Most Spack versions are numeric, a tuple of integers; for example,
+``apex@0.1``, ``ferret@6.96`` or ``py-netcdf@1.2.3.1``. Spack knows
+how to compare and sort numeric versions.
+
+Some Spack versions involve slight extensions of numeric syntax; for
+example, ``py-sphinx-rtd-theme@0.1.10a0``. In this case, numbers are
+always considered to be "newer" than letters. This is for consistency
+with `RPM <https://bugzilla.redhat.com/show_bug.cgi?id=50977>`_.
+
+Spack versions may also be arbitrary non-numeric strings; any string
+here will suffice; for example, ``@develop``, ``@master``, ``@local``.
+The following rules determine the sort order of numeric
+vs. non-numeric versions:
+
+#. The non-numeric versions ``@develop`` is considered greatest (newest).
+
+#. Numeric versions are all less than ``@develop`` version, and are
+ sorted numerically.
+
+#. All other non-numeric versions are less than numeric versions, and
+ are sorted alphabetically.
+
+The logic behind this sort order is two-fold:
+
+#. Non-numeric versions are usually used for special cases while
+ developing or debugging a piece of software. Keeping most of them
+ less than numeric versions ensures that Spack choose numeric
+ versions by default whenever possible.
+
+#. The most-recent development version of a package will usually be
+ newer than any released numeric versions. This allows the
+ ``develop`` version to satisfy dependencies like ``depends_on(abc,
+ when="@x.y.z:")``
+
+^^^^^^^^^^^^^^^^^
+Version selection
+^^^^^^^^^^^^^^^^^
+
+When concretizing, many versions might match a user-supplied spec.
+For example, the spec ``python`` matches all available versions of the
+package ``python``. Similarly, ``python@3:`` matches all versions of
+Python3. Given a set of versions that match a spec, Spack
+concretization uses the following priorities to decide which one to
+use:
+
+#. If the user provided a list of versions in ``packages.yaml``, the
+ first matching version in that list will be used.
+
+#. If one or more versions is specified as ``preferred=True``, in
+ either ``packages.yaml`` or ``package.py``, the largest matching
+ version will be used. ("Latest" is defined by the sort order
+ above).
+
+#. If no preferences in particular are specified in the package or in
+ ``packages.yaml``, then the largest matching non-develop version
+ will be used. By avoiding ``@develop``, this prevents users from
+ accidentally installing a ``@develop`` version.
+
+#. If all else fails and ``@develop`` is the only matching version, it
+ will be used.
^^^^^^^^^^^^^
``spack md5``
@@ -674,8 +729,8 @@ is at ``http://example.com/downloads/foo-1.0.tar.gz``, Spack will look
in ``http://example.com/downloads/`` for links to additional versions.
If you need to search another path for download links, you can supply
some extra attributes that control how your package finds new
-versions. See the documentation on `attribute_list_url`_ and
-`attribute_list_depth`_.
+versions. See the documentation on :ref:`attribute_list_url` and
+:ref:`attribute_list_depth`.
.. note::
@@ -690,12 +745,108 @@ versions. See the documentation on `attribute_list_url`_ and
syntax errors, or the ``import`` will fail. Use this once you've
got your package in working order.
+--------------------
+Finding new versions
+--------------------
+
+You've already seen the ``homepage`` and ``url`` package attributes:
+
+.. code-block:: python
+ :linenos:
+
+ from spack import *
+
+
+ class Mpich(Package):
+ """MPICH is a high performance and widely portable implementation of
+ the Message Passing Interface (MPI) standard."""
+ homepage = "http://www.mpich.org"
+ url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
+
+These are class-level attributes used by Spack to show users
+information about the package, and to determine where to download its
+source code.
+
+Spack uses the tarball URL to extrapolate where to find other tarballs
+of the same package (e.g. in :ref:`cmd-spack-checksum`, but
+this does not always work. This section covers ways you can tell
+Spack to find tarballs elsewhere.
+
+.. _attribute_list_url:
+
+^^^^^^^^^^^^
+``list_url``
+^^^^^^^^^^^^
+
+When spack tries to find available versions of packages (e.g. with
+:ref:`cmd-spack-checksum`), it spiders the parent directory
+of the tarball in the ``url`` attribute. For example, for libelf, the
+url is:
+
+.. code-block:: python
+
+ url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
+
+Here, Spack spiders ``http://www.mr511.de/software/`` to find similar
+tarball links and ultimately to make a list of available versions of
+``libelf``.
+
+For many packages, the tarball's parent directory may be unlistable,
+or it may not contain any links to source code archives. In fact,
+many times additional package downloads aren't even available in the
+same directory as the download URL.
+
+For these, you can specify a separate ``list_url`` indicating the page
+to search for tarballs. For example, ``libdwarf`` has the homepage as
+the ``list_url``, because that is where links to old versions are:
+
+.. code-block:: python
+ :linenos:
+
+ class Libdwarf(Package):
+ homepage = "http://www.prevanders.net/dwarf.html"
+ url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
+ list_url = homepage
+
+.. _attribute_list_depth:
+
+^^^^^^^^^^^^^^
+``list_depth``
+^^^^^^^^^^^^^^
+
+``libdwarf`` and many other packages have a listing of available
+versions on a single webpage, but not all do. For example, ``mpich``
+has a tarball URL that looks like this:
+
+.. code-block:: python
+
+ url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
+
+But its downloads are in many different subdirectories of
+``http://www.mpich.org/static/downloads/``. So, we need to add a
+``list_url`` *and* a ``list_depth`` attribute:
+
+.. code-block:: python
+ :linenos:
+
+ class Mpich(Package):
+ homepage = "http://www.mpich.org"
+ url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
+ list_url = "http://www.mpich.org/static/downloads/"
+ list_depth = 2
+
+By default, Spack only looks at the top-level page available at
+``list_url``. ``list_depth`` tells it to follow up to 2 levels of
+links from the top-level page. Note that here, this implies two
+levels of subdirectories, as the ``mpich`` website is structured much
+like a filesystem. But ``list_depth`` really refers to link depth
+when spidering the page.
.. _vcs-fetch:
-------------------------------
-Fetching from VCS repositories
-------------------------------
+-------------------------------
+Fetching from code repositories
+-------------------------------
For some packages, source code is provided in a Version Control System
(VCS) repository rather than in a tarball. Spack can fetch packages
@@ -720,7 +871,7 @@ Git fetching is enabled with the following parameters to ``version``:
* ``tag``: name of a tag to fetch.
* ``branch``: name of a branch to fetch.
* ``commit``: SHA hash (or prefix) of a commit to fetch.
-* ``submodules``: Also fetch submodules when checking out this repository.
+* ``submodules``: Also fetch submodules recursively when checking out this repository.
Only one of ``tag``, ``branch``, or ``commit`` can be used at a time.
@@ -783,19 +934,20 @@ Commits
Submodules
You can supply ``submodules=True`` to cause Spack to fetch submodules
- along with the repository at fetch time.
+ recursively along with the repository at fetch time. For more information
+ about git submodules see the manpage of git: ``man git-submodule``.
.. code-block:: python
version('1.0.1', git='https://github.com/example-project/example.git',
- tag='v1.0.1', submdoules=True)
+ tag='v1.0.1', submodules=True)
.. _github-fetch:
-""""""
+^^^^^^
GitHub
-""""""
+^^^^^^
If a project is hosted on GitHub, *any* valid Git branch, tag or hash
may be downloaded as a tarball. This is accomplished simply by
@@ -875,38 +1027,8 @@ Fetching a revision
Subversion branches are handled as part of the directory structure, so
you can check out a branch or tag by changing the ``url``.
------------------------------------------
-Standard repositories for python packages
------------------------------------------
-
-In addition to their developer websites, many python packages are hosted at the
-`Python Package Index (PyPi) <https://pypi.python.org/pypi>`_. Although links to
-these individual files are typically `generated using a hash
-<https://bitbucket.org/pypa/pypi/issues/438>`_ it is often possible to find a
-reliable link of the format
-
-.. code-block:: sh
-
- https://pypi.python.org/packages/source/<first letter of package>/<package>/<package>-<version>.<extension>
-
-Packages hosted on GitHub and the like are often developer versions that do not
-contain all of the files (e.g. configuration scripts) necessary to support
-compilation. For this reason it is ideal to link to a repository such as PyPi
-if possible.
-
-More recently, sources are being indexed at `pypi.io <https://pypi.io>`_ as
-well. Links obtained from this site follow a similar pattern, namely
-
-.. code-block:: sh
-
- https://pypi.io/packages/source/<first letter of package>/<package>/<package>-<version>.<extension>
-
-These links currently redirect back to `pypi.python.org
-<https://pypi.python.org>`_, but this `may change in the future
-<https://bitbucket.org/pypa/pypi/issues/438#comment-27243225>`_.
-
-------------------------------------------------
-Expanding additional resources in the source tree
+Resources (expanding extra tarballs)
-------------------------------------------------
Some packages (most notably compilers) provide optional features if additional
@@ -926,15 +1048,6 @@ Based on the keywords present among the arguments the appropriate ``FetchStrateg
will be used for the resource. The keyword ``destination`` is relative to the source
root of the package and should point to where the resource is to be expanded.
-------------------------------------------------------
-Automatic caching of files fetched during installation
-------------------------------------------------------
-
-Spack maintains a cache (described :ref:`here <caching>`) which saves files
-retrieved during package installations to avoid re-downloading in the case that
-a package is installed with a different specification (but the same version) or
-reinstalled on account of a change in the hashing scheme.
-
.. _license:
-----------------
@@ -1099,19 +1212,47 @@ structure like this:
package.py
ad_lustre_rwcontig_open_source.patch
-If you supply a URL instead of a filename, the patch will be fetched
-from the URL and then applied to your source code.
+If you supply a URL instead of a filename, you need to supply a
+``sha256`` checksum, like this:
-.. warning::
+.. code-block:: python
+
+ patch('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch',
+ sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866')
+
+Spack includes the hashes of patches in its versioning information, so
+that the same package with different patches applied will have different
+hash identifiers. To ensure that the hashing scheme is consistent, you
+must use a ``sha256`` checksum for the patch. Patches will be fetched
+from their URLs, checked, and applied to your source code. You can use
+the ``spack sha256`` command to generate a checksum for a patch file or
+URL.
+
+Spack can also handle compressed patches. If you use these, Spack needs
+a little more help. Specifically, it needs *two* checksums: the
+``sha256`` of the patch and ``archive_sha256`` for the compressed
+archive. ``archive_sha256`` helps Spack ensure that the downloaded
+file is not corrupted or malicious, before running it through a tool like
+``tar`` or ``zip``. The ``sha256`` of the patch is still required so
+that it can be included in specs. Providing it in the package file
+ensures that Spack won't have to download and decompress patches it won't
+end up using at install time. Both the archive and patch checksum are
+checked when patch archives are downloaded.
+
+.. code-block:: python
+
+ patch('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch.gz',
+ sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
+ archive_sha256='4e8092a161ec6c3a1b5253176fcf33ce7ba23ee2ff27c75dbced589dabacd06e')
+
+``patch`` keyword arguments are described below.
- It is generally better to use a filename rather than a URL for your
- patch. Patches fetched from URLs are not currently checksummed,
- and adding checksums for them is tedious for the package builder.
- File patches go into the spack repository, which gives you git's
- integrity guarantees. URL patches may be removed in a future spack
- version.
+""""""""""""""""""""""""""""""
+``sha256``, ``archive_sha256``
+""""""""""""""""""""""""""""""
-``patch`` can take two options keyword arguments. They are:
+Hashes of downloaded patch and compressed archive, respectively. Only
+needed for patches fetched from URLs.
""""""""
``when``
@@ -1163,6 +1304,36 @@ It's generally easier to just structure your patch file so that it
applies cleanly with ``-p1``, but if you're using a patch you didn't
create yourself, ``level`` can be handy.
+"""""""""""""""
+``working_dir``
+"""""""""""""""
+
+This tells spack where to run the ``patch`` command. By default,
+the working directory is the source path of the stage (``.``).
+However, sometimes patches are made with respect to a subdirectory
+and this is where the working directory comes in handy. Internally,
+the working directory is given to ``patch`` via the ``-d`` option.
+Let's take the example patch from above and assume for some reason,
+it can only be downloaded in the following form:
+
+.. code-block:: diff
+ :linenos:
+
+ --- a/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 12:05:44.806417000 -0800
+ +++ b/romio/adio/ad_lustre/ad_lustre_rwcontig.c 2013-12-10 11:53:03.295622000 -0800
+ @@ -8,7 +8,7 @@
+ * Copyright (C) 2008 Sun Microsystems, Lustre group
+ \*/
+
+ -#define _XOPEN_SOURCE 600
+ +//#define _XOPEN_SOURCE 600
+ #include <stdlib.h>
+ #include <malloc.h>
+ #include "ad_lustre.h"
+
+Hence, the patch needs to applied in the ``src/mpi`` subdirectory, and the
+``working_dir='src/mpi'`` option would exactly do that.
+
^^^^^^^^^^^^^^^^^^^^^
Patch functions
^^^^^^^^^^^^^^^^^^^^^
@@ -1188,6 +1359,21 @@ if you run install, hit ctrl-C, and run install again, the code in the
patch function is only run once. Also, you can tell Spack to run only
the patching part of the build using the :ref:`cmd-spack-patch` command.
+.. _patch_dependency_patching:
+
+^^^^^^^^^^^^^^^^^^^
+Dependency patching
+^^^^^^^^^^^^^^^^^^^
+
+So far we've covered how the ``patch`` directive can be used by a package
+to patch *its own* source code. Packages can *also* specify patches to be
+applied to their dependencies, if they require special modifications. As
+with all packages in Spack, a patched dependency library can coexist with
+other versions of that library. See the `section on depends_on
+<dependency_dependency_patching_>`_ for more details.
+
+.. _handling_rpaths:
+
---------------
Handling RPATHs
---------------
@@ -1234,103 +1420,6 @@ RPATHs in Spack are handled in one of three ways:
links. You can see this how this is used in the :ref:`PySide
example <pyside-patch>` above.
---------------------
-Finding new versions
---------------------
-
-You've already seen the ``homepage`` and ``url`` package attributes:
-
-.. code-block:: python
- :linenos:
-
- from spack import *
-
-
- class Mpich(Package):
- """MPICH is a high performance and widely portable implementation of
- the Message Passing Interface (MPI) standard."""
- homepage = "http://www.mpich.org"
- url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
-
-These are class-level attributes used by Spack to show users
-information about the package, and to determine where to download its
-source code.
-
-Spack uses the tarball URL to extrapolate where to find other tarballs
-of the same package (e.g. in :ref:`cmd-spack-checksum`, but
-this does not always work. This section covers ways you can tell
-Spack to find tarballs elsewhere.
-
-.. _attribute_list_url:
-
-^^^^^^^^^^^^
-``list_url``
-^^^^^^^^^^^^
-
-When spack tries to find available versions of packages (e.g. with
-:ref:`cmd-spack-checksum`), it spiders the parent directory
-of the tarball in the ``url`` attribute. For example, for libelf, the
-url is:
-
-.. code-block:: python
-
- url = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
-
-Here, Spack spiders ``http://www.mr511.de/software/`` to find similar
-tarball links and ultimately to make a list of available versions of
-``libelf``.
-
-For many packages, the tarball's parent directory may be unlistable,
-or it may not contain any links to source code archives. In fact,
-many times additional package downloads aren't even available in the
-same directory as the download URL.
-
-For these, you can specify a separate ``list_url`` indicating the page
-to search for tarballs. For example, ``libdwarf`` has the homepage as
-the ``list_url``, because that is where links to old versions are:
-
-.. code-block:: python
- :linenos:
-
- class Libdwarf(Package):
- homepage = "http://www.prevanders.net/dwarf.html"
- url = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
- list_url = homepage
-
-.. _attribute_list_depth:
-
-^^^^^^^^^^^^^^
-``list_depth``
-^^^^^^^^^^^^^^
-
-``libdwarf`` and many other packages have a listing of available
-versions on a single webpage, but not all do. For example, ``mpich``
-has a tarball URL that looks like this:
-
-.. code-block:: python
-
- url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
-
-But its downloads are in many different subdirectories of
-``http://www.mpich.org/static/downloads/``. So, we need to add a
-``list_url`` *and* a ``list_depth`` attribute:
-
-.. code-block:: python
- :linenos:
-
- class Mpich(Package):
- homepage = "http://www.mpich.org"
- url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
- list_url = "http://www.mpich.org/static/downloads/"
- list_depth = 2
-
-By default, Spack only looks at the top-level page available at
-``list_url``. ``list_depth`` tells it to follow up to 2 levels of
-links from the top-level page. Note that here, this implies two
-levels of subdirectories, as the ``mpich`` website is structured much
-like a filesystem. But ``list_depth`` really refers to link depth
-when spidering the page.
-
.. _attribute_parallel:
---------------
@@ -1432,75 +1521,201 @@ so you can rely on it for your libdwarf build.
Dependency specs
^^^^^^^^^^^^^^^^
-``depends_on`` doesn't just take the name of another package. It
-takes a full spec. This means that you can restrict the versions or
+``depends_on`` doesn't just take the name of another package. It can
+take a full spec as well. This means that you can restrict the versions or
other configuration options of ``libelf`` that ``libdwarf`` will build
-with. Here's an example. Suppose that in the ``libdwarf`` package
-you write:
-
-.. code-block:: python
-
- depends_on("libelf@0.8:")
-
-Now ``libdwarf`` will require a version of ``libelf`` version ``0.8``
-or higher in order to build. If some versions of ``libelf`` are
-installed but they are all older than this, then Spack will build a
-new version of ``libelf`` that satisfies the spec's version
-constraint, and it will build ``libdwarf`` with that one. You could
-just as easily provide a version range:
+with. For example, suppose that in the ``libdwarf`` package you write:
.. code-block:: python
- depends_on("libelf@0.8.2:0.8.4:")
+ depends_on('libelf@0.8')
-Or a requirement for a particular variant or compiler flags:
+Now ``libdwarf`` will require ``libelf`` at *exactly* version ``0.8``.
+You can also specify a requirement for a particular variant or for
+specific compiler flags:
.. code-block:: python
- depends_on("libelf@0.8+debug")
+ depends_on('libelf@0.8+debug')
depends_on('libelf debug=True')
depends_on('libelf cppflags="-fPIC"')
Both users *and* package authors can use the same spec syntax to refer
-to different package configurations. Users use the spec syntax on the
+to different package configurations. Users use the spec syntax on the
command line to find installed packages or to install packages with
particular constraints, and package authors can use specs to describe
relationships between packages.
-Additionally, dependencies may be specified for specific use cases:
+^^^^^^^^^^^^^^
+Version ranges
+^^^^^^^^^^^^^^
+
+Although some packages require a specific version for their dependencies,
+most can be built with a range of version. For example, if you are
+writing a package for a legacy Python module that only works with Python
+2.4 through 2.6, this would look like:
+
+.. code-block:: python
+
+ depends_on('python@2.4:2.6')
+
+Version ranges in Spack are *inclusive*, so ``2.4:2.6`` means any version
+greater than or equal to ``2.4`` and up to and including ``2.6``. If you
+want to specify that a package works with any version of Python 3, this
+would look like:
+
+.. code-block:: python
+
+ depends_on('python@3:')
+
+Here we leave out the upper bound. If you want to say that a package
+requires Python 2, you can similarly leave out the lower bound:
+
+.. code-block:: python
+
+ depends_on('python@:2.9')
+
+Notice that we didn't use ``@:3``. Version ranges are *inclusive*, so
+``@:3`` means "up to and including 3".
+
+What if a package can only be built with Python 2.6? You might be
+inclined to use:
+
+.. code-block:: python
+
+ depends_on('python@2.6')
+
+However, this would be wrong. Spack assumes that all version constraints
+are absolute, so it would try to install Python at exactly ``2.6``. The
+correct way to specify this would be:
+
+.. code-block:: python
+
+ depends_on('python@2.6.0:2.6.999')
+
+
+^^^^^^^^^^^^^^^^
+Dependency types
+^^^^^^^^^^^^^^^^
+
+Not all dependencies are created equal, and Spack allows you to specify
+exactly what kind of a dependency you need. For example:
+
+.. code-block:: python
+
+ depends_on('cmake', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('libelf', type=('build', 'link'))
+
+The following dependency types are available:
+
+* **"build"**: made available during the project's build. The package will
+ be added to ``PATH``, the compiler include paths, and ``PYTHONPATH``.
+ Other projects which depend on this one will not have these modified
+ (building project X doesn't need project Y's build dependencies).
+* **"link"**: the project is linked to by the project. The package will be
+ added to the current package's ``rpath``.
+* **"run"**: the project is used by the project at runtime. The package will
+ be added to ``PATH`` and ``PYTHONPATH``.
+
+One of the advantages of the ``build`` dependency type is that although the
+dependency needs to be installed in order for the package to be built, it
+can be uninstalled without concern afterwards. ``link`` and ``run`` disallow
+this because uninstalling the dependency would break the package.
+
+If the dependency type is not specified, Spack uses a default of
+``('build', 'link')``. This is the common case for compiler languages.
+Non-compiled packages like Python modules commonly use
+``('build', 'run')``. This means that the compiler wrappers don't need to
+inject the dependency's ``prefix/lib`` directory, but the package needs to
+be in ``PATH`` and ``PYTHONPATH`` during the build process and later when
+a user wants to run the package.
+
+.. _dependency_dependency_patching:
+
+^^^^^^^^^^^^^^^^^^^
+Dependency patching
+^^^^^^^^^^^^^^^^^^^
+
+Some packages maintain special patches on their dependencies, either to
+add new features or to fix bugs. This typically makes a package harder
+to maintain, and we encourage developers to upstream (contribute back)
+their changes rather than maintaining patches. However, in some cases
+it's not possible to upstream. Maybe the dependency's developers don't
+accept changes, or maybe they just haven't had time to integrate them.
+
+For times like these, Spack's ``depends_on`` directive can optionally
+take a patch or list of patches:
.. code-block:: python
- depends_on("cmake", type="build")
- depends_on("libelf", type=("build", "link"))
- depends_on("python", type="run")
+ class SpecialTool(Package):
+ ...
+ depends_on('binutils', patches='special-binutils-feature.patch')
+ ...
-The dependency types are:
+Here, the ``special-tool`` package requires a special feature in
+``binutils``, so it provides an extra ``patches=<filename>`` keyword
+argument. This is similar to the `patch directive <patching_>`_, with
+one small difference. Here, ``special-tool`` is responsible for the
+patch, so it should live in ``special-tool``'s directory in the package
+repository, not the ``binutils`` directory.
- * **"build"**: made available during the project's build. The package will
- be added to ``PATH``, the compiler include paths, and ``PYTHONPATH``.
- Other projects which depend on this one will not have these modified
- (building project X doesn't need project Y's build dependencies).
- * **"link"**: the project is linked to by the project. The package will be
- added to the current package's ``rpath``.
- * **"run"**: the project is used by the project at runtime. The package will
- be added to ``PATH`` and ``PYTHONPATH``.
+If you need something more sophisticated than this, you can simply nest a
+``patch()`` directive inside of ``depends_on``:
-Additional hybrid dependency types are (note the lack of quotes):
+.. code-block:: python
+
+ class SpecialTool(Package):
+ ...
+ depends_on(
+ 'binutils',
+ patches=patch('special-binutils-feature.patch',
+ level=3,
+ when='@:1.3'), # condition on binutils
+ when='@2.0:') # condition on special-tool
+ ...
+
+Note that there are two optional ``when`` conditions here -- one on the
+``patch`` directive and the other on ``depends_on``. The condition in
+the ``patch`` directive applies to ``binutils`` (the package being
+patched), while the condition in ``depends_on`` applies to
+``special-tool``. See `patch directive <patching_>`_ for details on all
+the arguments the ``patch`` directive can take.
+
+Finally, if you need *multiple* patches on a dependency, you can provide
+a list for ``patches``, e.g.:
- * **<not specified>**: ``type`` assumed to be ``("build",
- "link")``. This is the common case for compiled language usage.
-
-"""""""""""""""""""
-Dependency Formulas
-"""""""""""""""""""
+.. code-block:: python
-This section shows how to write appropriate ``depends_on()``
-declarations for some common cases.
+ class SpecialTool(Package):
+ ...
+ depends_on(
+ 'binutils',
+ patches=[
+ 'binutils-bugfix1.patch',
+ 'binutils-bugfix2.patch',
+ patch('https://example.com/special-binutils-feature.patch',
+ sha256='252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
+ when='@:1.3')],
+ when='@2.0:')
+ ...
+
+As with ``patch`` directives, patches are applied in the order they
+appear in the package file (or in this case, in the list).
-* Python 2 only: ``depends_on('python@:2.8')``
-* Python 2.7 only: ``depends_on('python@2.7:2.8')``
-* Python 3 only: ``depends_on('python@3:')``
+.. note::
+
+ You may wonder whether dependency patching will interfere with other
+ packages that depend on ``binutils``. It won't.
+
+ As described in patching_, Patching a package adds the ``sha256`` of
+ the patch to the package's spec, which means it will have a
+ *different* unique hash than other versions without the patch. The
+ patched version coexists with unpatched versions, and Spack's support
+ for handling_rpaths_ guarantees that each installation finds the
+ right version. If two packages depend on ``binutils`` patched *the
+ same* way, they can both use a single installation of ``binutils``.
.. _setup-dependent-environment:
@@ -1517,23 +1732,23 @@ properties to be used by dependents.
The function declaration should look like this:
-.. code-block:: python
-
- class Qt(Package):
- ...
- def setup_dependent_environment(self, module, spec, dep_spec):
- """Dependencies of Qt find it using the QTDIR environment variable."""
- os.environ['QTDIR'] = self.prefix
+.. literalinclude:: ../../../var/spack/repos/builtin/packages/qt/package.py
+ :pyobject: Qt.setup_dependent_environment
+ :linenos:
Here, the Qt package sets the ``QTDIR`` environment variable so that
packages that depend on a particular Qt installation will find it.
The arguments to this function are:
-* **module**: the module of the dependent package, where global
- properties can be assigned.
-* **spec**: the spec of the *dependency package* (the one the function is called on).
-* **dep_spec**: the spec of the dependent package (i.e. dep_spec depends on spec).
+* **spack_env**: List of environment modifications to be applied when
+ the dependent package is built within Spack.
+* **run_env**: List of environment modifications to be applied when
+ the dependent package is run outside of Spack. These are added to the
+ resulting module file.
+* **dependent_spec**: The spec of the dependent package about to be
+ built. This allows the extendee (self) to query the dependent's state.
+ Note that *this* package's spec is available as ``self.spec``.
A good example of using these is in the Python package:
@@ -1554,6 +1769,28 @@ Python's ``setup_dependent_environment`` method also sets up some
other variables, creates a directory, and sets up the ``PYTHONPATH``
so that dependent packages can find their dependencies at build time.
+.. _packaging_conflicts:
+
+---------
+Conflicts
+---------
+
+Sometimes packages have known bugs, or limitations, that would prevent them
+to build e.g. against other dependencies or with certain compilers. Spack
+makes it possible to express such constraints with the ``conflicts`` directive.
+
+Adding the following to a package:
+
+.. code-block:: python
+
+ conflicts('%intel', when='@1.2')
+
+we express the fact that the current package *cannot be built* with the Intel
+compiler when we are trying to install version "1.2". The ``when`` argument can
+be omitted, in which case the conflict will always be active.
+Conflicts are always evaluated after the concretization step has been performed,
+and if any match is found a detailed error message is shown to the user.
+
.. _packaging_extensions:
----------
@@ -1960,7 +2197,7 @@ See the :ref:`concretization-preferences` section for more details.
.. _install-method:
------------------
-Inconsistent Specs
+Conflicting Specs
------------------
Suppose a user needs to install package C, which depends on packages A
@@ -1999,36 +2236,136 @@ the Python extensions provided by them: once for ``+python`` and once
for ``~python``. Other than using a little extra disk space, that
solution has no serious problems.
------------------------------------
-Implementing the ``install`` method
------------------------------------
+.. _installation_procedure:
-The last element of a package is its ``install()`` method. This is
+---------------------------------------
+Implementing the installation procedure
+---------------------------------------
+
+The last element of a package is its **installation procedure**. This is
where the real work of installation happens, and it's the main part of
the package you'll need to customize for each piece of software.
-.. literalinclude:: ../../../var/spack/repos/builtin/packages/mpfr/package.py
- :pyobject: Mpfr.install
- :linenos:
+Defining an installation procedure means overriding a set of methods or attributes
+that will be called at some point during the installation of the package.
+The package base class, usually specialized for a given build system, determines the
+actual set of entities available for overriding.
+The classes that are currently provided by Spack are:
+
+ +-------------------------------+----------------------------------+
+ | **Base Class** | **Purpose** |
+ +===============================+==================================+
+ | :py:class:`.Package` | General base class not |
+ | | specialized for any build system |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.MakefilePackage` | Specialized class for packages |
+ | | built invoking |
+ | | hand-written Makefiles |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.AutotoolsPackage` | Specialized class for packages |
+ | | built using GNU Autotools |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.CMakePackage` | Specialized class for packages |
+ | | built using CMake |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.QMakePackage` | Specialized class for packages |
+ | | build using QMake |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.SConsPackage` | Specialized class for packages |
+ | | built using SCons |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.WafPackage` | Specialized class for packages |
+ | | built using Waf |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.RPackage` | Specialized class for |
+ | | :py:class:`.R` extensions |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.PythonPackage` | Specialized class for |
+ | | :py:class:`.Python` extensions |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.PerlPackage` | Specialized class for |
+ | | :py:class:`.Perl` extensions |
+ +-------------------------------+----------------------------------+
+ | :py:class:`.IntelPackage` | Specialized class for licensed |
+ | | Intel software |
+ +-------------------------------+----------------------------------+
+
-``install`` takes a ``spec``: a description of how the package should
-be built, and a ``prefix``: the path to the directory where the
-software should be installed.
+.. note::
+ Choice of the appropriate base class for a package
+ In most cases packagers don't have to worry about the selection of the right base class
+ for a package, as ``spack create`` will make the appropriate choice on their behalf. In those
+ rare cases where manual intervention is needed we need to stress that a
+ package base class depends on the *build system* being used, not the language of the package.
+ For example, a Python extension installed with CMake would ``extends('python')`` and
+ subclass from :py:class:`.CMakePackage`.
+
+^^^^^^^^^^^^^^^^^^^^^
+Installation pipeline
+^^^^^^^^^^^^^^^^^^^^^
-Spack provides wrapper functions for ``configure`` and ``make`` so
-that you can call them in a similar way to how you'd call a shell
-command. In reality, these are Python functions. Spack provides
-these functions to make writing packages more natural. See the section
-on :ref:`shell wrappers <shell-wrappers>`.
+When a user runs ``spack install``, Spack:
-Now that the metadata is out of the way, we can move on to the
-``install()`` method. When a user runs ``spack install``, Spack
-fetches an archive for the correct version of the software, expands
-the archive, and sets the current working directory to the root
-directory of the expanded archive. It then instantiates a package
-object and calls the ``install()`` method.
+1. Fetches an archive for the correct version of the software.
+2. Expands the archive.
+3. Sets the current working directory to the root directory of the expanded archive.
+
+Then, depending on the base class of the package under consideration, it will execute
+a certain number of **phases** that reflect the way a package of that type is usually built.
+The name and order in which the phases will be executed can be obtained either reading the API
+docs at :py:mod:`~.spack.build_systems`, or using the ``spack info`` command:
+
+.. code-block:: console
+ :emphasize-lines: 13,14
-The ``install()`` signature looks like this:
+ $ spack info m4
+ AutotoolsPackage: m4
+ Homepage: https://www.gnu.org/software/m4/m4.html
+
+ Safe versions:
+ 1.4.17 ftp://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz
+
+ Variants:
+ Name Default Description
+
+ sigsegv on Build the libsigsegv dependency
+
+ Installation Phases:
+ autoreconf configure build install
+
+ Build Dependencies:
+ libsigsegv
+
+ ...
+
+
+Typically, phases have default implementations that fit most of the common cases:
+
+.. literalinclude:: ../../../lib/spack/spack/build_systems/autotools.py
+ :pyobject: AutotoolsPackage.configure
+ :linenos:
+
+It is thus just sufficient for a packager to override a few
+build system specific helper methods or attributes to provide, for instance,
+configure arguments:
+
+.. literalinclude:: ../../../var/spack/repos/builtin/packages/m4/package.py
+ :pyobject: M4.configure_args
+ :linenos:
+
+.. note::
+ Each specific build system has a list of attributes that can be overridden to
+ fine-tune the installation of a package without overriding an entire phase. To
+ have more information on them the place to go is the API docs of the :py:mod:`~.spack.build_systems`
+ module.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+Overriding an entire phase
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+In extreme cases it may be necessary to override an entire phase. Regardless
+of the build system, the signature is the same. For example, the signature
+for the install phase is:
.. code-block:: python
@@ -2036,8 +2373,6 @@ The ``install()`` signature looks like this:
def install(self, spec, prefix):
...
-The parameters are as follows:
-
``self``
For those not used to Python instance methods, this is the
package itself. In this case it's an instance of ``Foo``, which
@@ -2054,24 +2389,20 @@ The parameters are as follows:
targets into. It acts like a string, but it's actually its own
special type, :py:class:`Prefix <spack.util.prefix.Prefix>`.
-``spec`` and ``prefix`` are passed to ``install`` for convenience.
-``spec`` is also available as an attribute on the package
-(``self.spec``), and ``prefix`` is actually an attribute of ``spec``
-(``spec.prefix``).
+The arguments ``spec`` and ``prefix`` are passed only for convenience, as they always
+correspond to ``self.spec`` and ``self.spec.prefix`` respectively.
-As mentioned in :ref:`install-environment`, you will usually not need
-to refer to dependencies explicitly in your package file, as the
-compiler wrappers take care of most of the heavy lifting here. There
-will be times, though, when you need to refer to the install locations
-of dependencies, or when you need to do something different depending
-on the version, compiler, dependencies, etc. that your package is
-built with. These parameters give you access to this type of
-information.
+As mentioned in :ref:`install-environment`, you will usually not need to refer
+to dependencies explicitly in your package file, as the compiler wrappers take care of most of
+the heavy lifting here. There will be times, though, when you need to refer to
+the install locations of dependencies, or when you need to do something different
+depending on the version, compiler, dependencies, etc. that your package is
+built with. These parameters give you access to this type of information.
.. _install-environment:
-----------------------
-The install environment
+The build environment
-----------------------
In general, you should not have to do much differently in your install
@@ -2090,6 +2421,17 @@ The remainder of the section covers the way Spack's build environment
works.
^^^^^^^^^^^^^^^^^^^^^
+Forking ``install()``
+^^^^^^^^^^^^^^^^^^^^^
+
+To give packagers free reign over their install environment, Spack forks
+a new process each time it invokes a package's ``install()`` method.
+This allows packages to have a sandboxed build environment, without
+impacting the environments ofother jobs that the main Spack process runs.
+Packages are free to change the environment or to modify Spack internals,
+because each ``install()`` call has its own dedicated process.
+
+^^^^^^^^^^^^^^^^^^^^^
Environment variables
^^^^^^^^^^^^^^^^^^^^^
@@ -2110,6 +2452,10 @@ The Compiler environment variables that Spack sets are:
``FC`` Fortran 90 and above compiler
============ ===============================
+Spack sets these variables so that they point to *compiler
+wrappers*. These are covered in :ref:`their own section
+<compiler-wrappers>` below.
+
All of these are standard variables respected by most build systems.
If your project uses ``Autotools`` or ``CMake``, then it should pick
them up automatically when you run ``configure`` or ``cmake`` in the
@@ -2157,158 +2503,230 @@ if you want to run commands in that environment to test them out, you
can use the :ref:`cmd-spack-env` command, documented
below.
-.. _compiler-wrappers:
-
^^^^^^^^^^^^^^^^^^^^^
-Compiler interceptors
+Failing the build
^^^^^^^^^^^^^^^^^^^^^
-As mentioned, ``CC``, ``CXX``, ``F77``, and ``FC`` are set to point to
-Spack's compiler wrappers. These are simply called ``cc``, ``c++``,
-``f77``, and ``f90``, and they live in ``$SPACK_ROOT/lib/spack/env``.
-
-``$SPACK_ROOT/lib/spack/env`` is added first in the ``PATH``
-environment variable when ``install()`` runs so that system compilers
-are not picked up instead.
+Sometimes you don't want a package to successfully install unless some
+condition is true. You can explicitly cause the build to fail from
+``install()`` by raising an ``InstallError``, for example:
-All of these compiler wrappers point to a single compiler wrapper
-script that figures out which *real* compiler it should be building
-with. This comes either from spec `concretization
-<abstract-and-concrete>`_ or from a user explicitly asking for a
-particular compiler using, e.g., ``%intel`` on the command line.
+.. code-block:: python
-In addition to invoking the right compiler, the compiler wrappers add
-flags to the compile line so that dependencies can be easily found.
-These flags are added for each dependency, if they exist:
+ if spec.architecture.startswith('darwin'):
+ raise InstallError('This package does not build on Mac OS X!')
-Compile-time library search paths
-* ``-L$dep_prefix/lib``
-* ``-L$dep_prefix/lib64``
+.. _shell-wrappers:
-Runtime library search paths (RPATHs)
-* ``$rpath_flag$dep_prefix/lib``
-* ``$rpath_flag$dep_prefix/lib64``
+^^^^^^^^^^^^^^^^^^^^^^^
+Shell command functions
+^^^^^^^^^^^^^^^^^^^^^^^
-Include search paths
-* ``-I$dep_prefix/include``
+Recall the install method from ``libelf``:
-An example of this would be the ``libdwarf`` build, which has one
-dependency: ``libelf``. Every call to ``cc`` in the ``libdwarf``
-build will have ``-I$LIBELF_PREFIX/include``,
-``-L$LIBELF_PREFIX/lib``, and ``$rpath_flag$LIBELF_PREFIX/lib``
-inserted on the command line. This is done transparently to the
-project's build system, which will just think it's using a system
-where ``libelf`` is readily available. Because of this, you **do
-not** have to insert extra ``-I``, ``-L``, etc. on the command line.
+.. literalinclude:: ../../../var/spack/repos/builtin/packages/libelf/package.py
+ :pyobject: Libelf.install
+ :linenos:
-Another useful consequence of this is that you often do *not* have to
-add extra parameters on the ``configure`` line to get autotools to
-find dependencies. The ``libdwarf`` install method just calls
-configure like this:
+Normally in Python, you'd have to write something like this in order
+to execute shell commands:
.. code-block:: python
- configure("--prefix=" + prefix)
+ import subprocess
+ subprocess.check_call('configure', '--prefix={0}'.format(prefix))
-Because of the ``-L`` and ``-I`` arguments, configure will
-successfully find ``libdwarf.h`` and ``libdwarf.so``, without the
-packager having to provide ``--with-libdwarf=/path/to/libdwarf`` on
-the command line.
+We've tried to make this a bit easier by providing callable wrapper
+objects for some shell commands. By default, ``configure``,
+``cmake``, and ``make`` wrappers are are provided, so you can call
+them more naturally in your package files.
-.. note::
+If you need other commands, you can use ``which`` to get them:
- For most compilers, ``$rpath_flag`` is ``-Wl,-rpath,``. However, NAG
- passes its flags to GCC instead of passing them directly to the linker.
- Therefore, its ``$rpath_flag`` is doubly wrapped: ``-Wl,-Wl,,-rpath,``.
- ``$rpath_flag`` can be overriden on a compiler specific basis in
- ``lib/spack/spack/compilers/$compiler.py``.
+.. code-block:: python
-The compiler wrappers also pass the compiler flags specified by the user from
-the command line (``cflags``, ``cxxflags``, ``fflags``, ``cppflags``, ``ldflags``,
-and/or ``ldlibs``). They do not override the canonical autotools flags with the
-same names (but in ALL-CAPS) that may be passed into the build by particularly
-challenging package scripts.
+ sed = which('sed')
+ sed('s/foo/bar/', filename)
+
+The ``which`` function will search the ``PATH`` for the application.
+
+Callable wrappers also allow spack to provide some special features.
+For example, in Spack, ``make`` is parallel by default, and Spack
+figures out the number of cores on your machine and passes an
+appropriate value for ``-j<numjobs>`` when it calls ``make`` (see the
+``parallel`` `package attribute <attribute_parallel>`). In
+a package file, you can supply a keyword argument, ``parallel=False``,
+to the ``make`` wrapper to disable parallel make. In the ``libelf``
+package, this allows us to avoid race conditions in the library's
+build system.
^^^^^^^^^^^^^^
Compiler flags
^^^^^^^^^^^^^^
-In rare circumstances such as compiling and running small unit tests, a package
-developer may need to know what are the appropriate compiler flags to enable
-features like ``OpenMP``, ``c++11``, ``c++14`` and alike. To that end the
-compiler classes in ``spack`` implement the following **properties**:
-``openmp_flag``, ``cxx11_flag``, ``cxx14_flag``, which can be accessed in a
-package by ``self.compiler.cxx11_flag`` and alike. Note that the implementation
-is such that if a given compiler version does not support this feature, an
-error will be produced. Therefore package developers can also use these properties
-to assert that a compiler supports the requested feature. This is handy when a
-package supports additional variants like
+Compiler flags set by the user through the Spec object can be passed to
+the build in one of two ways. For packages inheriting from the
+``CmakePackage`` or ``AutotoolsPackage`` classes, the build environment
+passes those flags to the relevant environment variables (``CFLAGS``,
+``CXXFLAGS``, etc) that are respected by the build system. For all other
+packages, the default behavior is to inject the flags directly into the
+compiler commands using Spack's compiler wrappers.
+
+.. warning::
+
+ The flag handling methods described in this section are in beta.
+ The exact semantics are liable to change to improve usability.
+
+Individual packages can override the default behavior for the flag
+handling. Packages can define a ``default_flag_handler`` method that
+applies to all sets of flags handled by Spack, or may define
+individual methods ``cflags_handler``, ``cxxflags_handler``,
+etc. Spack will apply the individual method for a flag set if it
+exists, otherwise the ``default_flag_handler`` method if it exists,
+and fall back on the default for that package class if neither exists.
+
+These methods are defined on the package class, and take two
+parameters in addition to the packages itself. The ``env`` parameter
+is an ``EnvironmentModifications`` object that can be used to change
+the build environment. The ``flag_val`` parameter is a tuple. Its
+first entry is the name of the flag (``cflags``, ``cxxflags``, etc.)
+and its second entry is a list of the values for that flag.
+
+There are three primary idioms that can be combined to create whatever
+behavior the package requires.
+
+1. The default behavior for packages inheriting from
+``AutotoolsPackage`` or ``CmakePackage``.
+
+.. code-block:: python
+
+ def default_flag_handler(self, env, flag_val):
+ env.append_flags(flag_val[0].upper(), ' '.join(flag_val[1]))
+ return []
+
+2. The default behavior for other packages
+
+.. code-block:: python
+
+ def default_flag_handler(self, env, flag_val):
+ return flag_val[1]
+
+
+3. Packages may have additional flags to add to the build. These flags
+can be added to either idiom above. For example:
+
+.. code-block:: python
+
+ def default_flag_handler(self, env, flag_val):
+ flags = flag_val[1]
+ flags.append('-flag')
+ return flags
+
+or
+
+.. code-block:: python
+
+ def default_flag_handler(self, env, flag_val):
+ env.append_flags(flag_val[0].upper(), ' '.join(flag_val[1]))
+ env.append_flags(flag_val[0].upper(), '-flag')
+ return []
+
+Packages may also opt for methods that include aspects of any of the
+idioms above. E.g.
+
+.. code-block:: python
+
+ def default_flag_handler(self, env, flag_val):
+ flags = []
+ if len(flag_val[1]) > 3:
+ env.append_flags(flag_val[0].upper(), ' '.join(flag_val[1][3:]))
+ flags = flag_val[1][:3]
+ else:
+ flags = flag_val[1]
+ flags.append('-flag')
+ return flags
+
+Because these methods can pass values through environment variables,
+it is important not to override these variables unnecessarily in other
+package methods. In the ``setup_environment`` and
+``setup_dependent_environment`` methods, use the ``append_flags``
+method of the ``EnvironmentModifications`` class to append values to a
+list of flags whenever there is no good reason to override the
+existing value. In the ``install`` method and other methods that can
+operate on the build environment directly through the ``env``
+variable, test for environment variable existance before overriding
+values to add compiler flags.
+
+In rare circumstances such as compiling and running small unit tests, a
+package developer may need to know what are the appropriate compiler
+flags to enable features like ``OpenMP``, ``c++11``, ``c++14`` and
+alike. To that end the compiler classes in ``spack`` implement the
+following **properties**: ``openmp_flag``, ``cxx11_flag``,
+``cxx14_flag``, which can be accessed in a package by
+``self.compiler.cxx11_flag`` and alike. Note that the implementation is
+such that if a given compiler version does not support this feature, an
+error will be produced. Therefore package developers can also use these
+properties to assert that a compiler supports the requested feature. This
+is handy when a package supports additional variants like
.. code-block:: python
variant('openmp', default=True, description="Enable OpenMP support.")
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Message Parsing Interface (MPI)
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-It is common for high performance computing software/packages to use ``MPI``.
-As a result of conretization, a given package can be built using different
-implementations of MPI such as ``Openmpi``, ``MPICH`` or ``IntelMPI``.
-In some scenarios, to configure a package, one has to provide it with appropriate MPI
-compiler wrappers such as ``mpicc``, ``mpic++``.
-However different implementations of ``MPI`` may have different names for those
-wrappers. In order to make package's ``install()`` method indifferent to the
-choice ``MPI`` implementation, each package which implements ``MPI`` sets up
-``self.spec.mpicc``, ``self.spec.mpicxx``, ``self.spec.mpifc`` and ``self.spec.mpif77``
-to point to ``C``, ``C++``, ``Fortran 90`` and ``Fortran 77`` ``MPI`` wrappers.
-Package developers are advised to use these variables, for example ``self.spec['mpi'].mpicc``
-instead of hard-coding ``join_path(self.spec['mpi'].prefix.bin, 'mpicc')`` for
-the reasons outlined above.
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Blas, Lapack and ScaLapack libraries
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-^^^^^^^^^^^^^^^^^^^^^^^^^
-Blas and Lapack libraries
-^^^^^^^^^^^^^^^^^^^^^^^^^
+Multiple packages provide implementations of ``Blas``, ``Lapack`` and ``ScaLapack``
+routines. The names of the resulting static and/or shared libraries
+differ from package to package. In order to make the ``install()`` method
+independent of the choice of ``Blas`` implementation, each package which
+provides it implements ``@property def blas_libs(self):`` to return an object
+of
+`LibraryList <http://spack.readthedocs.io/en/latest/llnl.util.html#llnl.util.filesystem.LibraryList>`_
+type which simplifies usage of a set of libraries.
+The same applies to packages which provide ``Lapack`` and ``ScaLapack``.
+Package developers are requested to use this interface. Common usage cases are:
-Different packages provide implementation of ``Blas`` and ``Lapack`` routines.
-The names of the resulting static and/or shared libraries differ from package
-to package. In order to make the ``install()`` method independent of the
-choice of ``Blas`` implementation, each package which provides it
-sets up ``self.spec.blas_libs`` to point to the correct ``Blas`` libraries.
-The same applies to packages which provide ``Lapack``. Package developers are advised to
-use these variables, for example ``spec['blas'].blas_libs.joined()`` instead of
-hard-coding ``join_path(spec['blas'].prefix.lib, 'libopenblas.so')``.
+1. Space separated list of full paths
-^^^^^^^^^^^^^^^^^^^^^
-Forking ``install()``
-^^^^^^^^^^^^^^^^^^^^^
+.. code-block:: python
-To give packagers free reign over their install environment, Spack
-forks a new process each time it invokes a package's ``install()``
-method. This allows packages to have their own completely sandboxed
-build environment, without impacting other jobs that the main Spack
-process runs. Packages are free to change the environment or to
-modify Spack internals, because each ``install()`` call has its own
-dedicated process.
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ options.append(
+ '--with-blas-lapack-lib={0}'.format(lapack_blas.joined())
+ )
-.. _prefix-objects:
+2. Names of libraries and directories which contain them
------------------
-Failing the build
------------------
+.. code-block:: python
-Sometimes you don't want a package to successfully install unless some
-condition is true. You can explicitly cause the build to fail from
-``install()`` by raising an ``InstallError``, for example:
+ blas = spec['blas'].libs
+ options.extend([
+ '-DBLAS_LIBRARY_NAMES={0}'.format(';'.join(blas.names)),
+ '-DBLAS_LIBRARY_DIRS={0}'.format(';'.join(blas.directories))
+ ])
+
+3. Search and link flags
.. code-block:: python
- if spec.architecture.startswith('darwin'):
- raise InstallError('This package does not build on Mac OS X!')
+ math_libs = spec['scalapack'].libs + spec['lapack'].libs + spec['blas'].libs
+ options.append(
+ '-DMATH_LIBS:STRING={0}'.format(math_libs.ld_flags)
+ )
+
---------------
+For more information, see documentation of
+`LibraryList <http://spack.readthedocs.io/en/latest/llnl.util.html#llnl.util.filesystem.LibraryList>`_
+class.
+
+
+.. _prefix-objects:
+
+^^^^^^^^^^^^^^^^^^^^^
Prefix objects
---------------
+^^^^^^^^^^^^^^^^^^^^^
Spack passes the ``prefix`` parameter to the install method so that
you can pass it to ``configure``, ``cmake``, or some other installer,
@@ -2316,7 +2734,7 @@ e.g.:
.. code-block:: python
- configure('--prefix=' + prefix)
+ configure('--prefix={0}'.format(prefix))
For the most part, prefix objects behave exactly like strings. For
packages that do not have their own install target, or for those that
@@ -2337,29 +2755,27 @@ yourself, e.g.:
mkdirp(prefix.lib)
install('libfoo.a', prefix.lib)
-Most of the standard UNIX directory names are attributes on the
-``prefix`` object. Here is a full list:
-
- ========================= ================================================
- Prefix Attribute Location
- ========================= ================================================
- ``prefix.bin`` ``$prefix/bin``
- ``prefix.sbin`` ``$prefix/sbin``
- ``prefix.etc`` ``$prefix/etc``
- ``prefix.include`` ``$prefix/include``
- ``prefix.lib`` ``$prefix/lib``
- ``prefix.lib64`` ``$prefix/lib64``
- ``prefix.libexec`` ``$prefix/libexec``
- ``prefix.share`` ``$prefix/share``
- ``prefix.doc`` ``$prefix/doc``
- ``prefix.info`` ``$prefix/info``
-
- ``prefix.man`` ``$prefix/man``
- ``prefix.man[1-8]`` ``$prefix/man/man[1-8]``
-
- ``prefix.share_man`` ``$prefix/share/man``
- ``prefix.share_man[1-8]`` ``$prefix/share/man[1-8]``
- ========================= ================================================
+
+Attributes of this object are created on the fly when you request them,
+so any of the following will work:
+
+====================== =======================
+Prefix Attribute Location
+====================== =======================
+``prefix.bin`` ``$prefix/bin``
+``prefix.lib64`` ``$prefix/lib64``
+``prefix.share.man`` ``$prefix/share/man``
+``prefix.foo.bar.baz`` ``$prefix/foo/bar/baz``
+====================== =======================
+
+Of course, this only works if your file or directory is a valid Python
+variable name. If your file or directory contains dashes or dots, use
+``join_path`` instead:
+
+.. code-block:: python
+
+ join_path(prefix.lib, 'libz.a')
+
.. _spec-objects:
@@ -2458,23 +2874,25 @@ of its dependencies satisfy the provided spec.
Accessing Dependencies
^^^^^^^^^^^^^^^^^^^^^^
-You may need to get at some file or binary that's in the prefix of one
-of your dependencies. You can do that by sub-scripting the spec:
+You may need to get at some file or binary that's in the installation
+prefix of one of your dependencies. You can do that by sub-scripting
+the spec:
.. code-block:: python
- my_mpi = spec['mpi']
+ spec['mpi']
The value in the brackets needs to be some package name, and spec
needs to depend on that package, or the operation will fail. For
example, the above code will fail if the ``spec`` doesn't depend on
-``mpi``. The value returned and assigned to ``my_mpi``, is itself
-just another ``Spec`` object, so you can do all the same things you
-would do with the package's own spec:
+``mpi``. The value returned is itself just another ``Spec`` object,
+so you can do all the same things you would do with the package's
+own spec:
.. code-block:: python
- mpicc = join_path(my_mpi.prefix.bin, 'mpicc')
+ spec['mpi'].prefix.bin
+ spec['mpi'].version
.. _multimethods:
@@ -2577,56 +2995,251 @@ method (the one without the ``@when`` decorator) will be called.
versions. There's not much we can do to get around this because of
the way decorators work.
+.. _compiler-wrappers:
-.. _shell-wrappers:
+---------------------
+Compiler wrappers
+---------------------
------------------------
-Shell command functions
------------------------
+As mentioned, ``CC``, ``CXX``, ``F77``, and ``FC`` are set to point to
+Spack's compiler wrappers. These are simply called ``cc``, ``c++``,
+``f77``, and ``f90``, and they live in ``$SPACK_ROOT/lib/spack/env``.
-Recall the install method from ``libelf``:
+``$SPACK_ROOT/lib/spack/env`` is added first in the ``PATH``
+environment variable when ``install()`` runs so that system compilers
+are not picked up instead.
-.. literalinclude:: ../../../var/spack/repos/builtin/packages/libelf/package.py
- :pyobject: Libelf.install
- :linenos:
+All of these compiler wrappers point to a single compiler wrapper
+script that figures out which *real* compiler it should be building
+with. This comes either from spec `concretization
+<abstract-and-concrete>`_ or from a user explicitly asking for a
+particular compiler using, e.g., ``%intel`` on the command line.
-Normally in Python, you'd have to write something like this in order
-to execute shell commands:
+In addition to invoking the right compiler, the compiler wrappers add
+flags to the compile line so that dependencies can be easily found.
+These flags are added for each dependency, if they exist:
+
+Compile-time library search paths
+* ``-L$dep_prefix/lib``
+* ``-L$dep_prefix/lib64``
+
+Runtime library search paths (RPATHs)
+* ``$rpath_flag$dep_prefix/lib``
+* ``$rpath_flag$dep_prefix/lib64``
+
+Include search paths
+* ``-I$dep_prefix/include``
+
+An example of this would be the ``libdwarf`` build, which has one
+dependency: ``libelf``. Every call to ``cc`` in the ``libdwarf``
+build will have ``-I$LIBELF_PREFIX/include``,
+``-L$LIBELF_PREFIX/lib``, and ``$rpath_flag$LIBELF_PREFIX/lib``
+inserted on the command line. This is done transparently to the
+project's build system, which will just think it's using a system
+where ``libelf`` is readily available. Because of this, you **do
+not** have to insert extra ``-I``, ``-L``, etc. on the command line.
+
+Another useful consequence of this is that you often do *not* have to
+add extra parameters on the ``configure`` line to get autotools to
+find dependencies. The ``libdwarf`` install method just calls
+configure like this:
.. code-block:: python
- import subprocess
- subprocess.check_call('configure', '--prefix={0}'.format(prefix))
+ configure("--prefix=" + prefix)
-We've tried to make this a bit easier by providing callable wrapper
-objects for some shell commands. By default, ``configure``,
-``cmake``, and ``make`` wrappers are are provided, so you can call
-them more naturally in your package files.
+Because of the ``-L`` and ``-I`` arguments, configure will
+successfully find ``libdwarf.h`` and ``libdwarf.so``, without the
+packager having to provide ``--with-libdwarf=/path/to/libdwarf`` on
+the command line.
-If you need other commands, you can use ``which`` to get them:
+.. note::
+
+ For most compilers, ``$rpath_flag`` is ``-Wl,-rpath,``. However, NAG
+ passes its flags to GCC instead of passing them directly to the linker.
+ Therefore, its ``$rpath_flag`` is doubly wrapped: ``-Wl,-Wl,,-rpath,``.
+ ``$rpath_flag`` can be overriden on a compiler specific basis in
+ ``lib/spack/spack/compilers/$compiler.py``.
+
+The compiler wrappers also pass the compiler flags specified by the user from
+the command line (``cflags``, ``cxxflags``, ``fflags``, ``cppflags``, ``ldflags``,
+and/or ``ldlibs``). They do not override the canonical autotools flags with the
+same names (but in ALL-CAPS) that may be passed into the build by particularly
+challenging package scripts.
+
+---------------------
+MPI support in Spack
+---------------------
+
+It is common for high performance computing software/packages to use the
+Message Passing Interface ( ``MPI``). As a result of conretization, a
+given package can be built using different implementations of MPI such as
+``Openmpi``, ``MPICH`` or ``IntelMPI``. That is, when your package
+declares that it ``depends_on('mpi')``, it can be built with any of these
+``mpi`` implementations. In some scenarios, to configure a package, one
+has to provide it with appropriate MPI compiler wrappers such as
+``mpicc``, ``mpic++``. However different implementations of ``MPI`` may
+have different names for those wrappers.
+
+Spack provides an idiomatic way to use MPI compilers in your package. To
+use MPI wrappers to compile your whole build, do this in your
+``install()`` method:
.. code-block:: python
- sed = which('sed')
- sed('s/foo/bar/', filename)
+ env['CC'] = spec['mpi'].mpicc
+ env['CXX'] = spec['mpi'].mpicxx
+ env['F77'] = spec['mpi'].mpif77
+ env['FC'] = spec['mpi'].mpifc
-The ``which`` function will search the ``PATH`` for the application.
+That's all. A longer explanation of why this works is below.
-Callable wrappers also allow spack to provide some special features.
-For example, in Spack, ``make`` is parallel by default, and Spack
-figures out the number of cores on your machine and passes an
-appropriate value for ``-j<numjobs>`` when it calls ``make`` (see the
-``parallel`` `package attribute <attribute_parallel>`). In
-a package file, you can supply a keyword argument, ``parallel=False``,
-to the ``make`` wrapper to disable parallel make. In the ``libelf``
-package, this allows us to avoid race conditions in the library's
-build system.
+We don't try to force any particular build method on packagers. The
+decision to use MPI wrappers depends on the way the package is written,
+on common practice, and on "what works". Loosely, There are three types
+of MPI builds:
+
+ 1. Some build systems work well without the wrappers and can treat MPI
+ as an external library, where the person doing the build has to
+ supply includes/libs/etc. This is fairly uncommon.
+
+ 2. Others really want the wrappers and assume you're using an MPI
+ "compiler" – i.e., they have no mechanism to add MPI
+ includes/libraries/etc.
+
+ 3. CMake's ``FindMPI`` needs the compiler wrappers, but it uses them to
+ extract ``–I`` / ``-L`` / ``-D`` arguments, then treats MPI like a
+ regular library.
+
+Note that some CMake builds fall into case 2 because they either don't
+know about or don't like CMake's ``FindMPI`` support – they just assume
+an MPI compiler. Also, some autotools builds fall into case 3 (e.g. `here
+is an autotools version of CMake's FindMPI
+<https://github.com/tgamblin/libra/blob/master/m4/lx_find_mpi.m4>`_).
+
+Given all of this, we leave the use of the wrappers up to the packager.
+Spack will support all three ways of building MPI packages.
+
+^^^^^^^^^^^^^^^^^^^^^
+Packaging Conventions
+^^^^^^^^^^^^^^^^^^^^^
+
+As mentioned above, in the ``install()`` method, ``CC``, ``CXX``,
+``F77``, and ``FC`` point to Spack's wrappers around the chosen compiler.
+Spack's wrappers are not the MPI compiler wrappers, though they do
+automatically add ``–I``, ``–L``, and ``–Wl,-rpath`` args for
+dependencies in a similar way. The MPI wrappers are a bit different in
+that they also add ``-l`` arguments for the MPI libraries, and some add
+special ``-D`` arguments to trigger build options in MPI programs.
+
+For case 1 above, you generally don't need to do more than patch your
+Makefile or add configure args as you normally would.
+
+For case 3, you don't need to do much of anything, as Spack puts the MPI
+compiler wrappers in the PATH, and the build will find them and
+interrogate them.
+
+For case 2, things are a bit more complicated, as you'll need to tell the
+build to use the MPI compiler wrappers instead of Spack's compiler
+wrappers. All it takes some lines like this:
+
+.. code-block:: python
+
+ env['CC'] = spec['mpi'].mpicc
+ env['CXX'] = spec['mpi'].mpicxx
+ env['F77'] = spec['mpi'].mpif77
+ env['FC'] = spec['mpi'].mpifc
+
+Or, if you pass CC, CXX, etc. directly to your build with, e.g.,
+`--with-cc=<path>`, you'll want to substitute `spec['mpi'].mpicc` in
+there instead, e.g.:
+
+.. code-block:: python
+
+ configure('—prefix=%s' % prefix,
+ '—with-cc=%s' % spec['mpi'].mpicc)
+
+Now, you may think that doing this will lose the includes, library paths,
+and RPATHs that Spack's compiler wrapper get you, but we've actually set
+things up so that the MPI compiler wrappers use Spack's compiler wrappers
+when run from within Spack. So using the MPI wrappers should really be as
+simple as the code above.
+
+^^^^^^^^^^^^^^^^^^^^^
+``spec['mpi']``
+^^^^^^^^^^^^^^^^^^^^^
+
+Ok, so how does all this work?
+
+If your package has a virtual dependency like ``mpi``, then referring to
+``spec['mpi']`` within ``install()`` will get you the concrete ``mpi``
+implementation in your dependency DAG. That is a spec object just like
+the one passed to install, only the MPI implementations all set some
+additional properties on it to help you out. E.g., in mvapich2, you'll
+find this:
+
+.. literalinclude:: ../../../var/spack/repos/builtin/packages/mvapich2/package.py
+ :pyobject: Mvapich2.setup_dependent_package
+
+That code allows the mvapich2 package to associate an ``mpicc`` property
+with the ``mvapich2`` node in the DAG, so that dependents can access it.
+``openmpi`` and ``mpich`` do similar things. So, no matter what MPI
+you're using, spec['mpi'].mpicc gets you the location of the MPI
+compilers. This allows us to have a fairly simple polymorphic interface
+for information about virtual dependencies like MPI.
+
+^^^^^^^^^^^^^^^^^^^^^
+Wrapping wrappers
+^^^^^^^^^^^^^^^^^^^^^
+
+Spack likes to use its own compiler wrappers to make it easy to add
+``RPATHs`` to builds, and to try hard to ensure that your builds use the
+right dependencies. This doesn't play nicely by default with MPI, so we
+have to do a couple tricks.
+
+ 1. If we build MPI with Spack's wrappers, mpicc and friends will be
+ installed with hard-coded paths to Spack's wrappers, and using them
+ from outside of Spack will fail because they only work within Spack.
+ To fix this, we patch mpicc and friends to use the regular
+ compilers. Look at the filter_compilers method in mpich, openmpi,
+ or mvapich2 for details.
+
+ 2. We still want to use the Spack compiler wrappers when Spack is
+ calling mpicc. Luckily, wrappers in all mainstream MPI
+ implementations provide environment variables that allow us to
+ dynamically set the compiler to be used by mpicc, mpicxx, etc.
+ Denis pasted some code from this below – Spack's build environment
+ sets ``MPICC``, ``MPICXX``, etc. for mpich derivatives and
+ ``OMPI_CC``, ``OMPI_CXX``, etc. for OpenMPI. This makes the MPI
+ compiler wrappers use the Spack compiler wrappers so that your
+ dependencies still get proper RPATHs even if you use the MPI
+ wrappers.
+
+^^^^^^^^^^^^^^^^^^^^^
+MPI on Cray machines
+^^^^^^^^^^^^^^^^^^^^^
+
+The Cray programming environment notably uses ITS OWN compiler wrappers,
+which function like MPI wrappers. On Cray systems, the ``CC``, ``cc``,
+and ``ftn`` wrappers ARE the MPI compiler wrappers, and it's assumed that
+you'll use them for all of your builds. So on Cray we don't bother with
+``mpicc``, ``mpicxx``, etc, Spack MPI implementations set
+``spec['mpi'].mpicc`` to point to Spack's wrappers, which wrap the Cray
+wrappers, which wrap the regular compilers and include MPI flags. That
+may seem complicated, but for packagers, that means the same code for
+using MPI wrappers will work, even on even on a Cray:
+
+.. code-block:: python
+
+ env['CC'] = spec['mpi'].mpicc
+
+This is because on Cray, ``spec['mpi'].mpicc`` is just ``spack_cc``.
.. _sanity-checks:
--------------------------------
-Sanity checking an installation
--------------------------------
+------------------------
+Checking an installation
+------------------------
By default, Spack assumes that a build has failed if nothing is
written to the install prefix, and that it has succeeded if anything
@@ -2645,16 +3258,18 @@ Consider a simple autotools build like this:
If you are using using standard autotools or CMake, ``configure`` and
``make`` will not write anything to the install prefix. Only ``make
install`` writes the files, and only once the build is already
-complete. Not all builds are like this. Many builds of scientific
-software modify the install prefix *before* ``make install``. Builds
-like this can falsely report that they were successfully installed if
-an error occurs before the install is complete but after files have
-been written to the ``prefix``.
+complete.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``sanity_check_is_file`` and ``sanity_check_is_dir``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Unfortunately, many builds of scientific
+software modify the install prefix *before* ``make install``. Builds
+like this can falsely report that they were successfully installed if
+an error occurs before the install is complete but after files have
+been written to the ``prefix``.
+
You can optionally specify *sanity checks* to deal with this problem.
Add properties like this to your package:
@@ -2678,6 +3293,48 @@ the build will fail and the install prefix will be removed. If they
succeed, Spack considers the build successful and keeps the prefix in
place.
+^^^^^^^^^^^^^^^^
+Build-time tests
+^^^^^^^^^^^^^^^^
+
+Sometimes packages finish to build "correctly" and issues with their run-time
+behavior are discovered only at a later stage, maybe after a full software stack
+relying on them has already been built. To avoid situations of that kind it's possible
+to write build-time tests that will be executed only if the option ``--run-tests``
+of ``spack install`` has been activated.
+
+The proper way to write these tests is relying on two decorators that come with
+any base class listed in :ref:`installation_procedure`.
+
+.. code-block:: python
+
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
+ def check_build(self):
+ # Custom implementation goes here
+ pass
+
+The first decorator ``run_after('build')`` schedules this
+function to be invoked after the ``build`` phase has been executed, while the
+second one makes the invocation conditional on the fact that ``self.run_tests == True``.
+It is also possible to schedule a function to be invoked *before* a given phase
+using the ``run_before`` decorator.
+
+.. note::
+
+ Default implementations for build-time tests
+
+ Packages that are built using specific build systems may already have a
+ default implementation for build-time tests. For instance :py:class:`~.AutotoolsPackage`
+ based packages will try to invoke ``make test`` and ``make check`` if
+ Spack is asked to run tests.
+ More information on each class is available in the the :py:mod:`~.spack.build_systems`
+ documentation.
+
+.. warning::
+
+ The API for adding tests is not yet considered stable and may change drastically in future releases.
+
.. _file-manipulation:
---------------------------
@@ -2733,7 +3390,7 @@ Filtering functions
.. code-block:: python
filter_file(r'#!/usr/bin/perl',
- '#!/usr/bin/env perl', join_path(prefix.bin, 'bib2xhtml'))
+ '#!/usr/bin/env perl', prefix.bin.bib2xhtml)
#. Switching the compilers used by ``mpich``'s MPI wrapper scripts from
``cc``, etc. to the compilers used by the Spack build:
@@ -2741,10 +3398,10 @@ Filtering functions
.. code-block:: python
filter_file('CC="cc"', 'CC="%s"' % self.compiler.cc,
- join_path(prefix.bin, 'mpicc'))
+ prefix.bin.mpicc)
filter_file('CXX="c++"', 'CXX="%s"' % self.compiler.cxx,
- join_path(prefix.bin, 'mpicxx'))
+ prefix.bin.mpicxx)
:py:func:`change_sed_delimiter(old_delim, new_delim, *filenames) <spack.change_sed_delim>`
Some packages, like TAU, have a build system that can't install
@@ -2781,12 +3438,10 @@ File functions
.. code-block:: python
- install('my-header.h', join_path(prefix.include))
+ install('my-header.h', prefix.include)
-:py:func:`join_path(prefix, *args) <spack.join_path>`
- Like ``os.path.join``, this joins paths using the OS path separator.
- However, this version allows an arbitrary number of arguments, so
- you can string together many path components.
+:py:func:`join_path(*paths) <spack.join_path>`
+ An alias for ``os.path.join``. This joins paths using the OS path separator.
:py:func:`mkdirp(*paths) <spack.mkdirp>`
Create each of the directories in ``paths``, creating any parent
@@ -2839,9 +3494,9 @@ File functions
.. _package-lifecycle:
------------------------
-Coding Style Guidelines
------------------------
+-----------------------------
+Style guidelines for packages
+-----------------------------
The following guidelines are provided, in the interests of making
Spack packages work in a consistent manner:
@@ -2872,37 +3527,6 @@ Version Lists
Spack packages should list supported versions with the newest first.
-^^^^^^^^^^^^^^^^
-Special Versions
-^^^^^^^^^^^^^^^^
-
-The following *special* version names may be used when building a package:
-
-"""""""""""
-``@system``
-"""""""""""
-
-Indicates a hook to the OS-installed version of the
-package. This is useful, for example, to tell Spack to use the
-OS-installed version in ``packages.yaml``:
-
-.. code-block:: yaml
-
- openssl:
- paths:
- openssl@system: /usr
- buildable: False
-
-Certain Spack internals look for the ``@system`` version and do
-appropriate things in that case.
-
-""""""""""
-``@local``
-""""""""""
-
-Indicates the version was built manually from some source
-tree of unknown provenance (see ``spack setup``).
-
---------------------------
Packaging workflow commands
---------------------------
@@ -2995,24 +3619,12 @@ Does this in one of two ways:
``spack clean``
^^^^^^^^^^^^^^^
-Cleans up temporary files for a particular package, by deleting the
-expanded/checked out source code *and* any downloaded archive. If
-``fetch``, ``stage``, or ``install`` are run again after this, Spack's
-build process will start from scratch.
-
-.. _cmd-spack-purge:
-
-^^^^^^^^^^^^^^^
-``spack purge``
-^^^^^^^^^^^^^^^
-
Cleans up all of Spack's temporary and cached files. This can be used to
recover disk space if temporary files from interrupted or failed installs
accumulate in the staging area.
When called with ``--stage`` or without arguments this removes all staged
-files and will be equivalent to running ``spack clean`` for every package
-you have fetched or staged.
+files.
When called with ``--downloads`` this will clear all resources
:ref:`cached <caching>` during installs.
@@ -3022,6 +3634,11 @@ directory, including cached virtual indices.
To remove all of the above, the command can be called with ``--all``.
+When called with positional arguments, cleans up temporary files only
+for a particular package. If ``fetch``, ``stage``, or ``install``
+are run again after this, Spack's build process will start from scratch.
+
+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Keeping the stage directory on success
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -3035,7 +3652,7 @@ package has been successfully built and installed. Use
$ spack install --keep-stage <spec>
This allows you to inspect the build directory and potentially debug
-the build. You can use ``purge`` or ``clean`` later to get rid of the
+the build. You can use ``clean`` later to get rid of the
unwanted temporary files.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/lib/spack/docs/requirements.txt b/lib/spack/docs/requirements.txt
new file mode 100644
index 0000000000..d3fe0d18d7
--- /dev/null
+++ b/lib/spack/docs/requirements.txt
@@ -0,0 +1,5 @@
+# These dependencies should be installed using pip in order
+# to build the documentation.
+
+sphinx
+sphinxcontrib-programoutput
diff --git a/lib/spack/docs/tutorial_sc16.rst b/lib/spack/docs/tutorial.rst
index a95eee989c..ff2a2f6870 100644
--- a/lib/spack/docs/tutorial_sc16.rst
+++ b/lib/spack/docs/tutorial.rst
@@ -37,12 +37,18 @@ These scripts will take you step-by-step through basic Spack tasks. They
correspond to sections in the slides above.
1. :ref:`basics-tutorial`
- 2. :ref:`packaging-tutorial`
- 3. :ref:`modules-tutorial`
+ 2. :ref:`configs-tutorial`
+ 3. :ref:`packaging-tutorial`
+ 4. :ref:`build-systems-tutorial`
+ 5. :ref:`advanced-packaging-tutorial`
+ 6. :ref:`modules-tutorial`
Full contents:
.. toctree::
- tutorial_sc16_spack_basics
- tutorial_sc16_packaging
- tutorial_sc16_modules
+ tutorial_basics
+ tutorial_configuration
+ tutorial_packaging
+ tutorial_buildsystems
+ tutorial_advanced_packaging
+ tutorial_modules
diff --git a/lib/spack/docs/tutorial/examples/0.package.py b/lib/spack/docs/tutorial/examples/0.package.py
index 7ff04d8f17..0a42cdc802 100644
--- a/lib/spack/docs/tutorial/examples/0.package.py
+++ b/lib/spack/docs/tutorial/examples/0.package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,7 +40,7 @@
from spack import *
-class Mpileaks(AutotoolsPackage):
+class Mpileaks(Package):
"""FIXME: Put a proper description of your package here."""
# FIXME: Add a proper url for your package's homepage here.
@@ -50,14 +50,9 @@ class Mpileaks(AutotoolsPackage):
version('1.0', '8838c574b39202a57d7c2d68692718aa')
# FIXME: Add dependencies if required.
- # depends_on('m4', type='build')
- # depends_on('autoconf', type='build')
- # depends_on('automake', type='build')
- # depends_on('libtool', type='build')
# depends_on('foo')
- def configure_args(self):
- # FIXME: Add arguments other than --prefix
- # FIXME: If not needed delete the function
- args = []
- return args
+ def install(self, spec, prefix):
+ # FIXME: Unknown build system
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/1.package.py b/lib/spack/docs/tutorial/examples/1.package.py
index ed156fb34b..308779d016 100644
--- a/lib/spack/docs/tutorial/examples/1.package.py
+++ b/lib/spack/docs/tutorial/examples/1.package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,24 +25,18 @@
from spack import *
-class Mpileaks(AutotoolsPackage):
+class Mpileaks(Package):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
homepage = "https://github.com/hpc/mpileaks"
- url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
-
+ url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz" # NOQA
version('1.0', '8838c574b39202a57d7c2d68692718aa')
# FIXME: Add dependencies if required.
- # depends_on('m4', type='build')
- # depends_on('autoconf', type='build')
- # depends_on('automake', type='build')
- # depends_on('libtool', type='build')
# depends_on('foo')
- def configure_args(self):
- # FIXME: Add arguments other than --prefix
- # FIXME: If not needed delete the function
- args = []
- return args
+ def install(self, spec, prefix):
+ # FIXME: Unknown build system
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/2.package.py b/lib/spack/docs/tutorial/examples/2.package.py
index 93274cb587..7980768e06 100644
--- a/lib/spack/docs/tutorial/examples/2.package.py
+++ b/lib/spack/docs/tutorial/examples/2.package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mpileaks(AutotoolsPackage):
+class Mpileaks(Package):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
@@ -38,8 +38,7 @@ class Mpileaks(AutotoolsPackage):
depends_on('adept-utils')
depends_on('callpath')
- def configure_args(self):
- # FIXME: Add arguments other than --prefix
- # FIXME: If not needed delete the function
- args = []
- return args
+ def install(self, spec, prefix):
+ # FIXME: Unknown build system
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/3.package.py b/lib/spack/docs/tutorial/examples/3.package.py
index e732a7187d..b30dd900ae 100644
--- a/lib/spack/docs/tutorial/examples/3.package.py
+++ b/lib/spack/docs/tutorial/examples/3.package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,9 +25,10 @@
from spack import *
-class Mpileaks(AutotoolsPackage):
+class Mpileaks(Package):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
+
homepage = "https://github.com/hpc/mpileaks"
url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
@@ -37,7 +38,7 @@ class Mpileaks(AutotoolsPackage):
depends_on('adept-utils')
depends_on('callpath')
- def configure_args(self):
- args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
- '--with-callpath=%s' % self.spec['callpath'].prefix]
- return args
+ def install(self, spec, prefix):
+ configure()
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/4.package.py b/lib/spack/docs/tutorial/examples/4.package.py
index 8f3fae37ed..116a11a0fa 100644
--- a/lib/spack/docs/tutorial/examples/4.package.py
+++ b/lib/spack/docs/tutorial/examples/4.package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mpileaks(AutotoolsPackage):
+class Mpileaks(Package):
"""Tool to detect and report MPI objects like MPI_Requests and
MPI_Datatypes."""
@@ -34,17 +34,13 @@ class Mpileaks(AutotoolsPackage):
version('1.0', '8838c574b39202a57d7c2d68692718aa')
- variant('stackstart', default=0, description='Specify the number of stack frames to truncate.')
-
depends_on('mpi')
depends_on('adept-utils')
depends_on('callpath')
- def configure_args(self):
- args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
- '--with-callpath=%s' % self.spec['callpath'].prefix]
- stackstart = int(self.spec.variants['stackstart'].value)
- if stackstart:
- args.extend(['--with-stack-start-c=%s' % stackstart,
- '--with-stack-start-fortran=%s' % stackstart])
- return args
+ def install(self, spec, prefix):
+ configure('--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
+ '--with-callpath=%s' % self.spec['callpath'].prefix,
+ '--prefix=%s' % self.spec.prefix)
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/5.package.py b/lib/spack/docs/tutorial/examples/5.package.py
new file mode 100644
index 0000000000..3e7a1f83cb
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/5.package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Mpileaks(Package):
+ """Tool to detect and report MPI objects like MPI_Requests and
+ MPI_Datatypes."""
+
+ homepage = "https://github.com/hpc/mpileaks"
+ url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
+
+ version('1.0', '8838c574b39202a57d7c2d68692718aa')
+
+ variant('stackstart', values=int, default=0, description='Specify the number of stack frames to truncate.')
+
+ depends_on('mpi')
+ depends_on('adept-utils')
+ depends_on('callpath')
+
+ def install(self, spec, prefix):
+ stackstart = int(self.spec.variants['stackstart'].value)
+ confargs = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
+ '--with-callpath=%s' % self.spec['callpath'].prefix,
+ '--prefix=%s' % self.spec.prefix]
+ if stackstart:
+ confargs.extend(['--with-stack-start-c=%s' % stackstart,
+ '--with-stack-start-fortran=%s' % stackstart])
+ configure(*confargs)
+ make()
+ make('install')
diff --git a/lib/spack/docs/tutorial/examples/Autotools/0.package.py b/lib/spack/docs/tutorial/examples/Autotools/0.package.py
new file mode 100644
index 0000000000..44a157b36a
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Autotools/0.package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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 Mpileaks(AutoToolsPackage):
+ """Tool to detect and report leaked MPI objects like MPI_Requests and
+ MPI_Datatypes."""
+
+ homepage = "https://github.com/hpc/mpileaks"
+ url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
+
+ version('1.0', '8838c574b39202a57d7c2d68692718aa')
+
+ depends_on("mpi")
+ depends_on("adept-utils")
+ depends_on("callpath")
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix,
+ "--with-adept-utils=" + spec['adept-utils'].prefix,
+ "--with-callpath=" + spec['callpath'].prefix)
+ make()
+ make("install")
diff --git a/lib/spack/docs/tutorial/examples/Autotools/1.package.py b/lib/spack/docs/tutorial/examples/Autotools/1.package.py
new file mode 100644
index 0000000000..bc12c70b7f
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Autotools/1.package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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 Mpileaks(AutoToolsPackage):
+ """Tool to detect and report leaked MPI objects like MPI_Requests and
+ MPI_Datatypes."""
+
+ homepage = "https://github.com/hpc/mpileaks"
+ url = "https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz"
+
+ version('1.0', '8838c574b39202a57d7c2d68692718aa')
+
+ variant("stackstart", values=int, default=0,
+ description="Specify the number of stack frames to truncate")
+
+ depends_on("mpi")
+ depends_on("adept-utils")
+ depends_on("callpath")
+
+ def configure_args(self):
+ stackstart = int(self.spec.variants['stackstart'].value)
+ args = ["--with-adept-utils=" + spec['adept-utils'].prefix,
+ "--with-callpath=" + spec['callpath'].prefix]
+ if stackstart:
+ args.extend(['--with-stack-start-c=%s' % stackstart,
+ '--with-stack-start-fortran=%s' % stackstart])
+ return args
diff --git a/lib/spack/docs/tutorial/examples/Autotools/autotools_class.py b/lib/spack/docs/tutorial/examples/Autotools/autotools_class.py
new file mode 100644
index 0000000000..90ff8540bd
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Autotools/autotools_class.py
@@ -0,0 +1,460 @@
+##############################################################################
+# 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
+##############################################################################
+
+import inspect
+import os
+import os.path
+import shutil
+import stat
+from subprocess import PIPE
+from subprocess import check_call
+
+import llnl.util.tty as tty
+from llnl.util.filesystem import working_dir, join_path, force_remove
+from spack.package import PackageBase, run_after, run_before
+from spack.util.executable import Executable
+
+
+class AutotoolsPackage(PackageBase):
+ """Specialized class for packages built using GNU Autotools.
+
+ This class provides four phases that can be overridden:
+
+ 1. :py:meth:`~.AutotoolsPackage.autoreconf`
+ 2. :py:meth:`~.AutotoolsPackage.configure`
+ 3. :py:meth:`~.AutotoolsPackage.build`
+ 4. :py:meth:`~.AutotoolsPackage.install`
+
+ They all have sensible defaults and for many packages the only thing
+ necessary will be to override the helper method
+ :py:meth:`~.AutotoolsPackage.configure_args`.
+ For a finer tuning you may also override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:attr:`~.AutotoolsPackage.build_targets` | Specify ``make`` |
+ | | targets for the |
+ | | build phase |
+ +-----------------------------------------------+--------------------+
+ | :py:attr:`~.AutotoolsPackage.install_targets` | Specify ``make`` |
+ | | targets for the |
+ | | install phase |
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.AutotoolsPackage.check` | Run build time |
+ | | tests if required |
+ +-----------------------------------------------+--------------------+
+
+ """
+ #: Phases of a GNU Autotools package
+ phases = ['autoreconf', 'configure', 'build', 'install']
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'AutotoolsPackage'
+ #: Whether or not to update ``config.guess`` on old architectures
+ patch_config_guess = True
+
+ #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.build`
+ #: phase
+ build_targets = []
+ #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.install`
+ #: phase
+ install_targets = ['install']
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['installcheck']
+
+ #: Set to true to force the autoreconf step even if configure is present
+ force_autoreconf = False
+ #: Options to be passed to autoreconf when using the default implementation
+ autoreconf_extra_args = []
+
+ @run_after('autoreconf')
+ def _do_patch_config_guess(self):
+ """Some packages ship with an older config.guess and need to have
+ this updated when installed on a newer architecture. In particular,
+ config.guess fails for PPC64LE for version prior to a 2013-06-10
+ build date (automake 1.13.4)."""
+
+ if not self.patch_config_guess or not self.spec.satisfies(
+ 'target=ppc64le'
+ ):
+ return
+ my_config_guess = None
+ config_guess = None
+ if os.path.exists('config.guess'):
+ # First search the top-level source directory
+ my_config_guess = 'config.guess'
+ else:
+ # Then search in all sub directories.
+ # We would like to use AC_CONFIG_AUX_DIR, but not all packages
+ # ship with their configure.in or configure.ac.
+ d = '.'
+ dirs = [os.path.join(d, o) for o in os.listdir(d)
+ if os.path.isdir(os.path.join(d, o))]
+ for dirname in dirs:
+ path = os.path.join(dirname, 'config.guess')
+ if os.path.exists(path):
+ my_config_guess = path
+
+ if my_config_guess is not None:
+ try:
+ check_call([my_config_guess], stdout=PIPE, stderr=PIPE)
+ # The package's config.guess already runs OK, so just use it
+ return
+ except Exception:
+ pass
+ else:
+ return
+
+ # Look for a spack-installed automake package
+ if 'automake' in self.spec:
+ automake_path = os.path.join(self.spec['automake'].prefix, 'share',
+ 'automake-' +
+ str(self.spec['automake'].version))
+ path = os.path.join(automake_path, 'config.guess')
+ if os.path.exists(path):
+ config_guess = path
+ # Look for the system's config.guess
+ if config_guess is None and os.path.exists('/usr/share'):
+ automake_dir = [s for s in os.listdir('/usr/share') if
+ "automake" in s]
+ if automake_dir:
+ automake_path = os.path.join('/usr/share', automake_dir[0])
+ path = os.path.join(automake_path, 'config.guess')
+ if os.path.exists(path):
+ config_guess = path
+ if config_guess is not None:
+ try:
+ check_call([config_guess], stdout=PIPE, stderr=PIPE)
+ mod = os.stat(my_config_guess).st_mode & 0o777 | stat.S_IWUSR
+ os.chmod(my_config_guess, mod)
+ shutil.copyfile(config_guess, my_config_guess)
+ return
+ except Exception:
+ pass
+
+ raise RuntimeError('Failed to find suitable config.guess')
+
+ @property
+ def configure_directory(self):
+ """Returns the directory where 'configure' resides.
+
+ :return: directory where to find configure
+ """
+ return self.stage.source_path
+
+ @property
+ def configure_abs_path(self):
+ # Absolute path to configure
+ configure_abs_path = join_path(
+ os.path.abspath(self.configure_directory), 'configure'
+ )
+ return configure_abs_path
+
+ @property
+ def build_directory(self):
+ """Override to provide another place to build the package"""
+ return self.configure_directory
+
+ def default_flag_handler(self, spack_env, flag_val):
+ # Relies on being the first thing that can affect the spack_env
+ # EnvironmentModification after it is instantiated or no other
+ # method trying to affect these variables. Currently both are true
+ # flag_val is a tuple (flag, value_list).
+ spack_env.set(flag_val[0].upper(),
+ ' '.join(flag_val[1]))
+ return []
+
+ @run_before('autoreconf')
+ def delete_configure_to_force_update(self):
+ if self.force_autoreconf:
+ force_remove(self.configure_abs_path)
+
+ def autoreconf(self, spec, prefix):
+ """Not needed usually, configure should be already there"""
+ # If configure exists nothing needs to be done
+ if os.path.exists(self.configure_abs_path):
+ return
+ # Else try to regenerate it
+ autotools = ['m4', 'autoconf', 'automake', 'libtool']
+ missing = [x for x in autotools if x not in spec]
+ if missing:
+ msg = 'Cannot generate configure: missing dependencies {0}'
+ raise RuntimeError(msg.format(missing))
+ tty.msg('Configure script not found: trying to generate it')
+ tty.warn('*********************************************************')
+ tty.warn('* If the default procedure fails, consider implementing *')
+ tty.warn('* a custom AUTORECONF phase in the package *')
+ tty.warn('*********************************************************')
+ with working_dir(self.configure_directory):
+ m = inspect.getmodule(self)
+ # This part should be redundant in principle, but
+ # won't hurt
+ m.libtoolize()
+ m.aclocal()
+ # This line is what is needed most of the time
+ # --install, --verbose, --force
+ autoreconf_args = ['-ivf']
+ if 'pkg-config' in spec:
+ autoreconf_args += [
+ '-I',
+ join_path(spec['pkg-config'].prefix, 'share', 'aclocal'),
+ ]
+ autoreconf_args += self.autoreconf_extra_args
+ m.autoreconf(*autoreconf_args)
+
+ @run_after('autoreconf')
+ def set_configure_or_die(self):
+ """Checks the presence of a ``configure`` file after the
+ autoreconf phase. If it is found sets a module attribute
+ appropriately, otherwise raises an error.
+
+ :raises RuntimeError: if a configure script is not found in
+ :py:meth:`~AutotoolsPackage.configure_directory`
+ """
+ # Check if a configure script is there. If not raise a RuntimeError.
+ if not os.path.exists(self.configure_abs_path):
+ msg = 'configure script not found in {0}'
+ raise RuntimeError(msg.format(self.configure_directory))
+
+ # Monkey-patch the configure script in the corresponding module
+ inspect.getmodule(self).configure = Executable(
+ self.configure_abs_path
+ )
+
+ def configure_args(self):
+ """Produces a list containing all the arguments that must be passed to
+ configure, except ``--prefix`` which will be pre-pended to the list.
+
+ :return: list of arguments for configure
+ """
+ return []
+
+ def configure(self, spec, prefix):
+ """Runs configure with the arguments specified in
+ :py:meth:`~.AutotoolsPackage.configure_args`
+ and an appropriately set prefix.
+ """
+ options = ['--prefix={0}'.format(prefix)] + self.configure_args()
+
+ with working_dir(self.build_directory, create=True):
+ inspect.getmodule(self).configure(*options)
+
+ def build(self, spec, prefix):
+ """Makes the build targets specified by
+ :py:attr:``~.AutotoolsPackage.build_targets``
+ """
+ with working_dir(self.build_directory):
+ inspect.getmodule(self).make(*self.build_targets)
+
+ def install(self, spec, prefix):
+ """Makes the install targets specified by
+ :py:attr:``~.AutotoolsPackage.install_targets``
+ """
+ with working_dir(self.build_directory):
+ inspect.getmodule(self).make(*self.install_targets)
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def check(self):
+ """Searches the Makefile for targets ``test`` and ``check``
+ and runs them if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('test')
+ self._if_make_target_execute('check')
+
+ def _activate_or_not(
+ self,
+ name,
+ activation_word,
+ deactivation_word,
+ activation_value=None
+ ):
+ """This function contains the current implementation details of
+ :py:meth:`~.AutotoolsPackage.with_or_without` and
+ :py:meth:`~.AutotoolsPackage.enable_or_disable`.
+
+ Args:
+ name (str): name of the variant that is being processed
+ activation_word (str): the default activation word ('with' in the
+ case of ``with_or_without``)
+ deactivation_word (str): the default deactivation word ('without'
+ in the case of ``with_or_without``)
+ activation_value (callable): callable that accepts a single
+ value. This value is either one of the allowed values for a
+ multi-valued variant or the name of a bool-valued variant.
+ Returns the parameter to be used when the value is activated.
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Examples:
+
+ Given a package with:
+
+ .. code-block:: python
+
+ variant('foo', values=('x', 'y'), description='')
+ variant('bar', default=True, description='')
+
+ calling this function like:
+
+ .. code-block:: python
+
+ _activate_or_not(
+ 'foo', 'with', 'without', activation_value='prefix'
+ )
+ _activate_or_not('bar', 'with', 'without')
+
+ will generate the following configuration options:
+
+ .. code-block:: console
+
+ --with-x=<prefix-to-x> --without-y --with-bar
+
+ for ``<spec-name> foo=x +bar``
+
+ Returns:
+ list of strings that corresponds to the activation/deactivation
+ of the variant that has been processed
+
+ Raises:
+ KeyError: if name is not among known variants
+ """
+ spec = self.spec
+ args = []
+
+ if activation_value == 'prefix':
+ activation_value = lambda x: spec[x].prefix
+
+ # Defensively look that the name passed as argument is among
+ # variants
+ if name not in self.variants:
+ msg = '"{0}" is not a variant of "{1}"'
+ raise KeyError(msg.format(name, self.name))
+
+ # Create a list of pairs. Each pair includes a configuration
+ # option and whether or not that option is activated
+ if set(self.variants[name].values) == set((True, False)):
+ # BoolValuedVariant carry information about a single option.
+ # Nonetheless, for uniformity of treatment we'll package them
+ # in an iterable of one element.
+ condition = '+{name}'.format(name=name)
+ options = [(name, condition in spec)]
+ else:
+ condition = '{name}={value}'
+ options = [
+ (value, condition.format(name=name, value=value) in spec)
+ for value in self.variants[name].values
+ ]
+
+ # For each allowed value in the list of values
+ for option_value, activated in options:
+ # Search for an override in the package for this value
+ override_name = '{0}_or_{1}_{2}'.format(
+ activation_word, deactivation_word, option_value
+ )
+ line_generator = getattr(self, override_name, None)
+ # If not available use a sensible default
+ if line_generator is None:
+ def _default_generator(is_activated):
+ if is_activated:
+ line = '--{0}-{1}'.format(
+ activation_word, option_value
+ )
+ if activation_value is not None and activation_value(option_value): # NOQA=ignore=E501
+ line += '={0}'.format(
+ activation_value(option_value)
+ )
+ return line
+ return '--{0}-{1}'.format(deactivation_word, option_value)
+ line_generator = _default_generator
+ args.append(line_generator(activated))
+ return args
+
+ def with_or_without(self, name, activation_value=None):
+ """Inspects a variant and returns the arguments that activate
+ or deactivate the selected feature(s) for the configure options.
+
+ This function works on all type of variants. For bool-valued variants
+ it will return by default ``--with-{name}`` or ``--without-{name}``.
+ For other kinds of variants it will cycle over the allowed values and
+ return either ``--with-{value}`` or ``--without-{value}``.
+
+ If activation_value is given, then for each possible value of the
+ variant, the option ``--with-{value}=activation_value(value)`` or
+ ``--without-{value}`` will be added depending on whether or not
+ ``variant=value`` is in the spec.
+
+ Args:
+ name (str): name of a valid multi-valued variant
+ activation_value (callable): callable that accepts a single
+ value and returns the parameter to be used leading to an entry
+ of the type ``--with-{name}={parameter}``.
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Returns:
+ list of arguments to configure
+ """
+ return self._activate_or_not(name, 'with', 'without', activation_value)
+
+ def enable_or_disable(self, name, activation_value=None):
+ """Same as :py:meth:`~.AutotoolsPackage.with_or_without` but substitute
+ ``with`` with ``enable`` and ``without`` with ``disable``.
+
+ Args:
+ name (str): name of a valid multi-valued variant
+ activation_value (callable): if present accepts a single value
+ and returns the parameter to be used leading to an entry of the
+ type ``--enable-{name}={parameter}``
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Returns:
+ list of arguments to configure
+ """
+ return self._activate_or_not(
+ name, 'enable', 'disable', activation_value
+ )
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ def installcheck(self):
+ """Searches the Makefile for an ``installcheck`` target
+ and runs it if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('installcheck')
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/docs/tutorial/examples/Cmake/0.package.py b/lib/spack/docs/tutorial/examples/Cmake/0.package.py
new file mode 100644
index 0000000000..724b3fdf94
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Cmake/0.package.py
@@ -0,0 +1,60 @@
+##############################################################################
+# 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
+##############################################################################
+#
+# This is a template package file for Spack. We've put "FIXME"
+# next to all the things you'll want to change. Once you've handled
+# them, you can save this file and test your package like this:
+#
+# spack install callpath
+#
+# You can edit this file again by typing:
+#
+# spack edit callpath
+#
+# See the Spack documentation for more information on packaging.
+# If you submit this package back to Spack as a pull request,
+# please first remove this boilerplate and all FIXME comments.
+#
+from spack import *
+
+
+class Callpath(CMakePackage):
+ """FIXME: Put a proper description of your package here."""
+
+ # FIXME: Add a proper url for your package's homepage here.
+ homepage = "http://www.example.com"
+ url = "https://github.com/llnl/callpath/archive/v1.0.1.tar.gz"
+
+ version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')
+
+ # FIXME: Add dependencies if required.
+ # depends_on('foo')
+
+ def cmake_args(self):
+ # FIXME: Add arguments other than
+ # FIXME: CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE
+ # FIXME: If not needed delete this function
+ args = []
+ return args
diff --git a/lib/spack/docs/tutorial/examples/Cmake/1.package.py b/lib/spack/docs/tutorial/examples/Cmake/1.package.py
new file mode 100644
index 0000000000..dcb44260d2
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Cmake/1.package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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 Callpath(CMakePackage):
+ """Library for representing callpaths consistently in
+ distributed-memory performance tools."""
+
+ homepage = "https://github.com/llnl/callpath"
+ url = "https://github.com/llnl/callpath/archive/v1.0.3.tar.gz"
+
+ version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')
+
+ depends_on("elf", type="link")
+ depends_on("libdwarf")
+ depends_on("dyninst")
+ depends_on("adept-utils")
+ depends_on("mpi")
+ depends_on("cmake@2.8:", type="build")
diff --git a/lib/spack/docs/tutorial/examples/Cmake/2.package.py b/lib/spack/docs/tutorial/examples/Cmake/2.package.py
new file mode 100644
index 0000000000..126a841ce9
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Cmake/2.package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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 Callpath(CMakePackage):
+ """Library for representing callpaths consistently in
+ distributed-memory performance tools."""
+
+ homepage = "https://github.com/llnl/callpath"
+ url = "https://github.com/llnl/callpath/archive/v1.0.3.tar.gz"
+
+ version('1.0.3', 'c89089b3f1c1ba47b09b8508a574294a')
+
+ depends_on("elf", type="link")
+ depends_on("libdwarf")
+ depends_on("dyninst")
+ depends_on("adept-utils")
+ depends_on("mpi")
+ depends_on("cmake@2.8:", type="build")
+
+ def cmake_args(self):
+ args = ["-DCALLPATH_WALKER=dyninst"]
+
+ if self.spec.satisfies("^dyninst@9.3.0:"):
+ std.flag = self.compiler.cxx_flag
+ args.append("-DCMAKE_CXX_FLAGS='{0}' -fpermissive'".format(
+ std_flag))
+
+ return args
diff --git a/lib/spack/docs/tutorial/examples/Cmake/cmake_class.py b/lib/spack/docs/tutorial/examples/Cmake/cmake_class.py
new file mode 100644
index 0000000000..5b0f5526c9
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Cmake/cmake_class.py
@@ -0,0 +1,224 @@
+##############################################################################
+# 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
+##############################################################################
+
+import inspect
+import os
+import platform
+
+import spack.build_environment
+from llnl.util.filesystem import working_dir, join_path
+from spack.util.environment import filter_system_paths
+from spack.directives import depends_on, variant
+from spack.package import PackageBase, InstallError, run_after
+
+
+class CMakePackage(PackageBase):
+ """Specialized class for packages built using CMake
+
+ For more information on the CMake build system, see:
+ https://cmake.org/cmake/help/latest/
+
+ This class provides three phases that can be overridden:
+
+ 1. :py:meth:`~.CMakePackage.cmake`
+ 2. :py:meth:`~.CMakePackage.build`
+ 3. :py:meth:`~.CMakePackage.install`
+
+ They all have sensible defaults and for many packages the only thing
+ necessary will be to override :py:meth:`~.CMakePackage.cmake_args`.
+ For a finer tuning you may also override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:meth:`~.CMakePackage.root_cmakelists_dir` | Location of the |
+ | | root CMakeLists.txt|
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.CMakePackage.build_directory` | Directory where to |
+ | | build the package |
+ +-----------------------------------------------+--------------------+
+
+
+ """
+ #: Phases of a CMake package
+ phases = ['cmake', 'build', 'install']
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'CMakePackage'
+
+ build_targets = []
+ install_targets = ['install']
+
+ build_time_test_callbacks = ['check']
+
+ #: The build system generator to use.
+ #:
+ #: See ``cmake --help`` for a list of valid generators.
+ #: Currently, "Unix Makefiles" and "Ninja" are the only generators
+ #: that Spack supports. Defaults to "Unix Makefiles".
+ #:
+ #: See https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html
+ #: for more information.
+ generator = 'Unix Makefiles'
+
+ # https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
+ variant('build_type', default='RelWithDebInfo',
+ description='CMake build type',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
+
+ depends_on('cmake', type='build')
+
+ @property
+ def root_cmakelists_dir(self):
+ """The relative path to the directory containing CMakeLists.txt
+
+ This path is relative to the root of the extracted tarball,
+ not to the ``build_directory``. Defaults to the current directory.
+
+ :return: directory containing CMakeLists.txt
+ """
+ return self.stage.source_path
+
+ @property
+ def std_cmake_args(self):
+ """Standard cmake arguments provided as a property for
+ convenience of package writers
+
+ :return: standard cmake arguments
+ """
+ # standard CMake arguments
+ return CMakePackage._std_args(self)
+
+ @staticmethod
+ def _std_args(pkg):
+ """Computes the standard cmake arguments for a generic package"""
+ try:
+ generator = pkg.generator
+ except AttributeError:
+ generator = 'Unix Makefiles'
+
+ # Make sure a valid generator was chosen
+ valid_generators = ['Unix Makefiles', 'Ninja']
+ if generator not in valid_generators:
+ msg = "Invalid CMake generator: '{0}'\n".format(generator)
+ msg += "CMakePackage currently supports the following "
+ msg += "generators: '{0}'".format("', '".join(valid_generators))
+ raise InstallError(msg)
+
+ try:
+ build_type = pkg.spec.variants['build_type'].value
+ except KeyError:
+ build_type = 'RelWithDebInfo'
+
+ args = [
+ '-G', generator,
+ '-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(pkg.prefix),
+ '-DCMAKE_BUILD_TYPE:STRING={0}'.format(build_type),
+ '-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON'
+ ]
+
+ if platform.mac_ver()[0]:
+ args.append('-DCMAKE_FIND_FRAMEWORK:STRING=LAST')
+
+ # Set up CMake rpath
+ args.append('-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=FALSE')
+ rpaths = ':'.join(spack.build_environment.get_rpaths(pkg))
+ args.append('-DCMAKE_INSTALL_RPATH:STRING={0}'.format(rpaths))
+ # CMake's find_package() looks in CMAKE_PREFIX_PATH first, help CMake
+ # to find immediate link dependencies in right places:
+ deps = [d.prefix for d in
+ pkg.spec.dependencies(deptype=('build', 'link'))]
+ deps = filter_system_paths(deps)
+ args.append('-DCMAKE_PREFIX_PATH:STRING={0}'.format(';'.join(deps)))
+ return args
+
+ @property
+ def build_directory(self):
+ """Returns the directory to use when building the package
+
+ :return: directory where to build the package
+ """
+ return join_path(self.stage.source_path, 'spack-build')
+
+ def default_flag_handler(self, spack_env, flag_val):
+ # Relies on being the first thing that can affect the spack_env
+ # EnvironmentModification after it is instantiated or no other
+ # method trying to affect these variables. Currently both are true
+ # flag_val is a tuple (flag, value_list)
+ spack_env.set(flag_val[0].upper(),
+ ' '.join(flag_val[1]))
+ return []
+
+ def cmake_args(self):
+ """Produces a list containing all the arguments that must be passed to
+ cmake, except:
+
+ * CMAKE_INSTALL_PREFIX
+ * CMAKE_BUILD_TYPE
+
+ which will be set automatically.
+
+ :return: list of arguments for cmake
+ """
+ return []
+
+ def cmake(self, spec, prefix):
+ """Runs ``cmake`` in the build directory"""
+ options = [os.path.abspath(self.root_cmakelists_dir)]
+ options += self.std_cmake_args
+ options += self.cmake_args()
+ with working_dir(self.build_directory, create=True):
+ inspect.getmodule(self).cmake(*options)
+
+ def build(self, spec, prefix):
+ """Make the build targets"""
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ inspect.getmodule(self).make(*self.build_targets)
+ elif self.generator == 'Ninja':
+ inspect.getmodule(self).ninja(*self.build_targets)
+
+ def install(self, spec, prefix):
+ """Make the install targets"""
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ inspect.getmodule(self).make(*self.install_targets)
+ elif self.generator == 'Ninja':
+ inspect.getmodule(self).ninja(*self.install_targets)
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def check(self):
+ """Searches the CMake-generated Makefile for the target ``test``
+ and runs it if found.
+ """
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ self._if_make_target_execute('test')
+ elif self.generator == 'Ninja':
+ self._if_ninja_target_execute('test')
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/docs/tutorial/examples/Makefile/0.package.py b/lib/spack/docs/tutorial/examples/Makefile/0.package.py
new file mode 100644
index 0000000000..641b6ccb8f
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Makefile/0.package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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 Bowtie(MakefilePackage):
+ """FIXME: Put a proper description of your package here."""
+
+ # FIXME: Add a proper url for your package's homepage here.
+ homepage = "http://www.example.com"
+ url = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"
+
+ version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')
+
+ # FIXME: Add dependencies if required.
+ # depends_on('foo')
+
+ def edit(self, spec, prefix):
+ # FIXME: Edit the Makefile if necessary
+ # FIXME: If not needed delete this function
+ # makefile = FileFilter('Makefile')
+ # makefile.filter('CC = .*', 'CC = cc')
+ return
diff --git a/lib/spack/docs/tutorial/examples/Makefile/1.package.py b/lib/spack/docs/tutorial/examples/Makefile/1.package.py
new file mode 100644
index 0000000000..709bc71afa
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Makefile/1.package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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 Bowtie(MakefilePackage):
+ """Bowtie is an ultrafast, memory efficient short read aligner
+ for short DNA sequences (reads) from next-gen sequencers."""
+
+ homepage = "https://sourceforge.net/projects/bowtie-bio/"
+ url = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"
+
+ version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')
+
+ variant("tbb", default=False, description="Use Intel thread building block")
+
+ depends_on("tbb", when="+tbb")
+
+ def edit(self, spec, prefix):
+ # FIXME: Edit the Makefile if necessary
+ # FIXME: If not needed delete this function
+ # makefile = FileFilter('Makefile')
+ # makefile.filter('CC = .*', 'CC = cc')
+ return
diff --git a/lib/spack/docs/tutorial/examples/Makefile/2.package.py b/lib/spack/docs/tutorial/examples/Makefile/2.package.py
new file mode 100644
index 0000000000..10aba473e3
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Makefile/2.package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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 Bowtie(MakefilePackage):
+ """Bowtie is an ultrafast, memory efficient short read aligner
+ for short DNA sequences (reads) from next-gen sequencers."""
+
+ homepage = "https://sourceforge.net/projects/bowtie-bio/"
+ url = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"
+
+ version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')
+
+ variant("tbb", default=False, description="Use Intel thread building block")
+
+ depends_on("tbb", when="+tbb")
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter("Makefile")
+ makefile.filter('CC= .*', 'CC = ' + env['CC'])
+ makefile.filter('CXX = .*', 'CXX = ' + env['CXX'])
diff --git a/lib/spack/docs/tutorial/examples/Makefile/3.package.py b/lib/spack/docs/tutorial/examples/Makefile/3.package.py
new file mode 100644
index 0000000000..269ab2c454
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Makefile/3.package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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 Bowtie(MakefilePackage):
+ """Bowtie is an ultrafast, memory efficient short read aligner
+ for short DNA sequences (reads) from next-gen sequencers."""
+
+ homepage = "https://sourceforge.net/projects/bowtie-bio/"
+ url = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip"
+
+ version('1.2.1.1', 'ec06265730c5f587cd58bcfef6697ddf')
+
+ variant("tbb", default=False, description="Use Intel thread building block")
+
+ depends_on("tbb", when="+tbb")
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter("Makefile")
+ makefile.filter('CC= .*', 'CC = ' + env['CC'])
+ makefile.filter('CXX = .*', 'CXX = ' + env['CXX'])
+
+ def build(self, spec, prefix):
+ if "+tbb" in spec:
+ make()
+ else:
+ make("NO_TBB=1")
+
+ def install(self, spec, prefix):
+ make('prefix={0}'.format(self.prefix), 'install')
diff --git a/lib/spack/docs/tutorial/examples/Makefile/makefile_class.py b/lib/spack/docs/tutorial/examples/Makefile/makefile_class.py
new file mode 100644
index 0000000000..5ffb88f43d
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/Makefile/makefile_class.py
@@ -0,0 +1,129 @@
+##############################################################################
+# 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
+##############################################################################
+
+import inspect
+
+import llnl.util.tty as tty
+from llnl.util.filesystem import working_dir
+from spack.package import PackageBase, run_after
+
+
+class MakefilePackage(PackageBase):
+ """Specialized class for packages that are built using editable Makefiles
+
+ This class provides three phases that can be overridden:
+
+ 1. :py:meth:`~.MakefilePackage.edit`
+ 2. :py:meth:`~.MakefilePackage.build`
+ 3. :py:meth:`~.MakefilePackage.install`
+
+ It is usually necessary to override the :py:meth:`~.MakefilePackage.edit`
+ phase, while :py:meth:`~.MakefilePackage.build` and
+ :py:meth:`~.MakefilePackage.install` have sensible defaults.
+ For a finer tuning you may override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:attr:`~.MakefilePackage.build_targets` | Specify ``make`` |
+ | | targets for the |
+ | | build phase |
+ +-----------------------------------------------+--------------------+
+ | :py:attr:`~.MakefilePackage.install_targets` | Specify ``make`` |
+ | | targets for the |
+ | | install phase |
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.MakefilePackage.build_directory` | Directory where the|
+ | | Makefile is located|
+ +-----------------------------------------------+--------------------+
+ """
+ #: Phases of a package that is built with an hand-written Makefile
+ phases = ['edit', 'build', 'install']
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'MakefilePackage'
+
+ #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.build`
+ #: phase
+ build_targets = []
+ #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.install`
+ #: phase
+ install_targets = ['install']
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['installcheck']
+
+ @property
+ def build_directory(self):
+ """Returns the directory containing the main Makefile
+
+ :return: build directory
+ """
+ return self.stage.source_path
+
+ def edit(self, spec, prefix):
+ """Edits the Makefile before calling make. This phase cannot
+ be defaulted.
+ """
+ tty.msg('Using default implementation: skipping edit phase.')
+
+ def build(self, spec, prefix):
+ """Calls make, passing :py:attr:`~.MakefilePackage.build_targets`
+ as targets.
+ """
+ with working_dir(self.build_directory):
+ inspect.getmodule(self).make(*self.build_targets)
+
+ def install(self, spec, prefix):
+ """Calls make, passing :py:attr:`~.MakefilePackage.install_targets`
+ as targets.
+ """
+ with working_dir(self.build_directory):
+ inspect.getmodule(self).make(*self.install_targets)
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def check(self):
+ """Searches the Makefile for targets ``test`` and ``check``
+ and runs them if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('test')
+ self._if_make_target_execute('check')
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ def installcheck(self):
+ """Searches the Makefile for an ``installcheck`` target
+ and runs it if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('installcheck')
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/docs/tutorial/examples/PyPackage/0.package.py b/lib/spack/docs/tutorial/examples/PyPackage/0.package.py
new file mode 100644
index 0000000000..48114075a7
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/PyPackage/0.package.py
@@ -0,0 +1,60 @@
+##############################################################################
+# 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
+##############################################################################
+#
+# This is a template package file for Spack. We've put "FIXME"
+# next to all the things you'll want to change. Once you've handled
+# them, you can save this file and test your package like this:
+#
+# spack install py-pandas
+#
+# You can edit this file again by typing:
+#
+# spack edit py-pandas
+#
+# See the Spack documentation for more information on packaging.
+# If you submit this package back to Spack as a pull request,
+# please first remove this boilerplate and all FIXME comments.
+#
+from spack import *
+
+
+class PyPandas(PythonPackage):
+ """FIXME: Put a proper description of your package here."""
+
+ # FIXME: Add a proper url for your package's homepage here.
+ homepage = "http://www.example.com"
+ url = "https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz"
+
+ version('0.19.0', 'bc9bb7188e510b5d44fbdd249698a2c3')
+
+ # FIXME: Add dependencies if required.
+ # depends_on('py-setuptools', type='build')
+ # depends_on('py-foo', type=('build', 'run'))
+
+ def build_args(self, spec, prefix):
+ # FIXME: Add arguments other than --prefix
+ # FIXME: If not needed delete this function
+ args = []
+ return args
diff --git a/lib/spack/docs/tutorial/examples/PyPackage/1.package.py b/lib/spack/docs/tutorial/examples/PyPackage/1.package.py
new file mode 100644
index 0000000000..a9cbff00e2
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/PyPackage/1.package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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 PyPandas(PythonPackage):
+ """pandas is a Python package providing fast, flexible, and expressive
+ data structures designed to make working with relational or
+ labeled data both easy and intuitive. It aims to be the
+ fundamental high-level building block for doing practical, real
+ world data analysis in Python. Additionally, it has the broader
+ goal of becoming the most powerful and flexible open source data
+ analysis / manipulation tool available in any language.
+ """
+ homepage = "http://pandas.pydata.org/"
+ url = "https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz"
+
+ version('0.19.0', 'bc9bb7188e510b5d44fbdd249698a2c3')
+ version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6')
+ version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
+ version('0.16.0', 'bfe311f05dc0c351f8955fbd1e296e73')
+
+ depends_on('py-dateutil', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-pytz', type=('build', 'run'))
+ depends_on('py-numexpr', type=('build', 'run'))
+ depends_on('py-bottleneck', type=('build', 'run'))
diff --git a/lib/spack/docs/tutorial/examples/PyPackage/python_package_class.py b/lib/spack/docs/tutorial/examples/PyPackage/python_package_class.py
new file mode 100644
index 0000000000..190620d7a2
--- /dev/null
+++ b/lib/spack/docs/tutorial/examples/PyPackage/python_package_class.py
@@ -0,0 +1,399 @@
+##############################################################################
+# 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
+##############################################################################
+
+import inspect
+import os
+
+from spack.directives import depends_on, extends
+from spack.package import PackageBase, run_after
+
+from llnl.util.filesystem import working_dir
+
+
+class PythonPackage(PackageBase):
+ """Specialized class for packages that are built using Python
+ setup.py files
+
+ This class provides the following phases that can be overridden:
+
+ * build
+ * build_py
+ * build_ext
+ * build_clib
+ * build_scripts
+ * clean
+ * install
+ * install_lib
+ * install_headers
+ * install_scripts
+ * install_data
+ * sdist
+ * register
+ * bdist
+ * bdist_dumb
+ * bdist_rpm
+ * bdist_wininst
+ * upload
+ * check
+
+ These are all standard setup.py commands and can be found by running:
+
+ .. code-block:: console
+
+ $ python setup.py --help-commands
+
+ By default, only the 'build' and 'install' phases are run, but if you
+ need to run more phases, simply modify your ``phases`` list like so:
+
+ .. code-block:: python
+
+ phases = ['build_ext', 'install', 'bdist']
+
+ Each phase provides a function <phase> that runs:
+
+ .. code-block:: console
+
+ $ python setup.py --no-user-cfg <phase>
+
+ Each phase also has a <phase_args> function that can pass arguments to
+ this call. All of these functions are empty except for the ``install_args``
+ function, which passes ``--prefix=/path/to/installation/directory``.
+
+ If you need to run a phase which is not a standard setup.py command,
+ you'll need to define a function for it like so:
+
+ .. code-block:: python
+
+ def configure(self, spec, prefix):
+ self.setup_py('configure')
+ """
+ # Default phases
+ phases = ['build', 'install']
+
+ # Name of modules that the Python package provides
+ # This is used to test whether or not the installation succeeded
+ # These names generally come from running:
+ #
+ # >>> import setuptools
+ # >>> setuptools.find_packages()
+ #
+ # in the source tarball directory
+ import_modules = []
+
+ # To be used in UI queries that require to know which
+ # build-system class we are using
+ build_system_class = 'PythonPackage'
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['test']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['import_module_test']
+
+ extends('python')
+
+ depends_on('python', type=('build', 'run'))
+
+ def setup_file(self):
+ """Returns the name of the setup file to use."""
+ return 'setup.py'
+
+ @property
+ def build_directory(self):
+ """The directory containing the ``setup.py`` file."""
+ return self.stage.source_path
+
+ def python(self, *args, **kwargs):
+ inspect.getmodule(self).python(*args, **kwargs)
+
+ def setup_py(self, *args, **kwargs):
+ setup = self.setup_file()
+
+ with working_dir(self.build_directory):
+ self.python(setup, '--no-user-cfg', *args, **kwargs)
+
+ def _setup_command_available(self, command):
+ """Determines whether or not a setup.py command exists.
+
+ Args:
+ command (str): The command to look for
+
+ Returns:
+ bool: True if the command is found, else False
+ """
+ kwargs = {
+ 'output': os.devnull,
+ 'error': os.devnull,
+ 'fail_on_error': False
+ }
+
+ python = inspect.getmodule(self).python
+ setup = self.setup_file()
+
+ python(setup, '--no-user-cfg', command, '--help', **kwargs)
+ return python.returncode == 0
+
+ # The following phases and their descriptions come from:
+ # $ python setup.py --help-commands
+
+ # Standard commands
+
+ def build(self, spec, prefix):
+ """Build everything needed to install."""
+ args = self.build_args(spec, prefix)
+
+ self.setup_py('build', *args)
+
+ def build_args(self, spec, prefix):
+ """Arguments to pass to build."""
+ return []
+
+ def build_py(self, spec, prefix):
+ '''"Build" pure Python modules (copy to build directory).'''
+ args = self.build_py_args(spec, prefix)
+
+ self.setup_py('build_py', *args)
+
+ def build_py_args(self, spec, prefix):
+ """Arguments to pass to build_py."""
+ return []
+
+ def build_ext(self, spec, prefix):
+ """Build C/C++ extensions (compile/link to build directory)."""
+ args = self.build_ext_args(spec, prefix)
+
+ self.setup_py('build_ext', *args)
+
+ def build_ext_args(self, spec, prefix):
+ """Arguments to pass to build_ext."""
+ return []
+
+ def build_clib(self, spec, prefix):
+ """Build C/C++ libraries used by Python extensions."""
+ args = self.build_clib_args(spec, prefix)
+
+ self.setup_py('build_clib', *args)
+
+ def build_clib_args(self, spec, prefix):
+ """Arguments to pass to build_clib."""
+ return []
+
+ def build_scripts(self, spec, prefix):
+ '''"Build" scripts (copy and fixup #! line).'''
+ args = self.build_scripts_args(spec, prefix)
+
+ self.setup_py('build_scripts', *args)
+
+ def clean(self, spec, prefix):
+ """Clean up temporary files from 'build' command."""
+ args = self.clean_args(spec, prefix)
+
+ self.setup_py('clean', *args)
+
+ def clean_args(self, spec, prefix):
+ """Arguments to pass to clean."""
+ return []
+
+ def install(self, spec, prefix):
+ """Install everything from build directory."""
+ args = self.install_args(spec, prefix)
+
+ self.setup_py('install', *args)
+
+ def install_args(self, spec, prefix):
+ """Arguments to pass to install."""
+ args = ['--prefix={0}'.format(prefix)]
+
+ # This option causes python packages (including setuptools) NOT
+ # to create eggs or easy-install.pth files. Instead, they
+ # install naturally into $prefix/pythonX.Y/site-packages.
+ #
+ # Eggs add an extra level of indirection to sys.path, slowing
+ # down large HPC runs. They are also deprecated in favor of
+ # wheels, which use a normal layout when installed.
+ #
+ # Spack manages the package directory on its own by symlinking
+ # extensions into the site-packages directory, so we don't really
+ # need the .pth files or egg directories, anyway.
+ if ('py-setuptools' == spec.name or # this is setuptools, or
+ 'py-setuptools' in spec._dependencies): # it's an immediate dep
+ args += ['--single-version-externally-managed', '--root=/']
+
+ return args
+
+ def install_lib(self, spec, prefix):
+ """Install all Python modules (extensions and pure Python)."""
+ args = self.install_lib_args(spec, prefix)
+
+ self.setup_py('install_lib', *args)
+
+ def install_lib_args(self, spec, prefix):
+ """Arguments to pass to install_lib."""
+ return []
+
+ def install_headers(self, spec, prefix):
+ """Install C/C++ header files."""
+ args = self.install_headers_args(spec, prefix)
+
+ self.setup_py('install_headers', *args)
+
+ def install_headers_args(self, spec, prefix):
+ """Arguments to pass to install_headers."""
+ return []
+
+ def install_scripts(self, spec, prefix):
+ """Install scripts (Python or otherwise)."""
+ args = self.install_scripts_args(spec, prefix)
+
+ self.setup_py('install_scripts', *args)
+
+ def install_scripts_args(self, spec, prefix):
+ """Arguments to pass to install_scripts."""
+ return []
+
+ def install_data(self, spec, prefix):
+ """Install data files."""
+ args = self.install_data_args(spec, prefix)
+
+ self.setup_py('install_data', *args)
+
+ def install_data_args(self, spec, prefix):
+ """Arguments to pass to install_data."""
+ return []
+
+ def sdist(self, spec, prefix):
+ """Create a source distribution (tarball, zip file, etc.)."""
+ args = self.sdist_args(spec, prefix)
+
+ self.setup_py('sdist', *args)
+
+ def sdist_args(self, spec, prefix):
+ """Arguments to pass to sdist."""
+ return []
+
+ def register(self, spec, prefix):
+ """Register the distribution with the Python package index."""
+ args = self.register_args(spec, prefix)
+
+ self.setup_py('register', *args)
+
+ def register_args(self, spec, prefix):
+ """Arguments to pass to register."""
+ return []
+
+ def bdist(self, spec, prefix):
+ """Create a built (binary) distribution."""
+ args = self.bdist_args(spec, prefix)
+
+ self.setup_py('bdist', *args)
+
+ def bdist_args(self, spec, prefix):
+ """Arguments to pass to bdist."""
+ return []
+
+ def bdist_dumb(self, spec, prefix):
+ '''Create a "dumb" built distribution.'''
+ args = self.bdist_dumb_args(spec, prefix)
+
+ self.setup_py('bdist_dumb', *args)
+
+ def bdist_dumb_args(self, spec, prefix):
+ """Arguments to pass to bdist_dumb."""
+ return []
+
+ def bdist_rpm(self, spec, prefix):
+ """Create an RPM distribution."""
+ args = self.bdist_rpm(spec, prefix)
+
+ self.setup_py('bdist_rpm', *args)
+
+ def bdist_rpm_args(self, spec, prefix):
+ """Arguments to pass to bdist_rpm."""
+ return []
+
+ def bdist_wininst(self, spec, prefix):
+ """Create an executable installer for MS Windows."""
+ args = self.bdist_wininst_args(spec, prefix)
+
+ self.setup_py('bdist_wininst', *args)
+
+ def bdist_wininst_args(self, spec, prefix):
+ """Arguments to pass to bdist_wininst."""
+ return []
+
+ def upload(self, spec, prefix):
+ """Upload binary package to PyPI."""
+ args = self.upload_args(spec, prefix)
+
+ self.setup_py('upload', *args)
+
+ def upload_args(self, spec, prefix):
+ """Arguments to pass to upload."""
+ return []
+
+ def check(self, spec, prefix):
+ """Perform some checks on the package."""
+ args = self.check_args(spec, prefix)
+
+ self.setup_py('check', *args)
+
+ def check_args(self, spec, prefix):
+ """Arguments to pass to check."""
+ return []
+
+ # Testing
+
+ def test(self):
+ """Run unit tests after in-place build.
+
+ These tests are only run if the package actually has a 'test' command.
+ """
+ if self._setup_command_available('test'):
+ args = self.test_args(self.spec, self.prefix)
+
+ self.setup_py('test', *args)
+
+ def test_args(self, spec, prefix):
+ """Arguments to pass to test."""
+ return []
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def import_module_test(self):
+ """Attempts to import the module that was just installed.
+
+ This test is only run if the package overrides
+ :py:attr:`import_modules` with a list of module names."""
+
+ # Make sure we are importing the installed modules,
+ # not the ones in the current directory
+ with working_dir('..'):
+ for module in self.import_modules:
+ self.python('-c', 'import {0}'.format(module))
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/docs/tutorial_advanced_packaging.rst b/lib/spack/docs/tutorial_advanced_packaging.rst
new file mode 100644
index 0000000000..901e75bfd7
--- /dev/null
+++ b/lib/spack/docs/tutorial_advanced_packaging.rst
@@ -0,0 +1,563 @@
+.. _advanced-packaging-tutorial:
+
+============================
+Advanced Topics in Packaging
+============================
+
+While you can quickly accomplish most common tasks with what
+was covered in :ref:`packaging-tutorial`, there are times when such
+knowledge won't suffice. Usually this happens for libraries that provide
+more than one API and need to let dependents decide which one to use
+or for packages that provide tools that are invoked at build-time,
+or in other similar situations.
+
+In the following we'll dig into some of the details of package
+implementation that help us deal with these rare, but important,
+occurrences. You can rest assured that in every case Spack remains faithful to
+its philosophy: keep simple things simple, but be flexible enough when
+complex requests arise!
+
+----------------------
+Setup for the tutorial
+----------------------
+
+The simplest way to follow along with this tutorial is to use our Docker image,
+which comes with Spack and various packages pre-installed:
+
+.. code-block:: console
+
+ $ docker pull alalazo/spack:advanced_packaging_tutorial
+ $ docker run --rm -h advanced-packaging-tutorial -it alalazo/spack:advanced_packaging_tutorial
+ root@advanced-packaging-tutorial:/#
+ root@advanced-packaging-tutorial:/# spack find
+ ==> 20 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ arpack-ng@3.5.0 hdf5@1.10.1 libpciaccess@0.13.5 libtool@2.4.6 m4@1.4.18 ncurses@6.0 openblas@0.2.20 openssl@1.0.2k superlu@5.2.1 xz@5.2.3
+ cmake@3.9.4 hwloc@1.11.8 libsigsegv@2.11 libxml2@2.9.4 mpich@3.2 netlib-lapack@3.6.1 openmpi@3.0.0 pkg-config@0.29.2 util-macros@1.19.1 zlib@1.2.11
+
+If you already started the image, you can set the ``EDITOR`` environment
+variable to your preferred editor (``vi``, ``emacs``, and ``nano`` are included in the image)
+and move directly to :ref:`specs_build_interface_tutorial`.
+
+If you choose not to use the Docker image, you can clone the Spack repository
+and build the necessary bits yourself:
+
+.. code-block:: console
+
+ $ git clone https://github.com/spack/spack.git
+ Cloning into 'spack'...
+ remote: Counting objects: 92731, done.
+ remote: Compressing objects: 100% (1108/1108), done.
+ remote: Total 92731 (delta 1964), reused 4186 (delta 1637), pack-reused 87932
+ Receiving objects: 100% (92731/92731), 33.31 MiB | 64.00 KiB/s, done.
+ Resolving deltas: 100% (43557/43557), done.
+ Checking connectivity... done.
+
+ $ cd spack
+ $ git checkout tutorials/advanced_packaging
+ Branch tutorials/advanced_packaging set up to track remote branch tutorials/advanced_packaging from origin.
+ Switched to a new branch 'tutorials/advanced_packaging'
+
+At this point you can install the software that will be used
+during the rest of the tutorial (the output of the commands is omitted
+for the sake of brevity):
+
+.. code-block:: console
+
+ $ spack install openblas
+ $ spack install netlib-lapack
+ $ spack install mpich
+ $ spack install openmpi
+ $ spack install --only=dependencies armadillo ^openblas
+ $ spack install --only=dependencies netcdf
+ $ spack install --only=dependencies elpa
+
+Now, you are ready to set your preferred ``EDITOR`` and continue with
+the rest of the tutorial.
+
+
+.. _specs_build_interface_tutorial:
+
+----------------------
+Spec's build interface
+----------------------
+
+Spack is designed with an emphasis on assigning responsibilities
+to the appropriate entities, as this results in a clearer and more intuitive interface
+for the users.
+When it comes to packaging, one of the most fundamental guideline that
+emerged from this tenet is that:
+
+ *It is a package's responsibility to know
+ every software it directly depends on and to expose to others how to
+ use the services it provides*.
+
+Spec's build interface is a protocol-like implementation of this guideline
+that allows packages to easily query their dependencies,
+and prescribes how they should expose their own build information.
+
+^^^^^^^^^^^^^^^^^^^^
+A motivating example
+^^^^^^^^^^^^^^^^^^^^
+
+We've started work on a package for ``armadillo``. You should open it,
+read through the comment that starts with ``# TUTORIAL:`` and complete
+the ``cmake_args`` section:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit armadillo
+
+If you followed the instructions in the package, when you are finished your
+``cmake_args`` method should look like:
+
+.. code-block:: python
+
+ def cmake_args(self):
+ spec = self.spec
+
+ return [
+ # ARPACK support
+ '-DARPACK_LIBRARY={0}'.format(spec['arpack-ng'].libs.joined(";")),
+ # BLAS support
+ '-DBLAS_LIBRARY={0}'.format(spec['blas'].libs.joined(";")),
+ # LAPACK support
+ '-DLAPACK_LIBRARY={0}'.format(spec['lapack'].libs.joined(";")),
+ # SuperLU support
+ '-DSuperLU_INCLUDE_DIR={0}'.format(spec['superlu'].prefix.include),
+ '-DSuperLU_LIBRARY={0}'.format(spec['superlu'].libs.joined(";")),
+ # HDF5 support
+ '-DDETECT_HDF5={0}'.format('ON' if '+hdf5' in spec else 'OFF')
+ ]
+
+As you can see, getting the list of libraries that your dependencies provide
+is as easy as accessing the their ``libs`` attribute. Furthermore, the interface
+remains the same whether you are querying regular or virtual dependencies.
+
+At this point you can complete the installation of ``armadillo`` using ``openblas``
+as a LAPACK provider:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install armadillo ^openblas
+ ==> pkg-config is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ...
+ ==> superlu is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-5.2.1-q2mbtw2wo4kpzis2e2n227ip2fquxrno
+ ==> Installing armadillo
+ ==> Using cached archive: /usr/local/var/spack/cache/armadillo/armadillo-8.100.1.tar.xz
+ ==> Staging archive: /usr/local/var/spack/stage/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4/armadillo-8.100.1.tar.xz
+ ==> Created stage in /usr/local/var/spack/stage/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4
+ ==> Applied patch undef_linux.patch
+ ==> Building armadillo [CMakePackage]
+ ==> Executing phase: 'cmake'
+ ==> Executing phase: 'build'
+ ==> Executing phase: 'install'
+ ==> Successfully installed armadillo
+ Fetch: 0.01s. Build: 3.96s. Total: 3.98s.
+ [+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/armadillo-8.100.1-n2eojtazxbku6g4l5izucwwgnpwz77r4
+
+Hopefully the installation went fine and the code we added expanded to the right list
+of semicolon separated libraries (you are encouraged to open ``armadillo``'s
+build logs to double check).
+
+If we try to build another version tied to ``netlib-lapack`` we'll
+notice that this time the installation won't complete:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install armadillo ^netlib-lapack
+ ==> pkg-config is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ...
+ ==> openmpi is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f
+ ==> Installing arpack-ng
+ ==> Using cached archive: /usr/local/var/spack/cache/arpack-ng/arpack-ng-3.5.0.tar.gz
+ ==> Already staged arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un in /usr/local/var/spack/stage/arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un
+ ==> No patches needed for arpack-ng
+ ==> Building arpack-ng [Package]
+ ==> Executing phase: 'install'
+ ==> Error: RuntimeError: Unable to recursively locate netlib-lapack libraries in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-lapack-3.6.1-jjfe23wgt7nkjnp2adeklhseg3ftpx6z
+ RuntimeError: RuntimeError: Unable to recursively locate netlib-lapack libraries in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-lapack-3.6.1-jjfe23wgt7nkjnp2adeklhseg3ftpx6z
+
+ /usr/local/var/spack/repos/builtin/packages/arpack-ng/package.py:105, in install:
+ 5 options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
+ 6
+ 7 # Make sure we use Spack's blas/lapack:
+ >> 8 lapack_libs = spec['lapack'].libs.joined(';')
+ 9 blas_libs = spec['blas'].libs.joined(';')
+ 10
+ 11 options.extend([
+
+ See build log for details:
+ /usr/local/var/spack/stage/arpack-ng-3.5.0-bloz7cqirpdxj33pg7uj32zs5likz2un/arpack-ng-3.5.0/spack-build.out
+
+This is because ``netlib-lapack`` requires extra work, compared to ``openblas``,
+to expose its build information to other packages. Let's edit it:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit netlib-lapack
+
+and follow the instructions in the ``# TUTORIAL:`` comment as before.
+What we need to implement is:
+
+.. code-block:: python
+
+ @property
+ def lapack_libs(self):
+ shared = True if '+shared' in self.spec else False
+ return find_libraries(
+ 'liblapack', root=self.prefix, shared=shared, recurse=True
+ )
+
+i.e. a property that returns the correct list of libraries for the LAPACK interface.
+Now we can finally install ``armadillo ^netlib-lapack``:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install armadillo ^netlib-lapack
+ ...
+
+ ==> Building armadillo [CMakePackage]
+ ==> Executing phase: 'cmake'
+ ==> Executing phase: 'build'
+ ==> Executing phase: 'install'
+ ==> Successfully installed armadillo
+ Fetch: 0.01s. Build: 3.75s. Total: 3.76s.
+ [+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/armadillo-8.100.1-sxmpu5an4dshnhickh6ykchyfda7jpyn
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+What happens at subscript time?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The example above leaves us with a few questions. How could it be that the
+attribute:
+
+.. code-block:: python
+
+ spec['lapack'].libs
+
+stems from a property of the ``netlib-lapack`` package that has a different name?
+How is it even computed for ``openblas``, given that in its package there's no code
+that deals with finding libraries?
+The answer is that ``libs`` is one of the few properties of specs that follow the
+*build-interface protocol*. The others are currently ``command`` and ``headers``.
+These properties exist only on concrete specs that have been retrieved via the
+subscript notation.
+
+What happens is that, whenever you retrieve a spec using subscripts:
+
+.. code-block:: python
+
+ lapack = spec['lapack']
+
+the key that appears in the query (in this case ``'lapack'``) is attached to the
+returned item. When, later on, you access any of the build-interface attributes, this
+key is used to compute the result according to the following algorithm:
+
+.. code-block:: none
+
+ Given any pair of <query-key> and <build-attribute>:
+
+ 1. If <query-key> is the name of a virtual spec and the package
+ providing it has an attribute named '<query-key>_<build-attribute>'
+ return it
+
+ 2. Otherwise if the package has an attribute named '<build-attribute>'
+ return that
+
+ 3. Otherwise use the default handler for <build-attribute>
+
+Going back to our concrete case this means that, if the spec providing LAPACK
+is ``netlib-lapack``, we are returning the value computed in the ``lapack_libs``
+property. If it is ``openblas``, we are instead resorting to the default handler
+for ``libs`` (which searches for the presence of ``libopenblas`` in the
+installation prefix).
+
+.. note::
+
+ Types commonly returned by build-interface attributes
+ Even though there's no enforcement on it, the type of the objects returned most often when
+ asking for the ``libs`` attributes is :py:class:`LibraryList <llnl.util.filesystem.LibraryList>`.
+ Similarly the usual type returned for ``headers`` is :py:class:`HeaderList <llnl.util.filesystem.HeaderList>`,
+ while for ``command`` is :py:class:`Executable <spack.util.executable.Executable>`. You can refer to
+ these objects' API documentation to discover more about them.
+
+^^^^^^^^^^^^^^^^^^^^^^^
+Extra query parameters
+^^^^^^^^^^^^^^^^^^^^^^^
+
+An advanced feature of the Spec's build-interface protocol is the support
+for extra parameters after the subscript key. In fact, any of the keys used in the query
+can be followed by a comma separated list of extra parameters which can be
+inspected by the package receiving the request to fine-tune a response.
+
+Let's look at an example and try to install ``netcdf``:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install netcdf
+ ==> libsigsegv is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> m4 is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ...
+ ==> Error: AttributeError: 'list' object has no attribute 'search_flags'
+ AttributeError: AttributeError: 'list' object has no attribute 'search_flags'
+
+ /usr/local/var/spack/repos/builtin/packages/netcdf/package.py:207, in configure_args:
+ 50 # used instead.
+ 51 hdf5_hl = self.spec['hdf5:hl']
+ 52 CPPFLAGS.append(hdf5_hl.headers.cpp_flags)
+ >> 53 LDFLAGS.append(hdf5_hl.libs.search_flags)
+ 54
+ 55 if '+parallel-netcdf' in self.spec:
+ 56 config_args.append('--enable-pnetcdf')
+
+ See build log for details:
+ /usr/local/var/spack/stage/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj/netcdf-4.4.1.1/spack-build.out
+
+We can see from the error that ``netcdf`` needs to know how to link the *high-level interface*
+of ``hdf5``, and thus passes the extra parameter ``hl`` after the request to retrieve it.
+Clearly the implementation in the ``hdf5`` package is not complete, and we need to fix it:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit hdf5
+
+If you followed the instructions correctly, the code added to the
+``lib`` property should be similar to:
+
+.. code-block:: python
+ :emphasize-lines: 1
+
+ query_parameters = self.spec.last_query.extra_parameters
+ key = tuple(sorted(query_parameters))
+ libraries = query2libraries[key]
+ shared = '+shared' in self.spec
+ return find_libraries(
+ libraries, root=self.prefix, shared=shared, recurse=True
+ )
+
+where we highlighted the line retrieving the extra parameters. Now we can successfully
+complete the installation of ``netcdf``:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install netcdf
+ ==> libsigsegv is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> m4 is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ...
+ ==> Installing netcdf
+ ==> Using cached archive: /usr/local/var/spack/cache/netcdf/netcdf-4.4.1.1.tar.gz
+ ==> Already staged netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj in /usr/local/var/spack/stage/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj
+ ==> Already patched netcdf
+ ==> Building netcdf [AutotoolsPackage]
+ ==> Executing phase: 'autoreconf'
+ ==> Executing phase: 'configure'
+ ==> Executing phase: 'build'
+ ==> Executing phase: 'install'
+ ==> Successfully installed netcdf
+ Fetch: 0.01s. Build: 24.61s. Total: 24.62s.
+ [+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Single package providing multiple virtual specs
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+At the close of this tutorial's subsection, it may be useful to see where the
+build-interface protocol shines the most i.e. when it comes to manage packages
+that provide more than one virtual spec. An example of a package of this kind is
+``intel-parallel-studio``, and due to its complexity we'll limit our discussion
+here to just a few considerations (without any hands-on). You can open
+the related ``package.py`` in the usual way:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit intel-parallel-studio
+
+As you can see this package provides a lot of virtual specs, and thus it has
+more than one function that enters into the build-interface protocol. These
+functions will be invoked for *exactly the same spec* according to the key used
+by its dependents in the subscript query.
+
+So, for instance, the ``blas_libs`` property will be returned when
+``intel-parallel-studio`` is the BLAS provider in the current DAG and
+is retrieved by a dependent with:
+
+.. code-block:: python
+
+ blas = self.spec['blas']
+ blas_libs = blas.libs
+
+Within the property we inspect various aspects of the current spec:
+
+.. code-block:: python
+
+ @property
+ def blas_libs(self):
+ spec = self.spec
+ prefix = self.prefix
+ shared = '+shared' in spec
+
+ if '+ilp64' in spec:
+ mkl_integer = ['libmkl_intel_ilp64']
+ else:
+ mkl_integer = ['libmkl_intel_lp64']
+ ...
+
+and construct the list of library we need to return accordingly.
+
+What we achieved is that the complexity of dealing with ``intel-parallel-studio``
+is now gathered in the package itself, instead of being spread
+all over its possible dependents.
+Thus, a package that uses MPI or LAPACK doesn't care which implementation it uses,
+as each virtual dependency has
+*a uniform interface* to ask for libraries or headers and manipulate them.
+The packages that provide this virtual spec, on the other hand, have a clear
+way to differentiate their answer to the query [#uniforminterface]_.
+
+.. [#uniforminterface] Before this interface was added, each package that
+ depended on MPI or LAPACK had dozens of lines of code copied from other
+ packages telling it where to find the libraries and what they are called.
+ With the addition of this interface, the virtual dependency itself tells
+ other packages that depend on it where it can find its libraries.
+
+---------------------------
+Package's build environment
+---------------------------
+
+Besides Spec's build interface, Spack provides means to set environment
+variables, either for yourself or for your dependent packages, and to
+attach attributes to your dependents. We'll see them next with the help
+of a few real use cases.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Set variables at build-time for yourself
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Spack provides a way to manipulate a package's build time and
+run time environments using the
+:py:func:`setup_environment <spack.package.PackageBase.setup_environment>` function.
+Let's try to see how it works by completing the ``elpa`` package:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit elpa
+
+In the end your method should look like:
+
+.. code-block:: python
+
+ def setup_environment(self, spack_env, run_env):
+ spec = self.spec
+
+ spack_env.set('CC', spec['mpi'].mpicc)
+ spack_env.set('FC', spec['mpi'].mpifc)
+ spack_env.set('CXX', spec['mpi'].mpicxx)
+ spack_env.set('SCALAPACK_LDFLAGS', spec['scalapack'].libs.joined())
+
+ spack_env.append_flags('LDFLAGS', spec['lapack'].libs.search_flags)
+ spack_env.append_flags('LIBS', spec['lapack'].libs.link_flags)
+
+The two arguments, ``spack_env`` and ``run_env``, are both instances of
+:py:class:`EnvironmentModifications <spack.environment.EnvironmentModifications>` and
+permit you to register modifications to either the build-time or the run-time
+environment of the package, respectively.
+At this point it's possible to proceed with the installation of ``elpa``:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install elpa
+ ==> pkg-config is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ==> ncurses is already installed in /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.0-ukq4tccptm2rxd56d2bumqthnpcjzlez
+ ...
+ ==> Executing phase: 'build'
+ ==> Executing phase: 'install'
+ ==> Successfully installed elpa
+ Fetch: 3.94s. Build: 41.93s. Total: 45.87s.
+ [+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/elpa-2016.05.004-sdbfhwcexg7s2zqf52vssb762ocvklbu
+
+If you had modifications to ``run_env``, those would have appeared e.g. in the module files
+generated for the package.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Set variables in dependencies at build-time
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Another common occurrence, particularly for packages like ``r`` and ``python``
+that support extensions and for packages that provide build tools,
+is to require *their dependents* to have some environment variables set.
+
+The mechanism is similar to what we just saw, except that we override the
+:py:func:`setup_dependent_environment <spack.package.PackageBase.setup_dependent_environment>`
+function, which takes one additional argument, i.e. the dependent spec that needs the modified
+environment. Let's practice completing the ``mpich`` package:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack edit mpich
+
+Once you're finished the method should look like this:
+
+.. code-block:: python
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.set('MPICC', join_path(self.prefix.bin, 'mpicc'))
+ spack_env.set('MPICXX', join_path(self.prefix.bin, 'mpic++'))
+ spack_env.set('MPIF77', join_path(self.prefix.bin, 'mpif77'))
+ spack_env.set('MPIF90', join_path(self.prefix.bin, 'mpif90'))
+
+ spack_env.set('MPICH_CC', spack_cc)
+ spack_env.set('MPICH_CXX', spack_cxx)
+ spack_env.set('MPICH_F77', spack_f77)
+ spack_env.set('MPICH_F90', spack_fc)
+ spack_env.set('MPICH_FC', spack_fc)
+
+At this point we can, for instance, install ``netlib-scalapack``:
+
+.. code-block:: console
+
+ root@advanced-packaging-tutorial:/# spack install netlib-scalapack ^mpich
+ ...
+ ==> Created stage in /usr/local/var/spack/stage/netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z
+ ==> No patches needed for netlib-scalapack
+ ==> Building netlib-scalapack [CMakePackage]
+ ==> Executing phase: 'cmake'
+ ==> Executing phase: 'build'
+ ==> Executing phase: 'install'
+ ==> Successfully installed netlib-scalapack
+ Fetch: 0.01s. Build: 3m 59.86s. Total: 3m 59.87s.
+ [+] /usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z
+
+
+and double check the environment logs to verify that every variable was
+set to the correct value. More complicated examples of the use of this function
+may be found in the ``r`` and ``python`` package.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Attach attributes to other packages
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Build tools usually also provide a set of executables that can be used
+when another package is being installed. Spack gives the opportunity
+to monkey-patch dependent modules and attach attributes to them. This
+helps make the packager experience as similar as possible to what would
+have been the manual installation of the same package.
+
+An example here is the ``automake`` package, which overrides
+:py:func:`setup_dependent_package <spack.package.PackageBase.setup_dependent_package>`:
+
+.. code-block:: python
+
+ def setup_dependent_package(self, module, dependent_spec):
+ # Automake is very likely to be a build dependency,
+ # so we add the tools it provides to the dependent module
+ executables = ['aclocal', 'automake']
+ for name in executables:
+ setattr(module, name, self._make_executable(name))
+
+so that every other package that depends on it can use directly ``aclocal``
+and ``automake`` with the usual function call syntax of :py:class:`Executable <spack.util.executable.Executable>`:
+
+.. code-block:: python
+
+ aclocal('--force') \ No newline at end of file
diff --git a/lib/spack/docs/tutorial_basics.rst b/lib/spack/docs/tutorial_basics.rst
new file mode 100644
index 0000000000..d74159d7f6
--- /dev/null
+++ b/lib/spack/docs/tutorial_basics.rst
@@ -0,0 +1,1747 @@
+.. _basics-tutorial:
+
+=========================================
+Basic Installation Tutorial
+=========================================
+
+This tutorial will guide you through the process of installing
+software using Spack. We will first cover the `spack install` command,
+focusing on the power of the spec syntax and the flexibility it gives
+to users. We will also cover the `spack find` command for viewing
+installed packages and the `spack uninstall` command. Finally, we will
+touch on how Spack manages compilers, especially as it relates to
+using Spack-built compilers within Spack. We will include full output
+from all of the commands demonstrated, although we will frequently
+call attention to only small portions of that output (or merely to the
+fact that it succeeded). The provided output is all from an AWS
+instance running Ubuntu 16.04
+
+.. _basics-tutorial-install:
+
+----------------
+Installing Spack
+----------------
+
+Spack works out of the box. Simply clone spack and get going. We will
+clone Spack and immediately checkout the most recent release, v0.11.0.
+
+.. code-block:: console
+
+ $ git clone https://github.com/spack/spack
+ Cloning into 'spack'...
+ remote: Counting objects: 94561, done.
+ remote: Compressing objects: 100% (121/121), done.
+ remote: Total 94561 (delta 91), reused 121 (delta 48), pack-reused 94368
+ Receiving objects: 100% (94561/94561), 32.44 MiB | 31.88 MiB/s, done.
+ Resolving deltas: 100% (44914/44914), done.
+ Checking connectivity... done.
+ $ cd spack
+ $ git checkout releases/v0.11.0
+ Branch releases/v0.11.0 set up to track remote branch releases/v0.11.0 from origin.
+ Switched to a new branch 'releases/v0.11.0'
+
+Next add Spack to your path. Spack has some nice command line
+integration tools, so instead of simply appending to your ``PATH``
+variable, source the spack setup script. Then add Spack to your path.
+
+.. code-block:: console
+
+ $ . share/spack/setup-env.sh
+
+You're good to go!
+
+-----------------
+What is in Spack?
+-----------------
+
+The ``spack list`` command shows available packages.
+
+.. code-block:: console
+
+ $ spack list
+ ==> 2177 packages.
+ abinit libepoxy py-html5lib r-ncdf4
+ abyss libevent py-httpbin r-network
+ ack libevpath py-hypothesis r-networkd3abinit
+ ...
+
+The ``spack list`` command can also take a query string. Spack
+automatically adds wildcards to both ends of the string. For example,
+we can view all available python packages.
+
+.. code-block:: console
+
+ $ spack list py-
+ ==> 356 packages.
+ py-3to2 py-functools32 py-numpydoc py-pywavelets
+ py-4suite-xml py-future py-olefile py-pyyaml
+ py-abipy py-futures py-ont-fast5-api py-qtawesome
+ ...
+
+-------------------
+Installing Packages
+-------------------
+
+Installing a package with Spack is very simple. To install a piece of
+software, simply type ``spack install <package_name>``.
+
+.. code-block:: console
+
+ $ spack install zlib
+ ==> Installing zlib
+ ==> Fetching file:///home/ubuntu/becker/buildcache/zlib/zlib-1.2.11.tar.gz
+ curl: (37) Couldn't open file /home/ubuntu/becker/buildcache/zlib/zlib-1.2.11.tar.gz
+ ==> Fetching from file:///home/ubuntu/becker/buildcache/zlib/zlib-1.2.11.tar.gz failed.
+ ==> Fetching http://zlib.net/fossils/zlib-1.2.11.tar.gz
+ ######################################################################## 100.0%
+ ==> Staging archive: /home/ubuntu/test/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb/zlib-1.2.11.tar.gz
+ ==> Created stage in /home/ubuntu/test/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> No patches needed for zlib
+ ==> Building zlib [Package]
+ ==> Executing phase: 'install'
+ ==> Successfully installed zlib
+ Fetch: 0.58s. Build: 1.15s. Total: 1.73s.
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+
+Spack can install software either from source or from a binary
+cache. Packages in the binary cache are signed with GPG for
+security. For the tutorial we have prepared a binary cache so you
+don't have to wait on slow compilation from source. To be able to
+install from the binary cache, we will need to trust the GPG key that
+the binary cache was prepared with.
+
+.. code-block:: console
+
+ $ spack gpg trust ~/public.key
+ gpg: keybox '/home/ubuntu/test/spack/opt/spack/gpg/pubring.kbx' created
+ gpg: /home/ubuntu/test/spack/opt/spack/gpg/trustdb.gpg: trustdb created
+ gpg: key 3B7C69B2: public key "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" imported
+ gpg: Total number processed: 1
+ gpg: imported: 1
+
+The AWS instances and Docker images we use for the tutorial already
+have configuration files in place so that Spack knows where to look
+for binary packages (and that's the only change we've made). You'll
+learn more about configuring Spack later in the tutorial, but for now
+you will be able to install the rest of the packages in the tutorial
+from a binary cache by specifying ``spack install --use-cache
+<package_name>``. This will install the binary cached version if it
+exists and fall back on installing from source.
+
+Spack's spec syntax is the interface by which we can request specific
+configurations of the package. The ``%`` sigil is used to specify
+compilers.
+
+.. code-block:: console
+
+ $ spack install --use-cache zlib %clang
+ ...
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-4.7-libsigsegv-2.11-eaqxu5mka32jpjif32rttiwebimrr2kb.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing zlib from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:05:02 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed zlib from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul
+
+Note that this installation is located separately from the previous
+one. We will discuss this in more detail later, but this is part of what
+allows Spack to support arbitrarily versioned software.
+
+You can check for particular versions before requesting them. We will
+use the ``spack versions`` command to see the available versions, and then
+install a different version of ``zlib``.
+
+.. code-block:: console
+
+ $ spack versions zlib
+ ==> Safe versions (already checksummed):
+ 1.2.11 1.2.8 1.2.3
+ ==> Remote versions (not yet checksummed):
+ 1.2.10 1.2.7 1.2.5.1 1.2.4.2 1.2.3.7
+ ...
+
+The ``@`` sigil is used to specify versions, both of packages and of
+compilers.
+
+.. code-block:: console
+
+ $ spack install --use-cache zlib@1.2.8
+ ==> Installing zlib
+ ==> Searching for binary cache of zlib
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing zlib from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:05:03 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed zlib from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc
+
+ $ spack install --use-cache zlib %gcc@4.7
+ ==> Installing zlib
+ ==> Searching for binary cache of zlib
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing zlib from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-4.7/zlib-1.2.11/linux-ubuntu16.04-x86_64-gcc-4.7-zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:00 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed zlib from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-4.7/zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r
+
+The spec syntax also includes compiler flags. Spack accepts
+``cppflags``, ``cflags``, ``cxxflags``, ``fflags``, ``ldflags``, and
+``ldlibs`` parameters. The values of these fields must be quoted on
+the command line if they include spaces. These values are injected
+into the compile line automatically by the Spack compiler wrappers.
+
+.. code-block:: console
+
+ $ spack install --use-cache zlib @1.2.8 cppflags=-O3
+ ==> Installing zlib
+ ==> Searching for binary cache of zlib
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-4.7-zlib-1.2.11-bq2wtdxakpjytk2tjr7qu23i4py2fi2r.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing zlib from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:00 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed zlib from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu
+
+The ``spack find`` command is used to query installed packages. Note that
+some packages appear identical with the default output. The ``-l`` flag
+shows the hash of each package, and the ``-f`` flag shows any non-empty
+compiler flags of those packages.
+
+.. code-block:: console
+
+ $ spack find
+ ==> 5 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ zlib@1.2.11
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ zlib@1.2.11
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ zlib@1.2.8 zlib@1.2.8 zlib@1.2.11
+
+
+ $ spack find -lf
+ ==> 5 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ 4pt75q7 zlib@1.2.11%clang
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ bq2wtdx zlib@1.2.11%gcc
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ bkyl5bh zlib@1.2.8%gcc
+
+ 64mns5m zlib@1.2.8%gcc cppflags="-O3"
+
+ 5nus6kn zlib@1.2.11%gcc
+
+Spack generates a hash for each spec. This hash is a function of the full
+provenance of the package, so any change to the spec affects the
+hash. Spack uses this value to compare specs and to generate unique
+installation directories for every combinatorial version. As we move into
+more complicated packages with software dependencies, we can see that
+Spack reuses existing packages to satisfy a dependency only when the
+existing package's hash matches the desired spec.
+
+.. code-block:: console
+
+ $ spack install --use-cache openssl
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing openssl
+ ==> Searching for binary cache of openssl
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing openssl from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k/linux-ubuntu16.04-x86_64-gcc-5.4.0-openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:18 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed openssl from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom
+
+Dependencies can be explicitly requested using the ``^`` sigil. Note that
+the spec syntax is recursive. Anything we could specify about the
+top-level package, we can also specify about a dependency using ``^``.
+
+.. code-block:: console
+
+ $ spack install --use-cache openssl ^zlib @1.2.8 %clang
+ ==> Installing zlib
+ ==> Searching for binary cache of zlib
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing zlib from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.8/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.8-i426yu3o6lyau5fv5ljwsajfkqxj5rl5.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:06 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed zlib from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.8-i426yu3o6lyau5fv5ljwsajfkqxj5rl5
+ ==> Installing openssl
+ ==> Searching for binary cache of openssl
+ ==> Installing openssl from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/openssl-1.0.2k/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-openssl-1.0.2k-ufruk7kj2fz3oupuat2jbgc2y7hg37vy.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:23 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed openssl from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/openssl-1.0.2k-ufruk7kj2fz3oupuat2jbgc2y7hg37vy
+
+Packages can also be referred to from the command line by their package
+hash. Using the ``spack find -lf`` command earlier we saw that the hash
+of our optimized installation of zlib (``cppflags="-O3"``) began with
+``64mns5m``. We can now explicitly build with that package without typing
+the entire spec, by using the ``/`` sigil to refer to it by hash. As with
+other tools like git, you do not need to specify an *entire* hash on the
+command line. You can specify just enough digits to identify a hash
+uniquely. If a hash prefix is ambiguous (i.e., two or more installed
+packages share the prefix) then spack will report an error.
+
+.. code-block:: console
+
+ $ spack install --use-cache openssl ^/64mn
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu
+ ==> Installing openssl
+ ==> Searching for binary cache of openssl
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-zlib-1.2.8-i426yu3o6lyau5fv5ljwsajfkqxj5rl5.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-clang-3.8.0-2ubuntu4-openssl-1.0.2k-ufruk7kj2fz3oupuat2jbgc2y7hg37vy.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing openssl from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k/linux-ubuntu16.04-x86_64-gcc-5.4.0-openssl-1.0.2k-gyxmhgbam26d7y42omb7xrvkjjgmzwio.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:03:12 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed openssl from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-gyxmhgbam26d7y42omb7xrvkjjgmzwio
+
+The ``spack find`` command can also take a ``-d`` flag, which can show
+dependency information. Note that each package has a top-level entry,
+even if it also appears as a dependency.
+
+.. code-block:: console
+
+ $ spack find -ldf
+ ==> 9 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ ufruk7k openssl@1.0.2k%clang
+ i426yu3 ^zlib@1.2.8%clang
+
+ i426yu3 zlib@1.2.8%clang
+
+ 4pt75q7 zlib@1.2.11%clang
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ bq2wtdx zlib@1.2.11%gcc
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ gyxmhgb openssl@1.0.2k%gcc
+ 64mns5m ^zlib@1.2.8%gcc cppflags="-O3"
+
+ 2woov64 openssl@1.0.2k%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ bkyl5bh zlib@1.2.8%gcc
+
+ 64mns5m zlib@1.2.8%gcc cppflags="-O3"
+
+ 5nus6kn zlib@1.2.11%gcc
+
+
+Let's move on to slightly more complicated packages. ``HDF5`` is a
+good example of a more complicated package, with an MPI dependency. If
+we install it "out of the box," it will build with ``openmpi``.
+
+.. code-block:: console
+
+ $ spack install --use-cache hdf5
+ ==> Installing libsigsegv
+ ==> Searching for binary cache of libsigsegv
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-openssl-1.0.2k-gyxmhgbam26d7y42omb7xrvkjjgmzwio.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing libsigsegv from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11/linux-ubuntu16.04-x86_64-gcc-5.4.0-libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:21:10 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed libsigsegv from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> Installing m4
+ ==> Searching for binary cache of m4
+ ==> Installing m4 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18/linux-ubuntu16.04-x86_64-gcc-5.4.0-m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:22:03 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed m4 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ==> Installing libtool
+ ==> Searching for binary cache of libtool
+ ==> Installing libtool from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:29:09 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed libtool from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
+ ==> Installing pkg-config
+ ==> Searching for binary cache of pkg-config
+ ==> Installing pkg-config from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:30:13 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed pkg-config from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ==> Installing util-macros
+ ==> Searching for binary cache of util-macros
+ ==> Installing util-macros from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:30:12 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed util-macros from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr
+ ==> Installing libpciaccess
+ ==> Searching for binary cache of libpciaccess
+ ==> Installing libpciaccess from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5/linux-ubuntu16.04-x86_64-gcc-5.4.0-libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:23 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed libpciaccess from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc
+ ==> Installing xz
+ ==> Searching for binary cache of xz
+ ==> Installing xz from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-xz-5.2.3-htnq7wqdrqtof6uxqicdj3f7oe3xz6pw.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:34 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed xz from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.3-htnq7wqdrqtof6uxqicdj3f7oe3xz6pw
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing libxml2
+ ==> Searching for binary cache of libxml2
+ ==> Installing libxml2 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-libxml2-2.9.4-sxk64lvcxhqjflzesnf3ye4wakovwi45.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:23 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed libxml2 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.4-sxk64lvcxhqjflzesnf3ye4wakovwi45
+ ==> Installing hwloc
+ ==> Searching for binary cache of hwloc
+ ==> Installing hwloc from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.8/linux-ubuntu16.04-x86_64-gcc-5.4.0-hwloc-1.11.8-ivg4d2e6anxwin4zbld2g4qlrbuquoyg.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:32 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hwloc from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.8-ivg4d2e6anxwin4zbld2g4qlrbuquoyg
+ ==> Installing openmpi
+ ==> Searching for binary cache of openmpi
+ ==> Installing openmpi from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:43:34 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed openmpi from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f
+ ==> Installing hdf5
+ ==> Searching for binary cache of hdf5
+ ==> Installing hdf5 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-bovz45ms24pmfr7hlckf56bxegfc4rea.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:53:08 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hdf5 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-bovz45ms24pmfr7hlckf56bxegfc4rea
+
+Spack packages can also have variants. Boolean variants can be specified
+using the ``+`` and ``~`` or ``-`` sigils. There are two sigils for
+``False`` to avoid conflicts with shell parsing in different
+situations. Variants (boolean or otherwise) can also be specified using
+the same syntax as compiler flags. Here we can install HDF5 without MPI
+support.
+
+.. code-block:: console
+
+ $ spack install --use-cache hdf5~mpi
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing hdf5
+ ==> Searching for binary cache of hdf5
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f.spec.yaml
+ ######################################################################## 100.0%
+ ...
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing hdf5 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-pa6oqzfeqzkqkzqr2375fqyt3qggx3tr.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:53:40 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hdf5 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-pa6oqzfeqzkqkzqr2375fqyt3qggx3tr
+
+We might also want to install HDF5 with a different MPI
+implementation. While MPI is not a package itself, packages can depend on
+abstract interfaces like MPI. Spack handles these through "virtual
+dependencies." A package, such as HDF5, can depend on the MPI
+interface. Other packages (``openmpi``, ``mpich``, ``mvapich``, etc.)
+provide the MPI interface. Any of these providers can be requested for
+an MPI dependency. For example, we can build HDF5 with MPI support
+provided by mpich by specifying a dependency on ``mpich``. Spack also
+supports versioning of virtual dependencies. A package can depend on the
+MPI interface at version 3, and provider packages specify what version of
+the interface *they* provide. The partial spec ``^mpi@3`` can be safisfied
+by any of several providers.
+
+.. code-block:: console
+
+ $ spack install --use-cache hdf5+hl+mpi ^mpich
+ ==> Installing mpich
+ ==> Searching for binary cache of mpich
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-pa6oqzfeqzkqkzqr2375fqyt3qggx3tr.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing mpich from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpich-3.2-cymrnoowcc4vdyvdnf5ypvob4cmdadk5.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:45:26 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed mpich from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2-cymrnoowcc4vdyvdnf5ypvob4cmdadk5
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing hdf5
+ ==> Searching for binary cache of hdf5
+ ==> Installing hdf5 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-e4gz6f2l5ik3ijuk3alwsqplex4tbvin.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:49:45 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hdf5 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-e4gz6f2l5ik3ijuk3alwsqplex4tbvin
+
+We'll do a quick check in on what we have installed so far.
+
+.. code-block:: console
+
+ $ spack find -ldf
+ ==> 23 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ ufruk7k openssl@1.0.2k%clang
+ i426yu3 ^zlib@1.2.8%clang
+
+ i426yu3 zlib@1.2.8%clang
+
+ 4pt75q7 zlib@1.2.11%clang
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ bq2wtdx zlib@1.2.11%gcc
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ pa6oqzf hdf5@1.10.1%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ bovz45m hdf5@1.10.1%gcc
+ yo5qkfv ^openmpi@3.0.0%gcc
+ ivg4d2e ^hwloc@1.11.8%gcc
+ 5urc6tc ^libpciaccess@0.13.5%gcc
+ sxk64lv ^libxml2@2.9.4%gcc
+ htnq7wq ^xz@5.2.3%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ e4gz6f2 hdf5@1.10.1%gcc
+ cymrnoo ^mpich@3.2%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ ivg4d2e hwloc@1.11.8%gcc
+ 5urc6tc ^libpciaccess@0.13.5%gcc
+ sxk64lv ^libxml2@2.9.4%gcc
+ htnq7wq ^xz@5.2.3%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ 5urc6tc libpciaccess@0.13.5%gcc
+
+ fypapcp libsigsegv@2.11%gcc
+
+ o2pfwjf libtool@2.4.6%gcc
+
+ sxk64lv libxml2@2.9.4%gcc
+ htnq7wq ^xz@5.2.3%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ r5envx3 m4@1.4.18%gcc
+ fypapcp ^libsigsegv@2.11%gcc
+
+ cymrnoo mpich@3.2%gcc
+
+ yo5qkfv openmpi@3.0.0%gcc
+ ivg4d2e ^hwloc@1.11.8%gcc
+ 5urc6tc ^libpciaccess@0.13.5%gcc
+ sxk64lv ^libxml2@2.9.4%gcc
+ htnq7wq ^xz@5.2.3%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ gyxmhgb openssl@1.0.2k%gcc
+ 64mns5m ^zlib@1.2.8%gcc cppflags="-O3"
+
+ 2woov64 openssl@1.0.2k%gcc
+ 5nus6kn ^zlib@1.2.11%gcc
+
+ ae2hwm7 pkg-config@0.29.2%gcc
+
+ milz7fm util-macros@1.19.1%gcc
+
+ htnq7wq xz@5.2.3%gcc
+
+ bkyl5bh zlib@1.2.8%gcc
+
+ 64mns5m zlib@1.2.8%gcc cppflags="-O3"
+
+ 5nus6kn zlib@1.2.11%gcc
+
+
+Spack models the dependencies of packages as a directed acyclic graph
+(DAG). The ``spack find -d`` command shows the tree representation of
+that graph. We can also use the ``spack graph`` command to view the entire
+DAG as a graph.
+
+.. code-block:: console
+
+ $ spack graph hdf5+hl+mpi ^mpich
+ o hdf5
+ |\
+ o | zlib
+ /
+ o mpich
+
+You may also have noticed that there are some packages shown in the
+``spack find -d`` output that we didn't install explicitly. These are
+dependencies that were installed implicitly. A few packages installed
+implicitly are not shown as dependencies in the ``spack find -d``
+output. These are build dependencies. For example, ``libpciaccess`` is a
+dependency of openmpi and requires ``m4`` to build. Spack will build ``m4`` as
+part of the installation of ``openmpi``, but it does not become a part of
+the DAG because it is not linked in at run time. Spack handles build
+dependencies differently because of their different (less strict)
+consistency requirements. It is entirely possible to have two packages
+using different versions of a dependency to build, which obviously cannot
+be done with linked dependencies.
+
+``HDF5`` is more complicated than our basic example of zlib and
+openssl, but it's still within the realm of software that an experienced
+HPC user could reasonably expect to install given a bit of time. Now
+let's look at an even more complicated package.
+
+.. code-block:: console
+
+ $ spack install --use-cache trilinos
+ ==> Installing bzip2
+ ==> Searching for binary cache of bzip2
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-e4gz6f2l5ik3ijuk3alwsqplex4tbvin.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpich-3.2-cymrnoowcc4vdyvdnf5ypvob4cmdadk5.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing bzip2 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6/linux-ubuntu16.04-x86_64-gcc-5.4.0-bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:39:37 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed bzip2 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing boost
+ ==> Searching for binary cache of boost
+ ==> Installing boost from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.65.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-boost-1.65.1-xxqnbqql5nup7rujer2ury3hsdgcumzb.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:43:14 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed boost from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.65.1-xxqnbqql5nup7rujer2ury3hsdgcumzb
+ ==> pkg-config is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ==> Installing ncurses
+ ==> Searching for binary cache of ncurses
+ ==> Installing ncurses from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-ncurses-6.0-ukq4tccptm2rxd56d2bumqthnpcjzlez.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:06:38 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed ncurses from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.0-ukq4tccptm2rxd56d2bumqthnpcjzlez
+ ==> openssl is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom
+ ==> Installing cmake
+ ==> Searching for binary cache of cmake
+ ==> Installing cmake from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.9.4/linux-ubuntu16.04-x86_64-gcc-5.4.0-cmake-3.9.4-a2lyofsoxutyy4ihvzopizpbjubtdoem.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 01:22:03 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed cmake from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.9.4-a2lyofsoxutyy4ihvzopizpbjubtdoem
+ ==> Installing glm
+ ==> Searching for binary cache of glm
+ ==> Installing glm from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:38 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed glm from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws
+ ==> libsigsegv is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> m4 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ==> libtool is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
+ ==> util-macros is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/util-macros-1.19.1-milz7fmttmptcic2qdk5cnel7ll5sybr
+ ==> libpciaccess is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libpciaccess-0.13.5-5urc6tcjae26fbbd2wyfohoszhgxtbmc
+ ==> xz is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/xz-5.2.3-htnq7wqdrqtof6uxqicdj3f7oe3xz6pw
+ ==> libxml2 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libxml2-2.9.4-sxk64lvcxhqjflzesnf3ye4wakovwi45
+ ==> hwloc is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hwloc-1.11.8-ivg4d2e6anxwin4zbld2g4qlrbuquoyg
+ ==> openmpi is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f
+ ==> Installing hdf5
+ ==> Searching for binary cache of hdf5
+ ==> Installing hdf5 from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hdf5-1.10.1-d73xxpvfxgd2z2ypmuuwtxhoxmzdglez.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:39:36 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hdf5 from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-d73xxpvfxgd2z2ypmuuwtxhoxmzdglez
+ ==> Installing openblas
+ ==> Searching for binary cache of openblas
+ ==> Installing openblas from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.2.20/linux-ubuntu16.04-x86_64-gcc-5.4.0-openblas-0.2.20-4dahl6ltbpojei4s3stbqbq5iuuqlaxo.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:43:22 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed openblas from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.2.20-4dahl6ltbpojei4s3stbqbq5iuuqlaxo
+ ==> Installing hypre
+ ==> Searching for binary cache of hypre
+ ==> Installing hypre from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hypre-2.12.1-z3rgfzqc4gu4u4qvveyo2dqqzl2j463z.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:17 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hypre from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.12.1-z3rgfzqc4gu4u4qvveyo2dqqzl2j463z
+ ==> Installing matio
+ ==> Searching for binary cache of matio
+ ==> Installing matio from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9/linux-ubuntu16.04-x86_64-gcc-5.4.0-matio-1.5.9-4ajrcuhdf5uktotnrfzufufy5vbd6any.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:24 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed matio from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9-4ajrcuhdf5uktotnrfzufufy5vbd6any
+ ==> Installing metis
+ ==> Searching for binary cache of metis
+ ==> Installing metis from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-metis-5.1.0-m34qytcqsvsaduxyh3wevf3kj6pbzyw6.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:39:28 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed metis from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0-m34qytcqsvsaduxyh3wevf3kj6pbzyw6
+ ==> Installing netlib-scalapack
+ ==> Searching for binary cache of netlib-scalapack
+ ==> Installing netlib-scalapack from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-netlib-scalapack-2.0.2-xudg7xypr63nte6ifrdsmllilxbrfiar.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:28 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed netlib-scalapack from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-xudg7xypr63nte6ifrdsmllilxbrfiar
+ ==> Installing mumps
+ ==> Searching for binary cache of mumps
+ ==> Installing mumps from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-mumps-5.1.1-5a7hgodxoze47xqd32jcxhvzctex4ezx.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:15 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed mumps from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1-5a7hgodxoze47xqd32jcxhvzctex4ezx
+ ==> Installing netcdf
+ ==> Searching for binary cache of netcdf
+ ==> Installing netcdf from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:43:37 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed netcdf from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj
+ ==> Installing parmetis
+ ==> Searching for binary cache of parmetis
+ ==> Installing parmetis from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-parmetis-4.0.3-o4qdo7aylhejov2e5ii7tagrnw6qrrlo.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:39:37 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed parmetis from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3-o4qdo7aylhejov2e5ii7tagrnw6qrrlo
+ ==> Installing suite-sparse
+ ==> Searching for binary cache of suite-sparse
+ ==> Installing suite-sparse from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-4.5.5/linux-ubuntu16.04-x86_64-gcc-5.4.0-suite-sparse-4.5.5-bg67crx4ltmxulnumuxjxqzrcobpmyzg.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:30:31 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed suite-sparse from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-4.5.5-bg67crx4ltmxulnumuxjxqzrcobpmyzg
+ ==> Installing superlu-dist
+ ==> Searching for binary cache of superlu-dist
+ ==> Installing superlu-dist from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-dist-5.2.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-superlu-dist-5.2.2-gggsamgizi2dwmwxglgzbxvg6hkamhol.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:43:35 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed superlu-dist from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-dist-5.2.2-gggsamgizi2dwmwxglgzbxvg6hkamhol
+ ==> Installing trilinos
+ ==> Searching for binary cache of trilinos
+ ==> Installing trilinos from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-trilinos-12.12.1-istwe3b43b7etgtrhcuzjem3p5gonc6h.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 11:47:19 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed trilinos from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-istwe3b43b7etgtrhcuzjem3p5gonc6h
+
+Now we're starting to see the power of Spack. Trilinos has 11 top
+level dependecies, many of which have dependencies of their
+own. Installing more complex packages can take days or weeks even for
+an experienced user. Although we've done a binary installation for the
+tutorial, a source installation of trilinos using Spack takes about 3
+hours (depending on the system), but only 20 seconds of programmer
+time.
+
+Spack manages constistency of the entire DAG. Every MPI dependency will
+be satisfied by the same configuration of MPI, etc. If we install
+``trilinos`` again specifying a dependency on our previous HDF5 built
+with ``mpich``:
+
+.. code-block:: console
+
+ $ spack install --use-cache trilinos +hdf5 ^hdf5+hl+mpi ^mpich
+ ==> bzip2 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> boost is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/boost-1.65.1-xxqnbqql5nup7rujer2ury3hsdgcumzb
+ ==> pkg-config is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ==> ncurses is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.0-ukq4tccptm2rxd56d2bumqthnpcjzlez
+ ==> openssl is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom
+ ==> cmake is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/cmake-3.9.4-a2lyofsoxutyy4ihvzopizpbjubtdoem
+ ==> glm is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/glm-0.9.7.1-jnw622jwcbsymzj2fsx22omjl7tmvaws
+ ==> mpich is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpich-3.2-cymrnoowcc4vdyvdnf5ypvob4cmdadk5
+ ==> hdf5 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-e4gz6f2l5ik3ijuk3alwsqplex4tbvin
+ ==> openblas is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openblas-0.2.20-4dahl6ltbpojei4s3stbqbq5iuuqlaxo
+ ==> Installing hypre
+ ==> Searching for binary cache of hypre
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.4.1.1-gk2xxhbqijnrdwicawawcll4t3c7dvoj.spec.yaml
+ ######################################################################## 100.0%
+ ...
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-bzip2-1.0.6-ufczdvsqt6edesm36xiucyry7myhj7e7.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-boost-1.65.1-xxqnbqql5nup7rujer2ury3hsdgcumzb.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing hypre from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-hypre-2.12.1-3psjg2ka2qa26jtgitlil4vglqr67anj.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:49:37 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed hypre from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hypre-2.12.1-3psjg2ka2qa26jtgitlil4vglqr67anj
+ ==> Installing matio
+ ==> Searching for binary cache of matio
+ ==> Installing matio from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9/linux-ubuntu16.04-x86_64-gcc-5.4.0-matio-1.5.9-3ibrutc6cs7x6ybyt5ni5n6djtq5okm2.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:45:26 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed matio from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/matio-1.5.9-3ibrutc6cs7x6ybyt5ni5n6djtq5okm2
+ ==> metis is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/metis-5.1.0-m34qytcqsvsaduxyh3wevf3kj6pbzyw6
+ ==> Installing netlib-scalapack
+ ==> Searching for binary cache of netlib-scalapack
+ ==> Installing netlib-scalapack from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:49:49 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed netlib-scalapack from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z
+ ==> Installing mumps
+ ==> Searching for binary cache of mumps
+ ==> Installing mumps from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-mumps-5.1.1-phvk6yhkzqed6gjsbah6dnhlesdclild.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:45:28 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed mumps from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mumps-5.1.1-phvk6yhkzqed6gjsbah6dnhlesdclild
+ ==> libsigsegv is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> m4 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ==> Installing netcdf
+ ==> Searching for binary cache of netcdf
+ ==> Installing netcdf from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.4.1.1-rmx4uppnhpv6kq7bh7r46zfqevgdkkgw.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:49:38 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed netcdf from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/netcdf-4.4.1.1-rmx4uppnhpv6kq7bh7r46zfqevgdkkgw
+ ==> Installing parmetis
+ ==> Searching for binary cache of parmetis
+ ==> Installing parmetis from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-parmetis-4.0.3-qk77g6aiqr3f2hsykg54zzuhlxcpdcmv.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:45:14 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed parmetis from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/parmetis-4.0.3-qk77g6aiqr3f2hsykg54zzuhlxcpdcmv
+ ==> suite-sparse is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/suite-sparse-4.5.5-bg67crx4ltmxulnumuxjxqzrcobpmyzg
+ ==> Installing superlu-dist
+ ==> Searching for binary cache of superlu-dist
+ ==> Installing superlu-dist from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-dist-5.2.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-superlu-dist-5.2.2-65vot2le3ezooz7tj6eveovly725o44x.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sat 11 Nov 2017 12:45:14 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed superlu-dist from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/superlu-dist-5.2.2-65vot2le3ezooz7tj6eveovly725o44x
+ ==> Installing trilinos
+ ==> Searching for binary cache of trilinos
+ ==> Installing trilinos from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-trilinos-12.12.1-xupifcp5d4f53cobm6g3xzao577uzezs.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 12:04:58 AM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed trilinos from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-xupifcp5d4f53cobm6g3xzao577uzezs
+
+
+We see that every package in the trilinos DAG that depends on MPI now
+uses ``mpich``.
+
+.. code-block:: console
+
+ $ spack find -d trilinos
+ ==> 2 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ trilinos@12.12.1
+ ^boost@1.65.1
+ ^bzip2@1.0.6
+ ^zlib@1.2.11
+ ^glm@0.9.7.1
+ ^hdf5@1.10.1
+ ^openmpi@3.0.0
+ ^hwloc@1.11.8
+ ^libpciaccess@0.13.5
+ ^libxml2@2.9.4
+ ^xz@5.2.3
+ ^hypre@2.12.1
+ ^openblas@0.2.20
+ ^matio@1.5.9
+ ^metis@5.1.0
+ ^mumps@5.1.1
+ ^netlib-scalapack@2.0.2
+ ^netcdf@4.4.1.1
+ ^parmetis@4.0.3
+ ^suite-sparse@4.5.5
+ ^superlu-dist@5.2.2
+
+ trilinos@12.12.1
+ ^boost@1.65.1
+ ^bzip2@1.0.6
+ ^zlib@1.2.11
+ ^glm@0.9.7.1
+ ^hdf5@1.10.1
+ ^mpich@3.2
+ ^hypre@2.12.1
+ ^openblas@0.2.20
+ ^matio@1.5.9
+ ^metis@5.1.0
+ ^mumps@5.1.1
+ ^netlib-scalapack@2.0.2
+ ^netcdf@4.4.1.1
+ ^parmetis@4.0.3
+ ^suite-sparse@4.5.5
+ ^superlu-dist@5.2.2
+
+As we discussed before, the ``spack find -d`` command shows the
+dependency information as a tree. While that is often sufficient, many
+complicated packages, including trilinos, have dependencies that
+cannot be fully represented as a tree. Again, the ``spack graph``
+command shows the full DAG of the dependency information.
+
+.. code-block:: console
+
+ $ spack graph trilinos
+ o trilinos
+ |\
+ | |\
+ | | |\
+ | | | |\
+ | | | | |\
+ | | | | | |\
+ | | | | | | |\
+ | | | | | | | |\
+ | | | | | | | | |\
+ | | | | | | | | | |\
+ | | | | | | | | | | |\
+ | | | | | | | | | | | |\
+ | | | | | | | | | | | | |\
+ | | | | | | | | | | | | | |\
+ o | | | | | | | | | | | | | | superlu-dist
+ |\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
+ | |_|/ / / / / / / / / / / / /
+ |/| | | | | | | | | | | | | |
+ | |\ \ \ \ \ \ \ \ \ \ \ \ \ \
+ | | |_|/ / / / / / / / / / / /
+ | |/| | | | | | | | | | | | |
+ | | |\ \ \ \ \ \ \ \ \ \ \ \ \
+ | | | |_|/ / / / / / / / / / /
+ | | |/| | | | | | | | | | | |
+ | | | | |_|_|/ / / / / / / /
+ | | | |/| | | | | | | | | |
+ | | | | o | | | | | | | | | suite-sparse
+ | | | |/| | | | | | | | | |
+ | | |/|/ / / / / / / / / /
+ o | | | | | | | | | | | | parmetis
+ |\| | | | | | | | | | | |
+ |\ \ \ \ \ \ \ \ \ \ \ \ \
+ | |_|_|/ / / / / / / / / /
+ |/| | | | | | | | | | | |
+ | | |_|_|_|_|_|_|_|/ / /
+ | |/| | | | | | | | | |
+ | | | | | | o | | | | | mumps
+ | | | |_|_|/| | | | | |
+ | | |/| |_|/| | | | | |
+ | | | |/| |/ / / / / /
+ | | | | |/| | | | | |
+ | | | | o | | | | | | netlib-scalapack
+ | | |_|/| | | | | | |
+ | |/| |/| | | | | | |
+ | | |/|/ / / / / / /
+ o | | | | | | | | | metis
+ |/ / / / / / / / /
+ | | | | | | | o | glm
+ | |_|_|_|_|_|/ /
+ |/| | | | | | |
+ o | | | | | | | cmake
+ |\ \ \ \ \ \ \ \
+ o | | | | | | | | openssl
+ | | | | o | | | | netcdf
+ | |_|_|/| | | | |
+ |/| | |/| | | | |
+ | | |/| | | | | |
+ | | | | |\ \ \ \ \
+ | | | | | | |_|/ /
+ | | | | | |/| | |
+ | | | | | | o | | matio
+ | |_|_|_|_|/| | |
+ |/| | | | |/ / /
+ | | | | | | o | hypre
+ | | | |_|_|/| |
+ | | |/| |_|/ /
+ | | | |/| | |
+ | | | | | o | hdf5
+ | |_|_|_|/| |
+ |/| | |_|/ /
+ | | |/| | |
+ | | o | | | openmpi
+ | | o | | | hwloc
+ | | |\ \ \ \
+ | | | |\ \ \ \
+ | | | o | | | | libxml2
+ | |_|/| | | | |
+ |/| |/| | | | |
+ | | | | | | | o boost
+ | |_|_|_|_|_|/|
+ |/| | | | | | |
+ o | | | | | | | zlib
+ / / / / / / /
+ | | o | | | | xz
+ | | / / / /
+ | | o | | | libpciaccess
+ | |/| | | |
+ | | |\ \ \ \
+ | | o | | | | util-macros
+ | | / / / /
+ o | | | | | ncurses
+ |/ / / / /
+ o | | | | pkg-config
+ / / / /
+ | o | | openblas
+ | / /
+ o | | libtool
+ |/ /
+ o | m4
+ o | libsigsegv
+ /
+ o bzip2
+
+You can control how the output is displayed with a number of options.
+
+The ASCII output from ``spack graph`` can be difficult to parse for
+complicated packages. The output can be changed to the ``graphviz``
+``.dot`` format using the ``--dot`` flag.
+
+.. code-block:: console
+
+ $ spack graph --dot trilinos | dot -Tpdf trilinos_graph.pdf
+
+.. _basics-tutorial-uninstall:
+
+---------------------
+Uninstalling Packages
+---------------------
+
+Earlier we installed many configurations each of zlib and
+openssl. Now we will go through and uninstall some of those packages
+that we didn't really need.
+
+.. code-block:: console
+
+ $ spack find -d openssl
+ ==> 3 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ openssl@1.0.2k
+ ^zlib@1.2.8
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ openssl@1.0.2k
+ ^zlib@1.2.8
+
+ openssl@1.0.2k
+ ^zlib@1.2.11
+
+ $ spack find zlib
+ ==> 6 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ zlib@1.2.8 zlib@1.2.11
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ zlib@1.2.11
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ zlib@1.2.8 zlib@1.2.8 zlib@1.2.11
+
+We can uninstall packages by spec using the same syntax as install.
+
+.. code-block:: console
+
+ $ spack uninstall zlib %gcc@4.7
+ ==> The following packages will be uninstalled:
+
+ -- linux-ubuntu16.04-x86_64 / gcc@4.7 ---------------------------
+ bq2wtdx zlib@1.2.11%gcc+optimize+pic+shared
+
+ ==> Do you want to proceed? [y/N] y
+ ==> Successfully uninstalled zlib@1.2.11%gcc@4.7+optimize+pic+shared arch=linux-ubuntu16.04-x86_64 /bq2wtdx
+
+ $ spack find -lf zlib
+ ==> 5 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ i426yu3 zlib@1.2.8%clang
+
+ 4pt75q7 zlib@1.2.11%clang
+
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ bkyl5bh zlib@1.2.8%gcc
+
+ 64mns5m zlib@1.2.8%gcc cppflags="-O3"
+
+ 5nus6kn zlib@1.2.11%gcc
+
+We can also uninstall packages by referring only to their hash.
+
+We can use either ``-f`` (force) or ``-R`` (remove dependents as well) to
+remove packages that are required by another installed package.
+
+.. code-block:: console
+
+ $ spack uninstall zlib/i426
+ ==> Error: Will not uninstall zlib@1.2.8%clang@3.8.0-2ubuntu4/i426yu3
+
+ The following packages depend on it:
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ ufruk7k openssl@1.0.2k%clang
+
+
+ ==> Error: Use \`spack uninstall --dependents\` to uninstall these dependencies as well.
+
+ $ spack uninstall -R zlib/i426
+ ==> The following packages will be uninstalled:
+
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ ufruk7k openssl@1.0.2k%clang
+
+ i426yu3 zlib@1.2.8%clang+optimize+pic+shared
+
+ ==> Do you want to proceed? [y/N] y
+ ==> Successfully uninstalled openssl@1.0.2k%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64 /ufruk7k
+ ==> Successfully uninstalled zlib@1.2.8%clang@3.8.0-2ubuntu4+optimize+pic+shared arch=linux-ubuntu16.04-x86_64 /i426yu3
+
+Spack will not uninstall packages that are not sufficiently
+specified. The ``-a`` (all) flag can be used to uninstall multiple
+packages at once.
+
+.. code-block:: console
+
+ $ spack uninstall trilinos
+ ==> Error: trilinos matches multiple packages:
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ istwe3b trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~dtk+epetra+epetraext+exodus+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2+instantiate~instantiate_cmplx~intrepid~intrepid2+metis+ml+muelu+mumps~nox~openmp~pnetcdf~python~rol+sacado~shards+shared~stk+suite-sparse~superlu+superlu-dist+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
+
+ xupifcp trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~dtk+epetra+epetraext+exodus+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2+instantiate~instantiate_cmplx~intrepid~intrepid2+metis+ml+muelu+mumps~nox~openmp~pnetcdf~python~rol+sacado~shards+shared~stk+suite-sparse~superlu+superlu-dist+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
+
+
+ ==> Error: You can either:
+ a) use a more specific spec, or
+ b) use `spack uninstall --all` to uninstall ALL matching specs.
+
+
+ $ spack uninstall /istw
+ ==> The following packages will be uninstalled:
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ istwe3b trilinos@12.12.1%gcc~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~dtk+epetra+epetraext+exodus+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2+instantiate~instantiate_cmplx~intrepid~intrepid2+metis+ml+muelu+mumps~nox~openmp~pnetcdf~python~rol+sacado~shards+shared~stk+suite-sparse~superlu+superlu-dist+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2
+
+ ==> Do you want to proceed? [y/N] y
+ ==> Successfully uninstalled trilinos@12.12.1%gcc@5.4.0~alloptpkgs+amesos+amesos2+anasazi+aztec+belos+boost build_type=RelWithDebInfo ~dtk+epetra+epetraext+exodus+fortran~fortrilinos+gtest+hdf5+hypre+ifpack+ifpack2+instantiate~instantiate_cmplx~intrepid~intrepid2+metis+ml+muelu+mumps~nox~openmp~pnetcdf~python~rol+sacado~shards+shared~stk+suite-sparse~superlu+superlu-dist+teuchos+tpetra~x11~xsdkflags~zlib+zoltan+zoltan2 arch=linux-ubuntu16.04-x86_64 /istwe3b
+
+-----------------------------
+Advanced ``spack find`` Usage
+-----------------------------
+
+We will go over some additional uses for the ``spack find`` command not
+already covered in the :ref:`basics-tutorial-install` and
+:ref:`basics-tutorial-uninstall` sections.
+
+The ``spack find`` command can accept what we call "anonymous specs."
+These are expressions in spec syntax that do not contain a package
+name. For example, ``spack find ^mpich`` will return every installed
+package that depends on mpich, and ``spack find cppflags="-O3"`` will
+return every package which was built with ``cppflags="-O3"``.
+
+.. code-block:: console
+
+ $ spack find ^mpich
+ ==> 9 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ hdf5@1.10.1 hypre@2.12.1 matio@1.5.9 mumps@5.1.1 netcdf@4.4.1.1 netlib-scalapack@2.0.2 parmetis@4.0.3 superlu-dist@5.2.2 trilinos@12.12.1
+
+
+ $ spack find cppflags=-O3
+ ==> 1 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ zlib@1.2.8
+
+The ``find`` command can also show which packages were installed
+explicitly (rather than pulled in as a dependency) using the ``-e``
+flag. The ``-E`` flag shows implicit installs only. The ``find`` command can
+also show the path to which a spack package was installed using the ``-p``
+command.
+
+.. code-block:: console
+
+ $ spack find -pe
+ ==> 10 installed packages.
+ -- linux-ubuntu16.04-x86_64 / clang@3.8.0-2ubuntu4 --------------
+ zlib@1.2.11 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/clang-3.8.0-2ubuntu4/zlib-1.2.11-4pt75q7qq6lygf3hgnona4lyc2uwedul
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ hdf5@1.10.1 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-pa6oqzfeqzkqkzqr2375fqyt3qggx3tr
+ hdf5@1.10.1 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-bovz45ms24pmfr7hlckf56bxegfc4rea
+ hdf5@1.10.1 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/hdf5-1.10.1-e4gz6f2l5ik3ijuk3alwsqplex4tbvin
+ openssl@1.0.2k /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-gyxmhgbam26d7y42omb7xrvkjjgmzwio
+ openssl@1.0.2k /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openssl-1.0.2k-2woov64m3n4gjtnfp722qcyemzf2qtom
+ trilinos@12.12.1 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/trilinos-12.12.1-xupifcp5d4f53cobm6g3xzao577uzezs
+ zlib@1.2.8 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-bkyl5bhuep6fmhuxzkmhqy25qefjcvzc
+ zlib@1.2.8 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.8-64mns5mvdacqvlashkf7v6lqrxixhmxu
+ zlib@1.2.11 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+
+---------------------
+Customizing Compilers
+---------------------
+
+
+Spack manages a list of available compilers on the system, detected
+automatically from from the user's ``PATH`` variable. The ``spack
+compilers`` command is an alias for the command ``spack compiler list``.
+
+.. code-block:: console
+
+ $ spack compilers
+ ==> Available compilers
+ -- clang ubuntu16.04-x86_64 -------------------------------------
+ clang@3.8.0-2ubuntu4 clang@3.7.1-2ubuntu2
+
+ -- gcc ubuntu16.04-x86_64 ---------------------------------------
+ gcc@5.4.0 gcc@4.7
+
+The compilers are maintained in a YAML file. Later in the tutorial you
+will learn how to configure compilers by hand for special cases. Spack
+also has tools to add compilers, and compilers built with Spack can be
+added to the configuration.
+
+.. code-block:: console
+
+ $ spack install --use-cache gcc
+ ==> libsigsegv is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libsigsegv-2.11-fypapcprssrj3nstp6njprskeyynsgaz
+ ==> m4 is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/m4-1.4.18-r5envx3kqctwwflhd4qax4ahqtt6x43a
+ ==> pkg-config is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/pkg-config-0.29.2-ae2hwm7q57byfbxtymts55xppqwk7ecj
+ ==> ncurses is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/ncurses-6.0-ukq4tccptm2rxd56d2bumqthnpcjzlez
+ ==> Installing readline
+ ==> Searching for binary cache of readline
+ ==> Finding buildcaches in /home/ubuntu/becker/buildcache/build_cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-matio-1.5.9-3ibrutc6cs7x6ybyt5ni5n6djtq5okm2.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-trilinos-12.12.1-xupifcp5d4f53cobm6g3xzao577uzezs.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-parmetis-4.0.3-qk77g6aiqr3f2hsykg54zzuhlxcpdcmv.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-superlu-dist-5.2.2-65vot2le3ezooz7tj6eveovly725o44x.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-hypre-2.12.1-3psjg2ka2qa26jtgitlil4vglqr67anj.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-mumps-5.1.1-phvk6yhkzqed6gjsbah6dnhlesdclild.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-netcdf-4.4.1.1-rmx4uppnhpv6kq7bh7r46zfqevgdkkgw.spec.yaml
+ ######################################################################## 100.0%
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64-gcc-5.4.0-netlib-scalapack-2.0.2-km7tsbgoyyywonyejkjoojskhc5knz3z.spec.yaml
+ ######################################################################## 100.0%
+ ==> Installing readline from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-readline-7.0-gizxpch53zv5ufa62a2tb5lalcqgxbuc.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:26:53 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed readline from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/readline-7.0-gizxpch53zv5ufa62a2tb5lalcqgxbuc
+ ==> Installing gdbm
+ ==> Searching for binary cache of gdbm
+ ==> Installing gdbm from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.13/linux-ubuntu16.04-x86_64-gcc-5.4.0-gdbm-1.13-vdhoris6wdzzb2ykax2hz7qzgizk5h3t.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:26:51 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed gdbm from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gdbm-1.13-vdhoris6wdzzb2ykax2hz7qzgizk5h3t
+ ==> Installing perl
+ ==> Searching for binary cache of perl
+ ==> Installing perl from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.24.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-perl-5.24.1-mfzwy6y5mlbqpqvti4etpe3cgkmxkpi2.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:27:19 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed perl from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/perl-5.24.1-mfzwy6y5mlbqpqvti4etpe3cgkmxkpi2
+ ==> Installing autoconf
+ ==> Searching for binary cache of autoconf
+ ==> Installing autoconf from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69/linux-ubuntu16.04-x86_64-gcc-5.4.0-autoconf-2.69-bvabhjiklhi7c5742ixzs7hubhid3ax2.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:27:22 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed autoconf from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/autoconf-2.69-bvabhjiklhi7c5742ixzs7hubhid3ax2
+ ==> Installing automake
+ ==> Searching for binary cache of automake
+ ==> Installing automake from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.15.1/linux-ubuntu16.04-x86_64-gcc-5.4.0-automake-1.15.1-kaiefe4j2lsq6b32ncrclmbeoa5z25a5.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:27:21 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed automake from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/automake-1.15.1-kaiefe4j2lsq6b32ncrclmbeoa5z25a5
+ ==> libtool is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libtool-2.4.6-o2pfwjf44353ajgr42xqtvzyvqsazkgu
+ ==> Installing gmp
+ ==> Searching for binary cache of gmp
+ ==> Installing gmp from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gmp-6.1.2/linux-ubuntu16.04-x86_64-gcc-5.4.0-gmp-6.1.2-qc4qcfz4monpllc3nqupdo7vwinf73sw.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:12:29 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed gmp from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gmp-6.1.2-qc4qcfz4monpllc3nqupdo7vwinf73sw
+ ==> Installing isl
+ ==> Searching for binary cache of isl
+ ==> Installing isl from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/isl-0.18/linux-ubuntu16.04-x86_64-gcc-5.4.0-isl-0.18-vttqoutnsmjpm3ogb52rninksc7hq5ax.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:12:28 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed isl from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/isl-0.18-vttqoutnsmjpm3ogb52rninksc7hq5ax
+ ==> Installing mpfr
+ ==> Searching for binary cache of mpfr
+ ==> Installing mpfr from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpfr-3.1.5/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpfr-3.1.5-mdi6irzvxcbemt7yredzr36dvo6ty4sl.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:12:30 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed mpfr from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpfr-3.1.5-mdi6irzvxcbemt7yredzr36dvo6ty4sl
+ ==> Installing mpc
+ ==> Searching for binary cache of mpc
+ ==> Installing mpc from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpc-1.0.3/linux-ubuntu16.04-x86_64-gcc-5.4.0-mpc-1.0.3-tumbpshu5hjxwextoudk5hmic6nspb3z.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:12:29 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed mpc from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpc-1.0.3-tumbpshu5hjxwextoudk5hmic6nspb3z
+ ==> zlib is already installed in /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> Installing gcc
+ ==> Searching for binary cache of gcc
+ ==> Installing gcc from binary cache
+ ==> Fetching file:///home/ubuntu/becker/buildcache/build_cache/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0/linux-ubuntu16.04-x86_64-gcc-5.4.0-gcc-7.2.0-k3vy57euyeuyvpotwf4wezfmpo3mrtrj.spack
+ ######################################################################## 100.0%
+ gpg: Signature made Sun 12 Nov 2017 10:16:31 PM UTC using RSA key ID 3B7C69B2
+ gpg: Good signature from "sc-tutorial (GPG created for Spack) <becker33@llnl.gov>" [unknown]
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 95C7 1787 7AC0 0FFD AA8F D6E9 9CFA 4A45 3B7C 69B2
+ ==> Relocating package from
+ /home/ubuntu/becker/spack/opt/spack to /home/ubuntu/test/spack/opt/spack.
+ ==> Successfully installed gcc from binary cache
+ [+] /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-k3vy57euyeuyvpotwf4wezfmpo3mrtrj
+
+ $ spack find -p gcc
+ ==> 1 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ gcc@7.2.0 /home/ubuntu/test/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-k3vy57euyeuyvpotwf4wezfmpo3mrtrj
+
+We can add gcc to Spack as an available compiler using the ``spack
+compiler add`` command. This will allow future packages to build with
+gcc@7.2.0.
+
+.. code-block:: console
+
+ $ spack compiler add /home/ubuntu/becker/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-k3vy57euyeuyvpotwf4wezfmpo3mrtrj
+ ==> Added 1 new compiler to /home/ubuntu/.spack/linux/compilers.yaml
+ gcc@7.2.0
+ ==> Compilers are defined in the following files:
+ /home/ubuntu/.spack/linux/compilers.yaml
+
+We can also remove compilers from our configuration using ``spack compiler remove <compiler_spec>``
+
+.. code-block:: console
+
+ $ spack compiler remove gcc@7.2.0
+ ==> Removed compiler gcc@7.2.0
diff --git a/lib/spack/docs/tutorial_buildsystems.rst b/lib/spack/docs/tutorial_buildsystems.rst
new file mode 100644
index 0000000000..8f5dce0892
--- /dev/null
+++ b/lib/spack/docs/tutorial_buildsystems.rst
@@ -0,0 +1,795 @@
+.. _build-systems-tutorial:
+
+==============================
+Spack Package Build Systems
+==============================
+
+You may begin to notice after writing a couple of package template files a
+pattern emerge for some packages. For example, you may find yourself writing
+an :code:`install()` method that invokes: :code:`configure`, :code:`cmake`,
+:code:`make`, :code:`make install`. You may also find yourself writing
+:code:`"prefix=" + prefix` as an argument to :code:`configure` or :code:`cmake`.
+Rather than having you repeat these lines for all packages, Spack has
+classes that can take care of these patterns. In addition,
+these package files allow for finer grained control of these build systems.
+In this section, we will describe each build system and give examples on
+how these can be manipulated to install a package.
+
+-----------------------
+Package Class Hierarchy
+-----------------------
+
+.. graphviz::
+
+ digraph G {
+
+ node [
+ shape = "record"
+ ]
+ edge [
+ arrowhead = "empty"
+ ]
+
+ PackageBase -> Package [dir=back]
+ PackageBase -> MakefilePackage [dir=back]
+ PackageBase -> AutotoolsPackage [dir=back]
+ PackageBase -> CMakePackage [dir=back]
+ PackageBase -> PythonPackage [dir=back]
+ }
+
+The above diagram gives a high level view of the class hierarchy and how each
+package relates. Each subclass inherits from the :code:`PackageBaseClass`
+super class. The bulk of the work is done in this super class which includes
+fetching, extracting to a staging directory and installing. Each subclass
+then adds additional build-system-specific functionality. In the following
+sections, we will go over examples of how to utilize each subclass and to see
+how powerful these abstractions are when packaging.
+
+-----------------
+Package
+-----------------
+
+We've already seen examples of a :code:`Package` class in our walkthrough for writing
+package files, so we won't be spending much time with them here. Briefly,
+the Package class allows for abitrary control over the build process, whereas
+subclasses rely on certain patterns (e.g. :code:`configure` :code:`make`
+:code:`make install`) to be useful. :code:`Package` classes are particularly useful
+for packages that have a non-conventional way of being built since the packager
+can utilize some of Spack's helper functions to customize the building and
+installing of a package.
+
+-------------------
+Autotools
+-------------------
+
+As we have seen earlier, packages using :code:`Autotools` use :code:`configure`,
+:code:`make` and :code:`make install` commands to execute the build and
+install process. In our :code:`Package` class, your typical build incantation will
+consist of the following:
+
+.. code-block:: python
+
+ def install(self, spec, prefix):
+ configure("--prefix=" + prefix)
+ make()
+ make("install")
+
+You'll see that this looks similar to what we wrote in our packaging tutorial.
+
+The :code:`Autotools` subclass aims to simplify writing package files and provides
+convenience methods to manipulate each of the different phases for a :code:`Autotools`
+build system.
+
+:code:`Autotools` packages consist of four phases:
+
+1. :code:`autoreconf()`
+2. :code:`configure()`
+3. :code:`build()`
+4. :code:`install()`
+
+
+Each of these phases have sensible defaults. Let's take a quick look at some
+the internals of the :code:`Autotools` class:
+
+.. code-block:: console
+
+ $ spack edit --build-system autotools
+
+
+This will open the :code:`AutotoolsPackage` file in your text editor.
+
+.. note::
+ The examples showing code for these classes is abridged to avoid having
+ long examples. We only show what is relevant to the packager.
+
+
+.. literalinclude:: tutorial/examples/Autotools/autotools_class.py
+ :language: python
+ :emphasize-lines: 42,45,62
+ :lines: 40-95,259-267
+ :linenos:
+
+
+Important to note are the highlighted lines. These properties allow the
+packager to set what build targets and install targets they want for their
+package. If, for example, we wanted to add as our build target :code:`foo`
+then we can append to our :code:`build_targets` property:
+
+.. code-block:: python
+
+ build_targets = ["foo"]
+
+Which is similiar to invoking make in our Package
+
+.. code-block:: python
+
+ make("foo")
+
+This is useful if we have packages that ignore environment variables and need
+a command-line argument.
+
+Another thing to take note of is in the :code:`configure()` method.
+Here we see that the :code:`prefix` argument is already included since it is a
+common pattern amongst packages using :code:`Autotools`. We then only have to
+override :code:`configure_args()`, which will then return it's output to
+to :code:`configure()`. Then, :code:`configure()` will append the common
+arguments
+
+Packagers also have the option to run :code:`autoreconf` in case a package
+needs to update the build system and generate a new :code:`configure`. Though,
+for the most part this will be unnecessary.
+
+Let's look at the :code:`mpileaks` package.py file that we worked on earlier:
+
+.. code-block:: console
+
+ $ spack edit mpileaks
+
+Notice that mpileaks is a :code:`Package` class but uses the :code:`Autotools`
+build system. Although this package is acceptable let's make this into an
+:code:`AutotoolsPackage` class and simplify it further.
+
+.. literalinclude:: tutorial/examples/Autotools/0.package.py
+ :language: python
+ :emphasize-lines: 28
+ :linenos:
+
+We first inherit from the :code:`AutotoolsPackage` class.
+
+
+Although we could keep the :code:`install()` method, most of it can be handled
+by the :code:`AutotoolsPackage` base class. In fact, the only thing that needs
+to be overridden is :code:`configure_args()`.
+
+.. literalinclude:: tutorial/examples/Autotools/1.package.py
+ :language: python
+ :emphasize-lines: 42,43
+ :linenos:
+
+Since Spack takes care of setting the prefix for us we can exclude that as
+an argument to :code:`configure`. Our packages look simpler, and the packager
+does not need to worry about whether they have properly included :code:`configure`
+and :code:`make`.
+
+This version of the :code:`mpileaks` package installs the same as the previous,
+but the :code:`AutotoolsPackage` class lets us do it with a cleaner looking
+package file.
+
+-----------------
+Makefile
+-----------------
+
+Packages that utilize :code:`Make` or a :code:`Makefile` usually require you
+to edit a :code:`Makefile` to set up platform and compiler specific variables.
+These packages are handled by the :code:`Makefile` subclass which provides
+convenience methods to help write these types of packages.
+
+A :code:`MakefilePackage` class has three phases that can be overridden. These include:
+
+ 1. :code:`edit()`
+ 2. :code:`build()`
+ 3. :code:`install()`
+
+Packagers then have the ability to control how a :code:`Makefile` is edited, and
+what targets to include for the build phase or install phase.
+
+Let's also take a look inside the :code:`MakefilePackage` class:
+
+.. code-block:: console
+
+ $ spack edit --build-system makefile
+
+Take note of the following:
+
+
+.. literalinclude:: tutorial/examples/Makefile/makefile_class.py
+ :language: python
+ :lines: 33-79,89-107
+ :emphasize-lines: 48,54,61
+ :linenos:
+
+Similar to :code:`Autotools`, :code:`MakefilePackage` class has properties
+that can be set by the packager. We can also override the different
+methods highlighted.
+
+
+Let's try to recreate the Bowtie_ package:
+
+.. _Bowtie: http://bowtie-bio.sourceforge.net/index.shtml
+
+
+.. code-block:: console
+
+ $ spack create -f https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip
+ ==> This looks like a URL for bowtie
+ ==> Found 1 version of bowtie:
+
+ 1.2.1.1 https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip
+
+ ==> How many would you like to checksum? (default is 1, q to abort) 1
+ ==> Downloading...
+ ==> Fetching https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.1.1/bowtie-1.2.1.1-src.zip
+ ######################################################################## 100.0%
+ ==> Checksummed 1 version of bowtie
+ ==> This package looks like it uses the makefile build system
+ ==> Created template for bowtie package
+ ==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/bowtie/package.py
+
+Once the fetching is completed, Spack will open up your text editor in the
+usual fashion and create a template of a :code:`MakefilePackage` package.py.
+
+.. literalinclude:: tutorial/examples/Makefile/0.package.py
+ :language: python
+ :linenos:
+
+Spack was successfully able to detect that :code:`Bowtie` uses :code:`Make`.
+Let's add in the rest of our details for our package:
+
+.. literalinclude:: tutorial/examples/Makefile/1.package.py
+ :language: python
+ :emphasize-lines: 29,30,32,33,37,39
+ :linenos:
+
+As we mentioned earlier, most packages using a :code:`Makefile` have hard-coded
+variables that must be edited. These variables are fine if you happen to not
+care about setup or types of compilers used but Spack is designed to work with
+any compiler. The :code:`MakefilePackage` subclass makes it easy to edit
+these :code:`Makefiles` by having an :code:`edit()` method that
+can be overridden.
+
+Let's take a look at the default :code:`Makefile` that :code:`Bowtie` provides.
+If we look inside, we see that :code:`CC` and :code:`CXX` point to our GNU
+compiler:
+
+.. code-block:: console
+
+ $ spack stage bowtie
+
+.. note::
+ As usual make sure you have shell support activated with spack:
+ :code:`source /path/to/spack_root/spack/share/spack/setup-env.sh`
+
+.. code-block:: console
+
+ $ spack cd -s bowtie
+ $ cd bowtie-1.2
+ $ vim Makefile
+
+
+.. code-block:: make
+
+ CPP = g++ -w
+ CXX = $(CPP)
+ CC = gcc
+ LIBS = $(LDFLAGS) -lz
+ HEADERS = $(wildcard *.h)
+
+To fix this, we need to use the :code:`edit()` method to write our custom
+:code:`Makefile`.
+
+.. literalinclude:: tutorial/examples/Makefile/2.package.py
+ :language: python
+ :emphasize-lines: 42,43,44
+ :linenos:
+
+Here we use a :code:`FileFilter` object to edit our :code:`Makefile`. It takes
+in a regular expression and then replaces :code:`CC` and :code:`CXX` to whatever
+Spack sets :code:`CC` and :code:`CXX` environment variables to. This allows us to
+build :code:`Bowtie` with whatever compiler we specify through Spack's
+:code:`spec` syntax.
+
+Let's change the build and install phases of our package:
+
+.. literalinclude:: tutorial/examples/Makefile/3.package.py
+ :language: python
+ :emphasize-lines: 46, 52
+ :linenos:
+
+Here demonstrate another strategy that we can use to manipulate our package
+We can provide command-line arguments to :code:`make()`. Since :code:`Bowtie`
+can use :code:`tbb` we can either add :code:`NO_TBB=1` as a argument to prevent
+:code:`tbb` support or we can just invoke :code:`make` with no arguments.
+
+:code:`Bowtie` requires our :code:`install_target` to provide a path to
+the install directory. We can do this by providing :code:`prefix=` as a command
+line argument to :code:`make()`.
+
+Let's look at a couple of other examples and go through them:
+
+.. code-block:: console
+
+ $ spack edit cbench
+
+Some packages allow environment variables to be set and will honor them.
+Packages that use :code:`?=` for assignment in their :code:`Makefile`
+can be set using environment variables. In our :code:`cbench` example we
+set two environment variables in our :code:`edit()` method:
+
+.. code-block:: python
+
+ def edit(self, spec, prefix):
+ # The location of the Cbench source tree
+ env['CBENCHHOME'] = self.stage.source_path
+
+ # The location that will contain all your tests and your results
+ env['CBENCHTEST'] = prefix
+
+ # ... more code
+
+As you may have noticed, we didn't really write anything to the :code:`Makefile`
+but rather we set environment variables that will override variables set in
+the :code:`Makefile`.
+
+Some packages include a configuration file that sets certain compiler variables,
+platform specific variables, and the location of dependencies or libraries.
+If the file is simple and only requires a couple of changes, we can overwrite
+those entries with our :code:`FileFilter` object. If the configuration involves
+complex changes, we can write a new configuration file from scratch.
+
+Let's look at an example of this in the :code:`elk` package:
+
+.. code-block:: console
+
+ $ spack edit elk
+
+.. code-block:: python
+
+ def edit(self, spec, prefix):
+ # Dictionary of configuration options
+ config = {
+ 'MAKE': 'make',
+ 'AR': 'ar'
+ }
+
+ # Compiler-specific flags
+ flags = ''
+ if self.compiler.name == 'intel':
+ flags = '-O3 -ip -unroll -no-prec-div'
+ elif self.compiler.name == 'gcc':
+ flags = '-O3 -ffast-math -funroll-loops'
+ elif self.compiler.name == 'pgi':
+ flags = '-O3 -lpthread'
+ elif self.compiler.name == 'g95':
+ flags = '-O3 -fno-second-underscore'
+ elif self.compiler.name == 'nag':
+ flags = '-O4 -kind=byte -dusty -dcfuns'
+ elif self.compiler.name == 'xl':
+ flags = '-O3'
+ config['F90_OPTS'] = flags
+ config['F77_OPTS'] = flags
+
+ # BLAS/LAPACK support
+ # Note: BLAS/LAPACK must be compiled with OpenMP support
+ # if the +openmp variant is chosen
+ blas = 'blas.a'
+ lapack = 'lapack.a'
+ if '+blas' in spec:
+ blas = spec['blas'].libs.joined()
+ if '+lapack' in spec:
+ lapack = spec['lapack'].libs.joined()
+ # lapack must come before blas
+ config['LIB_LPK'] = ' '.join([lapack, blas])
+
+ # FFT support
+ if '+fft' in spec:
+ config['LIB_FFT'] = join_path(spec['fftw'].prefix.lib,
+ 'libfftw3.so')
+ config['SRC_FFT'] = 'zfftifc_fftw.f90'
+ else:
+ config['LIB_FFT'] = 'fftlib.a'
+ config['SRC_FFT'] = 'zfftifc.f90'
+
+ # MPI support
+ if '+mpi' in spec:
+ config['F90'] = spec['mpi'].mpifc
+ config['F77'] = spec['mpi'].mpif77
+ else:
+ config['F90'] = spack_fc
+ config['F77'] = spack_f77
+ config['SRC_MPI'] = 'mpi_stub.f90'
+
+ # OpenMP support
+ if '+openmp' in spec:
+ config['F90_OPTS'] += ' ' + self.compiler.openmp_flag
+ config['F77_OPTS'] += ' ' + self.compiler.openmp_flag
+ else:
+ config['SRC_OMP'] = 'omp_stub.f90'
+
+ # Libxc support
+ if '+libxc' in spec:
+ config['LIB_libxc'] = ' '.join([
+ join_path(spec['libxc'].prefix.lib, 'libxcf90.so'),
+ join_path(spec['libxc'].prefix.lib, 'libxc.so')
+ ])
+ config['SRC_libxc'] = ' '.join([
+ 'libxc_funcs.f90',
+ 'libxc.f90',
+ 'libxcifc.f90'
+ ])
+ else:
+ config['SRC_libxc'] = 'libxcifc_stub.f90'
+
+ # Write configuration options to include file
+ with open('make.inc', 'w') as inc:
+ for key in config:
+ inc.write('{0} = {1}\n'.format(key, config[key]))
+
+:code:`config` is just a dictionary that we can add key-value pairs to. By the
+end of the :code:`edit()` method we write the contents of our dictionary to
+:code:`make.inc`.
+
+---------------
+CMake
+---------------
+
+CMake_ is another common build system that has been gaining popularity. It works
+in a similar manner to :code:`Autotools` but with differences in variable names,
+the number of configuration options available, and the handling of shared libraries.
+Typical build incantations look like this:
+
+.. _CMake: https://cmake.org
+
+.. code-block:: python
+
+ def install(self, spec, prefix):
+ cmake("-DCMAKE_INSTALL_PREFIX:PATH=/path/to/install_dir ..")
+ make()
+ make("install")
+
+As you can see from the example above, it's very similar to invoking
+:code:`configure` and :code:`make` in an :code:`Autotools` build system. However,
+the variable names and options differ. Most options in CMake are prefixed
+with a :code:`'-D'` flag to indicate a configuration setting.
+
+In the :code:`CMakePackage` class we can override the following phases:
+
+1. :code:`cmake()`
+2. :code:`build()`
+3. :code:`install()`
+
+The :code:`CMakePackage` class also provides sensible defaults so we only need to
+override :code:`cmake_args()`.
+
+Let's look at these defaults in the :code:`CMakePackage` class:
+
+.. code-block:: console
+
+ $ spack edit --build-system cmake
+
+
+And go into a bit of detail on the highlighted sections:
+
+
+.. literalinclude:: tutorial/examples/Cmake/cmake_class.py
+ :language: python
+ :lines: 37-92, 94-155, 174-211
+ :emphasize-lines: 57,68,86,94,96,99,100,101,102,111,117,135,136
+ :linenos:
+
+Some :code:`CMake` packages use different generators. Spack is able to support
+Unix-Makefile_ generators as well as Ninja_ generators.
+
+.. _Unix-Makefile: https://cmake.org/cmake/help/v3.4/generator/Unix%20Makefiles.html
+.. _Ninja: https://cmake.org/cmake/help/v3.4/generator/Ninja.html
+
+Default generator is :code:`Unix Makefile`.
+
+Next we setup the build type. In :code:`CMake` you can specify the build type
+that you want. Options include:
+
+1. empty
+2. Debug
+3. Release
+4. RelWithDebInfo
+5. MinSizeRel
+
+With these options you can specify whether you want your executable to have
+the debug version only, release version or the release with debug information.
+Release executables tend to be more optimized than Debug. In Spack, we set
+the default as RelWithDebInfo unless otherwise specified through a variant.
+
+Spack then automatically sets up the :code:`-DCMAKE_INSTALL_PREFIX` path,
+appends the build type (RelDebInfo default), and then specifies a verbose
+:code:`Makefile`.
+
+Next we add the :code:`rpaths` to :code:`-DCMAKE_INSTALL_RPATH:STRING`.
+
+
+Finally we add to :code:`-DCMAKE_PREFIX_PATH:STRING` the locations of all our
+dependencies so that :code:`CMake` can find them.
+
+In the end our :code:`cmake` line will look like this (example is :code:`xrootd`):
+
+.. code-block:: console
+
+ $ cmake $HOME/spack/var/spack/stage/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/xrootd-4.6.0 -G Unix Makefiles -DCMAKE_INSTALL_PREFIX:PATH=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -DCMAKE_FIND_FRAMEWORK:STRING=LAST -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=FALSE -DCMAKE_INSTALL_RPATH:STRING=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/lib:$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/xrootd-4.6.0-4ydm74kbrp4xmcgda5upn33co5pwddyk/lib64 -DCMAKE_PREFIX_PATH:STRING=$HOME/spack/opt/spack/darwin-sierra-x86_64/clang-9.0.0-apple/cmake-3.9.4-hally3vnbzydiwl3skxcxcbzsscaasx5
+
+
+Saves a lot of typing doesn't it?
+
+
+Let's try to recreate callpath_:
+
+.. _callpath: https://github.com/LLNL/callpath.git
+
+.. code-block:: console
+
+ $ spack create -f https://github.com/llnl/callpath/archive/v1.0.3.tar.gz
+ ==> This looks like a URL for callpath
+ ==> Found 4 versions of callpath:
+
+ 1.0.3 https://github.com/LLNL/callpath/archive/v1.0.3.tar.gz
+ 1.0.2 https://github.com/LLNL/callpath/archive/v1.0.2.tar.gz
+ 1.0.1 https://github.com/LLNL/callpath/archive/v1.0.1.tar.gz
+ 1.0 https://github.com/LLNL/callpath/archive/v1.0.tar.gz
+
+ ==> How many would you like to checksum? (default is 1, q to abort) 1
+ ==> Downloading...
+ ==> Fetching https://github.com/LLNL/callpath/archive/v1.0.3.tar.gz
+ ######################################################################## 100.0%
+ ==> Checksummed 1 version of callpath
+ ==> This package looks like it uses the cmake build system
+ ==> Created template for callpath package
+ ==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/callpath/package.py
+
+
+which then produces the following template:
+
+.. literalinclude:: tutorial/examples/Cmake/0.package.py
+ :language: python
+ :linenos:
+
+Again we fill in the details:
+
+.. literalinclude:: tutorial/examples/Cmake/1.package.py
+ :language: python
+ :linenos:
+ :emphasize-lines: 28,32,33,37,38,39,40,41,42
+
+As mentioned earlier, Spack will use sensible defaults to prevent repeated code
+and to make writing :code:`CMake` package files simpler.
+
+In callpath, we want to add options to :code:`CALLPATH_WALKER` as well as add
+compiler flags. We add the following options like so:
+
+.. literalinclude:: tutorial/examples/Cmake/2.package.py
+ :language: python
+ :linenos:
+ :emphasize-lines: 45,49,50
+
+Now we can control our build options using :code:`cmake_args()`. If defaults are
+sufficient enough for the package, we can leave this method out.
+
+:code:`CMakePackage` classes allow for control of other features in the
+build system. For example, you can specify the path to the "out of source"
+build directory and also point to the root of the :code:`CMakeLists.txt` file if it
+is placed in a non-standard location.
+
+A good example of a package that has its :code:`CMakeLists.txt` file located at a
+different location is found in :code:`spades`.
+
+.. code-block:: console
+
+ $ spack edit spade
+
+.. code-block:: python
+
+ root_cmakelists_dir = "src"
+
+Here :code:`root_cmakelists_dir` will tell Spack where to find the location
+of :code:`CMakeLists.txt`. In this example, it is located a directory level below in
+the :code:`src` directory.
+
+Some :code:`CMake` packages also require the :code:`install` phase to be
+overridden. For example, let's take a look at :code:`sniffles`.
+
+.. code-block:: console
+
+ $ spack edit sniffles
+
+In the :code:`install()` method, we have to manually install our targets
+so we override the :code:`install()` method to do it for us:
+
+.. code-block:: python
+
+ # the build process doesn't actually install anything, do it by hand
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ src = "bin/sniffles-core-{0}".format(spec.version.dotted)
+ binaries = ['sniffles', 'sniffles-debug']
+ for b in binaries:
+ install(join_path(src, b), join_path(prefix.bin, b))
+
+
+--------------
+PythonPackage
+--------------
+
+Python extensions and modules are built differently from source than most
+applications. Python uses a :code:`setup.py` script to install Python modules.
+The script consists of a call to :code:`setup()` which provides the information
+required to build a module to Distutils. If you're familiar with pip or
+easy_install, setup.py does the same thing.
+
+These modules are usually installed using the following line:
+
+.. code-block:: console
+
+ $ python setup.py install
+
+There are also a list of commands and phases that you can call. To see the full
+list you can run:
+
+.. code-block:: console
+
+ $ python setup.py --help-commands
+ Standard commands:
+ build build everything needed to install
+ build_py "build" pure Python modules (copy to build directory)
+ build_ext build C/C++ extensions (compile/link to build directory)
+ build_clib build C/C++ libraries used by Python extensions
+ build_scripts "build" scripts (copy and fixup #! line)
+ clean (no description available)
+ install install everything from build directory
+ install_lib install all Python modules (extensions and pure Python)
+ install_headers install C/C++ header files
+ install_scripts install scripts (Python or otherwise)
+ install_data install data files
+ sdist create a source distribution (tarball, zip file, etc.)
+ register register the distribution with the Python package index
+ bdist create a built (binary) distribution
+ bdist_dumb create a "dumb" built distribution
+ bdist_rpm create an RPM distribution
+ bdist_wininst create an executable installer for MS Windows
+ upload upload binary package to PyPI
+ check perform some checks on the package
+
+
+To see the defaults that Spack has for each a methods, we will take a look
+at the :code:`PythonPackage` class:
+
+.. code-block:: console
+
+ $ spack edit --build-system python
+
+We see the following:
+
+
+.. literalinclude:: tutorial/examples/PyPackage/python_package_class.py
+ :language: python
+ :lines: 35, 161-364
+ :linenos:
+
+Each of these methods have sensible defaults or they can be overridden.
+
+We can write package files for Python packages using the :code:`Package` class,
+but the class brings with it a lot of methods that are useless for Python packages.
+Instead, Spack has a :code: `PythonPackage` subclass that allows packagers
+of Python modules to be able to invoke :code:`setup.py` and use :code:`Distutils`,
+which is much more familiar to a typical python user.
+
+
+We will write a package file for Pandas_:
+
+.. _pandas: https://pandas.pydata.org
+
+.. code-block:: console
+
+ $ spack create -f https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz
+ ==> This looks like a URL for pandas
+ ==> Warning: Spack was unable to fetch url list due to a certificate verification problem. You can try running spack -k, which will not check SSL certificates. Use this at your own risk.
+ ==> Found 1 version of pandas:
+
+ 0.19.0 https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz
+
+ ==> How many would you like to checksum? (default is 1, q to abort) 1
+ ==> Downloading...
+ ==> Fetching https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz
+ ######################################################################## 100.0%
+ ==> Checksummed 1 version of pandas
+ ==> This package looks like it uses the python build system
+ ==> Changing package name from pandas to py-pandas
+ ==> Created template for py-pandas package
+ ==> Created package file: /Users/mamelara/spack/var/spack/repos/builtin/packages/py-pandas/package.py
+
+And we are left with the following template:
+
+.. literalinclude:: tutorial/examples/PyPackage/0.package.py
+ :language: python
+ :linenos:
+
+As you can see this is not any different than any package template that we have
+written. We have the choice of providing build options or using the sensible
+defaults
+
+Luckily for us, there is no need to provide build args.
+
+Next we need to find the dependencies of a package. Dependencies are usually
+listed in :code:`setup.py`. You can find the dependencies by searching for
+:code:`install_requires` keyword in that file. Here it is for :code:`Pandas`:
+
+.. code-block:: python
+
+ # ... code
+ if sys.version_info[0] >= 3:
+
+ setuptools_kwargs = {
+ 'zip_safe': False,
+ 'install_requires': ['python-dateutil >= 2',
+ 'pytz >= 2011k',
+ 'numpy >= %s' % min_numpy_ver],
+ 'setup_requires': ['numpy >= %s' % min_numpy_ver],
+ }
+ if not _have_setuptools:
+ sys.exit("need setuptools/distribute for Py3k"
+ "\n$ pip install distribute")
+
+ # ... more code
+
+You can find a more comprehensive list at the Pandas documentation_.
+
+.. _documentation: https://pandas.pydata.org/pandas-docs/stable/install.html
+
+
+By reading the documentation and :code:`setup.py` we found that :code:`Pandas`
+depends on :code:`python-dateutil`, :code:`pytz`, and :code:`numpy`, :code:`numexpr`,
+and finally :code:`bottleneck`.
+
+Here is the completed :code:`Pandas` script:
+
+.. literalinclude:: tutorial/examples/PyPackage/1.package.py
+ :language: python
+ :linenos:
+
+It is quite important to declare all the dependencies of a Python package.
+Spack can "activate" Python packages to prevent the user from having to
+load each dependency module explictly. If a dependency is missed, Spack will
+be unable to properly activate the package and it will cause an issue. To
+learn more about extensions go to :ref:`cmd-spack-extensions`.
+
+From this example, you can see that building Python modules is made easy
+through the :code:`PythonPackage` class.
+
+-------------------
+Other Build Systems
+-------------------
+
+Although we won't get in depth with any of the other build systems that Spack
+supports, it is worth mentioning that Spack does provide subclasses
+for the following build systems:
+
+1. :code:`IntelPackage`
+2. :code:`SconsPackage`
+3. :code:`WafPackage`
+4. :code:`RPackage`
+5. :code:`PerlPackage`
+6. :code:`QMake`
+
+
+Each of these classes have their own abstractions to help assist in writing
+package files. For whatever doesn't fit nicely into the other build-systems,
+you can use the :code:`Package` class.
+
+Hopefully by now you can see how we aim to make packaging simple and
+robust through these classes. If you want to learn more about these build
+systems, check out :ref:`installation_procedure` in the Packaging Guide.
diff --git a/lib/spack/docs/tutorial_configuration.rst b/lib/spack/docs/tutorial_configuration.rst
new file mode 100644
index 0000000000..f9221be9b4
--- /dev/null
+++ b/lib/spack/docs/tutorial_configuration.rst
@@ -0,0 +1,843 @@
+.. _configs-tutorial:
+
+======================
+Configuration Tutorial
+======================
+
+This tutorial will guide you through various configuration options
+that allow you to customize Spack's behavior with respect to
+software installation. We will first cover the configuration file
+hierarchy. Then, we will cover configuration options for compilers,
+focusing on how it can be used to extend Spack's compiler auto-detection.
+Next, we will cover the packages configuration file, focusing on
+how it can be used to override default build options as well as
+specify external package installations to use. Finally, we will
+briefly touch on the config configuration file, which manages more
+high-level Spack configuration options.
+
+For all of these features we will demonstrate how we build up a full
+configuration file. For some we will then demonstrate how the
+configuration affects the install command, and for others we will use
+the ``spack spec`` command to demonstrate how the configuration
+changes have affected Spack's concretization algorithm. The provided
+output is all from a server running Ubuntu version 16.04.
+
+.. _configs-tutorial-scopes:
+
+--------------------
+Configuration Scopes
+--------------------
+
+Depending on your use case, you may want to provide configuration
+settings common to everyone on your team, or you may want to set
+default behaviors specific to a single user account. Spack provides
+4 configuration *scopes* to handle this customization. These scopes,
+in order of decreasing priority, are:
+
+====================== ==================================
+Scope Directory
+====================== ==================================
+User configurations ``~/.spack``
+Project configurations ``$SPACK_ROOT/etc/spack``
+System configurations ``/etc/spack``
+Default configurations ``$SPACK_ROOT/etc/spack/defaults``
+====================== ==================================
+
+Spack's default configuration settings reside in
+``$SPACK_ROOT/etc/spack/defaults``. These are useful for reference,
+but should never be directly edited. To override these settings,
+create new configuration files in any of the higher-priority
+configuration scopes.
+
+A particular cluster may have multiple Spack installations associated
+with different projects. To provide settings common to all Spack
+installations, put your configuration files in ``/etc/spack``.
+To provide settings specific to a particular Spack installation,
+you can use the ``$SPACK_ROOT/etc/spack`` directory.
+
+For settings specific to a particular user, you will want to add
+configuration files to the ``~/.spack`` directory. When Spack first
+checked for compilers on your system, you may have noticed that it
+placed your compiler configuration in this directory.
+
+Some facilities manage multiple platforms from a single shared
+filesystem. In order to handle this, each of the configuration
+scopes listed above has two *sub-scopes*: platform-specific and
+platform-independent. For example, compiler settings can be stored
+in ``compilers.yaml`` configuration files in the following locations:
+
+- ``~/.spack/<platform>/compilers.yaml``
+- ``~/.spack/compilers.yaml``
+- ``$SPACK_ROOT/etc/spack/<platform>/compilers.yaml``
+- ``$SPACK_ROOT/etc/spack/compilers.yaml``
+- ``/etc/spack/<platform>/compilers.yaml``
+- ``/etc/spack/compilers.yaml``
+- ``$SPACK_ROOT/etc/defaults/<platform>/compilers.yaml``
+- ``$SPACK_ROOT/etc/defaults/compilers.yaml``
+
+These files are listed in decreasing order of precedence, so files in
+``~/.spack/<platform>`` will override settings in ``~/.spack``.
+
+Spack configurations are YAML dictionaries. Every configuration file
+begins with a top-level dictionary that tells Spack which
+configuration set it modifies. When Spack checks it's configuration,
+the configuration scopes are updated as dictionaries in increasing
+order of precedence, allowing higher precedence files to override
+lower. YAML dictionaries use a colon ":" to specify key-value
+pairs. Spack extends YAML syntax slightly to allow a double-colon
+"::" to specify a key-value pair. When a double-colon is used to
+specify a key-value pair, instead of adding that section Spack
+replaces what was in that section with the new value. For example, a
+user compilers configuration file as follows:
+
+.. code-block:: yaml
+
+ compilers::
+ - compiler:
+ environment: {}
+ extra_rpaths: []
+ flags: {}
+ modules: []
+ operating_system: ubuntu16.04
+ paths:
+ cc: /usr/bin/gcc
+ cxx: /usr/bin/g++
+ f77: /usr/bin/gfortran
+ fc: /usr/bin/gfortran
+ spec: gcc@5.4.0
+ target: x86_64
+
+
+ensures that no other compilers are used, as the user configuration
+scope is the last scope searched and the ``compilers::`` line replaces
+all previous configuration files information. If the same
+configuration file had a single colon instead of the double colon, it
+would add the gcc version 5.4.0 compiler to whatever other compilers
+were listed in other configuration files.
+
+.. _configs-tutorial-compilers:
+
+----------------------
+Compiler Configuration
+----------------------
+
+For most tasks, we can use Spack with the compilers auto-detected the
+first time Spack runs on a system. As we discussed in the basic
+installation section, we can also tell Spack where compilers are
+located using the ``spack compiler add`` command. However, in some
+circumstances we want even more fine-grained control over the
+compilers available. This section will teach you how to exercise that
+control using the compilers configuration file.
+
+We will start by opening the compilers configuration file
+
+.. code-block:: console
+
+ $ spack config edit compilers
+
+
+.. code-block:: yaml
+
+ compilers:
+ - compiler:
+ environment: {}
+ extra_rpaths: []
+ flags: {}
+ modules: []
+ operating_system: ubuntu16.04
+ paths:
+ cc: /usr/bin/clang
+ cxx: /usr/bin/clang++
+ f77: null
+ fc: null
+ spec: clang@3.8.0-2ubuntu4
+ target: x86_64
+ - compiler:
+ environment: {}
+ extra_rpaths: []
+ flags: {}
+ modules: []
+ operating_system: ubuntu16.04
+ paths:
+ cc: /usr/bin/gcc
+ cxx: /usr/bin/g++
+ f77: /usr/bin/gfortran
+ fc: /usr/bin/gfortran
+ spec: gcc@5.4.0
+ target: x86_64
+
+
+This specifies one version of the gcc compiler and one version of the
+clang compiler with no flang compiler. Now suppose we have a code that
+we want to compile with the clang compiler for C/C++ code, but with
+gfortran for Fortran components. We can do this by adding another entry
+to the ``compilers.yaml`` file.
+
+.. code-block:: yaml
+
+ - compiler:
+ environment: {}
+ extra_rpaths: []
+ flags: {}
+ modules: []
+ operating_system: ubuntu16.04
+ paths:
+ cc: /usr/bin/clang
+ cxx: /usr/bin/clang++
+ f77: /usr/bin/gfortran
+ fc: /usr/bin/gfortran
+ spec: clang@3.8.0-gfortran
+ target: x86_64
+
+
+Let's talk about the sections of this compiler entry that we've changed.
+The biggest change we've made is to the ``paths`` section. This lists
+the paths to the compilers to use for each language/specification.
+In this case, we point to the clang compiler for C/C++ and the gfortran
+compiler for both specifications of Fortran. We've also changed the
+``spec`` entry for this compiler. The ``spec`` entry is effectively the
+name of the compiler for Spack. It consists of a name and a version
+number, separated by the ``@`` sigil. The name must be one of the supported
+compiler names in Spack (gcc, intel, pgi, xl, xl_r, clang, nag, cce).
+The version number can be an arbitrary string of alphanumeric characters,
+as well as ``-``, ``.``, and ``_``. The ``target`` and ``operating_system``
+sections we leave unchanged. These sections specify when Spack can use
+different compilers, and are primarily useful for configuration files that
+will be used across multiple systems.
+
+We can verify that our new compiler works by invoking it now:
+
+.. code-block:: console
+
+ $ spack install zlib %clang@3.8.0-gfortran
+ ...
+
+
+This new compiler also works on Fortran codes:
+
+.. code-block:: console
+
+ $ spack install cfitsio %clang@3.8.0-gfortran
+ ...
+
+
+^^^^^^^^^^^^^^
+Compiler Flags
+^^^^^^^^^^^^^^
+
+Some compilers may require specific compiler flags to work properly in
+a particular computing environment. Spack provides configuration
+options for setting compiler flags every time a specific compiler is
+invoked. These flags become part of the package spec and therefore of
+the build provenance. As on the command line, the flags are set
+through the implicit build variables ``cflags``, ``cxxflags``, ``cppflags``,
+``fflags``, ``ldflags``, and ``ldlibs``.
+
+Let's open our compilers configuration file again and add a compiler flag.
+
+.. code-block:: yaml
+
+ - compiler:
+ environment: {}
+ extra_rpaths: []
+ flags:
+ cppflags: -g
+ modules: []
+ operating_system: ubuntu16.04
+ paths:
+ cc: /usr/bin/clang
+ cxx: /usr/bin/clang++
+ f77: /usr/bin/gfortran
+ fc: /usr/bin/gfortran
+ spec: clang@3.8.0-gfortran
+ target: x86_64
+
+
+We can test this out using the ``spack spec`` command to show how the
+spec is concretized.
+
+.. code-block:: console
+
+ $ spack spec cfitsio %clang@3.8.0-gfortran
+ Input spec
+ --------------------------------
+ cfitsio%clang@3.8.0-gfortran
+
+ Normalized
+ --------------------------------
+ cfitsio%clang@3.8.0-gfortran
+
+ Concretized
+ --------------------------------
+ cfitsio@3.410%clang@3.8.0-gfortran cppflags="-g" +bzip2+shared arch=linux-ubuntu16.04-x86_64
+ ^bzip2@1.0.6%clang@3.8.0-gfortran cppflags="-g" +shared arch=linux-ubuntu16.04-x86_64
+
+
+We can see that "cppflags=-g" has been added to every node in the DAG.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Advanced Compiler Configuration
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+There are three fields of the compiler configuration entry that we
+have not talked about yet.
+
+The ``modules`` field of the compiler is used primarily on Cray systems,
+but can be useful on any system that has compilers that are only
+useful when a particular module is loaded. Any modules in the
+``modules`` field of the compiler configuration will be loaded as part
+of the build environment for packages using that compiler.
+
+The ``extra_rpaths`` field of the compiler configuration is used for
+compilers that do not rpath all of their dependencies by
+default. Since compilers are generally installed externally to Spack,
+Spack is unable to manage compiler dependencies and enforce
+rpath usage. This can lead to packages not finding link dependencies
+imposed by the compiler properly. For compilers that impose link
+dependencies on the resulting executables that are not rpath'ed into
+the executable automatically, the ``extra_rpath`` field of the compiler
+configuration tells Spack which dependencies to rpath into every
+executable created by that compiler. The executables will then be able
+to find the link dependencies imposed by the compiler.
+
+The ``environment`` field of the compiler configuration is used for
+compilers that require environment variables to be set during build
+time. For example, if your Intel compiler suite requires the
+``INTEL_LICENSE_FILE`` environment variable to point to the proper
+license server, you can set this in ``compilers.yaml``.
+
+-------------------------------
+Configuring Package Preferences
+-------------------------------
+
+Package preferences in Spack are managed through the ``packages.yaml``
+configuration file. First, we will look at the default
+``packages.yaml`` file.
+
+.. code-block:: console
+
+ $ spack config --scope defaults edit packages
+
+
+.. literalinclude:: ../../../etc/spack/defaults/packages.yaml
+ :language: yaml
+
+
+This sets the default preferences for compilers and for providers of
+virtual packages. To illustrate how this works, suppose we want to
+change the preferences to prefer the clang compiler and to prefer
+mpich over openmpi. Currently, we prefer gcc and openmpi
+
+.. code-block:: console
+
+ $ spack spec hdf5
+ Input spec
+ --------------------------------
+ hdf5
+
+ Normalized
+ --------------------------------
+ hdf5
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%gcc@5.4.0+cxx~debug+fortran+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^openmpi@3.0.0%gcc@5.4.0~cuda fabrics= ~java schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
+ ^hwloc@1.11.7%gcc@5.4.0~cuda+libxml2~pci arch=linux-ubuntu16.04-x86_64
+ ^libxml2@2.9.4%gcc@5.4.0~python arch=linux-ubuntu16.04-x86_64
+ ^pkg-config@0.29.2%gcc@5.4.0+internal_glib arch=linux-ubuntu16.04-x86_64
+ ^xz@5.2.3%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.11%gcc@5.4.0+pic+shared arch=linux-ubuntu16.04-x86_64
+
+
+Now we will open the packages configuration file and update our
+preferences.
+
+.. code-block:: console
+
+ $ spack config edit packages
+
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+
+
+Because of the configuration scoping we discussed earlier, this
+overrides the default settings just for these two items.
+
+.. code-block:: console
+
+ $ spack spec hdf5
+ Input spec
+ --------------------------------
+ hdf5
+
+ Normalized
+ --------------------------------
+ hdf5
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4+cxx~debug~fortran~hl+mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^mpich@3.2%clang@3.8.0-2ubuntu4 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.11%clang@3.8.0-2ubuntu4+pic+shared arch=linux-ubuntu16.04-x86_64
+
+
+^^^^^^^^^^^^^^^^^^^
+Variant Preferences
+^^^^^^^^^^^^^^^^^^^
+
+The packages configuration file can also set variant preferences for
+package variants. For example, let's change our preferences to build all
+packages without shared libraries. We will accomplish this by turning
+off the ``shared`` variant on all packages that have one.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+
+
+We can check the effect of this command with ``spack spec hdf5`` again.
+
+.. code-block:: console
+
+ $ spack spec hdf5
+ Input spec
+ --------------------------------
+ hdf5
+
+ Normalized
+ --------------------------------
+ hdf5
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4+cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^mpich@3.2%clang@3.8.0-2ubuntu4 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.11%clang@3.8.0-2ubuntu4+pic~shared arch=linux-ubuntu16.04-x86_64
+
+
+So far we have only made global changes to the package preferences. As
+we've seen throughout this tutorial, hdf5 builds with MPI enabled by
+default in Spack. If we were working on a project that would routinely
+need serial hdf5, that might get annoying quickly, having to type
+``hdf5~mpi`` all the time. Instead, we'll update our preferences for
+hdf5.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+ hdf5:
+ variants: ~mpi
+
+
+Now hdf5 will concretize without an MPI dependency by default.
+
+.. code-block:: console
+
+ $ spack spec hdf5
+ Input spec
+ --------------------------------
+ hdf5
+
+ Normalized
+ --------------------------------
+ hdf5
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4+cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.11%clang@3.8.0-2ubuntu4+pic~shared arch=linux-ubuntu16.04-x86_64
+
+
+In general, every attribute that we can set for all packages we can
+set separately for an individual package.
+
+^^^^^^^^^^^^^^^^^
+External Packages
+^^^^^^^^^^^^^^^^^
+
+The packages configuration file also controls when Spack will build
+against an externally installed package. On these systems we have a
+pre-installed zlib.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+ hdf5:
+ variants: ~mpi
+ zlib:
+ paths:
+ zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
+
+
+Here, we've told Spack that zlib 1.2.8 is installed on our system.
+We've also told it the installation prefix where zlib can be found.
+We don't know exactly which variants it was built with, but that's
+okay.
+
+.. code-block:: console
+
+ $ spack spec hdf5
+ Input spec
+ --------------------------------
+ hdf5
+
+ Normalized
+ --------------------------------
+ hdf5
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%gcc@5.4.0~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64
+
+
+You'll notice that Spack is now using the external zlib installation,
+but the compiler used to build zlib is now overriding our compiler
+preference of clang. If we explicitly specify clang:
+
+.. code-block:: console
+
+ $ spack spec hdf5 %clang
+ Input spec
+ --------------------------------
+ hdf5%clang
+
+ Normalized
+ --------------------------------
+ hdf5%clang
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.11%clang@3.8.0-2ubuntu4+optimize+pic~shared arch=linux-ubuntu16.04-x86_64
+
+
+Spack concretizes to both hdf5 and zlib being built with clang.
+This has a side-effect of rebuilding zlib. If we want to force
+Spack to use the system zlib, we have two choices. We can either
+specify it on the command line, or we can tell Spack that it's
+not allowed to build its own zlib. We'll go with the latter.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+ hdf5:
+ variants: ~mpi
+ zlib:
+ paths:
+ zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
+ buildable: False
+
+
+Now Spack will be forced to choose the external zlib.
+
+.. code-block:: console
+
+ $ spack spec hdf5 %clang
+ Input spec
+ --------------------------------
+ hdf5%clang
+
+ Normalized
+ --------------------------------
+ hdf5%clang
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl~mpi+pic+shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.8%gcc@5.4.0+optimize+pic~shared arch=linux-ubuntu16.04-x86_64
+
+
+This gets slightly more complicated with virtual dependencies. Suppose
+we don't want to build our own MPI, but we now want a parallel version
+of hdf5? Well, fortunately we have mpich installed on these systems.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+ hdf5:
+ variants: ~mpi
+ zlib:
+ paths:
+ zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
+ buildable: False
+ mpich:
+ paths:
+ mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64: /usr
+ buildable: False
+
+
+If we concretize ``hdf5+mpi`` with this configuration file, we will just
+build with an alternate MPI implementation.
+
+.. code-block:: console
+
+ $ spack spec hdf5 %clang +mpi
+ Input spec
+ --------------------------------
+ hdf5%clang+mpi
+
+ Normalized
+ --------------------------------
+ hdf5%clang+mpi
+ ^mpi
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4~cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^openmpi@3.0.0%clang@3.8.0-2ubuntu4~cuda fabrics=verbs ~java schedulers= ~sqlite3~thread_multiple+vt arch=linux-ubuntu16.04-x86_64
+ ^hwloc@1.11.8%clang@3.8.0-2ubuntu4~cuda+libxml2+pci arch=linux-ubuntu16.04-x86_64
+ ^libpciaccess@0.13.5%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
+ ^libtool@2.4.6%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
+ ^m4@1.4.18%clang@3.8.0-2ubuntu4 patches=3877ab548f88597ab2327a2230ee048d2d07ace1062efe81fc92e91b7f39cd00 +sigsegv arch=linux-ubuntu16.04-x86_64
+ ^libsigsegv@2.11%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
+ ^pkg-config@0.29.2%clang@3.8.0-2ubuntu4+internal_glib arch=linux-ubuntu16.04-x86_64
+ ^util-macros@1.19.1%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
+ ^libxml2@2.9.4%clang@3.8.0-2ubuntu4~python arch=linux-ubuntu16.04-x86_64
+ ^xz@5.2.3%clang@3.8.0-2ubuntu4 arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.8%gcc@5.4.0+optimize+pic+shared arch=linux-ubuntu16.04-x86_64
+
+
+We have only expressed a preference for mpich over other MPI
+implementations, and Spack will happily build with one we haven't
+forbid it from using. We could resolve this by requesting
+``hdf5%clang+mpi^mpich`` explicitly, or we can configure Spack not to
+use any other MPI implementation. Since we're focused on
+configurations here and the former can get tedious, we'll need to
+modify our ``packages.yaml`` file again.
+
+While we're at it, we can configure hdf5 to build with MPI by default
+again.
+
+.. code-block:: yaml
+
+ packages:
+ all:
+ compiler: [clang, gcc, intel, pgi, xl, nag]
+ providers:
+ mpi: [mpich, openmpi]
+ variants: ~shared
+ zlib:
+ paths:
+ zlib@1.2.8%gcc@5.4.0 arch=linux-ubuntu16.04-x86_64: /usr
+ buildable: False
+ mpich:
+ paths:
+ mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64: /usr
+ buildable: False
+ openmpi:
+ buildable: False
+ mvapich2:
+ buildable: False
+ intel-mpi:
+ buildable: False
+ spectrum-mpi:
+ buildable: False
+ intel-parallel-studio:
+ buildable: False
+
+Now that we have configured Spack not to build any of the possible
+providers for MPI we can try again.
+
+.. code-block:: console
+
+ $ spack spec hdf5 %clang
+ Input spec
+ --------------------------------
+ hdf5%clang
+
+ Normalized
+ --------------------------------
+ hdf5%clang
+ ^mpi
+ ^zlib@1.1.2:
+
+ Concretized
+ --------------------------------
+ hdf5@1.10.1%clang@3.8.0-2ubuntu4+cxx~debug~fortran~hl+mpi+pic~shared~szip~threadsafe arch=linux-ubuntu16.04-x86_64
+ ^mpich@3.2%gcc@5.4.0 device=ch3 +hydra netmod=tcp +pmi+romio~verbs arch=linux-ubuntu16.04-x86_64
+ ^zlib@1.2.8%gcc@5.4.0+pic+shared arch=linux-ubuntu16.04-x86_64
+
+
+By configuring most of our package preferences in ``packages.yaml``,
+we can cut down on the amount of work we need to do when specifying
+a spec on the command line. In addition to compiler and variant
+preferences, we can specify version preferences as well. Anything
+that you can specify on the command line can be specified in
+``packages.yaml`` with the exact same spec syntax.
+
+.. warning::
+
+ Make sure to delete or move the ``packages.yaml`` you have been
+ editing up to this point. Otherwise, it will change the hashes
+ of your packages, leading to differences in the output of later
+ tutorial sections.
+
+
+-----------------
+High-level Config
+-----------------
+
+In addition to compiler and package settings, Spack allows customization
+of several high-level settings. These settings are stored in the generic
+``config.yaml`` configuration file. You can see the default settings by
+running:
+
+.. code-block:: console
+
+ $ spack config --scope defaults edit config
+
+
+.. literalinclude:: ../../../etc/spack/defaults/config.yaml
+ :language: yaml
+
+
+As you can see, many of the directories Spack uses can be customized.
+For example, you can tell Spack to install packages to a prefix
+outside of the ``$SPACK_ROOT`` hierarchy. Module files can be
+written to a central location if you are using multiple Spack
+instances. If you have a fast scratch filesystem, you can run builds
+from this filesystem with the following ``config.yaml``:
+
+.. code-block:: yaml
+
+ config:
+ build_stage:
+ - /scratch/$user
+
+
+On systems with compilers that absolutely *require* environment variables
+like ``LD_LIBRARY_PATH``, it is possible to prevent Spack from cleaning
+the build environment with the ``dirty`` setting:
+
+.. code-block:: yaml
+
+ config:
+ dirty: true
+
+
+However, this is strongly discouraged, as it can pull unwanted libraries
+into the build.
+
+One last setting that may be of interest to many users is the ability
+to customize the parallelism of Spack builds. By default, Spack
+installs all packages in parallel with the number of jobs equal to the
+number of cores on the node. For example, on a node with 36 cores,
+this will look like:
+
+.. code-block:: console
+
+ $ spack install --verbose zlib
+ ==> Installing zlib
+ ==> Using cached archive: ~/spack/var/spack/cache/zlib/zlib-1.2.11.tar.gz
+ ==> Staging archive: ~/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb/zlib-1.2.11.tar.gz
+ ==> Created stage in ~/spack/var/spack/stage/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb
+ ==> No patches needed for zlib
+ ==> Building zlib [Package]
+ ==> Executing phase: 'install'
+ ==> './configure' '--prefix=~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/zlib-1.2.11-5nus6knzumx4ik2yl44jxtgtsl7d54xb'
+ Checking for shared library support...
+ Building shared library libz.so.1.2.11 with ~/spack/lib/spack/env/gcc/gcc.
+ Checking for size_t... Yes.
+ Checking for off64_t... Yes.
+ Checking for fseeko... Yes.
+ Checking for strerror... Yes.
+ Checking for unistd.h... Yes.
+ Checking for stdarg.h... Yes.
+ Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
+ Checking for vsnprintf() in stdio.h... Yes.
+ Checking for return value of vsnprintf()... Yes.
+ Checking for attribute(visibility) support... Yes.
+ ==> 'make' '-j36'
+ ...
+ ==> 'make' '-j36' 'install'
+ ...
+
+
+As you can see, we are building with all 36 cores on the node. If you are
+on a shared login node, this can slow down the system for other users. If
+you have a strict ulimit or restriction on the number of available licenses,
+you may not be able to build at all with this many cores. On nodes with 64+
+cores, you may not see a significant speedup of the build anyway. To limit
+the number of cores our build uses, set ``build_jobs`` like so:
+
+.. code-block:: yaml
+
+ config:
+ build_jobs: 4
+
+
+If we uninstall and reinstall zlib, we see that it now uses only 4 cores:
+
+.. code-block:: console
+
+ $ spack install -v zlib
+ ==> Installing zlib
+ ==> Using cached archive: ~/spack/var/spack/cache/zlib/zlib-1.2.11.tar.gz
+ ==> Staging archive: ~/spack/var/spack/stage/zlib-1.2.11-ezuwp4pa52e75v6iweawzwymmf4ahxxn/zlib-1.2.11.tar.gz
+ ==> Created stage in ~/spack/var/spack/stage/zlib-1.2.11-ezuwp4pa52e75v6iweawzwymmf4ahxxn
+ ==> No patches needed for zlib
+ ==> Building zlib [Package]
+ ==> Executing phase: 'install'
+ ==> './configure' '--prefix=~/spack/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/zlib-1.2.11-ezuwp4pa52e75v6iweawzwymmf4ahxxn'
+ Checking for shared library support...
+ Building shared library libz.so.1.2.11 with ~/spack/lib/spack/env/gcc/gcc.
+ Checking for size_t... Yes.
+ Checking for off64_t... Yes.
+ Checking for fseeko... Yes.
+ Checking for strerror... Yes.
+ Checking for unistd.h... Yes.
+ Checking for stdarg.h... Yes.
+ Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf().
+ Checking for vsnprintf() in stdio.h... Yes.
+ Checking for return value of vsnprintf()... Yes.
+ Checking for attribute(visibility) support... Yes.
+ ==> 'make' '-j4'
+ ...
+ ==> 'make' '-j4' 'install'
+ ...
+
+
+Obviously, if you want to build everything in serial for whatever reason,
+you would set ``build_jobs`` to 1.
+
diff --git a/lib/spack/docs/tutorial_modules.rst b/lib/spack/docs/tutorial_modules.rst
new file mode 100644
index 0000000000..21e1e5e886
--- /dev/null
+++ b/lib/spack/docs/tutorial_modules.rst
@@ -0,0 +1,1541 @@
+.. _modules-tutorial:
+
+============
+Module Files
+============
+
+In this tutorial, we'll introduce a few concepts that are fundamental
+to the generation of module files with Spack, and we'll guide you through
+the customization of both module files content and their layout on disk. In the end you
+should have a clear understanding of:
+
+ * What are module files and how they work
+ * How Spack generates them
+ * Which commands are available to ease their maintenance
+ * How it is possible to customize them in all aspects
+
+.. _module_file_tutorial_overview:
+
+-------------------
+Modules at a glance
+-------------------
+
+Let's start by summarizing what module files are and how you can use
+them to modify your environment. The idea is to give enough information so that
+people without any previous exposure to them will be able to follow the tutorial
+later on. We'll also give a high-level view of how module files are generated
+in Spack. If you are already familiar with these topics you can quickly skim
+through this section or move directly to :ref:`module_file_tutorial_prerequisites`.
+
+.. _module_file_tutorial_what_are_modules:
+
+^^^^^^^^^^^^^^^^^^^^^^
+What are module files?
+^^^^^^^^^^^^^^^^^^^^^^
+
+Module files are an easy way to modify your environment in a controlled manner
+during a shell session. In general, they contain the information needed to run an
+application or use a library, and they work in conjunction with a tool that
+interprets them.
+Typical module files instruct this tool to modify the environment variables when a
+module file is loaded:
+
+ .. code-block:: console
+
+ $ module show zlib
+ -------------------------------------------------------------------
+ /home/mculpo/PycharmProjects/spack/share/spack/modules/linux-ubuntu14.04-x86_64/zlib/1.2.11-gcc-7.2.0-linux-ubuntu14.04-x86_64-co2px3k:
+
+ module-whatis A free, general-purpose, legally unencumbered lossless data-compression library.
+ prepend-path MANPATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/share/man
+ prepend-path LIBRARY_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib
+ prepend-path LD_LIBRARY_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib
+ prepend-path CPATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/include
+ prepend-path PKG_CONFIG_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib/pkgconfig
+ prepend-path CMAKE_PREFIX_PATH /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/
+ -------------------------------------------------------------------
+
+ $ echo $LD_LIBRARY_PATH
+
+ $ module load zlib
+ $ echo $LD_LIBRARY_PATH
+ /home/mculpo/PycharmProjects/spack/opt/spack/linux-ubuntu14.04-x86_64/gcc-7.2.0/zlib-1.2.11-co2px3k53m76lm6tofylh2mur2hnicux/lib
+
+and to undo the modifications when the same module file is unloaded:
+
+ .. code-block:: console
+
+ $ module unload zlib
+ $ echo $LD_LIBRARY_PATH
+
+ $
+
+Different formats exist for module files, and different tools
+provide various levels of support for them. Spack can natively generate:
+
+1. Non-hierarchical module files written in TCL
+2. Hierarchical module files written in Lua
+
+and can build `environment-modules <http://modules.sourceforge.net/>`_
+and `lmod <http://lmod.readthedocs.io/en/latest>`_ as support tools.
+Which of the formats or tools best suits one's needs depends on each particular
+use-case. For the sake of illustration, we'll be working on
+both formats using ``lmod``.
+
+.. seealso::
+ Environment modules
+ This is the original tool that provided modules support. Its first
+ version was coded in C in the early '90s and was later substituted by a version
+ completely coded in TCL - the one Spack is distributing. More details on
+ its features are given in the `homepage of the project <http://modules.sourceforge.net/>`_
+ or in its `github page <https://github.com/cea-hpc/modules>`_. The tool is able to
+ interpret the non-hierarchical TCL modulefiles written by Spack.
+
+ Lmod
+ Lmod is a module system written in Lua, designed to easily handle hierarchies of
+ module files. It's a drop-in replacement of Environment Modules and works with
+ both of the module file formats generated by Spack.
+ Despite being fully compatible with Environment Modules there are many features that
+ are unique to Lmod. These features are either
+ `targeted towards safety <http://lmod.readthedocs.io/en/latest/010_user.html#safety-features>`_
+ or meant to
+ `extend the module system functionality <http://lmod.readthedocs.io/en/latest/010_user.html#module-hierarchy>`_.
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+How do we generate module files?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Before we dive into the hands-on sections it's worth spending a couple of words to explain how
+module files are generated by Spack. The following diagram provides a high-level view
+of the process:
+
+
+.. image:: module_file_generation.*
+
+The red dashed line above represents Spack's boundaries, the blue one Spack's dependencies [#f1]_.
+Module files are generated by combining:
+
+ * the configuration details in ``config.yaml`` and ``modules.yaml``
+ * the information contained in Spack packages (and processed by the module subpackage)
+ * a set of template files
+
+with `Jinja2 <http://jinja.pocoo.org/docs/2.9/>`_, an external template engine
+that stamps out each particular module file. As Spack serves very diverse needs
+this process has many points of customization, and we'll explore most of
+them in the next sections.
+
+.. [#f1] Spack vendors its dependencies! This means that Spack comes with a copy of
+ each one of its dependencies, including ``Jinja2``, and is already configured to use them.
+
+.. _module_file_tutorial_prerequisites:
+
+----------------------
+Setup for the tutorial
+----------------------
+
+In order to showcase the capabilities of Spack's module file generation, we need
+a representative set of software to work with. This set must include different
+flavors of the same packages installed alongside each other and some
+:ref:`external packages <sec-external-packages>`.
+
+The purpose of this setup is not to make our life harder but to demonstrate
+how Spack can help with similar situations, as they will happen on real HPC clusters.
+For instance, it's often preferable for Spack to use vendor-provided MPI
+implementations than to build one itself.
+
+The best way to follow along is to use a Docker image, which comes
+with Spack and all the software used in the following parts already
+pre-installed. If you want to proceed this way, read :ref:`module_file_tutorial_use_docker`.
+
+If you don't have Docker installed or for any other reason you
+prefer to work locally, follow instead :ref:`module_file_tutorial_work_locally`
+to know how to clone Spack and install the software.
+Be aware that the set-up will take longer and that the details of the snippets
+below assume the Docker image and may need changes to work in your particular
+environment.
+
+.. _module_file_tutorial_use_docker:
+
+^^^^^^^^^^^^^^^^^^
+Use a Docker image
+^^^^^^^^^^^^^^^^^^
+
+The fastest way to set-up your environment is to :ref:`use a Docker image <workflow_create_docker_image>`:
+
+.. code-block:: console
+
+ $ docker pull alalazo/spack:module_tutorial
+ $ docker run --rm -h module-file-tutorial -it alalazo/spack:module_tutorial
+ root@module-file-tutorial:/#
+
+If you arrived at this point you should be ready to start, as all the software needed is
+pre-installed in the image:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# which spack
+ /usr/local/bin/spack
+ root@module-file-tutorial:/# spack find
+ ==> 46 installed packages.
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ autoconf@2.69 gcc@7.2.0 git@2.9.4 isl@0.18 libtool@2.4.6 lua@5.3.4 lua-luaposix@33.4.0 mpc@1.0.3 ncurses@6.0 pkg-config@0.29.2 tcl@8.6.6
+ automake@1.15.1 gdbm@1.13 gmp@6.1.2 libsigsegv@2.11 lmod@7.7 lua-luafilesystem@1_6_3 m4@1.4.18 mpfr@3.1.5 perl@5.24.1 readline@7.0 zlib@1.2.11
+
+ -- linux-ubuntu16.04-x86_64 / gcc@7.2.0 -------------------------
+ bzip2@1.0.6 ncurses@6.0 netlib-scalapack@2.0.2 openblas@0.2.20 pkg-config@0.29.2 py-packaging@16.8 py-setuptools@35.0.2 readline@7.0
+ cmake@3.9.4 netlib-lapack@3.6.1 netlib-scalapack@2.0.2 openmpi@1.10.2 py-appdirs@1.4.3 py-pyparsing@2.2.0 py-six@1.10.0 sqlite@3.20.0
+ mpich@3.2 netlib-scalapack@2.0.2 netlib-scalapack@2.0.2 openssl@1.0.2k py-numpy@1.13.1 py-scipy@0.19.1 python@2.7.14 zlib@1.2.11
+
+Go to :ref:`module_file_tutorial_non_hierarchical` to proceed with the tutorial.
+
+.. note::
+ Dockerfile for this image
+ Those of you that want to build a similar container themselves can find the
+ ``Dockerfile`` and the other resources in Spack's ``share/spack/docs/docker``
+ folder.
+
+.. _module_file_tutorial_work_locally:
+
+^^^^^^^^^^^^^^^^^^^^^^
+Work in a local folder
+^^^^^^^^^^^^^^^^^^^^^^
+
+If you don't feel like using a container, you can set-up your environment
+locally. Let's start by cloning the Spack repository and moving to the directory
+where it was checked out:
+
+.. code-block:: console
+
+ $ git clone https://github.com/spack/spack.git
+ $ cd spack
+
+From here we'll be building the required stack of software.
+
+"""""""""""""""""""
+Build a module tool
+"""""""""""""""""""
+
+The first thing that we need is the module tool. In this case we
+choose ``lmod`` as it can work with both hierarchical and non-hierarchical
+module file layouts.
+
+.. code-block:: console
+
+ $ bin/spack install lmod
+
+Once the module tool is installed we need to have it available in the
+current shell. As the installation directories are definitely not easy
+to remember, we'll employ the command ``spack location`` to retrieve the
+``lmod`` prefix directly from Spack:
+
+.. code-block:: console
+
+ $ . $(spack location -i lmod)/lmod/lmod/init/bash
+
+Now we can source the setup file and activate the :ref:`shell support <shell-support>`:
+
+.. code-block:: console
+
+ $ . share/spack/setup_env.sh
+
+.. FIXME: this needs bootstrap support for ``lmod``
+
+.. FIXME: check the docs here, update them if necessary
+ If you need to install Lmod or Environment module you can refer
+ to the documentation :ref:`here <InstallEnvironmentModules>`.
+
+
+""""""""""""""""""
+Add a new compiler
+""""""""""""""""""
+
+The second step is to build a recent compiler. On first use, Spack
+scans the environment and automatically locates the
+compiler(s) already available on the system. This is what you'll see
+on Ubuntu 14.04:
+
+.. code-block:: console
+
+ $ uname -a
+ Linux nuvolari 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
+
+ $ spack compilers
+ ==> Available compilers
+ -- gcc ----------------------------------------------------------
+ gcc@4.8
+
+Let's bootstrap a more recent compiler with the one that was automatically detected:
+
+.. code-block:: console
+
+ $ spack install gcc@7.2.0
+ ...
+ Wait a long time
+ ...
+
+Once ``gcc`` is installed we can use shell support to load it and make
+it readily available:
+
+.. code-block:: console
+
+ $ spack load gcc@7.2.0
+
+It may not be apparent, but the last command employed the module files
+generated automatically by Spack. What happens under the hood when you use
+the ``spack load`` command is:
+
+1. the spec passed as argument is translated into a module file name
+2. the current module tool is used to load that module file
+
+You can use this command to double check:
+
+.. code-block:: console
+
+ $ module list
+ Currently Loaded Modules:
+ 1) lmod-7.7-gcc-4.8-okcwjgw 2) gcc-7.2.0-gcc-4.8-twd5nqg
+
+Note that the 7-digit hash at the end of the generated module may vary depending
+on architecture or package version. Now that we have ``gcc@7.2.0`` in ``PATH`` we
+can finally add it to the list of compilers known to Spack:
+
+.. code-block:: console
+
+ $ spack compiler add
+ ==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
+ gcc@7.2.0
+
+ $ spack compilers
+ ==> Available compilers
+ -- gcc ----------------------------------------------------------
+ gcc@7.2.0 gcc@4.8
+
+
+""""""""""""""""""""""""""""""""""""""""""""""""""""
+Build the software that will be used in the tutorial
+""""""""""""""""""""""""""""""""""""""""""""""""""""
+
+The last step is to install the software stack needed later on. To mimic
+an external installation of an MPI provider we'll install ``openmpi`` on
+the system we are working on. On Ubuntu 14.04 it boils down to:
+
+.. code-block:: console
+
+ $ sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev
+ ...
+
+but the exact command varies according to your OS. Then we need to prepare
+a ``packages.yaml`` file that instructs Spack to use an externally provided MPI:
+
+.. code-block:: yaml
+
+ packages:
+ openmpi:
+ buildable: False
+ paths:
+ openmpi@1.6: /usr
+
+Finally, we should use Spack to install the packages used in the examples:
+
+.. code-block:: console
+
+ $ spack install netlib-scalapack ^openmpi ^openblas
+ $ spack install netlib-scalapack ^mpich ^openblas
+ $ spack install netlib-scalapack ^openmpi ^netlib-lapack
+ $ spack install netlib-scalapack ^mpich ^netlib-lapack
+ $ spack install py-scipy ^openblas
+
+
+.. _module_file_tutorial_non_hierarchical:
+
+-----------------------------
+Non-hierarchical module files
+-----------------------------
+
+If you arrived to this point you should have an environment that looks similar to:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module avail
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ autoconf-2.69-gcc-5.4.0-bvabhji libtool-2.4.6-gcc-5.4.0-o2pfwjf ncurses-6.0-gcc-7.2.0-oh6pqty pkg-config-0.29.2-gcc-5.4.0-ae2hwm7 readline-7.0-gcc-5.4.0-gizxpch
+ automake-1.15.1-gcc-5.4.0-kaiefe4 lmod-7.7-gcc-5.4.0-okcwjgw netlib-lapack-3.6.1-gcc-7.2.0-5sywztc pkg-config-0.29.2-gcc-7.2.0-76z7ehw readline-7.0-gcc-7.2.0-eqos6rz
+ bzip2-1.0.6-gcc-7.2.0-mwamumj lua-5.3.4-gcc-5.4.0-ytxw2gq netlib-scalapack-2.0.2-gcc-7.2.0-5lb2j5p py-appdirs-1.4.3-gcc-7.2.0-7ncu7zr sqlite-3.20.0-gcc-7.2.0-hfmjilk
+ cmake-3.9.4-gcc-7.2.0-6bxdr6h lua-luafilesystem-1_6_3-gcc-5.4.0-5dzzlt4 netlib-scalapack-2.0.2-gcc-7.2.0-ax6aza6 py-numpy-1.13.1-gcc-7.2.0-22n5oub tcl-8.6.6-gcc-5.4.0-767ls4i
+ gcc-7.2.0-gcc-5.4.0-go3z4hb lua-luaposix-33.4.0-gcc-5.4.0-w5jpnwm netlib-scalapack-2.0.2-gcc-7.2.0-c4v5l7j py-packaging-16.8-gcc-7.2.0-c37cjmq zlib-1.2.11-gcc-5.4.0-swly52a
+ gdbm-1.13-gcc-5.4.0-vdhoris m4-1.4.18-gcc-5.4.0-r5envx3 netlib-scalapack-2.0.2-gcc-7.2.0-m7rzcmh py-pyparsing-2.2.0-gcc-7.2.0-ahdh5cx zlib-1.2.11-gcc-7.2.0-lv5fabl
+ git-2.9.4-gcc-5.4.0-atwjs4i mpc-1.0.3-gcc-5.4.0-tumbpsh openblas-0.2.20-gcc-7.2.0-kvddide py-scipy-0.19.1-gcc-7.2.0-7hi7r5j
+ gmp-6.1.2-gcc-5.4.0-qc4qcfz mpfr-3.1.5-gcc-5.4.0-mdi6irz openmpi-1.10.2-gcc-7.2.0-ufw7pdi py-setuptools-35.0.2-gcc-7.2.0-cvasi7i
+ isl-0.18-gcc-5.4.0-vttqout mpich-3.2-gcc-7.2.0-7gxffhv openssl-1.0.2k-gcc-7.2.0-pxv3dh4 py-six-1.10.0-gcc-7.2.0-3xk5mod
+ libsigsegv-2.11-gcc-5.4.0-fypapcp ncurses-6.0-gcc-5.4.0-ukq4tcc perl-5.24.1-gcc-5.4.0-mfzwy6y python-2.7.14-gcc-7.2.0-555u7ea
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+The non-hierarchical module files that have been generated so far
+follow :ref:`the default rules for module generation <modules-yaml>`.
+Taking a look at the ``gcc`` module you'll see, for example:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module show gcc-7.2.0-gcc-5.4.0-go3z4hb
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/gcc-7.2.0-gcc-5.4.0-go3z4hb:
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
+ prepend_path("PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/bin")
+ prepend_path("MANPATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/share/man")
+ prepend_path("LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib")
+ prepend_path("LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib64")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib64")
+ prepend_path("CPATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/include")
+ prepend_path("CMAKE_PREFIX_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/")
+ help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Ada, and Go, as well as libraries for these languages.
+ ]])
+
+As expected, a few environment variables representing paths will be modified
+by the module file according to the default prefix inspection rules.
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Filter unwanted modifications to the environment
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Now consider the case that your site has decided that ``CPATH`` and
+``LIBRARY_PATH`` modifications should not be present in module files. What you can
+do to abide by the rules is to create a configuration file ``~/.spack/modules.yaml``
+with the following content:
+
+.. code-block:: yaml
+
+ modules:
+ tcl:
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+
+Next you should regenerate all the module files:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl
+ ==> You are about to regenerate tcl module files for:
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ bvabhji autoconf@2.69 vdhoris gdbm@1.13 vttqout isl@0.18 okcwjgw lmod@7.7 w5jpnwm lua-luaposix@33.4.0 mdi6irz mpfr@3.1.5 ae2hwm7 pkg-config@0.29.2 swly52a zlib@1.2.11
+ kaiefe4 automake@1.15.1 atwjs4i git@2.9.4 fypapcp libsigsegv@2.11 ytxw2gq lua@5.3.4 r5envx3 m4@1.4.18 ukq4tcc ncurses@6.0 gizxpch readline@7.0
+ go3z4hb gcc@7.2.0 qc4qcfz gmp@6.1.2 o2pfwjf libtool@2.4.6 5dzzlt4 lua-luafilesystem@1_6_3 tumbpsh mpc@1.0.3 mfzwy6y perl@5.24.1 767ls4i tcl@8.6.6
+
+ -- linux-ubuntu16.04-x86_64 / gcc@7.2.0 -------------------------
+ mwamumj bzip2@1.0.6 5sywztc netlib-lapack@3.6.1 m7rzcmh netlib-scalapack@2.0.2 76z7ehw pkg-config@0.29.2 ahdh5cx py-pyparsing@2.2.0 555u7ea python@2.7.14
+ 6bxdr6h cmake@3.9.4 ax6aza6 netlib-scalapack@2.0.2 kvddide openblas@0.2.20 7ncu7zr py-appdirs@1.4.3 7hi7r5j py-scipy@0.19.1 eqos6rz readline@7.0
+ 7gxffhv mpich@3.2 c4v5l7j netlib-scalapack@2.0.2 ufw7pdi openmpi@1.10.2 22n5oub py-numpy@1.13.1 cvasi7i py-setuptools@35.0.2 hfmjilk sqlite@3.20.0
+ oh6pqty ncurses@6.0 5lb2j5p netlib-scalapack@2.0.2 pxv3dh4 openssl@1.0.2k c37cjmq py-packaging@16.8 3xk5mod py-six@1.10.0 lv5fabl zlib@1.2.11
+
+ ==> Do you want to proceed? [y/n] y
+ ==> Regenerating tcl module files
+
+If you take a look now at the module for ``gcc`` you'll see that the unwanted
+paths have disappeared:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module show gcc-7.2.0-gcc-5.4.0-go3z4hb
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/gcc-7.2.0-gcc-5.4.0-go3z4hb:
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
+ prepend_path("PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/bin")
+ prepend_path("MANPATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/share/man")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib64")
+ prepend_path("CMAKE_PREFIX_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/")
+ help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Ada, and Go, as well as libraries for these languages.
+ ]])
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Prevent some module files from being generated
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Another common request at many sites is to avoid exposing software that
+is only needed as an intermediate step when building a newer stack.
+Let's try to prevent the generation of
+module files for anything that is compiled with ``gcc@5.4.0`` (the OS provided compiler).
+
+To do this you should add a ``blacklist`` keyword to ``~/.spack/modules.yaml``:
+
+.. code-block:: yaml
+ :emphasize-lines: 3,4
+
+ modules:
+ tcl:
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+
+and regenerate the module files:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl --delete-tree
+ ==> You are about to regenerate tcl module files for:
+
+ -- linux-ubuntu16.04-x86_64 / gcc@5.4.0 -------------------------
+ bvabhji autoconf@2.69 vdhoris gdbm@1.13 vttqout isl@0.18 okcwjgw lmod@7.7 w5jpnwm lua-luaposix@33.4.0 mdi6irz mpfr@3.1.5 ae2hwm7 pkg-config@0.29.2 swly52a zlib@1.2.11
+ kaiefe4 automake@1.15.1 atwjs4i git@2.9.4 fypapcp libsigsegv@2.11 ytxw2gq lua@5.3.4 r5envx3 m4@1.4.18 ukq4tcc ncurses@6.0 gizxpch readline@7.0
+ go3z4hb gcc@7.2.0 qc4qcfz gmp@6.1.2 o2pfwjf libtool@2.4.6 5dzzlt4 lua-luafilesystem@1_6_3 tumbpsh mpc@1.0.3 mfzwy6y perl@5.24.1 767ls4i tcl@8.6.6
+
+ -- linux-ubuntu16.04-x86_64 / gcc@7.2.0 -------------------------
+ mwamumj bzip2@1.0.6 5sywztc netlib-lapack@3.6.1 m7rzcmh netlib-scalapack@2.0.2 76z7ehw pkg-config@0.29.2 ahdh5cx py-pyparsing@2.2.0 555u7ea python@2.7.14
+ 6bxdr6h cmake@3.9.4 ax6aza6 netlib-scalapack@2.0.2 kvddide openblas@0.2.20 7ncu7zr py-appdirs@1.4.3 7hi7r5j py-scipy@0.19.1 eqos6rz readline@7.0
+ 7gxffhv mpich@3.2 c4v5l7j netlib-scalapack@2.0.2 ufw7pdi openmpi@1.10.2 22n5oub py-numpy@1.13.1 cvasi7i py-setuptools@35.0.2 hfmjilk sqlite@3.20.0
+ oh6pqty ncurses@6.0 5lb2j5p netlib-scalapack@2.0.2 pxv3dh4 openssl@1.0.2k c37cjmq py-packaging@16.8 3xk5mod py-six@1.10.0 lv5fabl zlib@1.2.11
+
+ ==> Do you want to proceed? [y/n] y
+ ==> Regenerating tcl module files
+
+ root@module-file-tutorial:/# module avail
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ bzip2-1.0.6-gcc-7.2.0-mwamumj netlib-scalapack-2.0.2-gcc-7.2.0-5lb2j5p openmpi-1.10.2-gcc-7.2.0-ufw7pdi py-packaging-16.8-gcc-7.2.0-c37cjmq python-2.7.14-gcc-7.2.0-555u7ea
+ cmake-3.9.4-gcc-7.2.0-6bxdr6h netlib-scalapack-2.0.2-gcc-7.2.0-ax6aza6 openssl-1.0.2k-gcc-7.2.0-pxv3dh4 py-pyparsing-2.2.0-gcc-7.2.0-ahdh5cx readline-7.0-gcc-7.2.0-eqos6rz
+ mpich-3.2-gcc-7.2.0-7gxffhv netlib-scalapack-2.0.2-gcc-7.2.0-c4v5l7j pkg-config-0.29.2-gcc-7.2.0-76z7ehw py-scipy-0.19.1-gcc-7.2.0-7hi7r5j sqlite-3.20.0-gcc-7.2.0-hfmjilk
+ ncurses-6.0-gcc-7.2.0-oh6pqty netlib-scalapack-2.0.2-gcc-7.2.0-m7rzcmh py-appdirs-1.4.3-gcc-7.2.0-7ncu7zr py-setuptools-35.0.2-gcc-7.2.0-cvasi7i zlib-1.2.11-gcc-7.2.0-lv5fabl
+ netlib-lapack-3.6.1-gcc-7.2.0-5sywztc openblas-0.2.20-gcc-7.2.0-kvddide py-numpy-1.13.1-gcc-7.2.0-22n5oub py-six-1.10.0-gcc-7.2.0-3xk5mod
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+This time it is convenient to pass the option ``--delete-tree`` to the command that
+regenerates the module files to instruct it to delete the existing tree and regenerate
+a new one instead of overwriting the files in the existing directory.
+
+If you look closely you'll see though that we went too far in blacklisting modules:
+the module for ``gcc@7.2.0`` disappeared as it was bootstrapped with ``gcc@5.4.0``. To specify
+exceptions to the blacklist rules you can use ``whitelist``:
+
+.. code-block:: yaml
+ :emphasize-lines: 3,4
+
+ modules:
+ tcl:
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+
+``whitelist`` rules always have precedence over ``blacklist`` rules. If you regenerate the modules again:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl -y
+ ==> Regenerating tcl module files
+
+
+you'll see that now the module for ``gcc@7.2.0`` has reappeared:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module avail gcc-7.2.0-gcc-5.4.0-go3z4hb
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ gcc-7.2.0-gcc-5.4.0-go3z4hb
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^
+Change module file naming
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The next step in making module files more user-friendly is to
+improve their naming scheme.
+To reduce the length of the hash or remove it altogether you can
+use the ``hash_length`` keyword in the configuration file:
+
+.. TODO: give reasons to remove hashes if they are not evident enough?
+
+.. code-block:: yaml
+ :emphasize-lines: 3
+
+ modules:
+ tcl:
+ hash_length: 0
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+
+If you try to regenerate the module files now you will get an error:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl --delete-tree -y
+ ==> Error: Name clashes detected in module files:
+
+ file: /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/netlib-scalapack-2.0.2-gcc-7.2.0
+ spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
+ spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
+ spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
+ spec: netlib-scalapack@2.0.2%gcc@7.2.0 build_type=RelWithDebInfo ~pic+shared arch=linux-ubuntu16.04-x86_64
+
+ ==> Error: Operation aborted
+
+.. note::
+ We try to check for errors upfront!
+ In Spack we check for errors upfront whenever possible, so don't worry about your module files:
+ as a name clash was detected nothing has been changed on disk.
+
+The problem here is that without
+the hashes the four different flavors of ``netlib-scalapack`` map to the same module file
+name. We can add suffixes to differentiate them:
+
+.. code-block:: yaml
+ :emphasize-lines: 9-11,14-17
+
+ modules:
+ tcl:
+ hash_length: 0
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ netlib-scalapack:
+ suffixes:
+ '^openmpi': openmpi
+ '^mpich': mpich
+
+As you can see it is possible to specify rules that apply only to a
+restricted set of packages using :ref:`anonymous specs <anonymous_specs>`.
+Regenerating module files now we obtain:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl --delete-tree -y
+ ==> Regenerating tcl module files
+
+ root@module-file-tutorial:/# module avail
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ bzip2-1.0.6-gcc-7.2.0 netlib-lapack-3.6.1-gcc-7.2.0 openblas-0.2.20-gcc-7.2.0 py-numpy-1.13.1-gcc-7.2.0-openblas py-six-1.10.0-gcc-7.2.0
+ cmake-3.9.4-gcc-7.2.0 netlib-scalapack-2.0.2-gcc-7.2.0-netlib-mpich openmpi-1.10.2-gcc-7.2.0 py-packaging-16.8-gcc-7.2.0 python-2.7.14-gcc-7.2.0
+ gcc-7.2.0-gcc-5.4.0 netlib-scalapack-2.0.2-gcc-7.2.0-netlib-openmpi openssl-1.0.2k-gcc-7.2.0 py-pyparsing-2.2.0-gcc-7.2.0 readline-7.0-gcc-7.2.0
+ mpich-3.2-gcc-7.2.0 netlib-scalapack-2.0.2-gcc-7.2.0-openblas-mpich pkg-config-0.29.2-gcc-7.2.0 py-scipy-0.19.1-gcc-7.2.0-openblas sqlite-3.20.0-gcc-7.2.0
+ ncurses-6.0-gcc-7.2.0 netlib-scalapack-2.0.2-gcc-7.2.0-openblas-openmpi py-appdirs-1.4.3-gcc-7.2.0 py-setuptools-35.0.2-gcc-7.2.0 zlib-1.2.11-gcc-7.2.0
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+Finally we can set a ``naming_scheme`` to prevent users from loading
+modules that refer to different flavors of the same library/application:
+
+.. code-block:: yaml
+ :emphasize-lines: 4,10,11
+
+ modules:
+ tcl:
+ hash_length: 0
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ conflict:
+ - '${PACKAGE}'
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ netlib-scalapack:
+ suffixes:
+ '^openmpi': openmpi
+ '^mpich': mpich
+
+The final result should look like:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type tcl --delete-tree -y
+ ==> Regenerating tcl module files
+ root@module-file-tutorial:/# module avail
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ bzip2/1.0.6-gcc-7.2.0 netlib-lapack/3.6.1-gcc-7.2.0 openblas/0.2.20-gcc-7.2.0 py-numpy/1.13.1-gcc-7.2.0-openblas py-six/1.10.0-gcc-7.2.0
+ cmake/3.9.4-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-netlib-mpich openmpi/1.10.2-gcc-7.2.0 py-packaging/16.8-gcc-7.2.0 python/2.7.14-gcc-7.2.0
+ gcc/7.2.0-gcc-5.4.0 netlib-scalapack/2.0.2-gcc-7.2.0-netlib-openmpi openssl/1.0.2k-gcc-7.2.0 py-pyparsing/2.2.0-gcc-7.2.0 readline/7.0-gcc-7.2.0
+ mpich/3.2-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-openblas-mpich pkg-config/0.29.2-gcc-7.2.0 py-scipy/0.19.1-gcc-7.2.0-openblas sqlite/3.20.0-gcc-7.2.0
+ ncurses/6.0-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-openblas-openmpi (D) py-appdirs/1.4.3-gcc-7.2.0 py-setuptools/35.0.2-gcc-7.2.0 zlib/1.2.11-gcc-7.2.0
+
+ Where:
+ D: Default Module
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+.. note::
+ TCL specific directive
+ The directives ``naming_scheme`` and ``conflict`` are TCL specific and
+ can't be used in the ``lmod`` section of the configuration file.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Add custom environment modifications
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+At many sites it is customary to set an environment variable in a
+package's module file that points to the folder in which the package
+is installed. You can achieve this with Spack by adding an
+``environment`` directive to the configuration file:
+
+.. code-block:: yaml
+ :emphasize-lines: 17-19
+
+ modules:
+ tcl:
+ hash_length: 0
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ conflict:
+ - '${PACKAGE}'
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ netlib-scalapack:
+ suffixes:
+ '^openmpi': openmpi
+ '^mpich': mpich
+
+Under the hood Spack uses the :meth:`~spack.spec.Spec.format` API to substitute
+tokens in either environment variable names or values. There are two caveats though:
+
+- The set of allowed tokens in variable names is restricted to ``PACKAGE``,
+ ``VERSION``, ``COMPILER``, ``COMPILERNAME``, ``COMPILERVER``, ``ARCHITECTURE``
+- Any token expanded in a variable name is made uppercase, but other than that
+ case sensitivity is preserved
+
+Regenerating the module files results in something like:
+
+.. code-block:: console
+ :emphasize-lines: 15
+
+ root@module-file-tutorial:/# spack module refresh -y --module-type tcl
+ ==> Regenerating tcl module files
+
+ root@module-file-tutorial:/# module show gcc
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/gcc/7.2.0-gcc-5.4.0:
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
+ conflict("gcc")
+ prepend_path("PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/bin")
+ prepend_path("MANPATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/share/man")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib64")
+ prepend_path("CMAKE_PREFIX_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/")
+ setenv("GCC_ROOT","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd")
+ help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Ada, and Go, as well as libraries for these languages.
+ ]])
+
+As you can see, the ``gcc`` module has the environment variable ``GCC_ROOT`` set.
+
+Sometimes it's also useful to apply environment modifications selectively and target
+only certain packages. You can, for instance set the common variables ``CC``, ``CXX``,
+etc. in the ``gcc`` module file and apply other custom modifications to the
+``openmpi`` modules as follows:
+
+.. code-block:: yaml
+ :emphasize-lines: 20-32
+
+ modules:
+ tcl:
+ hash_length: 0
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ conflict:
+ - '${PACKAGE}'
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ gcc:
+ environment:
+ set:
+ CC: gcc
+ CXX: g++
+ FC: gfortran
+ F90: gfortran
+ F77: gfortran
+ openmpi:
+ environment:
+ set:
+ SLURM_MPI_TYPE: pmi2
+ OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
+ netlib-scalapack:
+ suffixes:
+ '^openmpi': openmpi
+ '^mpich': mpich
+
+This time we will be more selective and regenerate only the ``gcc`` and
+``openmpi`` module files:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh -y --module-type tcl gcc
+ ==> Regenerating tcl module files
+
+ root@module-file-tutorial:/# spack module refresh -y --module-type tcl openmpi
+ ==> Regenerating tcl module files
+
+ root@module-file-tutorial:/# module show gcc
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/gcc/7.2.0-gcc-5.4.0:
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ whatis("The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, and Go, as well as libraries for these languages. ")
+ conflict("gcc")
+ prepend_path("PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/bin")
+ prepend_path("MANPATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/share/man")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib")
+ prepend_path("LD_LIBRARY_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/lib64")
+ prepend_path("CMAKE_PREFIX_PATH","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd/")
+ setenv("GCC_ROOT","/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/gcc-7.2.0-go3z4hbsa6wycoaedr3fforx5qnazdhd")
+ setenv("CC","gcc")
+ setenv("CXX","g++")
+ setenv("FC","gfortran")
+ setenv("F90","gfortran")
+ setenv("F77","gfortran")
+ help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Ada, and Go, as well as libraries for these languages.
+ ]])
+
+ root@module-file-tutorial:/# module show openmpi
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64/openmpi/1.10.2-gcc-7.2.0:
+ ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+ whatis("The Open MPI Project is an open source Message Passing Interface implementation that is developed and maintained by a consortium of academic, research, and industry partners. Open MPI is therefore able t
+ o combine the expertise, technologies, and resources from all across the High Performance Computing community in order to build the best MPI library available. Open MPI offers advantages for system and software
+ vendors, application developers and computer science researchers. ")
+ conflict("openmpi")
+ prepend_path("MANPATH","/usr/share/man")
+ prepend_path("ACLOCAL_PATH","/usr/share/aclocal")
+ prepend_path("PKG_CONFIG_PATH","/usr/lib/pkgconfig")
+ setenv("OPENMPI_ROOT","/usr")
+ setenv("SLURM_MPI_TYPE","pmi2")
+ setenv("OMPI_MCA_btl_openib_warn_default_gid_prefix","0")
+ help([[The Open MPI Project is an open source Message Passing Interface
+ implementation that is developed and maintained by a consortium of
+ academic, research, and industry partners. Open MPI is therefore able to
+ combine the expertise, technologies, and resources from all across the
+ High Performance Computing community in order to build the best MPI
+ library available. Open MPI offers advantages for system and software
+ vendors, application developers and computer science researchers.
+ ]])
+
+
+^^^^^^^^^^^^^^^^^^^^^
+Autoload dependencies
+^^^^^^^^^^^^^^^^^^^^^
+
+Spack can also generate module files that contain code to load the
+dependencies automatically. You can, for instance generate python
+modules that load their dependencies by adding the ``autoload``
+directive and assigning it the value ``direct``:
+
+.. code-block:: yaml
+ :emphasize-lines: 3,38,39
+
+ modules:
+ tcl:
+ verbose: True
+ hash_length: 0
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ conflict:
+ - '${PACKAGE}'
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ gcc:
+ environment:
+ set:
+ CC: gcc
+ CXX: g++
+ FC: gfortran
+ F90: gfortran
+ F77: gfortran
+ openmpi:
+ environment:
+ set:
+ SLURM_MPI_TYPE: pmi2
+ OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
+ netlib-scalapack:
+ suffixes:
+ '^openmpi': openmpi
+ '^mpich': mpich
+ ^python:
+ autoload: 'direct'
+
+and regenerating the module files for every package that depends on ``python``:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh -y --module-type tcl ^python
+ ==> Regenerating tcl module files
+
+Now the ``py-scipy`` module will be:
+
+.. code-block:: tcl
+
+ #%Module1.0
+ ## Module file created by spack (https://github.com/spack/spack) on 2017-10-07 15:02:14.974937
+ ##
+ ## py-scipy@0.19.1%gcc@7.2.0 arch=linux-ubuntu16.04-x86_64 /7hi7r5j
+ ##
+
+
+ module-whatis "SciPy (pronounced 'Sigh Pie') is a Scientific Library for Python. It provides many user-friendly and efficient numerical routines such as routines for numerical integration and optimization."
+
+ proc ModulesHelp { } {
+ puts stderr "SciPy (pronounced 'Sigh Pie') is a Scientific Library for Python. It"
+ puts stderr "provides many user-friendly and efficient numerical routines such as"
+ puts stderr "routines for numerical integration and optimization."
+ }
+
+ if ![ is-loaded python/2.7.14-gcc-7.2.0 ] {
+ puts stderr "Autoloading python/2.7.14-gcc-7.2.0"
+ module load python/2.7.14-gcc-7.2.0
+ }
+ if ![ is-loaded openblas/0.2.20-gcc-7.2.0 ] {
+ puts stderr "Autoloading openblas/0.2.20-gcc-7.2.0"
+ module load openblas/0.2.20-gcc-7.2.0
+ }
+ if ![ is-loaded py-numpy/1.13.1-gcc-7.2.0-openblas ] {
+ puts stderr "Autoloading py-numpy/1.13.1-gcc-7.2.0-openblas"
+ module load py-numpy/1.13.1-gcc-7.2.0-openblas
+ }
+ conflict py-scipy
+
+ prepend-path LD_LIBRARY_PATH "/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-0.19.1-7hi7r5jri7bmohh4oontvfxo7rgj4hef/lib"
+ prepend-path CMAKE_PREFIX_PATH "/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-0.19.1-7hi7r5jri7bmohh4oontvfxo7rgj4hef/"
+ prepend-path PYTHONPATH "/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-0.19.1-7hi7r5jri7bmohh4oontvfxo7rgj4hef/lib/python2.7/site-packages"
+ setenv PY_SCIPY_ROOT "/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/py-scipy-0.19.1-7hi7r5jri7bmohh4oontvfxo7rgj4hef"
+
+and will contain code to autoload all the dependencies:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load py-scipy
+ Autoloading python/2.7.14-gcc-7.2.0
+ Autoloading openblas/0.2.20-gcc-7.2.0
+ Autoloading py-numpy/1.13.1-gcc-7.2.0-openblas
+
+In case messages are unwanted during the autoload procedure, it will be
+sufficient to omit the line setting ``verbose: True`` in the configuration file above.
+
+-------------------------
+Hierarchical module files
+-------------------------
+
+So far we worked with non-hierarchical module files, i.e. with module files
+that are all generated in the same root directory and don't attempt to
+dynamically modify the ``MODULEPATH``. This results in a flat module structure where
+all the software is visible at the same time:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module avail
+
+ ----------------------------------------------------------------------------- /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64 -----------------------------------------------------------------------------
+ bzip2/1.0.6-gcc-7.2.0 netlib-lapack/3.6.1-gcc-7.2.0 openblas/0.2.20-gcc-7.2.0 py-numpy/1.13.1-gcc-7.2.0-openblas py-six/1.10.0-gcc-7.2.0
+ cmake/3.9.4-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-netlib-mpich openmpi/1.10.2-gcc-7.2.0 py-packaging/16.8-gcc-7.2.0 python/2.7.14-gcc-7.2.0
+ gcc/7.2.0-gcc-5.4.0 netlib-scalapack/2.0.2-gcc-7.2.0-netlib-openmpi openssl/1.0.2k-gcc-7.2.0 py-pyparsing/2.2.0-gcc-7.2.0 readline/7.0-gcc-7.2.0
+ mpich/3.2-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-openblas-mpich pkg-config/0.29.2-gcc-7.2.0 py-scipy/0.19.1-gcc-7.2.0-openblas sqlite/3.20.0-gcc-7.2.0
+ ncurses/6.0-gcc-7.2.0 netlib-scalapack/2.0.2-gcc-7.2.0-openblas-openmpi (D) py-appdirs/1.4.3-gcc-7.2.0 py-setuptools/35.0.2-gcc-7.2.0 zlib/1.2.11-gcc-7.2.0
+
+ Where:
+ D: Default Module
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+This layout is quite simple to deploy, but you can see from the above snippet
+that nothing prevents users from loading incompatible sets of modules:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load netlib-lapack/3.6.1-gcc-7.2.0 openblas/0.2.20-gcc-7.2.0
+ root@module-file-tutorial:/# module list
+
+ Currently Loaded Modules:
+ 1) netlib-lapack/3.6.1-gcc-7.2.0 2) openblas/0.2.20-gcc-7.2.0
+
+Even if ``conflicts`` directives are carefully placed in module files, they:
+
+ - won't enforce a consistent environment, but will just report an error
+ - need constant updates, for instance as soon as a new compiler or MPI library is installed
+
+`Hierarchical module files <http://lmod.readthedocs.io/en/latest/080_hierarchy.html>`_ try to
+overcome these shortcomings by showing at start-up only a restricted view of what is
+available on the system: more specifically only the software that has been installed with
+OS provided compilers. Among this software there will be other - usually more recent - compilers
+that, once loaded, will prepend new directories to ``MODULEPATH`` unlocking all the software
+that was compiled with them. This "unlocking" idea can then be extended arbitrarily to
+virtual dependencies, as we'll see in the following section.
+
+^^^^^^^^^^^^^^^^^
+Core/Compiler/MPI
+^^^^^^^^^^^^^^^^^
+
+The most widely used hierarchy is the so called ``Core/Compiler/MPI`` where, on top
+of the compilers, different MPI libraries also unlock software linked to them.
+There are just a few steps needed to adapt the ``modules.yaml`` file we used previously:
+
+ #. enable the ``lmod`` file generator
+ #. change the ``tcl`` tag to ``lmod``
+ #. remove ``tcl`` specific directives (``naming_scheme`` and ``conflict``)
+ #. declare which compilers are considered ``core_compilers``
+ #. remove the ``mpi`` related suffixes (as they will be substituted by hierarchies)
+
+After these modifications your configuration file should look like:
+
+.. code-block:: yaml
+ :emphasize-lines: 2-8
+
+ modules:
+ enable::
+ - lmod
+ lmod:
+ core_compilers:
+ - 'gcc@5.4.0'
+ hierarchy:
+ - mpi
+ hash_length: 0
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ all:
+ suffixes:
+ '^openblas': openblas
+ '^netlib-lapack': netlib
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ gcc:
+ environment:
+ set:
+ CC: gcc
+ CXX: g++
+ FC: gfortran
+ F90: gfortran
+ F77: gfortran
+ openmpi:
+ environment:
+ set:
+ SLURM_MPI_TYPE: pmi2
+ OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
+
+
+.. note::
+ Double colon in configuration files
+ The double colon after ``enable`` is intentional and it serves the
+ purpose of overriding the default list of enabled generators so
+ that only ``lmod`` will be active (see :ref:`config-overrides` for more
+ details).
+
+The directive ``core_compilers`` accepts a list of compilers. Everything built
+using these compilers will create a module in the ``Core`` part of the hierarchy,
+which is the entry point for hierarchical module files. It is
+common practice to put the OS provided compilers in the list and only build common utilities
+and other compilers with them.
+
+If we now regenerate the module files:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh --module-type lmod --delete-tree -y
+ ==> Regenerating lmod module files
+
+and update ``MODULEPATH`` to point to the ``Core``:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module unuse /usr/local/share/spack/modules/linux-ubuntu16.04-x86_64
+ root@module-file-tutorial:/# module use /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core
+
+asking for the available modules will return:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module avail
+
+ ---------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------------------------------------
+ gcc/7.2.0
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+Unsurprisingly, the only visible module is ``gcc``. Loading that we'll unlock
+the ``Compiler`` part of the hierarchy:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load gcc
+ root@module-file-tutorial:/# module avail
+
+ ------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------------------------------------
+ bzip2/1.0.6 mpich/3.2 netlib-lapack/3.6.1 openmpi/1.10.2 pkg-config/0.29.2 py-numpy/1.13.1-openblas py-pyparsing/2.2.0 py-setuptools/35.0.2 python/2.7.14 sqlite/3.20.0
+ cmake/3.9.4 ncurses/6.0 openblas/0.2.20 openssl/1.0.2k py-appdirs/1.4.3 py-packaging/16.8 py-scipy/0.19.1-openblas py-six/1.10.0 readline/7.0 zlib/1.2.11
+
+ ---------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------------------------------------
+ gcc/7.2.0 (L)
+
+ Where:
+ L: Module is loaded
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+The same holds true also for the ``MPI`` part, that you can enable by loading
+either ``mpich`` or ``openmpi``. Let's start by loading ``mpich``:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load mpich
+ root@module-file-tutorial:/# module avail
+
+ ---------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/mpich/3.2-7gxffhv/gcc/7.2.0 -----------------------------------------------------------------
+ netlib-scalapack/2.0.2-netlib netlib-scalapack/2.0.2-openblas (D)
+
+ ------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------------------------------------
+ bzip2/1.0.6 mpich/3.2 (L) netlib-lapack/3.6.1 openmpi/1.10.2 pkg-config/0.29.2 py-numpy/1.13.1-openblas py-pyparsing/2.2.0 py-setuptools/35.0.2 python/2.7.14 sqlite/3.20.0
+ cmake/3.9.4 ncurses/6.0 openblas/0.2.20 openssl/1.0.2k py-appdirs/1.4.3 py-packaging/16.8 py-scipy/0.19.1-openblas py-six/1.10.0 readline/7.0 zlib/1.2.11
+
+ ---------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------------------------------------
+ gcc/7.2.0 (L)
+
+ Where:
+ L: Module is loaded
+ D: Default Module
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+
+ root@module-file-tutorial:/# module load openblas netlib-scalapack/2.0.2-openblas
+ root@module-file-tutorial:/# module list
+
+ Currently Loaded Modules:
+ 1) gcc/7.2.0 2) mpich/3.2 3) openblas/0.2.20 4) netlib-scalapack/2.0.2-openblas
+
+At this point we can showcase the improved consistency that a hierarchical layout provides
+over a non-hierarchical one:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load openmpi
+
+ Lmod is automatically replacing "mpich/3.2" with "openmpi/1.10.2".
+
+ Due to MODULEPATH changes, the following have been reloaded:
+ 1) netlib-scalapack/2.0.2-openblas
+
+``Lmod`` took care of swapping the MPI provider for us, and it also substituted the
+``netlib-scalapack`` module to conform to the change in the MPI.
+In this way we can't accidentally pull-in two different MPI providers at the
+same time or load a module file for a package linked to ``openmpi`` when ``mpich`` is also loaded.
+Consistency for compilers and MPI is ensured by the tool.
+
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Add LAPACK to the hierarchy
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The hierarchy just shown is already a great improvement over non-hierarchical layouts,
+but it still has an asymmetry: ``LAPACK`` providers cover the same semantic role
+as ``MPI`` providers, but yet they are not part of the hierarchy.
+
+To be more practical, this means that although we have gained an improved consistency in
+our environment when it comes to ``MPI``, we still have the same problems as we had before
+for ``LAPACK`` implementations:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module list
+
+ Currently Loaded Modules:
+ 1) gcc/7.2.0 2) openblas/0.2.20 3) openmpi/1.10.2 4) netlib-scalapack/2.0.2-openblas
+
+ root@module-file-tutorial:/# module load netlib-scalapack/2.0.2-netlib
+ Autoloading netlib-lapack/3.6.1
+
+ The following have been reloaded with a version change:
+ 1) netlib-scalapack/2.0.2-openblas => netlib-scalapack/2.0.2-netlib
+
+ root@module-file-tutorial:/# module list
+
+ Currently Loaded Modules:
+ 1) gcc/7.2.0 2) openblas/0.2.20 3) openmpi/1.10.2 4) netlib-lapack/3.6.1 5) netlib-scalapack/2.0.2-netlib
+
+Hierarchies that are deeper than ``Core``/``Compiler``/``MPI`` are
+probably still considered "unusual" or "impractical" at many sites, mainly because
+module files are written manually and keeping track of the combinations
+among multiple providers quickly becomes quite involved.
+
+For instance, having both ``MPI`` and ``LAPACK`` in the hierarchy
+means we must classify software into one of four categories:
+
+ #. Software that doesn't depend on ``MPI`` or ``LAPACK``
+ #. Software that depends only on ``MPI``
+ #. Software that depends only on ``LAPACK``
+ #. Software that depends on both
+
+to decide when to show it to the user. The situation becomes more involved as the number of virtual
+dependencies in the hierarchy increases.
+
+We can take advantage of the DAG that Spack maintains for the installed software and solve
+this combinatorial problem in a clean and automated way.
+In some sense Spack's ability to manage this combinatorial complexity makes deeper
+hierarchies feasible.
+
+Coming back to our example, let's add ``lapack`` to the hierarchy and remove any remaining suffix:
+
+.. code-block:: yaml
+ :emphasize-lines: 9
+
+ modules:
+ enable::
+ - lmod
+ lmod:
+ core_compilers:
+ - 'gcc@5.4.0'
+ hierarchy:
+ - mpi
+ - lapack
+ hash_length: 0
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ - readline
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ gcc:
+ environment:
+ set:
+ CC: gcc
+ CXX: g++
+ FC: gfortran
+ F90: gfortran
+ F77: gfortran
+ openmpi:
+ environment:
+ set:
+ SLURM_MPI_TYPE: pmi2
+ OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
+
+After module files have been regenerated as usual:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module purge
+
+ root@module-file-tutorial:/# spack module refresh --delete-tree -y -m lmod
+ ==> Regenerating lmod module files
+
+we can see that now we have additional components in the hierarchy:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load gcc
+ root@module-file-tutorial:/# module load openblas
+ root@module-file-tutorial:/# module avail
+
+ ------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/openblas/0.2.20-kvddide/gcc/7.2.0 --------------------------------------------------------------
+ py-numpy/1.13.1 py-scipy/0.19.1
+
+ ------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------------------------------------
+ bzip2/1.0.6 mpich/3.2 netlib-lapack/3.6.1 openmpi/1.10.2 pkg-config/0.29.2 py-packaging/16.8 py-setuptools/35.0.2 python/2.7.14 sqlite/3.20.0
+ cmake/3.9.4 ncurses/6.0 openblas/0.2.20 (L) openssl/1.0.2k py-appdirs/1.4.3 py-pyparsing/2.2.0 py-six/1.10.0 readline/7.0 zlib/1.2.11
+
+ ---------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------------------------------------
+ gcc/7.2.0 (L)
+
+ Where:
+ L: Module is loaded
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+
+ root@module-file-tutorial:/# module load openmpi
+ root@module-file-tutorial:/# module avail
+
+ -------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/openmpi/1.10.2-ufw7pdi/openblas/0.2.20-kvddide/gcc/7.2.0 --------------------------------------------------
+ netlib-scalapack/2.0.2
+
+ ------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/openblas/0.2.20-kvddide/gcc/7.2.0 --------------------------------------------------------------
+ py-numpy/1.13.1 py-scipy/0.19.1
+
+ ------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/gcc/7.2.0 --------------------------------------------------------------------------
+ bzip2/1.0.6 mpich/3.2 netlib-lapack/3.6.1 openmpi/1.10.2 (L) pkg-config/0.29.2 py-packaging/16.8 py-setuptools/35.0.2 python/2.7.14 sqlite/3.20.0
+ cmake/3.9.4 ncurses/6.0 openblas/0.2.20 (L) openssl/1.0.2k py-appdirs/1.4.3 py-pyparsing/2.2.0 py-six/1.10.0 readline/7.0 zlib/1.2.11
+
+ ---------------------------------------------------------------------------- /usr/local/share/spack/lmod/linux-ubuntu16.04-x86_64/Core ----------------------------------------------------------------------------
+ gcc/7.2.0 (L)
+
+ Where:
+ L: Module is loaded
+
+ Use "module spider" to find all possible modules.
+ Use "module keyword key1 key2 ..." to search for all possible modules matching any of the "keys".
+
+Both ``MPI`` and ``LAPACK`` providers will now benefit from the same safety features:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# module load py-numpy netlib-scalapack
+ root@module-file-tutorial:/# module load mpich
+
+ Lmod is automatically replacing "openmpi/1.10.2" with "mpich/3.2".
+
+
+ Due to MODULEPATH changes, the following have been reloaded:
+ 1) netlib-scalapack/2.0.2
+
+ root@module-file-tutorial:/# module load netlib-lapack
+
+ Lmod is automatically replacing "openblas/0.2.20" with "netlib-lapack/3.6.1".
+
+
+ Inactive Modules:
+ 1) py-numpy
+
+ Due to MODULEPATH changes, the following have been reloaded:
+ 1) netlib-scalapack/2.0.2
+
+Because we only compiled ``py-numpy`` with ``openblas`` the module
+is made inactive when we switch the ``LAPACK`` provider. The user
+environment is now consistent by design!
+
+----------------------
+Working with templates
+----------------------
+
+As briefly mentioned in the introduction, Spack uses `Jinja2 <http://jinja.pocoo.org/docs/2.9/>`_
+to generate each individual module file.
+This means that you have all of its flexibility and power when it comes to
+customizing what gets generated!
+
+^^^^^^^^^^^^^^^^^^^^^
+Module file templates
+^^^^^^^^^^^^^^^^^^^^^
+
+The templates that Spack uses to generate module files are stored in the
+``templates/module`` directory, and they all share the same common structure.
+Usually, they start with a header that identifies the type of
+module being generated. In the case of hierarchical module files it's:
+
+.. literalinclude:: ../../../templates/modules/modulefile.lua
+ :language: jinja
+ :lines: 1-6
+
+The statements within double curly brackets ``{{ ... }}`` denote
+`expressions <http://jinja.pocoo.org/docs/2.9/templates/#expressions>`_
+that will be evaluated and substituted at module generation time.
+The rest of the file is then divided into
+`blocks <http://jinja.pocoo.org/docs/2.9/templates/#template-inheritance>`_
+that can be overridden or extended by users, if need be.
+`Control structures <http://jinja.pocoo.org/docs/2.9/templates/#list-of-control-structures>`_
+, delimited by ``{% ... %}``,
+are also permitted in the template language:
+
+.. literalinclude:: ../../../templates/modules/modulefile.lua
+ :language: jinja
+ :lines: 73-88
+
+The locations where Spack looks for templates are specified
+in ``config.yaml``:
+
+.. literalinclude:: ../../../etc/spack/defaults/config.yaml
+ :language: yaml
+ :lines: 21-24
+
+and can be extended by users to employ custom templates, as we'll see next.
+
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Extend the default templates
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Let's assume one of our software is protected by group membership:
+allowed users belong to the same linux group, and access is granted at group level.
+Wouldn't it be nice if people that are not
+yet entitled to use it could receive a helpful message at module load time
+that tells them who to contact in your organization to be inserted in the group?
+
+To automate the generation of module files with such site-specific behavior
+we'll start by extending the list of locations where Spack looks for module
+files. Let's create the file ``~/.spack/config.yaml`` with the content:
+
+.. code-block:: yaml
+
+ config:
+ template_dirs:
+ - $HOME/.spack/templates
+
+This tells Spack to also search another location when looking for template files.
+Next, we need to create our custom template extension in the folder listed above:
+
+.. code-block:: jinja
+
+ {% extends "modules/modulefile.lua" %}
+ {% block footer %}
+ -- Access is granted only to specific groups
+ if not isDir("{{ spec.prefix }}") then
+ LmodError (
+ "You don't have the necessary rights to run \"{{ spec.name }}\".\n\n",
+ "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
+ )
+ end
+ {% endblock %}
+
+Let's name this file ``group-restricted.lua``. The line:
+
+.. code-block:: jinja
+
+ {% extends "modules/modulefile.lua" %}
+
+tells Jinja2 that we are reusing the standard template for hierarchical module files.
+The section:
+
+.. code-block:: jinja
+
+ {% block footer %}
+ -- Access is granted only to specific groups
+ if not isDir("{{ spec.prefix }}") then
+ LmodError (
+ "You don't have the necessary rights to run \"{{ spec.name }}\".\n\n",
+ "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
+ )
+ end
+ {% endblock %}
+
+overrides the ``footer`` block.
+Finally, we need to add a couple of lines in ``modules.yaml`` to tell Spack which specs
+need to use the new custom template. For the sake of illustration let's assume
+it's ``netlib-scalapack``:
+
+.. code-block:: yaml
+ :emphasize-lines: 35-36
+
+ modules:
+ enable::
+ - lmod
+ lmod:
+ core_compilers:
+ - 'gcc@5.4.0'
+ hierarchy:
+ - mpi
+ - lapack
+ hash_length: 0
+ whitelist:
+ - gcc
+ blacklist:
+ - '%gcc@5.4.0'
+ - readline
+ all:
+ filter:
+ environment_blacklist: ['CPATH', 'LIBRARY_PATH']
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+ gcc:
+ environment:
+ set:
+ CC: gcc
+ CXX: g++
+ FC: gfortran
+ F90: gfortran
+ F77: gfortran
+ openmpi:
+ environment:
+ set:
+ SLURM_MPI_TYPE: pmi2
+ OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
+ netlib-scalapack:
+ template: 'group-restricted.lua'
+
+If we regenerate the module files one last time:
+
+.. code-block:: console
+
+ root@module-file-tutorial:/# spack module refresh -y -m lmod netlib-scalapack
+ ==> Regenerating lmod module files
+
+we'll find the following at the end of each ``netlib-scalapack`` module file:
+
+.. code-block:: lua
+
+ -- Access is granted only to specific groups
+ if not isDir("/usr/local/opt/spack/linux-ubuntu16.04-x86_64/gcc-7.2.0/netlib-scalapack-2.0.2-ax6aza6vyepceyr3fihewp7rbr2vp7ym") then
+ LmodError (
+ "You don't have the necessary rights to run \"netlib-scalapack\".\n\n",
+ "\tPlease write an e-mail to 1234@foo.com if you need further information on how to get access to it.\n"
+ )
+ end
+
+and every user that doesn't have access to the software will now be redirected to
+the right e-mail address where to ask for it!
diff --git a/lib/spack/docs/tutorial_sc16_packaging.rst b/lib/spack/docs/tutorial_packaging.rst
index e250ab835e..e85be7c637 100644
--- a/lib/spack/docs/tutorial_sc16_packaging.rst
+++ b/lib/spack/docs/tutorial_packaging.rst
@@ -43,7 +43,7 @@ A few things before we get started:
Creating the Package File
-------------------------
-Spack comes with a handy command to create a new package: ``spack create``
+Spack comes with a handy command to create a new package: ``spack create``.
This command is given the location of a package's source code, downloads
the code, and sets up some basic packaging infrastructure for you. The
@@ -52,12 +52,20 @@ we run ``spack create`` on it:
.. code-block:: console
- $ spack create -f https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
- ==> This looks like a URL for mpileaks version 1.0
- ==> Creating template for package mpileaks
+ $ spack create -t generic -f https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
+ ==> This looks like a URL for mpileaks
+ ==> Found 1 version of mpileaks:
+
+ 1.0 https://github.com/LLNL/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
+
+ ==> How many would you like to checksum? (default is 1, q to abort) 1
==> Downloading...
- ==> Fetching https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
- ###################################################################################### 100.0%
+ ==> Fetching https://github.com/LLNL/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
+ ############################################################################# 100.0%
+ ==> Checksummed 1 version of mpileaks
+ ==> Using specified package template: 'generic'
+ ==> Created template for mpileaks package
+ ==> Created package file: $SPACK_ROOT/var/spack/repos/builtin/packages/mpileaks/package.py
And Spack should spawn a text editor with this file:
@@ -192,29 +200,27 @@ Now when we try to install this package a lot more happens:
.. code-block:: console
$ spack install mpileaks
+ ...
+ ==> libdwarf is already installed in SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/libdwarf-20160507-er4jrjynul6uba7wiu5tasuj35roxw6m
+ ==> dyninst is already installed in SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/dyninst-9.3.2-t7mau34jv3e76mpspdzhf2p2a6k7qubg
+ ==> callpath is already installed in SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/callpath-1.0.4-ikbbkvfmsfmqzo624nvvrbooovf7egoc
==> Installing mpileaks
- ==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
- ==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
- ==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
- ==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
- ==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
- ==> Already patched mpileaks
- ==> Building mpileaks [AutotoolsPackage]
- ==> Executing phase : 'autoreconf'
- ==> Executing phase : 'configure'
- ==> Error: ProcessError: Command exited with status 1:
- './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
- /usr/workspace/wsa/legendre/spack/lib/spack/spack/build_systems/autotools.py:150, in configure:
- 145 def configure(self, spec, prefix):
- 146 """Runs configure with the arguments specified in `configure_args`
- 147 and an appropriately set prefix
- 148 """
- 149 options = ['--prefix={0}'.format(prefix)] + self.configure_args()
- >> 150 inspect.getmodule(self).configure(*options)
-
+ ==> Using cached archive: SPACK_ROOT/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
+ ==> Already staged mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7 in SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7
+ ==> No patches needed for mpileaks
+ ==> Building mpileaks [Package]
+ ==> Executing phase: 'install'
+ ==> Error: ProcessError: Command exited with status 2:
+ 'make' '-j36'
+
+ 1 error found in build log:
+ 1 ==> Executing phase: 'install'
+ 2 ==> 'make' '-j36'
+ >> 3 make: *** No targets specified and no makefile found. Stop.
+
See build log for details:
- /tmp/legendre/spack-stage/spack-stage-7V5yyk/mpileaks-1.0/spack-build.out
-
+ SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7/mpileaks-1.0/spack-build.out
+
Note that this command may take a while to run and produce more output if
you don't have an MPI already installed or configured in Spack.
@@ -228,44 +234,79 @@ Debugging Package Builds
------------------------
Our ``mpileaks`` package is still not building. It may be obvious to
-many of you that we're still missing the configure options. But let's
-pretend we're not all intelligent developers and use this opportunity
-spend some time debugging. We a few options that can tell us about
+many of you that we never ran the configure script. Let's add a
+call to ``configure()`` to the top of the install routine. The resulting
+package.py is in ``$SPACK_ROOT/lib/spack/docs/tutorial/examples/3.package.py``:
+
+.. literalinclude:: tutorial/examples/3.package.py
+ :lines: 25-
+ :language: python
+
+If we re-run we still get errors:
+
+.. code-block:: console
+
+ ==> Installing mpileaks
+ ==> Using cached archive: SPACK_ROOT/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
+ ==> Already staged mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7 in SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7
+ ==> No patches needed for mpileaks
+ ==> Building mpileaks [Package]
+ ==> Executing phase: 'install'
+ ==> Error: ProcessError: Command exited with status 1:
+ './configure'
+
+ 1 error found in build log:
+ [ ... ]
+ 21 checking whether SPACK_ROOT/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
+ 22 checking whether we are using the GNU C++ compiler... yes
+ 23 checking whether SPACK_ROOT/lib/spack/env/gcc/g++ accepts -g... yes
+ 24 checking dependency style of SPACK_ROOT/lib/spack/env/gcc/g++... gcc3
+ 25 checking for SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc... SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc
+ 26 Checking whether SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc responds to '-showme:compile'... yes
+ >> 27 configure: error: unable to locate adept-utils installation
+
+ See build log for details:
+ SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7/mpileaks-1.0/spack-build.out
+
+Again, the problem may be obvious. But let's pretend we're not
+all intelligent developers and use this opportunity spend some
+time debugging. We have a few options that can tell us about
what's going wrong:
As per the error message, Spack has given us a ``spack-build.out`` debug log:
.. code-block:: console
-
- ==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk'
+
+ ==> Executing phase: 'install'
+ ==> './configure'
checking metadata... no
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
- checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
+ checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
- checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
+ checking for gcc... SPACK_ROOT/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
- checking for suffix of executables...
+ checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
- checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
+ checking whether SPACK_ROOT/lib/spack/env/gcc/gcc accepts -g... yes
+ checking for SPACK_ROOT/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
- checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
+ checking dependency style of SPACK_ROOT/lib/spack/env/gcc/gcc... gcc3
+ checking whether SPACK_ROOT/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
- checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
- checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
- Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
- configure: error: unable to locate ``adept-utils`` installation
-
-This gives us the output from the build, and it's fairly obvious that
-mpileaks isn't finding its ``adept-utils`` package. Spack has
+ checking whether SPACK_ROOT/lib/spack/env/gcc/g++ accepts -g... yes
+ checking dependency style of SPACK_ROOT/lib/spack/env/gcc/g++... gcc3
+ checking for SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc... SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc
+ Checking whether SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc responds to '-showme:compile'... yes
+ configure: error: unable to locate adept-utils installation
+
+This gives us the output from the build, and mpileaks isn't
+finding its ``adept-utils`` package. Spack has
automatically added the include and library directories of
``adept-utils`` to the compiler's search path, but some packages like
mpileaks can sometimes be picky and still want things spelled out on
@@ -292,26 +333,26 @@ From here we can manually re-run the build:
checking installation directory variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
- checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
+ checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
- checking for gcc... /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc
+ checking for gcc... SPACK_ROOT/lib/spack/env/gcc/gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
- checking for suffix of executables...
+ checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc accepts -g... yes
- checking for /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
+ checking whether SPACK_ROOT/lib/spack/env/gcc/gcc accepts -g... yes
+ checking for SPACK_ROOT/lib/spack/env/gcc/gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
- checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc... gcc3
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
+ checking dependency style of SPACK_ROOT/lib/spack/env/gcc/gcc... gcc3
+ checking whether SPACK_ROOT/lib/spack/env/gcc/gcc and cc understand -c and -o together... yes
checking whether we are using the GNU C++ compiler... yes
- checking whether /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++ accepts -g... yes
- checking dependency style of /usr/workspace/wsa/legendre/spack/lib/spack/env/gcc/g++... gcc3
- checking for /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc... /usr/workspace/wsa /legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc
- Checking whether /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz/bin/mpicc responds to '-showme:compile'... yes
+ checking whether SPACK_ROOT/lib/spack/env/gcc/g++ accepts -g... yes
+ checking dependency style of SPACK_ROOT/lib/spack/env/gcc/g++... gcc3
+ checking for SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc... SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc
+ Checking whether SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/openmpi-3.0.0-yo5qkfvumpmgmvlbalqcadu46j5bd52f/bin/mpicc responds to '-showme:compile'... yes
configure: error: unable to locate adept-utils installation
We're seeing the same error, but now we're in a shell where we can run
@@ -328,9 +369,9 @@ Specifying Configure Arguments
Let's add the configure arguments to the mpileaks' ``package.py``. This
version can be found in
-``$SPACK_ROOT/lib/spack/docs/tutorial/examples/3.package.py``:
+``$SPACK_ROOT/lib/spack/docs/tutorial/examples/4.package.py``:
-.. literalinclude:: tutorial/examples/3.package.py
+.. literalinclude:: tutorial/examples/4.package.py
:lines: 25-
:language: python
@@ -339,37 +380,35 @@ This is all we need for working mpileaks! If we install now we'll see:
.. code-block:: console
$ spack install mpileaks
- spack install mpileaks
+ ...
==> Installing mpileaks
- ==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
- ==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
- ==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
- ==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
- ==> Already staged mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
- ==> Already patched mpileaks
- ==> Building mpileaks [AutotoolsPackage]
- ==> Executing phase : 'autoreconf'
- ==> Executing phase : 'configure'
- ==> Executing phase : 'build'
- ==> Executing phase : 'install'
+ ==> Using cached archive: SPACK_ROOT/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
+ ==> Staging archive: SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7/mpileaks-1.0.tar.gz
+ ==> Created stage in SPACK_ROOT/var/spack/stage/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7
+ ==> No patches needed for mpileaks
+ ==> Building mpileaks [Package]
+ ==> Executing phase: 'install'
==> Successfully installed mpileaks
- Fetch: 0.00s. Build: 14.08s. Total: 14.08s.
- [+] /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-eum4hmnlt6ovalwjnciaygfb3beja4gk
+ Fetch: 0.00s. Build: 9.01s. Total: 9.01s.
+ [+] SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpileaks-1.0-lfgf53rns5mswq25rxckzgvmjc6ywam7
-We took a few shortcuts for this package that are worth highlighting.
-Spack automatically detected that mpileaks was an Autotools-based package
-when we ran ``spack create``. If this had been a CMake-based package we
-would have been filling in a ``cmake_args`` function instead of
-``configure_args``. If Spack hadn't been able to detect the build
-system, we'd be filling in a generic install method that would manually
-be calling build commands, such as is found in the ``zlib`` package:
+
+There are some special circumstances in package that are worth highlighting.
+Normally spack would have automatically detected that mpileaks was an
+Autotools-based package when we ran ``spack create`` and made it an ``AutoToolsPackage`` class (except we added the ``-t generic`` option to skip this). Instead of
+a full install routine we would have just written:
.. code-block:: python
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
- make()
- make('install')
+ def configure_args(self):
+ args = ['--with-adept-utils=%s' % self.spec['adept-utils'].prefix,
+ '--with-callpath=%s' % self.spec['callpath'].prefix]
+ return args
+
+Similarly, if this had been a CMake-based package we
+would have been filling in a ``cmake_args`` function instead of
+``configure_args``. There are similar default package types for
+many build environments.
--------
Variants
@@ -381,9 +420,9 @@ that it walks. Let's add a variant to allow users to set this when they
build in Spack.
To do this, we'll add a variant to our package, as per the following (see
-``$SPACK_ROOT/lib/spack/docs/tutorial/examples/4.package.py``):
+``$SPACK_ROOT/lib/spack/docs/tutorial/examples/5.package.py``):
-.. literalinclude:: tutorial/examples/4.package.py
+.. literalinclude:: tutorial/examples/5.package.py
:lines: 25-
:language: python
@@ -394,18 +433,15 @@ configure line (output truncated for length):
.. code-block:: console
$ spack install --verbose mpileaks stackstart=4
+ ...
==> Installing mpileaks
- ==> openmpi is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/openmpi-2.0.1-5ee5j34c2y4kb5c3joygrgahidqnwhnz
- ==> callpath is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube
- ==> adept-utils is already installed in /usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz
- ==> Using cached archive: /usr/workspace/wsa/legendre/spack/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
- ==> Staging archive: /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7/mpileaks-1.0.tar.gz
- ==> Created stage in /usr/workspace/wsa/legendre/spack/var/spack/stage/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7
- ==> Ran patch() for mpileaks
- ==> Building mpileaks [AutotoolsPackage]
- ==> Executing phase : 'autoreconf'
- ==> Executing phase : 'configure'
- ==> './configure' '--prefix=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/mpileaks-1.0-otqo2opkhan5ksujt6tpmdftydrieig7' '--with-adept-utils=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/adept-utils-1.0.1-7p7ezxwtajdglj6cmojy2vybjct4j4jz' '--with-callpath=/usr/workspace/wsa/legendre/spack/opt/spack/linux-rhel7-x86_64/gcc-4.9.3/callpath-1.0.2-zm4pf3gasgxeibyu2y262suktvaazube' '--with-stack-start-c=4' '--with-stack-start-fortran=4'
+ ==> Using cached archive: SPACK_ROOT/var/spack/cache/mpileaks/mpileaks-1.0.tar.gz
+ ==> Staging archive: SPACK_ROOT/var/spack/stage/mpileaks-1.0-gxxi4fp57b4j6xalra5t65hyx5rj25t7/mpileaks-1.0.tar.gz
+ ==> Created stage in SPACK_ROOT/var/spack/stage/mpileaks-1.0-gxxi4fp57b4j6xalra5t65hyx5rj25t7
+ ==> No patches needed for mpileaks
+ ==> Building mpileaks [Package]
+ ==> Executing phase: 'install'
+ ==> './configure' '--with-adept-utils=SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/adept-utils-1.0.1-pm3gffhrnwsdtqthtvsfvs2tny4r65wb' '--with-callpath=SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/callpath-1.0.4-ikbbkvfmsfmqzo624nvvrbooovf7egoc' '--prefix=SPACK_ROOT/opt/spack/linux-ubuntu16.04-x86_64/gcc-5.4.0/mpileaks-1.0-gxxi4fp57b4j6xalra5t65hyx5rj25t7' '--with-stack-start-c=4' '--with-stack-start-fortran=4'
---------------
The Spec Object
diff --git a/lib/spack/docs/tutorial_sc16_modules.rst b/lib/spack/docs/tutorial_sc16_modules.rst
deleted file mode 100644
index 407f679ae6..0000000000
--- a/lib/spack/docs/tutorial_sc16_modules.rst
+++ /dev/null
@@ -1,982 +0,0 @@
-.. _modules-tutorial:
-
-=============================
-Module Configuration Tutorial
-=============================
-
-This tutorial will guide you through the customization of both
-content and naming of module files generated by Spack.
-
-Starting from the default Spack settings you will add an increasing
-number of directives to the ``modules.yaml`` configuration file to
-satisfy a number of constraints that mimic those that you may encounter
-in a typical production environment at HPC sites.
-
-Even though the focus will be for the most part on customizing
-TCL non-hierarchical module files, everything
-you'll see applies also to other kinds of module files generated by Spack.
-
-The generation of Lua hierarchical
-module files will be addressed at the end of the tutorial,
-and you'll see that with minor modifications
-to an existing ``modules.yaml`` written for TCL
-non-hierarchical modules you'll get almost
-for free the possibility to try a hierarchical layout.
-
-Let's start!
-
-.. _module_file_tutorial_prerequisites:
-
--------------
-Prerequisites
--------------
-
-Before proceeding further ensure:
-
-- you have LMod or Environment Modules available
-- have :ref:`shell support <shell-support>` activated in Spack
-
-If you need to install Lmod or Environment module you can refer
-to the documentation :ref:`here <InstallEnvironmentModules>`.
-
-
-^^^^^^^^^^^^^^^^^^
-Add a new compiler
-^^^^^^^^^^^^^^^^^^
-
-Spack automatically scans the environment to search for available
-compilers on first use. On a Ubuntu 14.04 a fresh clone will show
-something like this:
-
-.. code-block:: console
-
- $ uname -a
- Linux nuvolari 4.4.0-45-generic #66~14.04.1-Ubuntu SMP Wed Oct 19 15:05:38 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
-
- $ spack compilers
- ==> Available compilers
- -- gcc ----------------------------------------------------------
- gcc@4.8
-
-For the purpose of building a limited set of packages with some features
-that will help showcasing the capabilities of
-module customization the first thing we need is to build a new compiler:
-
-.. code-block:: console
-
- $ spack install gcc@6.2.0
- # ...
- # Wait a long time
- # ...
-
-Then we can use shell support for modules to add it to the list of known compilers:
-
-.. code-block:: console
-
- # The name of the generated module may vary
- $ module load gcc-6.2.0-gcc-4.8-twd5nqg
-
- $ spack compiler add
- ==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
- gcc@6.2.0
-
- $ spack compilers
- ==> Available compilers
- -- gcc ----------------------------------------------------------
- gcc@6.2.0 gcc@4.8
-
-Note that the final 7 digits hash at the end of the generated module may vary depending
-on architecture or package version.
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Build software that will be used in the tutorial
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-Next you should install a few modules that will be used in the tutorial:
-
-.. code-block:: console
-
- $ spack install netlib-scalapack ^openmpi ^openblas
- # ...
-
-The packages you need to install are:
-
-- ``netlib-scalapack ^openmpi ^openblas``
-- ``netlib-scalapack ^mpich ^openblas``
-- ``netlib-scalapack ^openmpi ^netlib-lapack``
-- ``netlib-scalapack ^mpich ^netlib-lapack``
-- ``py-scipy ^openblas``
-
-In the end your environment should look something like:
-
-.. code-block:: console
-
- $ module avail
-
- ------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
- binutils-2.27-gcc-4.8-dz3xevw libpciaccess-0.13.4-gcc-6.2.0-eo2siet lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw python-2.7.12-gcc-6.2.0-qu7rc5p
- bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-4.8-avb6azw m4-1.4.17-gcc-4.8-iggewke netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq sqlite-3.8.5-gcc-6.2.0-td3zfe7
- cmake-3.5.2-gcc-6.2.0-6poypqg libsigsegv-2.10-gcc-6.2.0-g3qpmbi m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh tcl-8.6.5-gcc-4.8-atddxu7
- curl-7.50.3-gcc-6.2.0-2ffacqm libtool-2.4.6-gcc-6.2.0-kiepac6 mpc-1.0.3-gcc-4.8-lylv7lk openblas-0.2.19-gcc-6.2.0-js33umc util-macros-1.19.0-gcc-6.2.0-uoukuqk
- expat-2.2.0-gcc-6.2.0-bxqnjar libxml2-2.9.4-gcc-6.2.0-3k4ykbe mpfr-3.1.4-gcc-4.8-bldfx3w openmpi-2.0.1-gcc-6.2.0-s3qbtby xz-5.2.2-gcc-6.2.0-t5lk6in
- gcc-6.2.0-gcc-4.8-twd5nqg lmod-6.4.5-gcc-4.8-7v7bh7b mpich-3.2-gcc-6.2.0-5n5xoep openssl-1.0.2j-gcc-6.2.0-hibnfda zlib-1.2.8-gcc-4.8-bds4ies
- gmp-6.1.1-gcc-4.8-uq52e2n lua-5.3.2-gcc-4.8-xozf2hx ncurses-6.0-gcc-4.8-u62fit4 pkg-config-0.29.1-gcc-6.2.0-rslsgcs zlib-1.2.8-gcc-6.2.0-asydrba
- gmp-6.1.1-gcc-6.2.0-3cfh3hi lua-luafilesystem-1_6_3-gcc-4.8-sbzejlz ncurses-6.0-gcc-6.2.0-7tb426s py-nose-1.3.7-gcc-6.2.0-4gl5c42
- hwloc-1.11.4-gcc-6.2.0-3ostwel lua-luaposix-33.4.0-gcc-4.8-xf7y2p5 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
- isl-0.14-gcc-4.8-cq73t5m lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy py-scipy-0.18.1-gcc-6.2.0-e6uljfi
- libarchive-3.2.1-gcc-6.2.0-2b54aos lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
-
-------------------------------------------------
-Filter unwanted modifications to the environment
-------------------------------------------------
-
-The non-hierarchical TCL module files that have been generated so far
-follow the default rules for module generation, which are given
-:ref:`here <modules-yaml>` in the reference part of the manual. Taking a
-look at the ``gcc`` module you'll see something like:
-
-.. code-block:: console
-
- $ module show gcc-6.2.0-gcc-4.8-twd5nqg
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- whatis("gcc @6.2.0 ")
- prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
- prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
- prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
- prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
- prepend_path("LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
- prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
- prepend_path("CPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/include")
- help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
- Fortran, and Java.
- ]])
-
-As expected, a few environment variables representing paths will be modified
-by the modules according to the default prefix inspection rules.
-
-Consider now the case that your site has decided that e.g. ``CPATH`` and
-``LIBRARY_PATH`` modifications should not be present in module files. What you can
-do to abide by the rules is to create a configuration file ``~/.spack/modules.yaml``
-with the following content:
-
-.. code-block:: yaml
-
- modules:
- tcl:
- all:
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
-
-Next you should regenerate all the module files:
-
-.. code-block:: console
-
- $ spack module refresh --module-type tcl
- ==> You are about to regenerate tcl module files for:
-
- -- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
- dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
- twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
-
- ...
-
- ==> Do you want to proceed ? [y/n]
- y
- ==> Regenerating tcl module files
-
-If you take a look now at the module for ``gcc`` you'll see that the unwanted
-paths have disappeared:
-
-.. code-block:: console
-
- $ module show gcc-6.2.0-gcc-4.8-twd5nqg
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc-6.2.0-gcc-4.8-twd5nqg:
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- whatis("gcc @6.2.0 ")
- prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
- prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
- prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
- prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
- prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
- help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
- Fortran, and Java.
- ]])
-
-----------------------------------------------
-Prevent some module files from being generated
-----------------------------------------------
-
-Another common request at many sites is to avoid exposing software that
-is only needed as an intermediate step when building a newer stack.
-Let's try to prevent the generation of
-module files for anything that is compiled with ``gcc@4.8`` (the OS provided compiler).
-
-To do this you should add a ``blacklist`` keyword to the configuration file:
-
-.. code-block:: yaml
- :emphasize-lines: 3,4
-
- modules:
- tcl:
- blacklist:
- - '%gcc@4.8'
- all:
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
-
-and regenerate the module files:
-
-.. code-block:: console
-
- $ spack module refresh --module-type tcl --delete-tree
- ==> You are about to regenerate tcl module files for:
-
- -- linux-Ubuntu14-x86_64 / gcc@4.8 ------------------------------
- dz3xevw binutils@2.27 uq52e2n gmp@6.1.1 avb6azw libsigsegv@2.10 xozf2hx lua@5.3.2 xf7y2p5 lua-luaposix@33.4.0 lylv7lk mpc@1.0.3 u62fit4 ncurses@6.0 bds4ies zlib@1.2.8
- twd5nqg gcc@6.2.0 cq73t5m isl@0.14 7v7bh7b lmod@6.4.5 sbzejlz lua-luafilesystem@1_6_3 iggewke m4@1.4.17 bldfx3w mpfr@3.1.4 atddxu7 tcl@8.6.5
-
- -- linux-Ubuntu14-x86_64 / gcc@6.2.0 ----------------------------
- csoc2mq bzip2@1.0.6 2b54aos libarchive@3.2.1 sfmeynw lzma@4.32.7 wnimqhw netlib-scalapack@2.0.2 s3qbtby openmpi@2.0.1 hkqauaa py-setuptools@25.2.0
- 6poypqg cmake@3.5.2 eo2siet libpciaccess@0.13.4 jcngz72 lzo@2.09 6bqlxqy netlib-scalapack@2.0.2 hibnfda openssl@1.0.2j qu7rc5p python@2.7.12
- 2ffacqm curl@7.50.3 g3qpmbi libsigsegv@2.10 lhgqa6s m4@1.4.17 wojunhq netlib-scalapack@2.0.2 rslsgcs pkg-config@0.29.1 td3zfe7 sqlite@3.8.5
- bxqnjar expat@2.2.0 kiepac6 libtool@2.4.6 5n5xoep mpich@3.2 hpqb3dp netlib-scalapack@2.0.2 4gl5c42 py-nose@1.3.7 uoukuqk util-macros@1.19.0
- 3cfh3hi gmp@6.1.1 3k4ykbe libxml2@2.9.4 7tb426s ncurses@6.0 djdthlh nettle@3.2 i3rpk4e py-numpy@1.11.1 t5lk6in xz@5.2.2
- 3ostwel hwloc@1.11.4 cagoem4 lz4@131 mirer2l netlib-lapack@3.6.1 js33umc openblas@0.2.19 e6uljfi py-scipy@0.18.1 asydrba zlib@1.2.8
-
- ==> Do you want to proceed ? [y/n]
- y
-
- $ module avail
-
- ------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
- bzip2-1.0.6-gcc-6.2.0-csoc2mq libsigsegv-2.10-gcc-6.2.0-g3qpmbi ncurses-6.0-gcc-6.2.0-7tb426s openmpi-2.0.1-gcc-6.2.0-s3qbtby sqlite-3.8.5-gcc-6.2.0-td3zfe7
- cmake-3.5.2-gcc-6.2.0-6poypqg libtool-2.4.6-gcc-6.2.0-kiepac6 netlib-lapack-3.6.1-gcc-6.2.0-mirer2l openssl-1.0.2j-gcc-6.2.0-hibnfda util-macros-1.19.0-gcc-6.2.0-uoukuqk
- curl-7.50.3-gcc-6.2.0-2ffacqm libxml2-2.9.4-gcc-6.2.0-3k4ykbe netlib-scalapack-2.0.2-gcc-6.2.0-6bqlxqy pkg-config-0.29.1-gcc-6.2.0-rslsgcs xz-5.2.2-gcc-6.2.0-t5lk6in
- expat-2.2.0-gcc-6.2.0-bxqnjar lz4-131-gcc-6.2.0-cagoem4 netlib-scalapack-2.0.2-gcc-6.2.0-hpqb3dp py-nose-1.3.7-gcc-6.2.0-4gl5c42 zlib-1.2.8-gcc-6.2.0-asydrba
- gmp-6.1.1-gcc-6.2.0-3cfh3hi lzma-4.32.7-gcc-6.2.0-sfmeynw netlib-scalapack-2.0.2-gcc-6.2.0-wnimqhw py-numpy-1.11.1-gcc-6.2.0-i3rpk4e
- hwloc-1.11.4-gcc-6.2.0-3ostwel lzo-2.09-gcc-6.2.0-jcngz72 netlib-scalapack-2.0.2-gcc-6.2.0-wojunhq py-scipy-0.18.1-gcc-6.2.0-e6uljfi
- libarchive-3.2.1-gcc-6.2.0-2b54aos m4-1.4.17-gcc-6.2.0-lhgqa6s nettle-3.2-gcc-6.2.0-djdthlh py-setuptools-25.2.0-gcc-6.2.0-hkqauaa
- libpciaccess-0.13.4-gcc-6.2.0-eo2siet mpich-3.2-gcc-6.2.0-5n5xoep openblas-0.2.19-gcc-6.2.0-js33umc python-2.7.12-gcc-6.2.0-qu7rc5p
-
-This time it is convenient to pass the option ``--delete-tree`` to the command that
-regenerates the module files to instruct it to delete the existing tree and regenerate
-a new one instead of overwriting the files in the existing directory.
-
-If you pay careful attention you'll see though that we went too far in blacklisting modules:
-the module for ``gcc@6.2.0`` disappeared as it was bootstrapped with ``gcc@4.8``. To specify
-exceptions to the blacklist rules you can use ``whitelist``:
-
-.. code-block:: yaml
- :emphasize-lines: 3,4
-
- modules:
- tcl:
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
-
-``whitelist`` rules always have precedence over ``blacklist`` rules. If you regenerate the modules again:
-
-.. code-block:: console
-
- $ spack module refresh --module-type tcl -y
-
-you'll see that now the module for ``gcc@6.2.0`` has reappeared:
-
-.. code-block:: console
-
- $ module avail gcc-6.2.0-gcc-4.8-twd5nqg
-
- ------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
- gcc-6.2.0-gcc-4.8-twd5nqg
-
--------------------------
-Change module file naming
--------------------------
-
-The next step in making module files more user-friendly is to
-improve their naming scheme.
-To reduce the length of the hash or remove it altogether you can
-use the ``hash_length`` keyword in the configuration file:
-
-.. TODO: give reasons to remove hashes if they are not evident enough?
-
-.. code-block:: yaml
- :emphasize-lines: 3
-
- modules:
- tcl:
- hash_length: 0
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
-
-If you try to regenerate the module files now you will get an error:
-
-.. code-block:: console
-
- $ spack module refresh --module-type tcl --delete-tree -y
- ==> Error: Name clashes detected in module files:
-
- file : ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/netlib-scalapack-2.0.2-gcc-6.2.0
- spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
- spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
- spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
- spec : netlib-scalapack@2.0.2%gcc@6.2.0~fpic+shared arch=linux-Ubuntu14-x86_64
-
- ==> Error: Operation aborted
-
-.. note::
- We try to check for errors upfront!
- In Spack we check for errors upfront whenever possible, so don't worry about your module files:
- as a name clash was detected nothing has been changed on disk.
-
-The problem here is that without
-the hashes the four different flavors of ``netlib-scalapack`` map to the same module file
-name. We have the possibility to add suffixes to differentiate them:
-
-.. code-block:: yaml
- :emphasize-lines: 9-11,14-17
-
- modules:
- tcl:
- hash_length: 0
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- netlib-scalapack:
- suffixes:
- '^openmpi': openmpi
- '^mpich': mpich
-
-As you can see it is possible to specify rules that applies only to a
-restricted set of packages using :ref:`anonymous specs <anonymous_specs>`.
-Regenerating module files now we obtain:
-
-.. code-block:: console
-
- $ spack module refresh --module-type tcl --delete-tree -y
- ==> Regenerating tcl module files
- $ module avail
-
- ------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
- bzip2-1.0.6-gcc-6.2.0 libpciaccess-0.13.4-gcc-6.2.0 mpich-3.2-gcc-6.2.0 openblas-0.2.19-gcc-6.2.0 python-2.7.12-gcc-6.2.0
- cmake-3.5.2-gcc-6.2.0 libsigsegv-2.10-gcc-6.2.0 ncurses-6.0-gcc-6.2.0 openmpi-2.0.1-gcc-6.2.0 sqlite-3.8.5-gcc-6.2.0
- curl-7.50.3-gcc-6.2.0 libtool-2.4.6-gcc-6.2.0 netlib-lapack-3.6.1-gcc-6.2.0 openssl-1.0.2j-gcc-6.2.0 util-macros-1.19.0-gcc-6.2.0
- expat-2.2.0-gcc-6.2.0 libxml2-2.9.4-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-mpich pkg-config-0.29.1-gcc-6.2.0 xz-5.2.2-gcc-6.2.0
- gcc-6.2.0-gcc-4.8 lz4-131-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-netlib-openmpi py-nose-1.3.7-gcc-6.2.0 zlib-1.2.8-gcc-6.2.0
- gmp-6.1.1-gcc-6.2.0 lzma-4.32.7-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-mpich py-numpy-1.11.1-gcc-6.2.0-openblas
- hwloc-1.11.4-gcc-6.2.0 lzo-2.09-gcc-6.2.0 netlib-scalapack-2.0.2-gcc-6.2.0-openblas-openmpi py-scipy-0.18.1-gcc-6.2.0-openblas
- libarchive-3.2.1-gcc-6.2.0 m4-1.4.17-gcc-6.2.0 nettle-3.2-gcc-6.2.0 py-setuptools-25.2.0-gcc-6.2.0
-
-Finally we can set a ``naming_scheme`` to prevent users from loading
-modules that refer to different flavors of the same library/application:
-
-.. code-block:: yaml
- :emphasize-lines: 4,10,11
-
- modules:
- tcl:
- hash_length: 0
- naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- conflict:
- - '${PACKAGE}'
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- netlib-scalapack:
- suffixes:
- '^openmpi': openmpi
- '^mpich': mpich
-
-The final result should look like:
-
-.. code-block:: console
-
- $ module avail
-
- ------------------------------------------------------------------------ ~/spack/share/spack/modules/linux-Ubuntu14-x86_64 ------------------------------------------------------------------------
- bzip2/1.0.6-gcc-6.2.0 libpciaccess/0.13.4-gcc-6.2.0 mpich/3.2-gcc-6.2.0 openblas/0.2.19-gcc-6.2.0 python/2.7.12-gcc-6.2.0
- cmake/3.5.2-gcc-6.2.0 libsigsegv/2.10-gcc-6.2.0 ncurses/6.0-gcc-6.2.0 openmpi/2.0.1-gcc-6.2.0 sqlite/3.8.5-gcc-6.2.0
- curl/7.50.3-gcc-6.2.0 libtool/2.4.6-gcc-6.2.0 netlib-lapack/3.6.1-gcc-6.2.0 openssl/1.0.2j-gcc-6.2.0 util-macros/1.19.0-gcc-6.2.0
- expat/2.2.0-gcc-6.2.0 libxml2/2.9.4-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-mpich pkg-config/0.29.1-gcc-6.2.0 xz/5.2.2-gcc-6.2.0
- gcc/6.2.0-gcc-4.8 lz4/131-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-netlib-openmpi py-nose/1.3.7-gcc-6.2.0 zlib/1.2.8-gcc-6.2.0
- gmp/6.1.1-gcc-6.2.0 lzma/4.32.7-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-mpich py-numpy/1.11.1-gcc-6.2.0-openblas
- hwloc/1.11.4-gcc-6.2.0 lzo/2.09-gcc-6.2.0 netlib-scalapack/2.0.2-gcc-6.2.0-openblas-openmpi (D) py-scipy/0.18.1-gcc-6.2.0-openblas
- libarchive/3.2.1-gcc-6.2.0 m4/1.4.17-gcc-6.2.0 nettle/3.2-gcc-6.2.0 py-setuptools/25.2.0-gcc-6.2.0
-
-.. note::
- TCL specific directive
- The directives ``naming_scheme`` and ``conflict`` are TCL specific and do not apply
- to the ``dotkit`` or ``lmod`` sections in the configuration file.
-
-------------------------------------
-Add custom environment modifications
-------------------------------------
-
-At many sites it is customary to set an environment variable in a
-package's module file that points to the folder in which the package
-is installed. You can achieve this with Spack by adding an
-``environment`` directive to the configuration file:
-
-.. code-block:: yaml
- :emphasize-lines: 17-19
-
- modules:
- tcl:
- hash_length: 0
- naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- conflict:
- - '${PACKAGE}'
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- environment:
- set:
- '${PACKAGE}_ROOT': '${PREFIX}'
- netlib-scalapack:
- suffixes:
- '^openmpi': openmpi
- '^mpich': mpich
-
-There are many variable tokens available to use in the ``environment``
-and ``naming_scheme`` directives, such as ``${PACKAGE}``,
-``${VERSION}``, etc. (see the :meth:`~spack.spec.Spec.format` API
-documentation for the complete list).
-
-Regenerating the module files should result in something like:
-
-.. code-block:: console
- :emphasize-lines: 14
-
- $ spack module refresh -y --module-type tcl
- ==> Regenerating tcl module files
-
- $ module show gcc
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- whatis("gcc @6.2.0 ")
- prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
- prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
- prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
- prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
- prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
- setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
- conflict("gcc")
- help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
- Fortran, and Java.
- ]])
-
-As you see the ``gcc`` module has the environment variable ``GCC_ROOT`` set.
-
-Sometimes it's also useful to apply environment modifications selectively and target
-only certain packages. You can, for instance set the common variables ``CC``, ``CXX``,
-etc. in the ``gcc`` module file and apply other custom modifications to the
-``openmpi`` modules as follows:
-
-.. code-block:: yaml
- :emphasize-lines: 20-32
-
- modules:
- tcl:
- hash_length: 0
- naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- conflict:
- - '${PACKAGE}'
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- environment:
- set:
- '${PACKAGE}_ROOT': '${PREFIX}'
- gcc:
- environment:
- set:
- CC: gcc
- CXX: g++
- FC: gfortran
- F90: gfortran
- F77: gfortran
- openmpi:
- environment:
- set:
- SLURM_MPI_TYPE: pmi2
- OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
- netlib-scalapack:
- suffixes:
- '^openmpi': openmpi
- '^mpich': mpich
-
-This time we will be more selective and regenerate only the ``gcc`` and
-``openmpi`` module files:
-
-.. code-block:: console
-
- $ spack module refresh -y --module-type tcl gcc
- ==> Regenerating tcl module files
-
- $ spack module refresh -y --module-type tcl openmpi
- ==> Regenerating tcl module files
-
- $ module show gcc
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/gcc/6.2.0-gcc-4.8:
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- whatis("gcc @6.2.0 ")
- prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/bin")
- prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/")
- prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/share/man")
- prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64/pkgconfig")
- prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u/lib64")
- setenv("GCC_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-4.8/gcc-6.2.0-twd5nqg33hrrssqclcfi5k42eccwxz5u")
- setenv("CC","gcc")
- setenv("CXX","g++")
- setenv("F90","gfortran")
- setenv("FC","gfortran")
- setenv("F77","gfortran")
- conflict("gcc")
- help([[The GNU Compiler Collection includes front ends for C, C++, Objective-C,
- Fortran, and Java.
- ]])
-
- $ module show openmpi
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ~/spack/share/spack/modules/linux-Ubuntu14-x86_64/openmpi/2.0.1-gcc-6.2.0:
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- whatis("openmpi @2.0.1 ")
- prepend_path("PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/bin")
- prepend_path("CMAKE_PREFIX_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/")
- prepend_path("LD_LIBRARY_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib")
- prepend_path("PKG_CONFIG_PATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/lib/pkgconfig")
- prepend_path("MANPATH","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w/share/man")
- setenv("SLURM_MPI_TYPE","pmi2")
- setenv("OMPI_MCA_BTL_OPENIB_WARN_DEFAULT_GID_PREFIX","0")
- setenv("OPENMPI_ROOT","~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/openmpi-2.0.1-s3qbtbyh3y5y4gkchmhcuak7th44l53w")
- conflict("openmpi")
- help([[The Open MPI Project is an open source Message Passing Interface
- implementation that is developed and maintained by a consortium of
- academic, research, and industry partners. Open MPI is therefore able to
- combine the expertise, technologies, and resources from all across the
- High Performance Computing community in order to build the best MPI
- library available. Open MPI offers advantages for system and software
- vendors, application developers and computer science researchers.
- ]])
-
-
----------------------
-Autoload dependencies
----------------------
-
-Spack can also generate module files that contain code to load the
-dependencies automatically. You can, for instance generate python
-modules that load their dependencies by adding the ``autoload``
-directive and assigning it the value ``direct``:
-
-.. code-block:: yaml
- :emphasize-lines: 37,38
-
- modules:
- tcl:
- hash_length: 0
- naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${COMPILERVER}'
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- conflict:
- - '${PACKAGE}'
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- environment:
- set:
- '${PACKAGE}_ROOT': '${PREFIX}'
- gcc:
- environment:
- set:
- CC: gcc
- CXX: g++
- FC: gfortran
- F90: gfortran
- F77: gfortran
- openmpi:
- environment:
- set:
- SLURM_MPI_TYPE: pmi2
- OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
- netlib-scalapack:
- suffixes:
- '^openmpi': openmpi
- '^mpich': mpich
- ^python:
- autoload: 'direct'
-
-and regenerating the module files for every package that depends on ``python``:
-
-.. code-block:: console
-
- $ spack module refresh -y --module-type tcl ^python
- ==> Regenerating tcl module files
-
-Now the ``py-scipy`` module will be:
-
-.. code-block:: tcl
-
- #%Module1.0
- ## Module file created by spack (https://github.com/LLNL/spack) on 2016-11-02 20:53:21.283547
- ##
- ## py-scipy@0.18.1%gcc@6.2.0 arch=linux-Ubuntu14-x86_64-e6uljfi
- ##
- module-whatis "py-scipy @0.18.1"
-
- proc ModulesHelp { } {
- puts stderr "SciPy (pronounced "Sigh Pie") is a Scientific Library for Python. It"
- puts stderr "provides many user-friendly and efficient numerical routines such as"
- puts stderr "routines for numerical integration and optimization."
- }
-
- if ![ is-loaded python/2.7.12-gcc-6.2.0 ] {
- puts stderr "Autoloading python/2.7.12-gcc-6.2.0"
- module load python/2.7.12-gcc-6.2.0
- }
-
- if ![ is-loaded openblas/0.2.19-gcc-6.2.0 ] {
- puts stderr "Autoloading openblas/0.2.19-gcc-6.2.0"
- module load openblas/0.2.19-gcc-6.2.0
- }
-
- if ![ is-loaded py-numpy/1.11.1-gcc-6.2.0-openblas ] {
- puts stderr "Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas"
- module load py-numpy/1.11.1-gcc-6.2.0-openblas
- }
-
- prepend-path CMAKE_PREFIX_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/"
- prepend-path LD_LIBRARY_PATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib"
- prepend-path PYTHONPATH "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh/lib/python2.7/site-packages"
- setenv PY_SCIPY_ROOT "~/spack/opt/spack/linux-Ubuntu14-x86_64/gcc-6.2.0/py-scipy-0.18.1-e6uljfiffgym4xvj6wveevqxfqnfb3gh"
- conflict py-scipy
-
-and will contain code to autoload all the dependencies:
-
-.. code-block:: console
-
- $ module load py-scipy
- Autoloading python/2.7.12-gcc-6.2.0
- Autoloading openblas/0.2.19-gcc-6.2.0
- Autoloading py-numpy/1.11.1-gcc-6.2.0-openblas
-
------------------------------
-Lua hierarchical module files
------------------------------
-
-In the final part of this tutorial you will modify ``modules.yaml`` to generate
-Lua hierarchical module files. You will see that most of the directives used before
-are also valid in the ``lmod`` context.
-
-^^^^^^^^^^^^^^^^^
-Core/Compiler/MPI
-^^^^^^^^^^^^^^^^^
-
-.. warning::
- Only LMod supports Lua hierarchical module files
- For this part of the tutorial you need to be using LMod to
- manage your environment.
-
-The most common hierarchy is the so called ``Core/Compiler/MPI``. To have an idea
-how a hierarchy is organized you may refer to the
-`Lmod guide <https://www.tacc.utexas.edu/research-development/tacc-projects/lmod/user-guide/module-hierarchy>`_.
-Since ``lmod`` is not enabled by default, you need to add it to the list of
-enabled module file generators. The other things you need to do are:
-
-- change the ``tcl`` tag to ``lmod``
-- remove ``tcl`` specific directives (``naming_scheme`` and ``conflict``)
-- set which compilers are considered ``core``
-- remove the ``mpi`` related suffixes (as they will be substituted by hierarchies)
-
-After modifications the configuration file will be:
-
-.. code-block:: yaml
- :emphasize-lines: 2-6
-
- modules:
- enable::
- - lmod
- lmod:
- core_compilers:
- - 'gcc@4.8'
- hash_length: 0
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- all:
- suffixes:
- '^openblas': openblas
- '^netlib-lapack': netlib
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- environment:
- set:
- '${PACKAGE}_ROOT': '${PREFIX}'
- gcc:
- environment:
- set:
- CC: gcc
- CXX: g++
- FC: gfortran
- F90: gfortran
- F77: gfortran
- openmpi:
- environment:
- set:
- SLURM_MPI_TYPE: pmi2
- OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
-
-
-.. note::
- The double colon
- The double colon after ``enable`` is intentional and it serves the
- purpose of overriding the default list of enabled generators so
- that only ``lmod`` will be active (see :ref:`the reference
- manual <config-overrides>` for a more detailed explanation of
- config scopes).
-
-The directive ``core_compilers`` accepts a list of compilers : everything built
-using these compilers will create a module in the ``Core`` part of the hierarchy. It is
-common practice to put the OS provided compilers in the list and only build common utilities
-and other compilers in ``Core``.
-
-If you regenerate the module files
-
-.. code-block:: console
-
- $ spack module refresh --module-type lmod --delete-tree -y
-
-and update ``MODULEPATH`` to point to the ``Core`` folder, and
-list the available modules, you'll see:
-
-.. code-block:: console
-
- $ module unuse ~/spack/share/spack/modules/linux-Ubuntu14-x86_64
- $ module use ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core
- $ module avail
-
- ----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
- gcc/6.2.0
-
-The only module visible now is ``gcc``. Loading that you will make
-visible the ``Compiler`` part of the software stack that was built with ``gcc/6.2.0``:
-
-.. code-block:: console
-
- $ module load gcc
- $ module avail
-
- -------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
- binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
- bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
- bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
- cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
-
- ----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
- gcc/6.2.0 (L)
-
-The same holds true for the ``MPI`` part of the stack, that you can enable by loading
-either ``mpich`` or ``openmpi``. The nice features of LMod will become evident
-once you'll try switching among different stacks:
-
-.. code-block:: console
-
- $ module load mpich
- $ module avail
-
- ----------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/mpich/3.2-5n5xoep/gcc/6.2.0 ------------------------------------------------------------
- netlib-scalapack/2.0.2-netlib netlib-scalapack/2.0.2-openblas (D)
-
- -------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
- binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j py-scipy/0.18.1-openblas util-macros/1.19.0
- bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 py-setuptools/25.2.0 xz/5.2.2
- bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 (L) openblas/0.2.19 py-nose/1.3.7 python/2.7.12 zlib/1.2.8
- cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 py-numpy/1.11.1-openblas sqlite/3.8.5
-
- ----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
- gcc/6.2.0 (L)
-
- $ module load openblas netlib-scalapack/2.0.2-openblas
- $ module list
-
- Currently Loaded Modules:
- 1) gcc/6.2.0 2) mpich/3.2 3) openblas/0.2.19 4) netlib-scalapack/2.0.2-openblas
-
- $ module load openmpi
-
- Lmod is automatically replacing "mpich/3.2" with "openmpi/2.0.1"
-
-
- Due to MODULEPATH changes the following have been reloaded:
- 1) netlib-scalapack/2.0.2-openblas
-
-This layout is already a great improvement over the usual non-hierarchical layout,
-but it still has an asymmetry: ``LAPACK`` providers are semantically the same as ``MPI``
-providers, but they are still not part of the hierarchy. We'll see a possible solution
-next.
-
-.. Activate lmod and turn the previous modifications into lmod:
- Add core compilers
-
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-Extend the hierarchy to other virtual providers
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-.. warning::
- This is an experimental feature
- Having a hierarchy deeper than ``Core``/``Compiler``/``MPI`` is an experimental
- feature, still not fully supported by ``module spider``,
- see `here <https://github.com/TACC/Lmod/issues/114>`_. Furthermore its use
- with hierarchies more complex than ``Core``/``Compiler``/``MPI``/``LAPACK``
- has not been thoroughly tested in production environments.
-
-Spack permits you to generate Lua hierarchical module files where users
-can add an arbitrary list of virtual providers to the triplet
-``Core``/``Compiler``/``MPI``. A configuration file like:
-
-.. code-block:: yaml
- :emphasize-lines: 7,8
-
- modules:
- enable::
- - lmod
- lmod:
- core_compilers:
- - 'gcc@4.8'
- hierarchical_scheme:
- - lapack
- hash_length: 0
- whitelist:
- - gcc
- blacklist:
- - '%gcc@4.8'
- - readline
- all:
- filter:
- environment_blacklist: ['CPATH', 'LIBRARY_PATH']
- environment:
- set:
- '${PACKAGE}_ROOT': '${PREFIX}'
- gcc:
- environment:
- set:
- CC: gcc
- CXX: g++
- FC: gfortran
- F90: gfortran
- F77: gfortran
- openmpi:
- environment:
- set:
- SLURM_MPI_TYPE: pmi2
- OMPI_MCA_btl_openib_warn_default_gid_prefix: '0'
-
-will add ``lapack`` providers to the mix. After the usual regeneration of module files:
-
-.. code-block:: console
-
- $ module purge
- $ spack module refresh --module-type lmod --delete-tree -y
- ==> Regenerating lmod module files
-
-you will have something like:
-
-.. code-block:: console
-
- $ module load gcc
- $ module load openblas
- $ module load openmpi
- $ module avail
-
- --------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/openmpi/2.0.1-s3qbtby/gcc/6.2.0 ----------------------------------------------
- netlib-scalapack/2.0.2
-
- -------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/openblas/0.2.19-js33umc/gcc/6.2.0 ---------------------------------------------------------
- py-numpy/1.11.1 py-scipy/0.18.1
-
- -------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/gcc/6.2.0 ---------------------------------------------------------------------
- binutils/2.27 curl/7.50.3 hwloc/1.11.4 libtool/2.4.6 lzo/2.09 netlib-lapack/3.6.1 openssl/1.0.2j python/2.7.12 zlib/1.2.8
- bison/3.0.4 expat/2.2.0 libarchive/3.2.1 libxml2/2.9.4 m4/1.4.17 nettle/3.2 pkg-config/0.29.1 sqlite/3.8.5
- bzip2/1.0.6 flex/2.6.0 libpciaccess/0.13.4 lz4/131 mpich/3.2 openblas/0.2.19 (L) py-nose/1.3.7 util-macros/1.19.0
- cmake/3.6.1 gmp/6.1.1 libsigsegv/2.10 lzma/4.32.7 ncurses/6.0 openmpi/2.0.1 (L) py-setuptools/25.2.0 xz/5.2.2
-
- ----------------------------------------------------------------------- ~/spack/share/spack/lmod/linux-Ubuntu14-x86_64/Core -----------------------------------------------------------------------
- gcc/6.2.0 (L)
-
-Now both the ``MPI`` and the ``LAPACK`` providers are handled by LMod as hierarchies:
-
-.. code-block:: console
-
- $ module load py-numpy netlib-scalapack
- $ module load mpich
-
- Lmod is automatically replacing "openmpi/2.0.1" with "mpich/3.2"
-
-
- Due to MODULEPATH changes the following have been reloaded:
- 1) netlib-scalapack/2.0.2
-
- $ module load netlib-lapack
-
- Lmod is automatically replacing "openblas/0.2.19" with "netlib-lapack/3.6.1"
-
-
- Inactive Modules:
- 1) py-numpy
-
- Due to MODULEPATH changes the following have been reloaded:
- 1) netlib-scalapack/2.0.2
-
-making the use of tags to differentiate them unnecessary.
-Note that because we only compiled ``py-numpy`` with ``openblas`` the module
-is made inactive when we switch the ``LAPACK`` provider. The user
-environment will now be consistent by design!
diff --git a/lib/spack/docs/tutorial_sc16_spack_basics.rst b/lib/spack/docs/tutorial_sc16_spack_basics.rst
deleted file mode 100644
index 9511907ceb..0000000000
--- a/lib/spack/docs/tutorial_sc16_spack_basics.rst
+++ /dev/null
@@ -1,1255 +0,0 @@
-.. _basics-tutorial:
-
-=========================================
-Basic Installation Tutorial
-=========================================
-
-This tutorial will guide you through the process of installing software
-using Spack. We will first cover the `spack install` command, focusing on
-the power of the spec syntax and the flexibility it gives to users. We
-will also cover the `spack find` command for viewing installed packages
-and the `spack uninstall` command. Finally, we will touch on how Spack
-manages compilers, especially as it relates to using Spack-built
-compilers within Spack. We will include full output from all of the
-commands demonstrated, although we will frequently call attention to only
-small portions of that output (or merely to the fact that it
-succeeded). The provided output is all from a cluster running Red Hat
-Enterprise Linux.
-
-.. _basics-tutorial-install:
-
-----------------
-Installing Spack
-----------------
-
-Spack works out of the box. Simply clone spack and get going.
-
-.. code-block:: console
-
- $ git clone https://github.com/LLNL/spack.git
- Initialized empty Git repository in ~/spack/.git/
- remote: Counting objects: 47125, done.
- remote: Compressing objects: 100% (68/68), done.
- remote: Total 47125 (delta 16), reused 2 (delta 2), pack-reused 47047
- Receiving objects: 100% (47125/47125), 12.02 MiB | 2.11 MiB/s, done.
- Resolving deltas: 100% (23044/23044), done.
- $ cd spack
-
-Then add Spack to your path.
-
-.. code-block:: console
-
- $ export PATH=~/spack/bin:$PATH
-
-You're good to go!
-
------------------
-What is in Spack?
------------------
-
-The ``spack list`` command shows available packages.
-
-.. code-block:: console
-
- $ spack list
- ==> 1016 packages.
- abinit hwloc piranha r-rjava
- ack hydra pixman r-rjson
- activeharmony hypre pkg-config r-rjsonio
- ...
-
-The ``spack list`` command can also take a query string. Spack
-automatically adds wildcards to both ends of the string. For example,
-we can view all available python packages.
-
-.. code-block:: console
-
- $ spack list py
- ==> 129 packages.
- py-3to2 py-epydoc py-nestle py-pycparser py-six
- py-alabaster py-flake8 py-netcdf py-pydatalog py-sncosmo
- py-argcomplete py-funcsigs py-networkx py-pyelftools py-snowballstemmer
- ...
-
--------------------
-Installing Packages
--------------------
-
-Installing a package with Spack is very simple. To install a piece of
-software, simply type ``spack install <package_name>``
-
-.. code-block:: console
-
- $ spack install libelf
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.13.tar.gz
- curl: (37) Couldn't open file ~/spack/var/spack/cache/libelf/libelf-0.8.13.tar.gz
- ==> Fetching from ~/spack/var/spack/cache/libelf/libelf-0.8.13.tar.gz failed.
- ==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.13-csrt4qxfkhjgn5xg3zjpkir7xdnszl2a/libelf-0.8.13.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.13-csrt4qxfkhjgn5xg3zjpkir7xdnszl2a
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 1.21s. Build: 8.42s. Total: 9.62s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.13-csrt4qxfkhjgn5xg3zjpkir7xdnszl2a
-
-
-Spack's spec syntax is the interface by which we can request specific
-configurations of the package. The ``%`` sigil is used to specify
-compilers.
-
-.. code-block:: console
-
- $ spack install libelf %intel
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.13.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.13-7wgp32xksatkvw2tbssmehw2t5tnxndj/libelf-0.8.13.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.13-7wgp32xksatkvw2tbssmehw2t5tnxndj
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 0.09s. Build: 50.64s. Total: 50.72s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/intel-16.0.3/libelf-0.8.13-7wgp32xksatkvw2tbssmehw2t5tnxndj
-
-Note that this installation is located separately from the previous
-one. We will discuss this in more detail later, but this is part of what
-allows Spack to support arbitrarily versioned software.
-
-You can check for particular versions before requesting them. We will
-use the ``spack versions`` command to see the available versions, and then
-install a different version of ``libelf``.
-
-.. code-block:: console
-
- $ spack versions libelf
- ==> Safe versions (already checksummed):
- 0.8.13
- 0.8.12
- ==> Remote versions (not yet checksummed):
- 0.8.11
- 0.8.10
- 0.8.9
- 0.8.8
- 0.8.7
- 0.8.6
- 0.8.5
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.0
- 0.7.0
- 0.6.4
- 0.5.2
-
-
-The ``@`` sigil is used to specify versions, both of packages and of
-compilers.
-
-.. code-block:: console
-
- $ spack install libelf @0.8.12
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.12.tar.gz
- curl: (37) Couldn't open file ~/spack/var/spack/cache/libelf/libelf-0.8.12.tar.gz
- ==> Fetching from ~/spack/var/spack/cache/libelf/libelf-0.8.12.tar.gz failed.
- ==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.12.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.12-ipggckv6i7h44iryzfa4dwdela32a7fy/libelf-0.8.12.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.12-ipggckv6i7h44iryzfa4dwdela32a7fy
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 1.12s. Build: 7.88s. Total: 9.00s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.12-ipggckv6i7h44iryzfa4dwdela32a7fy
-
-
-
- $ spack install libelf %intel@15.0.4
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.13.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.13-w33hrejdyqu2j2gggdswitls2zv6kdsi/libelf-0.8.13.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.13-w33hrejdyqu2j2gggdswitls2zv6kdsi
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 0.09s. Build: 55.51s. Total: 55.60s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/intel-15.0.4/libelf-0.8.13-w33hrejdyqu2j2gggdswitls2zv6kdsi
-
-
-The spec syntax also includes compiler flags. Spack accepts
-``cppflags``, ``cflags``, ``cxxflags``, ``fflags``, ``ldflags``, and
-``ldlibs`` parameters. The values of these fields must be quoted on
-the command line if they include spaces. These values are injected
-into the compile line automatically by the Spack compiler wrappers.
-
-.. code-block:: console
-
- $ spack install libelf @0.8.12 cppflags="-O3"
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.12.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.12-vrv2ttbd34xlfoxy4jwt6qsjrcbalmmw/libelf-0.8.12.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.12-vrv2ttbd34xlfoxy4jwt6qsjrcbalmmw
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 0.04s. Build: 7.95s. Total: 7.99s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.12-vrv2ttbd34xlfoxy4jwt6qsjrcbalmmw
-
-
-The ``spack find`` command is used to query installed packages. Note that
-some packages appear identical with the default output. The ``-l`` flag
-shows the hash of each package, and the ``-f`` flag shows any non-empty
-compiler flags of those packages.
-
-.. code-block:: console
-
- $ spack find
- ==> 5 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- libelf@0.8.12
- libelf@0.8.12
- libelf@0.8.13
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- libelf@0.8.13
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- libelf@0.8.13
-
-
-
- $ spack find -lf
- ==> 5 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- ipggckv libelf@0.8.12%gcc
-
- vrv2ttb libelf@0.8.12%gcc cppflags="-O3"
-
- csrt4qx libelf@0.8.13%gcc
-
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- w33hrej libelf@0.8.13%intel
-
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- 7wgp32x libelf@0.8.13%intel
-
-
-Spack generates a hash for each spec. This hash is a function of the full
-provenance of the package, so any change to the spec affects the
-hash. Spack uses this value to compare specs and to generate unique
-installation directories for every combinatorial version. As we move into
-more complicated packages with software dependencies, we can see that
-Spack reuses existing packages to satisfy a dependency only when the
-existing package's hash matches the desired spec.
-
-.. code-block:: console
-
- $ spack install libdwarf
- ==> Installing libdwarf
- ==> libelf is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.13-csrt4qxfkhjgn5xg3zjpkir7xdnszl2a
- ==> Can not find version 20160507 in url_list
- ==> Trying to fetch from ~/spack/var/spack/cache/libdwarf/libdwarf-20160507.tar.gz
- curl: (37) Couldn't open file ~/spack/var/spack/cache/libdwarf/libdwarf-20160507.tar.gz
- ==> Fetching from ~/spack/var/spack/cache/libdwarf/libdwarf-20160507.tar.gz failed.
- ==> Trying to fetch from http://www.prevanders.net/libdwarf-20160507.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libdwarf-20160507-yfx6p3g3rkmqvcqbmtb34o6pln7pqvcz/libdwarf-20160507.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libdwarf-20160507-yfx6p3g3rkmqvcqbmtb34o6pln7pqvcz
- ==> No patches needed for libdwarf
- ==> Building libdwarf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libdwarf
- Fetch: 1.56s. Build: 33.59s. Total: 35.15s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libdwarf-20160507-yfx6p3g3rkmqvcqbmtb34o6pln7pqvcz
-
-
-Dependencies can be explicitly requested using the ``^`` sigil. Note that
-the spec syntax is recursive. Anything we could specify about the
-top-level package, we can also specify about a dependency using ``^``.
-
-.. code-block:: console
-
- $ spack install libdwarf ^libelf @0.8.12 %intel
- ==> Installing libdwarf
- ==> Installing libelf
- ==> Trying to fetch from ~/spack/var/spack/cache/libelf/libelf-0.8.12.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libelf-0.8.12-4blbe3qxqct3ymrfoxxnxysmybvbxay7/libelf-0.8.12.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libelf-0.8.12-4blbe3qxqct3ymrfoxxnxysmybvbxay7
- ==> No patches needed for libelf
- ==> Building libelf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libelf
- Fetch: 0.04s. Build: 52.16s. Total: 52.19s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/intel-16.0.3/libelf-0.8.12-4blbe3qxqct3ymrfoxxnxysmybvbxay7
- ==> Can not find version 20160507 in url_list
- ==> Trying to fetch from ~/spack/var/spack/cache/libdwarf/libdwarf-20160507.tar.gz
- ################################################################################################################################################################################# 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libdwarf-20160507-csruprgucaujkfkrcywhwou7nbeis5fo/libdwarf-20160507.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libdwarf-20160507-csruprgucaujkfkrcywhwou7nbeis5fo
- ==> No patches needed for libdwarf
- ==> Building libdwarf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libdwarf
- Fetch: 0.40s. Build: 2m 17.29s. Total: 2m 17.69s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/intel-16.0.3/libdwarf-20160507-csruprgucaujkfkrcywhwou7nbeis5fo
-
-
-Packages can also be referred to from the command line by their package
-hash. Using the ``spack find -lf`` command earlier we saw that the hash
-of our optimized installation of libelf (``cppflags="-O3"``) began with
-``vrv2ttb``. We can now explicitly build with that package without typing
-the entire spec, by using the ``/`` sigil to refer to it by hash. As with
-other tools like git, you do not need to specify an *entire* hash on the
-command line. You can specify just enough digits to identify a hash
-uniquely. If a hash prefix is ambiguous (i.e., two or more installed
-packages share the prefix) then spack will report an error.
-
-.. code-block:: console
-
- $ spack install libdwarf ^/vrv2ttb
- ==> Installing libdwarf
- ==> libelf is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.12-vrv2ttbd34xlfoxy4jwt6qsjrcbalmmw
- ==> Can not find version 20160507 in url_list
- ==> Trying to fetch from ~/spack/var/spack/cache/libdwarf/libdwarf-20160507.tar.gz
- #################################################################################################################################################################################################################################################### 100.0%
- ==> Staging archive: ~/spack/var/spack/stage/libdwarf-20160507-dtg3tgnp7htccoly26gduqlrgvnwcp5t/libdwarf-20160507.tar.gz
- ==> Created stage in ~/spack/var/spack/stage/libdwarf-20160507-dtg3tgnp7htccoly26gduqlrgvnwcp5t
- ==> No patches needed for libdwarf
- ==> Building libdwarf [Package]
- ==> Executing phase : 'install'
- ==> Successfully installed libdwarf
- Fetch: 0.96s. Build: 24.03s. Total: 24.99s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libdwarf-20160507-dtg3tgnp7htccoly26gduqlrgvnwcp5t
-
-
-The ``spack find`` command can also take a ``-d`` flag, which can show
-dependency information. Note that each package has a top-level entry,
-even if it also appears as a dependency.
-
-.. code-block:: console
-
- $ spack find -ldf
- ==> 9 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- dtg3tgn libdwarf@20160507%gcc
- vrv2ttb ^libelf@0.8.12%gcc cppflags="-O3"
-
- yfx6p3g libdwarf@20160507%gcc
- csrt4qx ^libelf@0.8.13%gcc
-
- ipggckv libelf@0.8.12%gcc
-
- vrv2ttb libelf@0.8.12%gcc cppflags="-O3"
-
- csrt4qx libelf@0.8.13%gcc
-
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- w33hrej libelf@0.8.13%intel
-
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- csruprg libdwarf@20160507%intel
- 4blbe3q ^libelf@0.8.12%intel
-
- 4blbe3q libelf@0.8.12%intel
-
- 7wgp32x libelf@0.8.13%intel
-
-
-As we get to more complex packages, full installs will take too long to
-build in the time allotted for this tutorial. Our collaborators at CERN
-have been working on binary caching for Spack, which would allow for very
-fast installs of previously built packages. We are still working out the
-security ramifications of the feature, but it is coming soon.
-
-For now, we will switch to doing "fake" installs. When supplied with the
-``--fake`` flag (primarily used for debugging), Spack computes build
-metadata the same way it normally would, but it does not download the
-source or run the install script for a pacakge. We can use this to
-quickly demonstrate some of the more advanced Spack features in our
-limited tutorial time.
-
-``HDF5`` is an example of a more complicated package, with an MPI
-dependency. If we install it "out of the box," it will build with
-``openmpi``.
-
-.. code-block:: console
-
- $ spack install --fake hdf5
- ==> Installing hdf5
- ==> Installing zlib
- ==> Building zlib [Package]
- ==> Successfully installed zlib
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Installing openmpi
- ==> Installing hwloc
- ==> Installing libpciaccess
- ==> Installing util-macros
- ==> Building util-macros [Package]
- ==> Successfully installed util-macros
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/util-macros-1.19.0-pc6zhs4cnkmg2cv4et4fizsp6scuvacg
- ==> Installing libtool
- ==> Installing m4
- ==> Installing libsigsegv
- ==> Building libsigsegv [Package]
- ==> Successfully installed libsigsegv
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libsigsegv-2.10-q4cok3yber7lhf3jswg6mysg7oi53unh
- ==> Building m4 [Package]
- ==> Successfully installed m4
- Fetch: . Build: 0.23s. Total: 0.23s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> Building libtool [Package]
- ==> Successfully installed libtool
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libtool-2.4.6-rdx5nkfjwlvcanz5il3ys2pe34j4vxx5
- ==> Installing pkg-config
- ==> Building pkg-config [Package]
- ==> Successfully installed pkg-config
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/pkg-config-0.29.1-wpjnlzahdw6ahkrgmqyeugkj2zhv4tui
- ==> Building libpciaccess [Package]
- ==> Successfully installed libpciaccess
- Fetch: . Build: 0.10s. Total: 0.10s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libpciaccess-0.13.4-m2f6fpm22rpprq2ihkmfx6llf363264m
- ==> Building hwloc [Package]
- ==> Successfully installed hwloc
- Fetch: . Build: 0.23s. Total: 0.23s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hwloc-1.11.4-xpb6hbl2hsze25cgdgfnoppn6rchhzaz
- ==> Building openmpi [Package]
- ==> Successfully installed openmpi
- Fetch: . Build: 0.35s. Total: 0.35s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> Building hdf5 [AutotoolsPackage]
- ==> Successfully installed hdf5
- Fetch: . Build: 0.61s. Total: 0.61s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-ezvtnox35albuaxqryuondweyjgeo6es
-
-
-Spack packages can also have variants. Boolean variants can be specified
-using the ``+`` and ``~`` or ``-`` sigils. There are two sigils for
-``False`` to avoid conflicts with shell parsing in different
-situations. Variants (boolean or otherwise) can also be specified using
-the same syntax as compiler flags. Here we can install HDF5 without MPI
-support.
-
-.. code-block:: console
-
- $ spack install --fake hdf5~mpi
- ==> Installing hdf5
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Building hdf5 [AutotoolsPackage]
- ==> Successfully installed hdf5
- Fetch: . Build: 0.22s. Total: 0.22s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-twppaioxqn6lti4grgopnmhwcq3h2rpw
-
-
-We might also want to install HDF5 with a different MPI
-implementation. While MPI is not a package itself, packages can depend on
-abstract interfaces like MPI. Spack handles these through "virtual
-dependencies." A package, such as HDF5, can depend on the MPI
-interface. Other packages (``openmpi``, ``mpich``, ``mvapich``, etc.)
-provide the MPI interface. Any of these providers can be requested for
-an MPI dependency. For example, we can build HDF5 with MPI support
-provided by mpich by specifying a dependency on ``mpich``. Spack also
-supports versioning of virtual dependencies. A package can depend on the
-MPI interface at version 3, and provider packages specify what version of
-the interface *they* provide. The partial spec ``^mpi@3`` can be safisfied
-by any of several providers.
-
-.. code-block:: console
-
- $ spack install --fake hdf5+mpi ^mpich
- ==> Installing hdf5
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Building hdf5 [AutotoolsPackage]
- ==> Successfully installed hdf5
- Fetch: . Build: 0.38s. Total: 0.38s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-j36yfw25i6gdd3q4vwlupgkpwic4ua6m
-
-
-We'll do a quick check in on what we have installed so far.
-
-.. code-block:: console
-
- $ spack find -ldf
- ==> 22 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- twppaio hdf5@1.10.0-patch1%gcc
- ayc4jq7 ^zlib@1.2.8%gcc
-
- j36yfw2 hdf5@1.10.0-patch1%gcc
- 5jlp2nd ^mpich@3.2%gcc
- ayc4jq7 ^zlib@1.2.8%gcc
-
- ezvtnox hdf5@1.10.0-patch1%gcc
- j4cgoq4 ^openmpi@2.0.1%gcc
- xpb6hbl ^hwloc@1.11.4%gcc
- m2f6fpm ^libpciaccess@0.13.4%gcc
- ayc4jq7 ^zlib@1.2.8%gcc
-
- xpb6hbl hwloc@1.11.4%gcc
- m2f6fpm ^libpciaccess@0.13.4%gcc
-
- dtg3tgn libdwarf@20160507%gcc
- vrv2ttb ^libelf@0.8.12%gcc cppflags="-O3"
-
- yfx6p3g libdwarf@20160507%gcc
- csrt4qx ^libelf@0.8.13%gcc
-
- ipggckv libelf@0.8.12%gcc
-
- vrv2ttb libelf@0.8.12%gcc cppflags="-O3"
-
- csrt4qx libelf@0.8.13%gcc
-
- m2f6fpm libpciaccess@0.13.4%gcc
-
- q4cok3y libsigsegv@2.10%gcc
-
- rdx5nkf libtool@2.4.6%gcc
-
- qijdzvh m4@1.4.17%gcc
- q4cok3y ^libsigsegv@2.10%gcc
-
- 5jlp2nd mpich@3.2%gcc
-
- j4cgoq4 openmpi@2.0.1%gcc
- xpb6hbl ^hwloc@1.11.4%gcc
- m2f6fpm ^libpciaccess@0.13.4%gcc
-
- wpjnlza pkg-config@0.29.1%gcc
-
- pc6zhs4 util-macros@1.19.0%gcc
-
- ayc4jq7 zlib@1.2.8%gcc
-
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- w33hrej libelf@0.8.13%intel
-
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- csruprg libdwarf@20160507%intel
- 4blbe3q ^libelf@0.8.12%intel
-
- 4blbe3q libelf@0.8.12%intel
-
- 7wgp32x libelf@0.8.13%intel
-
-
-Spack models the dependencies of packages as a directed acyclic graph
-(DAG). The ``spack find -d`` command shows the tree representation of
-that graph. We can also use the ``spack graph`` command to view the entire
-DAG as a graph.
-
-.. code-block:: console
-
- $ spack graph hdf5+mpi ^mpich
- o hdf5
- |\
- o | zlib
- /
- o mpich
-
-You may also have noticed that there are some packages shown in the
-``spack find -d`` output that we didn't install explicitly. These are
-dependencies that were installed implicitly. A few packages installed
-implicitly are not shown as dependencies in the ``spack find -d``
-output. These are build dependencies. For example, ``libpciaccess`` is a
-dependency of openmpi and requires m4 to build. Spack will build `m4`` as
-part of the installation of ``openmpi``, but it does not become a part of
-the DAG because it is not linked in at run time. Spack handles build
-dependencies differently because of their different (less strict)
-consistency requirements. It is entirely possible to have two packages
-using different versions of a dependency to build, which obviously cannot
-be done with linked dependencies.
-
-``HDF5`` is more complicated than our basic example of libelf and
-libdwarf, but it's still within the realm of software that an experienced
-HPC user could reasonably expect to install given a bit of time. Now
-let's look at a more complicated package.
-
-.. code-block:: console
-
- $ spack install --fake trilinos
- ==> Installing trilinos
- ==> Installing superlu-dist
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> Installing parmetis
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> Installing cmake
- ==> Installing bzip2
- ==> Building bzip2 [Package]
- ==> Successfully installed bzip2
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/bzip2-1.0.6-gll2xsahysy7ji5gkmfxwkofdt3mwjhs
- ==> expat is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/expat-2.2.0-mg5kwd3kluxdgorj32vzbp7aksg3vqej
- ==> Installing ncurses
- ==> Building ncurses [Package]
- ==> Successfully installed ncurses
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/ncurses-6.0-fttg4astvrtq2buey4wq66tnyu7bgj2c
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Installing openssl
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Building openssl [Package]
- ==> Successfully installed openssl
- Fetch: . Build: 0.23s. Total: 0.23s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openssl-1.0.2j-kt5xyk2dkho6tzadnqlbnbujmljprylg
- ==> Installing libarchive
- ==> Installing lzma
- ==> Building lzma [Package]
- ==> Successfully installed lzma
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/lzma-4.32.7-hah2cdo3zbulz6yg5do6dvnfn6en5v5c
- ==> Installing nettle
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> Installing gmp
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> Building gmp [AutotoolsPackage]
- ==> Successfully installed gmp
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gmp-6.1.1-uwn4gfdtq3sywy5uf4f7znrh66oybikf
- ==> Building nettle [Package]
- ==> Successfully installed nettle
- Fetch: . Build: 0.18s. Total: 0.18s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/nettle-3.2-w4ieitifcmrldo4ra7as63apagzf56ja
- ==> bzip2 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/bzip2-1.0.6-gll2xsahysy7ji5gkmfxwkofdt3mwjhs
- ==> expat is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/expat-2.2.0-mg5kwd3kluxdgorj32vzbp7aksg3vqej
- ==> Installing libxml2
- ==> Installing xz
- ==> Building xz [Package]
- ==> Successfully installed xz
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/xz-5.2.2-bxh6cpyqqozazm5okvjqk23sww3gccnf
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Building libxml2 [Package]
- ==> Successfully installed libxml2
- Fetch: . Build: 0.35s. Total: 0.35s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libxml2-2.9.4-un323rppyu5qipkegyf7flmymvtmunrx
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Installing lz4
- ==> Building lz4 [Package]
- ==> Successfully installed lz4
- Fetch: . Build: 0.12s. Total: 0.12s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/lz4-131-ivy2fcaw7ywujx74weebdi5bsm7q4vkc
- ==> openssl is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openssl-1.0.2j-kt5xyk2dkho6tzadnqlbnbujmljprylg
- ==> xz is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/xz-5.2.2-bxh6cpyqqozazm5okvjqk23sww3gccnf
- ==> Installing lzo
- ==> Building lzo [AutotoolsPackage]
- ==> Successfully installed lzo
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/lzo-2.09-dlgnm74ozo6baactkft5oah2jre2ri2i
- ==> Building libarchive [Package]
- ==> Successfully installed libarchive
- Fetch: . Build: 1.35s. Total: 1.35s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libarchive-3.2.1-biq3kebw7vel7njusill7vv7mjldkqjv
- ==> xz is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/xz-5.2.2-bxh6cpyqqozazm5okvjqk23sww3gccnf
- ==> Installing curl
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> openssl is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openssl-1.0.2j-kt5xyk2dkho6tzadnqlbnbujmljprylg
- ==> Building curl [Package]
- ==> Successfully installed curl
- Fetch: . Build: 0.36s. Total: 0.36s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/curl-7.50.3-oze4gqutj4x2isbkcn5ob2bhhxbskod4
- ==> Building cmake [Package]
- ==> Successfully installed cmake
- Fetch: . Build: 1.64s. Total: 1.64s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> Installing metis
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> Building metis [Package]
- ==> Successfully installed metis
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Building parmetis [Package]
- ==> Successfully installed parmetis
- Fetch: . Build: 0.62s. Total: 0.62s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/parmetis-4.0.3-rtg6hml5t6acdcnxomn3l5zfiful4d2t
- ==> Installing openblas
- ==> Building openblas [Package]
- ==> Successfully installed openblas
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Building superlu-dist [Package]
- ==> Successfully installed superlu-dist
- Fetch: . Build: 0.85s. Total: 0.85s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/superlu-dist-5.1.1-25r6jlvkpjnkiuwt2rtbzhk3l3htuxs7
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> Installing glm
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> Building glm [Package]
- ==> Successfully installed glm
- Fetch: . Build: 0.12s. Total: 0.12s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/glm-0.9.7.1-7a6oho4aerz7vftxd5ur7lywscht2iry
- ==> Installing hypre
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building hypre [Package]
- ==> Successfully installed hypre
- Fetch: . Build: 0.61s. Total: 0.61s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hypre-2.11.1-lf7hcejiiww5peesh57quda72z67veit
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Installing netlib-scalapack
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building netlib-scalapack [Package]
- ==> Successfully installed netlib-scalapack
- Fetch: . Build: 0.61s. Total: 0.61s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netlib-scalapack-2.0.2-dvcanz2qq4dfcexznbhbmzbxfj43uz4q
- ==> Installing suite-sparse
- ==> Installing tbb
- ==> Building tbb [Package]
- ==> Successfully installed tbb
- Fetch: . Build: 0.12s. Total: 0.12s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/tbb-4.4.4-zawzkkhrmdonbjpj3a5bb6gkgnqlrjeu
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Building suite-sparse [Package]
- ==> Successfully installed suite-sparse
- Fetch: . Build: 0.49s. Total: 0.49s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/suite-sparse-4.5.3-lvur6hriy2j7xfjwh5punp3exwpynzm6
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> Installing netcdf
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> curl is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/curl-7.50.3-oze4gqutj4x2isbkcn5ob2bhhxbskod4
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> hdf5 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-ezvtnox35albuaxqryuondweyjgeo6es
- ==> Building netcdf [Package]
- ==> Successfully installed netcdf
- Fetch: . Build: 0.90s. Total: 0.90s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netcdf-4.4.1-tcl4zbrmdfrit2cqlaxig6xieu5h552j
- ==> Installing mumps
- ==> netlib-scalapack is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netlib-scalapack-2.0.2-dvcanz2qq4dfcexznbhbmzbxfj43uz4q
- ==> openmpi is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openmpi-2.0.1-j4cgoq4furxvr73pq72r2qgywgksw3qn
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building mumps [Package]
- ==> Successfully installed mumps
- Fetch: . Build: 0.74s. Total: 0.74s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mumps-5.0.2-kr5r4nnx5tfcacxnk3ii5dsxbe6pu5fy
- ==> Installing matio
- ==> Building matio [Package]
- ==> Successfully installed matio
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/matio-1.5.2-4zrozucookychlvc4q53omp2zyfk2bed
- ==> Installing boost
- ==> bzip2 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/bzip2-1.0.6-gll2xsahysy7ji5gkmfxwkofdt3mwjhs
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> Building boost [Package]
- ==> Successfully installed boost
- Fetch: . Build: 0.35s. Total: 0.35s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/boost-1.62.0-je7eqvzt74kezwhh55y5lwt5dy6pnali
- ==> parmetis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/parmetis-4.0.3-rtg6hml5t6acdcnxomn3l5zfiful4d2t
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> hdf5 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-ezvtnox35albuaxqryuondweyjgeo6es
- ==> Building trilinos [Package]
- ==> Successfully installed trilinos
- Fetch: . Build: 2.63s. Total: 2.63s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/trilinos-12.8.1-uvd6dfd7x4uyvck4awo3r3frudihn4ar
-
-
-Now we're starting to see the power of Spack. Trilinos has 11 top level
-dependecies, many of which have dependencies of their own. Installing
-more complex packages can take days or weeks even for an experienced
-user. Although we've done a fake installation for the tutorial, a real
-installation of trilinos using Spack takes about 3 hours (depending on
-the system), but only 20 seconds of programmer time.
-
-Spack manages constistency of the entire DAG. Every MPI dependency will
-be satisfied by the same configuration of MPI, etc. If we install
-``trilinos`` again specifying a dependency on our previous HDF5 built
-with ``mpich``:
-
-.. code-block:: console
-
- $ spack install --fake trilinos ^hdf5+mpi ^mpich
- ==> Installing trilinos
- ==> Installing superlu-dist
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Installing parmetis
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> Building parmetis [Package]
- ==> Successfully installed parmetis
- Fetch: . Build: 0.38s. Total: 0.38s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/parmetis-4.0.3-43kbtni6p5y446c6qdkybq4htj7ot4zn
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building superlu-dist [Package]
- ==> Successfully installed superlu-dist
- Fetch: . Build: 0.61s. Total: 0.61s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/superlu-dist-5.1.1-46uuupehmonx5jicc6xnegnud2n5jqyl
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> glm is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/glm-0.9.7.1-7a6oho4aerz7vftxd5ur7lywscht2iry
- ==> Installing hypre
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building hypre [Package]
- ==> Successfully installed hypre
- Fetch: . Build: 0.37s. Total: 0.37s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hypre-2.11.1-6ajnyymoivs5apajd7thjisae36jv4lz
- ==> metis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/metis-5.1.0-ithifyl4xvqbn76js23wsb4tjnztrbdv
- ==> Installing netlib-scalapack
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> cmake is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/cmake-3.6.1-n2nkknrku6dvuneo3rjumim7axt7n36e
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building netlib-scalapack [Package]
- ==> Successfully installed netlib-scalapack
- Fetch: . Build: 0.37s. Total: 0.37s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netlib-scalapack-2.0.2-dayeep27omm26wksd3iqvbu3gezc2eoh
- ==> suite-sparse is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/suite-sparse-4.5.3-lvur6hriy2j7xfjwh5punp3exwpynzm6
- ==> Installing netcdf
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> curl is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/curl-7.50.3-oze4gqutj4x2isbkcn5ob2bhhxbskod4
- ==> zlib is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/zlib-1.2.8-ayc4jq7vxuzge5n444gutvskeytfdruh
- ==> hdf5 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-j36yfw25i6gdd3q4vwlupgkpwic4ua6m
- ==> Building netcdf [Package]
- ==> Successfully installed netcdf
- Fetch: . Build: 0.67s. Total: 0.67s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netcdf-4.4.1-gfemi4jk4qltvp33xhtpkam7dozbqvhq
- ==> Installing mumps
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> netlib-scalapack is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/netlib-scalapack-2.0.2-dayeep27omm26wksd3iqvbu3gezc2eoh
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> Building mumps [Package]
- ==> Successfully installed mumps
- Fetch: . Build: 0.49s. Total: 0.49s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mumps-5.0.2-w7t5pl3jhhwitfiyer63zj6zv7idkt3m
- ==> mpich is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpich-3.2-5jlp2ndnsb67txggraglu47vjmayx5za
- ==> matio is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/matio-1.5.2-4zrozucookychlvc4q53omp2zyfk2bed
- ==> boost is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/boost-1.62.0-je7eqvzt74kezwhh55y5lwt5dy6pnali
- ==> parmetis is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/parmetis-4.0.3-43kbtni6p5y446c6qdkybq4htj7ot4zn
- ==> openblas is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/openblas-0.2.19-bwofa7fhff6od5zn56vy3j4eeyupsqgt
- ==> hdf5 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-j36yfw25i6gdd3q4vwlupgkpwic4ua6m
- ==> Building trilinos [Package]
- ==> Successfully installed trilinos
- Fetch: . Build: 2.42s. Total: 2.42s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/trilinos-12.8.1-ffwrpxnq7lhiw2abxn2u7ffr4jjsdwep
-
-We see that every package in the trilinos DAG that depends on MPI now
-uses ``mpich``.
-
-.. code-block:: console
-
- $ spack find -d trilinos
- ==> 2 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- trilinos@12.8.1
- ^boost@1.62.0
- ^bzip2@1.0.6
- ^zlib@1.2.8
- ^glm@0.9.7.1
- ^hdf5@1.10.0-patch1
- ^mpich@3.2
- ^hypre@2.11.1
- ^openblas@0.2.19
- ^matio@1.5.2
- ^metis@5.1.0
- ^mumps@5.0.2
- ^netlib-scalapack@2.0.2
- ^netcdf@4.4.1
- ^curl@7.50.3
- ^openssl@1.0.2j
- ^parmetis@4.0.3
- ^suite-sparse@4.5.3
- ^tbb@4.4.4
- ^superlu-dist@5.1.1
-
- trilinos@12.8.1
- ^boost@1.62.0
- ^bzip2@1.0.6
- ^zlib@1.2.8
- ^glm@0.9.7.1
- ^hdf5@1.10.0-patch1
- ^openmpi@2.0.1
- ^hwloc@1.11.4
- ^libpciaccess@0.13.4
- ^hypre@2.11.1
- ^openblas@0.2.19
- ^matio@1.5.2
- ^metis@5.1.0
- ^mumps@5.0.2
- ^netlib-scalapack@2.0.2
- ^netcdf@4.4.1
- ^curl@7.50.3
- ^openssl@1.0.2j
- ^parmetis@4.0.3
- ^suite-sparse@4.5.3
- ^tbb@4.4.4
- ^superlu-dist@5.1.1
-
-
-As we discussed before, the ``spack find -d`` command shows the
-dependency information as a tree. While that is often sufficient, many
-complicated packages, including trilinos, have dependencies that
-cannot be fully represented as a tree. Again, the ``spack graph``
-command shows the full DAG of the dependency information.
-
-.. code-block:: console
-
- $ spack graph trilinos
- o trilinos
- |\
- | |\
- | | |\
- | | | |\
- | | | | |\
- | | | | | |\
- | | | | | | |\
- | o | | | | | | netcdf
- | |\ \ \ \ \ \ \
- | | |\ \ \ \ \ \ \
- | | | o | | | | | | curl
- | | |/| | | | | | |
- | |/| | | | | | | |
- | | | o | | | | | | openssl
- | | |/ / / / / / /
- | |/| | | | | | |
- | | o | | | | | | hdf5
- | |/| | | | | | |
- | | |/ / / / / /
- | o | | | | | | zlib
- | / / / / / /
- o | | | | | | swig
- o | | | | | | pcre
- / / / / / /
- o | | | | | mpi
- / / / / /
- o | | | | matio
- / / / /
- o | | | lapack
- / / /
- o | | glm
- / /
- o | boost
- /
- o blas
-
-
-You can control how the output is displayed with a number of options.
-
-The ASCII output from ``spack graph`` can be difficult to parse for
-complicated packages. The output can be changed to the ``graphviz``
-``.dot`` format using the `--dot` flag.
-
-.. code-block:: console
-
- $ spack graph --dot trilinos | dot -Tpdf trilinos_graph.pdf
-
-.. _basics-tutorial-uninstall:
-
----------------------
-Uninstalling Packages
----------------------
-
-Earlier we installed many configurations each of libelf and
-libdwarf. Now we will go through and uninstall some of those packages
-that we didn't really need.
-
-.. code-block:: console
-
- $ spack find -d libdwarf
- ==> 3 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- libdwarf@20160507
- ^libelf@0.8.12
-
- libdwarf@20160507
- ^libelf@0.8.13
-
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- libdwarf@20160507
- ^libelf@0.8.12
-
- $ spack find libelf
- ==> 6 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- libelf@0.8.12 libelf@0.8.12 libelf@0.8.13
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- libelf@0.8.13
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- libelf@0.8.12 libelf@0.8.13
-
-
-We can uninstall packages by spec using the same syntax as install.
-
-.. code-block:: console
-
- $ spack uninstall libelf%intel@15.0.4
- ==> The following packages will be uninstalled :
-
- -- linux-redhat6-x86_64 / intel@15.0.4 --------------------------
- w33hrej libelf@0.8.13%intel
-
-
- ==> Do you want to proceed ? [y/n]
- y
- ==> Successfully uninstalled libelf@0.8.13%intel@15.0.4 arch=linux-redhat6-x86_64-w33hrej
-
-
-
- $ spack find -lf libelf
- ==> 5 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- ipggckv libelf@0.8.12%gcc
-
- vrv2ttb libelf@0.8.12%gcc cppflags="-O3"
-
- csrt4qx libelf@0.8.13%gcc
-
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- 4blbe3q libelf@0.8.12%intel
-
- 7wgp32x libelf@0.8.13%intel
-
-
-We can uninstall packages by referring only to their hash.
-
-
-We can use either ``-f`` (force) or ``-d`` (remove dependents as well) to
-remove packages that are required by another installed package.
-
-.. code-block:: console
-
- $ spack uninstall /4blb
- ==> Error: Will not uninstall libelf@0.8.12%intel@16.0.3-4blbe3q
-
- The following packages depend on it:
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- csruprg libdwarf@20160507%intel
-
-
- ==> Error: You can use spack uninstall --dependents to uninstall these dependencies as well
- $ spack uninstall -d /4blb
- ==> The following packages will be uninstalled :
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- csruprg libdwarf@20160507%intel
-
- 4blbe3q libelf@0.8.12%intel
-
-
- ==> Do you want to proceed ? [y/n]
- y
- ==> Successfully uninstalled libdwarf@20160507%intel@16.0.3 arch=linux-redhat6-x86_64-csruprg
- ==> Successfully uninstalled libelf@0.8.12%intel@16.0.3 arch=linux-redhat6-x86_64-4blbe3q
-
-
-Spack will not uninstall packages that are not sufficiently
-specified. The ``-a`` (all) flag can be used to uninstall multiple
-packages at once.
-
-.. code-block:: console
-
- $ spack uninstall trilinos
- ==> Error: trilinos matches multiple packages:
-
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- ffwrpxn trilinos@12.8.1%gcc+boost~debug+hdf5+hypre+metis+mumps~python+shared+suite-sparse+superlu-dist
-
- uvd6dfd trilinos@12.8.1%gcc+boost~debug+hdf5+hypre+metis+mumps~python+shared+suite-sparse+superlu-dist
-
-
- ==> Error: You can either:
- a) Use a more specific spec, or
- b) use spack uninstall -a to uninstall ALL matching specs.
-
-
-
- $ spack uninstall /ffwr
- ==> The following packages will be uninstalled :
-
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- ffwrpxn trilinos@12.8.1%gcc+boost~debug+hdf5+hypre+metis+mumps~python+shared+suite-sparse+superlu-dist
-
-
- ==> Do you want to proceed ? [y/n]
- y
- ==> Successfully uninstalled trilinos@12.8.1%gcc@4.4.7+boost~debug+hdf5+hypre+metis+mumps~python+shared+suite-sparse+superlu-dist arch=linux-redhat6-x86_64-ffwrpxn
-
------------------------------
-Advanced ``spack find`` Usage
------------------------------
-
-We will go over some additional uses for the `spack find` command not
-already covered in the :ref:`basics-tutorial-install` and
-:ref:`basics-tutorial-uninstall` sections.
-
-The ``spack find`` command can accept what we call "anonymous specs."
-These are expressions in spec syntax that do not contain a package
-name. For example, `spack find %intel` will return every package built
-with the intel compiler, and ``spack find cppflags="-O3"`` will
-return every package which was built with ``cppflags="-O3"``.
-
-.. code-block:: console
-
- $ spack find %intel
- ==> 1 installed packages.
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- libelf@0.8.13
-
-
-
- $ spack find cppflags="-O3"
- ==> 1 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- libelf@0.8.12
-
-
-The ``find`` command can also show which packages were installed
-explicitly (rather than pulled in as a dependency) using the ``-e``
-flag. The ``-E`` flag shows implicit installs only. The ``find`` command can
-also show the path to which a spack package was installed using the ``-p``
-command.
-
-.. code-block:: console
-
- $ spack find -pe
- ==> 10 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- hdf5@1.10.0-patch1 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-twppaioxqn6lti4grgopnmhwcq3h2rpw
- hdf5@1.10.0-patch1 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-j36yfw25i6gdd3q4vwlupgkpwic4ua6m
- hdf5@1.10.0-patch1 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/hdf5-1.10.0-patch1-ezvtnox35albuaxqryuondweyjgeo6es
- libdwarf@20160507 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libdwarf-20160507-dtg3tgnp7htccoly26gduqlrgvnwcp5t
- libdwarf@20160507 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libdwarf-20160507-yfx6p3g3rkmqvcqbmtb34o6pln7pqvcz
- libelf@0.8.12 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.12-ipggckv6i7h44iryzfa4dwdela32a7fy
- libelf@0.8.12 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.12-vrv2ttbd34xlfoxy4jwt6qsjrcbalmmw
- libelf@0.8.13 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/libelf-0.8.13-csrt4qxfkhjgn5xg3zjpkir7xdnszl2a
- trilinos@12.8.1 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/trilinos-12.8.1-uvd6dfd7x4uyvck4awo3r3frudihn4ar
-
- -- linux-redhat6-x86_64 / intel@16.0.3 --------------------------
- libelf@0.8.13 ~/spack/opt/spack/linux-redhat6-x86_64/intel-16.0.3/libelf-0.8.13-7wgp32xksatkvw2tbssmehw2t5tnxndj
-
-
----------------------
-Customizing Compilers
----------------------
-
-
-Spack manages a list of available compilers on the system, detected
-automatically from from the user's ``PATH`` variable. The ``spack
-compilers`` command is an alias for the command ``spack compiler list``.
-
-.. code-block:: console
-
- $ spack compilers
- ==> Available compilers
- -- gcc ----------------------------------------------------------
- gcc@4.4.7
-
- -- intel --------------------------------------------------------
- intel@16.0.3 intel@15.0.1 intel@14.0.0 intel@12.1.3 intel@10.0
- intel@16.0.2 intel@15.0.0 intel@13.1.1 intel@12.1.2 intel@9.1
- intel@16.0.1 intel@14.0.4 intel@13.1.0 intel@12.1.0
- intel@16.0.0 intel@14.0.3 intel@13.0.1 intel@12.0.4
- intel@15.0.4 intel@14.0.2 intel@13.0.0 intel@11.1
- intel@15.0.3 intel@14.0.1 intel@12.1.5 intel@10.1
-
- -- pgi ----------------------------------------------------------
- pgi@16.5-0 pgi@15.7-0 pgi@14.7-0 pgi@13.2-0 pgi@11.10-0 pgi@9.0-4
- pgi@16.3-0 pgi@15.5-0 pgi@14.3-0 pgi@13.1-1 pgi@11.1-0 pgi@8.0-1
- pgi@16.1-0 pgi@15.1-0 pgi@13.10-0 pgi@12.8-0 pgi@10.9-0 pgi@7.1-3
- pgi@15.10-0 pgi@14.10-0 pgi@13.6-0 pgi@12.1-0 pgi@10.2-0 pgi@7.0-6
-
-The compilers are maintained in a YAML file that can be hand-edited
-for special cases. Spack also has tools to add compilers, and
-compilers built with Spack can be added to the configuration.
-
-.. code-block:: console
-
- $ spack install --fake gcc@6.1.0
- ==> Installing gcc
- ==> gmp is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gmp-6.1.1-uwn4gfdtq3sywy5uf4f7znrh66oybikf
- ==> Installing isl
- ==> gmp is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gmp-6.1.1-uwn4gfdtq3sywy5uf4f7znrh66oybikf
- ==> Building isl [Package]
- ==> Successfully installed isl
- Fetch: . Build: 0.19s. Total: 0.19s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/isl-0.14-hs2w7mjjjaakkmbbv5yvfqf7yyzhorl6
- ==> Installing mpc
- ==> gmp is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gmp-6.1.1-uwn4gfdtq3sywy5uf4f7znrh66oybikf
- ==> Installing mpfr
- ==> gmp is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gmp-6.1.1-uwn4gfdtq3sywy5uf4f7znrh66oybikf
- ==> Building mpfr [Package]
- ==> Successfully installed mpfr
- Fetch: . Build: 0.17s. Total: 0.17s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpfr-3.1.4-7kt5ij437khredfq4bvnyu22t3fmtfvt
- ==> Building mpc [Package]
- ==> Successfully installed mpc
- Fetch: . Build: 0.28s. Total: 0.28s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpc-1.0.3-g5taq6lt3zuy5l2jtggi5lctxnl4la5u
- ==> Installing binutils
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> Installing bison
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> Building bison [Package]
- ==> Successfully installed bison
- Fetch: . Build: 0.12s. Total: 0.12s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/bison-3.0.4-hkhfysfvq5l6rsns67g2htmkpxauvnwa
- ==> Installing flex
- ==> m4 is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/m4-1.4.17-qijdzvhjyybrtwbqm73vykhmkaqro3je
- ==> bison is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/bison-3.0.4-hkhfysfvq5l6rsns67g2htmkpxauvnwa
- ==> Building flex [Package]
- ==> Successfully installed flex
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/flex-2.6.0-qd6d73rdfrozdrsdpimvl4tj7d5ps7qg
- ==> Building binutils [Package]
- ==> Successfully installed binutils
- Fetch: . Build: 0.11s. Total: 0.11s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/binutils-2.27-iq2hry3gvaxszmwwbnll7njgdgaek56o
- ==> mpfr is already installed in ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/mpfr-3.1.4-7kt5ij437khredfq4bvnyu22t3fmtfvt
- ==> Building gcc [Package]
- ==> Successfully installed gcc
- Fetch: . Build: 0.66s. Total: 0.66s.
- [+] ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gcc-6.1.0-j5576zbsot2ydljlthjzhsirsesnogvh
-
-
-
- $ spack find -p gcc
- ==> 1 installed packages.
- -- linux-redhat6-x86_64 / gcc@4.4.7 -----------------------------
- gcc@6.1.0 ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gcc-6.1.0-j5576zbsot2ydljlthjzhsirsesnogvh
-
-
-If we had done a "real" install of gcc, we could add it to our
-configuration now using the `spack compiler add` command, but we would
-also be waiting for it to install. If we run the command now, it will
-return no new compilers.
-
-.. code-block:: console
-
- $ spack compiler add ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gcc-6.1.0-j5576zbsot2ydljlthjzhsirsesnogvh/bin
- ==> Found no new compilers
-
-If we had done a real install, the output would have been as follows:
-
-.. code-block:: console
-
- $ spack compiler add ~/spack/opt/spack/linux-redhat6-x86_64/gcc-4.4.7/gcc-6.1.0-j5576zbsot2ydljlthjzhsirsesnogvh/bin
- ==> Added 1 new compiler to ~/.spack/linux/compilers.yaml
- gcc@6.1.0
diff --git a/lib/spack/docs/workflows.rst b/lib/spack/docs/workflows.rst
index 11b77c008d..4c674f92e4 100644
--- a/lib/spack/docs/workflows.rst
+++ b/lib/spack/docs/workflows.rst
@@ -33,24 +33,12 @@ possible realization of a particular package, out of combinatorially
many other realizations. For example, here is a concrete spec
instantiated from ``curl``:
-.. code-block:: console
-
- curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^openssl@system%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
+.. command-output:: spack spec curl
Spack's core concretization algorithm generates concrete specs by
instantiating packages from its repo, based on a set of "hints",
including user input and the ``packages.yaml`` file. This algorithm
-may be accessed at any time with the ``spack spec`` command. For
-example:
-
-.. code-block:: console
-
- $ spack spec curl
- curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^openssl@system%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
+may be accessed at any time with the ``spack spec`` command.
Every time Spack installs a package, that installation corresponds to
a concrete spec. Only a vanishingly small fraction of possible
@@ -68,7 +56,7 @@ variant, compiler, etc. For example, the following set is consistent:
.. code-block:: console
curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^openssl@system%gcc@5.3.0 arch=linux-SuSE11-x86_64
+ ^openssl@1.0.2k%gcc@5.3.0 arch=linux-SuSE11-x86_64
^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
@@ -77,7 +65,7 @@ The following set is not consistent:
.. code-block:: console
curl@7.50.1%gcc@5.3.0 arch=linux-SuSE11-x86_64
- ^openssl@system%gcc@5.3.0 arch=linux-SuSE11-x86_64
+ ^openssl@1.0.2k%gcc@5.3.0 arch=linux-SuSE11-x86_64
^zlib@1.2.8%gcc@5.3.0 arch=linux-SuSE11-x86_64
zlib@1.2.7%gcc@5.3.0 arch=linux-SuSE11-x86_64
@@ -182,7 +170,7 @@ of usage:
.. code-block:: sh
- #!/bin/sh
+ #!/bin/bash
compilers=(
%gcc
@@ -367,7 +355,7 @@ Transitive Dependencies
In the script above, each ``spack module loads`` command generates a
*single* ``module load`` line. Transitive dependencies do not usually
-need to be loaded, only modules the user needs in in ``$PATH``. This is
+need to be loaded, only modules the user needs in ``$PATH``. This is
because Spack builds binaries with RPATH. Spack's RPATH policy has
some nice features:
@@ -488,10 +476,11 @@ if the view is built with hardlinks.
.. FIXME: reference the relocation work of Hegner and Gartung (PR #1013)
+.. _cmd-spack-view:
-""""""""""""""""""""""
-Using Filesystem Views
-""""""""""""""""""""""
+""""""""""""""
+``spack view``
+""""""""""""""
A filesystem view is created, and packages are linked in, by the ``spack
view`` command's ``symlink`` and ``hardlink`` sub-commands. The
@@ -1039,6 +1028,232 @@ or filesystem views. However, it has some drawbacks:
integrate Spack explicitly in their workflow. Not all users are
willing to do this.
+------------------------
+Using Spack on Travis-CI
+------------------------
+
+Spack can be deployed as a provider for userland software in
+`Travis-CI <https://http://travis-ci.org>`_.
+
+A starting-point for a ``.travis.yml`` file can look as follows.
+It uses `caching <https://docs.travis-ci.com/user/caching/>`_ for
+already built environments, so make sure to clean the Travis cache if
+you run into problems.
+
+The main points that are implemented below:
+
+#. Travis is detected as having up to 34 cores available, but only 2
+ are actually allocated for the user. We limit the parallelism of
+ the spack builds in the config.
+ (The Travis yaml parser is a bit buggy on the echo command.)
+
+#. Builds over 10 minutes need to be prefixed with ``travis_wait``.
+ Alternatively, generate output once with ``spack install -v``.
+
+#. Travis builds are non-interactive. This prevents using bash
+ aliases and functions for modules. We fix that by sourcing
+ ``/etc/profile`` first (or running everything in a subshell with
+ ``bash -l -c '...'``).
+
+.. code-block:: yaml
+
+ language: cpp
+ sudo: false
+ dist: trusty
+
+ cache:
+ apt: true
+ directories:
+ - $HOME/.cache
+
+ addons:
+ apt:
+ sources:
+ - ubuntu-toolchain-r-test
+ packages:
+ - g++-4.9
+ - environment-modules
+
+ env:
+ global:
+ - SPACK_ROOT: $HOME/.cache/spack
+ - PATH: $PATH:$HOME/.cache/spack/bin
+
+ before_install:
+ - export CXX=g++-4.9
+ - export CC=gcc-4.9
+ - export FC=gfortran-4.9
+ - export CXXFLAGS="-std=c++11"
+
+ install:
+ - if ! which spack >/dev/null; then
+ mkdir -p $SPACK_ROOT &&
+ git clone --depth 50 https://github.com/spack/spack.git $SPACK_ROOT &&
+ echo -e "config:""\n build_jobs:"" 2" > $SPACK_ROOT/etc/spack/config.yaml;
+ fi
+ - travis_wait spack install cmake@3.7.2~openssl~ncurses
+ - travis_wait spack install boost@1.62.0~graph~iostream~locale~log~wave
+ - spack clean -a
+ - source /etc/profile &&
+ source $SPACK_ROOT/share/spack/setup-env.sh
+ - spack load cmake
+ - spack load boost
+
+ script:
+ - mkdir -p $HOME/build
+ - cd $HOME/build
+ - cmake $TRAVIS_BUILD_DIR
+ - make -j 2
+ - make test
+
+.. _workflow_create_docker_image:
+
+-----------------------------------
+Using Spack to Create Docker Images
+-----------------------------------
+
+Spack can be the ideal tool to set up images for Docker (and Singularity).
+
+An example ``Dockerfile`` is given below, downloading the latest spack
+version.
+
+The following functionality is prepared:
+
+#. Base image: the example starts from a minimal ubuntu.
+
+#. Installing as root: docker images are usually set up as root.
+ Since some autotools scripts might complain about this being unsafe, we set
+ ``FORCE_UNSAFE_CONFIGURE=1`` to avoid configure errors.
+
+#. Pre-install the spack dependencies, including modules from the packages.
+ This avoids needing to build those from scratch via ``spack bootstrap``.
+ Package installs are followed by a clean-up of the system package index,
+ to avoid outdated information and it saves space.
+
+#. Install spack in ``/usr/local``.
+ Add ``setup-env.sh`` to profile scripts, so commands in *login* shells
+ can use the whole spack functionality, including modules.
+
+#. Install an example package (``tar``).
+ As with system package managers above, ``spack install`` commands should be
+ concatenated with a ``&& spack clean -a`` in order to keep image sizes small.
+
+#. Add a startup hook to an *interactive login shell* so spack modules will be
+ usable.
+
+In order to build and run the image, execute:
+
+.. code-block:: bash
+
+ docker build -t spack .
+ docker run -it spack
+
+.. code-block:: docker
+
+ FROM ubuntu:16.04
+ MAINTAINER Your Name <someone@example.com>
+
+ # general environment for docker
+ ENV DEBIAN_FRONTEND=noninteractive \
+ SPACK_ROOT=/usr/local \
+ FORCE_UNSAFE_CONFIGURE=1
+
+ # install minimal spack depedencies
+ RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ autoconf \
+ build-essential \
+ ca-certificates \
+ coreutils \
+ curl \
+ environment-modules \
+ git \
+ python \
+ unzip \
+ vim \
+ && rm -rf /var/lib/apt/lists/*
+
+ # load spack environment on login
+ RUN echo "source $SPACK_ROOT/share/spack/setup-env.sh" \
+ > /etc/profile.d/spack.sh
+
+ # spack settings
+ # note: if you wish to change default settings, add files alongside
+ # the Dockerfile with your desired settings. Then uncomment this line
+ #COPY packages.yaml modules.yaml $SPACK_ROOT/etc/spack/
+
+ # install spack
+ RUN curl -s -L https://api.github.com/repos/spack/spack/tarball \
+ | tar xzC $SPACK_ROOT --strip 1
+ # note: at this point one could also run ``spack bootstrap`` to avoid
+ # parts of the long apt-get install list above
+
+ # install software
+ RUN spack install tar \
+ && spack clean -a
+
+ # need the modules already during image build?
+ #RUN /bin/bash -l -c ' \
+ # spack load tar \
+ # && which tar'
+
+ # image run hook: the -l will make sure /etc/profile environments are loaded
+ CMD /bin/bash -l
+
+^^^^^^^^^^^^^^
+Best Practices
+^^^^^^^^^^^^^^
+
+"""
+MPI
+"""
+Due to the dependency on Fortran for OpenMPI, which is the spack default
+implementation, consider adding ``gfortran`` to the ``apt-get install`` list.
+
+Recent versions of OpenMPI will require you to pass ``--allow-run-as-root``
+to your ``mpirun`` calls if started as root user inside Docker.
+
+For execution on HPC clusters, it can be helpful to import the docker
+image into Singularity in order to start a program with an *external*
+MPI. Otherwise, also add ``openssh-server`` to the ``apt-get install`` list.
+
+""""
+CUDA
+""""
+Starting from CUDA 9.0, Nvidia provides minimal CUDA images based on
+Ubuntu.
+Please see `their instructions <https://hub.docker.com/r/nvidia/cuda/>`_.
+Avoid double-installing CUDA by adding, e.g.
+
+.. code-block:: yaml
+
+ packages:
+ cuda:
+ paths:
+ cuda@9.0.176%gcc@5.4.0 arch=linux-ubuntu16-x86_64: /usr/local/cuda
+ buildable: False
+
+to your ``packages.yaml``.
+Then ``COPY`` in that file into the image as in the example above.
+
+Users will either need ``nvidia-docker`` or e.g. Singularity to *execute*
+device kernels.
+
+"""""""""""
+Singularity
+"""""""""""
+Importing and running the image created above into
+`Singularity <http://singularity.lbl.gov/>`_ works like a charm.
+Just use the `docker bootstraping mechanism <http://singularity.lbl.gov/quickstart#bootstrap-recipes>`_:
+
+.. code-block:: none
+
+ Bootstrap: docker
+ From: registry/user/image:tag
+
+ %runscript
+ exec /bin/bash -l
+
------------------
Upstream Bug Fixes
------------------
@@ -1055,7 +1270,7 @@ Buggy New Version
Sometimes, the old version of a package works fine, but a new version
is buggy. For example, it was once found that `Adios did not build
-with hdf5@1.10 <https://github.com/LLNL/spack/issues/1683>`_. If the
+with hdf5@1.10 <https://github.com/spack/spack/issues/1683>`_. If the
old version of ``hdf5`` will work with ``adios``, the suggested
procedure is:
@@ -1065,7 +1280,7 @@ procedure is:
.. code-block:: python
# Adios does not build with HDF5 1.10
- # See: https://github.com/LLNL/spack/issues/1683
+ # See: https://github.com/spack/spack/issues/1683
depends_on('hdf5@:1.9')
#. Determine whether the problem is with ``hdf5`` or ``adios``, and
@@ -1078,7 +1293,7 @@ procedure is:
.. code-block:: python
# Adios up to v1.10.0 does not build with HDF5 1.10
- # See: https://github.com/LLNL/spack/issues/1683
+ # See: https://github.com/spack/spack/issues/1683
depends_on('hdf5@:1.9', when='@:1.10.0')
depends_on('hdf5', when='@1.10.1:')
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index c4e51834a5..b06c6fd6fc 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -1,14 +1,14 @@
#!/bin/bash
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,6 +45,7 @@ parameters=(
SPACK_PREFIX
SPACK_ENV_PATH
SPACK_DEBUG_LOG_DIR
+ SPACK_DEBUG_LOG_ID
SPACK_COMPILER_SPEC
SPACK_CC_RPATH_ARG
SPACK_CXX_RPATH_ARG
@@ -58,7 +59,7 @@ parameters=(
# The default compiler flags are passed from these variables:
# SPACK_CFLAGS, SPACK_CXXFLAGS, SPACK_FCFLAGS, SPACK_FFLAGS,
# SPACK_LDFLAGS, SPACK_LDLIBS
-# Debug env var is optional; set to true for debug logging:
+# Debug env var is optional; set to "TRUE" for debug logging:
# SPACK_DEBUG
# Test command is used to unit test the compiler script.
# SPACK_TEST_COMMAND
@@ -98,25 +99,25 @@ case "$command" in
cpp)
mode=cpp
;;
- cc|c89|c99|gcc|clang|icc|pgcc|xlc)
+ cc|c89|c99|gcc|clang|icc|pgcc|xlc|xlc_r)
command="$SPACK_CC"
language="C"
comp="CC"
lang_flags=C
;;
- c++|CC|g++|clang++|icpc|pgc++|xlc++)
+ c++|CC|g++|clang++|icpc|pgc++|xlc++|xlc++_r)
command="$SPACK_CXX"
language="C++"
comp="CXX"
lang_flags=CXX
;;
- ftn|f90|fc|f95|gfortran|ifort|pgfortran|xlf90|nagfor)
+ ftn|f90|fc|f95|gfortran|flang|ifort|pgfortran|xlf90|xlf90_r|nagfor)
command="$SPACK_FC"
language="Fortran 90"
comp="FC"
lang_flags=F
;;
- f77|gfortran|ifort|pgfortran|xlf|nagfor|ftn)
+ f77|gfortran|flang|ifort|pgfortran|xlf|xlf_r|nagfor|ftn)
command="$SPACK_F77"
language="Fortran 77"
comp="F77"
@@ -133,7 +134,7 @@ esac
# If any of the arguments below are present, then the mode is vcheck.
# In vcheck mode, nothing is added in terms of extra search paths or
# libraries.
-if [[ -z $mode ]]; then
+if [[ -z $mode ]] || [[ $mode == ld ]]; then
for arg in "$@"; do
if [[ $arg == -v || $arg == -V || $arg == --version || $arg == -dumpversion ]]; then
mode=vcheck
@@ -218,7 +219,7 @@ fi
add_rpaths=true
if [[ ($mode == ld || $mode == ccld) && "$SPACK_SHORT_SPEC" =~ "darwin" ]]; then
for arg in "$@"; do
- if [[ ($arg == -r && $mode == ld) || ($arg == -Wl,-r && $mode == ccld) ]]; then
+ if [[ ($arg == -r && $mode == ld) || ($arg == -r && $mode == ccld) || ($arg == -Wl,-r && $mode == ccld) ]]; then
add_rpaths=false
break
fi
@@ -328,8 +329,10 @@ IFS=':' read -ra extra_rpaths <<< "$SPACK_COMPILER_EXTRA_RPATHS"
for extra_rpath in "${extra_rpaths[@]}"; do
if [[ $mode == ccld ]]; then
$add_rpaths && args=("$rpath$extra_rpath" "${args[@]}")
+ args=("-L$extra_rpath" "${args[@]}")
elif [[ $mode == ld ]]; then
$add_rpaths && args=("-rpath" "$extra_rpath" "${args[@]}")
+ args=("-L$extra_rpath" "${args[@]}")
fi
done
@@ -353,8 +356,8 @@ fi
# Write the input and output commands to debug logs if it's asked for.
#
if [[ $SPACK_DEBUG == TRUE ]]; then
- input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.in.log"
- output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_SHORT_SPEC.out.log"
+ input_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_DEBUG_LOG_ID.in.log"
+ output_log="$SPACK_DEBUG_LOG_DIR/spack-cc-$SPACK_DEBUG_LOG_ID.out.log"
echo "[$mode] $command $input_command" >> "$input_log"
echo "[$mode] ${full_command[@]}" >> "$output_log"
fi
diff --git a/lib/spack/env/clang/flang b/lib/spack/env/clang/flang
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/clang/flang
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/xl_r/xlc++_r b/lib/spack/env/xl_r/xlc++_r
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/xl_r/xlc++_r
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/xl_r/xlc_r b/lib/spack/env/xl_r/xlc_r
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/xl_r/xlc_r
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/xl_r/xlf90_r b/lib/spack/env/xl_r/xlf90_r
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/xl_r/xlf90_r
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/env/xl_r/xlf_r b/lib/spack/env/xl_r/xlf_r
new file mode 120000
index 0000000000..82c2b8e90a
--- /dev/null
+++ b/lib/spack/env/xl_r/xlf_r
@@ -0,0 +1 @@
+../cc \ No newline at end of file
diff --git a/lib/spack/external/__init__.py b/lib/spack/external/__init__.py
index 48fe4ec5ac..1dfdf7f72d 100644
--- a/lib/spack/external/__init__.py
+++ b/lib/spack/external/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,6 +33,8 @@ So far:
functools: Used for implementation of total_ordering.
+ jinja2: A modern and designer-friendly templating language for Python
+
jsonschema: An implementation of JSON Schema for Python.
ordereddict: We include our own version to be Python 2.6 compatible.
diff --git a/lib/spack/external/_pytest/pytester.py b/lib/spack/external/_pytest/pytester.py
index 17ff529a6c..d87c0a762a 100644
--- a/lib/spack/external/_pytest/pytester.py
+++ b/lib/spack/external/_pytest/pytester.py
@@ -551,7 +551,7 @@ class Testdir:
def _possibly_invalidate_import_caches(self):
# invalidate caches if we can (py33 and above)
try:
- import importlib
+ import importlib # nopyqver
except ImportError:
pass
else:
diff --git a/lib/spack/external/ctest_log_parser.py b/lib/spack/external/ctest_log_parser.py
new file mode 100644
index 0000000000..6ef9642d85
--- /dev/null
+++ b/lib/spack/external/ctest_log_parser.py
@@ -0,0 +1,313 @@
+# -----------------------------------------------------------------------------
+# CMake - Cross Platform Makefile Generator
+# Copyright 2000-2017 Kitware, Inc. and Contributors
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the name of Kitware, Inc. nor the names of Contributors
+# may be used to endorse or promote products derived from this
+# software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# -----------------------------------------------------------------------------
+#
+# The above copyright and license notice applies to distributions of
+# CMake in source and binary form. Third-party software packages supplied
+# with CMake under compatible licenses provide their own copyright notices
+# documented in corresponding subdirectories or source files.
+#
+# -----------------------------------------------------------------------------
+#
+# CMake was initially developed by Kitware with the following sponsorship:
+#
+# * National Library of Medicine at the National Institutes of Health
+# as part of the Insight Segmentation and Registration Toolkit (ITK).
+#
+# * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
+# Visualization Initiative.
+#
+# * National Alliance for Medical Image Computing (NAMIC) is funded by the
+# National Institutes of Health through the NIH Roadmap for Medical
+# Research, Grant U54 EB005149.
+#
+# * Kitware, Inc.
+# -----------------------------------------------------------------------------
+"""Functions to parse build logs and extract error messages.
+
+This is a python port of the regular expressions CTest uses to parse log
+files here:
+
+ https://github.com/Kitware/CMake/blob/master/Source/CTest/cmCTestBuildHandler.cxx
+
+This file takes the regexes verbatim from there and adds some parsing
+algorithms that duplicate the way CTest scrapes log files. To keep this
+up to date with CTest, just make sure the ``*_matches`` and
+``*_exceptions`` lists are kept up to date with CTest's build handler.
+"""
+import re
+from six import StringIO
+from six import string_types
+
+
+error_matches = [
+ "^[Bb]us [Ee]rror",
+ "^[Ss]egmentation [Vv]iolation",
+ "^[Ss]egmentation [Ff]ault",
+ ":.*[Pp]ermission [Dd]enied",
+ "([^ :]+):([0-9]+): ([^ \\t])",
+ "([^:]+): error[ \\t]*[0-9]+[ \\t]*:",
+ "^Error ([0-9]+):",
+ "^Fatal",
+ "^Error: ",
+ "^Error ",
+ "[0-9] ERROR: ",
+ "^\"[^\"]+\", line [0-9]+: [^Ww]",
+ "^cc[^C]*CC: ERROR File = ([^,]+), Line = ([0-9]+)",
+ "^ld([^:])*:([ \\t])*ERROR([^:])*:",
+ "^ild:([ \\t])*\\(undefined symbol\\)",
+ "([^ :]+) : (error|fatal error|catastrophic error)",
+ "([^:]+): (Error:|error|undefined reference|multiply defined)",
+ "([^:]+)\\(([^\\)]+)\\) ?: (error|fatal error|catastrophic error)",
+ "^fatal error C[0-9]+:",
+ ": syntax error ",
+ "^collect2: ld returned 1 exit status",
+ "ld terminated with signal",
+ "Unsatisfied symbol",
+ "^Unresolved:",
+ "Undefined symbol",
+ "^Undefined[ \\t]+first referenced",
+ "^CMake Error.*:",
+ ":[ \\t]cannot find",
+ ":[ \\t]can't find",
+ ": \\*\\*\\* No rule to make target [`'].*\\'. Stop",
+ ": \\*\\*\\* No targets specified and no makefile found",
+ ": Invalid loader fixup for symbol",
+ ": Invalid fixups exist",
+ ": Can't find library for",
+ ": internal link edit command failed",
+ ": Unrecognized option [`'].*\\'",
+ "\", line [0-9]+\\.[0-9]+: [0-9]+-[0-9]+ \\([^WI]\\)",
+ "ld: 0706-006 Cannot find or open library file: -l ",
+ "ild: \\(argument error\\) can't find library argument ::",
+ "^could not be found and will not be loaded.",
+ "s:616 string too big",
+ "make: Fatal error: ",
+ "ld: 0711-993 Error occurred while writing to the output file:",
+ "ld: fatal: ",
+ "final link failed:",
+ "make: \\*\\*\\*.*Error",
+ "make\\[.*\\]: \\*\\*\\*.*Error",
+ "\\*\\*\\* Error code",
+ "nternal error:",
+ "Makefile:[0-9]+: \\*\\*\\* .* Stop\\.",
+ ": No such file or directory",
+ ": Invalid argument",
+ "^The project cannot be built\\.",
+ "^\\[ERROR\\]",
+ "^Command .* failed with exit code",
+]
+
+error_exceptions = [
+ "instantiated from ",
+ "candidates are:",
+ ": warning",
+ ": \\(Warning\\)",
+ ": note",
+ "Note:",
+ "makefile:",
+ "Makefile:",
+ ":[ \\t]+Where:",
+ "([^ :]+):([0-9]+): Warning",
+ "------ Build started: .* ------",
+]
+
+#: Regexes to match file/line numbers in error/warning messages
+warning_matches = [
+ "([^ :]+):([0-9]+): warning:",
+ "([^ :]+):([0-9]+): note:",
+ "^cc[^C]*CC: WARNING File = ([^,]+), Line = ([0-9]+)",
+ "^ld([^:])*:([ \\t])*WARNING([^:])*:",
+ "([^:]+): warning ([0-9]+):",
+ "^\"[^\"]+\", line [0-9]+: [Ww](arning|arnung)",
+ "([^:]+): warning[ \\t]*[0-9]+[ \\t]*:",
+ "^(Warning|Warnung) ([0-9]+):",
+ "^(Warning|Warnung)[ :]",
+ "WARNING: ",
+ "([^ :]+) : warning",
+ "([^:]+): warning",
+ "\", line [0-9]+\\.[0-9]+: [0-9]+-[0-9]+ \\([WI]\\)",
+ "^cxx: Warning:",
+ ".*file: .* has no symbols",
+ "([^ :]+):([0-9]+): (Warning|Warnung)",
+ "\\([0-9]*\\): remark #[0-9]*",
+ "\".*\", line [0-9]+: remark\\([0-9]*\\):",
+ "cc-[0-9]* CC: REMARK File = .*, Line = [0-9]*",
+ "^CMake Warning.*:",
+ "^\\[WARNING\\]",
+]
+
+#: Regexes to match file/line numbers in error/warning messages
+warning_exceptions = [
+ "/usr/.*/X11/Xlib\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration",
+ "/usr/.*/X11/Xutil\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration",
+ "/usr/.*/X11/XResource\\.h:[0-9]+: war.*: ANSI C\\+\\+ forbids declaration",
+ "WARNING 84 :",
+ "WARNING 47 :",
+ "makefile:",
+ "Makefile:",
+ "warning: Clock skew detected. Your build may be incomplete.",
+ "/usr/openwin/include/GL/[^:]+:",
+ "bind_at_load",
+ "XrmQGetResource",
+ "IceFlush",
+ "warning LNK4089: all references to [^ \\t]+ discarded by .OPT:REF",
+ "ld32: WARNING 85: definition of dataKey in",
+ "cc: warning 422: Unknown option \"\\+b",
+ "_with_warning_C",
+]
+
+#: Regexes to match file/line numbers in error/warning messages
+file_line_matches = [
+ "^Warning W[0-9]+ ([a-zA-Z.\\:/0-9_+ ~-]+) ([0-9]+):",
+ "^([a-zA-Z./0-9_+ ~-]+):([0-9]+):",
+ "^([a-zA-Z.\\:/0-9_+ ~-]+)\\(([0-9]+)\\)",
+ "^[0-9]+>([a-zA-Z.\\:/0-9_+ ~-]+)\\(([0-9]+)\\)",
+ "^([a-zA-Z./0-9_+ ~-]+)\\(([0-9]+)\\)",
+ "\"([a-zA-Z./0-9_+ ~-]+)\", line ([0-9]+)",
+ "File = ([a-zA-Z./0-9_+ ~-]+), Line = ([0-9]+)",
+]
+
+
+class LogEvent(object):
+ """Class representing interesting events (e.g., errors) in a build log."""
+ def __init__(self, text, line_no,
+ source_file=None, source_line_no=None,
+ pre_context=None, post_context=None):
+ self.text = text
+ self.line_no = line_no
+ self.source_file = source_file,
+ self.source_line_no = source_line_no,
+ self.pre_context = pre_context if pre_context is not None else []
+ self.post_context = post_context if post_context is not None else []
+ self.repeat_count = 0
+
+ @property
+ def start(self):
+ """First line in the log with text for the event or its context."""
+ return self.line_no - len(self.pre_context)
+
+ @property
+ def end(self):
+ """Last line in the log with text for event or its context."""
+ return self.line_no + len(self.post_context) + 1
+
+ def __getitem__(self, line_no):
+ """Index event text and context by actual line number in file."""
+ if line_no == self.line_no:
+ return self.text
+ elif line_no < self.line_no:
+ return self.pre_context[line_no - self.line_no]
+ elif line_no > self.line_no:
+ return self.post_context[line_no - self.line_no - 1]
+
+ def __str__(self):
+ """Returns event lines and context."""
+ out = StringIO()
+ for i in range(self.start, self.end):
+ if i == self.line_no:
+ out.write(' >> %-6d%s' % (i, self[i]))
+ else:
+ out.write(' %-6d%s' % (i, self[i]))
+ return out.getvalue()
+
+
+class BuildError(LogEvent):
+ """LogEvent subclass for build errors."""
+
+
+class BuildWarning(LogEvent):
+ """LogEvent subclass for build warnings."""
+
+
+def _match(matches, exceptions, line):
+ """True if line matches a regex in matches and none in exceptions."""
+ return (any(m.search(line) for m in matches) and
+ not any(e.search(line) for e in exceptions))
+
+
+class CTestLogParser(object):
+ """Log file parser that extracts errors and warnings."""
+ def __init__(self):
+ def compile(regex_array):
+ return [re.compile(regex) for regex in regex_array]
+
+ self.error_matches = compile(error_matches)
+ self.error_exceptions = compile(error_exceptions)
+ self.warning_matches = compile(warning_matches)
+ self.warning_exceptions = compile(warning_exceptions)
+ self.file_line_matches = compile(file_line_matches)
+
+ def parse(self, stream, context=6):
+ """Parse a log file by searching each line for errors and warnings.
+
+ Args:
+ stream (str or file-like): filename or stream to read from
+ context (int): lines of context to extract around each log event
+
+ Returns:
+ (tuple): two lists containig ``BuildError`` and
+ ``BuildWarning`` objects.
+ """
+ if isinstance(stream, string_types):
+ with open(stream) as f:
+ return self.parse(f)
+
+ lines = [line for line in stream]
+
+ errors = []
+ warnings = []
+ for i, line in enumerate(lines):
+ # use CTest's regular expressions to scrape the log for events
+ if _match(self.error_matches, self.error_exceptions, line):
+ event = BuildError(line.strip(), i + 1)
+ errors.append(event)
+ elif _match(self.warning_matches, self.warning_exceptions, line):
+ event = BuildWarning(line.strip(), i + 1)
+ warnings.append(event)
+ else:
+ continue
+
+ # get file/line number for each event, if possible
+ for flm in self.file_line_matches:
+ match = flm.search(line)
+ if match:
+ event.source_file, source_line_no = match.groups()
+
+ # add log context, as well
+ event.pre_context = [
+ l.rstrip() for l in lines[i - context:i]]
+ event.post_context = [
+ l.rstrip() for l in lines[i + 1:i + context + 1]]
+
+ return errors, warnings
diff --git a/lib/spack/external/distro.py b/lib/spack/external/distro.py
index ca25339ec9..c4905c25a5 100644
--- a/lib/spack/external/distro.py
+++ b/lib/spack/external/distro.py
@@ -993,13 +993,18 @@ class LinuxDistribution(object):
continue
match = _DISTRO_RELEASE_BASENAME_PATTERN.match(basename)
if match:
- filepath = os.path.join(_UNIXCONFDIR, basename)
- distro_info = self._parse_distro_release_file(filepath)
- if 'name' in distro_info:
- # The name is always present if the pattern matches
- self.distro_release_file = filepath
- distro_info['id'] = match.group(1)
- return distro_info
+ try:
+ filepath = os.path.join(_UNIXCONFDIR, basename)
+ distro_info = self._parse_distro_release_file(filepath)
+ if 'name' in distro_info:
+ # The name is always present if the pattern matches
+ self.distro_release_file = filepath
+ distro_info['id'] = match.group(1)
+ return distro_info
+ except IOError:
+ # We found a file we do not have permission to read
+ # Continue checking candidate files for distro file.
+ continue
return {}
def _parse_distro_release_file(self, filepath):
diff --git a/lib/spack/external/functools_backport.py b/lib/spack/external/functools_backport.py
index 19f0903c82..b3c913ffd7 100644
--- a/lib/spack/external/functools_backport.py
+++ b/lib/spack/external/functools_backport.py
@@ -28,3 +28,20 @@ def total_ordering(cls):
opfunc.__doc__ = getattr(int, opname).__doc__
setattr(cls, opname, opfunc)
return cls
+
+
+@total_ordering
+class reverse_order(object):
+ """Helper for creating key functions.
+
+ This is a wrapper that inverts the sense of the natural
+ comparisons on the object.
+ """
+ def __init__(self, value):
+ self.value = value
+
+ def __eq__(self, other):
+ return other.value == self.value
+
+ def __lt__(self, other):
+ return other.value < self.value
diff --git a/lib/spack/external/jinja2/AUTHORS b/lib/spack/external/jinja2/AUTHORS
new file mode 100644
index 0000000000..943f625f87
--- /dev/null
+++ b/lib/spack/external/jinja2/AUTHORS
@@ -0,0 +1,33 @@
+Jinja is written and maintained by the Jinja Team and various
+contributors:
+
+Lead Developer:
+
+- Armin Ronacher <armin.ronacher@active-4.com>
+
+Developers:
+
+- Christoph Hack
+- Georg Brandl
+
+Contributors:
+
+- Bryan McLemore
+- Mickaël Guérin <kael@crocobox.org>
+- Cameron Knight
+- Lawrence Journal-World.
+- David Cramer
+
+Patches and suggestions:
+
+- Ronny Pfannschmidt
+- Axel Böhm
+- Alexey Melchakov
+- Bryan McLemore
+- Clovis Fabricio (nosklo)
+- Cameron Knight
+- Peter van Dijk (Habbie)
+- Stefan Ebner
+- Rene Leonhardt
+- Thomas Waldmann
+- Cory Benfield (Lukasa)
diff --git a/lib/spack/docs/exts/sphinxcontrib/LICENSE b/lib/spack/external/jinja2/LICENSE
index 43b87a5992..10145a2643 100644
--- a/lib/spack/docs/exts/sphinxcontrib/LICENSE
+++ b/lib/spack/external/jinja2/LICENSE
@@ -1,25 +1,31 @@
-Copyright (c) 2010, 2011, 2012 Sebastian Wiesner <lunaryorn@googlemail.com>
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.
+
+Some rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+ * The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/lib/spack/external/jinja2/README.rst b/lib/spack/external/jinja2/README.rst
new file mode 100644
index 0000000000..c36b9426d6
--- /dev/null
+++ b/lib/spack/external/jinja2/README.rst
@@ -0,0 +1,51 @@
+Jinja2
+~~~~~~
+
+Jinja2 is a template engine written in pure Python. It provides a
+`Django`_ inspired non-XML syntax but supports inline expressions and
+an optional `sandboxed`_ environment.
+
+Nutshell
+--------
+
+Here a small example of a Jinja template:
+
+.. code-block:: jinja
+
+ {% extends 'base.html' %}
+ {% block title %}Memberlist{% endblock %}
+ {% block content %}
+ <ul>
+ {% for user in users %}
+ <li><a href="{{ user.url }}">{{ user.username }}</a></li>
+ {% endfor %}
+ </ul>
+ {% endblock %}
+
+Philosophy
+----------
+
+Application logic is for the controller, but don't make the template designer's
+life difficult by restricting functionality too much.
+
+For more information visit the new `Jinja2 webpage`_ and `documentation`_.
+
+The `Jinja2 tip`_ is installable via ``pip`` with ``pip install
+https://github.com/pallets/jinja/zipball/master``.
+
+.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
+.. _Django: http://www.djangoproject.com/
+.. _Jinja2 webpage: http://jinja.pocoo.org/
+.. _documentation: http://jinja.pocoo.org/docs/
+.. _Jinja2 tip: http://jinja.pocoo.org/docs/intro/#as-a-python-egg-via-easy-install
+
+Builds
+------
+
++---------------------+------------------------------------------------------------------------------+
+| ``master`` | .. image:: https://travis-ci.org/pallets/jinja.svg?branch=master |
+| | :target: https://travis-ci.org/pallets/jinja |
++---------------------+------------------------------------------------------------------------------+
+| ``2.9-maintenance`` | .. image:: https://travis-ci.org/pallets/jinja.svg?branch=2.9-maintenance |
+| | :target: https://travis-ci.org/pallets/jinja |
++---------------------+------------------------------------------------------------------------------+
diff --git a/lib/spack/external/jinja2/__init__.py b/lib/spack/external/jinja2/__init__.py
new file mode 100644
index 0000000000..4b0b7a8d7f
--- /dev/null
+++ b/lib/spack/external/jinja2/__init__.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2
+ ~~~~~~
+
+ Jinja2 is a template engine written in pure Python. It provides a
+ Django inspired non-XML syntax but supports inline expressions and
+ an optional sandboxed environment.
+
+ Nutshell
+ --------
+
+ Here a small example of a Jinja2 template::
+
+ {% extends 'base.html' %}
+ {% block title %}Memberlist{% endblock %}
+ {% block content %}
+ <ul>
+ {% for user in users %}
+ <li><a href="{{ user.url }}">{{ user.username }}</a></li>
+ {% endfor %}
+ </ul>
+ {% endblock %}
+
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+__docformat__ = 'restructuredtext en'
+__version__ = '2.9.6'
+
+# high level interface
+from jinja2.environment import Environment, Template
+
+# loaders
+from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \
+ DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \
+ ModuleLoader
+
+# bytecode caches
+from jinja2.bccache import BytecodeCache, FileSystemBytecodeCache, \
+ MemcachedBytecodeCache
+
+# undefined types
+from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined, \
+ make_logging_undefined
+
+# exceptions
+from jinja2.exceptions import TemplateError, UndefinedError, \
+ TemplateNotFound, TemplatesNotFound, TemplateSyntaxError, \
+ TemplateAssertionError
+
+# decorators and public utilities
+from jinja2.filters import environmentfilter, contextfilter, \
+ evalcontextfilter
+from jinja2.utils import Markup, escape, clear_caches, \
+ environmentfunction, evalcontextfunction, contextfunction, \
+ is_undefined, select_autoescape
+
+__all__ = [
+ 'Environment', 'Template', 'BaseLoader', 'FileSystemLoader',
+ 'PackageLoader', 'DictLoader', 'FunctionLoader', 'PrefixLoader',
+ 'ChoiceLoader', 'BytecodeCache', 'FileSystemBytecodeCache',
+ 'MemcachedBytecodeCache', 'Undefined', 'DebugUndefined',
+ 'StrictUndefined', 'TemplateError', 'UndefinedError', 'TemplateNotFound',
+ 'TemplatesNotFound', 'TemplateSyntaxError', 'TemplateAssertionError',
+ 'ModuleLoader', 'environmentfilter', 'contextfilter', 'Markup', 'escape',
+ 'environmentfunction', 'contextfunction', 'clear_caches', 'is_undefined',
+ 'evalcontextfilter', 'evalcontextfunction', 'make_logging_undefined',
+ 'select_autoescape',
+]
+
+
+def _patch_async():
+ from jinja2.utils import have_async_gen
+ if have_async_gen:
+ from jinja2.asyncsupport import patch_all
+ patch_all()
+
+
+_patch_async()
+del _patch_async
diff --git a/lib/spack/external/jinja2/_compat.py b/lib/spack/external/jinja2/_compat.py
new file mode 100644
index 0000000000..61d85301a4
--- /dev/null
+++ b/lib/spack/external/jinja2/_compat.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2._compat
+ ~~~~~~~~~~~~~~
+
+ Some py2/py3 compatibility support based on a stripped down
+ version of six so we don't have to depend on a specific version
+ of it.
+
+ :copyright: Copyright 2013 by the Jinja team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+import sys
+
+PY2 = sys.version_info[0] == 2
+PYPY = hasattr(sys, 'pypy_translation_info')
+_identity = lambda x: x
+
+
+if not PY2:
+ unichr = chr
+ range_type = range
+ text_type = str
+ string_types = (str,)
+ integer_types = (int,)
+
+ iterkeys = lambda d: iter(d.keys())
+ itervalues = lambda d: iter(d.values())
+ iteritems = lambda d: iter(d.items())
+
+ import pickle
+ from io import BytesIO, StringIO
+ NativeStringIO = StringIO
+
+ def reraise(tp, value, tb=None):
+ if value.__traceback__ is not tb:
+ raise value.with_traceback(tb)
+ raise value
+
+ ifilter = filter
+ imap = map
+ izip = zip
+ intern = sys.intern
+
+ implements_iterator = _identity
+ implements_to_string = _identity
+ encode_filename = _identity
+
+else:
+ unichr = unichr
+ text_type = unicode
+ range_type = xrange
+ string_types = (str, unicode)
+ integer_types = (int, long)
+
+ iterkeys = lambda d: d.iterkeys()
+ itervalues = lambda d: d.itervalues()
+ iteritems = lambda d: d.iteritems()
+
+ import cPickle as pickle
+ from cStringIO import StringIO as BytesIO, StringIO
+ NativeStringIO = BytesIO
+
+ exec('def reraise(tp, value, tb=None):\n raise tp, value, tb')
+
+ from itertools import imap, izip, ifilter
+ intern = intern
+
+ def implements_iterator(cls):
+ cls.next = cls.__next__
+ del cls.__next__
+ return cls
+
+ def implements_to_string(cls):
+ cls.__unicode__ = cls.__str__
+ cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
+ return cls
+
+ def encode_filename(filename):
+ if isinstance(filename, unicode):
+ return filename.encode('utf-8')
+ return filename
+
+
+def with_metaclass(meta, *bases):
+ """Create a base class with a metaclass."""
+ # This requires a bit of explanation: the basic idea is to make a
+ # dummy metaclass for one level of class instantiation that replaces
+ # itself with the actual metaclass.
+ class metaclass(type):
+ def __new__(cls, name, this_bases, d):
+ return meta(name, bases, d)
+ return type.__new__(metaclass, 'temporary_class', (), {})
+
+
+try:
+ from urllib.parse import quote_from_bytes as url_quote
+except ImportError:
+ from urllib import quote as url_quote
diff --git a/lib/spack/external/jinja2/_stringdefs.py b/lib/spack/external/jinja2/_stringdefs.py
new file mode 100644
index 0000000000..a5689f6695
--- /dev/null
+++ b/lib/spack/external/jinja2/_stringdefs.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2._stringdefs
+ ~~~~~~~~~~~~~~~~~~
+
+ Strings of all Unicode characters of a certain category.
+ Used for matching in Unicode-aware languages. Run to regenerate.
+
+ Inspired by chartypes_create.py from the MoinMoin project, original
+ implementation from Pygments.
+
+ :copyright: Copyright 2006-2017 by the Jinja team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+# Generated code start
+
+xid_start = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\xaa\xb5\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d\u013e\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e\u017f\u0180\u0181\u0182\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018a\u018b\u018c\u018d\u018e\u018f\u0190\u0191\u0192\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019a\u019b\u019c\u019d\u019e\u019f\u01a0\u01a1\u01a2\u01a3\u01a4\u01a5\u01a6\u01a7\u01a8\u01a9\u01aa\u01ab\u01ac\u01ad\u01ae\u01af\u01b0\u01b1\u01b2\u01b3\u01b4\u01b5\u01b6\u01b7\u01b8\u01b9\u01ba\u01bb\u01bc\u01bd\u01be\u01bf\u01c0\u01c1\u01c2\u01c3\u01cd\u01ce\u01cf\u01d0\u01d1\u01d2\u01d3\u01d4\u01d5\u01d6\u01d7\u01d8\u01d9\u01da\u01db\u01dc\u01dd\u01de\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01e6\u01e7\u01e8\u01e9\u01ea\u01eb\u01ec\u01ed\u01ee\u01ef\u01f0\u01f4\u01f5\u01f6\u01f7\u01f8\u01f9\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\u0200\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208\u0209\u020a\u020b\u020c\u020d\u020e\u020f\u0210\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218\u0219\u021a\u021b\u021c\u021d\u021e\u021f\u0220\u0221\u0222\u0223\u0224\u0225\u0226\u0227\u0228\u0229\u022a\u022b\u022c\u022d\u022e\u022f\u0230\u0231\u0232\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023a\u023b\u023c\u023d\u023e\u023f\u0240\u0241\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\u02c0\u02c1\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02e0\u02e1\u02e2\u02e3\u02e4\u02ec\u02ee\u0370\u0371\u0372\u0373\u0374\u0376\u0377\u037b\u037c\u037d\u037f\u0386\u0388\u0389\u038a\u038c\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03cf\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u03da\u03db\u03dc\u03dd\u03de\u03df\u03e0\u03e1\u03e2\u03e3\u03e4\u03e5\u03e6\u03e7\u03e8\u03e9\u03ea\u03eb\u03ec\u03ed\u03ee\u03ef\u03f0\u03f1\u03f2\u03f3\u03f4\u03f5\u03f7\u03f8\u03f9\u03fa\u03fb\u03fc\u03fd\u03fe\u03ff\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0460\u0461\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469\u046a\u046b\u046c\u046d\u046e\u046f\u0470\u0471\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479\u047a\u047b\u047c\u047d\u047e\u047f\u0480\u0481\u048a\u048b\u048c\u048d\u048e\u048f\u0490\u0491\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499\u049a\u049b\u049c\u049d\u049e\u049f\u04a0\u04a1\u04a2\u04a3\u04a4\u04a5\u04a6\u04a7\u04a8\u04a9\u04aa\u04ab\u04ac\u04ad\u04ae\u04af\u04b0\u04b1\u04b2\u04b3\u04b4\u04b5\u04b6\u04b7\u04b8\u04b9\u04ba\u04bb\u04bc\u04bd\u04be\u04bf\u04c0\u04c1\u04c2\u04c3\u04c4\u04c5\u04c6\u04c7\u04c8\u04c9\u04ca\u04cb\u04cc\u04cd\u04ce\u04cf\u04d0\u04d1\u04d2\u04d3\u04d4\u04d5\u04d6\u04d7\u04d8\u04d9\u04da\u04db\u04dc\u04dd\u04de\u04df\u04e0\u04e1\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u04f4\u04f5\u04f6\u04f7\u04f8\u04f9\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\u0500\u0501\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509\u050a\u050b\u050c\u050d\u050e\u050f\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0559\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u0620\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u063b\u063c\u063d\u063e\u063f\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u066e\u066f\u0671\u0672\u0673\u0674\u0679\u067a\u067b\u067c\u067d\u067e\u067f\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068a\u068b\u068c\u068d\u068e\u068f\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069a\u069b\u069c\u069d\u069e\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a5\u06a6\u06a7\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06b9\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06c9\u06ca\u06cb\u06cc\u06cd\u06ce\u06cf\u06d0\u06d1\u06d2\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa\u06fb\u06fc\u06ff\u0710\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071d\u071e\u071f\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u074d\u074e\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u076e\u076f\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07b1\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07f4\u07f5\u07fa\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u081a\u0824\u0828\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b6\u08b7\u08b8\u08b9\u08ba\u08bb\u08bc\u08bd\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093d\u0950\u0960\u0961\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\u097f\u0980\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bd\u09ce\u09e0\u09e1\u09f0\u09f1\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0f\u0a10\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a2c\u0a2d\u0a2e\u0a2f\u0a30\u0a32\u0a35\u0a38\u0a39\u0a5c\u0a72\u0a73\u0a74\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab3\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b32\u0b33\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3d\u0b5f\u0b60\u0b61\u0b71\u0b83\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0ba9\u0baa\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0bd0\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0c34\u0c35\u0c36\u0c37\u0c38\u0c39\u0c3d\u0c58\u0c59\u0c5a\u0c60\u0c61\u0c80\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d29\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d2f\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d3a\u0d3d\u0d4e\u0d54\u0d55\u0d56\u0d5f\u0d60\u0d61\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e32\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eaf\u0eb0\u0eb2\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0ec6\u0ede\u0edf\u0f00\u0f40\u0f41\u0f42\u0f44\u0f45\u0f46\u0f47\u0f49\u0f4a\u0f4b\u0f4c\u0f4e\u0f4f\u0f50\u0f51\u0f53\u0f54\u0f55\u0f56\u0f58\u0f59\u0f5a\u0f5b\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f6a\u0f6b\u0f6c\u0f88\u0f89\u0f8a\u0f8b\u0f8c\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u100d\u100e\u100f\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101a\u101b\u101c\u101d\u101e\u101f\u1020\u1021\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029\u102a\u103f\u1050\u1051\u1052\u1053\u1054\u1055\u105a\u105b\u105c\u105d\u1061\u1065\u1066\u106e\u106f\u1070\u1075\u1076\u1077\u1078\u1079\u107a\u107b\u107c\u107d\u107e\u107f\u1080\u1081\u108e\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u10c7\u10cd\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\u10f7\u10f8\u10f9\u10fa\u10fc\u10fd\u10fe\u10ff\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115a\u115b\u115c\u115d\u115e\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u119f\u11a0\u11a1\u11a2\u11a3\u11a4\u11a5\u11a6\u11a7\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\u11ca\u11cb\u11cc\u11cd\u11ce\u11cf\u11d0\u11d1\u11d2\u11d3\u11d4\u11d5\u11d6\u11d7\u11d8\u11d9\u11da\u11db\u11dc\u11dd\u11de\u11df\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u11f2\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135a\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138a\u138b\u138c\u138d\u138e\u138f\u13a0\u13a1\u13a2\u13a3\u13a4\u13a5\u13a6\u13a7\u13a8\u13a9\u13aa\u13ab\u13ac\u13ad\u13ae\u13af\u13b0\u13b1\u13b2\u13b3\u13b4\u13b5\u13b6\u13b7\u13b8\u13b9\u13ba\u13bb\u13bc\u13bd\u13be\u13bf\u13c0\u13c1\u13c2\u13c3\u13c4\u13c5\u13c6\u13c7\u13c8\u13c9\u13ca\u13cb\u13cc\u13cd\u13ce\u13cf\u13d0\u13d1\u13d2\u13d3\u13d4\u13d5\u13d6\u13d7\u13d8\u13d9\u13da\u13db\u13dc\u13dd\u13de\u13df\u13e0\u13e1\u13e2\u13e3\u13e4\u13e5\u13e6\u13e7\u13e8\u13e9\u13ea\u13eb\u13ec\u13ed\u13ee\u13ef\u13f0\u13f1\u13f2\u13f3\u13f4\u13f5\u13f8\u13f9\u13fa\u13fb\u13fc\u13fd\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157c\u157d\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u166f\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u16ee\u16ef\u16f0\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17d7\u17dc\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182a\u182b\u182c\u182d\u182e\u182f\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183a\u183b\u183c\u183d\u183e\u183f\u1840\u1841\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849\u184a\u184b\u184c\u184d\u184e\u184f\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185a\u185b\u185c\u185d\u185e\u185f\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186a\u186b\u186c\u186d\u186e\u186f\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1887\u1888\u1889\u188a\u188b\u188c\u188d\u188e\u188f\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189a\u189b\u189c\u189d\u189e\u189f\u18a0\u18a1\u18a2\u18a3\u18a4\u18a5\u18a6\u18a7\u18a8\u18aa\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190a\u190b\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u191d\u191e\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19aa\u19ab\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u19c8\u19c9\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a53\u1a54\u1aa7\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b23\u1b24\u1b25\u1b26\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b30\u1b31\u1b32\u1b33\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1bae\u1baf\u1bba\u1bbb\u1bbc\u1bbd\u1bbe\u1bbf\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c4d\u1c4e\u1c4f\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1ce9\u1cea\u1ceb\u1cec\u1cee\u1cef\u1cf0\u1cf1\u1cf5\u1cf6\u1d00\u1d01\u1d02\u1d03\u1d04\u1d05\u1d06\u1d07\u1d08\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u1d12\u1d13\u1d14\u1d15\u1d16\u1d17\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d1d\u1d1e\u1d1f\u1d20\u1d21\u1d22\u1d23\u1d24\u1d25\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d2c\u1d2d\u1d2e\u1d2f\u1d30\u1d31\u1d32\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3b\u1d3c\u1d3d\u1d3e\u1d3f\u1d40\u1d41\u1d42\u1d43\u1d44\u1d45\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d54\u1d55\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5c\u1d5d\u1d5e\u1d5f\u1d60\u1d61\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d6b\u1d6c\u1d6d\u1d6e\u1d6f\u1d70\u1d71\u1d72\u1d73\u1d74\u1d75\u1d76\u1d77\u1d78\u1d79\u1d7a\u1d7b\u1d7c\u1d7d\u1d7e\u1d7f\u1d80\u1d81\u1d82\u1d83\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a\u1d8b\u1d8c\u1d8d\u1d8e\u1d8f\u1d90\u1d91\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a\u1d9b\u1d9c\u1d9d\u1d9e\u1d9f\u1da0\u1da1\u1da2\u1da3\u1da4\u1da5\u1da6\u1da7\u1da8\u1da9\u1daa\u1dab\u1dac\u1dad\u1dae\u1daf\u1db0\u1db1\u1db2\u1db3\u1db4\u1db5\u1db6\u1db7\u1db8\u1db9\u1dba\u1dbb\u1dbc\u1dbd\u1dbe\u1dbf\u1e00\u1e01\u1e02\u1e03\u1e04\u1e05\u1e06\u1e07\u1e08\u1e09\u1e0a\u1e0b\u1e0c\u1e0d\u1e0e\u1e0f\u1e10\u1e11\u1e12\u1e13\u1e14\u1e15\u1e16\u1e17\u1e18\u1e19\u1e1a\u1e1b\u1e1c\u1e1d\u1e1e\u1e1f\u1e20\u1e21\u1e22\u1e23\u1e24\u1e25\u1e26\u1e27\u1e28\u1e29\u1e2a\u1e2b\u1e2c\u1e2d\u1e2e\u1e2f\u1e30\u1e31\u1e32\u1e33\u1e34\u1e35\u1e36\u1e37\u1e38\u1e39\u1e3a\u1e3b\u1e3c\u1e3d\u1e3e\u1e3f\u1e40\u1e41\u1e42\u1e43\u1e44\u1e45\u1e46\u1e47\u1e48\u1e49\u1e4a\u1e4b\u1e4c\u1e4d\u1e4e\u1e4f\u1e50\u1e51\u1e52\u1e53\u1e54\u1e55\u1e56\u1e57\u1e58\u1e59\u1e5a\u1e5b\u1e5c\u1e5d\u1e5e\u1e5f\u1e60\u1e61\u1e62\u1e63\u1e64\u1e65\u1e66\u1e67\u1e68\u1e69\u1e6a\u1e6b\u1e6c\u1e6d\u1e6e\u1e6f\u1e70\u1e71\u1e72\u1e73\u1e74\u1e75\u1e76\u1e77\u1e78\u1e79\u1e7a\u1e7b\u1e7c\u1e7d\u1e7e\u1e7f\u1e80\u1e81\u1e82\u1e83\u1e84\u1e85\u1e86\u1e87\u1e88\u1e89\u1e8a\u1e8b\u1e8c\u1e8d\u1e8e\u1e8f\u1e90\u1e91\u1e92\u1e93\u1e94\u1e95\u1e96\u1e97\u1e98\u1e99\u1e9b\u1e9c\u1e9d\u1e9e\u1e9f\u1ea0\u1ea1\u1ea2\u1ea3\u1ea4\u1ea5\u1ea6\u1ea7\u1ea8\u1ea9\u1eaa\u1eab\u1eac\u1ead\u1eae\u1eaf\u1eb0\u1eb1\u1eb2\u1eb3\u1eb4\u1eb5\u1eb6\u1eb7\u1eb8\u1eb9\u1eba\u1ebb\u1ebc\u1ebd\u1ebe\u1ebf\u1ec0\u1ec1\u1ec2\u1ec3\u1ec4\u1ec5\u1ec6\u1ec7\u1ec8\u1ec9\u1eca\u1ecb\u1ecc\u1ecd\u1ece\u1ecf\u1ed0\u1ed1\u1ed2\u1ed3\u1ed4\u1ed5\u1ed6\u1ed7\u1ed8\u1ed9\u1eda\u1edb\u1edc\u1edd\u1ede\u1edf\u1ee0\u1ee1\u1ee2\u1ee3\u1ee4\u1ee5\u1ee6\u1ee7\u1ee8\u1ee9\u1eea\u1eeb\u1eec\u1eed\u1eee\u1eef\u1ef0\u1ef1\u1ef2\u1ef3\u1ef4\u1ef5\u1ef6\u1ef7\u1ef8\u1ef9\u1efa\u1efb\u1efc\u1efd\u1efe\u1eff\u1f00\u1f01\u1f02\u1f03\u1f04\u1f05\u1f06\u1f07\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f10\u1f11\u1f12\u1f13\u1f14\u1f15\u1f18\u1f19\u1f1a\u1f1b\u1f1c\u1f1d\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u1f27\u1f28\u1f29\u1f2a\u1f2b\u1f2c\u1f2d\u1f2e\u1f2f\u1f30\u1f31\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f38\u1f39\u1f3a\u1f3b\u1f3c\u1f3d\u1f3e\u1f3f\u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f59\u1f5b\u1f5d\u1f5f\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f80\u1f81\u1f82\u1f83\u1f84\u1f85\u1f86\u1f87\u1f88\u1f89\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u1f90\u1f91\u1f92\u1f93\u1f94\u1f95\u1f96\u1f97\u1f98\u1f99\u1f9a\u1f9b\u1f9c\u1f9d\u1f9e\u1f9f\u1fa0\u1fa1\u1fa2\u1fa3\u1fa4\u1fa5\u1fa6\u1fa7\u1fa8\u1fa9\u1faa\u1fab\u1fac\u1fad\u1fae\u1faf\u1fb0\u1fb1\u1fb2\u1fb3\u1fb4\u1fb6\u1fb7\u1fb8\u1fb9\u1fba\u1fbb\u1fbc\u1fbe\u1fc2\u1fc3\u1fc4\u1fc6\u1fc7\u1fc8\u1fc9\u1fca\u1fcb\u1fcc\u1fd0\u1fd1\u1fd2\u1fd3\u1fd6\u1fd7\u1fd8\u1fd9\u1fda\u1fdb\u1fe0\u1fe1\u1fe2\u1fe3\u1fe4\u1fe5\u1fe6\u1fe7\u1fe8\u1fe9\u1fea\u1feb\u1fec\u1ff2\u1ff3\u1ff4\u1ff6\u1ff7\u1ff8\u1ff9\u1ffa\u1ffb\u1ffc\u2071\u207f\u2090\u2091\u2092\u2093\u2094\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u2102\u2107\u210a\u210b\u210c\u210d\u210e\u210f\u2110\u2111\u2112\u2113\u2115\u2118\u2119\u211a\u211b\u211c\u211d\u2124\u2126\u2128\u212a\u212b\u212c\u212d\u212e\u212f\u2130\u2131\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213c\u213d\u213e\u213f\u2145\u2146\u2147\u2148\u2149\u214e\u2160\u2164\u2169\u216c\u216d\u216e\u216f\u2170\u2174\u2179\u217c\u217d\u217e\u217f\u2180\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188\u2c00\u2c01\u2c02\u2c03\u2c04\u2c05\u2c06\u2c07\u2c08\u2c09\u2c0a\u2c0b\u2c0c\u2c0d\u2c0e\u2c0f\u2c10\u2c11\u2c12\u2c13\u2c14\u2c15\u2c16\u2c17\u2c18\u2c19\u2c1a\u2c1b\u2c1c\u2c1d\u2c1e\u2c1f\u2c20\u2c21\u2c22\u2c23\u2c24\u2c25\u2c26\u2c27\u2c28\u2c29\u2c2a\u2c2b\u2c2c\u2c2d\u2c2e\u2c30\u2c31\u2c32\u2c33\u2c34\u2c35\u2c36\u2c37\u2c38\u2c39\u2c3a\u2c3b\u2c3c\u2c3d\u2c3e\u2c3f\u2c40\u2c41\u2c42\u2c43\u2c44\u2c45\u2c46\u2c47\u2c48\u2c49\u2c4a\u2c4b\u2c4c\u2c4d\u2c4e\u2c4f\u2c50\u2c51\u2c52\u2c53\u2c54\u2c55\u2c56\u2c57\u2c58\u2c59\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2c60\u2c61\u2c62\u2c63\u2c64\u2c65\u2c66\u2c67\u2c68\u2c69\u2c6a\u2c6b\u2c6c\u2c6d\u2c6e\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2c80\u2c81\u2c82\u2c83\u2c84\u2c85\u2c86\u2c87\u2c88\u2c89\u2c8a\u2c8b\u2c8c\u2c8d\u2c8e\u2c8f\u2c90\u2c91\u2c92\u2c93\u2c94\u2c95\u2c96\u2c97\u2c98\u2c99\u2c9a\u2c9b\u2c9c\u2c9d\u2c9e\u2c9f\u2ca0\u2ca1\u2ca2\u2ca3\u2ca4\u2ca5\u2ca6\u2ca7\u2ca8\u2ca9\u2caa\u2cab\u2cac\u2cad\u2cae\u2caf\u2cb0\u2cb1\u2cb2\u2cb3\u2cb4\u2cb5\u2cb6\u2cb7\u2cb8\u2cb9\u2cba\u2cbb\u2cbc\u2cbd\u2cbe\u2cbf\u2cc0\u2cc1\u2cc2\u2cc3\u2cc4\u2cc5\u2cc6\u2cc7\u2cc8\u2cc9\u2cca\u2ccb\u2ccc\u2ccd\u2cce\u2ccf\u2cd0\u2cd1\u2cd2\u2cd3\u2cd4\u2cd5\u2cd6\u2cd7\u2cd8\u2cd9\u2cda\u2cdb\u2cdc\u2cdd\u2cde\u2cdf\u2ce0\u2ce1\u2ce2\u2ce3\u2ce4\u2ceb\u2cec\u2ced\u2cee\u2cf2\u2cf3\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\u2d27\u2d2d\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d66\u2d67\u2d6f\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u2e2f\u3005\u3006\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u3031\u3032\u3033\u3034\u3035\u3038\u3039\u303a\u303b\u303c\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u309d\u309e\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fc\u30fd\u30fe\u3105\u3106\u3107\u3108\u3109\u310a\u310b\u310c\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311b\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312a\u312b\u312c\u312d\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31b8\u31b9\u31ba\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u346e\u346f\u3470\u3471\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349a\u349b\u349c\u349d\u349e\u349f\u34a0\u34a1\u34a2\u34a3\u34a4\u34a5\u34a6\u34a7\u34a8\u34a9\u34aa\u34ab\u34ac\u34ad\u34ae\u34af\u34b0\u34b1\u34b2\u34b3\u34b4\u34b5\u34b6\u34b7\u34b8\u34b9\u34ba\u34bb\u34bc\u34bd\u34be\u34bf\u34c0\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cb\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d3\u34d4\u34d5\u34d6\u34d7\u34d8\u34d9\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u34e7\u34e8\u34e9\u34ea\u34eb\u34ec\u34ed\u34ee\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u350c\u350d\u350e\u350f\u3510\u3511\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351a\u351b\u351c\u351d\u351e\u351f\u3520\u3521\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352a\u352b\u352c\u352d\u352e\u352f\u3530\u3531\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353a\u353b\u353c\u353d\u353e\u353f\u3540\u3541\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354a\u354b\u354c\u354d\u354e\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355a\u355b\u355c\u355d\u355e\u355f\u3560\u3561\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679\u367a\u367b\u367c\u367d\u367e\u367f\u3680\u3681\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689\u368a\u368b\u368c\u368d\u368e\u368f\u3690\u3691\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699\u369a\u369b\u369c\u369d\u369e\u369f\u36a0\u36a1\u36a2\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e0\u36e1\u36e2\u36e3\u36e4\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729\u372a\u372b\u372c\u372d\u372e\u372f\u3730\u3731\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739\u373a\u373b\u373c\u373d\u373e\u373f\u3740\u3741\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749\u374a\u374b\u374c\u374d\u374e\u374f\u3750\u3751\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759\u375a\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769\u376a\u376b\u376c\u376d\u376e\u376f\u3770\u3771\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779\u377a\u377b\u377c\u377d\u377e\u377f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789\u378a\u378b\u378c\u378d\u378e\u378f\u3790\u3791\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799\u379a\u379b\u379c\u379d\u379e\u379f\u37a0\u37a1\u37a2\u37a3\u37a4\u37a5\u37a6\u37a7\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b7\u37b8\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u37c4\u37c5\u37c6\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9a\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da3\u3da4\u3da5\u3da6\u3da7\u3da8\u3da9\u3daa\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e36\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f75\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3fef\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u408c\u408d\u408e\u408f\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u409e\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40df\u40e0\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u40f0\u40f1\u40f2\u40f3\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410a\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412a\u412b\u412c\u412d\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u417e\u417f\u4180\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a3\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c2\u41c3\u41c4\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d3\u41d4\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279\u427a\u427b\u427c\u427d\u427e\u427f\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u429a\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b4\u42b5\u42b6\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318\u4319\u431a\u431b\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u432e\u432f\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337\u4338\u4339\u433a\u433b\u433c\u433d\u433e\u433f\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349\u434a\u434b\u434c\u434d\u434e\u434f\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359\u435a\u435b\u435c\u435d\u435e\u435f\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369\u436a\u436b\u436c\u436d\u436e\u436f\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u437f\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399\u439a\u439b\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43aa\u43ab\u43ac\u43ad\u43ae\u43af\u43b0\u43b1\u43b2\u43b3\u43b4\u43b5\u43b6\u43b7\u43b8\u43b9\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c0\u43c1\u43c2\u43c3\u43c4\u43c5\u43c6\u43c7\u43c8\u43c9\u43ca\u43cb\u43cc\u43cd\u43ce\u43cf\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u443e\u443f\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445b\u445c\u445d\u445e\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u45d6\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u460b\u460c\u460d\u460e\u460f\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u466e\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u472b\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759\u475a\u475b\u475c\u475d\u475e\u475f\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u47b9\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u47c7\u47c8\u47c9\u47ca\u47cb\u47cc\u47cd\u47ce\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d6\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fc\u47fd\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u481e\u481f\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828\u4829\u482a\u482b\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u4899\u489a\u489b\u489c\u489d\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u496f\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u497f\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a1b\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u4a30\u4a31\u4a32\u4a33\u4a34\u4a35\u4a36\u4a37\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4a3f\u4a40\u4a41\u4a42\u4a43\u4a44\u4a45\u4a46\u4a47\u4a48\u4a49\u4a4a\u4a4b\u4a4c\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u4a5f\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u4a85\u4a86\u4a87\u4a88\u4a89\u4a8a\u4a8b\u4a8c\u4a8d\u4a8e\u4a8f\u4a90\u4a91\u4a92\u4a93\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aab\u4aac\u4aad\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab4\u4ab5\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u4abf\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u4ae8\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af8\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4be0\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u4bf5\u4bf6\u4bf7\u4bf8\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d2a\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d41\u4d42\u4d43\u4d44\u4d45\u4d46\u4d47\u4d48\u4d49\u4d4a\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u4d51\u4d52\u4d53\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5b\u4d5c\u4d5d\u4d5e\u4d5f\u4d60\u4d61\u4d62\u4d63\u4d64\u4d65\u4d66\u4d67\u4d68\u4d69\u4d6a\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d75\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7b\u4d7c\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d86\u4d87\u4d88\u4d89\u4d8a\u4d8b\u4d8c\u4d8d\u4d8e\u4d8f\u4d90\u4d91\u4d92\u4d93\u4d94\u4d95\u4d96\u4d97\u4d98\u4d99\u4d9a\u4d9b\u4d9c\u4d9d\u4d9e\u4d9f\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5\u4da6\u4da7\u4da8\u4da9\u4daa\u4dab\u4dac\u4dad\u4dae\u4daf\u4db0\u4db1\u4db2\u4db3\u4db4\u4db5\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e16\u4e17\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e21\u4e22\u4e23\u4e24\u4e25\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e39\u4e3a\u4e3b\u4e3c\u4e3d\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u4e45\u4e46\u4e47\u4e48\u4e49\u4e4a\u4e4b\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e62\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u4e79\u4e7a\u4e7b\u4e7c\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e83\u4e84\u4e85\u4e86\u4e87\u4e88\u4e89\u4e8a\u4e8b\u4e8c\u4e8d\u4e8e\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u4ea8\u4ea9\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4eb8\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512b\u512c\u512d\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513a\u513b\u513c\u513d\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u5159\u515a\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u5166\u5167\u5168\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u5177\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5180\u5181\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u5195\u5196\u5197\u5198\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u51a9\u51aa\u51ab\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d6\u51d7\u51d8\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u5268\u5269\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5272\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u5280\u5281\u5282\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u5290\u5291\u5292\u5293\u5294\u5295\u5296\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d6\u52d7\u52d8\u52d9\u52da\u52db\u52dc\u52dd\u52de\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u5311\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329\u532a\u532b\u532c\u532d\u532e\u532f\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339\u533a\u533b\u533c\u533d\u533e\u533f\u5340\u5341\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u534b\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359\u535a\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u536b\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379\u537a\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u538e\u538f\u5390\u5391\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399\u539a\u539b\u539c\u539d\u539e\u539f\u53a0\u53a1\u53a2\u53a3\u53a4\u53a5\u53a6\u53a7\u53a8\u53a9\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u56ba\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56cc\u56cd\u56ce\u56cf\u56d0\u56d1\u56d2\u56d3\u56d4\u56d5\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u56ff\u5700\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u5725\u5726\u5727\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5900\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a90\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b34\u5b35\u5b36\u5b37\u5b38\u5b39\u5b3a\u5b3b\u5b3c\u5b3d\u5b3e\u5b3f\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b4f\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u5b68\u5b69\u5b6a\u5b6b\u5b6c\u5b6d\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b74\u5b75\u5b76\u5b77\u5b78\u5b79\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b81\u5b82\u5b83\u5b84\u5b85\u5b86\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba7\u5ba8\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c2d\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u5c5e\u5c5f\u5c60\u5c61\u5c62\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d\u5c6e\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4a\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u61f6\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219\u621a\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229\u622a\u622b\u622c\u622d\u622e\u622f\u6230\u6231\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u623d\u623e\u623f\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u625f\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b2\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u6526\u6527\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u658b\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u66ee\u66ef\u66f0\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u66fd\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6994\u6995\u6996\u6997\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6aeb\u6aec\u6aed\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0c\u6b0d\u6b0e\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b23\u6b24\u6b25\u6b26\u6b27\u6b28\u6b29\u6b2a\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b5e\u6b5f\u6b60\u6b61\u6b62\u6b63\u6b64\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b6f\u6b70\u6b71\u6b72\u6b73\u6b74\u6b75\u6b76\u6b77\u6b78\u6b79\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u6bac\u6bad\u6bae\u6baf\u6bb0\u6bb1\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bba\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc5\u6bc6\u6bc7\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u6bd9\u6bda\u6bdb\u6bdc\u6bdd\u6bde\u6bdf\u6be0\u6be1\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u6beb\u6bec\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0d\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d16\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecb\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edc\u6edd\u6ede\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3d\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd2\u6fd3\u6fd4\u6fd5\u6fd6\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u7179\u717a\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a6\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7260\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u727a\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\u7349\u734a\u734b\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737a\u737b\u737c\u737d\u737e\u737f\u7380\u7381\u7382\u7383\u7384\u7385\u7386\u7387\u7388\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74e3\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u750f\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751b\u751c\u751d\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u757f\u7580\u7581\u7582\u7583\u7584\u7585\u7586\u7587\u7588\u7589\u758a\u758b\u758c\u758d\u758e\u758f\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762a\u762b\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u764d\u764e\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76bf\u76c0\u76c1\u76c2\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e0\u76e1\u76e2\u76e3\u76e4\u76e5\u76e6\u76e7\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7\u77d8\u77d9\u77da\u77db\u77dc\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u79a9\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79b7\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a76\u7a77\u7a78\u7a79\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac5\u7ac6\u7ac7\u7ac8\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc0\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc0\u7cc1\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u7ce8\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd0\u7dd1\u7dd2\u7dd3\u7dd4\u7dd5\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4b\u7e4c\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e71\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e93\u7e94\u7e95\u7e96\u7e97\u7e98\u7e99\u7e9a\u7e9b\u7e9c\u7e9d\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u7f35\u7f36\u7f37\u7f38\u7f39\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f3f\u7f40\u7f41\u7f42\u7f43\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u7f50\u7f51\u7f52\u7f53\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f65\u7f66\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a4\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81dc\u81dd\u81de\u81df\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u81e6\u81e7\u81e8\u81e9\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u81f5\u81f6\u81f7\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u8211\u8212\u8213\u8214\u8215\u8216\u8217\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u821f\u8220\u8221\u8222\u8223\u8224\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u823d\u823e\u823f\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8279\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u842a\u842b\u842c\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ab\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d6\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968\u8969\u896a\u896b\u896c\u896d\u896e\u896f\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897a\u897b\u897c\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a0\u89a1\u89a2\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89be\u89bf\u89c0\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89e8\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u89ef\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8ae9\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c76\u8c77\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u8d19\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8db6\u8db7\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6e\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u8e80\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u8e9d\u8e9e\u8e9f\u8ea0\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8ea9\u8eaa\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u8eb1\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ebe\u8ebf\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8faf\u8fb0\u8fb1\u8fb2\u8fb3\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u908c\u908d\u908e\u908f\u9090\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148\u9149\u914a\u914b\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf\u91c0\u91c1\u91c2\u91c3\u91c4\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93f8\u93f9\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u9577\u9578\u9579\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u95de\u95df\u95e0\u95e1\u95e2\u95e3\u95e4\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u974b\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u986d\u986e\u986f\u9870\u9871\u9872\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98aa\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u9a5d\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u9ab8\u9ab9\u9aba\u9abb\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac1\u9ac2\u9ac3\u9ac4\u9ac5\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add\u9ade\u9adf\u9ae0\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u9b03\u9b04\u9b05\u9b06\u9b07\u9b08\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b33\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u9b43\u9b44\u9b45\u9b46\u9b47\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b61\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfb\u9bfc\u9bfd\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c1c\u9c1d\u9c1e\u9c1f\u9c20\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d64\u9d65\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d90\u9d91\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcb\u9dcc\u9dcd\u9dce\u9dcf\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9dfc\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e16\u9e17\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u9e77\u9e78\u9e79\u9e7a\u9e7b\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e87\u9e88\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ecd\u9ece\u9ecf\u9ed0\u9ed1\u9ed2\u9ed3\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9edc\u9edd\u9ede\u9edf\u9ee0\u9ee1\u9ee2\u9ee3\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eed\u9eee\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef5\u9ef6\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f05\u9f06\u9f07\u9f08\u9f09\u9f0a\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f14\u9f15\u9f16\u9f17\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u9f22\u9f23\u9f24\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f33\u9f34\u9f35\u9f36\u9f37\u9f38\u9f39\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u9f56\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fab\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fb4\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcc\u9fcd\u9fce\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua015\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua610\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua62a\ua62b\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua64e\ua64f\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua658\ua659\ua65a\ua65b\ua65c\ua65d\ua65e\ua65f\ua660\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua668\ua669\ua66a\ua66b\ua66c\ua66d\ua66e\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68d\ua68e\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua698\ua699\ua69a\ua69b\ua69c\ua69d\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua722\ua723\ua724\ua725\ua726\ua727\ua728\ua729\ua72a\ua72b\ua72c\ua72d\ua72e\ua72f\ua730\ua731\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua740\ua741\ua742\ua743\ua744\ua745\ua746\ua747\ua748\ua749\ua74a\ua74b\ua74c\ua74d\ua74e\ua74f\ua750\ua751\ua752\ua753\ua754\ua755\ua756\ua757\ua758\ua759\ua75a\ua75b\ua75c\ua75d\ua75e\ua75f\ua760\ua761\ua762\ua763\ua764\ua765\ua766\ua767\ua768\ua769\ua76a\ua76b\ua76c\ua76d\ua76e\ua76f\ua770\ua771\ua772\ua773\ua774\ua775\ua776\ua777\ua778\ua779\ua77a\ua77b\ua77c\ua77d\ua77e\ua77f\ua780\ua781\ua782\ua783\ua784\ua785\ua786\ua787\ua788\ua78b\ua78c\ua78d\ua78e\ua78f\ua790\ua791\ua792\ua793\ua794\ua795\ua796\ua797\ua798\ua799\ua79a\ua79b\ua79c\ua79d\ua79e\ua79f\ua7a0\ua7a1\ua7a2\ua7a3\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7ae\ua7b0\ua7b1\ua7b2\ua7b3\ua7b4\ua7b5\ua7b6\ua7b7\ua7f7\ua7f8\ua7f9\ua7fa\ua7fb\ua7fc\ua7fd\ua7fe\ua7ff\ua800\ua801\ua803\ua804\ua805\ua807\ua808\ua809\ua80a\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua854\ua855\ua856\ua857\ua858\ua859\ua85a\ua85b\ua85c\ua85d\ua85e\ua85f\ua860\ua861\ua862\ua863\ua864\ua865\ua866\ua867\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8fb\ua8fd\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9ab\ua9ac\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9cf\ua9e0\ua9e1\ua9e2\ua9e3\ua9e4\ua9e6\ua9e7\ua9e8\ua9e9\ua9ea\ua9eb\ua9ec\ua9ed\ua9ee\ua9ef\ua9fa\ua9fb\ua9fc\ua9fd\ua9fe\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa40\uaa41\uaa42\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa60\uaa61\uaa62\uaa63\uaa64\uaa65\uaa66\uaa67\uaa68\uaa69\uaa6a\uaa6b\uaa6c\uaa6d\uaa6e\uaa6f\uaa70\uaa71\uaa72\uaa73\uaa74\uaa75\uaa76\uaa7a\uaa7e\uaa7f\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab1\uaab5\uaab6\uaab9\uaaba\uaabb\uaabc\uaabd\uaac0\uaac2\uaadb\uaadc\uaadd\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uaaf2\uaaf3\uaaf4\uab01\uab02\uab03\uab04\uab05\uab06\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\uab11\uab12\uab13\uab14\uab15\uab16\uab20\uab21\uab22\uab23\uab24\uab25\uab26\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\uab30\uab31\uab32\uab33\uab34\uab35\uab36\uab37\uab38\uab39\uab3a\uab3b\uab3c\uab3d\uab3e\uab3f\uab40\uab41\uab42\uab43\uab44\uab45\uab46\uab47\uab48\uab49\uab4a\uab4b\uab4c\uab4d\uab4e\uab4f\uab50\uab51\uab52\uab53\uab54\uab55\uab56\uab57\uab58\uab59\uab5a\uab5c\uab5d\uab5e\uab5f\uab60\uab61\uab62\uab63\uab64\uab65\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79\uab7a\uab7b\uab7c\uab7d\uab7e\uab7f\uab80\uab81\uab82\uab83\uab84\uab85\uab86\uab87\uab88\uab89\uab8a\uab8b\uab8c\uab8d\uab8e\uab8f\uab90\uab91\uab92\uab93\uab94\uab95\uab96\uab97\uab98\uab99\uab9a\uab9b\uab9c\uab9d\uab9e\uab9f\uaba0\uaba1\uaba2\uaba3\uaba4\uaba5\uaba6\uaba7\uaba8\uaba9\uabaa\uabab\uabac\uabad\uabae\uabaf\uabb0\uabb1\uabb2\uabb3\uabb4\uabb5\uabb6\uabb7\uabb8\uabb9\uabba\uabbb\uabbc\uabbd\uabbe\uabbf\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\uae40\uae41\uae42\uae43\uae44\uae45\uae46\uae47\uae48\uae49\uae4a\uae4b\uae4c\uae4d\uae4e\uae4f\uae50\uae51\uae52\uae53\uae54\uae55\uae56\uae57\uae58\uae59\uae5a\uae5b\uae5c\uae5d\uae5e\uae5f\uae60\uae61\uae62\uae63\uae64\uae65\uae66\uae67\uae68\uae69\uae6a\uae6b\uae6c\uae6d\uae6e\uae6f\uae70\uae71\uae72\uae73\uae74\uae75\uae76\uae77\uae78\uae79\uae7a\uae7b\uae7c\uae7d\uae7e\uae7f\uae80\uae81\uae82\uae83\uae84\uae85\uae86\uae87\uae88\uae89\uae8a\uae8b\uae8c\uae8d\uae8e\uae8f\uae90\uae91\uae92\uae93\uae94\uae95\uae96\uae97\uae98\uae99\uae9a\uae9b\uae9c\uae9d\uae9e\uae9f\uaea0\uaea1\uaea2\uaea3\uaea4\uaea5\uaea6\uaea7\uaea8\uaea9\uaeaa\uaeab\uaeac\uaead\uaeae\uaeaf\uaeb0\uaeb1\uaeb2\uaeb3\uaeb4\uaeb5\uaeb6\uaeb7\uaeb8\uaeb9\uaeba\uaebb\uaebc\uaebd\uaebe\uaebf\uaec0\uaec1\uaec2\uaec3\uaec4\uaec5\uaec6\uaec7\uaec8\uaec9\uaeca\uaecb\uaecc\uaecd\uaece\uaecf\uaed0\uaed1\uaed2\uaed3\uaed4\uaed5\uaed6\uaed7\uaed8\uaed9\uaeda\uaedb\uaedc\uaedd\uaede\uaedf\uaee0\uaee1\uaee2\uaee3\uaee4\uaee5\uaee6\uaee7\uaee8\uaee9\uaeea\uaeeb\uaeec\uaeed\uaeee\uaeef\uaef0\uaef1\uaef2\uaef3\uaef4\uaef5\uaef6\uaef7\uaef8\uaef9\uaefa\uaefb\uaefc\uaefd\uaefe\uaeff\uaf00\uaf01\uaf02\uaf03\uaf04\uaf05\uaf06\uaf07\uaf08\uaf09\uaf0a\uaf0b\uaf0c\uaf0d\uaf0e\uaf0f\uaf10\uaf11\uaf12\uaf13\uaf14\uaf15\uaf16\uaf17\uaf18\uaf19\uaf1a\uaf1b\uaf1c\uaf1d\uaf1e\uaf1f\uaf20\uaf21\uaf22\uaf23\uaf24\uaf25\uaf26\uaf27\uaf28\uaf29\uaf2a\uaf2b\uaf2c\uaf2d\uaf2e\uaf2f\uaf30\uaf31\uaf32\uaf33\uaf34\uaf35\uaf36\uaf37\uaf38\uaf39\uaf3a\uaf3b\uaf3c\uaf3d\uaf3e\uaf3f\uaf40\uaf41\uaf42\uaf43\uaf44\uaf45\uaf46\uaf47\uaf48\uaf49\uaf4a\uaf4b\uaf4c\uaf4d\uaf4e\uaf4f\uaf50\uaf51\uaf52\uaf53\uaf54\uaf55\uaf56\uaf57\uaf58\uaf59\uaf5a\uaf5b\uaf5c\uaf5d\uaf5e\uaf5f\uaf60\uaf61\uaf62\uaf63\uaf64\uaf65\uaf66\uaf67\uaf68\uaf69\uaf6a\uaf6b\uaf6c\uaf6d\uaf6e\uaf6f\uaf70\uaf71\uaf72\uaf73\uaf74\uaf75\uaf76\uaf77\uaf78\uaf79\uaf7a\uaf7b\uaf7c\uaf7d\uaf7e\uaf7f\uaf80\uaf81\uaf82\uaf83\uaf84\uaf85\uaf86\uaf87\uaf88\uaf89\uaf8a\uaf8b\uaf8c\uaf8d\uaf8e\uaf8f\uaf90\uaf91\uaf92\uaf93\uaf94\uaf95\uaf96\uaf97\uaf98\uaf99\uaf9a\uaf9b\uaf9c\uaf9d\uaf9e\uaf9f\uafa0\uafa1\uafa2\uafa3\uafa4\uafa5\uafa6\uafa7\uafa8\uafa9\uafaa\uafab\uafac\uafad\uafae\uafaf\uafb0\uafb1\uafb2\uafb3\uafb4\uafb5\uafb6\uafb7\uafb8\uafb9\uafba\uafbb\uafbc\uafbd\uafbe\uafbf\uafc0\uafc1\uafc2\uafc3\uafc4\uafc5\uafc6\uafc7\uafc8\uafc9\uafca\uafcb\uafcc\uafcd\uafce\uafcf\uafd0\uafd1\uafd2\uafd3\uafd4\uafd5\uafd6\uafd7\uafd8\uafd9\uafda\uafdb\uafdc\uafdd\uafde\uafdf\uafe0\uafe1\uafe2\uafe3\uafe4\uafe5\uafe6\uafe7\uafe8\uafe9\uafea\uafeb\uafec\uafed\uafee\uafef\uaff0\uaff1\uaff2\uaff3\uaff4\uaff5\uaff6\uaff7\uaff8\uaff9\uaffa\uaffb\uaffc\uaffd\uaffe\uafff\ub000\ub001\ub002\ub003\ub004\ub005\ub006\ub007\ub008\ub009\ub00a\ub00b\ub00c\ub00d\ub00e\ub00f\ub010\ub011\ub012\ub013\ub014\ub015\ub016\ub017\ub018\ub019\ub01a\ub01b\ub01c\ub01d\ub01e\ub01f\ub020\ub021\ub022\ub023\ub024\ub025\ub026\ub027\ub028\ub029\ub02a\ub02b\ub02c\ub02d\ub02e\ub02f\ub030\ub031\ub032\ub033\ub034\ub035\ub036\ub037\ub038\ub039\ub03a\ub03b\ub03c\ub03d\ub03e\ub03f\ub040\ub041\ub042\ub043\ub044\ub045\ub046\ub047\ub048\ub049\ub04a\ub04b\ub04c\ub04d\ub04e\ub04f\ub050\ub051\ub052\ub053\ub054\ub055\ub056\ub057\ub058\ub059\ub05a\ub05b\ub05c\ub05d\ub05e\ub05f\ub060\ub061\ub062\ub063\ub064\ub065\ub066\ub067\ub068\ub069\ub06a\ub06b\ub06c\ub06d\ub06e\ub06f\ub070\ub071\ub072\ub073\ub074\ub075\ub076\ub077\ub078\ub079\ub07a\ub07b\ub07c\ub07d\ub07e\ub07f\ub080\ub081\ub082\ub083\ub084\ub085\ub086\ub087\ub088\ub089\ub08a\ub08b\ub08c\ub08d\ub08e\ub08f\ub090\ub091\ub092\ub093\ub094\ub095\ub096\ub097\ub098\ub099\ub09a\ub09b\ub09c\ub09d\ub09e\ub09f\ub0a0\ub0a1\ub0a2\ub0a3\ub0a4\ub0a5\ub0a6\ub0a7\ub0a8\ub0a9\ub0aa\ub0ab\ub0ac\ub0ad\ub0ae\ub0af\ub0b0\ub0b1\ub0b2\ub0b3\ub0b4\ub0b5\ub0b6\ub0b7\ub0b8\ub0b9\ub0ba\ub0bb\ub0bc\ub0bd\ub0be\ub0bf\ub0c0\ub0c1\ub0c2\ub0c3\ub0c4\ub0c5\ub0c6\ub0c7\ub0c8\ub0c9\ub0ca\ub0cb\ub0cc\ub0cd\ub0ce\ub0cf\ub0d0\ub0d1\ub0d2\ub0d3\ub0d4\ub0d5\ub0d6\ub0d7\ub0d8\ub0d9\ub0da\ub0db\ub0dc\ub0dd\ub0de\ub0df\ub0e0\ub0e1\ub0e2\ub0e3\ub0e4\ub0e5\ub0e6\ub0e7\ub0e8\ub0e9\ub0ea\ub0eb\ub0ec\ub0ed\ub0ee\ub0ef\ub0f0\ub0f1\ub0f2\ub0f3\ub0f4\ub0f5\ub0f6\ub0f7\ub0f8\ub0f9\ub0fa\ub0fb\ub0fc\ub0fd\ub0fe\ub0ff\ub100\ub101\ub102\ub103\ub104\ub105\ub106\ub107\ub108\ub109\ub10a\ub10b\ub10c\ub10d\ub10e\ub10f\ub110\ub111\ub112\ub113\ub114\ub115\ub116\ub117\ub118\ub119\ub11a\ub11b\ub11c\ub11d\ub11e\ub11f\ub120\ub121\ub122\ub123\ub124\ub125\ub126\ub127\ub128\ub129\ub12a\ub12b\ub12c\ub12d\ub12e\ub12f\ub130\ub131\ub132\ub133\ub134\ub135\ub136\ub137\ub138\ub139\ub13a\ub13b\ub13c\ub13d\ub13e\ub13f\ub140\ub141\ub142\ub143\ub144\ub145\ub146\ub147\ub148\ub149\ub14a\ub14b\ub14c\ub14d\ub14e\ub14f\ub150\ub151\ub152\ub153\ub154\ub155\ub156\ub157\ub158\ub159\ub15a\ub15b\ub15c\ub15d\ub15e\ub15f\ub160\ub161\ub162\ub163\ub164\ub165\ub166\ub167\ub168\ub169\ub16a\ub16b\ub16c\ub16d\ub16e\ub16f\ub170\ub171\ub172\ub173\ub174\ub175\ub176\ub177\ub178\ub179\ub17a\ub17b\ub17c\ub17d\ub17e\ub17f\ub180\ub181\ub182\ub183\ub184\ub185\ub186\ub187\ub188\ub189\ub18a\ub18b\ub18c\ub18d\ub18e\ub18f\ub190\ub191\ub192\ub193\ub194\ub195\ub196\ub197\ub198\ub199\ub19a\ub19b\ub19c\ub19d\ub19e\ub19f\ub1a0\ub1a1\ub1a2\ub1a3\ub1a4\ub1a5\ub1a6\ub1a7\ub1a8\ub1a9\ub1aa\ub1ab\ub1ac\ub1ad\ub1ae\ub1af\ub1b0\ub1b1\ub1b2\ub1b3\ub1b4\ub1b5\ub1b6\ub1b7\ub1b8\ub1b9\ub1ba\ub1bb\ub1bc\ub1bd\ub1be\ub1bf\ub1c0\ub1c1\ub1c2\ub1c3\ub1c4\ub1c5\ub1c6\ub1c7\ub1c8\ub1c9\ub1ca\ub1cb\ub1cc\ub1cd\ub1ce\ub1cf\ub1d0\ub1d1\ub1d2\ub1d3\ub1d4\ub1d5\ub1d6\ub1d7\ub1d8\ub1d9\ub1da\ub1db\ub1dc\ub1dd\ub1de\ub1df\ub1e0\ub1e1\ub1e2\ub1e3\ub1e4\ub1e5\ub1e6\ub1e7\ub1e8\ub1e9\ub1ea\ub1eb\ub1ec\ub1ed\ub1ee\ub1ef\ub1f0\ub1f1\ub1f2\ub1f3\ub1f4\ub1f5\ub1f6\ub1f7\ub1f8\ub1f9\ub1fa\ub1fb\ub1fc\ub1fd\ub1fe\ub1ff\ub200\ub201\ub202\ub203\ub204\ub205\ub206\ub207\ub208\ub209\ub20a\ub20b\ub20c\ub20d\ub20e\ub20f\ub210\ub211\ub212\ub213\ub214\ub215\ub216\ub217\ub218\ub219\ub21a\ub21b\ub21c\ub21d\ub21e\ub21f\ub220\ub221\ub222\ub223\ub224\ub225\ub226\ub227\ub228\ub229\ub22a\ub22b\ub22c\ub22d\ub22e\ub22f\ub230\ub231\ub232\ub233\ub234\ub235\ub236\ub237\ub238\ub239\ub23a\ub23b\ub23c\ub23d\ub23e\ub23f\ub240\ub241\ub242\ub243\ub244\ub245\ub246\ub247\ub248\ub249\ub24a\ub24b\ub24c\ub24d\ub24e\ub24f\ub250\ub251\ub252\ub253\ub254\ub255\ub256\ub257\ub258\ub259\ub25a\ub25b\ub25c\ub25d\ub25e\ub25f\ub260\ub261\ub262\ub263\ub264\ub265\ub266\ub267\ub268\ub269\ub26a\ub26b\ub26c\ub26d\ub26e\ub26f\ub270\ub271\ub272\ub273\ub274\ub275\ub276\ub277\ub278\ub279\ub27a\ub27b\ub27c\ub27d\ub27e\ub27f\ub280\ub281\ub282\ub283\ub284\ub285\ub286\ub287\ub288\ub289\ub28a\ub28b\ub28c\ub28d\ub28e\ub28f\ub290\ub291\ub292\ub293\ub294\ub295\ub296\ub297\ub298\ub299\ub29a\ub29b\ub29c\ub29d\ub29e\ub29f\ub2a0\ub2a1\ub2a2\ub2a3\ub2a4\ub2a5\ub2a6\ub2a7\ub2a8\ub2a9\ub2aa\ub2ab\ub2ac\ub2ad\ub2ae\ub2af\ub2b0\ub2b1\ub2b2\ub2b3\ub2b4\ub2b5\ub2b6\ub2b7\ub2b8\ub2b9\ub2ba\ub2bb\ub2bc\ub2bd\ub2be\ub2bf\ub2c0\ub2c1\ub2c2\ub2c3\ub2c4\ub2c5\ub2c6\ub2c7\ub2c8\ub2c9\ub2ca\ub2cb\ub2cc\ub2cd\ub2ce\ub2cf\ub2d0\ub2d1\ub2d2\ub2d3\ub2d4\ub2d5\ub2d6\ub2d7\ub2d8\ub2d9\ub2da\ub2db\ub2dc\ub2dd\ub2de\ub2df\ub2e0\ub2e1\ub2e2\ub2e3\ub2e4\ub2e5\ub2e6\ub2e7\ub2e8\ub2e9\ub2ea\ub2eb\ub2ec\ub2ed\ub2ee\ub2ef\ub2f0\ub2f1\ub2f2\ub2f3\ub2f4\ub2f5\ub2f6\ub2f7\ub2f8\ub2f9\ub2fa\ub2fb\ub2fc\ub2fd\ub2fe\ub2ff\ub300\ub301\ub302\ub303\ub304\ub305\ub306\ub307\ub308\ub309\ub30a\ub30b\ub30c\ub30d\ub30e\ub30f\ub310\ub311\ub312\ub313\ub314\ub315\ub316\ub317\ub318\ub319\ub31a\ub31b\ub31c\ub31d\ub31e\ub31f\ub320\ub321\ub322\ub323\ub324\ub325\ub326\ub327\ub328\ub329\ub32a\ub32b\ub32c\ub32d\ub32e\ub32f\ub330\ub331\ub332\ub333\ub334\ub335\ub336\ub337\ub338\ub339\ub33a\ub33b\ub33c\ub33d\ub33e\ub33f\ub340\ub341\ub342\ub343\ub344\ub345\ub346\ub347\ub348\ub349\ub34a\ub34b\ub34c\ub34d\ub34e\ub34f\ub350\ub351\ub352\ub353\ub354\ub355\ub356\ub357\ub358\ub359\ub35a\ub35b\ub35c\ub35d\ub35e\ub35f\ub360\ub361\ub362\ub363\ub364\ub365\ub366\ub367\ub368\ub369\ub36a\ub36b\ub36c\ub36d\ub36e\ub36f\ub370\ub371\ub372\ub373\ub374\ub375\ub376\ub377\ub378\ub379\ub37a\ub37b\ub37c\ub37d\ub37e\ub37f\ub380\ub381\ub382\ub383\ub384\ub385\ub386\ub387\ub388\ub389\ub38a\ub38b\ub38c\ub38d\ub38e\ub38f\ub390\ub391\ub392\ub393\ub394\ub395\ub396\ub397\ub398\ub399\ub39a\ub39b\ub39c\ub39d\ub39e\ub39f\ub3a0\ub3a1\ub3a2\ub3a3\ub3a4\ub3a5\ub3a6\ub3a7\ub3a8\ub3a9\ub3aa\ub3ab\ub3ac\ub3ad\ub3ae\ub3af\ub3b0\ub3b1\ub3b2\ub3b3\ub3b4\ub3b5\ub3b6\ub3b7\ub3b8\ub3b9\ub3ba\ub3bb\ub3bc\ub3bd\ub3be\ub3bf\ub3c0\ub3c1\ub3c2\ub3c3\ub3c4\ub3c5\ub3c6\ub3c7\ub3c8\ub3c9\ub3ca\ub3cb\ub3cc\ub3cd\ub3ce\ub3cf\ub3d0\ub3d1\ub3d2\ub3d3\ub3d4\ub3d5\ub3d6\ub3d7\ub3d8\ub3d9\ub3da\ub3db\ub3dc\ub3dd\ub3de\ub3df\ub3e0\ub3e1\ub3e2\ub3e3\ub3e4\ub3e5\ub3e6\ub3e7\ub3e8\ub3e9\ub3ea\ub3eb\ub3ec\ub3ed\ub3ee\ub3ef\ub3f0\ub3f1\ub3f2\ub3f3\ub3f4\ub3f5\ub3f6\ub3f7\ub3f8\ub3f9\ub3fa\ub3fb\ub3fc\ub3fd\ub3fe\ub3ff\ub400\ub401\ub402\ub403\ub404\ub405\ub406\ub407\ub408\ub409\ub40a\ub40b\ub40c\ub40d\ub40e\ub40f\ub410\ub411\ub412\ub413\ub414\ub415\ub416\ub417\ub418\ub419\ub41a\ub41b\ub41c\ub41d\ub41e\ub41f\ub420\ub421\ub422\ub423\ub424\ub425\ub426\ub427\ub428\ub429\ub42a\ub42b\ub42c\ub42d\ub42e\ub42f\ub430\ub431\ub432\ub433\ub434\ub435\ub436\ub437\ub438\ub439\ub43a\ub43b\ub43c\ub43d\ub43e\ub43f\ub440\ub441\ub442\ub443\ub444\ub445\ub446\ub447\ub448\ub449\ub44a\ub44b\ub44c\ub44d\ub44e\ub44f\ub450\ub451\ub452\ub453\ub454\ub455\ub456\ub457\ub458\ub459\ub45a\ub45b\ub45c\ub45d\ub45e\ub45f\ub460\ub461\ub462\ub463\ub464\ub465\ub466\ub467\ub468\ub469\ub46a\ub46b\ub46c\ub46d\ub46e\ub46f\ub470\ub471\ub472\ub473\ub474\ub475\ub476\ub477\ub478\ub479\ub47a\ub47b\ub47c\ub47d\ub47e\ub47f\ub480\ub481\ub482\ub483\ub484\ub485\ub486\ub487\ub488\ub489\ub48a\ub48b\ub48c\ub48d\ub48e\ub48f\ub490\ub491\ub492\ub493\ub494\ub495\ub496\ub497\ub498\ub499\ub49a\ub49b\ub49c\ub49d\ub49e\ub49f\ub4a0\ub4a1\ub4a2\ub4a3\ub4a4\ub4a5\ub4a6\ub4a7\ub4a8\ub4a9\ub4aa\ub4ab\ub4ac\ub4ad\ub4ae\ub4af\ub4b0\ub4b1\ub4b2\ub4b3\ub4b4\ub4b5\ub4b6\ub4b7\ub4b8\ub4b9\ub4ba\ub4bb\ub4bc\ub4bd\ub4be\ub4bf\ub4c0\ub4c1\ub4c2\ub4c3\ub4c4\ub4c5\ub4c6\ub4c7\ub4c8\ub4c9\ub4ca\ub4cb\ub4cc\ub4cd\ub4ce\ub4cf\ub4d0\ub4d1\ub4d2\ub4d3\ub4d4\ub4d5\ub4d6\ub4d7\ub4d8\ub4d9\ub4da\ub4db\ub4dc\ub4dd\ub4de\ub4df\ub4e0\ub4e1\ub4e2\ub4e3\ub4e4\ub4e5\ub4e6\ub4e7\ub4e8\ub4e9\ub4ea\ub4eb\ub4ec\ub4ed\ub4ee\ub4ef\ub4f0\ub4f1\ub4f2\ub4f3\ub4f4\ub4f5\ub4f6\ub4f7\ub4f8\ub4f9\ub4fa\ub4fb\ub4fc\ub4fd\ub4fe\ub4ff\ub500\ub501\ub502\ub503\ub504\ub505\ub506\ub507\ub508\ub509\ub50a\ub50b\ub50c\ub50d\ub50e\ub50f\ub510\ub511\ub512\ub513\ub514\ub515\ub516\ub517\ub518\ub519\ub51a\ub51b\ub51c\ub51d\ub51e\ub51f\ub520\ub521\ub522\ub523\ub524\ub525\ub526\ub527\ub528\ub529\ub52a\ub52b\ub52c\ub52d\ub52e\ub52f\ub530\ub531\ub532\ub533\ub534\ub535\ub536\ub537\ub538\ub539\ub53a\ub53b\ub53c\ub53d\ub53e\ub53f\ub540\ub541\ub542\ub543\ub544\ub545\ub546\ub547\ub548\ub549\ub54a\ub54b\ub54c\ub54d\ub54e\ub54f\ub550\ub551\ub552\ub553\ub554\ub555\ub556\ub557\ub558\ub559\ub55a\ub55b\ub55c\ub55d\ub55e\ub55f\ub560\ub561\ub562\ub563\ub564\ub565\ub566\ub567\ub568\ub569\ub56a\ub56b\ub56c\ub56d\ub56e\ub56f\ub570\ub571\ub572\ub573\ub574\ub575\ub576\ub577\ub578\ub579\ub57a\ub57b\ub57c\ub57d\ub57e\ub57f\ub580\ub581\ub582\ub583\ub584\ub585\ub586\ub587\ub588\ub589\ub58a\ub58b\ub58c\ub58d\ub58e\ub58f\ub590\ub591\ub592\ub593\ub594\ub595\ub596\ub597\ub598\ub599\ub59a\ub59b\ub59c\ub59d\ub59e\ub59f\ub5a0\ub5a1\ub5a2\ub5a3\ub5a4\ub5a5\ub5a6\ub5a7\ub5a8\ub5a9\ub5aa\ub5ab\ub5ac\ub5ad\ub5ae\ub5af\ub5b0\ub5b1\ub5b2\ub5b3\ub5b4\ub5b5\ub5b6\ub5b7\ub5b8\ub5b9\ub5ba\ub5bb\ub5bc\ub5bd\ub5be\ub5bf\ub5c0\ub5c1\ub5c2\ub5c3\ub5c4\ub5c5\ub5c6\ub5c7\ub5c8\ub5c9\ub5ca\ub5cb\ub5cc\ub5cd\ub5ce\ub5cf\ub5d0\ub5d1\ub5d2\ub5d3\ub5d4\ub5d5\ub5d6\ub5d7\ub5d8\ub5d9\ub5da\ub5db\ub5dc\ub5dd\ub5de\ub5df\ub5e0\ub5e1\ub5e2\ub5e3\ub5e4\ub5e5\ub5e6\ub5e7\ub5e8\ub5e9\ub5ea\ub5eb\ub5ec\ub5ed\ub5ee\ub5ef\ub5f0\ub5f1\ub5f2\ub5f3\ub5f4\ub5f5\ub5f6\ub5f7\ub5f8\ub5f9\ub5fa\ub5fb\ub5fc\ub5fd\ub5fe\ub5ff\ub600\ub601\ub602\ub603\ub604\ub605\ub606\ub607\ub608\ub609\ub60a\ub60b\ub60c\ub60d\ub60e\ub60f\ub610\ub611\ub612\ub613\ub614\ub615\ub616\ub617\ub618\ub619\ub61a\ub61b\ub61c\ub61d\ub61e\ub61f\ub620\ub621\ub622\ub623\ub624\ub625\ub626\ub627\ub628\ub629\ub62a\ub62b\ub62c\ub62d\ub62e\ub62f\ub630\ub631\ub632\ub633\ub634\ub635\ub636\ub637\ub638\ub639\ub63a\ub63b\ub63c\ub63d\ub63e\ub63f\ub640\ub641\ub642\ub643\ub644\ub645\ub646\ub647\ub648\ub649\ub64a\ub64b\ub64c\ub64d\ub64e\ub64f\ub650\ub651\ub652\ub653\ub654\ub655\ub656\ub657\ub658\ub659\ub65a\ub65b\ub65c\ub65d\ub65e\ub65f\ub660\ub661\ub662\ub663\ub664\ub665\ub666\ub667\ub668\ub669\ub66a\ub66b\ub66c\ub66d\ub66e\ub66f\ub670\ub671\ub672\ub673\ub674\ub675\ub676\ub677\ub678\ub679\ub67a\ub67b\ub67c\ub67d\ub67e\ub67f\ub680\ub681\ub682\ub683\ub684\ub685\ub686\ub687\ub688\ub689\ub68a\ub68b\ub68c\ub68d\ub68e\ub68f\ub690\ub691\ub692\ub693\ub694\ub695\ub696\ub697\ub698\ub699\ub69a\ub69b\ub69c\ub69d\ub69e\ub69f\ub6a0\ub6a1\ub6a2\ub6a3\ub6a4\ub6a5\ub6a6\ub6a7\ub6a8\ub6a9\ub6aa\ub6ab\ub6ac\ub6ad\ub6ae\ub6af\ub6b0\ub6b1\ub6b2\ub6b3\ub6b4\ub6b5\ub6b6\ub6b7\ub6b8\ub6b9\ub6ba\ub6bb\ub6bc\ub6bd\ub6be\ub6bf\ub6c0\ub6c1\ub6c2\ub6c3\ub6c4\ub6c5\ub6c6\ub6c7\ub6c8\ub6c9\ub6ca\ub6cb\ub6cc\ub6cd\ub6ce\ub6cf\ub6d0\ub6d1\ub6d2\ub6d3\ub6d4\ub6d5\ub6d6\ub6d7\ub6d8\ub6d9\ub6da\ub6db\ub6dc\ub6dd\ub6de\ub6df\ub6e0\ub6e1\ub6e2\ub6e3\ub6e4\ub6e5\ub6e6\ub6e7\ub6e8\ub6e9\ub6ea\ub6eb\ub6ec\ub6ed\ub6ee\ub6ef\ub6f0\ub6f1\ub6f2\ub6f3\ub6f4\ub6f5\ub6f6\ub6f7\ub6f8\ub6f9\ub6fa\ub6fb\ub6fc\ub6fd\ub6fe\ub6ff\ub700\ub701\ub702\ub703\ub704\ub705\ub706\ub707\ub708\ub709\ub70a\ub70b\ub70c\ub70d\ub70e\ub70f\ub710\ub711\ub712\ub713\ub714\ub715\ub716\ub717\ub718\ub719\ub71a\ub71b\ub71c\ub71d\ub71e\ub71f\ub720\ub721\ub722\ub723\ub724\ub725\ub726\ub727\ub728\ub729\ub72a\ub72b\ub72c\ub72d\ub72e\ub72f\ub730\ub731\ub732\ub733\ub734\ub735\ub736\ub737\ub738\ub739\ub73a\ub73b\ub73c\ub73d\ub73e\ub73f\ub740\ub741\ub742\ub743\ub744\ub745\ub746\ub747\ub748\ub749\ub74a\ub74b\ub74c\ub74d\ub74e\ub74f\ub750\ub751\ub752\ub753\ub754\ub755\ub756\ub757\ub758\ub759\ub75a\ub75b\ub75c\ub75d\ub75e\ub75f\ub760\ub761\ub762\ub763\ub764\ub765\ub766\ub767\ub768\ub769\ub76a\ub76b\ub76c\ub76d\ub76e\ub76f\ub770\ub771\ub772\ub773\ub774\ub775\ub776\ub777\ub778\ub779\ub77a\ub77b\ub77c\ub77d\ub77e\ub77f\ub780\ub781\ub782\ub783\ub784\ub785\ub786\ub787\ub788\ub789\ub78a\ub78b\ub78c\ub78d\ub78e\ub78f\ub790\ub791\ub792\ub793\ub794\ub795\ub796\ub797\ub798\ub799\ub79a\ub79b\ub79c\ub79d\ub79e\ub79f\ub7a0\ub7a1\ub7a2\ub7a3\ub7a4\ub7a5\ub7a6\ub7a7\ub7a8\ub7a9\ub7aa\ub7ab\ub7ac\ub7ad\ub7ae\ub7af\ub7b0\ub7b1\ub7b2\ub7b3\ub7b4\ub7b5\ub7b6\ub7b7\ub7b8\ub7b9\ub7ba\ub7bb\ub7bc\ub7bd\ub7be\ub7bf\ub7c0\ub7c1\ub7c2\ub7c3\ub7c4\ub7c5\ub7c6\ub7c7\ub7c8\ub7c9\ub7ca\ub7cb\ub7cc\ub7cd\ub7ce\ub7cf\ub7d0\ub7d1\ub7d2\ub7d3\ub7d4\ub7d5\ub7d6\ub7d7\ub7d8\ub7d9\ub7da\ub7db\ub7dc\ub7dd\ub7de\ub7df\ub7e0\ub7e1\ub7e2\ub7e3\ub7e4\ub7e5\ub7e6\ub7e7\ub7e8\ub7e9\ub7ea\ub7eb\ub7ec\ub7ed\ub7ee\ub7ef\ub7f0\ub7f1\ub7f2\ub7f3\ub7f4\ub7f5\ub7f6\ub7f7\ub7f8\ub7f9\ub7fa\ub7fb\ub7fc\ub7fd\ub7fe\ub7ff\ub800\ub801\ub802\ub803\ub804\ub805\ub806\ub807\ub808\ub809\ub80a\ub80b\ub80c\ub80d\ub80e\ub80f\ub810\ub811\ub812\ub813\ub814\ub815\ub816\ub817\ub818\ub819\ub81a\ub81b\ub81c\ub81d\ub81e\ub81f\ub820\ub821\ub822\ub823\ub824\ub825\ub826\ub827\ub828\ub829\ub82a\ub82b\ub82c\ub82d\ub82e\ub82f\ub830\ub831\ub832\ub833\ub834\ub835\ub836\ub837\ub838\ub839\ub83a\ub83b\ub83c\ub83d\ub83e\ub83f\ub840\ub841\ub842\ub843\ub844\ub845\ub846\ub847\ub848\ub849\ub84a\ub84b\ub84c\ub84d\ub84e\ub84f\ub850\ub851\ub852\ub853\ub854\ub855\ub856\ub857\ub858\ub859\ub85a\ub85b\ub85c\ub85d\ub85e\ub85f\ub860\ub861\ub862\ub863\ub864\ub865\ub866\ub867\ub868\ub869\ub86a\ub86b\ub86c\ub86d\ub86e\ub86f\ub870\ub871\ub872\ub873\ub874\ub875\ub876\ub877\ub878\ub879\ub87a\ub87b\ub87c\ub87d\ub87e\ub87f\ub880\ub881\ub882\ub883\ub884\ub885\ub886\ub887\ub888\ub889\ub88a\ub88b\ub88c\ub88d\ub88e\ub88f\ub890\ub891\ub892\ub893\ub894\ub895\ub896\ub897\ub898\ub899\ub89a\ub89b\ub89c\ub89d\ub89e\ub89f\ub8a0\ub8a1\ub8a2\ub8a3\ub8a4\ub8a5\ub8a6\ub8a7\ub8a8\ub8a9\ub8aa\ub8ab\ub8ac\ub8ad\ub8ae\ub8af\ub8b0\ub8b1\ub8b2\ub8b3\ub8b4\ub8b5\ub8b6\ub8b7\ub8b8\ub8b9\ub8ba\ub8bb\ub8bc\ub8bd\ub8be\ub8bf\ub8c0\ub8c1\ub8c2\ub8c3\ub8c4\ub8c5\ub8c6\ub8c7\ub8c8\ub8c9\ub8ca\ub8cb\ub8cc\ub8cd\ub8ce\ub8cf\ub8d0\ub8d1\ub8d2\ub8d3\ub8d4\ub8d5\ub8d6\ub8d7\ub8d8\ub8d9\ub8da\ub8db\ub8dc\ub8dd\ub8de\ub8df\ub8e0\ub8e1\ub8e2\ub8e3\ub8e4\ub8e5\ub8e6\ub8e7\ub8e8\ub8e9\ub8ea\ub8eb\ub8ec\ub8ed\ub8ee\ub8ef\ub8f0\ub8f1\ub8f2\ub8f3\ub8f4\ub8f5\ub8f6\ub8f7\ub8f8\ub8f9\ub8fa\ub8fb\ub8fc\ub8fd\ub8fe\ub8ff\ub900\ub901\ub902\ub903\ub904\ub905\ub906\ub907\ub908\ub909\ub90a\ub90b\ub90c\ub90d\ub90e\ub90f\ub910\ub911\ub912\ub913\ub914\ub915\ub916\ub917\ub918\ub919\ub91a\ub91b\ub91c\ub91d\ub91e\ub91f\ub920\ub921\ub922\ub923\ub924\ub925\ub926\ub927\ub928\ub929\ub92a\ub92b\ub92c\ub92d\ub92e\ub92f\ub930\ub931\ub932\ub933\ub934\ub935\ub936\ub937\ub938\ub939\ub93a\ub93b\ub93c\ub93d\ub93e\ub93f\ub940\ub941\ub942\ub943\ub944\ub945\ub946\ub947\ub948\ub949\ub94a\ub94b\ub94c\ub94d\ub94e\ub94f\ub950\ub951\ub952\ub953\ub954\ub955\ub956\ub957\ub958\ub959\ub95a\ub95b\ub95c\ub95d\ub95e\ub95f\ub960\ub961\ub962\ub963\ub964\ub965\ub966\ub967\ub968\ub969\ub96a\ub96b\ub96c\ub96d\ub96e\ub96f\ub970\ub971\ub972\ub973\ub974\ub975\ub976\ub977\ub978\ub979\ub97a\ub97b\ub97c\ub97d\ub97e\ub97f\ub980\ub981\ub982\ub983\ub984\ub985\ub986\ub987\ub988\ub989\ub98a\ub98b\ub98c\ub98d\ub98e\ub98f\ub990\ub991\ub992\ub993\ub994\ub995\ub996\ub997\ub998\ub999\ub99a\ub99b\ub99c\ub99d\ub99e\ub99f\ub9a0\ub9a1\ub9a2\ub9a3\ub9a4\ub9a5\ub9a6\ub9a7\ub9a8\ub9a9\ub9aa\ub9ab\ub9ac\ub9ad\ub9ae\ub9af\ub9b0\ub9b1\ub9b2\ub9b3\ub9b4\ub9b5\ub9b6\ub9b7\ub9b8\ub9b9\ub9ba\ub9bb\ub9bc\ub9bd\ub9be\ub9bf\ub9c0\ub9c1\ub9c2\ub9c3\ub9c4\ub9c5\ub9c6\ub9c7\ub9c8\ub9c9\ub9ca\ub9cb\ub9cc\ub9cd\ub9ce\ub9cf\ub9d0\ub9d1\ub9d2\ub9d3\ub9d4\ub9d5\ub9d6\ub9d7\ub9d8\ub9d9\ub9da\ub9db\ub9dc\ub9dd\ub9de\ub9df\ub9e0\ub9e1\ub9e2\ub9e3\ub9e4\ub9e5\ub9e6\ub9e7\ub9e8\ub9e9\ub9ea\ub9eb\ub9ec\ub9ed\ub9ee\ub9ef\ub9f0\ub9f1\ub9f2\ub9f3\ub9f4\ub9f5\ub9f6\ub9f7\ub9f8\ub9f9\ub9fa\ub9fb\ub9fc\ub9fd\ub9fe\ub9ff\uba00\uba01\uba02\uba03\uba04\uba05\uba06\uba07\uba08\uba09\uba0a\uba0b\uba0c\uba0d\uba0e\uba0f\uba10\uba11\uba12\uba13\uba14\uba15\uba16\uba17\uba18\uba19\uba1a\uba1b\uba1c\uba1d\uba1e\uba1f\uba20\uba21\uba22\uba23\uba24\uba25\uba26\uba27\uba28\uba29\uba2a\uba2b\uba2c\uba2d\uba2e\uba2f\uba30\uba31\uba32\uba33\uba34\uba35\uba36\uba37\uba38\uba39\uba3a\uba3b\uba3c\uba3d\uba3e\uba3f\uba40\uba41\uba42\uba43\uba44\uba45\uba46\uba47\uba48\uba49\uba4a\uba4b\uba4c\uba4d\uba4e\uba4f\uba50\uba51\uba52\uba53\uba54\uba55\uba56\uba57\uba58\uba59\uba5a\uba5b\uba5c\uba5d\uba5e\uba5f\uba60\uba61\uba62\uba63\uba64\uba65\uba66\uba67\uba68\uba69\uba6a\uba6b\uba6c\uba6d\uba6e\uba6f\uba70\uba71\uba72\uba73\uba74\uba75\uba76\uba77\uba78\uba79\uba7a\uba7b\uba7c\uba7d\uba7e\uba7f\uba80\uba81\uba82\uba83\uba84\uba85\uba86\uba87\uba88\uba89\uba8a\uba8b\uba8c\uba8d\uba8e\uba8f\uba90\uba91\uba92\uba93\uba94\uba95\uba96\uba97\uba98\uba99\uba9a\uba9b\uba9c\uba9d\uba9e\uba9f\ubaa0\ubaa1\ubaa2\ubaa3\ubaa4\ubaa5\ubaa6\ubaa7\ubaa8\ubaa9\ubaaa\ubaab\ubaac\ubaad\ubaae\ubaaf\ubab0\ubab1\ubab2\ubab3\ubab4\ubab5\ubab6\ubab7\ubab8\ubab9\ubaba\ubabb\ubabc\ubabd\ubabe\ubabf\ubac0\ubac1\ubac2\ubac3\ubac4\ubac5\ubac6\ubac7\ubac8\ubac9\ubaca\ubacb\ubacc\ubacd\ubace\ubacf\ubad0\ubad1\ubad2\ubad3\ubad4\ubad5\ubad6\ubad7\ubad8\ubad9\ubada\ubadb\ubadc\ubadd\ubade\ubadf\ubae0\ubae1\ubae2\ubae3\ubae4\ubae5\ubae6\ubae7\ubae8\ubae9\ubaea\ubaeb\ubaec\ubaed\ubaee\ubaef\ubaf0\ubaf1\ubaf2\ubaf3\ubaf4\ubaf5\ubaf6\ubaf7\ubaf8\ubaf9\ubafa\ubafb\ubafc\ubafd\ubafe\ubaff\ubb00\ubb01\ubb02\ubb03\ubb04\ubb05\ubb06\ubb07\ubb08\ubb09\ubb0a\ubb0b\ubb0c\ubb0d\ubb0e\ubb0f\ubb10\ubb11\ubb12\ubb13\ubb14\ubb15\ubb16\ubb17\ubb18\ubb19\ubb1a\ubb1b\ubb1c\ubb1d\ubb1e\ubb1f\ubb20\ubb21\ubb22\ubb23\ubb24\ubb25\ubb26\ubb27\ubb28\ubb29\ubb2a\ubb2b\ubb2c\ubb2d\ubb2e\ubb2f\ubb30\ubb31\ubb32\ubb33\ubb34\ubb35\ubb36\ubb37\ubb38\ubb39\ubb3a\ubb3b\ubb3c\ubb3d\ubb3e\ubb3f\ubb40\ubb41\ubb42\ubb43\ubb44\ubb45\ubb46\ubb47\ubb48\ubb49\ubb4a\ubb4b\ubb4c\ubb4d\ubb4e\ubb4f\ubb50\ubb51\ubb52\ubb53\ubb54\ubb55\ubb56\ubb57\ubb58\ubb59\ubb5a\ubb5b\ubb5c\ubb5d\ubb5e\ubb5f\ubb60\ubb61\ubb62\ubb63\ubb64\ubb65\ubb66\ubb67\ubb68\ubb69\ubb6a\ubb6b\ubb6c\ubb6d\ubb6e\ubb6f\ubb70\ubb71\ubb72\ubb73\ubb74\ubb75\ubb76\ubb77\ubb78\ubb79\ubb7a\ubb7b\ubb7c\ubb7d\ubb7e\ubb7f\ubb80\ubb81\ubb82\ubb83\ubb84\ubb85\ubb86\ubb87\ubb88\ubb89\ubb8a\ubb8b\ubb8c\ubb8d\ubb8e\ubb8f\ubb90\ubb91\ubb92\ubb93\ubb94\ubb95\ubb96\ubb97\ubb98\ubb99\ubb9a\ubb9b\ubb9c\ubb9d\ubb9e\ubb9f\ubba0\ubba1\ubba2\ubba3\ubba4\ubba5\ubba6\ubba7\ubba8\ubba9\ubbaa\ubbab\ubbac\ubbad\ubbae\ubbaf\ubbb0\ubbb1\ubbb2\ubbb3\ubbb4\ubbb5\ubbb6\ubbb7\ubbb8\ubbb9\ubbba\ubbbb\ubbbc\ubbbd\ubbbe\ubbbf\ubbc0\ubbc1\ubbc2\ubbc3\ubbc4\ubbc5\ubbc6\ubbc7\ubbc8\ubbc9\ubbca\ubbcb\ubbcc\ubbcd\ubbce\ubbcf\ubbd0\ubbd1\ubbd2\ubbd3\ubbd4\ubbd5\ubbd6\ubbd7\ubbd8\ubbd9\ubbda\ubbdb\ubbdc\ubbdd\ubbde\ubbdf\ubbe0\ubbe1\ubbe2\ubbe3\ubbe4\ubbe5\ubbe6\ubbe7\ubbe8\ubbe9\ubbea\ubbeb\ubbec\ubbed\ubbee\ubbef\ubbf0\ubbf1\ubbf2\ubbf3\ubbf4\ubbf5\ubbf6\ubbf7\ubbf8\ubbf9\ubbfa\ubbfb\ubbfc\ubbfd\ubbfe\ubbff\ubc00\ubc01\ubc02\ubc03\ubc04\ubc05\ubc06\ubc07\ubc08\ubc09\ubc0a\ubc0b\ubc0c\ubc0d\ubc0e\ubc0f\ubc10\ubc11\ubc12\ubc13\ubc14\ubc15\ubc16\ubc17\ubc18\ubc19\ubc1a\ubc1b\ubc1c\ubc1d\ubc1e\ubc1f\ubc20\ubc21\ubc22\ubc23\ubc24\ubc25\ubc26\ubc27\ubc28\ubc29\ubc2a\ubc2b\ubc2c\ubc2d\ubc2e\ubc2f\ubc30\ubc31\ubc32\ubc33\ubc34\ubc35\ubc36\ubc37\ubc38\ubc39\ubc3a\ubc3b\ubc3c\ubc3d\ubc3e\ubc3f\ubc40\ubc41\ubc42\ubc43\ubc44\ubc45\ubc46\ubc47\ubc48\ubc49\ubc4a\ubc4b\ubc4c\ubc4d\ubc4e\ubc4f\ubc50\ubc51\ubc52\ubc53\ubc54\ubc55\ubc56\ubc57\ubc58\ubc59\ubc5a\ubc5b\ubc5c\ubc5d\ubc5e\ubc5f\ubc60\ubc61\ubc62\ubc63\ubc64\ubc65\ubc66\ubc67\ubc68\ubc69\ubc6a\ubc6b\ubc6c\ubc6d\ubc6e\ubc6f\ubc70\ubc71\ubc72\ubc73\ubc74\ubc75\ubc76\ubc77\ubc78\ubc79\ubc7a\ubc7b\ubc7c\ubc7d\ubc7e\ubc7f\ubc80\ubc81\ubc82\ubc83\ubc84\ubc85\ubc86\ubc87\ubc88\ubc89\ubc8a\ubc8b\ubc8c\ubc8d\ubc8e\ubc8f\ubc90\ubc91\ubc92\ubc93\ubc94\ubc95\ubc96\ubc97\ubc98\ubc99\ubc9a\ubc9b\ubc9c\ubc9d\ubc9e\ubc9f\ubca0\ubca1\ubca2\ubca3\ubca4\ubca5\ubca6\ubca7\ubca8\ubca9\ubcaa\ubcab\ubcac\ubcad\ubcae\ubcaf\ubcb0\ubcb1\ubcb2\ubcb3\ubcb4\ubcb5\ubcb6\ubcb7\ubcb8\ubcb9\ubcba\ubcbb\ubcbc\ubcbd\ubcbe\ubcbf\ubcc0\ubcc1\ubcc2\ubcc3\ubcc4\ubcc5\ubcc6\ubcc7\ubcc8\ubcc9\ubcca\ubccb\ubccc\ubccd\ubcce\ubccf\ubcd0\ubcd1\ubcd2\ubcd3\ubcd4\ubcd5\ubcd6\ubcd7\ubcd8\ubcd9\ubcda\ubcdb\ubcdc\ubcdd\ubcde\ubcdf\ubce0\ubce1\ubce2\ubce3\ubce4\ubce5\ubce6\ubce7\ubce8\ubce9\ubcea\ubceb\ubcec\ubced\ubcee\ubcef\ubcf0\ubcf1\ubcf2\ubcf3\ubcf4\ubcf5\ubcf6\ubcf7\ubcf8\ubcf9\ubcfa\ubcfb\ubcfc\ubcfd\ubcfe\ubcff\ubd00\ubd01\ubd02\ubd03\ubd04\ubd05\ubd06\ubd07\ubd08\ubd09\ubd0a\ubd0b\ubd0c\ubd0d\ubd0e\ubd0f\ubd10\ubd11\ubd12\ubd13\ubd14\ubd15\ubd16\ubd17\ubd18\ubd19\ubd1a\ubd1b\ubd1c\ubd1d\ubd1e\ubd1f\ubd20\ubd21\ubd22\ubd23\ubd24\ubd25\ubd26\ubd27\ubd28\ubd29\ubd2a\ubd2b\ubd2c\ubd2d\ubd2e\ubd2f\ubd30\ubd31\ubd32\ubd33\ubd34\ubd35\ubd36\ubd37\ubd38\ubd39\ubd3a\ubd3b\ubd3c\ubd3d\ubd3e\ubd3f\ubd40\ubd41\ubd42\ubd43\ubd44\ubd45\ubd46\ubd47\ubd48\ubd49\ubd4a\ubd4b\ubd4c\ubd4d\ubd4e\ubd4f\ubd50\ubd51\ubd52\ubd53\ubd54\ubd55\ubd56\ubd57\ubd58\ubd59\ubd5a\ubd5b\ubd5c\ubd5d\ubd5e\ubd5f\ubd60\ubd61\ubd62\ubd63\ubd64\ubd65\ubd66\ubd67\ubd68\ubd69\ubd6a\ubd6b\ubd6c\ubd6d\ubd6e\ubd6f\ubd70\ubd71\ubd72\ubd73\ubd74\ubd75\ubd76\ubd77\ubd78\ubd79\ubd7a\ubd7b\ubd7c\ubd7d\ubd7e\ubd7f\ubd80\ubd81\ubd82\ubd83\ubd84\ubd85\ubd86\ubd87\ubd88\ubd89\ubd8a\ubd8b\ubd8c\ubd8d\ubd8e\ubd8f\ubd90\ubd91\ubd92\ubd93\ubd94\ubd95\ubd96\ubd97\ubd98\ubd99\ubd9a\ubd9b\ubd9c\ubd9d\ubd9e\ubd9f\ubda0\ubda1\ubda2\ubda3\ubda4\ubda5\ubda6\ubda7\ubda8\ubda9\ubdaa\ubdab\ubdac\ubdad\ubdae\ubdaf\ubdb0\ubdb1\ubdb2\ubdb3\ubdb4\ubdb5\ubdb6\ubdb7\ubdb8\ubdb9\ubdba\ubdbb\ubdbc\ubdbd\ubdbe\ubdbf\ubdc0\ubdc1\ubdc2\ubdc3\ubdc4\ubdc5\ubdc6\ubdc7\ubdc8\ubdc9\ubdca\ubdcb\ubdcc\ubdcd\ubdce\ubdcf\ubdd0\ubdd1\ubdd2\ubdd3\ubdd4\ubdd5\ubdd6\ubdd7\ubdd8\ubdd9\ubdda\ubddb\ubddc\ubddd\ubdde\ubddf\ubde0\ubde1\ubde2\ubde3\ubde4\ubde5\ubde6\ubde7\ubde8\ubde9\ubdea\ubdeb\ubdec\ubded\ubdee\ubdef\ubdf0\ubdf1\ubdf2\ubdf3\ubdf4\ubdf5\ubdf6\ubdf7\ubdf8\ubdf9\ubdfa\ubdfb\ubdfc\ubdfd\ubdfe\ubdff\ube00\ube01\ube02\ube03\ube04\ube05\ube06\ube07\ube08\ube09\ube0a\ube0b\ube0c\ube0d\ube0e\ube0f\ube10\ube11\ube12\ube13\ube14\ube15\ube16\ube17\ube18\ube19\ube1a\ube1b\ube1c\ube1d\ube1e\ube1f\ube20\ube21\ube22\ube23\ube24\ube25\ube26\ube27\ube28\ube29\ube2a\ube2b\ube2c\ube2d\ube2e\ube2f\ube30\ube31\ube32\ube33\ube34\ube35\ube36\ube37\ube38\ube39\ube3a\ube3b\ube3c\ube3d\ube3e\ube3f\ube40\ube41\ube42\ube43\ube44\ube45\ube46\ube47\ube48\ube49\ube4a\ube4b\ube4c\ube4d\ube4e\ube4f\ube50\ube51\ube52\ube53\ube54\ube55\ube56\ube57\ube58\ube59\ube5a\ube5b\ube5c\ube5d\ube5e\ube5f\ube60\ube61\ube62\ube63\ube64\ube65\ube66\ube67\ube68\ube69\ube6a\ube6b\ube6c\ube6d\ube6e\ube6f\ube70\ube71\ube72\ube73\ube74\ube75\ube76\ube77\ube78\ube79\ube7a\ube7b\ube7c\ube7d\ube7e\ube7f\ube80\ube81\ube82\ube83\ube84\ube85\ube86\ube87\ube88\ube89\ube8a\ube8b\ube8c\ube8d\ube8e\ube8f\ube90\ube91\ube92\ube93\ube94\ube95\ube96\ube97\ube98\ube99\ube9a\ube9b\ube9c\ube9d\ube9e\ube9f\ubea0\ubea1\ubea2\ubea3\ubea4\ubea5\ubea6\ubea7\ubea8\ubea9\ubeaa\ubeab\ubeac\ubead\ubeae\ubeaf\ubeb0\ubeb1\ubeb2\ubeb3\ubeb4\ubeb5\ubeb6\ubeb7\ubeb8\ubeb9\ubeba\ubebb\ubebc\ubebd\ubebe\ubebf\ubec0\ubec1\ubec2\ubec3\ubec4\ubec5\ubec6\ubec7\ubec8\ubec9\ubeca\ubecb\ubecc\ubecd\ubece\ubecf\ubed0\ubed1\ubed2\ubed3\ubed4\ubed5\ubed6\ubed7\ubed8\ubed9\ubeda\ubedb\ubedc\ubedd\ubede\ubedf\ubee0\ubee1\ubee2\ubee3\ubee4\ubee5\ubee6\ubee7\ubee8\ubee9\ubeea\ubeeb\ubeec\ubeed\ubeee\ubeef\ubef0\ubef1\ubef2\ubef3\ubef4\ubef5\ubef6\ubef7\ubef8\ubef9\ubefa\ubefb\ubefc\ubefd\ubefe\ubeff\ubf00\ubf01\ubf02\ubf03\ubf04\ubf05\ubf06\ubf07\ubf08\ubf09\ubf0a\ubf0b\ubf0c\ubf0d\ubf0e\ubf0f\ubf10\ubf11\ubf12\ubf13\ubf14\ubf15\ubf16\ubf17\ubf18\ubf19\ubf1a\ubf1b\ubf1c\ubf1d\ubf1e\ubf1f\ubf20\ubf21\ubf22\ubf23\ubf24\ubf25\ubf26\ubf27\ubf28\ubf29\ubf2a\ubf2b\ubf2c\ubf2d\ubf2e\ubf2f\ubf30\ubf31\ubf32\ubf33\ubf34\ubf35\ubf36\ubf37\ubf38\ubf39\ubf3a\ubf3b\ubf3c\ubf3d\ubf3e\ubf3f\ubf40\ubf41\ubf42\ubf43\ubf44\ubf45\ubf46\ubf47\ubf48\ubf49\ubf4a\ubf4b\ubf4c\ubf4d\ubf4e\ubf4f\ubf50\ubf51\ubf52\ubf53\ubf54\ubf55\ubf56\ubf57\ubf58\ubf59\ubf5a\ubf5b\ubf5c\ubf5d\ubf5e\ubf5f\ubf60\ubf61\ubf62\ubf63\ubf64\ubf65\ubf66\ubf67\ubf68\ubf69\ubf6a\ubf6b\ubf6c\ubf6d\ubf6e\ubf6f\ubf70\ubf71\ubf72\ubf73\ubf74\ubf75\ubf76\ubf77\ubf78\ubf79\ubf7a\ubf7b\ubf7c\ubf7d\ubf7e\ubf7f\ubf80\ubf81\ubf82\ubf83\ubf84\ubf85\ubf86\ubf87\ubf88\ubf89\ubf8a\ubf8b\ubf8c\ubf8d\ubf8e\ubf8f\ubf90\ubf91\ubf92\ubf93\ubf94\ubf95\ubf96\ubf97\ubf98\ubf99\ubf9a\ubf9b\ubf9c\ubf9d\ubf9e\ubf9f\ubfa0\ubfa1\ubfa2\ubfa3\ubfa4\ubfa5\ubfa6\ubfa7\ubfa8\ubfa9\ubfaa\ubfab\ubfac\ubfad\ubfae\ubfaf\ubfb0\ubfb1\ubfb2\ubfb3\ubfb4\ubfb5\ubfb6\ubfb7\ubfb8\ubfb9\ubfba\ubfbb\ubfbc\ubfbd\ubfbe\ubfbf\ubfc0\ubfc1\ubfc2\ubfc3\ubfc4\ubfc5\ubfc6\ubfc7\ubfc8\ubfc9\ubfca\ubfcb\ubfcc\ubfcd\ubfce\ubfcf\ubfd0\ubfd1\ubfd2\ubfd3\ubfd4\ubfd5\ubfd6\ubfd7\ubfd8\ubfd9\ubfda\ubfdb\ubfdc\ubfdd\ubfde\ubfdf\ubfe0\ubfe1\ubfe2\ubfe3\ubfe4\ubfe5\ubfe6\ubfe7\ubfe8\ubfe9\ubfea\ubfeb\ubfec\ubfed\ubfee\ubfef\ubff0\ubff1\ubff2\ubff3\ubff4\ubff5\ubff6\ubff7\ubff8\ubff9\ubffa\ubffb\ubffc\ubffd\ubffe\ubfff\uc000\uc001\uc002\uc003\uc004\uc005\uc006\uc007\uc008\uc009\uc00a\uc00b\uc00c\uc00d\uc00e\uc00f\uc010\uc011\uc012\uc013\uc014\uc015\uc016\uc017\uc018\uc019\uc01a\uc01b\uc01c\uc01d\uc01e\uc01f\uc020\uc021\uc022\uc023\uc024\uc025\uc026\uc027\uc028\uc029\uc02a\uc02b\uc02c\uc02d\uc02e\uc02f\uc030\uc031\uc032\uc033\uc034\uc035\uc036\uc037\uc038\uc039\uc03a\uc03b\uc03c\uc03d\uc03e\uc03f\uc040\uc041\uc042\uc043\uc044\uc045\uc046\uc047\uc048\uc049\uc04a\uc04b\uc04c\uc04d\uc04e\uc04f\uc050\uc051\uc052\uc053\uc054\uc055\uc056\uc057\uc058\uc059\uc05a\uc05b\uc05c\uc05d\uc05e\uc05f\uc060\uc061\uc062\uc063\uc064\uc065\uc066\uc067\uc068\uc069\uc06a\uc06b\uc06c\uc06d\uc06e\uc06f\uc070\uc071\uc072\uc073\uc074\uc075\uc076\uc077\uc078\uc079\uc07a\uc07b\uc07c\uc07d\uc07e\uc07f\uc080\uc081\uc082\uc083\uc084\uc085\uc086\uc087\uc088\uc089\uc08a\uc08b\uc08c\uc08d\uc08e\uc08f\uc090\uc091\uc092\uc093\uc094\uc095\uc096\uc097\uc098\uc099\uc09a\uc09b\uc09c\uc09d\uc09e\uc09f\uc0a0\uc0a1\uc0a2\uc0a3\uc0a4\uc0a5\uc0a6\uc0a7\uc0a8\uc0a9\uc0aa\uc0ab\uc0ac\uc0ad\uc0ae\uc0af\uc0b0\uc0b1\uc0b2\uc0b3\uc0b4\uc0b5\uc0b6\uc0b7\uc0b8\uc0b9\uc0ba\uc0bb\uc0bc\uc0bd\uc0be\uc0bf\uc0c0\uc0c1\uc0c2\uc0c3\uc0c4\uc0c5\uc0c6\uc0c7\uc0c8\uc0c9\uc0ca\uc0cb\uc0cc\uc0cd\uc0ce\uc0cf\uc0d0\uc0d1\uc0d2\uc0d3\uc0d4\uc0d5\uc0d6\uc0d7\uc0d8\uc0d9\uc0da\uc0db\uc0dc\uc0dd\uc0de\uc0df\uc0e0\uc0e1\uc0e2\uc0e3\uc0e4\uc0e5\uc0e6\uc0e7\uc0e8\uc0e9\uc0ea\uc0eb\uc0ec\uc0ed\uc0ee\uc0ef\uc0f0\uc0f1\uc0f2\uc0f3\uc0f4\uc0f5\uc0f6\uc0f7\uc0f8\uc0f9\uc0fa\uc0fb\uc0fc\uc0fd\uc0fe\uc0ff\uc100\uc101\uc102\uc103\uc104\uc105\uc106\uc107\uc108\uc109\uc10a\uc10b\uc10c\uc10d\uc10e\uc10f\uc110\uc111\uc112\uc113\uc114\uc115\uc116\uc117\uc118\uc119\uc11a\uc11b\uc11c\uc11d\uc11e\uc11f\uc120\uc121\uc122\uc123\uc124\uc125\uc126\uc127\uc128\uc129\uc12a\uc12b\uc12c\uc12d\uc12e\uc12f\uc130\uc131\uc132\uc133\uc134\uc135\uc136\uc137\uc138\uc139\uc13a\uc13b\uc13c\uc13d\uc13e\uc13f\uc140\uc141\uc142\uc143\uc144\uc145\uc146\uc147\uc148\uc149\uc14a\uc14b\uc14c\uc14d\uc14e\uc14f\uc150\uc151\uc152\uc153\uc154\uc155\uc156\uc157\uc158\uc159\uc15a\uc15b\uc15c\uc15d\uc15e\uc15f\uc160\uc161\uc162\uc163\uc164\uc165\uc166\uc167\uc168\uc169\uc16a\uc16b\uc16c\uc16d\uc16e\uc16f\uc170\uc171\uc172\uc173\uc174\uc175\uc176\uc177\uc178\uc179\uc17a\uc17b\uc17c\uc17d\uc17e\uc17f\uc180\uc181\uc182\uc183\uc184\uc185\uc186\uc187\uc188\uc189\uc18a\uc18b\uc18c\uc18d\uc18e\uc18f\uc190\uc191\uc192\uc193\uc194\uc195\uc196\uc197\uc198\uc199\uc19a\uc19b\uc19c\uc19d\uc19e\uc19f\uc1a0\uc1a1\uc1a2\uc1a3\uc1a4\uc1a5\uc1a6\uc1a7\uc1a8\uc1a9\uc1aa\uc1ab\uc1ac\uc1ad\uc1ae\uc1af\uc1b0\uc1b1\uc1b2\uc1b3\uc1b4\uc1b5\uc1b6\uc1b7\uc1b8\uc1b9\uc1ba\uc1bb\uc1bc\uc1bd\uc1be\uc1bf\uc1c0\uc1c1\uc1c2\uc1c3\uc1c4\uc1c5\uc1c6\uc1c7\uc1c8\uc1c9\uc1ca\uc1cb\uc1cc\uc1cd\uc1ce\uc1cf\uc1d0\uc1d1\uc1d2\uc1d3\uc1d4\uc1d5\uc1d6\uc1d7\uc1d8\uc1d9\uc1da\uc1db\uc1dc\uc1dd\uc1de\uc1df\uc1e0\uc1e1\uc1e2\uc1e3\uc1e4\uc1e5\uc1e6\uc1e7\uc1e8\uc1e9\uc1ea\uc1eb\uc1ec\uc1ed\uc1ee\uc1ef\uc1f0\uc1f1\uc1f2\uc1f3\uc1f4\uc1f5\uc1f6\uc1f7\uc1f8\uc1f9\uc1fa\uc1fb\uc1fc\uc1fd\uc1fe\uc1ff\uc200\uc201\uc202\uc203\uc204\uc205\uc206\uc207\uc208\uc209\uc20a\uc20b\uc20c\uc20d\uc20e\uc20f\uc210\uc211\uc212\uc213\uc214\uc215\uc216\uc217\uc218\uc219\uc21a\uc21b\uc21c\uc21d\uc21e\uc21f\uc220\uc221\uc222\uc223\uc224\uc225\uc226\uc227\uc228\uc229\uc22a\uc22b\uc22c\uc22d\uc22e\uc22f\uc230\uc231\uc232\uc233\uc234\uc235\uc236\uc237\uc238\uc239\uc23a\uc23b\uc23c\uc23d\uc23e\uc23f\uc240\uc241\uc242\uc243\uc244\uc245\uc246\uc247\uc248\uc249\uc24a\uc24b\uc24c\uc24d\uc24e\uc24f\uc250\uc251\uc252\uc253\uc254\uc255\uc256\uc257\uc258\uc259\uc25a\uc25b\uc25c\uc25d\uc25e\uc25f\uc260\uc261\uc262\uc263\uc264\uc265\uc266\uc267\uc268\uc269\uc26a\uc26b\uc26c\uc26d\uc26e\uc26f\uc270\uc271\uc272\uc273\uc274\uc275\uc276\uc277\uc278\uc279\uc27a\uc27b\uc27c\uc27d\uc27e\uc27f\uc280\uc281\uc282\uc283\uc284\uc285\uc286\uc287\uc288\uc289\uc28a\uc28b\uc28c\uc28d\uc28e\uc28f\uc290\uc291\uc292\uc293\uc294\uc295\uc296\uc297\uc298\uc299\uc29a\uc29b\uc29c\uc29d\uc29e\uc29f\uc2a0\uc2a1\uc2a2\uc2a3\uc2a4\uc2a5\uc2a6\uc2a7\uc2a8\uc2a9\uc2aa\uc2ab\uc2ac\uc2ad\uc2ae\uc2af\uc2b0\uc2b1\uc2b2\uc2b3\uc2b4\uc2b5\uc2b6\uc2b7\uc2b8\uc2b9\uc2ba\uc2bb\uc2bc\uc2bd\uc2be\uc2bf\uc2c0\uc2c1\uc2c2\uc2c3\uc2c4\uc2c5\uc2c6\uc2c7\uc2c8\uc2c9\uc2ca\uc2cb\uc2cc\uc2cd\uc2ce\uc2cf\uc2d0\uc2d1\uc2d2\uc2d3\uc2d4\uc2d5\uc2d6\uc2d7\uc2d8\uc2d9\uc2da\uc2db\uc2dc\uc2dd\uc2de\uc2df\uc2e0\uc2e1\uc2e2\uc2e3\uc2e4\uc2e5\uc2e6\uc2e7\uc2e8\uc2e9\uc2ea\uc2eb\uc2ec\uc2ed\uc2ee\uc2ef\uc2f0\uc2f1\uc2f2\uc2f3\uc2f4\uc2f5\uc2f6\uc2f7\uc2f8\uc2f9\uc2fa\uc2fb\uc2fc\uc2fd\uc2fe\uc2ff\uc300\uc301\uc302\uc303\uc304\uc305\uc306\uc307\uc308\uc309\uc30a\uc30b\uc30c\uc30d\uc30e\uc30f\uc310\uc311\uc312\uc313\uc314\uc315\uc316\uc317\uc318\uc319\uc31a\uc31b\uc31c\uc31d\uc31e\uc31f\uc320\uc321\uc322\uc323\uc324\uc325\uc326\uc327\uc328\uc329\uc32a\uc32b\uc32c\uc32d\uc32e\uc32f\uc330\uc331\uc332\uc333\uc334\uc335\uc336\uc337\uc338\uc339\uc33a\uc33b\uc33c\uc33d\uc33e\uc33f\uc340\uc341\uc342\uc343\uc344\uc345\uc346\uc347\uc348\uc349\uc34a\uc34b\uc34c\uc34d\uc34e\uc34f\uc350\uc351\uc352\uc353\uc354\uc355\uc356\uc357\uc358\uc359\uc35a\uc35b\uc35c\uc35d\uc35e\uc35f\uc360\uc361\uc362\uc363\uc364\uc365\uc366\uc367\uc368\uc369\uc36a\uc36b\uc36c\uc36d\uc36e\uc36f\uc370\uc371\uc372\uc373\uc374\uc375\uc376\uc377\uc378\uc379\uc37a\uc37b\uc37c\uc37d\uc37e\uc37f\uc380\uc381\uc382\uc383\uc384\uc385\uc386\uc387\uc388\uc389\uc38a\uc38b\uc38c\uc38d\uc38e\uc38f\uc390\uc391\uc392\uc393\uc394\uc395\uc396\uc397\uc398\uc399\uc39a\uc39b\uc39c\uc39d\uc39e\uc39f\uc3a0\uc3a1\uc3a2\uc3a3\uc3a4\uc3a5\uc3a6\uc3a7\uc3a8\uc3a9\uc3aa\uc3ab\uc3ac\uc3ad\uc3ae\uc3af\uc3b0\uc3b1\uc3b2\uc3b3\uc3b4\uc3b5\uc3b6\uc3b7\uc3b8\uc3b9\uc3ba\uc3bb\uc3bc\uc3bd\uc3be\uc3bf\uc3c0\uc3c1\uc3c2\uc3c3\uc3c4\uc3c5\uc3c6\uc3c7\uc3c8\uc3c9\uc3ca\uc3cb\uc3cc\uc3cd\uc3ce\uc3cf\uc3d0\uc3d1\uc3d2\uc3d3\uc3d4\uc3d5\uc3d6\uc3d7\uc3d8\uc3d9\uc3da\uc3db\uc3dc\uc3dd\uc3de\uc3df\uc3e0\uc3e1\uc3e2\uc3e3\uc3e4\uc3e5\uc3e6\uc3e7\uc3e8\uc3e9\uc3ea\uc3eb\uc3ec\uc3ed\uc3ee\uc3ef\uc3f0\uc3f1\uc3f2\uc3f3\uc3f4\uc3f5\uc3f6\uc3f7\uc3f8\uc3f9\uc3fa\uc3fb\uc3fc\uc3fd\uc3fe\uc3ff\uc400\uc401\uc402\uc403\uc404\uc405\uc406\uc407\uc408\uc409\uc40a\uc40b\uc40c\uc40d\uc40e\uc40f\uc410\uc411\uc412\uc413\uc414\uc415\uc416\uc417\uc418\uc419\uc41a\uc41b\uc41c\uc41d\uc41e\uc41f\uc420\uc421\uc422\uc423\uc424\uc425\uc426\uc427\uc428\uc429\uc42a\uc42b\uc42c\uc42d\uc42e\uc42f\uc430\uc431\uc432\uc433\uc434\uc435\uc436\uc437\uc438\uc439\uc43a\uc43b\uc43c\uc43d\uc43e\uc43f\uc440\uc441\uc442\uc443\uc444\uc445\uc446\uc447\uc448\uc449\uc44a\uc44b\uc44c\uc44d\uc44e\uc44f\uc450\uc451\uc452\uc453\uc454\uc455\uc456\uc457\uc458\uc459\uc45a\uc45b\uc45c\uc45d\uc45e\uc45f\uc460\uc461\uc462\uc463\uc464\uc465\uc466\uc467\uc468\uc469\uc46a\uc46b\uc46c\uc46d\uc46e\uc46f\uc470\uc471\uc472\uc473\uc474\uc475\uc476\uc477\uc478\uc479\uc47a\uc47b\uc47c\uc47d\uc47e\uc47f\uc480\uc481\uc482\uc483\uc484\uc485\uc486\uc487\uc488\uc489\uc48a\uc48b\uc48c\uc48d\uc48e\uc48f\uc490\uc491\uc492\uc493\uc494\uc495\uc496\uc497\uc498\uc499\uc49a\uc49b\uc49c\uc49d\uc49e\uc49f\uc4a0\uc4a1\uc4a2\uc4a3\uc4a4\uc4a5\uc4a6\uc4a7\uc4a8\uc4a9\uc4aa\uc4ab\uc4ac\uc4ad\uc4ae\uc4af\uc4b0\uc4b1\uc4b2\uc4b3\uc4b4\uc4b5\uc4b6\uc4b7\uc4b8\uc4b9\uc4ba\uc4bb\uc4bc\uc4bd\uc4be\uc4bf\uc4c0\uc4c1\uc4c2\uc4c3\uc4c4\uc4c5\uc4c6\uc4c7\uc4c8\uc4c9\uc4ca\uc4cb\uc4cc\uc4cd\uc4ce\uc4cf\uc4d0\uc4d1\uc4d2\uc4d3\uc4d4\uc4d5\uc4d6\uc4d7\uc4d8\uc4d9\uc4da\uc4db\uc4dc\uc4dd\uc4de\uc4df\uc4e0\uc4e1\uc4e2\uc4e3\uc4e4\uc4e5\uc4e6\uc4e7\uc4e8\uc4e9\uc4ea\uc4eb\uc4ec\uc4ed\uc4ee\uc4ef\uc4f0\uc4f1\uc4f2\uc4f3\uc4f4\uc4f5\uc4f6\uc4f7\uc4f8\uc4f9\uc4fa\uc4fb\uc4fc\uc4fd\uc4fe\uc4ff\uc500\uc501\uc502\uc503\uc504\uc505\uc506\uc507\uc508\uc509\uc50a\uc50b\uc50c\uc50d\uc50e\uc50f\uc510\uc511\uc512\uc513\uc514\uc515\uc516\uc517\uc518\uc519\uc51a\uc51b\uc51c\uc51d\uc51e\uc51f\uc520\uc521\uc522\uc523\uc524\uc525\uc526\uc527\uc528\uc529\uc52a\uc52b\uc52c\uc52d\uc52e\uc52f\uc530\uc531\uc532\uc533\uc534\uc535\uc536\uc537\uc538\uc539\uc53a\uc53b\uc53c\uc53d\uc53e\uc53f\uc540\uc541\uc542\uc543\uc544\uc545\uc546\uc547\uc548\uc549\uc54a\uc54b\uc54c\uc54d\uc54e\uc54f\uc550\uc551\uc552\uc553\uc554\uc555\uc556\uc557\uc558\uc559\uc55a\uc55b\uc55c\uc55d\uc55e\uc55f\uc560\uc561\uc562\uc563\uc564\uc565\uc566\uc567\uc568\uc569\uc56a\uc56b\uc56c\uc56d\uc56e\uc56f\uc570\uc571\uc572\uc573\uc574\uc575\uc576\uc577\uc578\uc579\uc57a\uc57b\uc57c\uc57d\uc57e\uc57f\uc580\uc581\uc582\uc583\uc584\uc585\uc586\uc587\uc588\uc589\uc58a\uc58b\uc58c\uc58d\uc58e\uc58f\uc590\uc591\uc592\uc593\uc594\uc595\uc596\uc597\uc598\uc599\uc59a\uc59b\uc59c\uc59d\uc59e\uc59f\uc5a0\uc5a1\uc5a2\uc5a3\uc5a4\uc5a5\uc5a6\uc5a7\uc5a8\uc5a9\uc5aa\uc5ab\uc5ac\uc5ad\uc5ae\uc5af\uc5b0\uc5b1\uc5b2\uc5b3\uc5b4\uc5b5\uc5b6\uc5b7\uc5b8\uc5b9\uc5ba\uc5bb\uc5bc\uc5bd\uc5be\uc5bf\uc5c0\uc5c1\uc5c2\uc5c3\uc5c4\uc5c5\uc5c6\uc5c7\uc5c8\uc5c9\uc5ca\uc5cb\uc5cc\uc5cd\uc5ce\uc5cf\uc5d0\uc5d1\uc5d2\uc5d3\uc5d4\uc5d5\uc5d6\uc5d7\uc5d8\uc5d9\uc5da\uc5db\uc5dc\uc5dd\uc5de\uc5df\uc5e0\uc5e1\uc5e2\uc5e3\uc5e4\uc5e5\uc5e6\uc5e7\uc5e8\uc5e9\uc5ea\uc5eb\uc5ec\uc5ed\uc5ee\uc5ef\uc5f0\uc5f1\uc5f2\uc5f3\uc5f4\uc5f5\uc5f6\uc5f7\uc5f8\uc5f9\uc5fa\uc5fb\uc5fc\uc5fd\uc5fe\uc5ff\uc600\uc601\uc602\uc603\uc604\uc605\uc606\uc607\uc608\uc609\uc60a\uc60b\uc60c\uc60d\uc60e\uc60f\uc610\uc611\uc612\uc613\uc614\uc615\uc616\uc617\uc618\uc619\uc61a\uc61b\uc61c\uc61d\uc61e\uc61f\uc620\uc621\uc622\uc623\uc624\uc625\uc626\uc627\uc628\uc629\uc62a\uc62b\uc62c\uc62d\uc62e\uc62f\uc630\uc631\uc632\uc633\uc634\uc635\uc636\uc637\uc638\uc639\uc63a\uc63b\uc63c\uc63d\uc63e\uc63f\uc640\uc641\uc642\uc643\uc644\uc645\uc646\uc647\uc648\uc649\uc64a\uc64b\uc64c\uc64d\uc64e\uc64f\uc650\uc651\uc652\uc653\uc654\uc655\uc656\uc657\uc658\uc659\uc65a\uc65b\uc65c\uc65d\uc65e\uc65f\uc660\uc661\uc662\uc663\uc664\uc665\uc666\uc667\uc668\uc669\uc66a\uc66b\uc66c\uc66d\uc66e\uc66f\uc670\uc671\uc672\uc673\uc674\uc675\uc676\uc677\uc678\uc679\uc67a\uc67b\uc67c\uc67d\uc67e\uc67f\uc680\uc681\uc682\uc683\uc684\uc685\uc686\uc687\uc688\uc689\uc68a\uc68b\uc68c\uc68d\uc68e\uc68f\uc690\uc691\uc692\uc693\uc694\uc695\uc696\uc697\uc698\uc699\uc69a\uc69b\uc69c\uc69d\uc69e\uc69f\uc6a0\uc6a1\uc6a2\uc6a3\uc6a4\uc6a5\uc6a6\uc6a7\uc6a8\uc6a9\uc6aa\uc6ab\uc6ac\uc6ad\uc6ae\uc6af\uc6b0\uc6b1\uc6b2\uc6b3\uc6b4\uc6b5\uc6b6\uc6b7\uc6b8\uc6b9\uc6ba\uc6bb\uc6bc\uc6bd\uc6be\uc6bf\uc6c0\uc6c1\uc6c2\uc6c3\uc6c4\uc6c5\uc6c6\uc6c7\uc6c8\uc6c9\uc6ca\uc6cb\uc6cc\uc6cd\uc6ce\uc6cf\uc6d0\uc6d1\uc6d2\uc6d3\uc6d4\uc6d5\uc6d6\uc6d7\uc6d8\uc6d9\uc6da\uc6db\uc6dc\uc6dd\uc6de\uc6df\uc6e0\uc6e1\uc6e2\uc6e3\uc6e4\uc6e5\uc6e6\uc6e7\uc6e8\uc6e9\uc6ea\uc6eb\uc6ec\uc6ed\uc6ee\uc6ef\uc6f0\uc6f1\uc6f2\uc6f3\uc6f4\uc6f5\uc6f6\uc6f7\uc6f8\uc6f9\uc6fa\uc6fb\uc6fc\uc6fd\uc6fe\uc6ff\uc700\uc701\uc702\uc703\uc704\uc705\uc706\uc707\uc708\uc709\uc70a\uc70b\uc70c\uc70d\uc70e\uc70f\uc710\uc711\uc712\uc713\uc714\uc715\uc716\uc717\uc718\uc719\uc71a\uc71b\uc71c\uc71d\uc71e\uc71f\uc720\uc721\uc722\uc723\uc724\uc725\uc726\uc727\uc728\uc729\uc72a\uc72b\uc72c\uc72d\uc72e\uc72f\uc730\uc731\uc732\uc733\uc734\uc735\uc736\uc737\uc738\uc739\uc73a\uc73b\uc73c\uc73d\uc73e\uc73f\uc740\uc741\uc742\uc743\uc744\uc745\uc746\uc747\uc748\uc749\uc74a\uc74b\uc74c\uc74d\uc74e\uc74f\uc750\uc751\uc752\uc753\uc754\uc755\uc756\uc757\uc758\uc759\uc75a\uc75b\uc75c\uc75d\uc75e\uc75f\uc760\uc761\uc762\uc763\uc764\uc765\uc766\uc767\uc768\uc769\uc76a\uc76b\uc76c\uc76d\uc76e\uc76f\uc770\uc771\uc772\uc773\uc774\uc775\uc776\uc777\uc778\uc779\uc77a\uc77b\uc77c\uc77d\uc77e\uc77f\uc780\uc781\uc782\uc783\uc784\uc785\uc786\uc787\uc788\uc789\uc78a\uc78b\uc78c\uc78d\uc78e\uc78f\uc790\uc791\uc792\uc793\uc794\uc795\uc796\uc797\uc798\uc799\uc79a\uc79b\uc79c\uc79d\uc79e\uc79f\uc7a0\uc7a1\uc7a2\uc7a3\uc7a4\uc7a5\uc7a6\uc7a7\uc7a8\uc7a9\uc7aa\uc7ab\uc7ac\uc7ad\uc7ae\uc7af\uc7b0\uc7b1\uc7b2\uc7b3\uc7b4\uc7b5\uc7b6\uc7b7\uc7b8\uc7b9\uc7ba\uc7bb\uc7bc\uc7bd\uc7be\uc7bf\uc7c0\uc7c1\uc7c2\uc7c3\uc7c4\uc7c5\uc7c6\uc7c7\uc7c8\uc7c9\uc7ca\uc7cb\uc7cc\uc7cd\uc7ce\uc7cf\uc7d0\uc7d1\uc7d2\uc7d3\uc7d4\uc7d5\uc7d6\uc7d7\uc7d8\uc7d9\uc7da\uc7db\uc7dc\uc7dd\uc7de\uc7df\uc7e0\uc7e1\uc7e2\uc7e3\uc7e4\uc7e5\uc7e6\uc7e7\uc7e8\uc7e9\uc7ea\uc7eb\uc7ec\uc7ed\uc7ee\uc7ef\uc7f0\uc7f1\uc7f2\uc7f3\uc7f4\uc7f5\uc7f6\uc7f7\uc7f8\uc7f9\uc7fa\uc7fb\uc7fc\uc7fd\uc7fe\uc7ff\uc800\uc801\uc802\uc803\uc804\uc805\uc806\uc807\uc808\uc809\uc80a\uc80b\uc80c\uc80d\uc80e\uc80f\uc810\uc811\uc812\uc813\uc814\uc815\uc816\uc817\uc818\uc819\uc81a\uc81b\uc81c\uc81d\uc81e\uc81f\uc820\uc821\uc822\uc823\uc824\uc825\uc826\uc827\uc828\uc829\uc82a\uc82b\uc82c\uc82d\uc82e\uc82f\uc830\uc831\uc832\uc833\uc834\uc835\uc836\uc837\uc838\uc839\uc83a\uc83b\uc83c\uc83d\uc83e\uc83f\uc840\uc841\uc842\uc843\uc844\uc845\uc846\uc847\uc848\uc849\uc84a\uc84b\uc84c\uc84d\uc84e\uc84f\uc850\uc851\uc852\uc853\uc854\uc855\uc856\uc857\uc858\uc859\uc85a\uc85b\uc85c\uc85d\uc85e\uc85f\uc860\uc861\uc862\uc863\uc864\uc865\uc866\uc867\uc868\uc869\uc86a\uc86b\uc86c\uc86d\uc86e\uc86f\uc870\uc871\uc872\uc873\uc874\uc875\uc876\uc877\uc878\uc879\uc87a\uc87b\uc87c\uc87d\uc87e\uc87f\uc880\uc881\uc882\uc883\uc884\uc885\uc886\uc887\uc888\uc889\uc88a\uc88b\uc88c\uc88d\uc88e\uc88f\uc890\uc891\uc892\uc893\uc894\uc895\uc896\uc897\uc898\uc899\uc89a\uc89b\uc89c\uc89d\uc89e\uc89f\uc8a0\uc8a1\uc8a2\uc8a3\uc8a4\uc8a5\uc8a6\uc8a7\uc8a8\uc8a9\uc8aa\uc8ab\uc8ac\uc8ad\uc8ae\uc8af\uc8b0\uc8b1\uc8b2\uc8b3\uc8b4\uc8b5\uc8b6\uc8b7\uc8b8\uc8b9\uc8ba\uc8bb\uc8bc\uc8bd\uc8be\uc8bf\uc8c0\uc8c1\uc8c2\uc8c3\uc8c4\uc8c5\uc8c6\uc8c7\uc8c8\uc8c9\uc8ca\uc8cb\uc8cc\uc8cd\uc8ce\uc8cf\uc8d0\uc8d1\uc8d2\uc8d3\uc8d4\uc8d5\uc8d6\uc8d7\uc8d8\uc8d9\uc8da\uc8db\uc8dc\uc8dd\uc8de\uc8df\uc8e0\uc8e1\uc8e2\uc8e3\uc8e4\uc8e5\uc8e6\uc8e7\uc8e8\uc8e9\uc8ea\uc8eb\uc8ec\uc8ed\uc8ee\uc8ef\uc8f0\uc8f1\uc8f2\uc8f3\uc8f4\uc8f5\uc8f6\uc8f7\uc8f8\uc8f9\uc8fa\uc8fb\uc8fc\uc8fd\uc8fe\uc8ff\uc900\uc901\uc902\uc903\uc904\uc905\uc906\uc907\uc908\uc909\uc90a\uc90b\uc90c\uc90d\uc90e\uc90f\uc910\uc911\uc912\uc913\uc914\uc915\uc916\uc917\uc918\uc919\uc91a\uc91b\uc91c\uc91d\uc91e\uc91f\uc920\uc921\uc922\uc923\uc924\uc925\uc926\uc927\uc928\uc929\uc92a\uc92b\uc92c\uc92d\uc92e\uc92f\uc930\uc931\uc932\uc933\uc934\uc935\uc936\uc937\uc938\uc939\uc93a\uc93b\uc93c\uc93d\uc93e\uc93f\uc940\uc941\uc942\uc943\uc944\uc945\uc946\uc947\uc948\uc949\uc94a\uc94b\uc94c\uc94d\uc94e\uc94f\uc950\uc951\uc952\uc953\uc954\uc955\uc956\uc957\uc958\uc959\uc95a\uc95b\uc95c\uc95d\uc95e\uc95f\uc960\uc961\uc962\uc963\uc964\uc965\uc966\uc967\uc968\uc969\uc96a\uc96b\uc96c\uc96d\uc96e\uc96f\uc970\uc971\uc972\uc973\uc974\uc975\uc976\uc977\uc978\uc979\uc97a\uc97b\uc97c\uc97d\uc97e\uc97f\uc980\uc981\uc982\uc983\uc984\uc985\uc986\uc987\uc988\uc989\uc98a\uc98b\uc98c\uc98d\uc98e\uc98f\uc990\uc991\uc992\uc993\uc994\uc995\uc996\uc997\uc998\uc999\uc99a\uc99b\uc99c\uc99d\uc99e\uc99f\uc9a0\uc9a1\uc9a2\uc9a3\uc9a4\uc9a5\uc9a6\uc9a7\uc9a8\uc9a9\uc9aa\uc9ab\uc9ac\uc9ad\uc9ae\uc9af\uc9b0\uc9b1\uc9b2\uc9b3\uc9b4\uc9b5\uc9b6\uc9b7\uc9b8\uc9b9\uc9ba\uc9bb\uc9bc\uc9bd\uc9be\uc9bf\uc9c0\uc9c1\uc9c2\uc9c3\uc9c4\uc9c5\uc9c6\uc9c7\uc9c8\uc9c9\uc9ca\uc9cb\uc9cc\uc9cd\uc9ce\uc9cf\uc9d0\uc9d1\uc9d2\uc9d3\uc9d4\uc9d5\uc9d6\uc9d7\uc9d8\uc9d9\uc9da\uc9db\uc9dc\uc9dd\uc9de\uc9df\uc9e0\uc9e1\uc9e2\uc9e3\uc9e4\uc9e5\uc9e6\uc9e7\uc9e8\uc9e9\uc9ea\uc9eb\uc9ec\uc9ed\uc9ee\uc9ef\uc9f0\uc9f1\uc9f2\uc9f3\uc9f4\uc9f5\uc9f6\uc9f7\uc9f8\uc9f9\uc9fa\uc9fb\uc9fc\uc9fd\uc9fe\uc9ff\uca00\uca01\uca02\uca03\uca04\uca05\uca06\uca07\uca08\uca09\uca0a\uca0b\uca0c\uca0d\uca0e\uca0f\uca10\uca11\uca12\uca13\uca14\uca15\uca16\uca17\uca18\uca19\uca1a\uca1b\uca1c\uca1d\uca1e\uca1f\uca20\uca21\uca22\uca23\uca24\uca25\uca26\uca27\uca28\uca29\uca2a\uca2b\uca2c\uca2d\uca2e\uca2f\uca30\uca31\uca32\uca33\uca34\uca35\uca36\uca37\uca38\uca39\uca3a\uca3b\uca3c\uca3d\uca3e\uca3f\uca40\uca41\uca42\uca43\uca44\uca45\uca46\uca47\uca48\uca49\uca4a\uca4b\uca4c\uca4d\uca4e\uca4f\uca50\uca51\uca52\uca53\uca54\uca55\uca56\uca57\uca58\uca59\uca5a\uca5b\uca5c\uca5d\uca5e\uca5f\uca60\uca61\uca62\uca63\uca64\uca65\uca66\uca67\uca68\uca69\uca6a\uca6b\uca6c\uca6d\uca6e\uca6f\uca70\uca71\uca72\uca73\uca74\uca75\uca76\uca77\uca78\uca79\uca7a\uca7b\uca7c\uca7d\uca7e\uca7f\uca80\uca81\uca82\uca83\uca84\uca85\uca86\uca87\uca88\uca89\uca8a\uca8b\uca8c\uca8d\uca8e\uca8f\uca90\uca91\uca92\uca93\uca94\uca95\uca96\uca97\uca98\uca99\uca9a\uca9b\uca9c\uca9d\uca9e\uca9f\ucaa0\ucaa1\ucaa2\ucaa3\ucaa4\ucaa5\ucaa6\ucaa7\ucaa8\ucaa9\ucaaa\ucaab\ucaac\ucaad\ucaae\ucaaf\ucab0\ucab1\ucab2\ucab3\ucab4\ucab5\ucab6\ucab7\ucab8\ucab9\ucaba\ucabb\ucabc\ucabd\ucabe\ucabf\ucac0\ucac1\ucac2\ucac3\ucac4\ucac5\ucac6\ucac7\ucac8\ucac9\ucaca\ucacb\ucacc\ucacd\ucace\ucacf\ucad0\ucad1\ucad2\ucad3\ucad4\ucad5\ucad6\ucad7\ucad8\ucad9\ucada\ucadb\ucadc\ucadd\ucade\ucadf\ucae0\ucae1\ucae2\ucae3\ucae4\ucae5\ucae6\ucae7\ucae8\ucae9\ucaea\ucaeb\ucaec\ucaed\ucaee\ucaef\ucaf0\ucaf1\ucaf2\ucaf3\ucaf4\ucaf5\ucaf6\ucaf7\ucaf8\ucaf9\ucafa\ucafb\ucafc\ucafd\ucafe\ucaff\ucb00\ucb01\ucb02\ucb03\ucb04\ucb05\ucb06\ucb07\ucb08\ucb09\ucb0a\ucb0b\ucb0c\ucb0d\ucb0e\ucb0f\ucb10\ucb11\ucb12\ucb13\ucb14\ucb15\ucb16\ucb17\ucb18\ucb19\ucb1a\ucb1b\ucb1c\ucb1d\ucb1e\ucb1f\ucb20\ucb21\ucb22\ucb23\ucb24\ucb25\ucb26\ucb27\ucb28\ucb29\ucb2a\ucb2b\ucb2c\ucb2d\ucb2e\ucb2f\ucb30\ucb31\ucb32\ucb33\ucb34\ucb35\ucb36\ucb37\ucb38\ucb39\ucb3a\ucb3b\ucb3c\ucb3d\ucb3e\ucb3f\ucb40\ucb41\ucb42\ucb43\ucb44\ucb45\ucb46\ucb47\ucb48\ucb49\ucb4a\ucb4b\ucb4c\ucb4d\ucb4e\ucb4f\ucb50\ucb51\ucb52\ucb53\ucb54\ucb55\ucb56\ucb57\ucb58\ucb59\ucb5a\ucb5b\ucb5c\ucb5d\ucb5e\ucb5f\ucb60\ucb61\ucb62\ucb63\ucb64\ucb65\ucb66\ucb67\ucb68\ucb69\ucb6a\ucb6b\ucb6c\ucb6d\ucb6e\ucb6f\ucb70\ucb71\ucb72\ucb73\ucb74\ucb75\ucb76\ucb77\ucb78\ucb79\ucb7a\ucb7b\ucb7c\ucb7d\ucb7e\ucb7f\ucb80\ucb81\ucb82\ucb83\ucb84\ucb85\ucb86\ucb87\ucb88\ucb89\ucb8a\ucb8b\ucb8c\ucb8d\ucb8e\ucb8f\ucb90\ucb91\ucb92\ucb93\ucb94\ucb95\ucb96\ucb97\ucb98\ucb99\ucb9a\ucb9b\ucb9c\ucb9d\ucb9e\ucb9f\ucba0\ucba1\ucba2\ucba3\ucba4\ucba5\ucba6\ucba7\ucba8\ucba9\ucbaa\ucbab\ucbac\ucbad\ucbae\ucbaf\ucbb0\ucbb1\ucbb2\ucbb3\ucbb4\ucbb5\ucbb6\ucbb7\ucbb8\ucbb9\ucbba\ucbbb\ucbbc\ucbbd\ucbbe\ucbbf\ucbc0\ucbc1\ucbc2\ucbc3\ucbc4\ucbc5\ucbc6\ucbc7\ucbc8\ucbc9\ucbca\ucbcb\ucbcc\ucbcd\ucbce\ucbcf\ucbd0\ucbd1\ucbd2\ucbd3\ucbd4\ucbd5\ucbd6\ucbd7\ucbd8\ucbd9\ucbda\ucbdb\ucbdc\ucbdd\ucbde\ucbdf\ucbe0\ucbe1\ucbe2\ucbe3\ucbe4\ucbe5\ucbe6\ucbe7\ucbe8\ucbe9\ucbea\ucbeb\ucbec\ucbed\ucbee\ucbef\ucbf0\ucbf1\ucbf2\ucbf3\ucbf4\ucbf5\ucbf6\ucbf7\ucbf8\ucbf9\ucbfa\ucbfb\ucbfc\ucbfd\ucbfe\ucbff\ucc00\ucc01\ucc02\ucc03\ucc04\ucc05\ucc06\ucc07\ucc08\ucc09\ucc0a\ucc0b\ucc0c\ucc0d\ucc0e\ucc0f\ucc10\ucc11\ucc12\ucc13\ucc14\ucc15\ucc16\ucc17\ucc18\ucc19\ucc1a\ucc1b\ucc1c\ucc1d\ucc1e\ucc1f\ucc20\ucc21\ucc22\ucc23\ucc24\ucc25\ucc26\ucc27\ucc28\ucc29\ucc2a\ucc2b\ucc2c\ucc2d\ucc2e\ucc2f\ucc30\ucc31\ucc32\ucc33\ucc34\ucc35\ucc36\ucc37\ucc38\ucc39\ucc3a\ucc3b\ucc3c\ucc3d\ucc3e\ucc3f\ucc40\ucc41\ucc42\ucc43\ucc44\ucc45\ucc46\ucc47\ucc48\ucc49\ucc4a\ucc4b\ucc4c\ucc4d\ucc4e\ucc4f\ucc50\ucc51\ucc52\ucc53\ucc54\ucc55\ucc56\ucc57\ucc58\ucc59\ucc5a\ucc5b\ucc5c\ucc5d\ucc5e\ucc5f\ucc60\ucc61\ucc62\ucc63\ucc64\ucc65\ucc66\ucc67\ucc68\ucc69\ucc6a\ucc6b\ucc6c\ucc6d\ucc6e\ucc6f\ucc70\ucc71\ucc72\ucc73\ucc74\ucc75\ucc76\ucc77\ucc78\ucc79\ucc7a\ucc7b\ucc7c\ucc7d\ucc7e\ucc7f\ucc80\ucc81\ucc82\ucc83\ucc84\ucc85\ucc86\ucc87\ucc88\ucc89\ucc8a\ucc8b\ucc8c\ucc8d\ucc8e\ucc8f\ucc90\ucc91\ucc92\ucc93\ucc94\ucc95\ucc96\ucc97\ucc98\ucc99\ucc9a\ucc9b\ucc9c\ucc9d\ucc9e\ucc9f\ucca0\ucca1\ucca2\ucca3\ucca4\ucca5\ucca6\ucca7\ucca8\ucca9\uccaa\uccab\uccac\uccad\uccae\uccaf\uccb0\uccb1\uccb2\uccb3\uccb4\uccb5\uccb6\uccb7\uccb8\uccb9\uccba\uccbb\uccbc\uccbd\uccbe\uccbf\uccc0\uccc1\uccc2\uccc3\uccc4\uccc5\uccc6\uccc7\uccc8\uccc9\uccca\ucccb\ucccc\ucccd\uccce\ucccf\uccd0\uccd1\uccd2\uccd3\uccd4\uccd5\uccd6\uccd7\uccd8\uccd9\uccda\uccdb\uccdc\uccdd\uccde\uccdf\ucce0\ucce1\ucce2\ucce3\ucce4\ucce5\ucce6\ucce7\ucce8\ucce9\uccea\ucceb\uccec\ucced\uccee\uccef\uccf0\uccf1\uccf2\uccf3\uccf4\uccf5\uccf6\uccf7\uccf8\uccf9\uccfa\uccfb\uccfc\uccfd\uccfe\uccff\ucd00\ucd01\ucd02\ucd03\ucd04\ucd05\ucd06\ucd07\ucd08\ucd09\ucd0a\ucd0b\ucd0c\ucd0d\ucd0e\ucd0f\ucd10\ucd11\ucd12\ucd13\ucd14\ucd15\ucd16\ucd17\ucd18\ucd19\ucd1a\ucd1b\ucd1c\ucd1d\ucd1e\ucd1f\ucd20\ucd21\ucd22\ucd23\ucd24\ucd25\ucd26\ucd27\ucd28\ucd29\ucd2a\ucd2b\ucd2c\ucd2d\ucd2e\ucd2f\ucd30\ucd31\ucd32\ucd33\ucd34\ucd35\ucd36\ucd37\ucd38\ucd39\ucd3a\ucd3b\ucd3c\ucd3d\ucd3e\ucd3f\ucd40\ucd41\ucd42\ucd43\ucd44\ucd45\ucd46\ucd47\ucd48\ucd49\ucd4a\ucd4b\ucd4c\ucd4d\ucd4e\ucd4f\ucd50\ucd51\ucd52\ucd53\ucd54\ucd55\ucd56\ucd57\ucd58\ucd59\ucd5a\ucd5b\ucd5c\ucd5d\ucd5e\ucd5f\ucd60\ucd61\ucd62\ucd63\ucd64\ucd65\ucd66\ucd67\ucd68\ucd69\ucd6a\ucd6b\ucd6c\ucd6d\ucd6e\ucd6f\ucd70\ucd71\ucd72\ucd73\ucd74\ucd75\ucd76\ucd77\ucd78\ucd79\ucd7a\ucd7b\ucd7c\ucd7d\ucd7e\ucd7f\ucd80\ucd81\ucd82\ucd83\ucd84\ucd85\ucd86\ucd87\ucd88\ucd89\ucd8a\ucd8b\ucd8c\ucd8d\ucd8e\ucd8f\ucd90\ucd91\ucd92\ucd93\ucd94\ucd95\ucd96\ucd97\ucd98\ucd99\ucd9a\ucd9b\ucd9c\ucd9d\ucd9e\ucd9f\ucda0\ucda1\ucda2\ucda3\ucda4\ucda5\ucda6\ucda7\ucda8\ucda9\ucdaa\ucdab\ucdac\ucdad\ucdae\ucdaf\ucdb0\ucdb1\ucdb2\ucdb3\ucdb4\ucdb5\ucdb6\ucdb7\ucdb8\ucdb9\ucdba\ucdbb\ucdbc\ucdbd\ucdbe\ucdbf\ucdc0\ucdc1\ucdc2\ucdc3\ucdc4\ucdc5\ucdc6\ucdc7\ucdc8\ucdc9\ucdca\ucdcb\ucdcc\ucdcd\ucdce\ucdcf\ucdd0\ucdd1\ucdd2\ucdd3\ucdd4\ucdd5\ucdd6\ucdd7\ucdd8\ucdd9\ucdda\ucddb\ucddc\ucddd\ucdde\ucddf\ucde0\ucde1\ucde2\ucde3\ucde4\ucde5\ucde6\ucde7\ucde8\ucde9\ucdea\ucdeb\ucdec\ucded\ucdee\ucdef\ucdf0\ucdf1\ucdf2\ucdf3\ucdf4\ucdf5\ucdf6\ucdf7\ucdf8\ucdf9\ucdfa\ucdfb\ucdfc\ucdfd\ucdfe\ucdff\uce00\uce01\uce02\uce03\uce04\uce05\uce06\uce07\uce08\uce09\uce0a\uce0b\uce0c\uce0d\uce0e\uce0f\uce10\uce11\uce12\uce13\uce14\uce15\uce16\uce17\uce18\uce19\uce1a\uce1b\uce1c\uce1d\uce1e\uce1f\uce20\uce21\uce22\uce23\uce24\uce25\uce26\uce27\uce28\uce29\uce2a\uce2b\uce2c\uce2d\uce2e\uce2f\uce30\uce31\uce32\uce33\uce34\uce35\uce36\uce37\uce38\uce39\uce3a\uce3b\uce3c\uce3d\uce3e\uce3f\uce40\uce41\uce42\uce43\uce44\uce45\uce46\uce47\uce48\uce49\uce4a\uce4b\uce4c\uce4d\uce4e\uce4f\uce50\uce51\uce52\uce53\uce54\uce55\uce56\uce57\uce58\uce59\uce5a\uce5b\uce5c\uce5d\uce5e\uce5f\uce60\uce61\uce62\uce63\uce64\uce65\uce66\uce67\uce68\uce69\uce6a\uce6b\uce6c\uce6d\uce6e\uce6f\uce70\uce71\uce72\uce73\uce74\uce75\uce76\uce77\uce78\uce79\uce7a\uce7b\uce7c\uce7d\uce7e\uce7f\uce80\uce81\uce82\uce83\uce84\uce85\uce86\uce87\uce88\uce89\uce8a\uce8b\uce8c\uce8d\uce8e\uce8f\uce90\uce91\uce92\uce93\uce94\uce95\uce96\uce97\uce98\uce99\uce9a\uce9b\uce9c\uce9d\uce9e\uce9f\ucea0\ucea1\ucea2\ucea3\ucea4\ucea5\ucea6\ucea7\ucea8\ucea9\uceaa\uceab\uceac\ucead\uceae\uceaf\uceb0\uceb1\uceb2\uceb3\uceb4\uceb5\uceb6\uceb7\uceb8\uceb9\uceba\ucebb\ucebc\ucebd\ucebe\ucebf\ucec0\ucec1\ucec2\ucec3\ucec4\ucec5\ucec6\ucec7\ucec8\ucec9\uceca\ucecb\ucecc\ucecd\ucece\ucecf\uced0\uced1\uced2\uced3\uced4\uced5\uced6\uced7\uced8\uced9\uceda\ucedb\ucedc\ucedd\ucede\ucedf\ucee0\ucee1\ucee2\ucee3\ucee4\ucee5\ucee6\ucee7\ucee8\ucee9\uceea\uceeb\uceec\uceed\uceee\uceef\ucef0\ucef1\ucef2\ucef3\ucef4\ucef5\ucef6\ucef7\ucef8\ucef9\ucefa\ucefb\ucefc\ucefd\ucefe\uceff\ucf00\ucf01\ucf02\ucf03\ucf04\ucf05\ucf06\ucf07\ucf08\ucf09\ucf0a\ucf0b\ucf0c\ucf0d\ucf0e\ucf0f\ucf10\ucf11\ucf12\ucf13\ucf14\ucf15\ucf16\ucf17\ucf18\ucf19\ucf1a\ucf1b\ucf1c\ucf1d\ucf1e\ucf1f\ucf20\ucf21\ucf22\ucf23\ucf24\ucf25\ucf26\ucf27\ucf28\ucf29\ucf2a\ucf2b\ucf2c\ucf2d\ucf2e\ucf2f\ucf30\ucf31\ucf32\ucf33\ucf34\ucf35\ucf36\ucf37\ucf38\ucf39\ucf3a\ucf3b\ucf3c\ucf3d\ucf3e\ucf3f\ucf40\ucf41\ucf42\ucf43\ucf44\ucf45\ucf46\ucf47\ucf48\ucf49\ucf4a\ucf4b\ucf4c\ucf4d\ucf4e\ucf4f\ucf50\ucf51\ucf52\ucf53\ucf54\ucf55\ucf56\ucf57\ucf58\ucf59\ucf5a\ucf5b\ucf5c\ucf5d\ucf5e\ucf5f\ucf60\ucf61\ucf62\ucf63\ucf64\ucf65\ucf66\ucf67\ucf68\ucf69\ucf6a\ucf6b\ucf6c\ucf6d\ucf6e\ucf6f\ucf70\ucf71\ucf72\ucf73\ucf74\ucf75\ucf76\ucf77\ucf78\ucf79\ucf7a\ucf7b\ucf7c\ucf7d\ucf7e\ucf7f\ucf80\ucf81\ucf82\ucf83\ucf84\ucf85\ucf86\ucf87\ucf88\ucf89\ucf8a\ucf8b\ucf8c\ucf8d\ucf8e\ucf8f\ucf90\ucf91\ucf92\ucf93\ucf94\ucf95\ucf96\ucf97\ucf98\ucf99\ucf9a\ucf9b\ucf9c\ucf9d\ucf9e\ucf9f\ucfa0\ucfa1\ucfa2\ucfa3\ucfa4\ucfa5\ucfa6\ucfa7\ucfa8\ucfa9\ucfaa\ucfab\ucfac\ucfad\ucfae\ucfaf\ucfb0\ucfb1\ucfb2\ucfb3\ucfb4\ucfb5\ucfb6\ucfb7\ucfb8\ucfb9\ucfba\ucfbb\ucfbc\ucfbd\ucfbe\ucfbf\ucfc0\ucfc1\ucfc2\ucfc3\ucfc4\ucfc5\ucfc6\ucfc7\ucfc8\ucfc9\ucfca\ucfcb\ucfcc\ucfcd\ucfce\ucfcf\ucfd0\ucfd1\ucfd2\ucfd3\ucfd4\ucfd5\ucfd6\ucfd7\ucfd8\ucfd9\ucfda\ucfdb\ucfdc\ucfdd\ucfde\ucfdf\ucfe0\ucfe1\ucfe2\ucfe3\ucfe4\ucfe5\ucfe6\ucfe7\ucfe8\ucfe9\ucfea\ucfeb\ucfec\ucfed\ucfee\ucfef\ucff0\ucff1\ucff2\ucff3\ucff4\ucff5\ucff6\ucff7\ucff8\ucff9\ucffa\ucffb\ucffc\ucffd\ucffe\ucfff\ud000\ud001\ud002\ud003\ud004\ud005\ud006\ud007\ud008\ud009\ud00a\ud00b\ud00c\ud00d\ud00e\ud00f\ud010\ud011\ud012\ud013\ud014\ud015\ud016\ud017\ud018\ud019\ud01a\ud01b\ud01c\ud01d\ud01e\ud01f\ud020\ud021\ud022\ud023\ud024\ud025\ud026\ud027\ud028\ud029\ud02a\ud02b\ud02c\ud02d\ud02e\ud02f\ud030\ud031\ud032\ud033\ud034\ud035\ud036\ud037\ud038\ud039\ud03a\ud03b\ud03c\ud03d\ud03e\ud03f\ud040\ud041\ud042\ud043\ud044\ud045\ud046\ud047\ud048\ud049\ud04a\ud04b\ud04c\ud04d\ud04e\ud04f\ud050\ud051\ud052\ud053\ud054\ud055\ud056\ud057\ud058\ud059\ud05a\ud05b\ud05c\ud05d\ud05e\ud05f\ud060\ud061\ud062\ud063\ud064\ud065\ud066\ud067\ud068\ud069\ud06a\ud06b\ud06c\ud06d\ud06e\ud06f\ud070\ud071\ud072\ud073\ud074\ud075\ud076\ud077\ud078\ud079\ud07a\ud07b\ud07c\ud07d\ud07e\ud07f\ud080\ud081\ud082\ud083\ud084\ud085\ud086\ud087\ud088\ud089\ud08a\ud08b\ud08c\ud08d\ud08e\ud08f\ud090\ud091\ud092\ud093\ud094\ud095\ud096\ud097\ud098\ud099\ud09a\ud09b\ud09c\ud09d\ud09e\ud09f\ud0a0\ud0a1\ud0a2\ud0a3\ud0a4\ud0a5\ud0a6\ud0a7\ud0a8\ud0a9\ud0aa\ud0ab\ud0ac\ud0ad\ud0ae\ud0af\ud0b0\ud0b1\ud0b2\ud0b3\ud0b4\ud0b5\ud0b6\ud0b7\ud0b8\ud0b9\ud0ba\ud0bb\ud0bc\ud0bd\ud0be\ud0bf\ud0c0\ud0c1\ud0c2\ud0c3\ud0c4\ud0c5\ud0c6\ud0c7\ud0c8\ud0c9\ud0ca\ud0cb\ud0cc\ud0cd\ud0ce\ud0cf\ud0d0\ud0d1\ud0d2\ud0d3\ud0d4\ud0d5\ud0d6\ud0d7\ud0d8\ud0d9\ud0da\ud0db\ud0dc\ud0dd\ud0de\ud0df\ud0e0\ud0e1\ud0e2\ud0e3\ud0e4\ud0e5\ud0e6\ud0e7\ud0e8\ud0e9\ud0ea\ud0eb\ud0ec\ud0ed\ud0ee\ud0ef\ud0f0\ud0f1\ud0f2\ud0f3\ud0f4\ud0f5\ud0f6\ud0f7\ud0f8\ud0f9\ud0fa\ud0fb\ud0fc\ud0fd\ud0fe\ud0ff\ud100\ud101\ud102\ud103\ud104\ud105\ud106\ud107\ud108\ud109\ud10a\ud10b\ud10c\ud10d\ud10e\ud10f\ud110\ud111\ud112\ud113\ud114\ud115\ud116\ud117\ud118\ud119\ud11a\ud11b\ud11c\ud11d\ud11e\ud11f\ud120\ud121\ud122\ud123\ud124\ud125\ud126\ud127\ud128\ud129\ud12a\ud12b\ud12c\ud12d\ud12e\ud12f\ud130\ud131\ud132\ud133\ud134\ud135\ud136\ud137\ud138\ud139\ud13a\ud13b\ud13c\ud13d\ud13e\ud13f\ud140\ud141\ud142\ud143\ud144\ud145\ud146\ud147\ud148\ud149\ud14a\ud14b\ud14c\ud14d\ud14e\ud14f\ud150\ud151\ud152\ud153\ud154\ud155\ud156\ud157\ud158\ud159\ud15a\ud15b\ud15c\ud15d\ud15e\ud15f\ud160\ud161\ud162\ud163\ud164\ud165\ud166\ud167\ud168\ud169\ud16a\ud16b\ud16c\ud16d\ud16e\ud16f\ud170\ud171\ud172\ud173\ud174\ud175\ud176\ud177\ud178\ud179\ud17a\ud17b\ud17c\ud17d\ud17e\ud17f\ud180\ud181\ud182\ud183\ud184\ud185\ud186\ud187\ud188\ud189\ud18a\ud18b\ud18c\ud18d\ud18e\ud18f\ud190\ud191\ud192\ud193\ud194\ud195\ud196\ud197\ud198\ud199\ud19a\ud19b\ud19c\ud19d\ud19e\ud19f\ud1a0\ud1a1\ud1a2\ud1a3\ud1a4\ud1a5\ud1a6\ud1a7\ud1a8\ud1a9\ud1aa\ud1ab\ud1ac\ud1ad\ud1ae\ud1af\ud1b0\ud1b1\ud1b2\ud1b3\ud1b4\ud1b5\ud1b6\ud1b7\ud1b8\ud1b9\ud1ba\ud1bb\ud1bc\ud1bd\ud1be\ud1bf\ud1c0\ud1c1\ud1c2\ud1c3\ud1c4\ud1c5\ud1c6\ud1c7\ud1c8\ud1c9\ud1ca\ud1cb\ud1cc\ud1cd\ud1ce\ud1cf\ud1d0\ud1d1\ud1d2\ud1d3\ud1d4\ud1d5\ud1d6\ud1d7\ud1d8\ud1d9\ud1da\ud1db\ud1dc\ud1dd\ud1de\ud1df\ud1e0\ud1e1\ud1e2\ud1e3\ud1e4\ud1e5\ud1e6\ud1e7\ud1e8\ud1e9\ud1ea\ud1eb\ud1ec\ud1ed\ud1ee\ud1ef\ud1f0\ud1f1\ud1f2\ud1f3\ud1f4\ud1f5\ud1f6\ud1f7\ud1f8\ud1f9\ud1fa\ud1fb\ud1fc\ud1fd\ud1fe\ud1ff\ud200\ud201\ud202\ud203\ud204\ud205\ud206\ud207\ud208\ud209\ud20a\ud20b\ud20c\ud20d\ud20e\ud20f\ud210\ud211\ud212\ud213\ud214\ud215\ud216\ud217\ud218\ud219\ud21a\ud21b\ud21c\ud21d\ud21e\ud21f\ud220\ud221\ud222\ud223\ud224\ud225\ud226\ud227\ud228\ud229\ud22a\ud22b\ud22c\ud22d\ud22e\ud22f\ud230\ud231\ud232\ud233\ud234\ud235\ud236\ud237\ud238\ud239\ud23a\ud23b\ud23c\ud23d\ud23e\ud23f\ud240\ud241\ud242\ud243\ud244\ud245\ud246\ud247\ud248\ud249\ud24a\ud24b\ud24c\ud24d\ud24e\ud24f\ud250\ud251\ud252\ud253\ud254\ud255\ud256\ud257\ud258\ud259\ud25a\ud25b\ud25c\ud25d\ud25e\ud25f\ud260\ud261\ud262\ud263\ud264\ud265\ud266\ud267\ud268\ud269\ud26a\ud26b\ud26c\ud26d\ud26e\ud26f\ud270\ud271\ud272\ud273\ud274\ud275\ud276\ud277\ud278\ud279\ud27a\ud27b\ud27c\ud27d\ud27e\ud27f\ud280\ud281\ud282\ud283\ud284\ud285\ud286\ud287\ud288\ud289\ud28a\ud28b\ud28c\ud28d\ud28e\ud28f\ud290\ud291\ud292\ud293\ud294\ud295\ud296\ud297\ud298\ud299\ud29a\ud29b\ud29c\ud29d\ud29e\ud29f\ud2a0\ud2a1\ud2a2\ud2a3\ud2a4\ud2a5\ud2a6\ud2a7\ud2a8\ud2a9\ud2aa\ud2ab\ud2ac\ud2ad\ud2ae\ud2af\ud2b0\ud2b1\ud2b2\ud2b3\ud2b4\ud2b5\ud2b6\ud2b7\ud2b8\ud2b9\ud2ba\ud2bb\ud2bc\ud2bd\ud2be\ud2bf\ud2c0\ud2c1\ud2c2\ud2c3\ud2c4\ud2c5\ud2c6\ud2c7\ud2c8\ud2c9\ud2ca\ud2cb\ud2cc\ud2cd\ud2ce\ud2cf\ud2d0\ud2d1\ud2d2\ud2d3\ud2d4\ud2d5\ud2d6\ud2d7\ud2d8\ud2d9\ud2da\ud2db\ud2dc\ud2dd\ud2de\ud2df\ud2e0\ud2e1\ud2e2\ud2e3\ud2e4\ud2e5\ud2e6\ud2e7\ud2e8\ud2e9\ud2ea\ud2eb\ud2ec\ud2ed\ud2ee\ud2ef\ud2f0\ud2f1\ud2f2\ud2f3\ud2f4\ud2f5\ud2f6\ud2f7\ud2f8\ud2f9\ud2fa\ud2fb\ud2fc\ud2fd\ud2fe\ud2ff\ud300\ud301\ud302\ud303\ud304\ud305\ud306\ud307\ud308\ud309\ud30a\ud30b\ud30c\ud30d\ud30e\ud30f\ud310\ud311\ud312\ud313\ud314\ud315\ud316\ud317\ud318\ud319\ud31a\ud31b\ud31c\ud31d\ud31e\ud31f\ud320\ud321\ud322\ud323\ud324\ud325\ud326\ud327\ud328\ud329\ud32a\ud32b\ud32c\ud32d\ud32e\ud32f\ud330\ud331\ud332\ud333\ud334\ud335\ud336\ud337\ud338\ud339\ud33a\ud33b\ud33c\ud33d\ud33e\ud33f\ud340\ud341\ud342\ud343\ud344\ud345\ud346\ud347\ud348\ud349\ud34a\ud34b\ud34c\ud34d\ud34e\ud34f\ud350\ud351\ud352\ud353\ud354\ud355\ud356\ud357\ud358\ud359\ud35a\ud35b\ud35c\ud35d\ud35e\ud35f\ud360\ud361\ud362\ud363\ud364\ud365\ud366\ud367\ud368\ud369\ud36a\ud36b\ud36c\ud36d\ud36e\ud36f\ud370\ud371\ud372\ud373\ud374\ud375\ud376\ud377\ud378\ud379\ud37a\ud37b\ud37c\ud37d\ud37e\ud37f\ud380\ud381\ud382\ud383\ud384\ud385\ud386\ud387\ud388\ud389\ud38a\ud38b\ud38c\ud38d\ud38e\ud38f\ud390\ud391\ud392\ud393\ud394\ud395\ud396\ud397\ud398\ud399\ud39a\ud39b\ud39c\ud39d\ud39e\ud39f\ud3a0\ud3a1\ud3a2\ud3a3\ud3a4\ud3a5\ud3a6\ud3a7\ud3a8\ud3a9\ud3aa\ud3ab\ud3ac\ud3ad\ud3ae\ud3af\ud3b0\ud3b1\ud3b2\ud3b3\ud3b4\ud3b5\ud3b6\ud3b7\ud3b8\ud3b9\ud3ba\ud3bb\ud3bc\ud3bd\ud3be\ud3bf\ud3c0\ud3c1\ud3c2\ud3c3\ud3c4\ud3c5\ud3c6\ud3c7\ud3c8\ud3c9\ud3ca\ud3cb\ud3cc\ud3cd\ud3ce\ud3cf\ud3d0\ud3d1\ud3d2\ud3d3\ud3d4\ud3d5\ud3d6\ud3d7\ud3d8\ud3d9\ud3da\ud3db\ud3dc\ud3dd\ud3de\ud3df\ud3e0\ud3e1\ud3e2\ud3e3\ud3e4\ud3e5\ud3e6\ud3e7\ud3e8\ud3e9\ud3ea\ud3eb\ud3ec\ud3ed\ud3ee\ud3ef\ud3f0\ud3f1\ud3f2\ud3f3\ud3f4\ud3f5\ud3f6\ud3f7\ud3f8\ud3f9\ud3fa\ud3fb\ud3fc\ud3fd\ud3fe\ud3ff\ud400\ud401\ud402\ud403\ud404\ud405\ud406\ud407\ud408\ud409\ud40a\ud40b\ud40c\ud40d\ud40e\ud40f\ud410\ud411\ud412\ud413\ud414\ud415\ud416\ud417\ud418\ud419\ud41a\ud41b\ud41c\ud41d\ud41e\ud41f\ud420\ud421\ud422\ud423\ud424\ud425\ud426\ud427\ud428\ud429\ud42a\ud42b\ud42c\ud42d\ud42e\ud42f\ud430\ud431\ud432\ud433\ud434\ud435\ud436\ud437\ud438\ud439\ud43a\ud43b\ud43c\ud43d\ud43e\ud43f\ud440\ud441\ud442\ud443\ud444\ud445\ud446\ud447\ud448\ud449\ud44a\ud44b\ud44c\ud44d\ud44e\ud44f\ud450\ud451\ud452\ud453\ud454\ud455\ud456\ud457\ud458\ud459\ud45a\ud45b\ud45c\ud45d\ud45e\ud45f\ud460\ud461\ud462\ud463\ud464\ud465\ud466\ud467\ud468\ud469\ud46a\ud46b\ud46c\ud46d\ud46e\ud46f\ud470\ud471\ud472\ud473\ud474\ud475\ud476\ud477\ud478\ud479\ud47a\ud47b\ud47c\ud47d\ud47e\ud47f\ud480\ud481\ud482\ud483\ud484\ud485\ud486\ud487\ud488\ud489\ud48a\ud48b\ud48c\ud48d\ud48e\ud48f\ud490\ud491\ud492\ud493\ud494\ud495\ud496\ud497\ud498\ud499\ud49a\ud49b\ud49c\ud49d\ud49e\ud49f\ud4a0\ud4a1\ud4a2\ud4a3\ud4a4\ud4a5\ud4a6\ud4a7\ud4a8\ud4a9\ud4aa\ud4ab\ud4ac\ud4ad\ud4ae\ud4af\ud4b0\ud4b1\ud4b2\ud4b3\ud4b4\ud4b5\ud4b6\ud4b7\ud4b8\ud4b9\ud4ba\ud4bb\ud4bc\ud4bd\ud4be\ud4bf\ud4c0\ud4c1\ud4c2\ud4c3\ud4c4\ud4c5\ud4c6\ud4c7\ud4c8\ud4c9\ud4ca\ud4cb\ud4cc\ud4cd\ud4ce\ud4cf\ud4d0\ud4d1\ud4d2\ud4d3\ud4d4\ud4d5\ud4d6\ud4d7\ud4d8\ud4d9\ud4da\ud4db\ud4dc\ud4dd\ud4de\ud4df\ud4e0\ud4e1\ud4e2\ud4e3\ud4e4\ud4e5\ud4e6\ud4e7\ud4e8\ud4e9\ud4ea\ud4eb\ud4ec\ud4ed\ud4ee\ud4ef\ud4f0\ud4f1\ud4f2\ud4f3\ud4f4\ud4f5\ud4f6\ud4f7\ud4f8\ud4f9\ud4fa\ud4fb\ud4fc\ud4fd\ud4fe\ud4ff\ud500\ud501\ud502\ud503\ud504\ud505\ud506\ud507\ud508\ud509\ud50a\ud50b\ud50c\ud50d\ud50e\ud50f\ud510\ud511\ud512\ud513\ud514\ud515\ud516\ud517\ud518\ud519\ud51a\ud51b\ud51c\ud51d\ud51e\ud51f\ud520\ud521\ud522\ud523\ud524\ud525\ud526\ud527\ud528\ud529\ud52a\ud52b\ud52c\ud52d\ud52e\ud52f\ud530\ud531\ud532\ud533\ud534\ud535\ud536\ud537\ud538\ud539\ud53a\ud53b\ud53c\ud53d\ud53e\ud53f\ud540\ud541\ud542\ud543\ud544\ud545\ud546\ud547\ud548\ud549\ud54a\ud54b\ud54c\ud54d\ud54e\ud54f\ud550\ud551\ud552\ud553\ud554\ud555\ud556\ud557\ud558\ud559\ud55a\ud55b\ud55c\ud55d\ud55e\ud55f\ud560\ud561\ud562\ud563\ud564\ud565\ud566\ud567\ud568\ud569\ud56a\ud56b\ud56c\ud56d\ud56e\ud56f\ud570\ud571\ud572\ud573\ud574\ud575\ud576\ud577\ud578\ud579\ud57a\ud57b\ud57c\ud57d\ud57e\ud57f\ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\ud7a3\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\uf900\uf901\uf902\uf903\uf904\uf905\uf906\uf907\uf908\uf909\uf90a\uf90b\uf90c\uf90d\uf90e\uf90f\uf910\uf911\uf912\uf913\uf914\uf915\uf916\uf917\uf918\uf919\uf91a\uf91b\uf91c\uf91d\uf91e\uf91f\uf920\uf921\uf922\uf923\uf924\uf925\uf926\uf927\uf928\uf929\uf92a\uf92b\uf92c\uf92d\uf92e\uf92f\uf930\uf931\uf932\uf933\uf934\uf935\uf936\uf937\uf938\uf939\uf93a\uf93b\uf93c\uf93d\uf93e\uf93f\uf940\uf941\uf942\uf943\uf944\uf945\uf946\uf947\uf948\uf949\uf94a\uf94b\uf94c\uf94d\uf94e\uf94f\uf950\uf951\uf952\uf953\uf954\uf955\uf956\uf957\uf958\uf959\uf95a\uf95b\uf95c\uf95d\uf95e\uf95f\uf960\uf961\uf962\uf963\uf964\uf965\uf966\uf967\uf968\uf969\uf96a\uf96b\uf96c\uf96d\uf96e\uf96f\uf970\uf971\uf972\uf973\uf974\uf975\uf976\uf977\uf978\uf979\uf97a\uf97b\uf97c\uf97d\uf97e\uf97f\uf980\uf981\uf982\uf983\uf984\uf985\uf986\uf987\uf988\uf989\uf98a\uf98b\uf98c\uf98d\uf98e\uf98f\uf990\uf991\uf992\uf993\uf994\uf995\uf996\uf997\uf998\uf999\uf99a\uf99b\uf99c\uf99d\uf99e\uf99f\uf9a0\uf9a1\uf9a2\uf9a3\uf9a4\uf9a5\uf9a6\uf9a7\uf9a8\uf9a9\uf9aa\uf9ab\uf9ac\uf9ad\uf9ae\uf9af\uf9b0\uf9b1\uf9b2\uf9b3\uf9b4\uf9b5\uf9b6\uf9b7\uf9b8\uf9b9\uf9ba\uf9bb\uf9bc\uf9bd\uf9be\uf9bf\uf9c0\uf9c1\uf9c2\uf9c3\uf9c4\uf9c5\uf9c6\uf9c7\uf9c8\uf9c9\uf9ca\uf9cb\uf9cc\uf9cd\uf9ce\uf9cf\uf9d0\uf9d1\uf9d2\uf9d3\uf9d4\uf9d5\uf9d6\uf9d7\uf9d8\uf9d9\uf9da\uf9db\uf9dc\uf9dd\uf9de\uf9df\uf9e0\uf9e1\uf9e2\uf9e3\uf9e4\uf9e5\uf9e6\uf9e7\uf9e8\uf9e9\uf9ea\uf9eb\uf9ec\uf9ed\uf9ee\uf9ef\uf9f0\uf9f1\uf9f2\uf9f3\uf9f4\uf9f5\uf9f6\uf9f7\uf9f8\uf9f9\uf9fa\uf9fb\uf9fc\uf9fd\uf9fe\uf9ff\ufa00\ufa01\ufa02\ufa03\ufa04\ufa05\ufa06\ufa07\ufa08\ufa09\ufa0a\ufa0b\ufa0c\ufa0d\ufa0e\ufa0f\ufa10\ufa11\ufa12\ufa13\ufa14\ufa15\ufa16\ufa17\ufa18\ufa19\ufa1a\ufa1b\ufa1c\ufa1d\ufa1e\ufa1f\ufa20\ufa21\ufa22\ufa23\ufa24\ufa25\ufa26\ufa27\ufa28\ufa29\ufa2a\ufa2b\ufa2c\ufa2d\ufa2e\ufa2f\ufa30\ufa31\ufa32\ufa33\ufa34\ufa35\ufa36\ufa37\ufa38\ufa39\ufa3a\ufa3b\ufa3c\ufa3d\ufa3e\ufa3f\ufa40\ufa41\ufa42\ufa43\ufa44\ufa45\ufa46\ufa47\ufa48\ufa49\ufa4a\ufa4b\ufa4c\ufa4d\ufa4e\ufa4f\ufa50\ufa51\ufa52\ufa53\ufa54\ufa55\ufa56\ufa57\ufa58\ufa59\ufa5a\ufa5b\ufa5c\ufa5d\ufa5e\ufa5f\ufa60\ufa61\ufa62\ufa63\ufa64\ufa65\ufa66\ufa67\ufa68\ufa69\ufa6a\ufa6b\ufa6d\ufa70\ufa71\ufa72\ufa73\ufa74\ufa75\ufa76\ufa77\ufa78\ufa79\ufa7a\ufa7b\ufa7c\ufa7d\ufa7e\ufa7f\ufa80\ufa81\ufa82\ufa83\ufa84\ufa85\ufa86\ufa87\ufa88\ufa89\ufa8a\ufa8b\ufa8c\ufa8d\ufa8e\ufa8f\ufa90\ufa91\ufa92\ufa93\ufa94\ufa95\ufa96\ufa97\ufa98\ufa99\ufa9a\ufa9b\ufa9c\ufa9d\ufa9e\ufa9f\ufaa0\ufaa1\ufaa2\ufaa3\ufaa4\ufaa5\ufaa6\ufaa7\ufaa8\ufaa9\ufaaa\ufaab\ufaac\ufaad\ufaae\ufaaf\ufab0\ufab1\ufab2\ufab3\ufab4\ufab5\ufab6\ufab7\ufab8\ufab9\ufaba\ufabb\ufabc\ufabd\ufabe\ufabf\ufac0\ufac1\ufac2\ufac3\ufac4\ufac5\ufac6\ufac7\ufac8\ufac9\ufaca\ufacb\ufacc\ufacd\uface\ufad2\ufad3\ufad4\ufad8\ufad9\ufb20\ufb21\ufb22\ufb23\ufb24\ufb25\ufb26\ufb27\ufb28\ufb50\ufb51\ufb52\ufb53\ufb54\ufb55\ufb56\ufb57\ufb58\ufb59\ufb5a\ufb5b\ufb5c\ufb5d\ufb5e\ufb5f\ufb60\ufb61\ufb62\ufb63\ufb64\ufb65\ufb66\ufb67\ufb68\ufb69\ufb6a\ufb6b\ufb6c\ufb6d\ufb6e\ufb6f\ufb70\ufb71\ufb72\ufb73\ufb74\ufb75\ufb76\ufb77\ufb78\ufb79\ufb7a\ufb7b\ufb7c\ufb7d\ufb7e\ufb7f\ufb80\ufb81\ufb82\ufb83\ufb84\ufb85\ufb86\ufb87\ufb88\ufb89\ufb8a\ufb8b\ufb8c\ufb8d\ufb8e\ufb8f\ufb90\ufb91\ufb92\ufb93\ufb94\ufb95\ufb96\ufb97\ufb98\ufb99\ufb9a\ufb9b\ufb9c\ufb9d\ufb9e\ufb9f\ufba0\ufba1\ufba2\ufba3\ufba4\ufba5\ufba6\ufba7\ufba8\ufba9\ufbaa\ufbab\ufbac\ufbad\ufbae\ufbaf\ufbb0\ufbb1\ufbd3\ufbd4\ufbd5\ufbd6\ufbd7\ufbd8\ufbd9\ufbda\ufbdb\ufbdc\ufbde\ufbdf\ufbe0\ufbe1\ufbe2\ufbe3\ufbe4\ufbe5\ufbe6\ufbe7\ufbe8\ufbe9\ufbfc\ufbfd\ufbfe\ufbff\ufe33\ufe34\ufe4d\ufe4e\ufe4f\ufe73\ufe80\ufe81\ufe82\ufe83\ufe84\ufe85\ufe86\ufe87\ufe88\ufe89\ufe8a\ufe8b\ufe8c\ufe8d\ufe8e\ufe8f\ufe90\ufe91\ufe92\ufe93\ufe94\ufe95\ufe96\ufe97\ufe98\ufe99\ufe9a\ufe9b\ufe9c\ufe9d\ufe9e\ufe9f\ufea0\ufea1\ufea2\ufea3\ufea4\ufea5\ufea6\ufea7\ufea8\ufea9\ufeaa\ufeab\ufeac\ufead\ufeae\ufeaf\ufeb0\ufeb1\ufeb2\ufeb3\ufeb4\ufeb5\ufeb6\ufeb7\ufeb8\ufeb9\ufeba\ufebb\ufebc\ufebd\ufebe\ufebf\ufec0\ufec1\ufec2\ufec3\ufec4\ufec5\ufec6\ufec7\ufec8\ufec9\ufeca\ufecb\ufecc\ufecd\ufece\ufecf\ufed0\ufed1\ufed2\ufed3\ufed4\ufed5\ufed6\ufed7\ufed8\ufed9\ufeda\ufedb\ufedc\ufedd\ufede\ufedf\ufee0\ufee1\ufee2\ufee3\ufee4\ufee5\ufee6\ufee7\ufee8\ufee9\ufeea\ufeeb\ufeec\ufeed\ufeee\ufeef\ufef0\ufef1\ufef2\ufef3\ufef4\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a\uff3f\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a\uff66\uff67\uff68\uff69\uff6a\uff6b\uff6c\uff6d\uff6e\uff6f\uff70\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff80\uff81\uff82\uff83\uff84\uff85\uff86\uff87\uff88\uff89\uff8a\uff8b\uff8c\uff8d\uff8e\uff8f\uff90\uff91\uff92\uff93\uff94\uff95\uff96\uff97\uff98\uff99\uff9a\uff9b\uff9c\uff9d\uffa0\uffa1\uffa2\uffa3\uffa4\uffa5\uffa6\uffa7\uffa8\uffa9\uffaa\uffab\uffac\uffad\uffae\uffaf\uffb0\uffb1\uffb2\uffb3\uffb4\uffb5\uffb6\uffb7\uffb8\uffb9\uffba\uffbb\uffbc\uffbd\uffbe\uffc2\uffc3\uffc4\uffc5\uffc6\uffc7\uffca\uffcb\uffcc\uffcd\uffce\uffcf\uffd2\uffd3\uffd4\uffd5\uffd6\uffd7\uffda\uffdb\uffdc'
+xid_continue = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\xaa\xb5\xb7\xba\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\u0100\u0101\u0102\u0103\u0104\u0105\u0106\u0107\u0108\u0109\u010a\u010b\u010c\u010d\u010e\u010f\u0110\u0111\u0112\u0113\u0114\u0115\u0116\u0117\u0118\u0119\u011a\u011b\u011c\u011d\u011e\u011f\u0120\u0121\u0122\u0123\u0124\u0125\u0126\u0127\u0128\u0129\u012a\u012b\u012c\u012d\u012e\u012f\u0130\u0131\u0134\u0135\u0136\u0137\u0138\u0139\u013a\u013b\u013c\u013d\u013e\u0141\u0142\u0143\u0144\u0145\u0146\u0147\u0148\u014a\u014b\u014c\u014d\u014e\u014f\u0150\u0151\u0152\u0153\u0154\u0155\u0156\u0157\u0158\u0159\u015a\u015b\u015c\u015d\u015e\u015f\u0160\u0161\u0162\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016a\u016b\u016c\u016d\u016e\u016f\u0170\u0171\u0172\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017a\u017b\u017c\u017d\u017e\u017f\u0180\u0181\u0182\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018a\u018b\u018c\u018d\u018e\u018f\u0190\u0191\u0192\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019a\u019b\u019c\u019d\u019e\u019f\u01a0\u01a1\u01a2\u01a3\u01a4\u01a5\u01a6\u01a7\u01a8\u01a9\u01aa\u01ab\u01ac\u01ad\u01ae\u01af\u01b0\u01b1\u01b2\u01b3\u01b4\u01b5\u01b6\u01b7\u01b8\u01b9\u01ba\u01bb\u01bc\u01bd\u01be\u01bf\u01c0\u01c1\u01c2\u01c3\u01cd\u01ce\u01cf\u01d0\u01d1\u01d2\u01d3\u01d4\u01d5\u01d6\u01d7\u01d8\u01d9\u01da\u01db\u01dc\u01dd\u01de\u01df\u01e0\u01e1\u01e2\u01e3\u01e4\u01e5\u01e6\u01e7\u01e8\u01e9\u01ea\u01eb\u01ec\u01ed\u01ee\u01ef\u01f0\u01f4\u01f5\u01f6\u01f7\u01f8\u01f9\u01fa\u01fb\u01fc\u01fd\u01fe\u01ff\u0200\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208\u0209\u020a\u020b\u020c\u020d\u020e\u020f\u0210\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218\u0219\u021a\u021b\u021c\u021d\u021e\u021f\u0220\u0221\u0222\u0223\u0224\u0225\u0226\u0227\u0228\u0229\u022a\u022b\u022c\u022d\u022e\u022f\u0230\u0231\u0232\u0233\u0234\u0235\u0236\u0237\u0238\u0239\u023a\u023b\u023c\u023d\u023e\u023f\u0240\u0241\u0242\u0243\u0244\u0245\u0246\u0247\u0248\u0249\u024a\u024b\u024c\u024d\u024e\u024f\u0250\u0251\u0252\u0253\u0254\u0255\u0256\u0257\u0258\u0259\u025a\u025b\u025c\u025d\u025e\u025f\u0260\u0261\u0262\u0263\u0264\u0265\u0266\u0267\u0268\u0269\u026a\u026b\u026c\u026d\u026e\u026f\u0270\u0271\u0272\u0273\u0274\u0275\u0276\u0277\u0278\u0279\u027a\u027b\u027c\u027d\u027e\u027f\u0280\u0281\u0282\u0283\u0284\u0285\u0286\u0287\u0288\u0289\u028a\u028b\u028c\u028d\u028e\u028f\u0290\u0291\u0292\u0293\u0294\u0295\u0296\u0297\u0298\u0299\u029a\u029b\u029c\u029d\u029e\u029f\u02a0\u02a1\u02a2\u02a3\u02a4\u02a5\u02a6\u02a7\u02a8\u02a9\u02aa\u02ab\u02ac\u02ad\u02ae\u02af\u02b0\u02b1\u02b2\u02b3\u02b4\u02b5\u02b6\u02b7\u02b8\u02b9\u02ba\u02bb\u02bc\u02bd\u02be\u02bf\u02c0\u02c1\u02c6\u02c7\u02c8\u02c9\u02ca\u02cb\u02cc\u02cd\u02ce\u02cf\u02d0\u02d1\u02e0\u02e1\u02e2\u02e3\u02e4\u02ec\u02ee\u0300\u0301\u0302\u0303\u0304\u0305\u0306\u0307\u0308\u0309\u030a\u030b\u030c\u030d\u030e\u030f\u0310\u0311\u0312\u0313\u0314\u0315\u0316\u0317\u0318\u0319\u031a\u031b\u031c\u031d\u031e\u031f\u0320\u0321\u0322\u0323\u0324\u0325\u0326\u0327\u0328\u0329\u032a\u032b\u032c\u032d\u032e\u032f\u0330\u0331\u0332\u0333\u0334\u0335\u0336\u0337\u0338\u0339\u033a\u033b\u033c\u033d\u033e\u033f\u0340\u0341\u0342\u0343\u0345\u0346\u0347\u0348\u0349\u034a\u034b\u034c\u034d\u034e\u034f\u0350\u0351\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359\u035a\u035b\u035c\u035d\u035e\u035f\u0360\u0361\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369\u036a\u036b\u036c\u036d\u036e\u036f\u0370\u0371\u0372\u0373\u0374\u0376\u0377\u037b\u037c\u037d\u037f\u0386\u0387\u0388\u0389\u038a\u038c\u038e\u038f\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039a\u039b\u039c\u039d\u039e\u039f\u03a0\u03a1\u03a3\u03a4\u03a5\u03a6\u03a7\u03a8\u03a9\u03aa\u03ab\u03ac\u03ad\u03ae\u03af\u03b0\u03b1\u03b2\u03b3\u03b4\u03b5\u03b6\u03b7\u03b8\u03b9\u03ba\u03bb\u03bc\u03bd\u03be\u03bf\u03c0\u03c1\u03c2\u03c3\u03c4\u03c5\u03c6\u03c7\u03c8\u03c9\u03ca\u03cb\u03cc\u03cd\u03ce\u03cf\u03d0\u03d1\u03d2\u03d3\u03d4\u03d5\u03d6\u03d7\u03d8\u03d9\u03da\u03db\u03dc\u03dd\u03de\u03df\u03e0\u03e1\u03e2\u03e3\u03e4\u03e5\u03e6\u03e7\u03e8\u03e9\u03ea\u03eb\u03ec\u03ed\u03ee\u03ef\u03f0\u03f1\u03f2\u03f3\u03f4\u03f5\u03f7\u03f8\u03f9\u03fa\u03fb\u03fc\u03fd\u03fe\u03ff\u0400\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040a\u040b\u040c\u040d\u040e\u040f\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041a\u041b\u041c\u041d\u041e\u041f\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042a\u042b\u042c\u042d\u042e\u042f\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043a\u043b\u043c\u043d\u043e\u043f\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044a\u044b\u044c\u044d\u044e\u044f\u0450\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045a\u045b\u045c\u045d\u045e\u045f\u0460\u0461\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469\u046a\u046b\u046c\u046d\u046e\u046f\u0470\u0471\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479\u047a\u047b\u047c\u047d\u047e\u047f\u0480\u0481\u0483\u0484\u0485\u0486\u0487\u048a\u048b\u048c\u048d\u048e\u048f\u0490\u0491\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499\u049a\u049b\u049c\u049d\u049e\u049f\u04a0\u04a1\u04a2\u04a3\u04a4\u04a5\u04a6\u04a7\u04a8\u04a9\u04aa\u04ab\u04ac\u04ad\u04ae\u04af\u04b0\u04b1\u04b2\u04b3\u04b4\u04b5\u04b6\u04b7\u04b8\u04b9\u04ba\u04bb\u04bc\u04bd\u04be\u04bf\u04c0\u04c1\u04c2\u04c3\u04c4\u04c5\u04c6\u04c7\u04c8\u04c9\u04ca\u04cb\u04cc\u04cd\u04ce\u04cf\u04d0\u04d1\u04d2\u04d3\u04d4\u04d5\u04d6\u04d7\u04d8\u04d9\u04da\u04db\u04dc\u04dd\u04de\u04df\u04e0\u04e1\u04e2\u04e3\u04e4\u04e5\u04e6\u04e7\u04e8\u04e9\u04ea\u04eb\u04ec\u04ed\u04ee\u04ef\u04f0\u04f1\u04f2\u04f3\u04f4\u04f5\u04f6\u04f7\u04f8\u04f9\u04fa\u04fb\u04fc\u04fd\u04fe\u04ff\u0500\u0501\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509\u050a\u050b\u050c\u050d\u050e\u050f\u0510\u0511\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519\u051a\u051b\u051c\u051d\u051e\u051f\u0520\u0521\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529\u052a\u052b\u052c\u052d\u052e\u052f\u0531\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539\u053a\u053b\u053c\u053d\u053e\u053f\u0540\u0541\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549\u054a\u054b\u054c\u054d\u054e\u054f\u0550\u0551\u0552\u0553\u0554\u0555\u0556\u0559\u0561\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569\u056a\u056b\u056c\u056d\u056e\u056f\u0570\u0571\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579\u057a\u057b\u057c\u057d\u057e\u057f\u0580\u0581\u0582\u0583\u0584\u0585\u0586\u0591\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599\u059a\u059b\u059c\u059d\u059e\u059f\u05a0\u05a1\u05a2\u05a3\u05a4\u05a5\u05a6\u05a7\u05a8\u05a9\u05aa\u05ab\u05ac\u05ad\u05ae\u05af\u05b0\u05b1\u05b2\u05b3\u05b4\u05b5\u05b6\u05b7\u05b8\u05b9\u05ba\u05bb\u05bc\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u05d0\u05d1\u05d2\u05d3\u05d4\u05d5\u05d6\u05d7\u05d8\u05d9\u05da\u05db\u05dc\u05dd\u05de\u05df\u05e0\u05e1\u05e2\u05e3\u05e4\u05e5\u05e6\u05e7\u05e8\u05e9\u05ea\u05f0\u05f1\u05f2\u0610\u0611\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619\u061a\u0620\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062a\u062b\u062c\u062d\u062e\u062f\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063a\u063b\u063c\u063d\u063e\u063f\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064a\u064b\u064c\u064d\u064e\u064f\u0650\u0651\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659\u065a\u065b\u065c\u065d\u065e\u065f\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\u066e\u066f\u0670\u0671\u0672\u0673\u0674\u0679\u067a\u067b\u067c\u067d\u067e\u067f\u0680\u0681\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689\u068a\u068b\u068c\u068d\u068e\u068f\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u069a\u069b\u069c\u069d\u069e\u069f\u06a0\u06a1\u06a2\u06a3\u06a4\u06a5\u06a6\u06a7\u06a8\u06a9\u06aa\u06ab\u06ac\u06ad\u06ae\u06af\u06b0\u06b1\u06b2\u06b3\u06b4\u06b5\u06b6\u06b7\u06b8\u06b9\u06ba\u06bb\u06bc\u06bd\u06be\u06bf\u06c0\u06c1\u06c2\u06c3\u06c4\u06c5\u06c6\u06c7\u06c8\u06c9\u06ca\u06cb\u06cc\u06cd\u06ce\u06cf\u06d0\u06d1\u06d2\u06d3\u06d5\u06d6\u06d7\u06d8\u06d9\u06da\u06db\u06dc\u06df\u06e0\u06e1\u06e2\u06e3\u06e4\u06e5\u06e6\u06e7\u06e8\u06ea\u06eb\u06ec\u06ed\u06ee\u06ef\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9\u06fa\u06fb\u06fc\u06ff\u0710\u0711\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719\u071a\u071b\u071c\u071d\u071e\u071f\u0720\u0721\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729\u072a\u072b\u072c\u072d\u072e\u072f\u0730\u0731\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739\u073a\u073b\u073c\u073d\u073e\u073f\u0740\u0741\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749\u074a\u074d\u074e\u074f\u0750\u0751\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759\u075a\u075b\u075c\u075d\u075e\u075f\u0760\u0761\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769\u076a\u076b\u076c\u076d\u076e\u076f\u0770\u0771\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779\u077a\u077b\u077c\u077d\u077e\u077f\u0780\u0781\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789\u078a\u078b\u078c\u078d\u078e\u078f\u0790\u0791\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799\u079a\u079b\u079c\u079d\u079e\u079f\u07a0\u07a1\u07a2\u07a3\u07a4\u07a5\u07a6\u07a7\u07a8\u07a9\u07aa\u07ab\u07ac\u07ad\u07ae\u07af\u07b0\u07b1\u07c0\u07c1\u07c2\u07c3\u07c4\u07c5\u07c6\u07c7\u07c8\u07c9\u07ca\u07cb\u07cc\u07cd\u07ce\u07cf\u07d0\u07d1\u07d2\u07d3\u07d4\u07d5\u07d6\u07d7\u07d8\u07d9\u07da\u07db\u07dc\u07dd\u07de\u07df\u07e0\u07e1\u07e2\u07e3\u07e4\u07e5\u07e6\u07e7\u07e8\u07e9\u07ea\u07eb\u07ec\u07ed\u07ee\u07ef\u07f0\u07f1\u07f2\u07f3\u07f4\u07f5\u07fa\u0800\u0801\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809\u080a\u080b\u080c\u080d\u080e\u080f\u0810\u0811\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819\u081a\u081b\u081c\u081d\u081e\u081f\u0820\u0821\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829\u082a\u082b\u082c\u082d\u0840\u0841\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849\u084a\u084b\u084c\u084d\u084e\u084f\u0850\u0851\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859\u085a\u085b\u08a0\u08a1\u08a2\u08a3\u08a4\u08a5\u08a6\u08a7\u08a8\u08a9\u08aa\u08ab\u08ac\u08ad\u08ae\u08af\u08b0\u08b1\u08b2\u08b3\u08b4\u08b6\u08b7\u08b8\u08b9\u08ba\u08bb\u08bc\u08bd\u08d4\u08d5\u08d6\u08d7\u08d8\u08d9\u08da\u08db\u08dc\u08dd\u08de\u08df\u08e0\u08e1\u08e3\u08e4\u08e5\u08e6\u08e7\u08e8\u08e9\u08ea\u08eb\u08ec\u08ed\u08ee\u08ef\u08f0\u08f1\u08f2\u08f3\u08f4\u08f5\u08f6\u08f7\u08f8\u08f9\u08fa\u08fb\u08fc\u08fd\u08fe\u08ff\u0900\u0901\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909\u090a\u090b\u090c\u090d\u090e\u090f\u0910\u0911\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919\u091a\u091b\u091c\u091d\u091e\u091f\u0920\u0921\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929\u092a\u092b\u092c\u092d\u092e\u092f\u0930\u0931\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939\u093a\u093b\u093c\u093d\u093e\u093f\u0940\u0941\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949\u094a\u094b\u094c\u094d\u094e\u094f\u0950\u0951\u0952\u0953\u0954\u0955\u0956\u0957\u0960\u0961\u0962\u0963\u0966\u0967\u0968\u0969\u096a\u096b\u096c\u096d\u096e\u096f\u0971\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979\u097a\u097b\u097c\u097d\u097e\u097f\u0980\u0981\u0982\u0983\u0985\u0986\u0987\u0988\u0989\u098a\u098b\u098c\u098f\u0990\u0993\u0994\u0995\u0996\u0997\u0998\u0999\u099a\u099b\u099c\u099d\u099e\u099f\u09a0\u09a1\u09a2\u09a3\u09a4\u09a5\u09a6\u09a7\u09a8\u09aa\u09ab\u09ac\u09ad\u09ae\u09af\u09b0\u09b2\u09b6\u09b7\u09b8\u09b9\u09bc\u09bd\u09be\u09bf\u09c0\u09c1\u09c2\u09c3\u09c4\u09c7\u09c8\u09cb\u09cc\u09cd\u09ce\u09d7\u09e0\u09e1\u09e2\u09e3\u09e6\u09e7\u09e8\u09e9\u09ea\u09eb\u09ec\u09ed\u09ee\u09ef\u09f0\u09f1\u0a01\u0a02\u0a03\u0a05\u0a06\u0a07\u0a08\u0a09\u0a0a\u0a0f\u0a10\u0a13\u0a14\u0a15\u0a16\u0a17\u0a18\u0a19\u0a1a\u0a1b\u0a1c\u0a1d\u0a1e\u0a1f\u0a20\u0a21\u0a22\u0a23\u0a24\u0a25\u0a26\u0a27\u0a28\u0a2a\u0a2b\u0a2c\u0a2d\u0a2e\u0a2f\u0a30\u0a32\u0a35\u0a38\u0a39\u0a3c\u0a3e\u0a3f\u0a40\u0a41\u0a42\u0a47\u0a48\u0a4b\u0a4c\u0a4d\u0a51\u0a5c\u0a66\u0a67\u0a68\u0a69\u0a6a\u0a6b\u0a6c\u0a6d\u0a6e\u0a6f\u0a70\u0a71\u0a72\u0a73\u0a74\u0a75\u0a81\u0a82\u0a83\u0a85\u0a86\u0a87\u0a88\u0a89\u0a8a\u0a8b\u0a8c\u0a8d\u0a8f\u0a90\u0a91\u0a93\u0a94\u0a95\u0a96\u0a97\u0a98\u0a99\u0a9a\u0a9b\u0a9c\u0a9d\u0a9e\u0a9f\u0aa0\u0aa1\u0aa2\u0aa3\u0aa4\u0aa5\u0aa6\u0aa7\u0aa8\u0aaa\u0aab\u0aac\u0aad\u0aae\u0aaf\u0ab0\u0ab2\u0ab3\u0ab5\u0ab6\u0ab7\u0ab8\u0ab9\u0abc\u0abd\u0abe\u0abf\u0ac0\u0ac1\u0ac2\u0ac3\u0ac4\u0ac5\u0ac7\u0ac8\u0ac9\u0acb\u0acc\u0acd\u0ad0\u0ae0\u0ae1\u0ae2\u0ae3\u0ae6\u0ae7\u0ae8\u0ae9\u0aea\u0aeb\u0aec\u0aed\u0aee\u0aef\u0af9\u0b01\u0b02\u0b03\u0b05\u0b06\u0b07\u0b08\u0b09\u0b0a\u0b0b\u0b0c\u0b0f\u0b10\u0b13\u0b14\u0b15\u0b16\u0b17\u0b18\u0b19\u0b1a\u0b1b\u0b1c\u0b1d\u0b1e\u0b1f\u0b20\u0b21\u0b22\u0b23\u0b24\u0b25\u0b26\u0b27\u0b28\u0b2a\u0b2b\u0b2c\u0b2d\u0b2e\u0b2f\u0b30\u0b32\u0b33\u0b35\u0b36\u0b37\u0b38\u0b39\u0b3c\u0b3d\u0b3e\u0b3f\u0b40\u0b41\u0b42\u0b43\u0b44\u0b47\u0b48\u0b4b\u0b4c\u0b4d\u0b56\u0b57\u0b5f\u0b60\u0b61\u0b62\u0b63\u0b66\u0b67\u0b68\u0b69\u0b6a\u0b6b\u0b6c\u0b6d\u0b6e\u0b6f\u0b71\u0b82\u0b83\u0b85\u0b86\u0b87\u0b88\u0b89\u0b8a\u0b8e\u0b8f\u0b90\u0b92\u0b93\u0b94\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8\u0ba9\u0baa\u0bae\u0baf\u0bb0\u0bb1\u0bb2\u0bb3\u0bb4\u0bb5\u0bb6\u0bb7\u0bb8\u0bb9\u0bbe\u0bbf\u0bc0\u0bc1\u0bc2\u0bc6\u0bc7\u0bc8\u0bca\u0bcb\u0bcc\u0bcd\u0bd0\u0bd7\u0be6\u0be7\u0be8\u0be9\u0bea\u0beb\u0bec\u0bed\u0bee\u0bef\u0c00\u0c01\u0c02\u0c03\u0c05\u0c06\u0c07\u0c08\u0c09\u0c0a\u0c0b\u0c0c\u0c0e\u0c0f\u0c10\u0c12\u0c13\u0c14\u0c15\u0c16\u0c17\u0c18\u0c19\u0c1a\u0c1b\u0c1c\u0c1d\u0c1e\u0c1f\u0c20\u0c21\u0c22\u0c23\u0c24\u0c25\u0c26\u0c27\u0c28\u0c2a\u0c2b\u0c2c\u0c2d\u0c2e\u0c2f\u0c30\u0c31\u0c32\u0c33\u0c34\u0c35\u0c36\u0c37\u0c38\u0c39\u0c3d\u0c3e\u0c3f\u0c40\u0c41\u0c42\u0c43\u0c44\u0c46\u0c47\u0c48\u0c4a\u0c4b\u0c4c\u0c4d\u0c55\u0c56\u0c58\u0c59\u0c5a\u0c60\u0c61\u0c62\u0c63\u0c66\u0c67\u0c68\u0c69\u0c6a\u0c6b\u0c6c\u0c6d\u0c6e\u0c6f\u0c80\u0c81\u0c82\u0c83\u0c85\u0c86\u0c87\u0c88\u0c89\u0c8a\u0c8b\u0c8c\u0c8e\u0c8f\u0c90\u0c92\u0c93\u0c94\u0c95\u0c96\u0c97\u0c98\u0c99\u0c9a\u0c9b\u0c9c\u0c9d\u0c9e\u0c9f\u0ca0\u0ca1\u0ca2\u0ca3\u0ca4\u0ca5\u0ca6\u0ca7\u0ca8\u0caa\u0cab\u0cac\u0cad\u0cae\u0caf\u0cb0\u0cb1\u0cb2\u0cb3\u0cb5\u0cb6\u0cb7\u0cb8\u0cb9\u0cbc\u0cbd\u0cbe\u0cbf\u0cc0\u0cc1\u0cc2\u0cc3\u0cc4\u0cc6\u0cc7\u0cc8\u0cca\u0ccb\u0ccc\u0ccd\u0cd5\u0cd6\u0cde\u0ce0\u0ce1\u0ce2\u0ce3\u0ce6\u0ce7\u0ce8\u0ce9\u0cea\u0ceb\u0cec\u0ced\u0cee\u0cef\u0cf1\u0cf2\u0d01\u0d02\u0d03\u0d05\u0d06\u0d07\u0d08\u0d09\u0d0a\u0d0b\u0d0c\u0d0e\u0d0f\u0d10\u0d12\u0d13\u0d14\u0d15\u0d16\u0d17\u0d18\u0d19\u0d1a\u0d1b\u0d1c\u0d1d\u0d1e\u0d1f\u0d20\u0d21\u0d22\u0d23\u0d24\u0d25\u0d26\u0d27\u0d28\u0d29\u0d2a\u0d2b\u0d2c\u0d2d\u0d2e\u0d2f\u0d30\u0d31\u0d32\u0d33\u0d34\u0d35\u0d36\u0d37\u0d38\u0d39\u0d3a\u0d3d\u0d3e\u0d3f\u0d40\u0d41\u0d42\u0d43\u0d44\u0d46\u0d47\u0d48\u0d4a\u0d4b\u0d4c\u0d4d\u0d4e\u0d54\u0d55\u0d56\u0d57\u0d5f\u0d60\u0d61\u0d62\u0d63\u0d66\u0d67\u0d68\u0d69\u0d6a\u0d6b\u0d6c\u0d6d\u0d6e\u0d6f\u0d7a\u0d7b\u0d7c\u0d7d\u0d7e\u0d7f\u0d82\u0d83\u0d85\u0d86\u0d87\u0d88\u0d89\u0d8a\u0d8b\u0d8c\u0d8d\u0d8e\u0d8f\u0d90\u0d91\u0d92\u0d93\u0d94\u0d95\u0d96\u0d9a\u0d9b\u0d9c\u0d9d\u0d9e\u0d9f\u0da0\u0da1\u0da2\u0da3\u0da4\u0da5\u0da6\u0da7\u0da8\u0da9\u0daa\u0dab\u0dac\u0dad\u0dae\u0daf\u0db0\u0db1\u0db3\u0db4\u0db5\u0db6\u0db7\u0db8\u0db9\u0dba\u0dbb\u0dbd\u0dc0\u0dc1\u0dc2\u0dc3\u0dc4\u0dc5\u0dc6\u0dca\u0dcf\u0dd0\u0dd1\u0dd2\u0dd3\u0dd4\u0dd6\u0dd8\u0dd9\u0dda\u0ddb\u0ddc\u0ddd\u0dde\u0ddf\u0de6\u0de7\u0de8\u0de9\u0dea\u0deb\u0dec\u0ded\u0dee\u0def\u0df2\u0df3\u0e01\u0e02\u0e03\u0e04\u0e05\u0e06\u0e07\u0e08\u0e09\u0e0a\u0e0b\u0e0c\u0e0d\u0e0e\u0e0f\u0e10\u0e11\u0e12\u0e13\u0e14\u0e15\u0e16\u0e17\u0e18\u0e19\u0e1a\u0e1b\u0e1c\u0e1d\u0e1e\u0e1f\u0e20\u0e21\u0e22\u0e23\u0e24\u0e25\u0e26\u0e27\u0e28\u0e29\u0e2a\u0e2b\u0e2c\u0e2d\u0e2e\u0e2f\u0e30\u0e31\u0e32\u0e34\u0e35\u0e36\u0e37\u0e38\u0e39\u0e3a\u0e40\u0e41\u0e42\u0e43\u0e44\u0e45\u0e46\u0e47\u0e48\u0e49\u0e4a\u0e4b\u0e4c\u0e4d\u0e4e\u0e50\u0e51\u0e52\u0e53\u0e54\u0e55\u0e56\u0e57\u0e58\u0e59\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94\u0e95\u0e96\u0e97\u0e99\u0e9a\u0e9b\u0e9c\u0e9d\u0e9e\u0e9f\u0ea1\u0ea2\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead\u0eae\u0eaf\u0eb0\u0eb1\u0eb2\u0eb4\u0eb5\u0eb6\u0eb7\u0eb8\u0eb9\u0ebb\u0ebc\u0ebd\u0ec0\u0ec1\u0ec2\u0ec3\u0ec4\u0ec6\u0ec8\u0ec9\u0eca\u0ecb\u0ecc\u0ecd\u0ed0\u0ed1\u0ed2\u0ed3\u0ed4\u0ed5\u0ed6\u0ed7\u0ed8\u0ed9\u0ede\u0edf\u0f00\u0f18\u0f19\u0f20\u0f21\u0f22\u0f23\u0f24\u0f25\u0f26\u0f27\u0f28\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f40\u0f41\u0f42\u0f44\u0f45\u0f46\u0f47\u0f49\u0f4a\u0f4b\u0f4c\u0f4e\u0f4f\u0f50\u0f51\u0f53\u0f54\u0f55\u0f56\u0f58\u0f59\u0f5a\u0f5b\u0f5d\u0f5e\u0f5f\u0f60\u0f61\u0f62\u0f63\u0f64\u0f65\u0f66\u0f67\u0f68\u0f6a\u0f6b\u0f6c\u0f71\u0f72\u0f74\u0f7a\u0f7b\u0f7c\u0f7d\u0f7e\u0f7f\u0f80\u0f82\u0f83\u0f84\u0f86\u0f87\u0f88\u0f89\u0f8a\u0f8b\u0f8c\u0f8d\u0f8e\u0f8f\u0f90\u0f91\u0f92\u0f94\u0f95\u0f96\u0f97\u0f99\u0f9a\u0f9b\u0f9c\u0f9e\u0f9f\u0fa0\u0fa1\u0fa3\u0fa4\u0fa5\u0fa6\u0fa8\u0fa9\u0faa\u0fab\u0fad\u0fae\u0faf\u0fb0\u0fb1\u0fb2\u0fb3\u0fb4\u0fb5\u0fb6\u0fb7\u0fb8\u0fba\u0fbb\u0fbc\u0fc6\u1000\u1001\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009\u100a\u100b\u100c\u100d\u100e\u100f\u1010\u1011\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019\u101a\u101b\u101c\u101d\u101e\u101f\u1020\u1021\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029\u102a\u102b\u102c\u102d\u102e\u102f\u1030\u1031\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039\u103a\u103b\u103c\u103d\u103e\u103f\u1040\u1041\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049\u1050\u1051\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059\u105a\u105b\u105c\u105d\u105e\u105f\u1060\u1061\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069\u106a\u106b\u106c\u106d\u106e\u106f\u1070\u1071\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079\u107a\u107b\u107c\u107d\u107e\u107f\u1080\u1081\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089\u108a\u108b\u108c\u108d\u108e\u108f\u1090\u1091\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099\u109a\u109b\u109c\u109d\u10a0\u10a1\u10a2\u10a3\u10a4\u10a5\u10a6\u10a7\u10a8\u10a9\u10aa\u10ab\u10ac\u10ad\u10ae\u10af\u10b0\u10b1\u10b2\u10b3\u10b4\u10b5\u10b6\u10b7\u10b8\u10b9\u10ba\u10bb\u10bc\u10bd\u10be\u10bf\u10c0\u10c1\u10c2\u10c3\u10c4\u10c5\u10c7\u10cd\u10d0\u10d1\u10d2\u10d3\u10d4\u10d5\u10d6\u10d7\u10d8\u10d9\u10da\u10db\u10dc\u10dd\u10de\u10df\u10e0\u10e1\u10e2\u10e3\u10e4\u10e5\u10e6\u10e7\u10e8\u10e9\u10ea\u10eb\u10ec\u10ed\u10ee\u10ef\u10f0\u10f1\u10f2\u10f3\u10f4\u10f5\u10f6\u10f7\u10f8\u10f9\u10fa\u10fc\u10fd\u10fe\u10ff\u1100\u1101\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109\u110a\u110b\u110c\u110d\u110e\u110f\u1110\u1111\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119\u111a\u111b\u111c\u111d\u111e\u111f\u1120\u1121\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129\u112a\u112b\u112c\u112d\u112e\u112f\u1130\u1131\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139\u113a\u113b\u113c\u113d\u113e\u113f\u1140\u1141\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149\u114a\u114b\u114c\u114d\u114e\u114f\u1150\u1151\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159\u115a\u115b\u115c\u115d\u115e\u115f\u1160\u1161\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169\u116a\u116b\u116c\u116d\u116e\u116f\u1170\u1171\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179\u117a\u117b\u117c\u117d\u117e\u117f\u1180\u1181\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189\u118a\u118b\u118c\u118d\u118e\u118f\u1190\u1191\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199\u119a\u119b\u119c\u119d\u119e\u119f\u11a0\u11a1\u11a2\u11a3\u11a4\u11a5\u11a6\u11a7\u11a8\u11a9\u11aa\u11ab\u11ac\u11ad\u11ae\u11af\u11b0\u11b1\u11b2\u11b3\u11b4\u11b5\u11b6\u11b7\u11b8\u11b9\u11ba\u11bb\u11bc\u11bd\u11be\u11bf\u11c0\u11c1\u11c2\u11c3\u11c4\u11c5\u11c6\u11c7\u11c8\u11c9\u11ca\u11cb\u11cc\u11cd\u11ce\u11cf\u11d0\u11d1\u11d2\u11d3\u11d4\u11d5\u11d6\u11d7\u11d8\u11d9\u11da\u11db\u11dc\u11dd\u11de\u11df\u11e0\u11e1\u11e2\u11e3\u11e4\u11e5\u11e6\u11e7\u11e8\u11e9\u11ea\u11eb\u11ec\u11ed\u11ee\u11ef\u11f0\u11f1\u11f2\u11f3\u11f4\u11f5\u11f6\u11f7\u11f8\u11f9\u11fa\u11fb\u11fc\u11fd\u11fe\u11ff\u1200\u1201\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209\u120a\u120b\u120c\u120d\u120e\u120f\u1210\u1211\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219\u121a\u121b\u121c\u121d\u121e\u121f\u1220\u1221\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229\u122a\u122b\u122c\u122d\u122e\u122f\u1230\u1231\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239\u123a\u123b\u123c\u123d\u123e\u123f\u1240\u1241\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u124a\u124b\u124c\u124d\u1250\u1251\u1252\u1253\u1254\u1255\u1256\u1258\u125a\u125b\u125c\u125d\u1260\u1261\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269\u126a\u126b\u126c\u126d\u126e\u126f\u1270\u1271\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279\u127a\u127b\u127c\u127d\u127e\u127f\u1280\u1281\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u128a\u128b\u128c\u128d\u1290\u1291\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299\u129a\u129b\u129c\u129d\u129e\u129f\u12a0\u12a1\u12a2\u12a3\u12a4\u12a5\u12a6\u12a7\u12a8\u12a9\u12aa\u12ab\u12ac\u12ad\u12ae\u12af\u12b0\u12b2\u12b3\u12b4\u12b5\u12b8\u12b9\u12ba\u12bb\u12bc\u12bd\u12be\u12c0\u12c2\u12c3\u12c4\u12c5\u12c8\u12c9\u12ca\u12cb\u12cc\u12cd\u12ce\u12cf\u12d0\u12d1\u12d2\u12d3\u12d4\u12d5\u12d6\u12d8\u12d9\u12da\u12db\u12dc\u12dd\u12de\u12df\u12e0\u12e1\u12e2\u12e3\u12e4\u12e5\u12e6\u12e7\u12e8\u12e9\u12ea\u12eb\u12ec\u12ed\u12ee\u12ef\u12f0\u12f1\u12f2\u12f3\u12f4\u12f5\u12f6\u12f7\u12f8\u12f9\u12fa\u12fb\u12fc\u12fd\u12fe\u12ff\u1300\u1301\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309\u130a\u130b\u130c\u130d\u130e\u130f\u1310\u1312\u1313\u1314\u1315\u1318\u1319\u131a\u131b\u131c\u131d\u131e\u131f\u1320\u1321\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329\u132a\u132b\u132c\u132d\u132e\u132f\u1330\u1331\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339\u133a\u133b\u133c\u133d\u133e\u133f\u1340\u1341\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349\u134a\u134b\u134c\u134d\u134e\u134f\u1350\u1351\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359\u135a\u135d\u135e\u135f\u1369\u1370\u1371\u1380\u1381\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389\u138a\u138b\u138c\u138d\u138e\u138f\u13a0\u13a1\u13a2\u13a3\u13a4\u13a5\u13a6\u13a7\u13a8\u13a9\u13aa\u13ab\u13ac\u13ad\u13ae\u13af\u13b0\u13b1\u13b2\u13b3\u13b4\u13b5\u13b6\u13b7\u13b8\u13b9\u13ba\u13bb\u13bc\u13bd\u13be\u13bf\u13c0\u13c1\u13c2\u13c3\u13c4\u13c5\u13c6\u13c7\u13c8\u13c9\u13ca\u13cb\u13cc\u13cd\u13ce\u13cf\u13d0\u13d1\u13d2\u13d3\u13d4\u13d5\u13d6\u13d7\u13d8\u13d9\u13da\u13db\u13dc\u13dd\u13de\u13df\u13e0\u13e1\u13e2\u13e3\u13e4\u13e5\u13e6\u13e7\u13e8\u13e9\u13ea\u13eb\u13ec\u13ed\u13ee\u13ef\u13f0\u13f1\u13f2\u13f3\u13f4\u13f5\u13f8\u13f9\u13fa\u13fb\u13fc\u13fd\u1401\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409\u140a\u140b\u140c\u140d\u140e\u140f\u1410\u1411\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419\u141a\u141b\u141c\u141d\u141e\u141f\u1420\u1421\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429\u142a\u142b\u142c\u142d\u142e\u142f\u1430\u1431\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439\u143a\u143b\u143c\u143d\u143e\u143f\u1440\u1441\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449\u144a\u144b\u144c\u144d\u144e\u144f\u1450\u1451\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459\u145a\u145b\u145c\u145d\u145e\u145f\u1460\u1461\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469\u146a\u146b\u146c\u146d\u146e\u146f\u1470\u1471\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479\u147a\u147b\u147c\u147d\u147e\u147f\u1480\u1481\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489\u148a\u148b\u148c\u148d\u148e\u148f\u1490\u1491\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499\u149a\u149b\u149c\u149d\u149e\u149f\u14a0\u14a1\u14a2\u14a3\u14a4\u14a5\u14a6\u14a7\u14a8\u14a9\u14aa\u14ab\u14ac\u14ad\u14ae\u14af\u14b0\u14b1\u14b2\u14b3\u14b4\u14b5\u14b6\u14b7\u14b8\u14b9\u14ba\u14bb\u14bc\u14bd\u14be\u14bf\u14c0\u14c1\u14c2\u14c3\u14c4\u14c5\u14c6\u14c7\u14c8\u14c9\u14ca\u14cb\u14cc\u14cd\u14ce\u14cf\u14d0\u14d1\u14d2\u14d3\u14d4\u14d5\u14d6\u14d7\u14d8\u14d9\u14da\u14db\u14dc\u14dd\u14de\u14df\u14e0\u14e1\u14e2\u14e3\u14e4\u14e5\u14e6\u14e7\u14e8\u14e9\u14ea\u14eb\u14ec\u14ed\u14ee\u14ef\u14f0\u14f1\u14f2\u14f3\u14f4\u14f5\u14f6\u14f7\u14f8\u14f9\u14fa\u14fb\u14fc\u14fd\u14fe\u14ff\u1500\u1501\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509\u150a\u150b\u150c\u150d\u150e\u150f\u1510\u1511\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519\u151a\u151b\u151c\u151d\u151e\u151f\u1520\u1521\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529\u152a\u152b\u152c\u152d\u152e\u152f\u1530\u1531\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539\u153a\u153b\u153c\u153d\u153e\u153f\u1540\u1541\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549\u154a\u154b\u154c\u154d\u154e\u154f\u1550\u1551\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559\u155a\u155b\u155c\u155d\u155e\u155f\u1560\u1561\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569\u156a\u156b\u156c\u156d\u156e\u156f\u1570\u1571\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579\u157a\u157b\u157c\u157d\u157e\u157f\u1580\u1581\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589\u158a\u158b\u158c\u158d\u158e\u158f\u1590\u1591\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599\u159a\u159b\u159c\u159d\u159e\u159f\u15a0\u15a1\u15a2\u15a3\u15a4\u15a5\u15a6\u15a7\u15a8\u15a9\u15aa\u15ab\u15ac\u15ad\u15ae\u15af\u15b0\u15b1\u15b2\u15b3\u15b4\u15b5\u15b6\u15b7\u15b8\u15b9\u15ba\u15bb\u15bc\u15bd\u15be\u15bf\u15c0\u15c1\u15c2\u15c3\u15c4\u15c5\u15c6\u15c7\u15c8\u15c9\u15ca\u15cb\u15cc\u15cd\u15ce\u15cf\u15d0\u15d1\u15d2\u15d3\u15d4\u15d5\u15d6\u15d7\u15d8\u15d9\u15da\u15db\u15dc\u15dd\u15de\u15df\u15e0\u15e1\u15e2\u15e3\u15e4\u15e5\u15e6\u15e7\u15e8\u15e9\u15ea\u15eb\u15ec\u15ed\u15ee\u15ef\u15f0\u15f1\u15f2\u15f3\u15f4\u15f5\u15f6\u15f7\u15f8\u15f9\u15fa\u15fb\u15fc\u15fd\u15fe\u15ff\u1600\u1601\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609\u160a\u160b\u160c\u160d\u160e\u160f\u1610\u1611\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619\u161a\u161b\u161c\u161d\u161e\u161f\u1620\u1621\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629\u162a\u162b\u162c\u162d\u162e\u162f\u1630\u1631\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639\u163a\u163b\u163c\u163d\u163e\u163f\u1640\u1641\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649\u164a\u164b\u164c\u164d\u164e\u164f\u1650\u1651\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659\u165a\u165b\u165c\u165d\u165e\u165f\u1660\u1661\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669\u166a\u166b\u166c\u166f\u1670\u1671\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679\u167a\u167b\u167c\u167d\u167e\u167f\u1681\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689\u168a\u168b\u168c\u168d\u168e\u168f\u1690\u1691\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699\u169a\u16a0\u16a1\u16a2\u16a3\u16a4\u16a5\u16a6\u16a7\u16a8\u16a9\u16aa\u16ab\u16ac\u16ad\u16ae\u16af\u16b0\u16b1\u16b2\u16b3\u16b4\u16b5\u16b6\u16b7\u16b8\u16b9\u16ba\u16bb\u16bc\u16bd\u16be\u16bf\u16c0\u16c1\u16c2\u16c3\u16c4\u16c5\u16c6\u16c7\u16c8\u16c9\u16ca\u16cb\u16cc\u16cd\u16ce\u16cf\u16d0\u16d1\u16d2\u16d3\u16d4\u16d5\u16d6\u16d7\u16d8\u16d9\u16da\u16db\u16dc\u16dd\u16de\u16df\u16e0\u16e1\u16e2\u16e3\u16e4\u16e5\u16e6\u16e7\u16e8\u16e9\u16ea\u16ee\u16ef\u16f0\u16f1\u16f2\u16f3\u16f4\u16f5\u16f6\u16f7\u16f8\u1700\u1701\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709\u170a\u170b\u170c\u170e\u170f\u1710\u1711\u1712\u1713\u1714\u1720\u1721\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729\u172a\u172b\u172c\u172d\u172e\u172f\u1730\u1731\u1732\u1733\u1734\u1740\u1741\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749\u174a\u174b\u174c\u174d\u174e\u174f\u1750\u1751\u1752\u1753\u1760\u1761\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769\u176a\u176b\u176c\u176e\u176f\u1770\u1772\u1773\u1780\u1781\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789\u178a\u178b\u178c\u178d\u178e\u178f\u1790\u1791\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799\u179a\u179b\u179c\u179d\u179e\u179f\u17a0\u17a1\u17a2\u17a3\u17a4\u17a5\u17a6\u17a7\u17a8\u17a9\u17aa\u17ab\u17ac\u17ad\u17ae\u17af\u17b0\u17b1\u17b2\u17b3\u17b4\u17b5\u17b6\u17b7\u17b8\u17b9\u17ba\u17bb\u17bc\u17bd\u17be\u17bf\u17c0\u17c1\u17c2\u17c3\u17c4\u17c5\u17c6\u17c7\u17c8\u17c9\u17ca\u17cb\u17cc\u17cd\u17ce\u17cf\u17d0\u17d1\u17d2\u17d3\u17d7\u17dc\u17dd\u17e0\u17e1\u17e2\u17e3\u17e4\u17e5\u17e6\u17e7\u17e8\u17e9\u180b\u180c\u180d\u1810\u1811\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819\u1820\u1821\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829\u182a\u182b\u182c\u182d\u182e\u182f\u1830\u1831\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839\u183a\u183b\u183c\u183d\u183e\u183f\u1840\u1841\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849\u184a\u184b\u184c\u184d\u184e\u184f\u1850\u1851\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859\u185a\u185b\u185c\u185d\u185e\u185f\u1860\u1861\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869\u186a\u186b\u186c\u186d\u186e\u186f\u1870\u1871\u1872\u1873\u1874\u1875\u1876\u1877\u1880\u1881\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889\u188a\u188b\u188c\u188d\u188e\u188f\u1890\u1891\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899\u189a\u189b\u189c\u189d\u189e\u189f\u18a0\u18a1\u18a2\u18a3\u18a4\u18a5\u18a6\u18a7\u18a8\u18a9\u18aa\u18b0\u18b1\u18b2\u18b3\u18b4\u18b5\u18b6\u18b7\u18b8\u18b9\u18ba\u18bb\u18bc\u18bd\u18be\u18bf\u18c0\u18c1\u18c2\u18c3\u18c4\u18c5\u18c6\u18c7\u18c8\u18c9\u18ca\u18cb\u18cc\u18cd\u18ce\u18cf\u18d0\u18d1\u18d2\u18d3\u18d4\u18d5\u18d6\u18d7\u18d8\u18d9\u18da\u18db\u18dc\u18dd\u18de\u18df\u18e0\u18e1\u18e2\u18e3\u18e4\u18e5\u18e6\u18e7\u18e8\u18e9\u18ea\u18eb\u18ec\u18ed\u18ee\u18ef\u18f0\u18f1\u18f2\u18f3\u18f4\u18f5\u1900\u1901\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909\u190a\u190b\u190c\u190d\u190e\u190f\u1910\u1911\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919\u191a\u191b\u191c\u191d\u191e\u1920\u1921\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929\u192a\u192b\u1930\u1931\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939\u193a\u193b\u1946\u1947\u1948\u1949\u194a\u194b\u194c\u194d\u194e\u194f\u1950\u1951\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959\u195a\u195b\u195c\u195d\u195e\u195f\u1960\u1961\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969\u196a\u196b\u196c\u196d\u1970\u1971\u1972\u1973\u1974\u1980\u1981\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989\u198a\u198b\u198c\u198d\u198e\u198f\u1990\u1991\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999\u199a\u199b\u199c\u199d\u199e\u199f\u19a0\u19a1\u19a2\u19a3\u19a4\u19a5\u19a6\u19a7\u19a8\u19a9\u19aa\u19ab\u19b0\u19b1\u19b2\u19b3\u19b4\u19b5\u19b6\u19b7\u19b8\u19b9\u19ba\u19bb\u19bc\u19bd\u19be\u19bf\u19c0\u19c1\u19c2\u19c3\u19c4\u19c5\u19c6\u19c7\u19c8\u19c9\u19d0\u19d1\u19d2\u19d3\u19d4\u19d5\u19d6\u19d7\u19d8\u19d9\u19da\u1a00\u1a01\u1a02\u1a03\u1a04\u1a05\u1a06\u1a07\u1a08\u1a09\u1a0a\u1a0b\u1a0c\u1a0d\u1a0e\u1a0f\u1a10\u1a11\u1a12\u1a13\u1a14\u1a15\u1a16\u1a17\u1a18\u1a19\u1a1a\u1a1b\u1a20\u1a21\u1a22\u1a23\u1a24\u1a25\u1a26\u1a27\u1a28\u1a29\u1a2a\u1a2b\u1a2c\u1a2d\u1a2e\u1a2f\u1a30\u1a31\u1a32\u1a33\u1a34\u1a35\u1a36\u1a37\u1a38\u1a39\u1a3a\u1a3b\u1a3c\u1a3d\u1a3e\u1a3f\u1a40\u1a41\u1a42\u1a43\u1a44\u1a45\u1a46\u1a47\u1a48\u1a49\u1a4a\u1a4b\u1a4c\u1a4d\u1a4e\u1a4f\u1a50\u1a51\u1a52\u1a53\u1a54\u1a55\u1a56\u1a57\u1a58\u1a59\u1a5a\u1a5b\u1a5c\u1a5d\u1a5e\u1a60\u1a61\u1a62\u1a63\u1a64\u1a65\u1a66\u1a67\u1a68\u1a69\u1a6a\u1a6b\u1a6c\u1a6d\u1a6e\u1a6f\u1a70\u1a71\u1a72\u1a73\u1a74\u1a75\u1a76\u1a77\u1a78\u1a79\u1a7a\u1a7b\u1a7c\u1a7f\u1a80\u1a81\u1a82\u1a83\u1a84\u1a85\u1a86\u1a87\u1a88\u1a89\u1a90\u1a91\u1a92\u1a93\u1a94\u1a95\u1a96\u1a97\u1a98\u1a99\u1aa7\u1ab0\u1ab1\u1ab2\u1ab3\u1ab4\u1ab5\u1ab6\u1ab7\u1ab8\u1ab9\u1aba\u1abb\u1abc\u1abd\u1b00\u1b01\u1b02\u1b03\u1b04\u1b05\u1b06\u1b07\u1b08\u1b09\u1b0a\u1b0b\u1b0c\u1b0d\u1b0e\u1b0f\u1b10\u1b11\u1b12\u1b13\u1b14\u1b15\u1b16\u1b17\u1b18\u1b19\u1b1a\u1b1b\u1b1c\u1b1d\u1b1e\u1b1f\u1b20\u1b21\u1b22\u1b23\u1b24\u1b25\u1b26\u1b27\u1b28\u1b29\u1b2a\u1b2b\u1b2c\u1b2d\u1b2e\u1b2f\u1b30\u1b31\u1b32\u1b33\u1b34\u1b35\u1b36\u1b37\u1b38\u1b39\u1b3a\u1b3b\u1b3c\u1b3d\u1b3e\u1b3f\u1b40\u1b41\u1b42\u1b43\u1b44\u1b45\u1b46\u1b47\u1b48\u1b49\u1b4a\u1b4b\u1b50\u1b51\u1b52\u1b53\u1b54\u1b55\u1b56\u1b57\u1b58\u1b59\u1b6b\u1b6c\u1b6d\u1b6e\u1b6f\u1b70\u1b71\u1b72\u1b73\u1b80\u1b81\u1b82\u1b83\u1b84\u1b85\u1b86\u1b87\u1b88\u1b89\u1b8a\u1b8b\u1b8c\u1b8d\u1b8e\u1b8f\u1b90\u1b91\u1b92\u1b93\u1b94\u1b95\u1b96\u1b97\u1b98\u1b99\u1b9a\u1b9b\u1b9c\u1b9d\u1b9e\u1b9f\u1ba0\u1ba1\u1ba2\u1ba3\u1ba4\u1ba5\u1ba6\u1ba7\u1ba8\u1ba9\u1baa\u1bab\u1bac\u1bad\u1bae\u1baf\u1bb0\u1bb1\u1bb2\u1bb3\u1bb4\u1bb5\u1bb6\u1bb7\u1bb8\u1bb9\u1bba\u1bbb\u1bbc\u1bbd\u1bbe\u1bbf\u1bc0\u1bc1\u1bc2\u1bc3\u1bc4\u1bc5\u1bc6\u1bc7\u1bc8\u1bc9\u1bca\u1bcb\u1bcc\u1bcd\u1bce\u1bcf\u1bd0\u1bd1\u1bd2\u1bd3\u1bd4\u1bd5\u1bd6\u1bd7\u1bd8\u1bd9\u1bda\u1bdb\u1bdc\u1bdd\u1bde\u1bdf\u1be0\u1be1\u1be2\u1be3\u1be4\u1be5\u1be6\u1be7\u1be8\u1be9\u1bea\u1beb\u1bec\u1bed\u1bee\u1bef\u1bf0\u1bf1\u1bf2\u1bf3\u1c00\u1c01\u1c02\u1c03\u1c04\u1c05\u1c06\u1c07\u1c08\u1c09\u1c0a\u1c0b\u1c0c\u1c0d\u1c0e\u1c0f\u1c10\u1c11\u1c12\u1c13\u1c14\u1c15\u1c16\u1c17\u1c18\u1c19\u1c1a\u1c1b\u1c1c\u1c1d\u1c1e\u1c1f\u1c20\u1c21\u1c22\u1c23\u1c24\u1c25\u1c26\u1c27\u1c28\u1c29\u1c2a\u1c2b\u1c2c\u1c2d\u1c2e\u1c2f\u1c30\u1c31\u1c32\u1c33\u1c34\u1c35\u1c36\u1c37\u1c40\u1c41\u1c42\u1c43\u1c44\u1c45\u1c46\u1c47\u1c48\u1c49\u1c4d\u1c4e\u1c4f\u1c50\u1c51\u1c52\u1c53\u1c54\u1c55\u1c56\u1c57\u1c58\u1c59\u1c5a\u1c5b\u1c5c\u1c5d\u1c5e\u1c5f\u1c60\u1c61\u1c62\u1c63\u1c64\u1c65\u1c66\u1c67\u1c68\u1c69\u1c6a\u1c6b\u1c6c\u1c6d\u1c6e\u1c6f\u1c70\u1c71\u1c72\u1c73\u1c74\u1c75\u1c76\u1c77\u1c78\u1c79\u1c7a\u1c7b\u1c7c\u1c7d\u1c80\u1c81\u1c82\u1c83\u1c84\u1c85\u1c86\u1c87\u1c88\u1cd0\u1cd1\u1cd2\u1cd4\u1cd5\u1cd6\u1cd7\u1cd8\u1cd9\u1cda\u1cdb\u1cdc\u1cdd\u1cde\u1cdf\u1ce0\u1ce1\u1ce2\u1ce3\u1ce4\u1ce5\u1ce6\u1ce7\u1ce8\u1ce9\u1cea\u1ceb\u1cec\u1ced\u1cee\u1cef\u1cf0\u1cf1\u1cf2\u1cf3\u1cf4\u1cf5\u1cf6\u1cf8\u1cf9\u1d00\u1d01\u1d02\u1d03\u1d04\u1d05\u1d06\u1d07\u1d08\u1d09\u1d0a\u1d0b\u1d0c\u1d0d\u1d0e\u1d0f\u1d10\u1d11\u1d12\u1d13\u1d14\u1d15\u1d16\u1d17\u1d18\u1d19\u1d1a\u1d1b\u1d1c\u1d1d\u1d1e\u1d1f\u1d20\u1d21\u1d22\u1d23\u1d24\u1d25\u1d26\u1d27\u1d28\u1d29\u1d2a\u1d2b\u1d2c\u1d2d\u1d2e\u1d2f\u1d30\u1d31\u1d32\u1d33\u1d34\u1d35\u1d36\u1d37\u1d38\u1d39\u1d3a\u1d3b\u1d3c\u1d3d\u1d3e\u1d3f\u1d40\u1d41\u1d42\u1d43\u1d44\u1d45\u1d46\u1d47\u1d48\u1d49\u1d4a\u1d4b\u1d4c\u1d4d\u1d4e\u1d4f\u1d50\u1d51\u1d52\u1d53\u1d54\u1d55\u1d56\u1d57\u1d58\u1d59\u1d5a\u1d5b\u1d5c\u1d5d\u1d5e\u1d5f\u1d60\u1d61\u1d62\u1d63\u1d64\u1d65\u1d66\u1d67\u1d68\u1d69\u1d6a\u1d6b\u1d6c\u1d6d\u1d6e\u1d6f\u1d70\u1d71\u1d72\u1d73\u1d74\u1d75\u1d76\u1d77\u1d78\u1d79\u1d7a\u1d7b\u1d7c\u1d7d\u1d7e\u1d7f\u1d80\u1d81\u1d82\u1d83\u1d84\u1d85\u1d86\u1d87\u1d88\u1d89\u1d8a\u1d8b\u1d8c\u1d8d\u1d8e\u1d8f\u1d90\u1d91\u1d92\u1d93\u1d94\u1d95\u1d96\u1d97\u1d98\u1d99\u1d9a\u1d9b\u1d9c\u1d9d\u1d9e\u1d9f\u1da0\u1da1\u1da2\u1da3\u1da4\u1da5\u1da6\u1da7\u1da8\u1da9\u1daa\u1dab\u1dac\u1dad\u1dae\u1daf\u1db0\u1db1\u1db2\u1db3\u1db4\u1db5\u1db6\u1db7\u1db8\u1db9\u1dba\u1dbb\u1dbc\u1dbd\u1dbe\u1dbf\u1dc0\u1dc1\u1dc2\u1dc3\u1dc4\u1dc5\u1dc6\u1dc7\u1dc8\u1dc9\u1dca\u1dcb\u1dcc\u1dcd\u1dce\u1dcf\u1dd0\u1dd1\u1dd2\u1dd3\u1dd4\u1dd5\u1dd6\u1dd7\u1dd8\u1dd9\u1dda\u1ddb\u1ddc\u1ddd\u1dde\u1ddf\u1de0\u1de1\u1de2\u1de3\u1de4\u1de5\u1de6\u1de7\u1de8\u1de9\u1dea\u1deb\u1dec\u1ded\u1dee\u1def\u1df0\u1df1\u1df2\u1df3\u1df4\u1df5\u1dfb\u1dfc\u1dfd\u1dfe\u1dff\u1e00\u1e01\u1e02\u1e03\u1e04\u1e05\u1e06\u1e07\u1e08\u1e09\u1e0a\u1e0b\u1e0c\u1e0d\u1e0e\u1e0f\u1e10\u1e11\u1e12\u1e13\u1e14\u1e15\u1e16\u1e17\u1e18\u1e19\u1e1a\u1e1b\u1e1c\u1e1d\u1e1e\u1e1f\u1e20\u1e21\u1e22\u1e23\u1e24\u1e25\u1e26\u1e27\u1e28\u1e29\u1e2a\u1e2b\u1e2c\u1e2d\u1e2e\u1e2f\u1e30\u1e31\u1e32\u1e33\u1e34\u1e35\u1e36\u1e37\u1e38\u1e39\u1e3a\u1e3b\u1e3c\u1e3d\u1e3e\u1e3f\u1e40\u1e41\u1e42\u1e43\u1e44\u1e45\u1e46\u1e47\u1e48\u1e49\u1e4a\u1e4b\u1e4c\u1e4d\u1e4e\u1e4f\u1e50\u1e51\u1e52\u1e53\u1e54\u1e55\u1e56\u1e57\u1e58\u1e59\u1e5a\u1e5b\u1e5c\u1e5d\u1e5e\u1e5f\u1e60\u1e61\u1e62\u1e63\u1e64\u1e65\u1e66\u1e67\u1e68\u1e69\u1e6a\u1e6b\u1e6c\u1e6d\u1e6e\u1e6f\u1e70\u1e71\u1e72\u1e73\u1e74\u1e75\u1e76\u1e77\u1e78\u1e79\u1e7a\u1e7b\u1e7c\u1e7d\u1e7e\u1e7f\u1e80\u1e81\u1e82\u1e83\u1e84\u1e85\u1e86\u1e87\u1e88\u1e89\u1e8a\u1e8b\u1e8c\u1e8d\u1e8e\u1e8f\u1e90\u1e91\u1e92\u1e93\u1e94\u1e95\u1e96\u1e97\u1e98\u1e99\u1e9b\u1e9c\u1e9d\u1e9e\u1e9f\u1ea0\u1ea1\u1ea2\u1ea3\u1ea4\u1ea5\u1ea6\u1ea7\u1ea8\u1ea9\u1eaa\u1eab\u1eac\u1ead\u1eae\u1eaf\u1eb0\u1eb1\u1eb2\u1eb3\u1eb4\u1eb5\u1eb6\u1eb7\u1eb8\u1eb9\u1eba\u1ebb\u1ebc\u1ebd\u1ebe\u1ebf\u1ec0\u1ec1\u1ec2\u1ec3\u1ec4\u1ec5\u1ec6\u1ec7\u1ec8\u1ec9\u1eca\u1ecb\u1ecc\u1ecd\u1ece\u1ecf\u1ed0\u1ed1\u1ed2\u1ed3\u1ed4\u1ed5\u1ed6\u1ed7\u1ed8\u1ed9\u1eda\u1edb\u1edc\u1edd\u1ede\u1edf\u1ee0\u1ee1\u1ee2\u1ee3\u1ee4\u1ee5\u1ee6\u1ee7\u1ee8\u1ee9\u1eea\u1eeb\u1eec\u1eed\u1eee\u1eef\u1ef0\u1ef1\u1ef2\u1ef3\u1ef4\u1ef5\u1ef6\u1ef7\u1ef8\u1ef9\u1efa\u1efb\u1efc\u1efd\u1efe\u1eff\u1f00\u1f01\u1f02\u1f03\u1f04\u1f05\u1f06\u1f07\u1f08\u1f09\u1f0a\u1f0b\u1f0c\u1f0d\u1f0e\u1f0f\u1f10\u1f11\u1f12\u1f13\u1f14\u1f15\u1f18\u1f19\u1f1a\u1f1b\u1f1c\u1f1d\u1f20\u1f21\u1f22\u1f23\u1f24\u1f25\u1f26\u1f27\u1f28\u1f29\u1f2a\u1f2b\u1f2c\u1f2d\u1f2e\u1f2f\u1f30\u1f31\u1f32\u1f33\u1f34\u1f35\u1f36\u1f37\u1f38\u1f39\u1f3a\u1f3b\u1f3c\u1f3d\u1f3e\u1f3f\u1f40\u1f41\u1f42\u1f43\u1f44\u1f45\u1f48\u1f49\u1f4a\u1f4b\u1f4c\u1f4d\u1f50\u1f51\u1f52\u1f53\u1f54\u1f55\u1f56\u1f57\u1f59\u1f5b\u1f5d\u1f5f\u1f60\u1f61\u1f62\u1f63\u1f64\u1f65\u1f66\u1f67\u1f68\u1f69\u1f6a\u1f6b\u1f6c\u1f6d\u1f6e\u1f6f\u1f70\u1f71\u1f72\u1f73\u1f74\u1f75\u1f76\u1f77\u1f78\u1f79\u1f7a\u1f7b\u1f7c\u1f7d\u1f80\u1f81\u1f82\u1f83\u1f84\u1f85\u1f86\u1f87\u1f88\u1f89\u1f8a\u1f8b\u1f8c\u1f8d\u1f8e\u1f8f\u1f90\u1f91\u1f92\u1f93\u1f94\u1f95\u1f96\u1f97\u1f98\u1f99\u1f9a\u1f9b\u1f9c\u1f9d\u1f9e\u1f9f\u1fa0\u1fa1\u1fa2\u1fa3\u1fa4\u1fa5\u1fa6\u1fa7\u1fa8\u1fa9\u1faa\u1fab\u1fac\u1fad\u1fae\u1faf\u1fb0\u1fb1\u1fb2\u1fb3\u1fb4\u1fb6\u1fb7\u1fb8\u1fb9\u1fba\u1fbb\u1fbc\u1fbe\u1fc2\u1fc3\u1fc4\u1fc6\u1fc7\u1fc8\u1fc9\u1fca\u1fcb\u1fcc\u1fd0\u1fd1\u1fd2\u1fd3\u1fd6\u1fd7\u1fd8\u1fd9\u1fda\u1fdb\u1fe0\u1fe1\u1fe2\u1fe3\u1fe4\u1fe5\u1fe6\u1fe7\u1fe8\u1fe9\u1fea\u1feb\u1fec\u1ff2\u1ff3\u1ff4\u1ff6\u1ff7\u1ff8\u1ff9\u1ffa\u1ffb\u1ffc\u203f\u2040\u2054\u2071\u207f\u2090\u2091\u2092\u2093\u2094\u2095\u2096\u2097\u2098\u2099\u209a\u209b\u209c\u20d0\u20d1\u20d2\u20d3\u20d4\u20d5\u20d6\u20d7\u20d8\u20d9\u20da\u20db\u20dc\u20e1\u20e5\u20e6\u20e7\u20e8\u20e9\u20ea\u20eb\u20ec\u20ed\u20ee\u20ef\u20f0\u2102\u2107\u210a\u210b\u210c\u210d\u210e\u210f\u2110\u2111\u2112\u2113\u2115\u2118\u2119\u211a\u211b\u211c\u211d\u2124\u2126\u2128\u212a\u212b\u212c\u212d\u212e\u212f\u2130\u2131\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139\u213c\u213d\u213e\u213f\u2145\u2146\u2147\u2148\u2149\u214e\u2160\u2164\u2169\u216c\u216d\u216e\u216f\u2170\u2174\u2179\u217c\u217d\u217e\u217f\u2180\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188\u2c00\u2c01\u2c02\u2c03\u2c04\u2c05\u2c06\u2c07\u2c08\u2c09\u2c0a\u2c0b\u2c0c\u2c0d\u2c0e\u2c0f\u2c10\u2c11\u2c12\u2c13\u2c14\u2c15\u2c16\u2c17\u2c18\u2c19\u2c1a\u2c1b\u2c1c\u2c1d\u2c1e\u2c1f\u2c20\u2c21\u2c22\u2c23\u2c24\u2c25\u2c26\u2c27\u2c28\u2c29\u2c2a\u2c2b\u2c2c\u2c2d\u2c2e\u2c30\u2c31\u2c32\u2c33\u2c34\u2c35\u2c36\u2c37\u2c38\u2c39\u2c3a\u2c3b\u2c3c\u2c3d\u2c3e\u2c3f\u2c40\u2c41\u2c42\u2c43\u2c44\u2c45\u2c46\u2c47\u2c48\u2c49\u2c4a\u2c4b\u2c4c\u2c4d\u2c4e\u2c4f\u2c50\u2c51\u2c52\u2c53\u2c54\u2c55\u2c56\u2c57\u2c58\u2c59\u2c5a\u2c5b\u2c5c\u2c5d\u2c5e\u2c60\u2c61\u2c62\u2c63\u2c64\u2c65\u2c66\u2c67\u2c68\u2c69\u2c6a\u2c6b\u2c6c\u2c6d\u2c6e\u2c6f\u2c70\u2c71\u2c72\u2c73\u2c74\u2c75\u2c76\u2c77\u2c78\u2c79\u2c7a\u2c7b\u2c7c\u2c7d\u2c7e\u2c7f\u2c80\u2c81\u2c82\u2c83\u2c84\u2c85\u2c86\u2c87\u2c88\u2c89\u2c8a\u2c8b\u2c8c\u2c8d\u2c8e\u2c8f\u2c90\u2c91\u2c92\u2c93\u2c94\u2c95\u2c96\u2c97\u2c98\u2c99\u2c9a\u2c9b\u2c9c\u2c9d\u2c9e\u2c9f\u2ca0\u2ca1\u2ca2\u2ca3\u2ca4\u2ca5\u2ca6\u2ca7\u2ca8\u2ca9\u2caa\u2cab\u2cac\u2cad\u2cae\u2caf\u2cb0\u2cb1\u2cb2\u2cb3\u2cb4\u2cb5\u2cb6\u2cb7\u2cb8\u2cb9\u2cba\u2cbb\u2cbc\u2cbd\u2cbe\u2cbf\u2cc0\u2cc1\u2cc2\u2cc3\u2cc4\u2cc5\u2cc6\u2cc7\u2cc8\u2cc9\u2cca\u2ccb\u2ccc\u2ccd\u2cce\u2ccf\u2cd0\u2cd1\u2cd2\u2cd3\u2cd4\u2cd5\u2cd6\u2cd7\u2cd8\u2cd9\u2cda\u2cdb\u2cdc\u2cdd\u2cde\u2cdf\u2ce0\u2ce1\u2ce2\u2ce3\u2ce4\u2ceb\u2cec\u2ced\u2cee\u2cef\u2cf0\u2cf1\u2cf2\u2cf3\u2d00\u2d01\u2d02\u2d03\u2d04\u2d05\u2d06\u2d07\u2d08\u2d09\u2d0a\u2d0b\u2d0c\u2d0d\u2d0e\u2d0f\u2d10\u2d11\u2d12\u2d13\u2d14\u2d15\u2d16\u2d17\u2d18\u2d19\u2d1a\u2d1b\u2d1c\u2d1d\u2d1e\u2d1f\u2d20\u2d21\u2d22\u2d23\u2d24\u2d25\u2d27\u2d2d\u2d30\u2d31\u2d32\u2d33\u2d34\u2d35\u2d36\u2d37\u2d38\u2d39\u2d3a\u2d3b\u2d3c\u2d3d\u2d3e\u2d3f\u2d40\u2d41\u2d42\u2d43\u2d44\u2d45\u2d46\u2d47\u2d48\u2d49\u2d4a\u2d4b\u2d4c\u2d4d\u2d4e\u2d4f\u2d50\u2d51\u2d52\u2d53\u2d54\u2d55\u2d56\u2d57\u2d58\u2d59\u2d5a\u2d5b\u2d5c\u2d5d\u2d5e\u2d5f\u2d60\u2d61\u2d62\u2d63\u2d64\u2d65\u2d66\u2d67\u2d6f\u2d7f\u2d80\u2d81\u2d82\u2d83\u2d84\u2d85\u2d86\u2d87\u2d88\u2d89\u2d8a\u2d8b\u2d8c\u2d8d\u2d8e\u2d8f\u2d90\u2d91\u2d92\u2d93\u2d94\u2d95\u2d96\u2da0\u2da1\u2da2\u2da3\u2da4\u2da5\u2da6\u2da8\u2da9\u2daa\u2dab\u2dac\u2dad\u2dae\u2db0\u2db1\u2db2\u2db3\u2db4\u2db5\u2db6\u2db8\u2db9\u2dba\u2dbb\u2dbc\u2dbd\u2dbe\u2dc0\u2dc1\u2dc2\u2dc3\u2dc4\u2dc5\u2dc6\u2dc8\u2dc9\u2dca\u2dcb\u2dcc\u2dcd\u2dce\u2dd0\u2dd1\u2dd2\u2dd3\u2dd4\u2dd5\u2dd6\u2dd8\u2dd9\u2dda\u2ddb\u2ddc\u2ddd\u2dde\u2de0\u2de1\u2de2\u2de3\u2de4\u2de5\u2de6\u2de7\u2de8\u2de9\u2dea\u2deb\u2dec\u2ded\u2dee\u2def\u2df0\u2df1\u2df2\u2df3\u2df4\u2df5\u2df6\u2df7\u2df8\u2df9\u2dfa\u2dfb\u2dfc\u2dfd\u2dfe\u2dff\u2e2f\u3005\u3006\u3007\u3021\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029\u302a\u302b\u302c\u302d\u302e\u302f\u3031\u3032\u3033\u3034\u3035\u3038\u3039\u303a\u303b\u303c\u3041\u3042\u3043\u3044\u3045\u3046\u3047\u3048\u3049\u304a\u304b\u304c\u304d\u304e\u304f\u3050\u3051\u3052\u3053\u3054\u3055\u3056\u3057\u3058\u3059\u305a\u305b\u305c\u305d\u305e\u305f\u3060\u3061\u3062\u3063\u3064\u3065\u3066\u3067\u3068\u3069\u306a\u306b\u306c\u306d\u306e\u306f\u3070\u3071\u3072\u3073\u3074\u3075\u3076\u3077\u3078\u3079\u307a\u307b\u307c\u307d\u307e\u307f\u3080\u3081\u3082\u3083\u3084\u3085\u3086\u3087\u3088\u3089\u308a\u308b\u308c\u308d\u308e\u308f\u3090\u3091\u3092\u3093\u3094\u3095\u3096\u3099\u309a\u309d\u309e\u30a1\u30a2\u30a3\u30a4\u30a5\u30a6\u30a7\u30a8\u30a9\u30aa\u30ab\u30ac\u30ad\u30ae\u30af\u30b0\u30b1\u30b2\u30b3\u30b4\u30b5\u30b6\u30b7\u30b8\u30b9\u30ba\u30bb\u30bc\u30bd\u30be\u30bf\u30c0\u30c1\u30c2\u30c3\u30c4\u30c5\u30c6\u30c7\u30c8\u30c9\u30ca\u30cb\u30cc\u30cd\u30ce\u30cf\u30d0\u30d1\u30d2\u30d3\u30d4\u30d5\u30d6\u30d7\u30d8\u30d9\u30da\u30db\u30dc\u30dd\u30de\u30df\u30e0\u30e1\u30e2\u30e3\u30e4\u30e5\u30e6\u30e7\u30e8\u30e9\u30ea\u30eb\u30ec\u30ed\u30ee\u30ef\u30f0\u30f1\u30f2\u30f3\u30f4\u30f5\u30f6\u30f7\u30f8\u30f9\u30fa\u30fc\u30fd\u30fe\u3105\u3106\u3107\u3108\u3109\u310a\u310b\u310c\u310d\u310e\u310f\u3110\u3111\u3112\u3113\u3114\u3115\u3116\u3117\u3118\u3119\u311a\u311b\u311c\u311d\u311e\u311f\u3120\u3121\u3122\u3123\u3124\u3125\u3126\u3127\u3128\u3129\u312a\u312b\u312c\u312d\u3131\u3132\u3133\u3134\u3135\u3136\u3137\u3138\u3139\u313a\u313b\u313c\u313d\u313e\u313f\u3140\u3141\u3142\u3143\u3144\u3145\u3146\u3147\u3148\u3149\u314a\u314b\u314c\u314d\u314e\u314f\u3150\u3151\u3152\u3153\u3154\u3155\u3156\u3157\u3158\u3159\u315a\u315b\u315c\u315d\u315e\u315f\u3160\u3161\u3162\u3163\u3164\u3165\u3166\u3167\u3168\u3169\u316a\u316b\u316c\u316d\u316e\u316f\u3170\u3171\u3172\u3173\u3174\u3175\u3176\u3177\u3178\u3179\u317a\u317b\u317c\u317d\u317e\u317f\u3180\u3181\u3182\u3183\u3184\u3185\u3186\u3187\u3188\u3189\u318a\u318b\u318c\u318d\u318e\u31a0\u31a1\u31a2\u31a3\u31a4\u31a5\u31a6\u31a7\u31a8\u31a9\u31aa\u31ab\u31ac\u31ad\u31ae\u31af\u31b0\u31b1\u31b2\u31b3\u31b4\u31b5\u31b6\u31b7\u31b8\u31b9\u31ba\u31f0\u31f1\u31f2\u31f3\u31f4\u31f5\u31f6\u31f7\u31f8\u31f9\u31fa\u31fb\u31fc\u31fd\u31fe\u31ff\u3400\u3401\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409\u340a\u340b\u340c\u340d\u340e\u340f\u3410\u3411\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419\u341a\u341b\u341c\u341d\u341e\u341f\u3420\u3421\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429\u342a\u342b\u342c\u342d\u342e\u342f\u3430\u3431\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439\u343a\u343b\u343c\u343d\u343e\u343f\u3440\u3441\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449\u344a\u344b\u344c\u344d\u344e\u344f\u3450\u3451\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459\u345a\u345b\u345c\u345d\u345e\u345f\u3460\u3461\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469\u346a\u346b\u346c\u346d\u346e\u346f\u3470\u3471\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479\u347a\u347b\u347c\u347d\u347e\u347f\u3480\u3481\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489\u348a\u348b\u348c\u348d\u348e\u348f\u3490\u3491\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499\u349a\u349b\u349c\u349d\u349e\u349f\u34a0\u34a1\u34a2\u34a3\u34a4\u34a5\u34a6\u34a7\u34a8\u34a9\u34aa\u34ab\u34ac\u34ad\u34ae\u34af\u34b0\u34b1\u34b2\u34b3\u34b4\u34b5\u34b6\u34b7\u34b8\u34b9\u34ba\u34bb\u34bc\u34bd\u34be\u34bf\u34c0\u34c1\u34c2\u34c3\u34c4\u34c5\u34c6\u34c7\u34c8\u34c9\u34ca\u34cb\u34cc\u34cd\u34ce\u34cf\u34d0\u34d1\u34d2\u34d3\u34d4\u34d5\u34d6\u34d7\u34d8\u34d9\u34da\u34db\u34dc\u34dd\u34de\u34df\u34e0\u34e1\u34e2\u34e3\u34e4\u34e5\u34e6\u34e7\u34e8\u34e9\u34ea\u34eb\u34ec\u34ed\u34ee\u34ef\u34f0\u34f1\u34f2\u34f3\u34f4\u34f5\u34f6\u34f7\u34f8\u34f9\u34fa\u34fb\u34fc\u34fd\u34fe\u34ff\u3500\u3501\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509\u350a\u350b\u350c\u350d\u350e\u350f\u3510\u3511\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519\u351a\u351b\u351c\u351d\u351e\u351f\u3520\u3521\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529\u352a\u352b\u352c\u352d\u352e\u352f\u3530\u3531\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539\u353a\u353b\u353c\u353d\u353e\u353f\u3540\u3541\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549\u354a\u354b\u354c\u354d\u354e\u354f\u3550\u3551\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559\u355a\u355b\u355c\u355d\u355e\u355f\u3560\u3561\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569\u356a\u356b\u356c\u356d\u356e\u356f\u3570\u3571\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579\u357a\u357b\u357c\u357d\u357e\u357f\u3580\u3581\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589\u358a\u358b\u358c\u358d\u358e\u358f\u3590\u3591\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599\u359a\u359b\u359c\u359d\u359e\u359f\u35a0\u35a1\u35a2\u35a3\u35a4\u35a5\u35a6\u35a7\u35a8\u35a9\u35aa\u35ab\u35ac\u35ad\u35ae\u35af\u35b0\u35b1\u35b2\u35b3\u35b4\u35b5\u35b6\u35b7\u35b8\u35b9\u35ba\u35bb\u35bc\u35bd\u35be\u35bf\u35c0\u35c1\u35c2\u35c3\u35c4\u35c5\u35c6\u35c7\u35c8\u35c9\u35ca\u35cb\u35cc\u35cd\u35ce\u35cf\u35d0\u35d1\u35d2\u35d3\u35d4\u35d5\u35d6\u35d7\u35d8\u35d9\u35da\u35db\u35dc\u35dd\u35de\u35df\u35e0\u35e1\u35e2\u35e3\u35e4\u35e5\u35e6\u35e7\u35e8\u35e9\u35ea\u35eb\u35ec\u35ed\u35ee\u35ef\u35f0\u35f1\u35f2\u35f3\u35f4\u35f5\u35f6\u35f7\u35f8\u35f9\u35fa\u35fb\u35fc\u35fd\u35fe\u35ff\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607\u3608\u3609\u360a\u360b\u360c\u360d\u360e\u360f\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617\u3618\u3619\u361a\u361b\u361c\u361d\u361e\u361f\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627\u3628\u3629\u362a\u362b\u362c\u362d\u362e\u362f\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637\u3638\u3639\u363a\u363b\u363c\u363d\u363e\u363f\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647\u3648\u3649\u364a\u364b\u364c\u364d\u364e\u364f\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657\u3658\u3659\u365a\u365b\u365c\u365d\u365e\u365f\u3660\u3661\u3662\u3663\u3664\u3665\u3666\u3667\u3668\u3669\u366a\u366b\u366c\u366d\u366e\u366f\u3670\u3671\u3672\u3673\u3674\u3675\u3676\u3677\u3678\u3679\u367a\u367b\u367c\u367d\u367e\u367f\u3680\u3681\u3682\u3683\u3684\u3685\u3686\u3687\u3688\u3689\u368a\u368b\u368c\u368d\u368e\u368f\u3690\u3691\u3692\u3693\u3694\u3695\u3696\u3697\u3698\u3699\u369a\u369b\u369c\u369d\u369e\u369f\u36a0\u36a1\u36a2\u36a3\u36a4\u36a5\u36a6\u36a7\u36a8\u36a9\u36aa\u36ab\u36ac\u36ad\u36ae\u36af\u36b0\u36b1\u36b2\u36b3\u36b4\u36b5\u36b6\u36b7\u36b8\u36b9\u36ba\u36bb\u36bc\u36bd\u36be\u36bf\u36c0\u36c1\u36c2\u36c3\u36c4\u36c5\u36c6\u36c7\u36c8\u36c9\u36ca\u36cb\u36cc\u36cd\u36ce\u36cf\u36d0\u36d1\u36d2\u36d3\u36d4\u36d5\u36d6\u36d7\u36d8\u36d9\u36da\u36db\u36dc\u36dd\u36de\u36df\u36e0\u36e1\u36e2\u36e3\u36e4\u36e5\u36e6\u36e7\u36e8\u36e9\u36ea\u36eb\u36ec\u36ed\u36ee\u36ef\u36f0\u36f1\u36f2\u36f3\u36f4\u36f5\u36f6\u36f7\u36f8\u36f9\u36fa\u36fb\u36fc\u36fd\u36fe\u36ff\u3700\u3701\u3702\u3703\u3704\u3705\u3706\u3707\u3708\u3709\u370a\u370b\u370c\u370d\u370e\u370f\u3710\u3711\u3712\u3713\u3714\u3715\u3716\u3717\u3718\u3719\u371a\u371b\u371c\u371d\u371e\u371f\u3720\u3721\u3722\u3723\u3724\u3725\u3726\u3727\u3728\u3729\u372a\u372b\u372c\u372d\u372e\u372f\u3730\u3731\u3732\u3733\u3734\u3735\u3736\u3737\u3738\u3739\u373a\u373b\u373c\u373d\u373e\u373f\u3740\u3741\u3742\u3743\u3744\u3745\u3746\u3747\u3748\u3749\u374a\u374b\u374c\u374d\u374e\u374f\u3750\u3751\u3752\u3753\u3754\u3755\u3756\u3757\u3758\u3759\u375a\u375b\u375c\u375d\u375e\u375f\u3760\u3761\u3762\u3763\u3764\u3765\u3766\u3767\u3768\u3769\u376a\u376b\u376c\u376d\u376e\u376f\u3770\u3771\u3772\u3773\u3774\u3775\u3776\u3777\u3778\u3779\u377a\u377b\u377c\u377d\u377e\u377f\u3780\u3781\u3782\u3783\u3784\u3785\u3786\u3787\u3788\u3789\u378a\u378b\u378c\u378d\u378e\u378f\u3790\u3791\u3792\u3793\u3794\u3795\u3796\u3797\u3798\u3799\u379a\u379b\u379c\u379d\u379e\u379f\u37a0\u37a1\u37a2\u37a3\u37a4\u37a5\u37a6\u37a7\u37a8\u37a9\u37aa\u37ab\u37ac\u37ad\u37ae\u37af\u37b0\u37b1\u37b2\u37b3\u37b4\u37b5\u37b6\u37b7\u37b8\u37b9\u37ba\u37bb\u37bc\u37bd\u37be\u37bf\u37c0\u37c1\u37c2\u37c3\u37c4\u37c5\u37c6\u37c7\u37c8\u37c9\u37ca\u37cb\u37cc\u37cd\u37ce\u37cf\u37d0\u37d1\u37d2\u37d3\u37d4\u37d5\u37d6\u37d7\u37d8\u37d9\u37da\u37db\u37dc\u37dd\u37de\u37df\u37e0\u37e1\u37e2\u37e3\u37e4\u37e5\u37e6\u37e7\u37e8\u37e9\u37ea\u37eb\u37ec\u37ed\u37ee\u37ef\u37f0\u37f1\u37f2\u37f3\u37f4\u37f5\u37f6\u37f7\u37f8\u37f9\u37fa\u37fb\u37fc\u37fd\u37fe\u37ff\u3800\u3801\u3802\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380a\u380b\u380c\u380d\u380e\u380f\u3810\u3811\u3812\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381a\u381b\u381c\u381d\u381e\u381f\u3820\u3821\u3822\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382a\u382b\u382c\u382d\u382e\u382f\u3830\u3831\u3832\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383a\u383b\u383c\u383d\u383e\u383f\u3840\u3841\u3842\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384a\u384b\u384c\u384d\u384e\u384f\u3850\u3851\u3852\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385a\u385b\u385c\u385d\u385e\u385f\u3860\u3861\u3862\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386a\u386b\u386c\u386d\u386e\u386f\u3870\u3871\u3872\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387a\u387b\u387c\u387d\u387e\u387f\u3880\u3881\u3882\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388a\u388b\u388c\u388d\u388e\u388f\u3890\u3891\u3892\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389a\u389b\u389c\u389d\u389e\u389f\u38a0\u38a1\u38a2\u38a3\u38a4\u38a5\u38a6\u38a7\u38a8\u38a9\u38aa\u38ab\u38ac\u38ad\u38ae\u38af\u38b0\u38b1\u38b2\u38b3\u38b4\u38b5\u38b6\u38b7\u38b8\u38b9\u38ba\u38bb\u38bc\u38bd\u38be\u38bf\u38c0\u38c1\u38c2\u38c3\u38c4\u38c5\u38c6\u38c7\u38c8\u38c9\u38ca\u38cb\u38cc\u38cd\u38ce\u38cf\u38d0\u38d1\u38d2\u38d3\u38d4\u38d5\u38d6\u38d7\u38d8\u38d9\u38da\u38db\u38dc\u38dd\u38de\u38df\u38e0\u38e1\u38e2\u38e3\u38e4\u38e5\u38e6\u38e7\u38e8\u38e9\u38ea\u38eb\u38ec\u38ed\u38ee\u38ef\u38f0\u38f1\u38f2\u38f3\u38f4\u38f5\u38f6\u38f7\u38f8\u38f9\u38fa\u38fb\u38fc\u38fd\u38fe\u38ff\u3900\u3901\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909\u390a\u390b\u390c\u390d\u390e\u390f\u3910\u3911\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919\u391a\u391b\u391c\u391d\u391e\u391f\u3920\u3921\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929\u392a\u392b\u392c\u392d\u392e\u392f\u3930\u3931\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939\u393a\u393b\u393c\u393d\u393e\u393f\u3940\u3941\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949\u394a\u394b\u394c\u394d\u394e\u394f\u3950\u3951\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959\u395a\u395b\u395c\u395d\u395e\u395f\u3960\u3961\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969\u396a\u396b\u396c\u396d\u396e\u396f\u3970\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978\u3979\u397a\u397b\u397c\u397d\u397e\u397f\u3980\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988\u3989\u398a\u398b\u398c\u398d\u398e\u398f\u3990\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998\u3999\u399a\u399b\u399c\u399d\u399e\u399f\u39a0\u39a1\u39a2\u39a3\u39a4\u39a5\u39a6\u39a7\u39a8\u39a9\u39aa\u39ab\u39ac\u39ad\u39ae\u39af\u39b0\u39b1\u39b2\u39b3\u39b4\u39b5\u39b6\u39b7\u39b8\u39b9\u39ba\u39bb\u39bc\u39bd\u39be\u39bf\u39c0\u39c1\u39c2\u39c3\u39c4\u39c5\u39c6\u39c7\u39c8\u39c9\u39ca\u39cb\u39cc\u39cd\u39ce\u39cf\u39d0\u39d1\u39d2\u39d3\u39d4\u39d5\u39d6\u39d7\u39d8\u39d9\u39da\u39db\u39dc\u39dd\u39de\u39df\u39e0\u39e1\u39e2\u39e3\u39e4\u39e5\u39e6\u39e7\u39e8\u39e9\u39ea\u39eb\u39ec\u39ed\u39ee\u39ef\u39f0\u39f1\u39f2\u39f3\u39f4\u39f5\u39f6\u39f7\u39f8\u39f9\u39fa\u39fb\u39fc\u39fd\u39fe\u39ff\u3a00\u3a01\u3a02\u3a03\u3a04\u3a05\u3a06\u3a07\u3a08\u3a09\u3a0a\u3a0b\u3a0c\u3a0d\u3a0e\u3a0f\u3a10\u3a11\u3a12\u3a13\u3a14\u3a15\u3a16\u3a17\u3a18\u3a19\u3a1a\u3a1b\u3a1c\u3a1d\u3a1e\u3a1f\u3a20\u3a21\u3a22\u3a23\u3a24\u3a25\u3a26\u3a27\u3a28\u3a29\u3a2a\u3a2b\u3a2c\u3a2d\u3a2e\u3a2f\u3a30\u3a31\u3a32\u3a33\u3a34\u3a35\u3a36\u3a37\u3a38\u3a39\u3a3a\u3a3b\u3a3c\u3a3d\u3a3e\u3a3f\u3a40\u3a41\u3a42\u3a43\u3a44\u3a45\u3a46\u3a47\u3a48\u3a49\u3a4a\u3a4b\u3a4c\u3a4d\u3a4e\u3a4f\u3a50\u3a51\u3a52\u3a53\u3a54\u3a55\u3a56\u3a57\u3a58\u3a59\u3a5a\u3a5b\u3a5c\u3a5d\u3a5e\u3a5f\u3a60\u3a61\u3a62\u3a63\u3a64\u3a65\u3a66\u3a67\u3a68\u3a69\u3a6a\u3a6b\u3a6c\u3a6d\u3a6e\u3a6f\u3a70\u3a71\u3a72\u3a73\u3a74\u3a75\u3a76\u3a77\u3a78\u3a79\u3a7a\u3a7b\u3a7c\u3a7d\u3a7e\u3a7f\u3a80\u3a81\u3a82\u3a83\u3a84\u3a85\u3a86\u3a87\u3a88\u3a89\u3a8a\u3a8b\u3a8c\u3a8d\u3a8e\u3a8f\u3a90\u3a91\u3a92\u3a93\u3a94\u3a95\u3a96\u3a97\u3a98\u3a99\u3a9a\u3a9b\u3a9c\u3a9d\u3a9e\u3a9f\u3aa0\u3aa1\u3aa2\u3aa3\u3aa4\u3aa5\u3aa6\u3aa7\u3aa8\u3aa9\u3aaa\u3aab\u3aac\u3aad\u3aae\u3aaf\u3ab0\u3ab1\u3ab2\u3ab3\u3ab4\u3ab5\u3ab6\u3ab7\u3ab8\u3ab9\u3aba\u3abb\u3abc\u3abd\u3abe\u3abf\u3ac0\u3ac1\u3ac2\u3ac3\u3ac4\u3ac5\u3ac6\u3ac7\u3ac8\u3ac9\u3aca\u3acb\u3acc\u3acd\u3ace\u3acf\u3ad0\u3ad1\u3ad2\u3ad3\u3ad4\u3ad5\u3ad6\u3ad7\u3ad8\u3ad9\u3ada\u3adb\u3adc\u3add\u3ade\u3adf\u3ae0\u3ae1\u3ae2\u3ae3\u3ae4\u3ae5\u3ae6\u3ae7\u3ae8\u3ae9\u3aea\u3aeb\u3aec\u3aed\u3aee\u3aef\u3af0\u3af1\u3af2\u3af3\u3af4\u3af5\u3af6\u3af7\u3af8\u3af9\u3afa\u3afb\u3afc\u3afd\u3afe\u3aff\u3b00\u3b01\u3b02\u3b03\u3b04\u3b05\u3b06\u3b07\u3b08\u3b09\u3b0a\u3b0b\u3b0c\u3b0d\u3b0e\u3b0f\u3b10\u3b11\u3b12\u3b13\u3b14\u3b15\u3b16\u3b17\u3b18\u3b19\u3b1a\u3b1b\u3b1c\u3b1d\u3b1e\u3b1f\u3b20\u3b21\u3b22\u3b23\u3b24\u3b25\u3b26\u3b27\u3b28\u3b29\u3b2a\u3b2b\u3b2c\u3b2d\u3b2e\u3b2f\u3b30\u3b31\u3b32\u3b33\u3b34\u3b35\u3b36\u3b37\u3b38\u3b39\u3b3a\u3b3b\u3b3c\u3b3d\u3b3e\u3b3f\u3b40\u3b41\u3b42\u3b43\u3b44\u3b45\u3b46\u3b47\u3b48\u3b49\u3b4a\u3b4b\u3b4c\u3b4d\u3b4e\u3b4f\u3b50\u3b51\u3b52\u3b53\u3b54\u3b55\u3b56\u3b57\u3b58\u3b59\u3b5a\u3b5b\u3b5c\u3b5d\u3b5e\u3b5f\u3b60\u3b61\u3b62\u3b63\u3b64\u3b65\u3b66\u3b67\u3b68\u3b69\u3b6a\u3b6b\u3b6c\u3b6d\u3b6e\u3b6f\u3b70\u3b71\u3b72\u3b73\u3b74\u3b75\u3b76\u3b77\u3b78\u3b79\u3b7a\u3b7b\u3b7c\u3b7d\u3b7e\u3b7f\u3b80\u3b81\u3b82\u3b83\u3b84\u3b85\u3b86\u3b87\u3b88\u3b89\u3b8a\u3b8b\u3b8c\u3b8d\u3b8e\u3b8f\u3b90\u3b91\u3b92\u3b93\u3b94\u3b95\u3b96\u3b97\u3b98\u3b99\u3b9a\u3b9b\u3b9c\u3b9d\u3b9e\u3b9f\u3ba0\u3ba1\u3ba2\u3ba3\u3ba4\u3ba5\u3ba6\u3ba7\u3ba8\u3ba9\u3baa\u3bab\u3bac\u3bad\u3bae\u3baf\u3bb0\u3bb1\u3bb2\u3bb3\u3bb4\u3bb5\u3bb6\u3bb7\u3bb8\u3bb9\u3bba\u3bbb\u3bbc\u3bbd\u3bbe\u3bbf\u3bc0\u3bc1\u3bc2\u3bc3\u3bc4\u3bc5\u3bc6\u3bc7\u3bc8\u3bc9\u3bca\u3bcb\u3bcc\u3bcd\u3bce\u3bcf\u3bd0\u3bd1\u3bd2\u3bd3\u3bd4\u3bd5\u3bd6\u3bd7\u3bd8\u3bd9\u3bda\u3bdb\u3bdc\u3bdd\u3bde\u3bdf\u3be0\u3be1\u3be2\u3be3\u3be4\u3be5\u3be6\u3be7\u3be8\u3be9\u3bea\u3beb\u3bec\u3bed\u3bee\u3bef\u3bf0\u3bf1\u3bf2\u3bf3\u3bf4\u3bf5\u3bf6\u3bf7\u3bf8\u3bf9\u3bfa\u3bfb\u3bfc\u3bfd\u3bfe\u3bff\u3c00\u3c01\u3c02\u3c03\u3c04\u3c05\u3c06\u3c07\u3c08\u3c09\u3c0a\u3c0b\u3c0c\u3c0d\u3c0e\u3c0f\u3c10\u3c11\u3c12\u3c13\u3c14\u3c15\u3c16\u3c17\u3c18\u3c19\u3c1a\u3c1b\u3c1c\u3c1d\u3c1e\u3c1f\u3c20\u3c21\u3c22\u3c23\u3c24\u3c25\u3c26\u3c27\u3c28\u3c29\u3c2a\u3c2b\u3c2c\u3c2d\u3c2e\u3c2f\u3c30\u3c31\u3c32\u3c33\u3c34\u3c35\u3c36\u3c37\u3c38\u3c39\u3c3a\u3c3b\u3c3c\u3c3d\u3c3e\u3c3f\u3c40\u3c41\u3c42\u3c43\u3c44\u3c45\u3c46\u3c47\u3c48\u3c49\u3c4a\u3c4b\u3c4c\u3c4d\u3c4e\u3c4f\u3c50\u3c51\u3c52\u3c53\u3c54\u3c55\u3c56\u3c57\u3c58\u3c59\u3c5a\u3c5b\u3c5c\u3c5d\u3c5e\u3c5f\u3c60\u3c61\u3c62\u3c63\u3c64\u3c65\u3c66\u3c67\u3c68\u3c69\u3c6a\u3c6b\u3c6c\u3c6d\u3c6e\u3c6f\u3c70\u3c71\u3c72\u3c73\u3c74\u3c75\u3c76\u3c77\u3c78\u3c79\u3c7a\u3c7b\u3c7c\u3c7d\u3c7e\u3c7f\u3c80\u3c81\u3c82\u3c83\u3c84\u3c85\u3c86\u3c87\u3c88\u3c89\u3c8a\u3c8b\u3c8c\u3c8d\u3c8e\u3c8f\u3c90\u3c91\u3c92\u3c93\u3c94\u3c95\u3c96\u3c97\u3c98\u3c99\u3c9a\u3c9b\u3c9c\u3c9d\u3c9e\u3c9f\u3ca0\u3ca1\u3ca2\u3ca3\u3ca4\u3ca5\u3ca6\u3ca7\u3ca8\u3ca9\u3caa\u3cab\u3cac\u3cad\u3cae\u3caf\u3cb0\u3cb1\u3cb2\u3cb3\u3cb4\u3cb5\u3cb6\u3cb7\u3cb8\u3cb9\u3cba\u3cbb\u3cbc\u3cbd\u3cbe\u3cbf\u3cc0\u3cc1\u3cc2\u3cc3\u3cc4\u3cc5\u3cc6\u3cc7\u3cc8\u3cc9\u3cca\u3ccb\u3ccc\u3ccd\u3cce\u3ccf\u3cd0\u3cd1\u3cd2\u3cd3\u3cd4\u3cd5\u3cd6\u3cd7\u3cd8\u3cd9\u3cda\u3cdb\u3cdc\u3cdd\u3cde\u3cdf\u3ce0\u3ce1\u3ce2\u3ce3\u3ce4\u3ce5\u3ce6\u3ce7\u3ce8\u3ce9\u3cea\u3ceb\u3cec\u3ced\u3cee\u3cef\u3cf0\u3cf1\u3cf2\u3cf3\u3cf4\u3cf5\u3cf6\u3cf7\u3cf8\u3cf9\u3cfa\u3cfb\u3cfc\u3cfd\u3cfe\u3cff\u3d00\u3d01\u3d02\u3d03\u3d04\u3d05\u3d06\u3d07\u3d08\u3d09\u3d0a\u3d0b\u3d0c\u3d0d\u3d0e\u3d0f\u3d10\u3d11\u3d12\u3d13\u3d14\u3d15\u3d16\u3d17\u3d18\u3d19\u3d1a\u3d1b\u3d1c\u3d1d\u3d1e\u3d1f\u3d20\u3d21\u3d22\u3d23\u3d24\u3d25\u3d26\u3d27\u3d28\u3d29\u3d2a\u3d2b\u3d2c\u3d2d\u3d2e\u3d2f\u3d30\u3d31\u3d32\u3d33\u3d34\u3d35\u3d36\u3d37\u3d38\u3d39\u3d3a\u3d3b\u3d3c\u3d3d\u3d3e\u3d3f\u3d40\u3d41\u3d42\u3d43\u3d44\u3d45\u3d46\u3d47\u3d48\u3d49\u3d4a\u3d4b\u3d4c\u3d4d\u3d4e\u3d4f\u3d50\u3d51\u3d52\u3d53\u3d54\u3d55\u3d56\u3d57\u3d58\u3d59\u3d5a\u3d5b\u3d5c\u3d5d\u3d5e\u3d5f\u3d60\u3d61\u3d62\u3d63\u3d64\u3d65\u3d66\u3d67\u3d68\u3d69\u3d6a\u3d6b\u3d6c\u3d6d\u3d6e\u3d6f\u3d70\u3d71\u3d72\u3d73\u3d74\u3d75\u3d76\u3d77\u3d78\u3d79\u3d7a\u3d7b\u3d7c\u3d7d\u3d7e\u3d7f\u3d80\u3d81\u3d82\u3d83\u3d84\u3d85\u3d86\u3d87\u3d88\u3d89\u3d8a\u3d8b\u3d8c\u3d8d\u3d8e\u3d8f\u3d90\u3d91\u3d92\u3d93\u3d94\u3d95\u3d96\u3d97\u3d98\u3d99\u3d9a\u3d9b\u3d9c\u3d9d\u3d9e\u3d9f\u3da0\u3da1\u3da2\u3da3\u3da4\u3da5\u3da6\u3da7\u3da8\u3da9\u3daa\u3dab\u3dac\u3dad\u3dae\u3daf\u3db0\u3db1\u3db2\u3db3\u3db4\u3db5\u3db6\u3db7\u3db8\u3db9\u3dba\u3dbb\u3dbc\u3dbd\u3dbe\u3dbf\u3dc0\u3dc1\u3dc2\u3dc3\u3dc4\u3dc5\u3dc6\u3dc7\u3dc8\u3dc9\u3dca\u3dcb\u3dcc\u3dcd\u3dce\u3dcf\u3dd0\u3dd1\u3dd2\u3dd3\u3dd4\u3dd5\u3dd6\u3dd7\u3dd8\u3dd9\u3dda\u3ddb\u3ddc\u3ddd\u3dde\u3ddf\u3de0\u3de1\u3de2\u3de3\u3de4\u3de5\u3de6\u3de7\u3de8\u3de9\u3dea\u3deb\u3dec\u3ded\u3dee\u3def\u3df0\u3df1\u3df2\u3df3\u3df4\u3df5\u3df6\u3df7\u3df8\u3df9\u3dfa\u3dfb\u3dfc\u3dfd\u3dfe\u3dff\u3e00\u3e01\u3e02\u3e03\u3e04\u3e05\u3e06\u3e07\u3e08\u3e09\u3e0a\u3e0b\u3e0c\u3e0d\u3e0e\u3e0f\u3e10\u3e11\u3e12\u3e13\u3e14\u3e15\u3e16\u3e17\u3e18\u3e19\u3e1a\u3e1b\u3e1c\u3e1d\u3e1e\u3e1f\u3e20\u3e21\u3e22\u3e23\u3e24\u3e25\u3e26\u3e27\u3e28\u3e29\u3e2a\u3e2b\u3e2c\u3e2d\u3e2e\u3e2f\u3e30\u3e31\u3e32\u3e33\u3e34\u3e35\u3e36\u3e37\u3e38\u3e39\u3e3a\u3e3b\u3e3c\u3e3d\u3e3e\u3e3f\u3e40\u3e41\u3e42\u3e43\u3e44\u3e45\u3e46\u3e47\u3e48\u3e49\u3e4a\u3e4b\u3e4c\u3e4d\u3e4e\u3e4f\u3e50\u3e51\u3e52\u3e53\u3e54\u3e55\u3e56\u3e57\u3e58\u3e59\u3e5a\u3e5b\u3e5c\u3e5d\u3e5e\u3e5f\u3e60\u3e61\u3e62\u3e63\u3e64\u3e65\u3e66\u3e67\u3e68\u3e69\u3e6a\u3e6b\u3e6c\u3e6d\u3e6e\u3e6f\u3e70\u3e71\u3e72\u3e73\u3e74\u3e75\u3e76\u3e77\u3e78\u3e79\u3e7a\u3e7b\u3e7c\u3e7d\u3e7e\u3e7f\u3e80\u3e81\u3e82\u3e83\u3e84\u3e85\u3e86\u3e87\u3e88\u3e89\u3e8a\u3e8b\u3e8c\u3e8d\u3e8e\u3e8f\u3e90\u3e91\u3e92\u3e93\u3e94\u3e95\u3e96\u3e97\u3e98\u3e99\u3e9a\u3e9b\u3e9c\u3e9d\u3e9e\u3e9f\u3ea0\u3ea1\u3ea2\u3ea3\u3ea4\u3ea5\u3ea6\u3ea7\u3ea8\u3ea9\u3eaa\u3eab\u3eac\u3ead\u3eae\u3eaf\u3eb0\u3eb1\u3eb2\u3eb3\u3eb4\u3eb5\u3eb6\u3eb7\u3eb8\u3eb9\u3eba\u3ebb\u3ebc\u3ebd\u3ebe\u3ebf\u3ec0\u3ec1\u3ec2\u3ec3\u3ec4\u3ec5\u3ec6\u3ec7\u3ec8\u3ec9\u3eca\u3ecb\u3ecc\u3ecd\u3ece\u3ecf\u3ed0\u3ed1\u3ed2\u3ed3\u3ed4\u3ed5\u3ed6\u3ed7\u3ed8\u3ed9\u3eda\u3edb\u3edc\u3edd\u3ede\u3edf\u3ee0\u3ee1\u3ee2\u3ee3\u3ee4\u3ee5\u3ee6\u3ee7\u3ee8\u3ee9\u3eea\u3eeb\u3eec\u3eed\u3eee\u3eef\u3ef0\u3ef1\u3ef2\u3ef3\u3ef4\u3ef5\u3ef6\u3ef7\u3ef8\u3ef9\u3efa\u3efb\u3efc\u3efd\u3efe\u3eff\u3f00\u3f01\u3f02\u3f03\u3f04\u3f05\u3f06\u3f07\u3f08\u3f09\u3f0a\u3f0b\u3f0c\u3f0d\u3f0e\u3f0f\u3f10\u3f11\u3f12\u3f13\u3f14\u3f15\u3f16\u3f17\u3f18\u3f19\u3f1a\u3f1b\u3f1c\u3f1d\u3f1e\u3f1f\u3f20\u3f21\u3f22\u3f23\u3f24\u3f25\u3f26\u3f27\u3f28\u3f29\u3f2a\u3f2b\u3f2c\u3f2d\u3f2e\u3f2f\u3f30\u3f31\u3f32\u3f33\u3f34\u3f35\u3f36\u3f37\u3f38\u3f39\u3f3a\u3f3b\u3f3c\u3f3d\u3f3e\u3f3f\u3f40\u3f41\u3f42\u3f43\u3f44\u3f45\u3f46\u3f47\u3f48\u3f49\u3f4a\u3f4b\u3f4c\u3f4d\u3f4e\u3f4f\u3f50\u3f51\u3f52\u3f53\u3f54\u3f55\u3f56\u3f57\u3f58\u3f59\u3f5a\u3f5b\u3f5c\u3f5d\u3f5e\u3f5f\u3f60\u3f61\u3f62\u3f63\u3f64\u3f65\u3f66\u3f67\u3f68\u3f69\u3f6a\u3f6b\u3f6c\u3f6d\u3f6e\u3f6f\u3f70\u3f71\u3f72\u3f73\u3f74\u3f75\u3f76\u3f77\u3f78\u3f79\u3f7a\u3f7b\u3f7c\u3f7d\u3f7e\u3f7f\u3f80\u3f81\u3f82\u3f83\u3f84\u3f85\u3f86\u3f87\u3f88\u3f89\u3f8a\u3f8b\u3f8c\u3f8d\u3f8e\u3f8f\u3f90\u3f91\u3f92\u3f93\u3f94\u3f95\u3f96\u3f97\u3f98\u3f99\u3f9a\u3f9b\u3f9c\u3f9d\u3f9e\u3f9f\u3fa0\u3fa1\u3fa2\u3fa3\u3fa4\u3fa5\u3fa6\u3fa7\u3fa8\u3fa9\u3faa\u3fab\u3fac\u3fad\u3fae\u3faf\u3fb0\u3fb1\u3fb2\u3fb3\u3fb4\u3fb5\u3fb6\u3fb7\u3fb8\u3fb9\u3fba\u3fbb\u3fbc\u3fbd\u3fbe\u3fbf\u3fc0\u3fc1\u3fc2\u3fc3\u3fc4\u3fc5\u3fc6\u3fc7\u3fc8\u3fc9\u3fca\u3fcb\u3fcc\u3fcd\u3fce\u3fcf\u3fd0\u3fd1\u3fd2\u3fd3\u3fd4\u3fd5\u3fd6\u3fd7\u3fd8\u3fd9\u3fda\u3fdb\u3fdc\u3fdd\u3fde\u3fdf\u3fe0\u3fe1\u3fe2\u3fe3\u3fe4\u3fe5\u3fe6\u3fe7\u3fe8\u3fe9\u3fea\u3feb\u3fec\u3fed\u3fee\u3fef\u3ff0\u3ff1\u3ff2\u3ff3\u3ff4\u3ff5\u3ff6\u3ff7\u3ff8\u3ff9\u3ffa\u3ffb\u3ffc\u3ffd\u3ffe\u3fff\u4000\u4001\u4002\u4003\u4004\u4005\u4006\u4007\u4008\u4009\u400a\u400b\u400c\u400d\u400e\u400f\u4010\u4011\u4012\u4013\u4014\u4015\u4016\u4017\u4018\u4019\u401a\u401b\u401c\u401d\u401e\u401f\u4020\u4021\u4022\u4023\u4024\u4025\u4026\u4027\u4028\u4029\u402a\u402b\u402c\u402d\u402e\u402f\u4030\u4031\u4032\u4033\u4034\u4035\u4036\u4037\u4038\u4039\u403a\u403b\u403c\u403d\u403e\u403f\u4040\u4041\u4042\u4043\u4044\u4045\u4046\u4047\u4048\u4049\u404a\u404b\u404c\u404d\u404e\u404f\u4050\u4051\u4052\u4053\u4054\u4055\u4056\u4057\u4058\u4059\u405a\u405b\u405c\u405d\u405e\u405f\u4060\u4061\u4062\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406a\u406b\u406c\u406d\u406e\u406f\u4070\u4071\u4072\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407a\u407b\u407c\u407d\u407e\u407f\u4080\u4081\u4082\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408a\u408b\u408c\u408d\u408e\u408f\u4090\u4091\u4092\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409a\u409b\u409c\u409d\u409e\u409f\u40a0\u40a1\u40a2\u40a3\u40a4\u40a5\u40a6\u40a7\u40a8\u40a9\u40aa\u40ab\u40ac\u40ad\u40ae\u40af\u40b0\u40b1\u40b2\u40b3\u40b4\u40b5\u40b6\u40b7\u40b8\u40b9\u40ba\u40bb\u40bc\u40bd\u40be\u40bf\u40c0\u40c1\u40c2\u40c3\u40c4\u40c5\u40c6\u40c7\u40c8\u40c9\u40ca\u40cb\u40cc\u40cd\u40ce\u40cf\u40d0\u40d1\u40d2\u40d3\u40d4\u40d5\u40d6\u40d7\u40d8\u40d9\u40da\u40db\u40dc\u40dd\u40de\u40df\u40e0\u40e1\u40e2\u40e3\u40e4\u40e5\u40e6\u40e7\u40e8\u40e9\u40ea\u40eb\u40ec\u40ed\u40ee\u40ef\u40f0\u40f1\u40f2\u40f3\u40f4\u40f5\u40f6\u40f7\u40f8\u40f9\u40fa\u40fb\u40fc\u40fd\u40fe\u40ff\u4100\u4101\u4102\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410a\u410b\u410c\u410d\u410e\u410f\u4110\u4111\u4112\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411a\u411b\u411c\u411d\u411e\u411f\u4120\u4121\u4122\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412a\u412b\u412c\u412d\u412e\u412f\u4130\u4131\u4132\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413a\u413b\u413c\u413d\u413e\u413f\u4140\u4141\u4142\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414a\u414b\u414c\u414d\u414e\u414f\u4150\u4151\u4152\u4153\u4154\u4155\u4156\u4157\u4158\u4159\u415a\u415b\u415c\u415d\u415e\u415f\u4160\u4161\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169\u416a\u416b\u416c\u416d\u416e\u416f\u4170\u4171\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179\u417a\u417b\u417c\u417d\u417e\u417f\u4180\u4181\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189\u418a\u418b\u418c\u418d\u418e\u418f\u4190\u4191\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199\u419a\u419b\u419c\u419d\u419e\u419f\u41a0\u41a1\u41a2\u41a3\u41a4\u41a5\u41a6\u41a7\u41a8\u41a9\u41aa\u41ab\u41ac\u41ad\u41ae\u41af\u41b0\u41b1\u41b2\u41b3\u41b4\u41b5\u41b6\u41b7\u41b8\u41b9\u41ba\u41bb\u41bc\u41bd\u41be\u41bf\u41c0\u41c1\u41c2\u41c3\u41c4\u41c5\u41c6\u41c7\u41c8\u41c9\u41ca\u41cb\u41cc\u41cd\u41ce\u41cf\u41d0\u41d1\u41d2\u41d3\u41d4\u41d5\u41d6\u41d7\u41d8\u41d9\u41da\u41db\u41dc\u41dd\u41de\u41df\u41e0\u41e1\u41e2\u41e3\u41e4\u41e5\u41e6\u41e7\u41e8\u41e9\u41ea\u41eb\u41ec\u41ed\u41ee\u41ef\u41f0\u41f1\u41f2\u41f3\u41f4\u41f5\u41f6\u41f7\u41f8\u41f9\u41fa\u41fb\u41fc\u41fd\u41fe\u41ff\u4200\u4201\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209\u420a\u420b\u420c\u420d\u420e\u420f\u4210\u4211\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219\u421a\u421b\u421c\u421d\u421e\u421f\u4220\u4221\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229\u422a\u422b\u422c\u422d\u422e\u422f\u4230\u4231\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239\u423a\u423b\u423c\u423d\u423e\u423f\u4240\u4241\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249\u424a\u424b\u424c\u424d\u424e\u424f\u4250\u4251\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259\u425a\u425b\u425c\u425d\u425e\u425f\u4260\u4261\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269\u426a\u426b\u426c\u426d\u426e\u426f\u4270\u4271\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279\u427a\u427b\u427c\u427d\u427e\u427f\u4280\u4281\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289\u428a\u428b\u428c\u428d\u428e\u428f\u4290\u4291\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299\u429a\u429b\u429c\u429d\u429e\u429f\u42a0\u42a1\u42a2\u42a3\u42a4\u42a5\u42a6\u42a7\u42a8\u42a9\u42aa\u42ab\u42ac\u42ad\u42ae\u42af\u42b0\u42b1\u42b2\u42b3\u42b4\u42b5\u42b6\u42b7\u42b8\u42b9\u42ba\u42bb\u42bc\u42bd\u42be\u42bf\u42c0\u42c1\u42c2\u42c3\u42c4\u42c5\u42c6\u42c7\u42c8\u42c9\u42ca\u42cb\u42cc\u42cd\u42ce\u42cf\u42d0\u42d1\u42d2\u42d3\u42d4\u42d5\u42d6\u42d7\u42d8\u42d9\u42da\u42db\u42dc\u42dd\u42de\u42df\u42e0\u42e1\u42e2\u42e3\u42e4\u42e5\u42e6\u42e7\u42e8\u42e9\u42ea\u42eb\u42ec\u42ed\u42ee\u42ef\u42f0\u42f1\u42f2\u42f3\u42f4\u42f5\u42f6\u42f7\u42f8\u42f9\u42fa\u42fb\u42fc\u42fd\u42fe\u42ff\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307\u4308\u4309\u430a\u430b\u430c\u430d\u430e\u430f\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317\u4318\u4319\u431a\u431b\u431c\u431d\u431e\u431f\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327\u4328\u4329\u432a\u432b\u432c\u432d\u432e\u432f\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337\u4338\u4339\u433a\u433b\u433c\u433d\u433e\u433f\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347\u4348\u4349\u434a\u434b\u434c\u434d\u434e\u434f\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357\u4358\u4359\u435a\u435b\u435c\u435d\u435e\u435f\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367\u4368\u4369\u436a\u436b\u436c\u436d\u436e\u436f\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377\u4378\u4379\u437a\u437b\u437c\u437d\u437e\u437f\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387\u4388\u4389\u438a\u438b\u438c\u438d\u438e\u438f\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397\u4398\u4399\u439a\u439b\u439c\u439d\u439e\u439f\u43a0\u43a1\u43a2\u43a3\u43a4\u43a5\u43a6\u43a7\u43a8\u43a9\u43aa\u43ab\u43ac\u43ad\u43ae\u43af\u43b0\u43b1\u43b2\u43b3\u43b4\u43b5\u43b6\u43b7\u43b8\u43b9\u43ba\u43bb\u43bc\u43bd\u43be\u43bf\u43c0\u43c1\u43c2\u43c3\u43c4\u43c5\u43c6\u43c7\u43c8\u43c9\u43ca\u43cb\u43cc\u43cd\u43ce\u43cf\u43d0\u43d1\u43d2\u43d3\u43d4\u43d5\u43d6\u43d7\u43d8\u43d9\u43da\u43db\u43dc\u43dd\u43de\u43df\u43e0\u43e1\u43e2\u43e3\u43e4\u43e5\u43e6\u43e7\u43e8\u43e9\u43ea\u43eb\u43ec\u43ed\u43ee\u43ef\u43f0\u43f1\u43f2\u43f3\u43f4\u43f5\u43f6\u43f7\u43f8\u43f9\u43fa\u43fb\u43fc\u43fd\u43fe\u43ff\u4400\u4401\u4402\u4403\u4404\u4405\u4406\u4407\u4408\u4409\u440a\u440b\u440c\u440d\u440e\u440f\u4410\u4411\u4412\u4413\u4414\u4415\u4416\u4417\u4418\u4419\u441a\u441b\u441c\u441d\u441e\u441f\u4420\u4421\u4422\u4423\u4424\u4425\u4426\u4427\u4428\u4429\u442a\u442b\u442c\u442d\u442e\u442f\u4430\u4431\u4432\u4433\u4434\u4435\u4436\u4437\u4438\u4439\u443a\u443b\u443c\u443d\u443e\u443f\u4440\u4441\u4442\u4443\u4444\u4445\u4446\u4447\u4448\u4449\u444a\u444b\u444c\u444d\u444e\u444f\u4450\u4451\u4452\u4453\u4454\u4455\u4456\u4457\u4458\u4459\u445a\u445b\u445c\u445d\u445e\u445f\u4460\u4461\u4462\u4463\u4464\u4465\u4466\u4467\u4468\u4469\u446a\u446b\u446c\u446d\u446e\u446f\u4470\u4471\u4472\u4473\u4474\u4475\u4476\u4477\u4478\u4479\u447a\u447b\u447c\u447d\u447e\u447f\u4480\u4481\u4482\u4483\u4484\u4485\u4486\u4487\u4488\u4489\u448a\u448b\u448c\u448d\u448e\u448f\u4490\u4491\u4492\u4493\u4494\u4495\u4496\u4497\u4498\u4499\u449a\u449b\u449c\u449d\u449e\u449f\u44a0\u44a1\u44a2\u44a3\u44a4\u44a5\u44a6\u44a7\u44a8\u44a9\u44aa\u44ab\u44ac\u44ad\u44ae\u44af\u44b0\u44b1\u44b2\u44b3\u44b4\u44b5\u44b6\u44b7\u44b8\u44b9\u44ba\u44bb\u44bc\u44bd\u44be\u44bf\u44c0\u44c1\u44c2\u44c3\u44c4\u44c5\u44c6\u44c7\u44c8\u44c9\u44ca\u44cb\u44cc\u44cd\u44ce\u44cf\u44d0\u44d1\u44d2\u44d3\u44d4\u44d5\u44d6\u44d7\u44d8\u44d9\u44da\u44db\u44dc\u44dd\u44de\u44df\u44e0\u44e1\u44e2\u44e3\u44e4\u44e5\u44e6\u44e7\u44e8\u44e9\u44ea\u44eb\u44ec\u44ed\u44ee\u44ef\u44f0\u44f1\u44f2\u44f3\u44f4\u44f5\u44f6\u44f7\u44f8\u44f9\u44fa\u44fb\u44fc\u44fd\u44fe\u44ff\u4500\u4501\u4502\u4503\u4504\u4505\u4506\u4507\u4508\u4509\u450a\u450b\u450c\u450d\u450e\u450f\u4510\u4511\u4512\u4513\u4514\u4515\u4516\u4517\u4518\u4519\u451a\u451b\u451c\u451d\u451e\u451f\u4520\u4521\u4522\u4523\u4524\u4525\u4526\u4527\u4528\u4529\u452a\u452b\u452c\u452d\u452e\u452f\u4530\u4531\u4532\u4533\u4534\u4535\u4536\u4537\u4538\u4539\u453a\u453b\u453c\u453d\u453e\u453f\u4540\u4541\u4542\u4543\u4544\u4545\u4546\u4547\u4548\u4549\u454a\u454b\u454c\u454d\u454e\u454f\u4550\u4551\u4552\u4553\u4554\u4555\u4556\u4557\u4558\u4559\u455a\u455b\u455c\u455d\u455e\u455f\u4560\u4561\u4562\u4563\u4564\u4565\u4566\u4567\u4568\u4569\u456a\u456b\u456c\u456d\u456e\u456f\u4570\u4571\u4572\u4573\u4574\u4575\u4576\u4577\u4578\u4579\u457a\u457b\u457c\u457d\u457e\u457f\u4580\u4581\u4582\u4583\u4584\u4585\u4586\u4587\u4588\u4589\u458a\u458b\u458c\u458d\u458e\u458f\u4590\u4591\u4592\u4593\u4594\u4595\u4596\u4597\u4598\u4599\u459a\u459b\u459c\u459d\u459e\u459f\u45a0\u45a1\u45a2\u45a3\u45a4\u45a5\u45a6\u45a7\u45a8\u45a9\u45aa\u45ab\u45ac\u45ad\u45ae\u45af\u45b0\u45b1\u45b2\u45b3\u45b4\u45b5\u45b6\u45b7\u45b8\u45b9\u45ba\u45bb\u45bc\u45bd\u45be\u45bf\u45c0\u45c1\u45c2\u45c3\u45c4\u45c5\u45c6\u45c7\u45c8\u45c9\u45ca\u45cb\u45cc\u45cd\u45ce\u45cf\u45d0\u45d1\u45d2\u45d3\u45d4\u45d5\u45d6\u45d7\u45d8\u45d9\u45da\u45db\u45dc\u45dd\u45de\u45df\u45e0\u45e1\u45e2\u45e3\u45e4\u45e5\u45e6\u45e7\u45e8\u45e9\u45ea\u45eb\u45ec\u45ed\u45ee\u45ef\u45f0\u45f1\u45f2\u45f3\u45f4\u45f5\u45f6\u45f7\u45f8\u45f9\u45fa\u45fb\u45fc\u45fd\u45fe\u45ff\u4600\u4601\u4602\u4603\u4604\u4605\u4606\u4607\u4608\u4609\u460a\u460b\u460c\u460d\u460e\u460f\u4610\u4611\u4612\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461a\u461b\u461c\u461d\u461e\u461f\u4620\u4621\u4622\u4623\u4624\u4625\u4626\u4627\u4628\u4629\u462a\u462b\u462c\u462d\u462e\u462f\u4630\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638\u4639\u463a\u463b\u463c\u463d\u463e\u463f\u4640\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648\u4649\u464a\u464b\u464c\u464d\u464e\u464f\u4650\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658\u4659\u465a\u465b\u465c\u465d\u465e\u465f\u4660\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668\u4669\u466a\u466b\u466c\u466d\u466e\u466f\u4670\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678\u4679\u467a\u467b\u467c\u467d\u467e\u467f\u4680\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688\u4689\u468a\u468b\u468c\u468d\u468e\u468f\u4690\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698\u4699\u469a\u469b\u469c\u469d\u469e\u469f\u46a0\u46a1\u46a2\u46a3\u46a4\u46a5\u46a6\u46a7\u46a8\u46a9\u46aa\u46ab\u46ac\u46ad\u46ae\u46af\u46b0\u46b1\u46b2\u46b3\u46b4\u46b5\u46b6\u46b7\u46b8\u46b9\u46ba\u46bb\u46bc\u46bd\u46be\u46bf\u46c0\u46c1\u46c2\u46c3\u46c4\u46c5\u46c6\u46c7\u46c8\u46c9\u46ca\u46cb\u46cc\u46cd\u46ce\u46cf\u46d0\u46d1\u46d2\u46d3\u46d4\u46d5\u46d6\u46d7\u46d8\u46d9\u46da\u46db\u46dc\u46dd\u46de\u46df\u46e0\u46e1\u46e2\u46e3\u46e4\u46e5\u46e6\u46e7\u46e8\u46e9\u46ea\u46eb\u46ec\u46ed\u46ee\u46ef\u46f0\u46f1\u46f2\u46f3\u46f4\u46f5\u46f6\u46f7\u46f8\u46f9\u46fa\u46fb\u46fc\u46fd\u46fe\u46ff\u4700\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708\u4709\u470a\u470b\u470c\u470d\u470e\u470f\u4710\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718\u4719\u471a\u471b\u471c\u471d\u471e\u471f\u4720\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728\u4729\u472a\u472b\u472c\u472d\u472e\u472f\u4730\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738\u4739\u473a\u473b\u473c\u473d\u473e\u473f\u4740\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748\u4749\u474a\u474b\u474c\u474d\u474e\u474f\u4750\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758\u4759\u475a\u475b\u475c\u475d\u475e\u475f\u4760\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768\u4769\u476a\u476b\u476c\u476d\u476e\u476f\u4770\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778\u4779\u477a\u477b\u477c\u477d\u477e\u477f\u4780\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788\u4789\u478a\u478b\u478c\u478d\u478e\u478f\u4790\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798\u4799\u479a\u479b\u479c\u479d\u479e\u479f\u47a0\u47a1\u47a2\u47a3\u47a4\u47a5\u47a6\u47a7\u47a8\u47a9\u47aa\u47ab\u47ac\u47ad\u47ae\u47af\u47b0\u47b1\u47b2\u47b3\u47b4\u47b5\u47b6\u47b7\u47b8\u47b9\u47ba\u47bb\u47bc\u47bd\u47be\u47bf\u47c0\u47c1\u47c2\u47c3\u47c4\u47c5\u47c6\u47c7\u47c8\u47c9\u47ca\u47cb\u47cc\u47cd\u47ce\u47cf\u47d0\u47d1\u47d2\u47d3\u47d4\u47d5\u47d6\u47d7\u47d8\u47d9\u47da\u47db\u47dc\u47dd\u47de\u47df\u47e0\u47e1\u47e2\u47e3\u47e4\u47e5\u47e6\u47e7\u47e8\u47e9\u47ea\u47eb\u47ec\u47ed\u47ee\u47ef\u47f0\u47f1\u47f2\u47f3\u47f4\u47f5\u47f6\u47f7\u47f8\u47f9\u47fa\u47fb\u47fc\u47fd\u47fe\u47ff\u4800\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808\u4809\u480a\u480b\u480c\u480d\u480e\u480f\u4810\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818\u4819\u481a\u481b\u481c\u481d\u481e\u481f\u4820\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828\u4829\u482a\u482b\u482c\u482d\u482e\u482f\u4830\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838\u4839\u483a\u483b\u483c\u483d\u483e\u483f\u4840\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848\u4849\u484a\u484b\u484c\u484d\u484e\u484f\u4850\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858\u4859\u485a\u485b\u485c\u485d\u485e\u485f\u4860\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868\u4869\u486a\u486b\u486c\u486d\u486e\u486f\u4870\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878\u4879\u487a\u487b\u487c\u487d\u487e\u487f\u4880\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888\u4889\u488a\u488b\u488c\u488d\u488e\u488f\u4890\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898\u4899\u489a\u489b\u489c\u489d\u489e\u489f\u48a0\u48a1\u48a2\u48a3\u48a4\u48a5\u48a6\u48a7\u48a8\u48a9\u48aa\u48ab\u48ac\u48ad\u48ae\u48af\u48b0\u48b1\u48b2\u48b3\u48b4\u48b5\u48b6\u48b7\u48b8\u48b9\u48ba\u48bb\u48bc\u48bd\u48be\u48bf\u48c0\u48c1\u48c2\u48c3\u48c4\u48c5\u48c6\u48c7\u48c8\u48c9\u48ca\u48cb\u48cc\u48cd\u48ce\u48cf\u48d0\u48d1\u48d2\u48d3\u48d4\u48d5\u48d6\u48d7\u48d8\u48d9\u48da\u48db\u48dc\u48dd\u48de\u48df\u48e0\u48e1\u48e2\u48e3\u48e4\u48e5\u48e6\u48e7\u48e8\u48e9\u48ea\u48eb\u48ec\u48ed\u48ee\u48ef\u48f0\u48f1\u48f2\u48f3\u48f4\u48f5\u48f6\u48f7\u48f8\u48f9\u48fa\u48fb\u48fc\u48fd\u48fe\u48ff\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907\u4908\u4909\u490a\u490b\u490c\u490d\u490e\u490f\u4910\u4911\u4912\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491a\u491b\u491c\u491d\u491e\u491f\u4920\u4921\u4922\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492a\u492b\u492c\u492d\u492e\u492f\u4930\u4931\u4932\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493a\u493b\u493c\u493d\u493e\u493f\u4940\u4941\u4942\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494a\u494b\u494c\u494d\u494e\u494f\u4950\u4951\u4952\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495a\u495b\u495c\u495d\u495e\u495f\u4960\u4961\u4962\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496a\u496b\u496c\u496d\u496e\u496f\u4970\u4971\u4972\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497a\u497b\u497c\u497d\u497e\u497f\u4980\u4981\u4982\u4983\u4984\u4985\u4986\u4987\u4988\u4989\u498a\u498b\u498c\u498d\u498e\u498f\u4990\u4991\u4992\u4993\u4994\u4995\u4996\u4997\u4998\u4999\u499a\u499b\u499c\u499d\u499e\u499f\u49a0\u49a1\u49a2\u49a3\u49a4\u49a5\u49a6\u49a7\u49a8\u49a9\u49aa\u49ab\u49ac\u49ad\u49ae\u49af\u49b0\u49b1\u49b2\u49b3\u49b4\u49b5\u49b6\u49b7\u49b8\u49b9\u49ba\u49bb\u49bc\u49bd\u49be\u49bf\u49c0\u49c1\u49c2\u49c3\u49c4\u49c5\u49c6\u49c7\u49c8\u49c9\u49ca\u49cb\u49cc\u49cd\u49ce\u49cf\u49d0\u49d1\u49d2\u49d3\u49d4\u49d5\u49d6\u49d7\u49d8\u49d9\u49da\u49db\u49dc\u49dd\u49de\u49df\u49e0\u49e1\u49e2\u49e3\u49e4\u49e5\u49e6\u49e7\u49e8\u49e9\u49ea\u49eb\u49ec\u49ed\u49ee\u49ef\u49f0\u49f1\u49f2\u49f3\u49f4\u49f5\u49f6\u49f7\u49f8\u49f9\u49fa\u49fb\u49fc\u49fd\u49fe\u49ff\u4a00\u4a01\u4a02\u4a03\u4a04\u4a05\u4a06\u4a07\u4a08\u4a09\u4a0a\u4a0b\u4a0c\u4a0d\u4a0e\u4a0f\u4a10\u4a11\u4a12\u4a13\u4a14\u4a15\u4a16\u4a17\u4a18\u4a19\u4a1a\u4a1b\u4a1c\u4a1d\u4a1e\u4a1f\u4a20\u4a21\u4a22\u4a23\u4a24\u4a25\u4a26\u4a27\u4a28\u4a29\u4a2a\u4a2b\u4a2c\u4a2d\u4a2e\u4a2f\u4a30\u4a31\u4a32\u4a33\u4a34\u4a35\u4a36\u4a37\u4a38\u4a39\u4a3a\u4a3b\u4a3c\u4a3d\u4a3e\u4a3f\u4a40\u4a41\u4a42\u4a43\u4a44\u4a45\u4a46\u4a47\u4a48\u4a49\u4a4a\u4a4b\u4a4c\u4a4d\u4a4e\u4a4f\u4a50\u4a51\u4a52\u4a53\u4a54\u4a55\u4a56\u4a57\u4a58\u4a59\u4a5a\u4a5b\u4a5c\u4a5d\u4a5e\u4a5f\u4a60\u4a61\u4a62\u4a63\u4a64\u4a65\u4a66\u4a67\u4a68\u4a69\u4a6a\u4a6b\u4a6c\u4a6d\u4a6e\u4a6f\u4a70\u4a71\u4a72\u4a73\u4a74\u4a75\u4a76\u4a77\u4a78\u4a79\u4a7a\u4a7b\u4a7c\u4a7d\u4a7e\u4a7f\u4a80\u4a81\u4a82\u4a83\u4a84\u4a85\u4a86\u4a87\u4a88\u4a89\u4a8a\u4a8b\u4a8c\u4a8d\u4a8e\u4a8f\u4a90\u4a91\u4a92\u4a93\u4a94\u4a95\u4a96\u4a97\u4a98\u4a99\u4a9a\u4a9b\u4a9c\u4a9d\u4a9e\u4a9f\u4aa0\u4aa1\u4aa2\u4aa3\u4aa4\u4aa5\u4aa6\u4aa7\u4aa8\u4aa9\u4aaa\u4aab\u4aac\u4aad\u4aae\u4aaf\u4ab0\u4ab1\u4ab2\u4ab3\u4ab4\u4ab5\u4ab6\u4ab7\u4ab8\u4ab9\u4aba\u4abb\u4abc\u4abd\u4abe\u4abf\u4ac0\u4ac1\u4ac2\u4ac3\u4ac4\u4ac5\u4ac6\u4ac7\u4ac8\u4ac9\u4aca\u4acb\u4acc\u4acd\u4ace\u4acf\u4ad0\u4ad1\u4ad2\u4ad3\u4ad4\u4ad5\u4ad6\u4ad7\u4ad8\u4ad9\u4ada\u4adb\u4adc\u4add\u4ade\u4adf\u4ae0\u4ae1\u4ae2\u4ae3\u4ae4\u4ae5\u4ae6\u4ae7\u4ae8\u4ae9\u4aea\u4aeb\u4aec\u4aed\u4aee\u4aef\u4af0\u4af1\u4af2\u4af3\u4af4\u4af5\u4af6\u4af7\u4af8\u4af9\u4afa\u4afb\u4afc\u4afd\u4afe\u4aff\u4b00\u4b01\u4b02\u4b03\u4b04\u4b05\u4b06\u4b07\u4b08\u4b09\u4b0a\u4b0b\u4b0c\u4b0d\u4b0e\u4b0f\u4b10\u4b11\u4b12\u4b13\u4b14\u4b15\u4b16\u4b17\u4b18\u4b19\u4b1a\u4b1b\u4b1c\u4b1d\u4b1e\u4b1f\u4b20\u4b21\u4b22\u4b23\u4b24\u4b25\u4b26\u4b27\u4b28\u4b29\u4b2a\u4b2b\u4b2c\u4b2d\u4b2e\u4b2f\u4b30\u4b31\u4b32\u4b33\u4b34\u4b35\u4b36\u4b37\u4b38\u4b39\u4b3a\u4b3b\u4b3c\u4b3d\u4b3e\u4b3f\u4b40\u4b41\u4b42\u4b43\u4b44\u4b45\u4b46\u4b47\u4b48\u4b49\u4b4a\u4b4b\u4b4c\u4b4d\u4b4e\u4b4f\u4b50\u4b51\u4b52\u4b53\u4b54\u4b55\u4b56\u4b57\u4b58\u4b59\u4b5a\u4b5b\u4b5c\u4b5d\u4b5e\u4b5f\u4b60\u4b61\u4b62\u4b63\u4b64\u4b65\u4b66\u4b67\u4b68\u4b69\u4b6a\u4b6b\u4b6c\u4b6d\u4b6e\u4b6f\u4b70\u4b71\u4b72\u4b73\u4b74\u4b75\u4b76\u4b77\u4b78\u4b79\u4b7a\u4b7b\u4b7c\u4b7d\u4b7e\u4b7f\u4b80\u4b81\u4b82\u4b83\u4b84\u4b85\u4b86\u4b87\u4b88\u4b89\u4b8a\u4b8b\u4b8c\u4b8d\u4b8e\u4b8f\u4b90\u4b91\u4b92\u4b93\u4b94\u4b95\u4b96\u4b97\u4b98\u4b99\u4b9a\u4b9b\u4b9c\u4b9d\u4b9e\u4b9f\u4ba0\u4ba1\u4ba2\u4ba3\u4ba4\u4ba5\u4ba6\u4ba7\u4ba8\u4ba9\u4baa\u4bab\u4bac\u4bad\u4bae\u4baf\u4bb0\u4bb1\u4bb2\u4bb3\u4bb4\u4bb5\u4bb6\u4bb7\u4bb8\u4bb9\u4bba\u4bbb\u4bbc\u4bbd\u4bbe\u4bbf\u4bc0\u4bc1\u4bc2\u4bc3\u4bc4\u4bc5\u4bc6\u4bc7\u4bc8\u4bc9\u4bca\u4bcb\u4bcc\u4bcd\u4bce\u4bcf\u4bd0\u4bd1\u4bd2\u4bd3\u4bd4\u4bd5\u4bd6\u4bd7\u4bd8\u4bd9\u4bda\u4bdb\u4bdc\u4bdd\u4bde\u4bdf\u4be0\u4be1\u4be2\u4be3\u4be4\u4be5\u4be6\u4be7\u4be8\u4be9\u4bea\u4beb\u4bec\u4bed\u4bee\u4bef\u4bf0\u4bf1\u4bf2\u4bf3\u4bf4\u4bf5\u4bf6\u4bf7\u4bf8\u4bf9\u4bfa\u4bfb\u4bfc\u4bfd\u4bfe\u4bff\u4c00\u4c01\u4c02\u4c03\u4c04\u4c05\u4c06\u4c07\u4c08\u4c09\u4c0a\u4c0b\u4c0c\u4c0d\u4c0e\u4c0f\u4c10\u4c11\u4c12\u4c13\u4c14\u4c15\u4c16\u4c17\u4c18\u4c19\u4c1a\u4c1b\u4c1c\u4c1d\u4c1e\u4c1f\u4c20\u4c21\u4c22\u4c23\u4c24\u4c25\u4c26\u4c27\u4c28\u4c29\u4c2a\u4c2b\u4c2c\u4c2d\u4c2e\u4c2f\u4c30\u4c31\u4c32\u4c33\u4c34\u4c35\u4c36\u4c37\u4c38\u4c39\u4c3a\u4c3b\u4c3c\u4c3d\u4c3e\u4c3f\u4c40\u4c41\u4c42\u4c43\u4c44\u4c45\u4c46\u4c47\u4c48\u4c49\u4c4a\u4c4b\u4c4c\u4c4d\u4c4e\u4c4f\u4c50\u4c51\u4c52\u4c53\u4c54\u4c55\u4c56\u4c57\u4c58\u4c59\u4c5a\u4c5b\u4c5c\u4c5d\u4c5e\u4c5f\u4c60\u4c61\u4c62\u4c63\u4c64\u4c65\u4c66\u4c67\u4c68\u4c69\u4c6a\u4c6b\u4c6c\u4c6d\u4c6e\u4c6f\u4c70\u4c71\u4c72\u4c73\u4c74\u4c75\u4c76\u4c77\u4c78\u4c79\u4c7a\u4c7b\u4c7c\u4c7d\u4c7e\u4c7f\u4c80\u4c81\u4c82\u4c83\u4c84\u4c85\u4c86\u4c87\u4c88\u4c89\u4c8a\u4c8b\u4c8c\u4c8d\u4c8e\u4c8f\u4c90\u4c91\u4c92\u4c93\u4c94\u4c95\u4c96\u4c97\u4c98\u4c99\u4c9a\u4c9b\u4c9c\u4c9d\u4c9e\u4c9f\u4ca0\u4ca1\u4ca2\u4ca3\u4ca4\u4ca5\u4ca6\u4ca7\u4ca8\u4ca9\u4caa\u4cab\u4cac\u4cad\u4cae\u4caf\u4cb0\u4cb1\u4cb2\u4cb3\u4cb4\u4cb5\u4cb6\u4cb7\u4cb8\u4cb9\u4cba\u4cbb\u4cbc\u4cbd\u4cbe\u4cbf\u4cc0\u4cc1\u4cc2\u4cc3\u4cc4\u4cc5\u4cc6\u4cc7\u4cc8\u4cc9\u4cca\u4ccb\u4ccc\u4ccd\u4cce\u4ccf\u4cd0\u4cd1\u4cd2\u4cd3\u4cd4\u4cd5\u4cd6\u4cd7\u4cd8\u4cd9\u4cda\u4cdb\u4cdc\u4cdd\u4cde\u4cdf\u4ce0\u4ce1\u4ce2\u4ce3\u4ce4\u4ce5\u4ce6\u4ce7\u4ce8\u4ce9\u4cea\u4ceb\u4cec\u4ced\u4cee\u4cef\u4cf0\u4cf1\u4cf2\u4cf3\u4cf4\u4cf5\u4cf6\u4cf7\u4cf8\u4cf9\u4cfa\u4cfb\u4cfc\u4cfd\u4cfe\u4cff\u4d00\u4d01\u4d02\u4d03\u4d04\u4d05\u4d06\u4d07\u4d08\u4d09\u4d0a\u4d0b\u4d0c\u4d0d\u4d0e\u4d0f\u4d10\u4d11\u4d12\u4d13\u4d14\u4d15\u4d16\u4d17\u4d18\u4d19\u4d1a\u4d1b\u4d1c\u4d1d\u4d1e\u4d1f\u4d20\u4d21\u4d22\u4d23\u4d24\u4d25\u4d26\u4d27\u4d28\u4d29\u4d2a\u4d2b\u4d2c\u4d2d\u4d2e\u4d2f\u4d30\u4d31\u4d32\u4d33\u4d34\u4d35\u4d36\u4d37\u4d38\u4d39\u4d3a\u4d3b\u4d3c\u4d3d\u4d3e\u4d3f\u4d40\u4d41\u4d42\u4d43\u4d44\u4d45\u4d46\u4d47\u4d48\u4d49\u4d4a\u4d4b\u4d4c\u4d4d\u4d4e\u4d4f\u4d50\u4d51\u4d52\u4d53\u4d54\u4d55\u4d56\u4d57\u4d58\u4d59\u4d5a\u4d5b\u4d5c\u4d5d\u4d5e\u4d5f\u4d60\u4d61\u4d62\u4d63\u4d64\u4d65\u4d66\u4d67\u4d68\u4d69\u4d6a\u4d6b\u4d6c\u4d6d\u4d6e\u4d6f\u4d70\u4d71\u4d72\u4d73\u4d74\u4d75\u4d76\u4d77\u4d78\u4d79\u4d7a\u4d7b\u4d7c\u4d7d\u4d7e\u4d7f\u4d80\u4d81\u4d82\u4d83\u4d84\u4d85\u4d86\u4d87\u4d88\u4d89\u4d8a\u4d8b\u4d8c\u4d8d\u4d8e\u4d8f\u4d90\u4d91\u4d92\u4d93\u4d94\u4d95\u4d96\u4d97\u4d98\u4d99\u4d9a\u4d9b\u4d9c\u4d9d\u4d9e\u4d9f\u4da0\u4da1\u4da2\u4da3\u4da4\u4da5\u4da6\u4da7\u4da8\u4da9\u4daa\u4dab\u4dac\u4dad\u4dae\u4daf\u4db0\u4db1\u4db2\u4db3\u4db4\u4db5\u4e00\u4e01\u4e02\u4e03\u4e04\u4e05\u4e06\u4e07\u4e08\u4e09\u4e0a\u4e0b\u4e0c\u4e0d\u4e0e\u4e0f\u4e10\u4e11\u4e12\u4e13\u4e14\u4e15\u4e16\u4e17\u4e18\u4e19\u4e1a\u4e1b\u4e1c\u4e1d\u4e1e\u4e1f\u4e20\u4e21\u4e22\u4e23\u4e24\u4e25\u4e26\u4e27\u4e28\u4e29\u4e2a\u4e2b\u4e2c\u4e2d\u4e2e\u4e2f\u4e30\u4e31\u4e32\u4e33\u4e34\u4e35\u4e36\u4e37\u4e38\u4e39\u4e3a\u4e3b\u4e3c\u4e3d\u4e3e\u4e3f\u4e40\u4e41\u4e42\u4e43\u4e44\u4e45\u4e46\u4e47\u4e48\u4e49\u4e4a\u4e4b\u4e4c\u4e4d\u4e4e\u4e4f\u4e50\u4e51\u4e52\u4e53\u4e54\u4e55\u4e56\u4e57\u4e58\u4e59\u4e5a\u4e5b\u4e5c\u4e5d\u4e5e\u4e5f\u4e60\u4e61\u4e62\u4e63\u4e64\u4e65\u4e66\u4e67\u4e68\u4e69\u4e6a\u4e6b\u4e6c\u4e6d\u4e6e\u4e6f\u4e70\u4e71\u4e72\u4e73\u4e74\u4e75\u4e76\u4e77\u4e78\u4e79\u4e7a\u4e7b\u4e7c\u4e7d\u4e7e\u4e7f\u4e80\u4e81\u4e82\u4e83\u4e84\u4e85\u4e86\u4e87\u4e88\u4e89\u4e8a\u4e8b\u4e8c\u4e8d\u4e8e\u4e8f\u4e90\u4e91\u4e92\u4e93\u4e94\u4e95\u4e96\u4e97\u4e98\u4e99\u4e9a\u4e9b\u4e9c\u4e9d\u4e9e\u4e9f\u4ea0\u4ea1\u4ea2\u4ea3\u4ea4\u4ea5\u4ea6\u4ea7\u4ea8\u4ea9\u4eaa\u4eab\u4eac\u4ead\u4eae\u4eaf\u4eb0\u4eb1\u4eb2\u4eb3\u4eb4\u4eb5\u4eb6\u4eb7\u4eb8\u4eb9\u4eba\u4ebb\u4ebc\u4ebd\u4ebe\u4ebf\u4ec0\u4ec1\u4ec2\u4ec3\u4ec4\u4ec5\u4ec6\u4ec7\u4ec8\u4ec9\u4eca\u4ecb\u4ecc\u4ecd\u4ece\u4ecf\u4ed0\u4ed1\u4ed2\u4ed3\u4ed4\u4ed5\u4ed6\u4ed7\u4ed8\u4ed9\u4eda\u4edb\u4edc\u4edd\u4ede\u4edf\u4ee0\u4ee1\u4ee2\u4ee3\u4ee4\u4ee5\u4ee6\u4ee7\u4ee8\u4ee9\u4eea\u4eeb\u4eec\u4eed\u4eee\u4eef\u4ef0\u4ef1\u4ef2\u4ef3\u4ef4\u4ef5\u4ef6\u4ef7\u4ef8\u4ef9\u4efa\u4efb\u4efc\u4efd\u4efe\u4eff\u4f00\u4f01\u4f02\u4f03\u4f04\u4f05\u4f06\u4f07\u4f08\u4f09\u4f0a\u4f0b\u4f0c\u4f0d\u4f0e\u4f0f\u4f10\u4f11\u4f12\u4f13\u4f14\u4f15\u4f16\u4f17\u4f18\u4f19\u4f1a\u4f1b\u4f1c\u4f1d\u4f1e\u4f1f\u4f20\u4f21\u4f22\u4f23\u4f24\u4f25\u4f26\u4f27\u4f28\u4f29\u4f2a\u4f2b\u4f2c\u4f2d\u4f2e\u4f2f\u4f30\u4f31\u4f32\u4f33\u4f34\u4f35\u4f36\u4f37\u4f38\u4f39\u4f3a\u4f3b\u4f3c\u4f3d\u4f3e\u4f3f\u4f40\u4f41\u4f42\u4f43\u4f44\u4f45\u4f46\u4f47\u4f48\u4f49\u4f4a\u4f4b\u4f4c\u4f4d\u4f4e\u4f4f\u4f50\u4f51\u4f52\u4f53\u4f54\u4f55\u4f56\u4f57\u4f58\u4f59\u4f5a\u4f5b\u4f5c\u4f5d\u4f5e\u4f5f\u4f60\u4f61\u4f62\u4f63\u4f64\u4f65\u4f66\u4f67\u4f68\u4f69\u4f6a\u4f6b\u4f6c\u4f6d\u4f6e\u4f6f\u4f70\u4f71\u4f72\u4f73\u4f74\u4f75\u4f76\u4f77\u4f78\u4f79\u4f7a\u4f7b\u4f7c\u4f7d\u4f7e\u4f7f\u4f80\u4f81\u4f82\u4f83\u4f84\u4f85\u4f86\u4f87\u4f88\u4f89\u4f8a\u4f8b\u4f8c\u4f8d\u4f8e\u4f8f\u4f90\u4f91\u4f92\u4f93\u4f94\u4f95\u4f96\u4f97\u4f98\u4f99\u4f9a\u4f9b\u4f9c\u4f9d\u4f9e\u4f9f\u4fa0\u4fa1\u4fa2\u4fa3\u4fa4\u4fa5\u4fa6\u4fa7\u4fa8\u4fa9\u4faa\u4fab\u4fac\u4fad\u4fae\u4faf\u4fb0\u4fb1\u4fb2\u4fb3\u4fb4\u4fb5\u4fb6\u4fb7\u4fb8\u4fb9\u4fba\u4fbb\u4fbc\u4fbd\u4fbe\u4fbf\u4fc0\u4fc1\u4fc2\u4fc3\u4fc4\u4fc5\u4fc6\u4fc7\u4fc8\u4fc9\u4fca\u4fcb\u4fcc\u4fcd\u4fce\u4fcf\u4fd0\u4fd1\u4fd2\u4fd3\u4fd4\u4fd5\u4fd6\u4fd7\u4fd8\u4fd9\u4fda\u4fdb\u4fdc\u4fdd\u4fde\u4fdf\u4fe0\u4fe1\u4fe2\u4fe3\u4fe4\u4fe5\u4fe6\u4fe7\u4fe8\u4fe9\u4fea\u4feb\u4fec\u4fed\u4fee\u4fef\u4ff0\u4ff1\u4ff2\u4ff3\u4ff4\u4ff5\u4ff6\u4ff7\u4ff8\u4ff9\u4ffa\u4ffb\u4ffc\u4ffd\u4ffe\u4fff\u5000\u5001\u5002\u5003\u5004\u5005\u5006\u5007\u5008\u5009\u500a\u500b\u500c\u500d\u500e\u500f\u5010\u5011\u5012\u5013\u5014\u5015\u5016\u5017\u5018\u5019\u501a\u501b\u501c\u501d\u501e\u501f\u5020\u5021\u5022\u5023\u5024\u5025\u5026\u5027\u5028\u5029\u502a\u502b\u502c\u502d\u502e\u502f\u5030\u5031\u5032\u5033\u5034\u5035\u5036\u5037\u5038\u5039\u503a\u503b\u503c\u503d\u503e\u503f\u5040\u5041\u5042\u5043\u5044\u5045\u5046\u5047\u5048\u5049\u504a\u504b\u504c\u504d\u504e\u504f\u5050\u5051\u5052\u5053\u5054\u5055\u5056\u5057\u5058\u5059\u505a\u505b\u505c\u505d\u505e\u505f\u5060\u5061\u5062\u5063\u5064\u5065\u5066\u5067\u5068\u5069\u506a\u506b\u506c\u506d\u506e\u506f\u5070\u5071\u5072\u5073\u5074\u5075\u5076\u5077\u5078\u5079\u507a\u507b\u507c\u507d\u507e\u507f\u5080\u5081\u5082\u5083\u5084\u5085\u5086\u5087\u5088\u5089\u508a\u508b\u508c\u508d\u508e\u508f\u5090\u5091\u5092\u5093\u5094\u5095\u5096\u5097\u5098\u5099\u509a\u509b\u509c\u509d\u509e\u509f\u50a0\u50a1\u50a2\u50a3\u50a4\u50a5\u50a6\u50a7\u50a8\u50a9\u50aa\u50ab\u50ac\u50ad\u50ae\u50af\u50b0\u50b1\u50b2\u50b3\u50b4\u50b5\u50b6\u50b7\u50b8\u50b9\u50ba\u50bb\u50bc\u50bd\u50be\u50bf\u50c0\u50c1\u50c2\u50c3\u50c4\u50c5\u50c6\u50c7\u50c8\u50c9\u50ca\u50cb\u50cc\u50cd\u50ce\u50cf\u50d0\u50d1\u50d2\u50d3\u50d4\u50d5\u50d6\u50d7\u50d8\u50d9\u50da\u50db\u50dc\u50dd\u50de\u50df\u50e0\u50e1\u50e2\u50e3\u50e4\u50e5\u50e6\u50e7\u50e8\u50e9\u50ea\u50eb\u50ec\u50ed\u50ee\u50ef\u50f0\u50f1\u50f2\u50f3\u50f4\u50f5\u50f6\u50f7\u50f8\u50f9\u50fa\u50fb\u50fc\u50fd\u50fe\u50ff\u5100\u5101\u5102\u5103\u5104\u5105\u5106\u5107\u5108\u5109\u510a\u510b\u510c\u510d\u510e\u510f\u5110\u5111\u5112\u5113\u5114\u5115\u5116\u5117\u5118\u5119\u511a\u511b\u511c\u511d\u511e\u511f\u5120\u5121\u5122\u5123\u5124\u5125\u5126\u5127\u5128\u5129\u512a\u512b\u512c\u512d\u512e\u512f\u5130\u5131\u5132\u5133\u5134\u5135\u5136\u5137\u5138\u5139\u513a\u513b\u513c\u513d\u513e\u513f\u5140\u5141\u5142\u5143\u5144\u5145\u5146\u5147\u5148\u5149\u514a\u514b\u514c\u514d\u514e\u514f\u5150\u5151\u5152\u5153\u5154\u5155\u5156\u5157\u5158\u5159\u515a\u515b\u515c\u515d\u515e\u515f\u5160\u5161\u5162\u5163\u5164\u5165\u5166\u5167\u5168\u5169\u516a\u516b\u516c\u516d\u516e\u516f\u5170\u5171\u5172\u5173\u5174\u5175\u5176\u5177\u5178\u5179\u517a\u517b\u517c\u517d\u517e\u517f\u5180\u5181\u5182\u5183\u5184\u5185\u5186\u5187\u5188\u5189\u518a\u518b\u518c\u518d\u518e\u518f\u5190\u5191\u5192\u5193\u5194\u5195\u5196\u5197\u5198\u5199\u519a\u519b\u519c\u519d\u519e\u519f\u51a0\u51a1\u51a2\u51a3\u51a4\u51a5\u51a6\u51a7\u51a8\u51a9\u51aa\u51ab\u51ac\u51ad\u51ae\u51af\u51b0\u51b1\u51b2\u51b3\u51b4\u51b5\u51b6\u51b7\u51b8\u51b9\u51ba\u51bb\u51bc\u51bd\u51be\u51bf\u51c0\u51c1\u51c2\u51c3\u51c4\u51c5\u51c6\u51c7\u51c8\u51c9\u51ca\u51cb\u51cc\u51cd\u51ce\u51cf\u51d0\u51d1\u51d2\u51d3\u51d4\u51d5\u51d6\u51d7\u51d8\u51d9\u51da\u51db\u51dc\u51dd\u51de\u51df\u51e0\u51e1\u51e2\u51e3\u51e4\u51e5\u51e6\u51e7\u51e8\u51e9\u51ea\u51eb\u51ec\u51ed\u51ee\u51ef\u51f0\u51f1\u51f2\u51f3\u51f4\u51f5\u51f6\u51f7\u51f8\u51f9\u51fa\u51fb\u51fc\u51fd\u51fe\u51ff\u5200\u5201\u5202\u5203\u5204\u5205\u5206\u5207\u5208\u5209\u520a\u520b\u520c\u520d\u520e\u520f\u5210\u5211\u5212\u5213\u5214\u5215\u5216\u5217\u5218\u5219\u521a\u521b\u521c\u521d\u521e\u521f\u5220\u5221\u5222\u5223\u5224\u5225\u5226\u5227\u5228\u5229\u522a\u522b\u522c\u522d\u522e\u522f\u5230\u5231\u5232\u5233\u5234\u5235\u5236\u5237\u5238\u5239\u523a\u523b\u523c\u523d\u523e\u523f\u5240\u5241\u5242\u5243\u5244\u5245\u5246\u5247\u5248\u5249\u524a\u524b\u524c\u524d\u524e\u524f\u5250\u5251\u5252\u5253\u5254\u5255\u5256\u5257\u5258\u5259\u525a\u525b\u525c\u525d\u525e\u525f\u5260\u5261\u5262\u5263\u5264\u5265\u5266\u5267\u5268\u5269\u526a\u526b\u526c\u526d\u526e\u526f\u5270\u5271\u5272\u5273\u5274\u5275\u5276\u5277\u5278\u5279\u527a\u527b\u527c\u527d\u527e\u527f\u5280\u5281\u5282\u5283\u5284\u5285\u5286\u5287\u5288\u5289\u528a\u528b\u528c\u528d\u528e\u528f\u5290\u5291\u5292\u5293\u5294\u5295\u5296\u5297\u5298\u5299\u529a\u529b\u529c\u529d\u529e\u529f\u52a0\u52a1\u52a2\u52a3\u52a4\u52a5\u52a6\u52a7\u52a8\u52a9\u52aa\u52ab\u52ac\u52ad\u52ae\u52af\u52b0\u52b1\u52b2\u52b3\u52b4\u52b5\u52b6\u52b7\u52b8\u52b9\u52ba\u52bb\u52bc\u52bd\u52be\u52bf\u52c0\u52c1\u52c2\u52c3\u52c4\u52c5\u52c6\u52c7\u52c8\u52c9\u52ca\u52cb\u52cc\u52cd\u52ce\u52cf\u52d0\u52d1\u52d2\u52d3\u52d4\u52d5\u52d6\u52d7\u52d8\u52d9\u52da\u52db\u52dc\u52dd\u52de\u52df\u52e0\u52e1\u52e2\u52e3\u52e4\u52e5\u52e6\u52e7\u52e8\u52e9\u52ea\u52eb\u52ec\u52ed\u52ee\u52ef\u52f0\u52f1\u52f2\u52f3\u52f4\u52f5\u52f6\u52f7\u52f8\u52f9\u52fa\u52fb\u52fc\u52fd\u52fe\u52ff\u5300\u5301\u5302\u5303\u5304\u5305\u5306\u5307\u5308\u5309\u530a\u530b\u530c\u530d\u530e\u530f\u5310\u5311\u5312\u5313\u5314\u5315\u5316\u5317\u5318\u5319\u531a\u531b\u531c\u531d\u531e\u531f\u5320\u5321\u5322\u5323\u5324\u5325\u5326\u5327\u5328\u5329\u532a\u532b\u532c\u532d\u532e\u532f\u5330\u5331\u5332\u5333\u5334\u5335\u5336\u5337\u5338\u5339\u533a\u533b\u533c\u533d\u533e\u533f\u5340\u5341\u5342\u5343\u5344\u5345\u5346\u5347\u5348\u5349\u534a\u534b\u534c\u534d\u534e\u534f\u5350\u5351\u5352\u5353\u5354\u5355\u5356\u5357\u5358\u5359\u535a\u535b\u535c\u535d\u535e\u535f\u5360\u5361\u5362\u5363\u5364\u5365\u5366\u5367\u5368\u5369\u536a\u536b\u536c\u536d\u536e\u536f\u5370\u5371\u5372\u5373\u5374\u5375\u5376\u5377\u5378\u5379\u537a\u537b\u537c\u537d\u537e\u537f\u5380\u5381\u5382\u5383\u5384\u5385\u5386\u5387\u5388\u5389\u538a\u538b\u538c\u538d\u538e\u538f\u5390\u5391\u5392\u5393\u5394\u5395\u5396\u5397\u5398\u5399\u539a\u539b\u539c\u539d\u539e\u539f\u53a0\u53a1\u53a2\u53a3\u53a4\u53a5\u53a6\u53a7\u53a8\u53a9\u53aa\u53ab\u53ac\u53ad\u53ae\u53af\u53b0\u53b1\u53b2\u53b3\u53b4\u53b5\u53b6\u53b7\u53b8\u53b9\u53ba\u53bb\u53bc\u53bd\u53be\u53bf\u53c0\u53c1\u53c2\u53c3\u53c4\u53c5\u53c6\u53c7\u53c8\u53c9\u53ca\u53cb\u53cc\u53cd\u53ce\u53cf\u53d0\u53d1\u53d2\u53d3\u53d4\u53d5\u53d6\u53d7\u53d8\u53d9\u53da\u53db\u53dc\u53dd\u53de\u53df\u53e0\u53e1\u53e2\u53e3\u53e4\u53e5\u53e6\u53e7\u53e8\u53e9\u53ea\u53eb\u53ec\u53ed\u53ee\u53ef\u53f0\u53f1\u53f2\u53f3\u53f4\u53f5\u53f6\u53f7\u53f8\u53f9\u53fa\u53fb\u53fc\u53fd\u53fe\u53ff\u5400\u5401\u5402\u5403\u5404\u5405\u5406\u5407\u5408\u5409\u540a\u540b\u540c\u540d\u540e\u540f\u5410\u5411\u5412\u5413\u5414\u5415\u5416\u5417\u5418\u5419\u541a\u541b\u541c\u541d\u541e\u541f\u5420\u5421\u5422\u5423\u5424\u5425\u5426\u5427\u5428\u5429\u542a\u542b\u542c\u542d\u542e\u542f\u5430\u5431\u5432\u5433\u5434\u5435\u5436\u5437\u5438\u5439\u543a\u543b\u543c\u543d\u543e\u543f\u5440\u5441\u5442\u5443\u5444\u5445\u5446\u5447\u5448\u5449\u544a\u544b\u544c\u544d\u544e\u544f\u5450\u5451\u5452\u5453\u5454\u5455\u5456\u5457\u5458\u5459\u545a\u545b\u545c\u545d\u545e\u545f\u5460\u5461\u5462\u5463\u5464\u5465\u5466\u5467\u5468\u5469\u546a\u546b\u546c\u546d\u546e\u546f\u5470\u5471\u5472\u5473\u5474\u5475\u5476\u5477\u5478\u5479\u547a\u547b\u547c\u547d\u547e\u547f\u5480\u5481\u5482\u5483\u5484\u5485\u5486\u5487\u5488\u5489\u548a\u548b\u548c\u548d\u548e\u548f\u5490\u5491\u5492\u5493\u5494\u5495\u5496\u5497\u5498\u5499\u549a\u549b\u549c\u549d\u549e\u549f\u54a0\u54a1\u54a2\u54a3\u54a4\u54a5\u54a6\u54a7\u54a8\u54a9\u54aa\u54ab\u54ac\u54ad\u54ae\u54af\u54b0\u54b1\u54b2\u54b3\u54b4\u54b5\u54b6\u54b7\u54b8\u54b9\u54ba\u54bb\u54bc\u54bd\u54be\u54bf\u54c0\u54c1\u54c2\u54c3\u54c4\u54c5\u54c6\u54c7\u54c8\u54c9\u54ca\u54cb\u54cc\u54cd\u54ce\u54cf\u54d0\u54d1\u54d2\u54d3\u54d4\u54d5\u54d6\u54d7\u54d8\u54d9\u54da\u54db\u54dc\u54dd\u54de\u54df\u54e0\u54e1\u54e2\u54e3\u54e4\u54e5\u54e6\u54e7\u54e8\u54e9\u54ea\u54eb\u54ec\u54ed\u54ee\u54ef\u54f0\u54f1\u54f2\u54f3\u54f4\u54f5\u54f6\u54f7\u54f8\u54f9\u54fa\u54fb\u54fc\u54fd\u54fe\u54ff\u5500\u5501\u5502\u5503\u5504\u5505\u5506\u5507\u5508\u5509\u550a\u550b\u550c\u550d\u550e\u550f\u5510\u5511\u5512\u5513\u5514\u5515\u5516\u5517\u5518\u5519\u551a\u551b\u551c\u551d\u551e\u551f\u5520\u5521\u5522\u5523\u5524\u5525\u5526\u5527\u5528\u5529\u552a\u552b\u552c\u552d\u552e\u552f\u5530\u5531\u5532\u5533\u5534\u5535\u5536\u5537\u5538\u5539\u553a\u553b\u553c\u553d\u553e\u553f\u5540\u5541\u5542\u5543\u5544\u5545\u5546\u5547\u5548\u5549\u554a\u554b\u554c\u554d\u554e\u554f\u5550\u5551\u5552\u5553\u5554\u5555\u5556\u5557\u5558\u5559\u555a\u555b\u555c\u555d\u555e\u555f\u5560\u5561\u5562\u5563\u5564\u5565\u5566\u5567\u5568\u5569\u556a\u556b\u556c\u556d\u556e\u556f\u5570\u5571\u5572\u5573\u5574\u5575\u5576\u5577\u5578\u5579\u557a\u557b\u557c\u557d\u557e\u557f\u5580\u5581\u5582\u5583\u5584\u5585\u5586\u5587\u5588\u5589\u558a\u558b\u558c\u558d\u558e\u558f\u5590\u5591\u5592\u5593\u5594\u5595\u5596\u5597\u5598\u5599\u559a\u559b\u559c\u559d\u559e\u559f\u55a0\u55a1\u55a2\u55a3\u55a4\u55a5\u55a6\u55a7\u55a8\u55a9\u55aa\u55ab\u55ac\u55ad\u55ae\u55af\u55b0\u55b1\u55b2\u55b3\u55b4\u55b5\u55b6\u55b7\u55b8\u55b9\u55ba\u55bb\u55bc\u55bd\u55be\u55bf\u55c0\u55c1\u55c2\u55c3\u55c4\u55c5\u55c6\u55c7\u55c8\u55c9\u55ca\u55cb\u55cc\u55cd\u55ce\u55cf\u55d0\u55d1\u55d2\u55d3\u55d4\u55d5\u55d6\u55d7\u55d8\u55d9\u55da\u55db\u55dc\u55dd\u55de\u55df\u55e0\u55e1\u55e2\u55e3\u55e4\u55e5\u55e6\u55e7\u55e8\u55e9\u55ea\u55eb\u55ec\u55ed\u55ee\u55ef\u55f0\u55f1\u55f2\u55f3\u55f4\u55f5\u55f6\u55f7\u55f8\u55f9\u55fa\u55fb\u55fc\u55fd\u55fe\u55ff\u5600\u5601\u5602\u5603\u5604\u5605\u5606\u5607\u5608\u5609\u560a\u560b\u560c\u560d\u560e\u560f\u5610\u5611\u5612\u5613\u5614\u5615\u5616\u5617\u5618\u5619\u561a\u561b\u561c\u561d\u561e\u561f\u5620\u5621\u5622\u5623\u5624\u5625\u5626\u5627\u5628\u5629\u562a\u562b\u562c\u562d\u562e\u562f\u5630\u5631\u5632\u5633\u5634\u5635\u5636\u5637\u5638\u5639\u563a\u563b\u563c\u563d\u563e\u563f\u5640\u5641\u5642\u5643\u5644\u5645\u5646\u5647\u5648\u5649\u564a\u564b\u564c\u564d\u564e\u564f\u5650\u5651\u5652\u5653\u5654\u5655\u5656\u5657\u5658\u5659\u565a\u565b\u565c\u565d\u565e\u565f\u5660\u5661\u5662\u5663\u5664\u5665\u5666\u5667\u5668\u5669\u566a\u566b\u566c\u566d\u566e\u566f\u5670\u5671\u5672\u5673\u5674\u5675\u5676\u5677\u5678\u5679\u567a\u567b\u567c\u567d\u567e\u567f\u5680\u5681\u5682\u5683\u5684\u5685\u5686\u5687\u5688\u5689\u568a\u568b\u568c\u568d\u568e\u568f\u5690\u5691\u5692\u5693\u5694\u5695\u5696\u5697\u5698\u5699\u569a\u569b\u569c\u569d\u569e\u569f\u56a0\u56a1\u56a2\u56a3\u56a4\u56a5\u56a6\u56a7\u56a8\u56a9\u56aa\u56ab\u56ac\u56ad\u56ae\u56af\u56b0\u56b1\u56b2\u56b3\u56b4\u56b5\u56b6\u56b7\u56b8\u56b9\u56ba\u56bb\u56bc\u56bd\u56be\u56bf\u56c0\u56c1\u56c2\u56c3\u56c4\u56c5\u56c6\u56c7\u56c8\u56c9\u56ca\u56cb\u56cc\u56cd\u56ce\u56cf\u56d0\u56d1\u56d2\u56d3\u56d4\u56d5\u56d6\u56d7\u56d8\u56d9\u56da\u56db\u56dc\u56dd\u56de\u56df\u56e0\u56e1\u56e2\u56e3\u56e4\u56e5\u56e6\u56e7\u56e8\u56e9\u56ea\u56eb\u56ec\u56ed\u56ee\u56ef\u56f0\u56f1\u56f2\u56f3\u56f4\u56f5\u56f6\u56f7\u56f8\u56f9\u56fa\u56fb\u56fc\u56fd\u56fe\u56ff\u5700\u5701\u5702\u5703\u5704\u5705\u5706\u5707\u5708\u5709\u570a\u570b\u570c\u570d\u570e\u570f\u5710\u5711\u5712\u5713\u5714\u5715\u5716\u5717\u5718\u5719\u571a\u571b\u571c\u571d\u571e\u571f\u5720\u5721\u5722\u5723\u5724\u5725\u5726\u5727\u5728\u5729\u572a\u572b\u572c\u572d\u572e\u572f\u5730\u5731\u5732\u5733\u5734\u5735\u5736\u5737\u5738\u5739\u573a\u573b\u573c\u573d\u573e\u573f\u5740\u5741\u5742\u5743\u5744\u5745\u5746\u5747\u5748\u5749\u574a\u574b\u574c\u574d\u574e\u574f\u5750\u5751\u5752\u5753\u5754\u5755\u5756\u5757\u5758\u5759\u575a\u575b\u575c\u575d\u575e\u575f\u5760\u5761\u5762\u5763\u5764\u5765\u5766\u5767\u5768\u5769\u576a\u576b\u576c\u576d\u576e\u576f\u5770\u5771\u5772\u5773\u5774\u5775\u5776\u5777\u5778\u5779\u577a\u577b\u577c\u577d\u577e\u577f\u5780\u5781\u5782\u5783\u5784\u5785\u5786\u5787\u5788\u5789\u578a\u578b\u578c\u578d\u578e\u578f\u5790\u5791\u5792\u5793\u5794\u5795\u5796\u5797\u5798\u5799\u579a\u579b\u579c\u579d\u579e\u579f\u57a0\u57a1\u57a2\u57a3\u57a4\u57a5\u57a6\u57a7\u57a8\u57a9\u57aa\u57ab\u57ac\u57ad\u57ae\u57af\u57b0\u57b1\u57b2\u57b3\u57b4\u57b5\u57b6\u57b7\u57b8\u57b9\u57ba\u57bb\u57bc\u57bd\u57be\u57bf\u57c0\u57c1\u57c2\u57c3\u57c4\u57c5\u57c6\u57c7\u57c8\u57c9\u57ca\u57cb\u57cc\u57cd\u57ce\u57cf\u57d0\u57d1\u57d2\u57d3\u57d4\u57d5\u57d6\u57d7\u57d8\u57d9\u57da\u57db\u57dc\u57dd\u57de\u57df\u57e0\u57e1\u57e2\u57e3\u57e4\u57e5\u57e6\u57e7\u57e8\u57e9\u57ea\u57eb\u57ec\u57ed\u57ee\u57ef\u57f0\u57f1\u57f2\u57f3\u57f4\u57f5\u57f6\u57f7\u57f8\u57f9\u57fa\u57fb\u57fc\u57fd\u57fe\u57ff\u5800\u5801\u5802\u5803\u5804\u5805\u5806\u5807\u5808\u5809\u580a\u580b\u580c\u580d\u580e\u580f\u5810\u5811\u5812\u5813\u5814\u5815\u5816\u5817\u5818\u5819\u581a\u581b\u581c\u581d\u581e\u581f\u5820\u5821\u5822\u5823\u5824\u5825\u5826\u5827\u5828\u5829\u582a\u582b\u582c\u582d\u582e\u582f\u5830\u5831\u5832\u5833\u5834\u5835\u5836\u5837\u5838\u5839\u583a\u583b\u583c\u583d\u583e\u583f\u5840\u5841\u5842\u5843\u5844\u5845\u5846\u5847\u5848\u5849\u584a\u584b\u584c\u584d\u584e\u584f\u5850\u5851\u5852\u5853\u5854\u5855\u5856\u5857\u5858\u5859\u585a\u585b\u585c\u585d\u585e\u585f\u5860\u5861\u5862\u5863\u5864\u5865\u5866\u5867\u5868\u5869\u586a\u586b\u586c\u586d\u586e\u586f\u5870\u5871\u5872\u5873\u5874\u5875\u5876\u5877\u5878\u5879\u587a\u587b\u587c\u587d\u587e\u587f\u5880\u5881\u5882\u5883\u5884\u5885\u5886\u5887\u5888\u5889\u588a\u588b\u588c\u588d\u588e\u588f\u5890\u5891\u5892\u5893\u5894\u5895\u5896\u5897\u5898\u5899\u589a\u589b\u589c\u589d\u589e\u589f\u58a0\u58a1\u58a2\u58a3\u58a4\u58a5\u58a6\u58a7\u58a8\u58a9\u58aa\u58ab\u58ac\u58ad\u58ae\u58af\u58b0\u58b1\u58b2\u58b3\u58b4\u58b5\u58b6\u58b7\u58b8\u58b9\u58ba\u58bb\u58bc\u58bd\u58be\u58bf\u58c0\u58c1\u58c2\u58c3\u58c4\u58c5\u58c6\u58c7\u58c8\u58c9\u58ca\u58cb\u58cc\u58cd\u58ce\u58cf\u58d0\u58d1\u58d2\u58d3\u58d4\u58d5\u58d6\u58d7\u58d8\u58d9\u58da\u58db\u58dc\u58dd\u58de\u58df\u58e0\u58e1\u58e2\u58e3\u58e4\u58e5\u58e6\u58e7\u58e8\u58e9\u58ea\u58eb\u58ec\u58ed\u58ee\u58ef\u58f0\u58f1\u58f2\u58f3\u58f4\u58f5\u58f6\u58f7\u58f8\u58f9\u58fa\u58fb\u58fc\u58fd\u58fe\u58ff\u5900\u5901\u5902\u5903\u5904\u5905\u5906\u5907\u5908\u5909\u590a\u590b\u590c\u590d\u590e\u590f\u5910\u5911\u5912\u5913\u5914\u5915\u5916\u5917\u5918\u5919\u591a\u591b\u591c\u591d\u591e\u591f\u5920\u5921\u5922\u5923\u5924\u5925\u5926\u5927\u5928\u5929\u592a\u592b\u592c\u592d\u592e\u592f\u5930\u5931\u5932\u5933\u5934\u5935\u5936\u5937\u5938\u5939\u593a\u593b\u593c\u593d\u593e\u593f\u5940\u5941\u5942\u5943\u5944\u5945\u5946\u5947\u5948\u5949\u594a\u594b\u594c\u594d\u594e\u594f\u5950\u5951\u5952\u5953\u5954\u5955\u5956\u5957\u5958\u5959\u595a\u595b\u595c\u595d\u595e\u595f\u5960\u5961\u5962\u5963\u5964\u5965\u5966\u5967\u5968\u5969\u596a\u596b\u596c\u596d\u596e\u596f\u5970\u5971\u5972\u5973\u5974\u5975\u5976\u5977\u5978\u5979\u597a\u597b\u597c\u597d\u597e\u597f\u5980\u5981\u5982\u5983\u5984\u5985\u5986\u5987\u5988\u5989\u598a\u598b\u598c\u598d\u598e\u598f\u5990\u5991\u5992\u5993\u5994\u5995\u5996\u5997\u5998\u5999\u599a\u599b\u599c\u599d\u599e\u599f\u59a0\u59a1\u59a2\u59a3\u59a4\u59a5\u59a6\u59a7\u59a8\u59a9\u59aa\u59ab\u59ac\u59ad\u59ae\u59af\u59b0\u59b1\u59b2\u59b3\u59b4\u59b5\u59b6\u59b7\u59b8\u59b9\u59ba\u59bb\u59bc\u59bd\u59be\u59bf\u59c0\u59c1\u59c2\u59c3\u59c4\u59c5\u59c6\u59c7\u59c8\u59c9\u59ca\u59cb\u59cc\u59cd\u59ce\u59cf\u59d0\u59d1\u59d2\u59d3\u59d4\u59d5\u59d6\u59d7\u59d8\u59d9\u59da\u59db\u59dc\u59dd\u59de\u59df\u59e0\u59e1\u59e2\u59e3\u59e4\u59e5\u59e6\u59e7\u59e8\u59e9\u59ea\u59eb\u59ec\u59ed\u59ee\u59ef\u59f0\u59f1\u59f2\u59f3\u59f4\u59f5\u59f6\u59f7\u59f8\u59f9\u59fa\u59fb\u59fc\u59fd\u59fe\u59ff\u5a00\u5a01\u5a02\u5a03\u5a04\u5a05\u5a06\u5a07\u5a08\u5a09\u5a0a\u5a0b\u5a0c\u5a0d\u5a0e\u5a0f\u5a10\u5a11\u5a12\u5a13\u5a14\u5a15\u5a16\u5a17\u5a18\u5a19\u5a1a\u5a1b\u5a1c\u5a1d\u5a1e\u5a1f\u5a20\u5a21\u5a22\u5a23\u5a24\u5a25\u5a26\u5a27\u5a28\u5a29\u5a2a\u5a2b\u5a2c\u5a2d\u5a2e\u5a2f\u5a30\u5a31\u5a32\u5a33\u5a34\u5a35\u5a36\u5a37\u5a38\u5a39\u5a3a\u5a3b\u5a3c\u5a3d\u5a3e\u5a3f\u5a40\u5a41\u5a42\u5a43\u5a44\u5a45\u5a46\u5a47\u5a48\u5a49\u5a4a\u5a4b\u5a4c\u5a4d\u5a4e\u5a4f\u5a50\u5a51\u5a52\u5a53\u5a54\u5a55\u5a56\u5a57\u5a58\u5a59\u5a5a\u5a5b\u5a5c\u5a5d\u5a5e\u5a5f\u5a60\u5a61\u5a62\u5a63\u5a64\u5a65\u5a66\u5a67\u5a68\u5a69\u5a6a\u5a6b\u5a6c\u5a6d\u5a6e\u5a6f\u5a70\u5a71\u5a72\u5a73\u5a74\u5a75\u5a76\u5a77\u5a78\u5a79\u5a7a\u5a7b\u5a7c\u5a7d\u5a7e\u5a7f\u5a80\u5a81\u5a82\u5a83\u5a84\u5a85\u5a86\u5a87\u5a88\u5a89\u5a8a\u5a8b\u5a8c\u5a8d\u5a8e\u5a8f\u5a90\u5a91\u5a92\u5a93\u5a94\u5a95\u5a96\u5a97\u5a98\u5a99\u5a9a\u5a9b\u5a9c\u5a9d\u5a9e\u5a9f\u5aa0\u5aa1\u5aa2\u5aa3\u5aa4\u5aa5\u5aa6\u5aa7\u5aa8\u5aa9\u5aaa\u5aab\u5aac\u5aad\u5aae\u5aaf\u5ab0\u5ab1\u5ab2\u5ab3\u5ab4\u5ab5\u5ab6\u5ab7\u5ab8\u5ab9\u5aba\u5abb\u5abc\u5abd\u5abe\u5abf\u5ac0\u5ac1\u5ac2\u5ac3\u5ac4\u5ac5\u5ac6\u5ac7\u5ac8\u5ac9\u5aca\u5acb\u5acc\u5acd\u5ace\u5acf\u5ad0\u5ad1\u5ad2\u5ad3\u5ad4\u5ad5\u5ad6\u5ad7\u5ad8\u5ad9\u5ada\u5adb\u5adc\u5add\u5ade\u5adf\u5ae0\u5ae1\u5ae2\u5ae3\u5ae4\u5ae5\u5ae6\u5ae7\u5ae8\u5ae9\u5aea\u5aeb\u5aec\u5aed\u5aee\u5aef\u5af0\u5af1\u5af2\u5af3\u5af4\u5af5\u5af6\u5af7\u5af8\u5af9\u5afa\u5afb\u5afc\u5afd\u5afe\u5aff\u5b00\u5b01\u5b02\u5b03\u5b04\u5b05\u5b06\u5b07\u5b08\u5b09\u5b0a\u5b0b\u5b0c\u5b0d\u5b0e\u5b0f\u5b10\u5b11\u5b12\u5b13\u5b14\u5b15\u5b16\u5b17\u5b18\u5b19\u5b1a\u5b1b\u5b1c\u5b1d\u5b1e\u5b1f\u5b20\u5b21\u5b22\u5b23\u5b24\u5b25\u5b26\u5b27\u5b28\u5b29\u5b2a\u5b2b\u5b2c\u5b2d\u5b2e\u5b2f\u5b30\u5b31\u5b32\u5b33\u5b34\u5b35\u5b36\u5b37\u5b38\u5b39\u5b3a\u5b3b\u5b3c\u5b3d\u5b3e\u5b3f\u5b40\u5b41\u5b42\u5b43\u5b44\u5b45\u5b46\u5b47\u5b48\u5b49\u5b4a\u5b4b\u5b4c\u5b4d\u5b4e\u5b4f\u5b50\u5b51\u5b52\u5b53\u5b54\u5b55\u5b56\u5b57\u5b58\u5b59\u5b5a\u5b5b\u5b5c\u5b5d\u5b5e\u5b5f\u5b60\u5b61\u5b62\u5b63\u5b64\u5b65\u5b66\u5b67\u5b68\u5b69\u5b6a\u5b6b\u5b6c\u5b6d\u5b6e\u5b6f\u5b70\u5b71\u5b72\u5b73\u5b74\u5b75\u5b76\u5b77\u5b78\u5b79\u5b7a\u5b7b\u5b7c\u5b7d\u5b7e\u5b7f\u5b80\u5b81\u5b82\u5b83\u5b84\u5b85\u5b86\u5b87\u5b88\u5b89\u5b8a\u5b8b\u5b8c\u5b8d\u5b8e\u5b8f\u5b90\u5b91\u5b92\u5b93\u5b94\u5b95\u5b96\u5b97\u5b98\u5b99\u5b9a\u5b9b\u5b9c\u5b9d\u5b9e\u5b9f\u5ba0\u5ba1\u5ba2\u5ba3\u5ba4\u5ba5\u5ba6\u5ba7\u5ba8\u5ba9\u5baa\u5bab\u5bac\u5bad\u5bae\u5baf\u5bb0\u5bb1\u5bb2\u5bb3\u5bb4\u5bb5\u5bb6\u5bb7\u5bb8\u5bb9\u5bba\u5bbb\u5bbc\u5bbd\u5bbe\u5bbf\u5bc0\u5bc1\u5bc2\u5bc3\u5bc4\u5bc5\u5bc6\u5bc7\u5bc8\u5bc9\u5bca\u5bcb\u5bcc\u5bcd\u5bce\u5bcf\u5bd0\u5bd1\u5bd2\u5bd3\u5bd4\u5bd5\u5bd6\u5bd7\u5bd8\u5bd9\u5bda\u5bdb\u5bdc\u5bdd\u5bde\u5bdf\u5be0\u5be1\u5be2\u5be3\u5be4\u5be5\u5be6\u5be7\u5be8\u5be9\u5bea\u5beb\u5bec\u5bed\u5bee\u5bef\u5bf0\u5bf1\u5bf2\u5bf3\u5bf4\u5bf5\u5bf6\u5bf7\u5bf8\u5bf9\u5bfa\u5bfb\u5bfc\u5bfd\u5bfe\u5bff\u5c00\u5c01\u5c02\u5c03\u5c04\u5c05\u5c06\u5c07\u5c08\u5c09\u5c0a\u5c0b\u5c0c\u5c0d\u5c0e\u5c0f\u5c10\u5c11\u5c12\u5c13\u5c14\u5c15\u5c16\u5c17\u5c18\u5c19\u5c1a\u5c1b\u5c1c\u5c1d\u5c1e\u5c1f\u5c20\u5c21\u5c22\u5c23\u5c24\u5c25\u5c26\u5c27\u5c28\u5c29\u5c2a\u5c2b\u5c2c\u5c2d\u5c2e\u5c2f\u5c30\u5c31\u5c32\u5c33\u5c34\u5c35\u5c36\u5c37\u5c38\u5c39\u5c3a\u5c3b\u5c3c\u5c3d\u5c3e\u5c3f\u5c40\u5c41\u5c42\u5c43\u5c44\u5c45\u5c46\u5c47\u5c48\u5c49\u5c4a\u5c4b\u5c4c\u5c4d\u5c4e\u5c4f\u5c50\u5c51\u5c52\u5c53\u5c54\u5c55\u5c56\u5c57\u5c58\u5c59\u5c5a\u5c5b\u5c5c\u5c5d\u5c5e\u5c5f\u5c60\u5c61\u5c62\u5c63\u5c64\u5c65\u5c66\u5c67\u5c68\u5c69\u5c6a\u5c6b\u5c6c\u5c6d\u5c6e\u5c6f\u5c70\u5c71\u5c72\u5c73\u5c74\u5c75\u5c76\u5c77\u5c78\u5c79\u5c7a\u5c7b\u5c7c\u5c7d\u5c7e\u5c7f\u5c80\u5c81\u5c82\u5c83\u5c84\u5c85\u5c86\u5c87\u5c88\u5c89\u5c8a\u5c8b\u5c8c\u5c8d\u5c8e\u5c8f\u5c90\u5c91\u5c92\u5c93\u5c94\u5c95\u5c96\u5c97\u5c98\u5c99\u5c9a\u5c9b\u5c9c\u5c9d\u5c9e\u5c9f\u5ca0\u5ca1\u5ca2\u5ca3\u5ca4\u5ca5\u5ca6\u5ca7\u5ca8\u5ca9\u5caa\u5cab\u5cac\u5cad\u5cae\u5caf\u5cb0\u5cb1\u5cb2\u5cb3\u5cb4\u5cb5\u5cb6\u5cb7\u5cb8\u5cb9\u5cba\u5cbb\u5cbc\u5cbd\u5cbe\u5cbf\u5cc0\u5cc1\u5cc2\u5cc3\u5cc4\u5cc5\u5cc6\u5cc7\u5cc8\u5cc9\u5cca\u5ccb\u5ccc\u5ccd\u5cce\u5ccf\u5cd0\u5cd1\u5cd2\u5cd3\u5cd4\u5cd5\u5cd6\u5cd7\u5cd8\u5cd9\u5cda\u5cdb\u5cdc\u5cdd\u5cde\u5cdf\u5ce0\u5ce1\u5ce2\u5ce3\u5ce4\u5ce5\u5ce6\u5ce7\u5ce8\u5ce9\u5cea\u5ceb\u5cec\u5ced\u5cee\u5cef\u5cf0\u5cf1\u5cf2\u5cf3\u5cf4\u5cf5\u5cf6\u5cf7\u5cf8\u5cf9\u5cfa\u5cfb\u5cfc\u5cfd\u5cfe\u5cff\u5d00\u5d01\u5d02\u5d03\u5d04\u5d05\u5d06\u5d07\u5d08\u5d09\u5d0a\u5d0b\u5d0c\u5d0d\u5d0e\u5d0f\u5d10\u5d11\u5d12\u5d13\u5d14\u5d15\u5d16\u5d17\u5d18\u5d19\u5d1a\u5d1b\u5d1c\u5d1d\u5d1e\u5d1f\u5d20\u5d21\u5d22\u5d23\u5d24\u5d25\u5d26\u5d27\u5d28\u5d29\u5d2a\u5d2b\u5d2c\u5d2d\u5d2e\u5d2f\u5d30\u5d31\u5d32\u5d33\u5d34\u5d35\u5d36\u5d37\u5d38\u5d39\u5d3a\u5d3b\u5d3c\u5d3d\u5d3e\u5d3f\u5d40\u5d41\u5d42\u5d43\u5d44\u5d45\u5d46\u5d47\u5d48\u5d49\u5d4a\u5d4b\u5d4c\u5d4d\u5d4e\u5d4f\u5d50\u5d51\u5d52\u5d53\u5d54\u5d55\u5d56\u5d57\u5d58\u5d59\u5d5a\u5d5b\u5d5c\u5d5d\u5d5e\u5d5f\u5d60\u5d61\u5d62\u5d63\u5d64\u5d65\u5d66\u5d67\u5d68\u5d69\u5d6a\u5d6b\u5d6c\u5d6d\u5d6e\u5d6f\u5d70\u5d71\u5d72\u5d73\u5d74\u5d75\u5d76\u5d77\u5d78\u5d79\u5d7a\u5d7b\u5d7c\u5d7d\u5d7e\u5d7f\u5d80\u5d81\u5d82\u5d83\u5d84\u5d85\u5d86\u5d87\u5d88\u5d89\u5d8a\u5d8b\u5d8c\u5d8d\u5d8e\u5d8f\u5d90\u5d91\u5d92\u5d93\u5d94\u5d95\u5d96\u5d97\u5d98\u5d99\u5d9a\u5d9b\u5d9c\u5d9d\u5d9e\u5d9f\u5da0\u5da1\u5da2\u5da3\u5da4\u5da5\u5da6\u5da7\u5da8\u5da9\u5daa\u5dab\u5dac\u5dad\u5dae\u5daf\u5db0\u5db1\u5db2\u5db3\u5db4\u5db5\u5db6\u5db7\u5db8\u5db9\u5dba\u5dbb\u5dbc\u5dbd\u5dbe\u5dbf\u5dc0\u5dc1\u5dc2\u5dc3\u5dc4\u5dc5\u5dc6\u5dc7\u5dc8\u5dc9\u5dca\u5dcb\u5dcc\u5dcd\u5dce\u5dcf\u5dd0\u5dd1\u5dd2\u5dd3\u5dd4\u5dd5\u5dd6\u5dd7\u5dd8\u5dd9\u5dda\u5ddb\u5ddc\u5ddd\u5dde\u5ddf\u5de0\u5de1\u5de2\u5de3\u5de4\u5de5\u5de6\u5de7\u5de8\u5de9\u5dea\u5deb\u5dec\u5ded\u5dee\u5def\u5df0\u5df1\u5df2\u5df3\u5df4\u5df5\u5df6\u5df7\u5df8\u5df9\u5dfa\u5dfb\u5dfc\u5dfd\u5dfe\u5dff\u5e00\u5e01\u5e02\u5e03\u5e04\u5e05\u5e06\u5e07\u5e08\u5e09\u5e0a\u5e0b\u5e0c\u5e0d\u5e0e\u5e0f\u5e10\u5e11\u5e12\u5e13\u5e14\u5e15\u5e16\u5e17\u5e18\u5e19\u5e1a\u5e1b\u5e1c\u5e1d\u5e1e\u5e1f\u5e20\u5e21\u5e22\u5e23\u5e24\u5e25\u5e26\u5e27\u5e28\u5e29\u5e2a\u5e2b\u5e2c\u5e2d\u5e2e\u5e2f\u5e30\u5e31\u5e32\u5e33\u5e34\u5e35\u5e36\u5e37\u5e38\u5e39\u5e3a\u5e3b\u5e3c\u5e3d\u5e3e\u5e3f\u5e40\u5e41\u5e42\u5e43\u5e44\u5e45\u5e46\u5e47\u5e48\u5e49\u5e4a\u5e4b\u5e4c\u5e4d\u5e4e\u5e4f\u5e50\u5e51\u5e52\u5e53\u5e54\u5e55\u5e56\u5e57\u5e58\u5e59\u5e5a\u5e5b\u5e5c\u5e5d\u5e5e\u5e5f\u5e60\u5e61\u5e62\u5e63\u5e64\u5e65\u5e66\u5e67\u5e68\u5e69\u5e6a\u5e6b\u5e6c\u5e6d\u5e6e\u5e6f\u5e70\u5e71\u5e72\u5e73\u5e74\u5e75\u5e76\u5e77\u5e78\u5e79\u5e7a\u5e7b\u5e7c\u5e7d\u5e7e\u5e7f\u5e80\u5e81\u5e82\u5e83\u5e84\u5e85\u5e86\u5e87\u5e88\u5e89\u5e8a\u5e8b\u5e8c\u5e8d\u5e8e\u5e8f\u5e90\u5e91\u5e92\u5e93\u5e94\u5e95\u5e96\u5e97\u5e98\u5e99\u5e9a\u5e9b\u5e9c\u5e9d\u5e9e\u5e9f\u5ea0\u5ea1\u5ea2\u5ea3\u5ea4\u5ea5\u5ea6\u5ea7\u5ea8\u5ea9\u5eaa\u5eab\u5eac\u5ead\u5eae\u5eaf\u5eb0\u5eb1\u5eb2\u5eb3\u5eb4\u5eb5\u5eb6\u5eb7\u5eb8\u5eb9\u5eba\u5ebb\u5ebc\u5ebd\u5ebe\u5ebf\u5ec0\u5ec1\u5ec2\u5ec3\u5ec4\u5ec5\u5ec6\u5ec7\u5ec8\u5ec9\u5eca\u5ecb\u5ecc\u5ecd\u5ece\u5ecf\u5ed0\u5ed1\u5ed2\u5ed3\u5ed4\u5ed5\u5ed6\u5ed7\u5ed8\u5ed9\u5eda\u5edb\u5edc\u5edd\u5ede\u5edf\u5ee0\u5ee1\u5ee2\u5ee3\u5ee4\u5ee5\u5ee6\u5ee7\u5ee8\u5ee9\u5eea\u5eeb\u5eec\u5eed\u5eee\u5eef\u5ef0\u5ef1\u5ef2\u5ef3\u5ef4\u5ef5\u5ef6\u5ef7\u5ef8\u5ef9\u5efa\u5efb\u5efc\u5efd\u5efe\u5eff\u5f00\u5f01\u5f02\u5f03\u5f04\u5f05\u5f06\u5f07\u5f08\u5f09\u5f0a\u5f0b\u5f0c\u5f0d\u5f0e\u5f0f\u5f10\u5f11\u5f12\u5f13\u5f14\u5f15\u5f16\u5f17\u5f18\u5f19\u5f1a\u5f1b\u5f1c\u5f1d\u5f1e\u5f1f\u5f20\u5f21\u5f22\u5f23\u5f24\u5f25\u5f26\u5f27\u5f28\u5f29\u5f2a\u5f2b\u5f2c\u5f2d\u5f2e\u5f2f\u5f30\u5f31\u5f32\u5f33\u5f34\u5f35\u5f36\u5f37\u5f38\u5f39\u5f3a\u5f3b\u5f3c\u5f3d\u5f3e\u5f3f\u5f40\u5f41\u5f42\u5f43\u5f44\u5f45\u5f46\u5f47\u5f48\u5f49\u5f4a\u5f4b\u5f4c\u5f4d\u5f4e\u5f4f\u5f50\u5f51\u5f52\u5f53\u5f54\u5f55\u5f56\u5f57\u5f58\u5f59\u5f5a\u5f5b\u5f5c\u5f5d\u5f5e\u5f5f\u5f60\u5f61\u5f62\u5f63\u5f64\u5f65\u5f66\u5f67\u5f68\u5f69\u5f6a\u5f6b\u5f6c\u5f6d\u5f6e\u5f6f\u5f70\u5f71\u5f72\u5f73\u5f74\u5f75\u5f76\u5f77\u5f78\u5f79\u5f7a\u5f7b\u5f7c\u5f7d\u5f7e\u5f7f\u5f80\u5f81\u5f82\u5f83\u5f84\u5f85\u5f86\u5f87\u5f88\u5f89\u5f8a\u5f8b\u5f8c\u5f8d\u5f8e\u5f8f\u5f90\u5f91\u5f92\u5f93\u5f94\u5f95\u5f96\u5f97\u5f98\u5f99\u5f9a\u5f9b\u5f9c\u5f9d\u5f9e\u5f9f\u5fa0\u5fa1\u5fa2\u5fa3\u5fa4\u5fa5\u5fa6\u5fa7\u5fa8\u5fa9\u5faa\u5fab\u5fac\u5fad\u5fae\u5faf\u5fb0\u5fb1\u5fb2\u5fb3\u5fb4\u5fb5\u5fb6\u5fb7\u5fb8\u5fb9\u5fba\u5fbb\u5fbc\u5fbd\u5fbe\u5fbf\u5fc0\u5fc1\u5fc2\u5fc3\u5fc4\u5fc5\u5fc6\u5fc7\u5fc8\u5fc9\u5fca\u5fcb\u5fcc\u5fcd\u5fce\u5fcf\u5fd0\u5fd1\u5fd2\u5fd3\u5fd4\u5fd5\u5fd6\u5fd7\u5fd8\u5fd9\u5fda\u5fdb\u5fdc\u5fdd\u5fde\u5fdf\u5fe0\u5fe1\u5fe2\u5fe3\u5fe4\u5fe5\u5fe6\u5fe7\u5fe8\u5fe9\u5fea\u5feb\u5fec\u5fed\u5fee\u5fef\u5ff0\u5ff1\u5ff2\u5ff3\u5ff4\u5ff5\u5ff6\u5ff7\u5ff8\u5ff9\u5ffa\u5ffb\u5ffc\u5ffd\u5ffe\u5fff\u6000\u6001\u6002\u6003\u6004\u6005\u6006\u6007\u6008\u6009\u600a\u600b\u600c\u600d\u600e\u600f\u6010\u6011\u6012\u6013\u6014\u6015\u6016\u6017\u6018\u6019\u601a\u601b\u601c\u601d\u601e\u601f\u6020\u6021\u6022\u6023\u6024\u6025\u6026\u6027\u6028\u6029\u602a\u602b\u602c\u602d\u602e\u602f\u6030\u6031\u6032\u6033\u6034\u6035\u6036\u6037\u6038\u6039\u603a\u603b\u603c\u603d\u603e\u603f\u6040\u6041\u6042\u6043\u6044\u6045\u6046\u6047\u6048\u6049\u604a\u604b\u604c\u604d\u604e\u604f\u6050\u6051\u6052\u6053\u6054\u6055\u6056\u6057\u6058\u6059\u605a\u605b\u605c\u605d\u605e\u605f\u6060\u6061\u6062\u6063\u6064\u6065\u6066\u6067\u6068\u6069\u606a\u606b\u606c\u606d\u606e\u606f\u6070\u6071\u6072\u6073\u6074\u6075\u6076\u6077\u6078\u6079\u607a\u607b\u607c\u607d\u607e\u607f\u6080\u6081\u6082\u6083\u6084\u6085\u6086\u6087\u6088\u6089\u608a\u608b\u608c\u608d\u608e\u608f\u6090\u6091\u6092\u6093\u6094\u6095\u6096\u6097\u6098\u6099\u609a\u609b\u609c\u609d\u609e\u609f\u60a0\u60a1\u60a2\u60a3\u60a4\u60a5\u60a6\u60a7\u60a8\u60a9\u60aa\u60ab\u60ac\u60ad\u60ae\u60af\u60b0\u60b1\u60b2\u60b3\u60b4\u60b5\u60b6\u60b7\u60b8\u60b9\u60ba\u60bb\u60bc\u60bd\u60be\u60bf\u60c0\u60c1\u60c2\u60c3\u60c4\u60c5\u60c6\u60c7\u60c8\u60c9\u60ca\u60cb\u60cc\u60cd\u60ce\u60cf\u60d0\u60d1\u60d2\u60d3\u60d4\u60d5\u60d6\u60d7\u60d8\u60d9\u60da\u60db\u60dc\u60dd\u60de\u60df\u60e0\u60e1\u60e2\u60e3\u60e4\u60e5\u60e6\u60e7\u60e8\u60e9\u60ea\u60eb\u60ec\u60ed\u60ee\u60ef\u60f0\u60f1\u60f2\u60f3\u60f4\u60f5\u60f6\u60f7\u60f8\u60f9\u60fa\u60fb\u60fc\u60fd\u60fe\u60ff\u6100\u6101\u6102\u6103\u6104\u6105\u6106\u6107\u6108\u6109\u610a\u610b\u610c\u610d\u610e\u610f\u6110\u6111\u6112\u6113\u6114\u6115\u6116\u6117\u6118\u6119\u611a\u611b\u611c\u611d\u611e\u611f\u6120\u6121\u6122\u6123\u6124\u6125\u6126\u6127\u6128\u6129\u612a\u612b\u612c\u612d\u612e\u612f\u6130\u6131\u6132\u6133\u6134\u6135\u6136\u6137\u6138\u6139\u613a\u613b\u613c\u613d\u613e\u613f\u6140\u6141\u6142\u6143\u6144\u6145\u6146\u6147\u6148\u6149\u614a\u614b\u614c\u614d\u614e\u614f\u6150\u6151\u6152\u6153\u6154\u6155\u6156\u6157\u6158\u6159\u615a\u615b\u615c\u615d\u615e\u615f\u6160\u6161\u6162\u6163\u6164\u6165\u6166\u6167\u6168\u6169\u616a\u616b\u616c\u616d\u616e\u616f\u6170\u6171\u6172\u6173\u6174\u6175\u6176\u6177\u6178\u6179\u617a\u617b\u617c\u617d\u617e\u617f\u6180\u6181\u6182\u6183\u6184\u6185\u6186\u6187\u6188\u6189\u618a\u618b\u618c\u618d\u618e\u618f\u6190\u6191\u6192\u6193\u6194\u6195\u6196\u6197\u6198\u6199\u619a\u619b\u619c\u619d\u619e\u619f\u61a0\u61a1\u61a2\u61a3\u61a4\u61a5\u61a6\u61a7\u61a8\u61a9\u61aa\u61ab\u61ac\u61ad\u61ae\u61af\u61b0\u61b1\u61b2\u61b3\u61b4\u61b5\u61b6\u61b7\u61b8\u61b9\u61ba\u61bb\u61bc\u61bd\u61be\u61bf\u61c0\u61c1\u61c2\u61c3\u61c4\u61c5\u61c6\u61c7\u61c8\u61c9\u61ca\u61cb\u61cc\u61cd\u61ce\u61cf\u61d0\u61d1\u61d2\u61d3\u61d4\u61d5\u61d6\u61d7\u61d8\u61d9\u61da\u61db\u61dc\u61dd\u61de\u61df\u61e0\u61e1\u61e2\u61e3\u61e4\u61e5\u61e6\u61e7\u61e8\u61e9\u61ea\u61eb\u61ec\u61ed\u61ee\u61ef\u61f0\u61f1\u61f2\u61f3\u61f4\u61f5\u61f6\u61f7\u61f8\u61f9\u61fa\u61fb\u61fc\u61fd\u61fe\u61ff\u6200\u6201\u6202\u6203\u6204\u6205\u6206\u6207\u6208\u6209\u620a\u620b\u620c\u620d\u620e\u620f\u6210\u6211\u6212\u6213\u6214\u6215\u6216\u6217\u6218\u6219\u621a\u621b\u621c\u621d\u621e\u621f\u6220\u6221\u6222\u6223\u6224\u6225\u6226\u6227\u6228\u6229\u622a\u622b\u622c\u622d\u622e\u622f\u6230\u6231\u6232\u6233\u6234\u6235\u6236\u6237\u6238\u6239\u623a\u623b\u623c\u623d\u623e\u623f\u6240\u6241\u6242\u6243\u6244\u6245\u6246\u6247\u6248\u6249\u624a\u624b\u624c\u624d\u624e\u624f\u6250\u6251\u6252\u6253\u6254\u6255\u6256\u6257\u6258\u6259\u625a\u625b\u625c\u625d\u625e\u625f\u6260\u6261\u6262\u6263\u6264\u6265\u6266\u6267\u6268\u6269\u626a\u626b\u626c\u626d\u626e\u626f\u6270\u6271\u6272\u6273\u6274\u6275\u6276\u6277\u6278\u6279\u627a\u627b\u627c\u627d\u627e\u627f\u6280\u6281\u6282\u6283\u6284\u6285\u6286\u6287\u6288\u6289\u628a\u628b\u628c\u628d\u628e\u628f\u6290\u6291\u6292\u6293\u6294\u6295\u6296\u6297\u6298\u6299\u629a\u629b\u629c\u629d\u629e\u629f\u62a0\u62a1\u62a2\u62a3\u62a4\u62a5\u62a6\u62a7\u62a8\u62a9\u62aa\u62ab\u62ac\u62ad\u62ae\u62af\u62b0\u62b1\u62b2\u62b3\u62b4\u62b5\u62b6\u62b7\u62b8\u62b9\u62ba\u62bb\u62bc\u62bd\u62be\u62bf\u62c0\u62c1\u62c2\u62c3\u62c4\u62c5\u62c6\u62c7\u62c8\u62c9\u62ca\u62cb\u62cc\u62cd\u62ce\u62cf\u62d0\u62d1\u62d2\u62d3\u62d4\u62d5\u62d6\u62d7\u62d8\u62d9\u62da\u62db\u62dc\u62dd\u62de\u62df\u62e0\u62e1\u62e2\u62e3\u62e4\u62e5\u62e6\u62e7\u62e8\u62e9\u62ea\u62eb\u62ec\u62ed\u62ee\u62ef\u62f0\u62f1\u62f2\u62f3\u62f4\u62f5\u62f6\u62f7\u62f8\u62f9\u62fa\u62fb\u62fc\u62fd\u62fe\u62ff\u6300\u6301\u6302\u6303\u6304\u6305\u6306\u6307\u6308\u6309\u630a\u630b\u630c\u630d\u630e\u630f\u6310\u6311\u6312\u6313\u6314\u6315\u6316\u6317\u6318\u6319\u631a\u631b\u631c\u631d\u631e\u631f\u6320\u6321\u6322\u6323\u6324\u6325\u6326\u6327\u6328\u6329\u632a\u632b\u632c\u632d\u632e\u632f\u6330\u6331\u6332\u6333\u6334\u6335\u6336\u6337\u6338\u6339\u633a\u633b\u633c\u633d\u633e\u633f\u6340\u6341\u6342\u6343\u6344\u6345\u6346\u6347\u6348\u6349\u634a\u634b\u634c\u634d\u634e\u634f\u6350\u6351\u6352\u6353\u6354\u6355\u6356\u6357\u6358\u6359\u635a\u635b\u635c\u635d\u635e\u635f\u6360\u6361\u6362\u6363\u6364\u6365\u6366\u6367\u6368\u6369\u636a\u636b\u636c\u636d\u636e\u636f\u6370\u6371\u6372\u6373\u6374\u6375\u6376\u6377\u6378\u6379\u637a\u637b\u637c\u637d\u637e\u637f\u6380\u6381\u6382\u6383\u6384\u6385\u6386\u6387\u6388\u6389\u638a\u638b\u638c\u638d\u638e\u638f\u6390\u6391\u6392\u6393\u6394\u6395\u6396\u6397\u6398\u6399\u639a\u639b\u639c\u639d\u639e\u639f\u63a0\u63a1\u63a2\u63a3\u63a4\u63a5\u63a6\u63a7\u63a8\u63a9\u63aa\u63ab\u63ac\u63ad\u63ae\u63af\u63b0\u63b1\u63b2\u63b3\u63b4\u63b5\u63b6\u63b7\u63b8\u63b9\u63ba\u63bb\u63bc\u63bd\u63be\u63bf\u63c0\u63c1\u63c2\u63c3\u63c4\u63c5\u63c6\u63c7\u63c8\u63c9\u63ca\u63cb\u63cc\u63cd\u63ce\u63cf\u63d0\u63d1\u63d2\u63d3\u63d4\u63d5\u63d6\u63d7\u63d8\u63d9\u63da\u63db\u63dc\u63dd\u63de\u63df\u63e0\u63e1\u63e2\u63e3\u63e4\u63e5\u63e6\u63e7\u63e8\u63e9\u63ea\u63eb\u63ec\u63ed\u63ee\u63ef\u63f0\u63f1\u63f2\u63f3\u63f4\u63f5\u63f6\u63f7\u63f8\u63f9\u63fa\u63fb\u63fc\u63fd\u63fe\u63ff\u6400\u6401\u6402\u6403\u6404\u6405\u6406\u6407\u6408\u6409\u640a\u640b\u640c\u640d\u640e\u640f\u6410\u6411\u6412\u6413\u6414\u6415\u6416\u6417\u6418\u6419\u641a\u641b\u641c\u641d\u641e\u641f\u6420\u6421\u6422\u6423\u6424\u6425\u6426\u6427\u6428\u6429\u642a\u642b\u642c\u642d\u642e\u642f\u6430\u6431\u6432\u6433\u6434\u6435\u6436\u6437\u6438\u6439\u643a\u643b\u643c\u643d\u643e\u643f\u6440\u6441\u6442\u6443\u6444\u6445\u6446\u6447\u6448\u6449\u644a\u644b\u644c\u644d\u644e\u644f\u6450\u6451\u6452\u6453\u6454\u6455\u6456\u6457\u6458\u6459\u645a\u645b\u645c\u645d\u645e\u645f\u6460\u6461\u6462\u6463\u6464\u6465\u6466\u6467\u6468\u6469\u646a\u646b\u646c\u646d\u646e\u646f\u6470\u6471\u6472\u6473\u6474\u6475\u6476\u6477\u6478\u6479\u647a\u647b\u647c\u647d\u647e\u647f\u6480\u6481\u6482\u6483\u6484\u6485\u6486\u6487\u6488\u6489\u648a\u648b\u648c\u648d\u648e\u648f\u6490\u6491\u6492\u6493\u6494\u6495\u6496\u6497\u6498\u6499\u649a\u649b\u649c\u649d\u649e\u649f\u64a0\u64a1\u64a2\u64a3\u64a4\u64a5\u64a6\u64a7\u64a8\u64a9\u64aa\u64ab\u64ac\u64ad\u64ae\u64af\u64b0\u64b1\u64b2\u64b3\u64b4\u64b5\u64b6\u64b7\u64b8\u64b9\u64ba\u64bb\u64bc\u64bd\u64be\u64bf\u64c0\u64c1\u64c2\u64c3\u64c4\u64c5\u64c6\u64c7\u64c8\u64c9\u64ca\u64cb\u64cc\u64cd\u64ce\u64cf\u64d0\u64d1\u64d2\u64d3\u64d4\u64d5\u64d6\u64d7\u64d8\u64d9\u64da\u64db\u64dc\u64dd\u64de\u64df\u64e0\u64e1\u64e2\u64e3\u64e4\u64e5\u64e6\u64e7\u64e8\u64e9\u64ea\u64eb\u64ec\u64ed\u64ee\u64ef\u64f0\u64f1\u64f2\u64f3\u64f4\u64f5\u64f6\u64f7\u64f8\u64f9\u64fa\u64fb\u64fc\u64fd\u64fe\u64ff\u6500\u6501\u6502\u6503\u6504\u6505\u6506\u6507\u6508\u6509\u650a\u650b\u650c\u650d\u650e\u650f\u6510\u6511\u6512\u6513\u6514\u6515\u6516\u6517\u6518\u6519\u651a\u651b\u651c\u651d\u651e\u651f\u6520\u6521\u6522\u6523\u6524\u6525\u6526\u6527\u6528\u6529\u652a\u652b\u652c\u652d\u652e\u652f\u6530\u6531\u6532\u6533\u6534\u6535\u6536\u6537\u6538\u6539\u653a\u653b\u653c\u653d\u653e\u653f\u6540\u6541\u6542\u6543\u6544\u6545\u6546\u6547\u6548\u6549\u654a\u654b\u654c\u654d\u654e\u654f\u6550\u6551\u6552\u6553\u6554\u6555\u6556\u6557\u6558\u6559\u655a\u655b\u655c\u655d\u655e\u655f\u6560\u6561\u6562\u6563\u6564\u6565\u6566\u6567\u6568\u6569\u656a\u656b\u656c\u656d\u656e\u656f\u6570\u6571\u6572\u6573\u6574\u6575\u6576\u6577\u6578\u6579\u657a\u657b\u657c\u657d\u657e\u657f\u6580\u6581\u6582\u6583\u6584\u6585\u6586\u6587\u6588\u6589\u658a\u658b\u658c\u658d\u658e\u658f\u6590\u6591\u6592\u6593\u6594\u6595\u6596\u6597\u6598\u6599\u659a\u659b\u659c\u659d\u659e\u659f\u65a0\u65a1\u65a2\u65a3\u65a4\u65a5\u65a6\u65a7\u65a8\u65a9\u65aa\u65ab\u65ac\u65ad\u65ae\u65af\u65b0\u65b1\u65b2\u65b3\u65b4\u65b5\u65b6\u65b7\u65b8\u65b9\u65ba\u65bb\u65bc\u65bd\u65be\u65bf\u65c0\u65c1\u65c2\u65c3\u65c4\u65c5\u65c6\u65c7\u65c8\u65c9\u65ca\u65cb\u65cc\u65cd\u65ce\u65cf\u65d0\u65d1\u65d2\u65d3\u65d4\u65d5\u65d6\u65d7\u65d8\u65d9\u65da\u65db\u65dc\u65dd\u65de\u65df\u65e0\u65e1\u65e2\u65e3\u65e4\u65e5\u65e6\u65e7\u65e8\u65e9\u65ea\u65eb\u65ec\u65ed\u65ee\u65ef\u65f0\u65f1\u65f2\u65f3\u65f4\u65f5\u65f6\u65f7\u65f8\u65f9\u65fa\u65fb\u65fc\u65fd\u65fe\u65ff\u6600\u6601\u6602\u6603\u6604\u6605\u6606\u6607\u6608\u6609\u660a\u660b\u660c\u660d\u660e\u660f\u6610\u6611\u6612\u6613\u6614\u6615\u6616\u6617\u6618\u6619\u661a\u661b\u661c\u661d\u661e\u661f\u6620\u6621\u6622\u6623\u6624\u6625\u6626\u6627\u6628\u6629\u662a\u662b\u662c\u662d\u662e\u662f\u6630\u6631\u6632\u6633\u6634\u6635\u6636\u6637\u6638\u6639\u663a\u663b\u663c\u663d\u663e\u663f\u6640\u6641\u6642\u6643\u6644\u6645\u6646\u6647\u6648\u6649\u664a\u664b\u664c\u664d\u664e\u664f\u6650\u6651\u6652\u6653\u6654\u6655\u6656\u6657\u6658\u6659\u665a\u665b\u665c\u665d\u665e\u665f\u6660\u6661\u6662\u6663\u6664\u6665\u6666\u6667\u6668\u6669\u666a\u666b\u666c\u666d\u666e\u666f\u6670\u6671\u6672\u6673\u6674\u6675\u6676\u6677\u6678\u6679\u667a\u667b\u667c\u667d\u667e\u667f\u6680\u6681\u6682\u6683\u6684\u6685\u6686\u6687\u6688\u6689\u668a\u668b\u668c\u668d\u668e\u668f\u6690\u6691\u6692\u6693\u6694\u6695\u6696\u6697\u6698\u6699\u669a\u669b\u669c\u669d\u669e\u669f\u66a0\u66a1\u66a2\u66a3\u66a4\u66a5\u66a6\u66a7\u66a8\u66a9\u66aa\u66ab\u66ac\u66ad\u66ae\u66af\u66b0\u66b1\u66b2\u66b3\u66b4\u66b5\u66b6\u66b7\u66b8\u66b9\u66ba\u66bb\u66bc\u66bd\u66be\u66bf\u66c0\u66c1\u66c2\u66c3\u66c4\u66c5\u66c6\u66c7\u66c8\u66c9\u66ca\u66cb\u66cc\u66cd\u66ce\u66cf\u66d0\u66d1\u66d2\u66d3\u66d4\u66d5\u66d6\u66d7\u66d8\u66d9\u66da\u66db\u66dc\u66dd\u66de\u66df\u66e0\u66e1\u66e2\u66e3\u66e4\u66e5\u66e6\u66e7\u66e8\u66e9\u66ea\u66eb\u66ec\u66ed\u66ee\u66ef\u66f0\u66f1\u66f2\u66f3\u66f4\u66f5\u66f6\u66f7\u66f8\u66f9\u66fa\u66fb\u66fc\u66fd\u66fe\u66ff\u6700\u6701\u6702\u6703\u6704\u6705\u6706\u6707\u6708\u6709\u670a\u670b\u670c\u670d\u670e\u670f\u6710\u6711\u6712\u6713\u6714\u6715\u6716\u6717\u6718\u6719\u671a\u671b\u671c\u671d\u671e\u671f\u6720\u6721\u6722\u6723\u6724\u6725\u6726\u6727\u6728\u6729\u672a\u672b\u672c\u672d\u672e\u672f\u6730\u6731\u6732\u6733\u6734\u6735\u6736\u6737\u6738\u6739\u673a\u673b\u673c\u673d\u673e\u673f\u6740\u6741\u6742\u6743\u6744\u6745\u6746\u6747\u6748\u6749\u674a\u674b\u674c\u674d\u674e\u674f\u6750\u6751\u6752\u6753\u6754\u6755\u6756\u6757\u6758\u6759\u675a\u675b\u675c\u675d\u675e\u675f\u6760\u6761\u6762\u6763\u6764\u6765\u6766\u6767\u6768\u6769\u676a\u676b\u676c\u676d\u676e\u676f\u6770\u6771\u6772\u6773\u6774\u6775\u6776\u6777\u6778\u6779\u677a\u677b\u677c\u677d\u677e\u677f\u6780\u6781\u6782\u6783\u6784\u6785\u6786\u6787\u6788\u6789\u678a\u678b\u678c\u678d\u678e\u678f\u6790\u6791\u6792\u6793\u6794\u6795\u6796\u6797\u6798\u6799\u679a\u679b\u679c\u679d\u679e\u679f\u67a0\u67a1\u67a2\u67a3\u67a4\u67a5\u67a6\u67a7\u67a8\u67a9\u67aa\u67ab\u67ac\u67ad\u67ae\u67af\u67b0\u67b1\u67b2\u67b3\u67b4\u67b5\u67b6\u67b7\u67b8\u67b9\u67ba\u67bb\u67bc\u67bd\u67be\u67bf\u67c0\u67c1\u67c2\u67c3\u67c4\u67c5\u67c6\u67c7\u67c8\u67c9\u67ca\u67cb\u67cc\u67cd\u67ce\u67cf\u67d0\u67d1\u67d2\u67d3\u67d4\u67d5\u67d6\u67d7\u67d8\u67d9\u67da\u67db\u67dc\u67dd\u67de\u67df\u67e0\u67e1\u67e2\u67e3\u67e4\u67e5\u67e6\u67e7\u67e8\u67e9\u67ea\u67eb\u67ec\u67ed\u67ee\u67ef\u67f0\u67f1\u67f2\u67f3\u67f4\u67f5\u67f6\u67f7\u67f8\u67f9\u67fa\u67fb\u67fc\u67fd\u67fe\u67ff\u6800\u6801\u6802\u6803\u6804\u6805\u6806\u6807\u6808\u6809\u680a\u680b\u680c\u680d\u680e\u680f\u6810\u6811\u6812\u6813\u6814\u6815\u6816\u6817\u6818\u6819\u681a\u681b\u681c\u681d\u681e\u681f\u6820\u6821\u6822\u6823\u6824\u6825\u6826\u6827\u6828\u6829\u682a\u682b\u682c\u682d\u682e\u682f\u6830\u6831\u6832\u6833\u6834\u6835\u6836\u6837\u6838\u6839\u683a\u683b\u683c\u683d\u683e\u683f\u6840\u6841\u6842\u6843\u6844\u6845\u6846\u6847\u6848\u6849\u684a\u684b\u684c\u684d\u684e\u684f\u6850\u6851\u6852\u6853\u6854\u6855\u6856\u6857\u6858\u6859\u685a\u685b\u685c\u685d\u685e\u685f\u6860\u6861\u6862\u6863\u6864\u6865\u6866\u6867\u6868\u6869\u686a\u686b\u686c\u686d\u686e\u686f\u6870\u6871\u6872\u6873\u6874\u6875\u6876\u6877\u6878\u6879\u687a\u687b\u687c\u687d\u687e\u687f\u6880\u6881\u6882\u6883\u6884\u6885\u6886\u6887\u6888\u6889\u688a\u688b\u688c\u688d\u688e\u688f\u6890\u6891\u6892\u6893\u6894\u6895\u6896\u6897\u6898\u6899\u689a\u689b\u689c\u689d\u689e\u689f\u68a0\u68a1\u68a2\u68a3\u68a4\u68a5\u68a6\u68a7\u68a8\u68a9\u68aa\u68ab\u68ac\u68ad\u68ae\u68af\u68b0\u68b1\u68b2\u68b3\u68b4\u68b5\u68b6\u68b7\u68b8\u68b9\u68ba\u68bb\u68bc\u68bd\u68be\u68bf\u68c0\u68c1\u68c2\u68c3\u68c4\u68c5\u68c6\u68c7\u68c8\u68c9\u68ca\u68cb\u68cc\u68cd\u68ce\u68cf\u68d0\u68d1\u68d2\u68d3\u68d4\u68d5\u68d6\u68d7\u68d8\u68d9\u68da\u68db\u68dc\u68dd\u68de\u68df\u68e0\u68e1\u68e2\u68e3\u68e4\u68e5\u68e6\u68e7\u68e8\u68e9\u68ea\u68eb\u68ec\u68ed\u68ee\u68ef\u68f0\u68f1\u68f2\u68f3\u68f4\u68f5\u68f6\u68f7\u68f8\u68f9\u68fa\u68fb\u68fc\u68fd\u68fe\u68ff\u6900\u6901\u6902\u6903\u6904\u6905\u6906\u6907\u6908\u6909\u690a\u690b\u690c\u690d\u690e\u690f\u6910\u6911\u6912\u6913\u6914\u6915\u6916\u6917\u6918\u6919\u691a\u691b\u691c\u691d\u691e\u691f\u6920\u6921\u6922\u6923\u6924\u6925\u6926\u6927\u6928\u6929\u692a\u692b\u692c\u692d\u692e\u692f\u6930\u6931\u6932\u6933\u6934\u6935\u6936\u6937\u6938\u6939\u693a\u693b\u693c\u693d\u693e\u693f\u6940\u6941\u6942\u6943\u6944\u6945\u6946\u6947\u6948\u6949\u694a\u694b\u694c\u694d\u694e\u694f\u6950\u6951\u6952\u6953\u6954\u6955\u6956\u6957\u6958\u6959\u695a\u695b\u695c\u695d\u695e\u695f\u6960\u6961\u6962\u6963\u6964\u6965\u6966\u6967\u6968\u6969\u696a\u696b\u696c\u696d\u696e\u696f\u6970\u6971\u6972\u6973\u6974\u6975\u6976\u6977\u6978\u6979\u697a\u697b\u697c\u697d\u697e\u697f\u6980\u6981\u6982\u6983\u6984\u6985\u6986\u6987\u6988\u6989\u698a\u698b\u698c\u698d\u698e\u698f\u6990\u6991\u6992\u6993\u6994\u6995\u6996\u6997\u6998\u6999\u699a\u699b\u699c\u699d\u699e\u699f\u69a0\u69a1\u69a2\u69a3\u69a4\u69a5\u69a6\u69a7\u69a8\u69a9\u69aa\u69ab\u69ac\u69ad\u69ae\u69af\u69b0\u69b1\u69b2\u69b3\u69b4\u69b5\u69b6\u69b7\u69b8\u69b9\u69ba\u69bb\u69bc\u69bd\u69be\u69bf\u69c0\u69c1\u69c2\u69c3\u69c4\u69c5\u69c6\u69c7\u69c8\u69c9\u69ca\u69cb\u69cc\u69cd\u69ce\u69cf\u69d0\u69d1\u69d2\u69d3\u69d4\u69d5\u69d6\u69d7\u69d8\u69d9\u69da\u69db\u69dc\u69dd\u69de\u69df\u69e0\u69e1\u69e2\u69e3\u69e4\u69e5\u69e6\u69e7\u69e8\u69e9\u69ea\u69eb\u69ec\u69ed\u69ee\u69ef\u69f0\u69f1\u69f2\u69f3\u69f4\u69f5\u69f6\u69f7\u69f8\u69f9\u69fa\u69fb\u69fc\u69fd\u69fe\u69ff\u6a00\u6a01\u6a02\u6a03\u6a04\u6a05\u6a06\u6a07\u6a08\u6a09\u6a0a\u6a0b\u6a0c\u6a0d\u6a0e\u6a0f\u6a10\u6a11\u6a12\u6a13\u6a14\u6a15\u6a16\u6a17\u6a18\u6a19\u6a1a\u6a1b\u6a1c\u6a1d\u6a1e\u6a1f\u6a20\u6a21\u6a22\u6a23\u6a24\u6a25\u6a26\u6a27\u6a28\u6a29\u6a2a\u6a2b\u6a2c\u6a2d\u6a2e\u6a2f\u6a30\u6a31\u6a32\u6a33\u6a34\u6a35\u6a36\u6a37\u6a38\u6a39\u6a3a\u6a3b\u6a3c\u6a3d\u6a3e\u6a3f\u6a40\u6a41\u6a42\u6a43\u6a44\u6a45\u6a46\u6a47\u6a48\u6a49\u6a4a\u6a4b\u6a4c\u6a4d\u6a4e\u6a4f\u6a50\u6a51\u6a52\u6a53\u6a54\u6a55\u6a56\u6a57\u6a58\u6a59\u6a5a\u6a5b\u6a5c\u6a5d\u6a5e\u6a5f\u6a60\u6a61\u6a62\u6a63\u6a64\u6a65\u6a66\u6a67\u6a68\u6a69\u6a6a\u6a6b\u6a6c\u6a6d\u6a6e\u6a6f\u6a70\u6a71\u6a72\u6a73\u6a74\u6a75\u6a76\u6a77\u6a78\u6a79\u6a7a\u6a7b\u6a7c\u6a7d\u6a7e\u6a7f\u6a80\u6a81\u6a82\u6a83\u6a84\u6a85\u6a86\u6a87\u6a88\u6a89\u6a8a\u6a8b\u6a8c\u6a8d\u6a8e\u6a8f\u6a90\u6a91\u6a92\u6a93\u6a94\u6a95\u6a96\u6a97\u6a98\u6a99\u6a9a\u6a9b\u6a9c\u6a9d\u6a9e\u6a9f\u6aa0\u6aa1\u6aa2\u6aa3\u6aa4\u6aa5\u6aa6\u6aa7\u6aa8\u6aa9\u6aaa\u6aab\u6aac\u6aad\u6aae\u6aaf\u6ab0\u6ab1\u6ab2\u6ab3\u6ab4\u6ab5\u6ab6\u6ab7\u6ab8\u6ab9\u6aba\u6abb\u6abc\u6abd\u6abe\u6abf\u6ac0\u6ac1\u6ac2\u6ac3\u6ac4\u6ac5\u6ac6\u6ac7\u6ac8\u6ac9\u6aca\u6acb\u6acc\u6acd\u6ace\u6acf\u6ad0\u6ad1\u6ad2\u6ad3\u6ad4\u6ad5\u6ad6\u6ad7\u6ad8\u6ad9\u6ada\u6adb\u6adc\u6add\u6ade\u6adf\u6ae0\u6ae1\u6ae2\u6ae3\u6ae4\u6ae5\u6ae6\u6ae7\u6ae8\u6ae9\u6aea\u6aeb\u6aec\u6aed\u6aee\u6aef\u6af0\u6af1\u6af2\u6af3\u6af4\u6af5\u6af6\u6af7\u6af8\u6af9\u6afa\u6afb\u6afc\u6afd\u6afe\u6aff\u6b00\u6b01\u6b02\u6b03\u6b04\u6b05\u6b06\u6b07\u6b08\u6b09\u6b0a\u6b0b\u6b0c\u6b0d\u6b0e\u6b0f\u6b10\u6b11\u6b12\u6b13\u6b14\u6b15\u6b16\u6b17\u6b18\u6b19\u6b1a\u6b1b\u6b1c\u6b1d\u6b1e\u6b1f\u6b20\u6b21\u6b22\u6b23\u6b24\u6b25\u6b26\u6b27\u6b28\u6b29\u6b2a\u6b2b\u6b2c\u6b2d\u6b2e\u6b2f\u6b30\u6b31\u6b32\u6b33\u6b34\u6b35\u6b36\u6b37\u6b38\u6b39\u6b3a\u6b3b\u6b3c\u6b3d\u6b3e\u6b3f\u6b40\u6b41\u6b42\u6b43\u6b44\u6b45\u6b46\u6b47\u6b48\u6b49\u6b4a\u6b4b\u6b4c\u6b4d\u6b4e\u6b4f\u6b50\u6b51\u6b52\u6b53\u6b54\u6b55\u6b56\u6b57\u6b58\u6b59\u6b5a\u6b5b\u6b5c\u6b5d\u6b5e\u6b5f\u6b60\u6b61\u6b62\u6b63\u6b64\u6b65\u6b66\u6b67\u6b68\u6b69\u6b6a\u6b6b\u6b6c\u6b6d\u6b6e\u6b6f\u6b70\u6b71\u6b72\u6b73\u6b74\u6b75\u6b76\u6b77\u6b78\u6b79\u6b7a\u6b7b\u6b7c\u6b7d\u6b7e\u6b7f\u6b80\u6b81\u6b82\u6b83\u6b84\u6b85\u6b86\u6b87\u6b88\u6b89\u6b8a\u6b8b\u6b8c\u6b8d\u6b8e\u6b8f\u6b90\u6b91\u6b92\u6b93\u6b94\u6b95\u6b96\u6b97\u6b98\u6b99\u6b9a\u6b9b\u6b9c\u6b9d\u6b9e\u6b9f\u6ba0\u6ba1\u6ba2\u6ba3\u6ba4\u6ba5\u6ba6\u6ba7\u6ba8\u6ba9\u6baa\u6bab\u6bac\u6bad\u6bae\u6baf\u6bb0\u6bb1\u6bb2\u6bb3\u6bb4\u6bb5\u6bb6\u6bb7\u6bb8\u6bb9\u6bba\u6bbb\u6bbc\u6bbd\u6bbe\u6bbf\u6bc0\u6bc1\u6bc2\u6bc3\u6bc4\u6bc5\u6bc6\u6bc7\u6bc8\u6bc9\u6bca\u6bcb\u6bcc\u6bcd\u6bce\u6bcf\u6bd0\u6bd1\u6bd2\u6bd3\u6bd4\u6bd5\u6bd6\u6bd7\u6bd8\u6bd9\u6bda\u6bdb\u6bdc\u6bdd\u6bde\u6bdf\u6be0\u6be1\u6be2\u6be3\u6be4\u6be5\u6be6\u6be7\u6be8\u6be9\u6bea\u6beb\u6bec\u6bed\u6bee\u6bef\u6bf0\u6bf1\u6bf2\u6bf3\u6bf4\u6bf5\u6bf6\u6bf7\u6bf8\u6bf9\u6bfa\u6bfb\u6bfc\u6bfd\u6bfe\u6bff\u6c00\u6c01\u6c02\u6c03\u6c04\u6c05\u6c06\u6c07\u6c08\u6c09\u6c0a\u6c0b\u6c0c\u6c0d\u6c0e\u6c0f\u6c10\u6c11\u6c12\u6c13\u6c14\u6c15\u6c16\u6c17\u6c18\u6c19\u6c1a\u6c1b\u6c1c\u6c1d\u6c1e\u6c1f\u6c20\u6c21\u6c22\u6c23\u6c24\u6c25\u6c26\u6c27\u6c28\u6c29\u6c2a\u6c2b\u6c2c\u6c2d\u6c2e\u6c2f\u6c30\u6c31\u6c32\u6c33\u6c34\u6c35\u6c36\u6c37\u6c38\u6c39\u6c3a\u6c3b\u6c3c\u6c3d\u6c3e\u6c3f\u6c40\u6c41\u6c42\u6c43\u6c44\u6c45\u6c46\u6c47\u6c48\u6c49\u6c4a\u6c4b\u6c4c\u6c4d\u6c4e\u6c4f\u6c50\u6c51\u6c52\u6c53\u6c54\u6c55\u6c56\u6c57\u6c58\u6c59\u6c5a\u6c5b\u6c5c\u6c5d\u6c5e\u6c5f\u6c60\u6c61\u6c62\u6c63\u6c64\u6c65\u6c66\u6c67\u6c68\u6c69\u6c6a\u6c6b\u6c6c\u6c6d\u6c6e\u6c6f\u6c70\u6c71\u6c72\u6c73\u6c74\u6c75\u6c76\u6c77\u6c78\u6c79\u6c7a\u6c7b\u6c7c\u6c7d\u6c7e\u6c7f\u6c80\u6c81\u6c82\u6c83\u6c84\u6c85\u6c86\u6c87\u6c88\u6c89\u6c8a\u6c8b\u6c8c\u6c8d\u6c8e\u6c8f\u6c90\u6c91\u6c92\u6c93\u6c94\u6c95\u6c96\u6c97\u6c98\u6c99\u6c9a\u6c9b\u6c9c\u6c9d\u6c9e\u6c9f\u6ca0\u6ca1\u6ca2\u6ca3\u6ca4\u6ca5\u6ca6\u6ca7\u6ca8\u6ca9\u6caa\u6cab\u6cac\u6cad\u6cae\u6caf\u6cb0\u6cb1\u6cb2\u6cb3\u6cb4\u6cb5\u6cb6\u6cb7\u6cb8\u6cb9\u6cba\u6cbb\u6cbc\u6cbd\u6cbe\u6cbf\u6cc0\u6cc1\u6cc2\u6cc3\u6cc4\u6cc5\u6cc6\u6cc7\u6cc8\u6cc9\u6cca\u6ccb\u6ccc\u6ccd\u6cce\u6ccf\u6cd0\u6cd1\u6cd2\u6cd3\u6cd4\u6cd5\u6cd6\u6cd7\u6cd8\u6cd9\u6cda\u6cdb\u6cdc\u6cdd\u6cde\u6cdf\u6ce0\u6ce1\u6ce2\u6ce3\u6ce4\u6ce5\u6ce6\u6ce7\u6ce8\u6ce9\u6cea\u6ceb\u6cec\u6ced\u6cee\u6cef\u6cf0\u6cf1\u6cf2\u6cf3\u6cf4\u6cf5\u6cf6\u6cf7\u6cf8\u6cf9\u6cfa\u6cfb\u6cfc\u6cfd\u6cfe\u6cff\u6d00\u6d01\u6d02\u6d03\u6d04\u6d05\u6d06\u6d07\u6d08\u6d09\u6d0a\u6d0b\u6d0c\u6d0d\u6d0e\u6d0f\u6d10\u6d11\u6d12\u6d13\u6d14\u6d15\u6d16\u6d17\u6d18\u6d19\u6d1a\u6d1b\u6d1c\u6d1d\u6d1e\u6d1f\u6d20\u6d21\u6d22\u6d23\u6d24\u6d25\u6d26\u6d27\u6d28\u6d29\u6d2a\u6d2b\u6d2c\u6d2d\u6d2e\u6d2f\u6d30\u6d31\u6d32\u6d33\u6d34\u6d35\u6d36\u6d37\u6d38\u6d39\u6d3a\u6d3b\u6d3c\u6d3d\u6d3e\u6d3f\u6d40\u6d41\u6d42\u6d43\u6d44\u6d45\u6d46\u6d47\u6d48\u6d49\u6d4a\u6d4b\u6d4c\u6d4d\u6d4e\u6d4f\u6d50\u6d51\u6d52\u6d53\u6d54\u6d55\u6d56\u6d57\u6d58\u6d59\u6d5a\u6d5b\u6d5c\u6d5d\u6d5e\u6d5f\u6d60\u6d61\u6d62\u6d63\u6d64\u6d65\u6d66\u6d67\u6d68\u6d69\u6d6a\u6d6b\u6d6c\u6d6d\u6d6e\u6d6f\u6d70\u6d71\u6d72\u6d73\u6d74\u6d75\u6d76\u6d77\u6d78\u6d79\u6d7a\u6d7b\u6d7c\u6d7d\u6d7e\u6d7f\u6d80\u6d81\u6d82\u6d83\u6d84\u6d85\u6d86\u6d87\u6d88\u6d89\u6d8a\u6d8b\u6d8c\u6d8d\u6d8e\u6d8f\u6d90\u6d91\u6d92\u6d93\u6d94\u6d95\u6d96\u6d97\u6d98\u6d99\u6d9a\u6d9b\u6d9c\u6d9d\u6d9e\u6d9f\u6da0\u6da1\u6da2\u6da3\u6da4\u6da5\u6da6\u6da7\u6da8\u6da9\u6daa\u6dab\u6dac\u6dad\u6dae\u6daf\u6db0\u6db1\u6db2\u6db3\u6db4\u6db5\u6db6\u6db7\u6db8\u6db9\u6dba\u6dbb\u6dbc\u6dbd\u6dbe\u6dbf\u6dc0\u6dc1\u6dc2\u6dc3\u6dc4\u6dc5\u6dc6\u6dc7\u6dc8\u6dc9\u6dca\u6dcb\u6dcc\u6dcd\u6dce\u6dcf\u6dd0\u6dd1\u6dd2\u6dd3\u6dd4\u6dd5\u6dd6\u6dd7\u6dd8\u6dd9\u6dda\u6ddb\u6ddc\u6ddd\u6dde\u6ddf\u6de0\u6de1\u6de2\u6de3\u6de4\u6de5\u6de6\u6de7\u6de8\u6de9\u6dea\u6deb\u6dec\u6ded\u6dee\u6def\u6df0\u6df1\u6df2\u6df3\u6df4\u6df5\u6df6\u6df7\u6df8\u6df9\u6dfa\u6dfb\u6dfc\u6dfd\u6dfe\u6dff\u6e00\u6e01\u6e02\u6e03\u6e04\u6e05\u6e06\u6e07\u6e08\u6e09\u6e0a\u6e0b\u6e0c\u6e0d\u6e0e\u6e0f\u6e10\u6e11\u6e12\u6e13\u6e14\u6e15\u6e16\u6e17\u6e18\u6e19\u6e1a\u6e1b\u6e1c\u6e1d\u6e1e\u6e1f\u6e20\u6e21\u6e22\u6e23\u6e24\u6e25\u6e26\u6e27\u6e28\u6e29\u6e2a\u6e2b\u6e2c\u6e2d\u6e2e\u6e2f\u6e30\u6e31\u6e32\u6e33\u6e34\u6e35\u6e36\u6e37\u6e38\u6e39\u6e3a\u6e3b\u6e3c\u6e3d\u6e3e\u6e3f\u6e40\u6e41\u6e42\u6e43\u6e44\u6e45\u6e46\u6e47\u6e48\u6e49\u6e4a\u6e4b\u6e4c\u6e4d\u6e4e\u6e4f\u6e50\u6e51\u6e52\u6e53\u6e54\u6e55\u6e56\u6e57\u6e58\u6e59\u6e5a\u6e5b\u6e5c\u6e5d\u6e5e\u6e5f\u6e60\u6e61\u6e62\u6e63\u6e64\u6e65\u6e66\u6e67\u6e68\u6e69\u6e6a\u6e6b\u6e6c\u6e6d\u6e6e\u6e6f\u6e70\u6e71\u6e72\u6e73\u6e74\u6e75\u6e76\u6e77\u6e78\u6e79\u6e7a\u6e7b\u6e7c\u6e7d\u6e7e\u6e7f\u6e80\u6e81\u6e82\u6e83\u6e84\u6e85\u6e86\u6e87\u6e88\u6e89\u6e8a\u6e8b\u6e8c\u6e8d\u6e8e\u6e8f\u6e90\u6e91\u6e92\u6e93\u6e94\u6e95\u6e96\u6e97\u6e98\u6e99\u6e9a\u6e9b\u6e9c\u6e9d\u6e9e\u6e9f\u6ea0\u6ea1\u6ea2\u6ea3\u6ea4\u6ea5\u6ea6\u6ea7\u6ea8\u6ea9\u6eaa\u6eab\u6eac\u6ead\u6eae\u6eaf\u6eb0\u6eb1\u6eb2\u6eb3\u6eb4\u6eb5\u6eb6\u6eb7\u6eb8\u6eb9\u6eba\u6ebb\u6ebc\u6ebd\u6ebe\u6ebf\u6ec0\u6ec1\u6ec2\u6ec3\u6ec4\u6ec5\u6ec6\u6ec7\u6ec8\u6ec9\u6eca\u6ecb\u6ecc\u6ecd\u6ece\u6ecf\u6ed0\u6ed1\u6ed2\u6ed3\u6ed4\u6ed5\u6ed6\u6ed7\u6ed8\u6ed9\u6eda\u6edb\u6edc\u6edd\u6ede\u6edf\u6ee0\u6ee1\u6ee2\u6ee3\u6ee4\u6ee5\u6ee6\u6ee7\u6ee8\u6ee9\u6eea\u6eeb\u6eec\u6eed\u6eee\u6eef\u6ef0\u6ef1\u6ef2\u6ef3\u6ef4\u6ef5\u6ef6\u6ef7\u6ef8\u6ef9\u6efa\u6efb\u6efc\u6efd\u6efe\u6eff\u6f00\u6f01\u6f02\u6f03\u6f04\u6f05\u6f06\u6f07\u6f08\u6f09\u6f0a\u6f0b\u6f0c\u6f0d\u6f0e\u6f0f\u6f10\u6f11\u6f12\u6f13\u6f14\u6f15\u6f16\u6f17\u6f18\u6f19\u6f1a\u6f1b\u6f1c\u6f1d\u6f1e\u6f1f\u6f20\u6f21\u6f22\u6f23\u6f24\u6f25\u6f26\u6f27\u6f28\u6f29\u6f2a\u6f2b\u6f2c\u6f2d\u6f2e\u6f2f\u6f30\u6f31\u6f32\u6f33\u6f34\u6f35\u6f36\u6f37\u6f38\u6f39\u6f3a\u6f3b\u6f3c\u6f3d\u6f3e\u6f3f\u6f40\u6f41\u6f42\u6f43\u6f44\u6f45\u6f46\u6f47\u6f48\u6f49\u6f4a\u6f4b\u6f4c\u6f4d\u6f4e\u6f4f\u6f50\u6f51\u6f52\u6f53\u6f54\u6f55\u6f56\u6f57\u6f58\u6f59\u6f5a\u6f5b\u6f5c\u6f5d\u6f5e\u6f5f\u6f60\u6f61\u6f62\u6f63\u6f64\u6f65\u6f66\u6f67\u6f68\u6f69\u6f6a\u6f6b\u6f6c\u6f6d\u6f6e\u6f6f\u6f70\u6f71\u6f72\u6f73\u6f74\u6f75\u6f76\u6f77\u6f78\u6f79\u6f7a\u6f7b\u6f7c\u6f7d\u6f7e\u6f7f\u6f80\u6f81\u6f82\u6f83\u6f84\u6f85\u6f86\u6f87\u6f88\u6f89\u6f8a\u6f8b\u6f8c\u6f8d\u6f8e\u6f8f\u6f90\u6f91\u6f92\u6f93\u6f94\u6f95\u6f96\u6f97\u6f98\u6f99\u6f9a\u6f9b\u6f9c\u6f9d\u6f9e\u6f9f\u6fa0\u6fa1\u6fa2\u6fa3\u6fa4\u6fa5\u6fa6\u6fa7\u6fa8\u6fa9\u6faa\u6fab\u6fac\u6fad\u6fae\u6faf\u6fb0\u6fb1\u6fb2\u6fb3\u6fb4\u6fb5\u6fb6\u6fb7\u6fb8\u6fb9\u6fba\u6fbb\u6fbc\u6fbd\u6fbe\u6fbf\u6fc0\u6fc1\u6fc2\u6fc3\u6fc4\u6fc5\u6fc6\u6fc7\u6fc8\u6fc9\u6fca\u6fcb\u6fcc\u6fcd\u6fce\u6fcf\u6fd0\u6fd1\u6fd2\u6fd3\u6fd4\u6fd5\u6fd6\u6fd7\u6fd8\u6fd9\u6fda\u6fdb\u6fdc\u6fdd\u6fde\u6fdf\u6fe0\u6fe1\u6fe2\u6fe3\u6fe4\u6fe5\u6fe6\u6fe7\u6fe8\u6fe9\u6fea\u6feb\u6fec\u6fed\u6fee\u6fef\u6ff0\u6ff1\u6ff2\u6ff3\u6ff4\u6ff5\u6ff6\u6ff7\u6ff8\u6ff9\u6ffa\u6ffb\u6ffc\u6ffd\u6ffe\u6fff\u7000\u7001\u7002\u7003\u7004\u7005\u7006\u7007\u7008\u7009\u700a\u700b\u700c\u700d\u700e\u700f\u7010\u7011\u7012\u7013\u7014\u7015\u7016\u7017\u7018\u7019\u701a\u701b\u701c\u701d\u701e\u701f\u7020\u7021\u7022\u7023\u7024\u7025\u7026\u7027\u7028\u7029\u702a\u702b\u702c\u702d\u702e\u702f\u7030\u7031\u7032\u7033\u7034\u7035\u7036\u7037\u7038\u7039\u703a\u703b\u703c\u703d\u703e\u703f\u7040\u7041\u7042\u7043\u7044\u7045\u7046\u7047\u7048\u7049\u704a\u704b\u704c\u704d\u704e\u704f\u7050\u7051\u7052\u7053\u7054\u7055\u7056\u7057\u7058\u7059\u705a\u705b\u705c\u705d\u705e\u705f\u7060\u7061\u7062\u7063\u7064\u7065\u7066\u7067\u7068\u7069\u706a\u706b\u706c\u706d\u706e\u706f\u7070\u7071\u7072\u7073\u7074\u7075\u7076\u7077\u7078\u7079\u707a\u707b\u707c\u707d\u707e\u707f\u7080\u7081\u7082\u7083\u7084\u7085\u7086\u7087\u7088\u7089\u708a\u708b\u708c\u708d\u708e\u708f\u7090\u7091\u7092\u7093\u7094\u7095\u7096\u7097\u7098\u7099\u709a\u709b\u709c\u709d\u709e\u709f\u70a0\u70a1\u70a2\u70a3\u70a4\u70a5\u70a6\u70a7\u70a8\u70a9\u70aa\u70ab\u70ac\u70ad\u70ae\u70af\u70b0\u70b1\u70b2\u70b3\u70b4\u70b5\u70b6\u70b7\u70b8\u70b9\u70ba\u70bb\u70bc\u70bd\u70be\u70bf\u70c0\u70c1\u70c2\u70c3\u70c4\u70c5\u70c6\u70c7\u70c8\u70c9\u70ca\u70cb\u70cc\u70cd\u70ce\u70cf\u70d0\u70d1\u70d2\u70d3\u70d4\u70d5\u70d6\u70d7\u70d8\u70d9\u70da\u70db\u70dc\u70dd\u70de\u70df\u70e0\u70e1\u70e2\u70e3\u70e4\u70e5\u70e6\u70e7\u70e8\u70e9\u70ea\u70eb\u70ec\u70ed\u70ee\u70ef\u70f0\u70f1\u70f2\u70f3\u70f4\u70f5\u70f6\u70f7\u70f8\u70f9\u70fa\u70fb\u70fc\u70fd\u70fe\u70ff\u7100\u7101\u7102\u7103\u7104\u7105\u7106\u7107\u7108\u7109\u710a\u710b\u710c\u710d\u710e\u710f\u7110\u7111\u7112\u7113\u7114\u7115\u7116\u7117\u7118\u7119\u711a\u711b\u711c\u711d\u711e\u711f\u7120\u7121\u7122\u7123\u7124\u7125\u7126\u7127\u7128\u7129\u712a\u712b\u712c\u712d\u712e\u712f\u7130\u7131\u7132\u7133\u7134\u7135\u7136\u7137\u7138\u7139\u713a\u713b\u713c\u713d\u713e\u713f\u7140\u7141\u7142\u7143\u7144\u7145\u7146\u7147\u7148\u7149\u714a\u714b\u714c\u714d\u714e\u714f\u7150\u7151\u7152\u7153\u7154\u7155\u7156\u7157\u7158\u7159\u715a\u715b\u715c\u715d\u715e\u715f\u7160\u7161\u7162\u7163\u7164\u7165\u7166\u7167\u7168\u7169\u716a\u716b\u716c\u716d\u716e\u716f\u7170\u7171\u7172\u7173\u7174\u7175\u7176\u7177\u7178\u7179\u717a\u717b\u717c\u717d\u717e\u717f\u7180\u7181\u7182\u7183\u7184\u7185\u7186\u7187\u7188\u7189\u718a\u718b\u718c\u718d\u718e\u718f\u7190\u7191\u7192\u7193\u7194\u7195\u7196\u7197\u7198\u7199\u719a\u719b\u719c\u719d\u719e\u719f\u71a0\u71a1\u71a2\u71a3\u71a4\u71a5\u71a6\u71a7\u71a8\u71a9\u71aa\u71ab\u71ac\u71ad\u71ae\u71af\u71b0\u71b1\u71b2\u71b3\u71b4\u71b5\u71b6\u71b7\u71b8\u71b9\u71ba\u71bb\u71bc\u71bd\u71be\u71bf\u71c0\u71c1\u71c2\u71c3\u71c4\u71c5\u71c6\u71c7\u71c8\u71c9\u71ca\u71cb\u71cc\u71cd\u71ce\u71cf\u71d0\u71d1\u71d2\u71d3\u71d4\u71d5\u71d6\u71d7\u71d8\u71d9\u71da\u71db\u71dc\u71dd\u71de\u71df\u71e0\u71e1\u71e2\u71e3\u71e4\u71e5\u71e6\u71e7\u71e8\u71e9\u71ea\u71eb\u71ec\u71ed\u71ee\u71ef\u71f0\u71f1\u71f2\u71f3\u71f4\u71f5\u71f6\u71f7\u71f8\u71f9\u71fa\u71fb\u71fc\u71fd\u71fe\u71ff\u7200\u7201\u7202\u7203\u7204\u7205\u7206\u7207\u7208\u7209\u720a\u720b\u720c\u720d\u720e\u720f\u7210\u7211\u7212\u7213\u7214\u7215\u7216\u7217\u7218\u7219\u721a\u721b\u721c\u721d\u721e\u721f\u7220\u7221\u7222\u7223\u7224\u7225\u7226\u7227\u7228\u7229\u722a\u722b\u722c\u722d\u722e\u722f\u7230\u7231\u7232\u7233\u7234\u7235\u7236\u7237\u7238\u7239\u723a\u723b\u723c\u723d\u723e\u723f\u7240\u7241\u7242\u7243\u7244\u7245\u7246\u7247\u7248\u7249\u724a\u724b\u724c\u724d\u724e\u724f\u7250\u7251\u7252\u7253\u7254\u7255\u7256\u7257\u7258\u7259\u725a\u725b\u725c\u725d\u725e\u725f\u7260\u7261\u7262\u7263\u7264\u7265\u7266\u7267\u7268\u7269\u726a\u726b\u726c\u726d\u726e\u726f\u7270\u7271\u7272\u7273\u7274\u7275\u7276\u7277\u7278\u7279\u727a\u727b\u727c\u727d\u727e\u727f\u7280\u7281\u7282\u7283\u7284\u7285\u7286\u7287\u7288\u7289\u728a\u728b\u728c\u728d\u728e\u728f\u7290\u7291\u7292\u7293\u7294\u7295\u7296\u7297\u7298\u7299\u729a\u729b\u729c\u729d\u729e\u729f\u72a0\u72a1\u72a2\u72a3\u72a4\u72a5\u72a6\u72a7\u72a8\u72a9\u72aa\u72ab\u72ac\u72ad\u72ae\u72af\u72b0\u72b1\u72b2\u72b3\u72b4\u72b5\u72b6\u72b7\u72b8\u72b9\u72ba\u72bb\u72bc\u72bd\u72be\u72bf\u72c0\u72c1\u72c2\u72c3\u72c4\u72c5\u72c6\u72c7\u72c8\u72c9\u72ca\u72cb\u72cc\u72cd\u72ce\u72cf\u72d0\u72d1\u72d2\u72d3\u72d4\u72d5\u72d6\u72d7\u72d8\u72d9\u72da\u72db\u72dc\u72dd\u72de\u72df\u72e0\u72e1\u72e2\u72e3\u72e4\u72e5\u72e6\u72e7\u72e8\u72e9\u72ea\u72eb\u72ec\u72ed\u72ee\u72ef\u72f0\u72f1\u72f2\u72f3\u72f4\u72f5\u72f6\u72f7\u72f8\u72f9\u72fa\u72fb\u72fc\u72fd\u72fe\u72ff\u7300\u7301\u7302\u7303\u7304\u7305\u7306\u7307\u7308\u7309\u730a\u730b\u730c\u730d\u730e\u730f\u7310\u7311\u7312\u7313\u7314\u7315\u7316\u7317\u7318\u7319\u731a\u731b\u731c\u731d\u731e\u731f\u7320\u7321\u7322\u7323\u7324\u7325\u7326\u7327\u7328\u7329\u732a\u732b\u732c\u732d\u732e\u732f\u7330\u7331\u7332\u7333\u7334\u7335\u7336\u7337\u7338\u7339\u733a\u733b\u733c\u733d\u733e\u733f\u7340\u7341\u7342\u7343\u7344\u7345\u7346\u7347\u7348\u7349\u734a\u734b\u734c\u734d\u734e\u734f\u7350\u7351\u7352\u7353\u7354\u7355\u7356\u7357\u7358\u7359\u735a\u735b\u735c\u735d\u735e\u735f\u7360\u7361\u7362\u7363\u7364\u7365\u7366\u7367\u7368\u7369\u736a\u736b\u736c\u736d\u736e\u736f\u7370\u7371\u7372\u7373\u7374\u7375\u7376\u7377\u7378\u7379\u737a\u737b\u737c\u737d\u737e\u737f\u7380\u7381\u7382\u7383\u7384\u7385\u7386\u7387\u7388\u7389\u738a\u738b\u738c\u738d\u738e\u738f\u7390\u7391\u7392\u7393\u7394\u7395\u7396\u7397\u7398\u7399\u739a\u739b\u739c\u739d\u739e\u739f\u73a0\u73a1\u73a2\u73a3\u73a4\u73a5\u73a6\u73a7\u73a8\u73a9\u73aa\u73ab\u73ac\u73ad\u73ae\u73af\u73b0\u73b1\u73b2\u73b3\u73b4\u73b5\u73b6\u73b7\u73b8\u73b9\u73ba\u73bb\u73bc\u73bd\u73be\u73bf\u73c0\u73c1\u73c2\u73c3\u73c4\u73c5\u73c6\u73c7\u73c8\u73c9\u73ca\u73cb\u73cc\u73cd\u73ce\u73cf\u73d0\u73d1\u73d2\u73d3\u73d4\u73d5\u73d6\u73d7\u73d8\u73d9\u73da\u73db\u73dc\u73dd\u73de\u73df\u73e0\u73e1\u73e2\u73e3\u73e4\u73e5\u73e6\u73e7\u73e8\u73e9\u73ea\u73eb\u73ec\u73ed\u73ee\u73ef\u73f0\u73f1\u73f2\u73f3\u73f4\u73f5\u73f6\u73f7\u73f8\u73f9\u73fa\u73fb\u73fc\u73fd\u73fe\u73ff\u7400\u7401\u7402\u7403\u7404\u7405\u7406\u7407\u7408\u7409\u740a\u740b\u740c\u740d\u740e\u740f\u7410\u7411\u7412\u7413\u7414\u7415\u7416\u7417\u7418\u7419\u741a\u741b\u741c\u741d\u741e\u741f\u7420\u7421\u7422\u7423\u7424\u7425\u7426\u7427\u7428\u7429\u742a\u742b\u742c\u742d\u742e\u742f\u7430\u7431\u7432\u7433\u7434\u7435\u7436\u7437\u7438\u7439\u743a\u743b\u743c\u743d\u743e\u743f\u7440\u7441\u7442\u7443\u7444\u7445\u7446\u7447\u7448\u7449\u744a\u744b\u744c\u744d\u744e\u744f\u7450\u7451\u7452\u7453\u7454\u7455\u7456\u7457\u7458\u7459\u745a\u745b\u745c\u745d\u745e\u745f\u7460\u7461\u7462\u7463\u7464\u7465\u7466\u7467\u7468\u7469\u746a\u746b\u746c\u746d\u746e\u746f\u7470\u7471\u7472\u7473\u7474\u7475\u7476\u7477\u7478\u7479\u747a\u747b\u747c\u747d\u747e\u747f\u7480\u7481\u7482\u7483\u7484\u7485\u7486\u7487\u7488\u7489\u748a\u748b\u748c\u748d\u748e\u748f\u7490\u7491\u7492\u7493\u7494\u7495\u7496\u7497\u7498\u7499\u749a\u749b\u749c\u749d\u749e\u749f\u74a0\u74a1\u74a2\u74a3\u74a4\u74a5\u74a6\u74a7\u74a8\u74a9\u74aa\u74ab\u74ac\u74ad\u74ae\u74af\u74b0\u74b1\u74b2\u74b3\u74b4\u74b5\u74b6\u74b7\u74b8\u74b9\u74ba\u74bb\u74bc\u74bd\u74be\u74bf\u74c0\u74c1\u74c2\u74c3\u74c4\u74c5\u74c6\u74c7\u74c8\u74c9\u74ca\u74cb\u74cc\u74cd\u74ce\u74cf\u74d0\u74d1\u74d2\u74d3\u74d4\u74d5\u74d6\u74d7\u74d8\u74d9\u74da\u74db\u74dc\u74dd\u74de\u74df\u74e0\u74e1\u74e2\u74e3\u74e4\u74e5\u74e6\u74e7\u74e8\u74e9\u74ea\u74eb\u74ec\u74ed\u74ee\u74ef\u74f0\u74f1\u74f2\u74f3\u74f4\u74f5\u74f6\u74f7\u74f8\u74f9\u74fa\u74fb\u74fc\u74fd\u74fe\u74ff\u7500\u7501\u7502\u7503\u7504\u7505\u7506\u7507\u7508\u7509\u750a\u750b\u750c\u750d\u750e\u750f\u7510\u7511\u7512\u7513\u7514\u7515\u7516\u7517\u7518\u7519\u751a\u751b\u751c\u751d\u751e\u751f\u7520\u7521\u7522\u7523\u7524\u7525\u7526\u7527\u7528\u7529\u752a\u752b\u752c\u752d\u752e\u752f\u7530\u7531\u7532\u7533\u7534\u7535\u7536\u7537\u7538\u7539\u753a\u753b\u753c\u753d\u753e\u753f\u7540\u7541\u7542\u7543\u7544\u7545\u7546\u7547\u7548\u7549\u754a\u754b\u754c\u754d\u754e\u754f\u7550\u7551\u7552\u7553\u7554\u7555\u7556\u7557\u7558\u7559\u755a\u755b\u755c\u755d\u755e\u755f\u7560\u7561\u7562\u7563\u7564\u7565\u7566\u7567\u7568\u7569\u756a\u756b\u756c\u756d\u756e\u756f\u7570\u7571\u7572\u7573\u7574\u7575\u7576\u7577\u7578\u7579\u757a\u757b\u757c\u757d\u757e\u757f\u7580\u7581\u7582\u7583\u7584\u7585\u7586\u7587\u7588\u7589\u758a\u758b\u758c\u758d\u758e\u758f\u7590\u7591\u7592\u7593\u7594\u7595\u7596\u7597\u7598\u7599\u759a\u759b\u759c\u759d\u759e\u759f\u75a0\u75a1\u75a2\u75a3\u75a4\u75a5\u75a6\u75a7\u75a8\u75a9\u75aa\u75ab\u75ac\u75ad\u75ae\u75af\u75b0\u75b1\u75b2\u75b3\u75b4\u75b5\u75b6\u75b7\u75b8\u75b9\u75ba\u75bb\u75bc\u75bd\u75be\u75bf\u75c0\u75c1\u75c2\u75c3\u75c4\u75c5\u75c6\u75c7\u75c8\u75c9\u75ca\u75cb\u75cc\u75cd\u75ce\u75cf\u75d0\u75d1\u75d2\u75d3\u75d4\u75d5\u75d6\u75d7\u75d8\u75d9\u75da\u75db\u75dc\u75dd\u75de\u75df\u75e0\u75e1\u75e2\u75e3\u75e4\u75e5\u75e6\u75e7\u75e8\u75e9\u75ea\u75eb\u75ec\u75ed\u75ee\u75ef\u75f0\u75f1\u75f2\u75f3\u75f4\u75f5\u75f6\u75f7\u75f8\u75f9\u75fa\u75fb\u75fc\u75fd\u75fe\u75ff\u7600\u7601\u7602\u7603\u7604\u7605\u7606\u7607\u7608\u7609\u760a\u760b\u760c\u760d\u760e\u760f\u7610\u7611\u7612\u7613\u7614\u7615\u7616\u7617\u7618\u7619\u761a\u761b\u761c\u761d\u761e\u761f\u7620\u7621\u7622\u7623\u7624\u7625\u7626\u7627\u7628\u7629\u762a\u762b\u762c\u762d\u762e\u762f\u7630\u7631\u7632\u7633\u7634\u7635\u7636\u7637\u7638\u7639\u763a\u763b\u763c\u763d\u763e\u763f\u7640\u7641\u7642\u7643\u7644\u7645\u7646\u7647\u7648\u7649\u764a\u764b\u764c\u764d\u764e\u764f\u7650\u7651\u7652\u7653\u7654\u7655\u7656\u7657\u7658\u7659\u765a\u765b\u765c\u765d\u765e\u765f\u7660\u7661\u7662\u7663\u7664\u7665\u7666\u7667\u7668\u7669\u766a\u766b\u766c\u766d\u766e\u766f\u7670\u7671\u7672\u7673\u7674\u7675\u7676\u7677\u7678\u7679\u767a\u767b\u767c\u767d\u767e\u767f\u7680\u7681\u7682\u7683\u7684\u7685\u7686\u7687\u7688\u7689\u768a\u768b\u768c\u768d\u768e\u768f\u7690\u7691\u7692\u7693\u7694\u7695\u7696\u7697\u7698\u7699\u769a\u769b\u769c\u769d\u769e\u769f\u76a0\u76a1\u76a2\u76a3\u76a4\u76a5\u76a6\u76a7\u76a8\u76a9\u76aa\u76ab\u76ac\u76ad\u76ae\u76af\u76b0\u76b1\u76b2\u76b3\u76b4\u76b5\u76b6\u76b7\u76b8\u76b9\u76ba\u76bb\u76bc\u76bd\u76be\u76bf\u76c0\u76c1\u76c2\u76c3\u76c4\u76c5\u76c6\u76c7\u76c8\u76c9\u76ca\u76cb\u76cc\u76cd\u76ce\u76cf\u76d0\u76d1\u76d2\u76d3\u76d4\u76d5\u76d6\u76d7\u76d8\u76d9\u76da\u76db\u76dc\u76dd\u76de\u76df\u76e0\u76e1\u76e2\u76e3\u76e4\u76e5\u76e6\u76e7\u76e8\u76e9\u76ea\u76eb\u76ec\u76ed\u76ee\u76ef\u76f0\u76f1\u76f2\u76f3\u76f4\u76f5\u76f6\u76f7\u76f8\u76f9\u76fa\u76fb\u76fc\u76fd\u76fe\u76ff\u7700\u7701\u7702\u7703\u7704\u7705\u7706\u7707\u7708\u7709\u770a\u770b\u770c\u770d\u770e\u770f\u7710\u7711\u7712\u7713\u7714\u7715\u7716\u7717\u7718\u7719\u771a\u771b\u771c\u771d\u771e\u771f\u7720\u7721\u7722\u7723\u7724\u7725\u7726\u7727\u7728\u7729\u772a\u772b\u772c\u772d\u772e\u772f\u7730\u7731\u7732\u7733\u7734\u7735\u7736\u7737\u7738\u7739\u773a\u773b\u773c\u773d\u773e\u773f\u7740\u7741\u7742\u7743\u7744\u7745\u7746\u7747\u7748\u7749\u774a\u774b\u774c\u774d\u774e\u774f\u7750\u7751\u7752\u7753\u7754\u7755\u7756\u7757\u7758\u7759\u775a\u775b\u775c\u775d\u775e\u775f\u7760\u7761\u7762\u7763\u7764\u7765\u7766\u7767\u7768\u7769\u776a\u776b\u776c\u776d\u776e\u776f\u7770\u7771\u7772\u7773\u7774\u7775\u7776\u7777\u7778\u7779\u777a\u777b\u777c\u777d\u777e\u777f\u7780\u7781\u7782\u7783\u7784\u7785\u7786\u7787\u7788\u7789\u778a\u778b\u778c\u778d\u778e\u778f\u7790\u7791\u7792\u7793\u7794\u7795\u7796\u7797\u7798\u7799\u779a\u779b\u779c\u779d\u779e\u779f\u77a0\u77a1\u77a2\u77a3\u77a4\u77a5\u77a6\u77a7\u77a8\u77a9\u77aa\u77ab\u77ac\u77ad\u77ae\u77af\u77b0\u77b1\u77b2\u77b3\u77b4\u77b5\u77b6\u77b7\u77b8\u77b9\u77ba\u77bb\u77bc\u77bd\u77be\u77bf\u77c0\u77c1\u77c2\u77c3\u77c4\u77c5\u77c6\u77c7\u77c8\u77c9\u77ca\u77cb\u77cc\u77cd\u77ce\u77cf\u77d0\u77d1\u77d2\u77d3\u77d4\u77d5\u77d6\u77d7\u77d8\u77d9\u77da\u77db\u77dc\u77dd\u77de\u77df\u77e0\u77e1\u77e2\u77e3\u77e4\u77e5\u77e6\u77e7\u77e8\u77e9\u77ea\u77eb\u77ec\u77ed\u77ee\u77ef\u77f0\u77f1\u77f2\u77f3\u77f4\u77f5\u77f6\u77f7\u77f8\u77f9\u77fa\u77fb\u77fc\u77fd\u77fe\u77ff\u7800\u7801\u7802\u7803\u7804\u7805\u7806\u7807\u7808\u7809\u780a\u780b\u780c\u780d\u780e\u780f\u7810\u7811\u7812\u7813\u7814\u7815\u7816\u7817\u7818\u7819\u781a\u781b\u781c\u781d\u781e\u781f\u7820\u7821\u7822\u7823\u7824\u7825\u7826\u7827\u7828\u7829\u782a\u782b\u782c\u782d\u782e\u782f\u7830\u7831\u7832\u7833\u7834\u7835\u7836\u7837\u7838\u7839\u783a\u783b\u783c\u783d\u783e\u783f\u7840\u7841\u7842\u7843\u7844\u7845\u7846\u7847\u7848\u7849\u784a\u784b\u784c\u784d\u784e\u784f\u7850\u7851\u7852\u7853\u7854\u7855\u7856\u7857\u7858\u7859\u785a\u785b\u785c\u785d\u785e\u785f\u7860\u7861\u7862\u7863\u7864\u7865\u7866\u7867\u7868\u7869\u786a\u786b\u786c\u786d\u786e\u786f\u7870\u7871\u7872\u7873\u7874\u7875\u7876\u7877\u7878\u7879\u787a\u787b\u787c\u787d\u787e\u787f\u7880\u7881\u7882\u7883\u7884\u7885\u7886\u7887\u7888\u7889\u788a\u788b\u788c\u788d\u788e\u788f\u7890\u7891\u7892\u7893\u7894\u7895\u7896\u7897\u7898\u7899\u789a\u789b\u789c\u789d\u789e\u789f\u78a0\u78a1\u78a2\u78a3\u78a4\u78a5\u78a6\u78a7\u78a8\u78a9\u78aa\u78ab\u78ac\u78ad\u78ae\u78af\u78b0\u78b1\u78b2\u78b3\u78b4\u78b5\u78b6\u78b7\u78b8\u78b9\u78ba\u78bb\u78bc\u78bd\u78be\u78bf\u78c0\u78c1\u78c2\u78c3\u78c4\u78c5\u78c6\u78c7\u78c8\u78c9\u78ca\u78cb\u78cc\u78cd\u78ce\u78cf\u78d0\u78d1\u78d2\u78d3\u78d4\u78d5\u78d6\u78d7\u78d8\u78d9\u78da\u78db\u78dc\u78dd\u78de\u78df\u78e0\u78e1\u78e2\u78e3\u78e4\u78e5\u78e6\u78e7\u78e8\u78e9\u78ea\u78eb\u78ec\u78ed\u78ee\u78ef\u78f0\u78f1\u78f2\u78f3\u78f4\u78f5\u78f6\u78f7\u78f8\u78f9\u78fa\u78fb\u78fc\u78fd\u78fe\u78ff\u7900\u7901\u7902\u7903\u7904\u7905\u7906\u7907\u7908\u7909\u790a\u790b\u790c\u790d\u790e\u790f\u7910\u7911\u7912\u7913\u7914\u7915\u7916\u7917\u7918\u7919\u791a\u791b\u791c\u791d\u791e\u791f\u7920\u7921\u7922\u7923\u7924\u7925\u7926\u7927\u7928\u7929\u792a\u792b\u792c\u792d\u792e\u792f\u7930\u7931\u7932\u7933\u7934\u7935\u7936\u7937\u7938\u7939\u793a\u793b\u793c\u793d\u793e\u793f\u7940\u7941\u7942\u7943\u7944\u7945\u7946\u7947\u7948\u7949\u794a\u794b\u794c\u794d\u794e\u794f\u7950\u7951\u7952\u7953\u7954\u7955\u7956\u7957\u7958\u7959\u795a\u795b\u795c\u795d\u795e\u795f\u7960\u7961\u7962\u7963\u7964\u7965\u7966\u7967\u7968\u7969\u796a\u796b\u796c\u796d\u796e\u796f\u7970\u7971\u7972\u7973\u7974\u7975\u7976\u7977\u7978\u7979\u797a\u797b\u797c\u797d\u797e\u797f\u7980\u7981\u7982\u7983\u7984\u7985\u7986\u7987\u7988\u7989\u798a\u798b\u798c\u798d\u798e\u798f\u7990\u7991\u7992\u7993\u7994\u7995\u7996\u7997\u7998\u7999\u799a\u799b\u799c\u799d\u799e\u799f\u79a0\u79a1\u79a2\u79a3\u79a4\u79a5\u79a6\u79a7\u79a8\u79a9\u79aa\u79ab\u79ac\u79ad\u79ae\u79af\u79b0\u79b1\u79b2\u79b3\u79b4\u79b5\u79b6\u79b7\u79b8\u79b9\u79ba\u79bb\u79bc\u79bd\u79be\u79bf\u79c0\u79c1\u79c2\u79c3\u79c4\u79c5\u79c6\u79c7\u79c8\u79c9\u79ca\u79cb\u79cc\u79cd\u79ce\u79cf\u79d0\u79d1\u79d2\u79d3\u79d4\u79d5\u79d6\u79d7\u79d8\u79d9\u79da\u79db\u79dc\u79dd\u79de\u79df\u79e0\u79e1\u79e2\u79e3\u79e4\u79e5\u79e6\u79e7\u79e8\u79e9\u79ea\u79eb\u79ec\u79ed\u79ee\u79ef\u79f0\u79f1\u79f2\u79f3\u79f4\u79f5\u79f6\u79f7\u79f8\u79f9\u79fa\u79fb\u79fc\u79fd\u79fe\u79ff\u7a00\u7a01\u7a02\u7a03\u7a04\u7a05\u7a06\u7a07\u7a08\u7a09\u7a0a\u7a0b\u7a0c\u7a0d\u7a0e\u7a0f\u7a10\u7a11\u7a12\u7a13\u7a14\u7a15\u7a16\u7a17\u7a18\u7a19\u7a1a\u7a1b\u7a1c\u7a1d\u7a1e\u7a1f\u7a20\u7a21\u7a22\u7a23\u7a24\u7a25\u7a26\u7a27\u7a28\u7a29\u7a2a\u7a2b\u7a2c\u7a2d\u7a2e\u7a2f\u7a30\u7a31\u7a32\u7a33\u7a34\u7a35\u7a36\u7a37\u7a38\u7a39\u7a3a\u7a3b\u7a3c\u7a3d\u7a3e\u7a3f\u7a40\u7a41\u7a42\u7a43\u7a44\u7a45\u7a46\u7a47\u7a48\u7a49\u7a4a\u7a4b\u7a4c\u7a4d\u7a4e\u7a4f\u7a50\u7a51\u7a52\u7a53\u7a54\u7a55\u7a56\u7a57\u7a58\u7a59\u7a5a\u7a5b\u7a5c\u7a5d\u7a5e\u7a5f\u7a60\u7a61\u7a62\u7a63\u7a64\u7a65\u7a66\u7a67\u7a68\u7a69\u7a6a\u7a6b\u7a6c\u7a6d\u7a6e\u7a6f\u7a70\u7a71\u7a72\u7a73\u7a74\u7a75\u7a76\u7a77\u7a78\u7a79\u7a7a\u7a7b\u7a7c\u7a7d\u7a7e\u7a7f\u7a80\u7a81\u7a82\u7a83\u7a84\u7a85\u7a86\u7a87\u7a88\u7a89\u7a8a\u7a8b\u7a8c\u7a8d\u7a8e\u7a8f\u7a90\u7a91\u7a92\u7a93\u7a94\u7a95\u7a96\u7a97\u7a98\u7a99\u7a9a\u7a9b\u7a9c\u7a9d\u7a9e\u7a9f\u7aa0\u7aa1\u7aa2\u7aa3\u7aa4\u7aa5\u7aa6\u7aa7\u7aa8\u7aa9\u7aaa\u7aab\u7aac\u7aad\u7aae\u7aaf\u7ab0\u7ab1\u7ab2\u7ab3\u7ab4\u7ab5\u7ab6\u7ab7\u7ab8\u7ab9\u7aba\u7abb\u7abc\u7abd\u7abe\u7abf\u7ac0\u7ac1\u7ac2\u7ac3\u7ac4\u7ac5\u7ac6\u7ac7\u7ac8\u7ac9\u7aca\u7acb\u7acc\u7acd\u7ace\u7acf\u7ad0\u7ad1\u7ad2\u7ad3\u7ad4\u7ad5\u7ad6\u7ad7\u7ad8\u7ad9\u7ada\u7adb\u7adc\u7add\u7ade\u7adf\u7ae0\u7ae1\u7ae2\u7ae3\u7ae4\u7ae5\u7ae6\u7ae7\u7ae8\u7ae9\u7aea\u7aeb\u7aec\u7aed\u7aee\u7aef\u7af0\u7af1\u7af2\u7af3\u7af4\u7af5\u7af6\u7af7\u7af8\u7af9\u7afa\u7afb\u7afc\u7afd\u7afe\u7aff\u7b00\u7b01\u7b02\u7b03\u7b04\u7b05\u7b06\u7b07\u7b08\u7b09\u7b0a\u7b0b\u7b0c\u7b0d\u7b0e\u7b0f\u7b10\u7b11\u7b12\u7b13\u7b14\u7b15\u7b16\u7b17\u7b18\u7b19\u7b1a\u7b1b\u7b1c\u7b1d\u7b1e\u7b1f\u7b20\u7b21\u7b22\u7b23\u7b24\u7b25\u7b26\u7b27\u7b28\u7b29\u7b2a\u7b2b\u7b2c\u7b2d\u7b2e\u7b2f\u7b30\u7b31\u7b32\u7b33\u7b34\u7b35\u7b36\u7b37\u7b38\u7b39\u7b3a\u7b3b\u7b3c\u7b3d\u7b3e\u7b3f\u7b40\u7b41\u7b42\u7b43\u7b44\u7b45\u7b46\u7b47\u7b48\u7b49\u7b4a\u7b4b\u7b4c\u7b4d\u7b4e\u7b4f\u7b50\u7b51\u7b52\u7b53\u7b54\u7b55\u7b56\u7b57\u7b58\u7b59\u7b5a\u7b5b\u7b5c\u7b5d\u7b5e\u7b5f\u7b60\u7b61\u7b62\u7b63\u7b64\u7b65\u7b66\u7b67\u7b68\u7b69\u7b6a\u7b6b\u7b6c\u7b6d\u7b6e\u7b6f\u7b70\u7b71\u7b72\u7b73\u7b74\u7b75\u7b76\u7b77\u7b78\u7b79\u7b7a\u7b7b\u7b7c\u7b7d\u7b7e\u7b7f\u7b80\u7b81\u7b82\u7b83\u7b84\u7b85\u7b86\u7b87\u7b88\u7b89\u7b8a\u7b8b\u7b8c\u7b8d\u7b8e\u7b8f\u7b90\u7b91\u7b92\u7b93\u7b94\u7b95\u7b96\u7b97\u7b98\u7b99\u7b9a\u7b9b\u7b9c\u7b9d\u7b9e\u7b9f\u7ba0\u7ba1\u7ba2\u7ba3\u7ba4\u7ba5\u7ba6\u7ba7\u7ba8\u7ba9\u7baa\u7bab\u7bac\u7bad\u7bae\u7baf\u7bb0\u7bb1\u7bb2\u7bb3\u7bb4\u7bb5\u7bb6\u7bb7\u7bb8\u7bb9\u7bba\u7bbb\u7bbc\u7bbd\u7bbe\u7bbf\u7bc0\u7bc1\u7bc2\u7bc3\u7bc4\u7bc5\u7bc6\u7bc7\u7bc8\u7bc9\u7bca\u7bcb\u7bcc\u7bcd\u7bce\u7bcf\u7bd0\u7bd1\u7bd2\u7bd3\u7bd4\u7bd5\u7bd6\u7bd7\u7bd8\u7bd9\u7bda\u7bdb\u7bdc\u7bdd\u7bde\u7bdf\u7be0\u7be1\u7be2\u7be3\u7be4\u7be5\u7be6\u7be7\u7be8\u7be9\u7bea\u7beb\u7bec\u7bed\u7bee\u7bef\u7bf0\u7bf1\u7bf2\u7bf3\u7bf4\u7bf5\u7bf6\u7bf7\u7bf8\u7bf9\u7bfa\u7bfb\u7bfc\u7bfd\u7bfe\u7bff\u7c00\u7c01\u7c02\u7c03\u7c04\u7c05\u7c06\u7c07\u7c08\u7c09\u7c0a\u7c0b\u7c0c\u7c0d\u7c0e\u7c0f\u7c10\u7c11\u7c12\u7c13\u7c14\u7c15\u7c16\u7c17\u7c18\u7c19\u7c1a\u7c1b\u7c1c\u7c1d\u7c1e\u7c1f\u7c20\u7c21\u7c22\u7c23\u7c24\u7c25\u7c26\u7c27\u7c28\u7c29\u7c2a\u7c2b\u7c2c\u7c2d\u7c2e\u7c2f\u7c30\u7c31\u7c32\u7c33\u7c34\u7c35\u7c36\u7c37\u7c38\u7c39\u7c3a\u7c3b\u7c3c\u7c3d\u7c3e\u7c3f\u7c40\u7c41\u7c42\u7c43\u7c44\u7c45\u7c46\u7c47\u7c48\u7c49\u7c4a\u7c4b\u7c4c\u7c4d\u7c4e\u7c4f\u7c50\u7c51\u7c52\u7c53\u7c54\u7c55\u7c56\u7c57\u7c58\u7c59\u7c5a\u7c5b\u7c5c\u7c5d\u7c5e\u7c5f\u7c60\u7c61\u7c62\u7c63\u7c64\u7c65\u7c66\u7c67\u7c68\u7c69\u7c6a\u7c6b\u7c6c\u7c6d\u7c6e\u7c6f\u7c70\u7c71\u7c72\u7c73\u7c74\u7c75\u7c76\u7c77\u7c78\u7c79\u7c7a\u7c7b\u7c7c\u7c7d\u7c7e\u7c7f\u7c80\u7c81\u7c82\u7c83\u7c84\u7c85\u7c86\u7c87\u7c88\u7c89\u7c8a\u7c8b\u7c8c\u7c8d\u7c8e\u7c8f\u7c90\u7c91\u7c92\u7c93\u7c94\u7c95\u7c96\u7c97\u7c98\u7c99\u7c9a\u7c9b\u7c9c\u7c9d\u7c9e\u7c9f\u7ca0\u7ca1\u7ca2\u7ca3\u7ca4\u7ca5\u7ca6\u7ca7\u7ca8\u7ca9\u7caa\u7cab\u7cac\u7cad\u7cae\u7caf\u7cb0\u7cb1\u7cb2\u7cb3\u7cb4\u7cb5\u7cb6\u7cb7\u7cb8\u7cb9\u7cba\u7cbb\u7cbc\u7cbd\u7cbe\u7cbf\u7cc0\u7cc1\u7cc2\u7cc3\u7cc4\u7cc5\u7cc6\u7cc7\u7cc8\u7cc9\u7cca\u7ccb\u7ccc\u7ccd\u7cce\u7ccf\u7cd0\u7cd1\u7cd2\u7cd3\u7cd4\u7cd5\u7cd6\u7cd7\u7cd8\u7cd9\u7cda\u7cdb\u7cdc\u7cdd\u7cde\u7cdf\u7ce0\u7ce1\u7ce2\u7ce3\u7ce4\u7ce5\u7ce6\u7ce7\u7ce8\u7ce9\u7cea\u7ceb\u7cec\u7ced\u7cee\u7cef\u7cf0\u7cf1\u7cf2\u7cf3\u7cf4\u7cf5\u7cf6\u7cf7\u7cf8\u7cf9\u7cfa\u7cfb\u7cfc\u7cfd\u7cfe\u7cff\u7d00\u7d01\u7d02\u7d03\u7d04\u7d05\u7d06\u7d07\u7d08\u7d09\u7d0a\u7d0b\u7d0c\u7d0d\u7d0e\u7d0f\u7d10\u7d11\u7d12\u7d13\u7d14\u7d15\u7d16\u7d17\u7d18\u7d19\u7d1a\u7d1b\u7d1c\u7d1d\u7d1e\u7d1f\u7d20\u7d21\u7d22\u7d23\u7d24\u7d25\u7d26\u7d27\u7d28\u7d29\u7d2a\u7d2b\u7d2c\u7d2d\u7d2e\u7d2f\u7d30\u7d31\u7d32\u7d33\u7d34\u7d35\u7d36\u7d37\u7d38\u7d39\u7d3a\u7d3b\u7d3c\u7d3d\u7d3e\u7d3f\u7d40\u7d41\u7d42\u7d43\u7d44\u7d45\u7d46\u7d47\u7d48\u7d49\u7d4a\u7d4b\u7d4c\u7d4d\u7d4e\u7d4f\u7d50\u7d51\u7d52\u7d53\u7d54\u7d55\u7d56\u7d57\u7d58\u7d59\u7d5a\u7d5b\u7d5c\u7d5d\u7d5e\u7d5f\u7d60\u7d61\u7d62\u7d63\u7d64\u7d65\u7d66\u7d67\u7d68\u7d69\u7d6a\u7d6b\u7d6c\u7d6d\u7d6e\u7d6f\u7d70\u7d71\u7d72\u7d73\u7d74\u7d75\u7d76\u7d77\u7d78\u7d79\u7d7a\u7d7b\u7d7c\u7d7d\u7d7e\u7d7f\u7d80\u7d81\u7d82\u7d83\u7d84\u7d85\u7d86\u7d87\u7d88\u7d89\u7d8a\u7d8b\u7d8c\u7d8d\u7d8e\u7d8f\u7d90\u7d91\u7d92\u7d93\u7d94\u7d95\u7d96\u7d97\u7d98\u7d99\u7d9a\u7d9b\u7d9c\u7d9d\u7d9e\u7d9f\u7da0\u7da1\u7da2\u7da3\u7da4\u7da5\u7da6\u7da7\u7da8\u7da9\u7daa\u7dab\u7dac\u7dad\u7dae\u7daf\u7db0\u7db1\u7db2\u7db3\u7db4\u7db5\u7db6\u7db7\u7db8\u7db9\u7dba\u7dbb\u7dbc\u7dbd\u7dbe\u7dbf\u7dc0\u7dc1\u7dc2\u7dc3\u7dc4\u7dc5\u7dc6\u7dc7\u7dc8\u7dc9\u7dca\u7dcb\u7dcc\u7dcd\u7dce\u7dcf\u7dd0\u7dd1\u7dd2\u7dd3\u7dd4\u7dd5\u7dd6\u7dd7\u7dd8\u7dd9\u7dda\u7ddb\u7ddc\u7ddd\u7dde\u7ddf\u7de0\u7de1\u7de2\u7de3\u7de4\u7de5\u7de6\u7de7\u7de8\u7de9\u7dea\u7deb\u7dec\u7ded\u7dee\u7def\u7df0\u7df1\u7df2\u7df3\u7df4\u7df5\u7df6\u7df7\u7df8\u7df9\u7dfa\u7dfb\u7dfc\u7dfd\u7dfe\u7dff\u7e00\u7e01\u7e02\u7e03\u7e04\u7e05\u7e06\u7e07\u7e08\u7e09\u7e0a\u7e0b\u7e0c\u7e0d\u7e0e\u7e0f\u7e10\u7e11\u7e12\u7e13\u7e14\u7e15\u7e16\u7e17\u7e18\u7e19\u7e1a\u7e1b\u7e1c\u7e1d\u7e1e\u7e1f\u7e20\u7e21\u7e22\u7e23\u7e24\u7e25\u7e26\u7e27\u7e28\u7e29\u7e2a\u7e2b\u7e2c\u7e2d\u7e2e\u7e2f\u7e30\u7e31\u7e32\u7e33\u7e34\u7e35\u7e36\u7e37\u7e38\u7e39\u7e3a\u7e3b\u7e3c\u7e3d\u7e3e\u7e3f\u7e40\u7e41\u7e42\u7e43\u7e44\u7e45\u7e46\u7e47\u7e48\u7e49\u7e4a\u7e4b\u7e4c\u7e4d\u7e4e\u7e4f\u7e50\u7e51\u7e52\u7e53\u7e54\u7e55\u7e56\u7e57\u7e58\u7e59\u7e5a\u7e5b\u7e5c\u7e5d\u7e5e\u7e5f\u7e60\u7e61\u7e62\u7e63\u7e64\u7e65\u7e66\u7e67\u7e68\u7e69\u7e6a\u7e6b\u7e6c\u7e6d\u7e6e\u7e6f\u7e70\u7e71\u7e72\u7e73\u7e74\u7e75\u7e76\u7e77\u7e78\u7e79\u7e7a\u7e7b\u7e7c\u7e7d\u7e7e\u7e7f\u7e80\u7e81\u7e82\u7e83\u7e84\u7e85\u7e86\u7e87\u7e88\u7e89\u7e8a\u7e8b\u7e8c\u7e8d\u7e8e\u7e8f\u7e90\u7e91\u7e92\u7e93\u7e94\u7e95\u7e96\u7e97\u7e98\u7e99\u7e9a\u7e9b\u7e9c\u7e9d\u7e9e\u7e9f\u7ea0\u7ea1\u7ea2\u7ea3\u7ea4\u7ea5\u7ea6\u7ea7\u7ea8\u7ea9\u7eaa\u7eab\u7eac\u7ead\u7eae\u7eaf\u7eb0\u7eb1\u7eb2\u7eb3\u7eb4\u7eb5\u7eb6\u7eb7\u7eb8\u7eb9\u7eba\u7ebb\u7ebc\u7ebd\u7ebe\u7ebf\u7ec0\u7ec1\u7ec2\u7ec3\u7ec4\u7ec5\u7ec6\u7ec7\u7ec8\u7ec9\u7eca\u7ecb\u7ecc\u7ecd\u7ece\u7ecf\u7ed0\u7ed1\u7ed2\u7ed3\u7ed4\u7ed5\u7ed6\u7ed7\u7ed8\u7ed9\u7eda\u7edb\u7edc\u7edd\u7ede\u7edf\u7ee0\u7ee1\u7ee2\u7ee3\u7ee4\u7ee5\u7ee6\u7ee7\u7ee8\u7ee9\u7eea\u7eeb\u7eec\u7eed\u7eee\u7eef\u7ef0\u7ef1\u7ef2\u7ef3\u7ef4\u7ef5\u7ef6\u7ef7\u7ef8\u7ef9\u7efa\u7efb\u7efc\u7efd\u7efe\u7eff\u7f00\u7f01\u7f02\u7f03\u7f04\u7f05\u7f06\u7f07\u7f08\u7f09\u7f0a\u7f0b\u7f0c\u7f0d\u7f0e\u7f0f\u7f10\u7f11\u7f12\u7f13\u7f14\u7f15\u7f16\u7f17\u7f18\u7f19\u7f1a\u7f1b\u7f1c\u7f1d\u7f1e\u7f1f\u7f20\u7f21\u7f22\u7f23\u7f24\u7f25\u7f26\u7f27\u7f28\u7f29\u7f2a\u7f2b\u7f2c\u7f2d\u7f2e\u7f2f\u7f30\u7f31\u7f32\u7f33\u7f34\u7f35\u7f36\u7f37\u7f38\u7f39\u7f3a\u7f3b\u7f3c\u7f3d\u7f3e\u7f3f\u7f40\u7f41\u7f42\u7f43\u7f44\u7f45\u7f46\u7f47\u7f48\u7f49\u7f4a\u7f4b\u7f4c\u7f4d\u7f4e\u7f4f\u7f50\u7f51\u7f52\u7f53\u7f54\u7f55\u7f56\u7f57\u7f58\u7f59\u7f5a\u7f5b\u7f5c\u7f5d\u7f5e\u7f5f\u7f60\u7f61\u7f62\u7f63\u7f64\u7f65\u7f66\u7f67\u7f68\u7f69\u7f6a\u7f6b\u7f6c\u7f6d\u7f6e\u7f6f\u7f70\u7f71\u7f72\u7f73\u7f74\u7f75\u7f76\u7f77\u7f78\u7f79\u7f7a\u7f7b\u7f7c\u7f7d\u7f7e\u7f7f\u7f80\u7f81\u7f82\u7f83\u7f84\u7f85\u7f86\u7f87\u7f88\u7f89\u7f8a\u7f8b\u7f8c\u7f8d\u7f8e\u7f8f\u7f90\u7f91\u7f92\u7f93\u7f94\u7f95\u7f96\u7f97\u7f98\u7f99\u7f9a\u7f9b\u7f9c\u7f9d\u7f9e\u7f9f\u7fa0\u7fa1\u7fa2\u7fa3\u7fa4\u7fa5\u7fa6\u7fa7\u7fa8\u7fa9\u7faa\u7fab\u7fac\u7fad\u7fae\u7faf\u7fb0\u7fb1\u7fb2\u7fb3\u7fb4\u7fb5\u7fb6\u7fb7\u7fb8\u7fb9\u7fba\u7fbb\u7fbc\u7fbd\u7fbe\u7fbf\u7fc0\u7fc1\u7fc2\u7fc3\u7fc4\u7fc5\u7fc6\u7fc7\u7fc8\u7fc9\u7fca\u7fcb\u7fcc\u7fcd\u7fce\u7fcf\u7fd0\u7fd1\u7fd2\u7fd3\u7fd4\u7fd5\u7fd6\u7fd7\u7fd8\u7fd9\u7fda\u7fdb\u7fdc\u7fdd\u7fde\u7fdf\u7fe0\u7fe1\u7fe2\u7fe3\u7fe4\u7fe5\u7fe6\u7fe7\u7fe8\u7fe9\u7fea\u7feb\u7fec\u7fed\u7fee\u7fef\u7ff0\u7ff1\u7ff2\u7ff3\u7ff4\u7ff5\u7ff6\u7ff7\u7ff8\u7ff9\u7ffa\u7ffb\u7ffc\u7ffd\u7ffe\u7fff\u8000\u8001\u8002\u8003\u8004\u8005\u8006\u8007\u8008\u8009\u800a\u800b\u800c\u800d\u800e\u800f\u8010\u8011\u8012\u8013\u8014\u8015\u8016\u8017\u8018\u8019\u801a\u801b\u801c\u801d\u801e\u801f\u8020\u8021\u8022\u8023\u8024\u8025\u8026\u8027\u8028\u8029\u802a\u802b\u802c\u802d\u802e\u802f\u8030\u8031\u8032\u8033\u8034\u8035\u8036\u8037\u8038\u8039\u803a\u803b\u803c\u803d\u803e\u803f\u8040\u8041\u8042\u8043\u8044\u8045\u8046\u8047\u8048\u8049\u804a\u804b\u804c\u804d\u804e\u804f\u8050\u8051\u8052\u8053\u8054\u8055\u8056\u8057\u8058\u8059\u805a\u805b\u805c\u805d\u805e\u805f\u8060\u8061\u8062\u8063\u8064\u8065\u8066\u8067\u8068\u8069\u806a\u806b\u806c\u806d\u806e\u806f\u8070\u8071\u8072\u8073\u8074\u8075\u8076\u8077\u8078\u8079\u807a\u807b\u807c\u807d\u807e\u807f\u8080\u8081\u8082\u8083\u8084\u8085\u8086\u8087\u8088\u8089\u808a\u808b\u808c\u808d\u808e\u808f\u8090\u8091\u8092\u8093\u8094\u8095\u8096\u8097\u8098\u8099\u809a\u809b\u809c\u809d\u809e\u809f\u80a0\u80a1\u80a2\u80a3\u80a4\u80a5\u80a6\u80a7\u80a8\u80a9\u80aa\u80ab\u80ac\u80ad\u80ae\u80af\u80b0\u80b1\u80b2\u80b3\u80b4\u80b5\u80b6\u80b7\u80b8\u80b9\u80ba\u80bb\u80bc\u80bd\u80be\u80bf\u80c0\u80c1\u80c2\u80c3\u80c4\u80c5\u80c6\u80c7\u80c8\u80c9\u80ca\u80cb\u80cc\u80cd\u80ce\u80cf\u80d0\u80d1\u80d2\u80d3\u80d4\u80d5\u80d6\u80d7\u80d8\u80d9\u80da\u80db\u80dc\u80dd\u80de\u80df\u80e0\u80e1\u80e2\u80e3\u80e4\u80e5\u80e6\u80e7\u80e8\u80e9\u80ea\u80eb\u80ec\u80ed\u80ee\u80ef\u80f0\u80f1\u80f2\u80f3\u80f4\u80f5\u80f6\u80f7\u80f8\u80f9\u80fa\u80fb\u80fc\u80fd\u80fe\u80ff\u8100\u8101\u8102\u8103\u8104\u8105\u8106\u8107\u8108\u8109\u810a\u810b\u810c\u810d\u810e\u810f\u8110\u8111\u8112\u8113\u8114\u8115\u8116\u8117\u8118\u8119\u811a\u811b\u811c\u811d\u811e\u811f\u8120\u8121\u8122\u8123\u8124\u8125\u8126\u8127\u8128\u8129\u812a\u812b\u812c\u812d\u812e\u812f\u8130\u8131\u8132\u8133\u8134\u8135\u8136\u8137\u8138\u8139\u813a\u813b\u813c\u813d\u813e\u813f\u8140\u8141\u8142\u8143\u8144\u8145\u8146\u8147\u8148\u8149\u814a\u814b\u814c\u814d\u814e\u814f\u8150\u8151\u8152\u8153\u8154\u8155\u8156\u8157\u8158\u8159\u815a\u815b\u815c\u815d\u815e\u815f\u8160\u8161\u8162\u8163\u8164\u8165\u8166\u8167\u8168\u8169\u816a\u816b\u816c\u816d\u816e\u816f\u8170\u8171\u8172\u8173\u8174\u8175\u8176\u8177\u8178\u8179\u817a\u817b\u817c\u817d\u817e\u817f\u8180\u8181\u8182\u8183\u8184\u8185\u8186\u8187\u8188\u8189\u818a\u818b\u818c\u818d\u818e\u818f\u8190\u8191\u8192\u8193\u8194\u8195\u8196\u8197\u8198\u8199\u819a\u819b\u819c\u819d\u819e\u819f\u81a0\u81a1\u81a2\u81a3\u81a4\u81a5\u81a6\u81a7\u81a8\u81a9\u81aa\u81ab\u81ac\u81ad\u81ae\u81af\u81b0\u81b1\u81b2\u81b3\u81b4\u81b5\u81b6\u81b7\u81b8\u81b9\u81ba\u81bb\u81bc\u81bd\u81be\u81bf\u81c0\u81c1\u81c2\u81c3\u81c4\u81c5\u81c6\u81c7\u81c8\u81c9\u81ca\u81cb\u81cc\u81cd\u81ce\u81cf\u81d0\u81d1\u81d2\u81d3\u81d4\u81d5\u81d6\u81d7\u81d8\u81d9\u81da\u81db\u81dc\u81dd\u81de\u81df\u81e0\u81e1\u81e2\u81e3\u81e4\u81e5\u81e6\u81e7\u81e8\u81e9\u81ea\u81eb\u81ec\u81ed\u81ee\u81ef\u81f0\u81f1\u81f2\u81f3\u81f4\u81f5\u81f6\u81f7\u81f8\u81f9\u81fa\u81fb\u81fc\u81fd\u81fe\u81ff\u8200\u8201\u8202\u8203\u8204\u8205\u8206\u8207\u8208\u8209\u820a\u820b\u820c\u820d\u820e\u820f\u8210\u8211\u8212\u8213\u8214\u8215\u8216\u8217\u8218\u8219\u821a\u821b\u821c\u821d\u821e\u821f\u8220\u8221\u8222\u8223\u8224\u8225\u8226\u8227\u8228\u8229\u822a\u822b\u822c\u822d\u822e\u822f\u8230\u8231\u8232\u8233\u8234\u8235\u8236\u8237\u8238\u8239\u823a\u823b\u823c\u823d\u823e\u823f\u8240\u8241\u8242\u8243\u8244\u8245\u8246\u8247\u8248\u8249\u824a\u824b\u824c\u824d\u824e\u824f\u8250\u8251\u8252\u8253\u8254\u8255\u8256\u8257\u8258\u8259\u825a\u825b\u825c\u825d\u825e\u825f\u8260\u8261\u8262\u8263\u8264\u8265\u8266\u8267\u8268\u8269\u826a\u826b\u826c\u826d\u826e\u826f\u8270\u8271\u8272\u8273\u8274\u8275\u8276\u8277\u8278\u8279\u827a\u827b\u827c\u827d\u827e\u827f\u8280\u8281\u8282\u8283\u8284\u8285\u8286\u8287\u8288\u8289\u828a\u828b\u828c\u828d\u828e\u828f\u8290\u8291\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299\u829a\u829b\u829c\u829d\u829e\u829f\u82a0\u82a1\u82a2\u82a3\u82a4\u82a5\u82a6\u82a7\u82a8\u82a9\u82aa\u82ab\u82ac\u82ad\u82ae\u82af\u82b0\u82b1\u82b2\u82b3\u82b4\u82b5\u82b6\u82b7\u82b8\u82b9\u82ba\u82bb\u82bc\u82bd\u82be\u82bf\u82c0\u82c1\u82c2\u82c3\u82c4\u82c5\u82c6\u82c7\u82c8\u82c9\u82ca\u82cb\u82cc\u82cd\u82ce\u82cf\u82d0\u82d1\u82d2\u82d3\u82d4\u82d5\u82d6\u82d7\u82d8\u82d9\u82da\u82db\u82dc\u82dd\u82de\u82df\u82e0\u82e1\u82e2\u82e3\u82e4\u82e5\u82e6\u82e7\u82e8\u82e9\u82ea\u82eb\u82ec\u82ed\u82ee\u82ef\u82f0\u82f1\u82f2\u82f3\u82f4\u82f5\u82f6\u82f7\u82f8\u82f9\u82fa\u82fb\u82fc\u82fd\u82fe\u82ff\u8300\u8301\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309\u830a\u830b\u830c\u830d\u830e\u830f\u8310\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318\u8319\u831a\u831b\u831c\u831d\u831e\u831f\u8320\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328\u8329\u832a\u832b\u832c\u832d\u832e\u832f\u8330\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338\u8339\u833a\u833b\u833c\u833d\u833e\u833f\u8340\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834a\u834b\u834c\u834d\u834e\u834f\u8350\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358\u8359\u835a\u835b\u835c\u835d\u835e\u835f\u8360\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368\u8369\u836a\u836b\u836c\u836d\u836e\u836f\u8370\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378\u8379\u837a\u837b\u837c\u837d\u837e\u837f\u8380\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388\u8389\u838a\u838b\u838c\u838d\u838e\u838f\u8390\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398\u8399\u839a\u839b\u839c\u839d\u839e\u839f\u83a0\u83a1\u83a2\u83a3\u83a4\u83a5\u83a6\u83a7\u83a8\u83a9\u83aa\u83ab\u83ac\u83ad\u83ae\u83af\u83b0\u83b1\u83b2\u83b3\u83b4\u83b5\u83b6\u83b7\u83b8\u83b9\u83ba\u83bb\u83bc\u83bd\u83be\u83bf\u83c0\u83c1\u83c2\u83c3\u83c4\u83c5\u83c6\u83c7\u83c8\u83c9\u83ca\u83cb\u83cc\u83cd\u83ce\u83cf\u83d0\u83d1\u83d2\u83d3\u83d4\u83d5\u83d6\u83d7\u83d8\u83d9\u83da\u83db\u83dc\u83dd\u83de\u83df\u83e0\u83e1\u83e2\u83e3\u83e4\u83e5\u83e6\u83e7\u83e8\u83e9\u83ea\u83eb\u83ec\u83ed\u83ee\u83ef\u83f0\u83f1\u83f2\u83f3\u83f4\u83f5\u83f6\u83f7\u83f8\u83f9\u83fa\u83fb\u83fc\u83fd\u83fe\u83ff\u8400\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408\u8409\u840a\u840b\u840c\u840d\u840e\u840f\u8410\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418\u8419\u841a\u841b\u841c\u841d\u841e\u841f\u8420\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428\u8429\u842a\u842b\u842c\u842d\u842e\u842f\u8430\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438\u8439\u843a\u843b\u843c\u843d\u843e\u843f\u8440\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448\u8449\u844a\u844b\u844c\u844d\u844e\u844f\u8450\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458\u8459\u845a\u845b\u845c\u845d\u845e\u845f\u8460\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468\u8469\u846a\u846b\u846c\u846d\u846e\u846f\u8470\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478\u8479\u847a\u847b\u847c\u847d\u847e\u847f\u8480\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488\u8489\u848a\u848b\u848c\u848d\u848e\u848f\u8490\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498\u8499\u849a\u849b\u849c\u849d\u849e\u849f\u84a0\u84a1\u84a2\u84a3\u84a4\u84a5\u84a6\u84a7\u84a8\u84a9\u84aa\u84ab\u84ac\u84ad\u84ae\u84af\u84b0\u84b1\u84b2\u84b3\u84b4\u84b5\u84b6\u84b7\u84b8\u84b9\u84ba\u84bb\u84bc\u84bd\u84be\u84bf\u84c0\u84c1\u84c2\u84c3\u84c4\u84c5\u84c6\u84c7\u84c8\u84c9\u84ca\u84cb\u84cc\u84cd\u84ce\u84cf\u84d0\u84d1\u84d2\u84d3\u84d4\u84d5\u84d6\u84d7\u84d8\u84d9\u84da\u84db\u84dc\u84dd\u84de\u84df\u84e0\u84e1\u84e2\u84e3\u84e4\u84e5\u84e6\u84e7\u84e8\u84e9\u84ea\u84eb\u84ec\u84ed\u84ee\u84ef\u84f0\u84f1\u84f2\u84f3\u84f4\u84f5\u84f6\u84f7\u84f8\u84f9\u84fa\u84fb\u84fc\u84fd\u84fe\u84ff\u8500\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508\u8509\u850a\u850b\u850c\u850d\u850e\u850f\u8510\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518\u8519\u851a\u851b\u851c\u851d\u851e\u851f\u8520\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528\u8529\u852a\u852b\u852c\u852d\u852e\u852f\u8530\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538\u8539\u853a\u853b\u853c\u853d\u853e\u853f\u8540\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548\u8549\u854a\u854b\u854c\u854d\u854e\u854f\u8550\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855a\u855b\u855c\u855d\u855e\u855f\u8560\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568\u8569\u856a\u856b\u856c\u856d\u856e\u856f\u8570\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578\u8579\u857a\u857b\u857c\u857d\u857e\u857f\u8580\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588\u8589\u858a\u858b\u858c\u858d\u858e\u858f\u8590\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598\u8599\u859a\u859b\u859c\u859d\u859e\u859f\u85a0\u85a1\u85a2\u85a3\u85a4\u85a5\u85a6\u85a7\u85a8\u85a9\u85aa\u85ab\u85ac\u85ad\u85ae\u85af\u85b0\u85b1\u85b2\u85b3\u85b4\u85b5\u85b6\u85b7\u85b8\u85b9\u85ba\u85bb\u85bc\u85bd\u85be\u85bf\u85c0\u85c1\u85c2\u85c3\u85c4\u85c5\u85c6\u85c7\u85c8\u85c9\u85ca\u85cb\u85cc\u85cd\u85ce\u85cf\u85d0\u85d1\u85d2\u85d3\u85d4\u85d5\u85d6\u85d7\u85d8\u85d9\u85da\u85db\u85dc\u85dd\u85de\u85df\u85e0\u85e1\u85e2\u85e3\u85e4\u85e5\u85e6\u85e7\u85e8\u85e9\u85ea\u85eb\u85ec\u85ed\u85ee\u85ef\u85f0\u85f1\u85f2\u85f3\u85f4\u85f5\u85f6\u85f7\u85f8\u85f9\u85fa\u85fb\u85fc\u85fd\u85fe\u85ff\u8600\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608\u8609\u860a\u860b\u860c\u860d\u860e\u860f\u8610\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618\u8619\u861a\u861b\u861c\u861d\u861e\u861f\u8620\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628\u8629\u862a\u862b\u862c\u862d\u862e\u862f\u8630\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638\u8639\u863a\u863b\u863c\u863d\u863e\u863f\u8640\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648\u8649\u864a\u864b\u864c\u864d\u864e\u864f\u8650\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658\u8659\u865a\u865b\u865c\u865d\u865e\u865f\u8660\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668\u8669\u866a\u866b\u866c\u866d\u866e\u866f\u8670\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678\u8679\u867a\u867b\u867c\u867d\u867e\u867f\u8680\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688\u8689\u868a\u868b\u868c\u868d\u868e\u868f\u8690\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698\u8699\u869a\u869b\u869c\u869d\u869e\u869f\u86a0\u86a1\u86a2\u86a3\u86a4\u86a5\u86a6\u86a7\u86a8\u86a9\u86aa\u86ab\u86ac\u86ad\u86ae\u86af\u86b0\u86b1\u86b2\u86b3\u86b4\u86b5\u86b6\u86b7\u86b8\u86b9\u86ba\u86bb\u86bc\u86bd\u86be\u86bf\u86c0\u86c1\u86c2\u86c3\u86c4\u86c5\u86c6\u86c7\u86c8\u86c9\u86ca\u86cb\u86cc\u86cd\u86ce\u86cf\u86d0\u86d1\u86d2\u86d3\u86d4\u86d5\u86d6\u86d7\u86d8\u86d9\u86da\u86db\u86dc\u86dd\u86de\u86df\u86e0\u86e1\u86e2\u86e3\u86e4\u86e5\u86e6\u86e7\u86e8\u86e9\u86ea\u86eb\u86ec\u86ed\u86ee\u86ef\u86f0\u86f1\u86f2\u86f3\u86f4\u86f5\u86f6\u86f7\u86f8\u86f9\u86fa\u86fb\u86fc\u86fd\u86fe\u86ff\u8700\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708\u8709\u870a\u870b\u870c\u870d\u870e\u870f\u8710\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718\u8719\u871a\u871b\u871c\u871d\u871e\u871f\u8720\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728\u8729\u872a\u872b\u872c\u872d\u872e\u872f\u8730\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738\u8739\u873a\u873b\u873c\u873d\u873e\u873f\u8740\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748\u8749\u874a\u874b\u874c\u874d\u874e\u874f\u8750\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758\u8759\u875a\u875b\u875c\u875d\u875e\u875f\u8760\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768\u8769\u876a\u876b\u876c\u876d\u876e\u876f\u8770\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778\u8779\u877a\u877b\u877c\u877d\u877e\u877f\u8780\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788\u8789\u878a\u878b\u878c\u878d\u878e\u878f\u8790\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798\u8799\u879a\u879b\u879c\u879d\u879e\u879f\u87a0\u87a1\u87a2\u87a3\u87a4\u87a5\u87a6\u87a7\u87a8\u87a9\u87aa\u87ab\u87ac\u87ad\u87ae\u87af\u87b0\u87b1\u87b2\u87b3\u87b4\u87b5\u87b6\u87b7\u87b8\u87b9\u87ba\u87bb\u87bc\u87bd\u87be\u87bf\u87c0\u87c1\u87c2\u87c3\u87c4\u87c5\u87c6\u87c7\u87c8\u87c9\u87ca\u87cb\u87cc\u87cd\u87ce\u87cf\u87d0\u87d1\u87d2\u87d3\u87d4\u87d5\u87d6\u87d7\u87d8\u87d9\u87da\u87db\u87dc\u87dd\u87de\u87df\u87e0\u87e1\u87e2\u87e3\u87e4\u87e5\u87e6\u87e7\u87e8\u87e9\u87ea\u87eb\u87ec\u87ed\u87ee\u87ef\u87f0\u87f1\u87f2\u87f3\u87f4\u87f5\u87f6\u87f7\u87f8\u87f9\u87fa\u87fb\u87fc\u87fd\u87fe\u87ff\u8800\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808\u8809\u880a\u880b\u880c\u880d\u880e\u880f\u8810\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818\u8819\u881a\u881b\u881c\u881d\u881e\u881f\u8820\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828\u8829\u882a\u882b\u882c\u882d\u882e\u882f\u8830\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838\u8839\u883a\u883b\u883c\u883d\u883e\u883f\u8840\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848\u8849\u884a\u884b\u884c\u884d\u884e\u884f\u8850\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858\u8859\u885a\u885b\u885c\u885d\u885e\u885f\u8860\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868\u8869\u886a\u886b\u886c\u886d\u886e\u886f\u8870\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878\u8879\u887a\u887b\u887c\u887d\u887e\u887f\u8880\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888\u8889\u888a\u888b\u888c\u888d\u888e\u888f\u8890\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898\u8899\u889a\u889b\u889c\u889d\u889e\u889f\u88a0\u88a1\u88a2\u88a3\u88a4\u88a5\u88a6\u88a7\u88a8\u88a9\u88aa\u88ab\u88ac\u88ad\u88ae\u88af\u88b0\u88b1\u88b2\u88b3\u88b4\u88b5\u88b6\u88b7\u88b8\u88b9\u88ba\u88bb\u88bc\u88bd\u88be\u88bf\u88c0\u88c1\u88c2\u88c3\u88c4\u88c5\u88c6\u88c7\u88c8\u88c9\u88ca\u88cb\u88cc\u88cd\u88ce\u88cf\u88d0\u88d1\u88d2\u88d3\u88d4\u88d5\u88d6\u88d7\u88d8\u88d9\u88da\u88db\u88dc\u88dd\u88de\u88df\u88e0\u88e1\u88e2\u88e3\u88e4\u88e5\u88e6\u88e7\u88e8\u88e9\u88ea\u88eb\u88ec\u88ed\u88ee\u88ef\u88f0\u88f1\u88f2\u88f3\u88f4\u88f5\u88f6\u88f7\u88f8\u88f9\u88fa\u88fb\u88fc\u88fd\u88fe\u88ff\u8900\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908\u8909\u890a\u890b\u890c\u890d\u890e\u890f\u8910\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918\u8919\u891a\u891b\u891c\u891d\u891e\u891f\u8920\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928\u8929\u892a\u892b\u892c\u892d\u892e\u892f\u8930\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938\u8939\u893a\u893b\u893c\u893d\u893e\u893f\u8940\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948\u8949\u894a\u894b\u894c\u894d\u894e\u894f\u8950\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958\u8959\u895a\u895b\u895c\u895d\u895e\u895f\u8960\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968\u8969\u896a\u896b\u896c\u896d\u896e\u896f\u8970\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978\u8979\u897a\u897b\u897c\u897d\u897e\u897f\u8980\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988\u8989\u898a\u898b\u898c\u898d\u898e\u898f\u8990\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998\u8999\u899a\u899b\u899c\u899d\u899e\u899f\u89a0\u89a1\u89a2\u89a3\u89a4\u89a5\u89a6\u89a7\u89a8\u89a9\u89aa\u89ab\u89ac\u89ad\u89ae\u89af\u89b0\u89b1\u89b2\u89b3\u89b4\u89b5\u89b6\u89b7\u89b8\u89b9\u89ba\u89bb\u89bc\u89bd\u89be\u89bf\u89c0\u89c1\u89c2\u89c3\u89c4\u89c5\u89c6\u89c7\u89c8\u89c9\u89ca\u89cb\u89cc\u89cd\u89ce\u89cf\u89d0\u89d1\u89d2\u89d3\u89d4\u89d5\u89d6\u89d7\u89d8\u89d9\u89da\u89db\u89dc\u89dd\u89de\u89df\u89e0\u89e1\u89e2\u89e3\u89e4\u89e5\u89e6\u89e7\u89e8\u89e9\u89ea\u89eb\u89ec\u89ed\u89ee\u89ef\u89f0\u89f1\u89f2\u89f3\u89f4\u89f5\u89f6\u89f7\u89f8\u89f9\u89fa\u89fb\u89fc\u89fd\u89fe\u89ff\u8a00\u8a01\u8a02\u8a03\u8a04\u8a05\u8a06\u8a07\u8a08\u8a09\u8a0a\u8a0b\u8a0c\u8a0d\u8a0e\u8a0f\u8a10\u8a11\u8a12\u8a13\u8a14\u8a15\u8a16\u8a17\u8a18\u8a19\u8a1a\u8a1b\u8a1c\u8a1d\u8a1e\u8a1f\u8a20\u8a21\u8a22\u8a23\u8a24\u8a25\u8a26\u8a27\u8a28\u8a29\u8a2a\u8a2b\u8a2c\u8a2d\u8a2e\u8a2f\u8a30\u8a31\u8a32\u8a33\u8a34\u8a35\u8a36\u8a37\u8a38\u8a39\u8a3a\u8a3b\u8a3c\u8a3d\u8a3e\u8a3f\u8a40\u8a41\u8a42\u8a43\u8a44\u8a45\u8a46\u8a47\u8a48\u8a49\u8a4a\u8a4b\u8a4c\u8a4d\u8a4e\u8a4f\u8a50\u8a51\u8a52\u8a53\u8a54\u8a55\u8a56\u8a57\u8a58\u8a59\u8a5a\u8a5b\u8a5c\u8a5d\u8a5e\u8a5f\u8a60\u8a61\u8a62\u8a63\u8a64\u8a65\u8a66\u8a67\u8a68\u8a69\u8a6a\u8a6b\u8a6c\u8a6d\u8a6e\u8a6f\u8a70\u8a71\u8a72\u8a73\u8a74\u8a75\u8a76\u8a77\u8a78\u8a79\u8a7a\u8a7b\u8a7c\u8a7d\u8a7e\u8a7f\u8a80\u8a81\u8a82\u8a83\u8a84\u8a85\u8a86\u8a87\u8a88\u8a89\u8a8a\u8a8b\u8a8c\u8a8d\u8a8e\u8a8f\u8a90\u8a91\u8a92\u8a93\u8a94\u8a95\u8a96\u8a97\u8a98\u8a99\u8a9a\u8a9b\u8a9c\u8a9d\u8a9e\u8a9f\u8aa0\u8aa1\u8aa2\u8aa3\u8aa4\u8aa5\u8aa6\u8aa7\u8aa8\u8aa9\u8aaa\u8aab\u8aac\u8aad\u8aae\u8aaf\u8ab0\u8ab1\u8ab2\u8ab3\u8ab4\u8ab5\u8ab6\u8ab7\u8ab8\u8ab9\u8aba\u8abb\u8abc\u8abd\u8abe\u8abf\u8ac0\u8ac1\u8ac2\u8ac3\u8ac4\u8ac5\u8ac6\u8ac7\u8ac8\u8ac9\u8aca\u8acb\u8acc\u8acd\u8ace\u8acf\u8ad0\u8ad1\u8ad2\u8ad3\u8ad4\u8ad5\u8ad6\u8ad7\u8ad8\u8ad9\u8ada\u8adb\u8adc\u8add\u8ade\u8adf\u8ae0\u8ae1\u8ae2\u8ae3\u8ae4\u8ae5\u8ae6\u8ae7\u8ae8\u8ae9\u8aea\u8aeb\u8aec\u8aed\u8aee\u8aef\u8af0\u8af1\u8af2\u8af3\u8af4\u8af5\u8af6\u8af7\u8af8\u8af9\u8afa\u8afb\u8afc\u8afd\u8afe\u8aff\u8b00\u8b01\u8b02\u8b03\u8b04\u8b05\u8b06\u8b07\u8b08\u8b09\u8b0a\u8b0b\u8b0c\u8b0d\u8b0e\u8b0f\u8b10\u8b11\u8b12\u8b13\u8b14\u8b15\u8b16\u8b17\u8b18\u8b19\u8b1a\u8b1b\u8b1c\u8b1d\u8b1e\u8b1f\u8b20\u8b21\u8b22\u8b23\u8b24\u8b25\u8b26\u8b27\u8b28\u8b29\u8b2a\u8b2b\u8b2c\u8b2d\u8b2e\u8b2f\u8b30\u8b31\u8b32\u8b33\u8b34\u8b35\u8b36\u8b37\u8b38\u8b39\u8b3a\u8b3b\u8b3c\u8b3d\u8b3e\u8b3f\u8b40\u8b41\u8b42\u8b43\u8b44\u8b45\u8b46\u8b47\u8b48\u8b49\u8b4a\u8b4b\u8b4c\u8b4d\u8b4e\u8b4f\u8b50\u8b51\u8b52\u8b53\u8b54\u8b55\u8b56\u8b57\u8b58\u8b59\u8b5a\u8b5b\u8b5c\u8b5d\u8b5e\u8b5f\u8b60\u8b61\u8b62\u8b63\u8b64\u8b65\u8b66\u8b67\u8b68\u8b69\u8b6a\u8b6b\u8b6c\u8b6d\u8b6e\u8b6f\u8b70\u8b71\u8b72\u8b73\u8b74\u8b75\u8b76\u8b77\u8b78\u8b79\u8b7a\u8b7b\u8b7c\u8b7d\u8b7e\u8b7f\u8b80\u8b81\u8b82\u8b83\u8b84\u8b85\u8b86\u8b87\u8b88\u8b89\u8b8a\u8b8b\u8b8c\u8b8d\u8b8e\u8b8f\u8b90\u8b91\u8b92\u8b93\u8b94\u8b95\u8b96\u8b97\u8b98\u8b99\u8b9a\u8b9b\u8b9c\u8b9d\u8b9e\u8b9f\u8ba0\u8ba1\u8ba2\u8ba3\u8ba4\u8ba5\u8ba6\u8ba7\u8ba8\u8ba9\u8baa\u8bab\u8bac\u8bad\u8bae\u8baf\u8bb0\u8bb1\u8bb2\u8bb3\u8bb4\u8bb5\u8bb6\u8bb7\u8bb8\u8bb9\u8bba\u8bbb\u8bbc\u8bbd\u8bbe\u8bbf\u8bc0\u8bc1\u8bc2\u8bc3\u8bc4\u8bc5\u8bc6\u8bc7\u8bc8\u8bc9\u8bca\u8bcb\u8bcc\u8bcd\u8bce\u8bcf\u8bd0\u8bd1\u8bd2\u8bd3\u8bd4\u8bd5\u8bd6\u8bd7\u8bd8\u8bd9\u8bda\u8bdb\u8bdc\u8bdd\u8bde\u8bdf\u8be0\u8be1\u8be2\u8be3\u8be4\u8be5\u8be6\u8be7\u8be8\u8be9\u8bea\u8beb\u8bec\u8bed\u8bee\u8bef\u8bf0\u8bf1\u8bf2\u8bf3\u8bf4\u8bf5\u8bf6\u8bf7\u8bf8\u8bf9\u8bfa\u8bfb\u8bfc\u8bfd\u8bfe\u8bff\u8c00\u8c01\u8c02\u8c03\u8c04\u8c05\u8c06\u8c07\u8c08\u8c09\u8c0a\u8c0b\u8c0c\u8c0d\u8c0e\u8c0f\u8c10\u8c11\u8c12\u8c13\u8c14\u8c15\u8c16\u8c17\u8c18\u8c19\u8c1a\u8c1b\u8c1c\u8c1d\u8c1e\u8c1f\u8c20\u8c21\u8c22\u8c23\u8c24\u8c25\u8c26\u8c27\u8c28\u8c29\u8c2a\u8c2b\u8c2c\u8c2d\u8c2e\u8c2f\u8c30\u8c31\u8c32\u8c33\u8c34\u8c35\u8c36\u8c37\u8c38\u8c39\u8c3a\u8c3b\u8c3c\u8c3d\u8c3e\u8c3f\u8c40\u8c41\u8c42\u8c43\u8c44\u8c45\u8c46\u8c47\u8c48\u8c49\u8c4a\u8c4b\u8c4c\u8c4d\u8c4e\u8c4f\u8c50\u8c51\u8c52\u8c53\u8c54\u8c55\u8c56\u8c57\u8c58\u8c59\u8c5a\u8c5b\u8c5c\u8c5d\u8c5e\u8c5f\u8c60\u8c61\u8c62\u8c63\u8c64\u8c65\u8c66\u8c67\u8c68\u8c69\u8c6a\u8c6b\u8c6c\u8c6d\u8c6e\u8c6f\u8c70\u8c71\u8c72\u8c73\u8c74\u8c75\u8c76\u8c77\u8c78\u8c79\u8c7a\u8c7b\u8c7c\u8c7d\u8c7e\u8c7f\u8c80\u8c81\u8c82\u8c83\u8c84\u8c85\u8c86\u8c87\u8c88\u8c89\u8c8a\u8c8b\u8c8c\u8c8d\u8c8e\u8c8f\u8c90\u8c91\u8c92\u8c93\u8c94\u8c95\u8c96\u8c97\u8c98\u8c99\u8c9a\u8c9b\u8c9c\u8c9d\u8c9e\u8c9f\u8ca0\u8ca1\u8ca2\u8ca3\u8ca4\u8ca5\u8ca6\u8ca7\u8ca8\u8ca9\u8caa\u8cab\u8cac\u8cad\u8cae\u8caf\u8cb0\u8cb1\u8cb2\u8cb3\u8cb4\u8cb5\u8cb6\u8cb7\u8cb8\u8cb9\u8cba\u8cbb\u8cbc\u8cbd\u8cbe\u8cbf\u8cc0\u8cc1\u8cc2\u8cc3\u8cc4\u8cc5\u8cc6\u8cc7\u8cc8\u8cc9\u8cca\u8ccb\u8ccc\u8ccd\u8cce\u8ccf\u8cd0\u8cd1\u8cd2\u8cd3\u8cd4\u8cd5\u8cd6\u8cd7\u8cd8\u8cd9\u8cda\u8cdb\u8cdc\u8cdd\u8cde\u8cdf\u8ce0\u8ce1\u8ce2\u8ce3\u8ce4\u8ce5\u8ce6\u8ce7\u8ce8\u8ce9\u8cea\u8ceb\u8cec\u8ced\u8cee\u8cef\u8cf0\u8cf1\u8cf2\u8cf3\u8cf4\u8cf5\u8cf6\u8cf7\u8cf8\u8cf9\u8cfa\u8cfb\u8cfc\u8cfd\u8cfe\u8cff\u8d00\u8d01\u8d02\u8d03\u8d04\u8d05\u8d06\u8d07\u8d08\u8d09\u8d0a\u8d0b\u8d0c\u8d0d\u8d0e\u8d0f\u8d10\u8d11\u8d12\u8d13\u8d14\u8d15\u8d16\u8d17\u8d18\u8d19\u8d1a\u8d1b\u8d1c\u8d1d\u8d1e\u8d1f\u8d20\u8d21\u8d22\u8d23\u8d24\u8d25\u8d26\u8d27\u8d28\u8d29\u8d2a\u8d2b\u8d2c\u8d2d\u8d2e\u8d2f\u8d30\u8d31\u8d32\u8d33\u8d34\u8d35\u8d36\u8d37\u8d38\u8d39\u8d3a\u8d3b\u8d3c\u8d3d\u8d3e\u8d3f\u8d40\u8d41\u8d42\u8d43\u8d44\u8d45\u8d46\u8d47\u8d48\u8d49\u8d4a\u8d4b\u8d4c\u8d4d\u8d4e\u8d4f\u8d50\u8d51\u8d52\u8d53\u8d54\u8d55\u8d56\u8d57\u8d58\u8d59\u8d5a\u8d5b\u8d5c\u8d5d\u8d5e\u8d5f\u8d60\u8d61\u8d62\u8d63\u8d64\u8d65\u8d66\u8d67\u8d68\u8d69\u8d6a\u8d6b\u8d6c\u8d6d\u8d6e\u8d6f\u8d70\u8d71\u8d72\u8d73\u8d74\u8d75\u8d76\u8d77\u8d78\u8d79\u8d7a\u8d7b\u8d7c\u8d7d\u8d7e\u8d7f\u8d80\u8d81\u8d82\u8d83\u8d84\u8d85\u8d86\u8d87\u8d88\u8d89\u8d8a\u8d8b\u8d8c\u8d8d\u8d8e\u8d8f\u8d90\u8d91\u8d92\u8d93\u8d94\u8d95\u8d96\u8d97\u8d98\u8d99\u8d9a\u8d9b\u8d9c\u8d9d\u8d9e\u8d9f\u8da0\u8da1\u8da2\u8da3\u8da4\u8da5\u8da6\u8da7\u8da8\u8da9\u8daa\u8dab\u8dac\u8dad\u8dae\u8daf\u8db0\u8db1\u8db2\u8db3\u8db4\u8db5\u8db6\u8db7\u8db8\u8db9\u8dba\u8dbb\u8dbc\u8dbd\u8dbe\u8dbf\u8dc0\u8dc1\u8dc2\u8dc3\u8dc4\u8dc5\u8dc6\u8dc7\u8dc8\u8dc9\u8dca\u8dcb\u8dcc\u8dcd\u8dce\u8dcf\u8dd0\u8dd1\u8dd2\u8dd3\u8dd4\u8dd5\u8dd6\u8dd7\u8dd8\u8dd9\u8dda\u8ddb\u8ddc\u8ddd\u8dde\u8ddf\u8de0\u8de1\u8de2\u8de3\u8de4\u8de5\u8de6\u8de7\u8de8\u8de9\u8dea\u8deb\u8dec\u8ded\u8dee\u8def\u8df0\u8df1\u8df2\u8df3\u8df4\u8df5\u8df6\u8df7\u8df8\u8df9\u8dfa\u8dfb\u8dfc\u8dfd\u8dfe\u8dff\u8e00\u8e01\u8e02\u8e03\u8e04\u8e05\u8e06\u8e07\u8e08\u8e09\u8e0a\u8e0b\u8e0c\u8e0d\u8e0e\u8e0f\u8e10\u8e11\u8e12\u8e13\u8e14\u8e15\u8e16\u8e17\u8e18\u8e19\u8e1a\u8e1b\u8e1c\u8e1d\u8e1e\u8e1f\u8e20\u8e21\u8e22\u8e23\u8e24\u8e25\u8e26\u8e27\u8e28\u8e29\u8e2a\u8e2b\u8e2c\u8e2d\u8e2e\u8e2f\u8e30\u8e31\u8e32\u8e33\u8e34\u8e35\u8e36\u8e37\u8e38\u8e39\u8e3a\u8e3b\u8e3c\u8e3d\u8e3e\u8e3f\u8e40\u8e41\u8e42\u8e43\u8e44\u8e45\u8e46\u8e47\u8e48\u8e49\u8e4a\u8e4b\u8e4c\u8e4d\u8e4e\u8e4f\u8e50\u8e51\u8e52\u8e53\u8e54\u8e55\u8e56\u8e57\u8e58\u8e59\u8e5a\u8e5b\u8e5c\u8e5d\u8e5e\u8e5f\u8e60\u8e61\u8e62\u8e63\u8e64\u8e65\u8e66\u8e67\u8e68\u8e69\u8e6a\u8e6b\u8e6c\u8e6d\u8e6e\u8e6f\u8e70\u8e71\u8e72\u8e73\u8e74\u8e75\u8e76\u8e77\u8e78\u8e79\u8e7a\u8e7b\u8e7c\u8e7d\u8e7e\u8e7f\u8e80\u8e81\u8e82\u8e83\u8e84\u8e85\u8e86\u8e87\u8e88\u8e89\u8e8a\u8e8b\u8e8c\u8e8d\u8e8e\u8e8f\u8e90\u8e91\u8e92\u8e93\u8e94\u8e95\u8e96\u8e97\u8e98\u8e99\u8e9a\u8e9b\u8e9c\u8e9d\u8e9e\u8e9f\u8ea0\u8ea1\u8ea2\u8ea3\u8ea4\u8ea5\u8ea6\u8ea7\u8ea8\u8ea9\u8eaa\u8eab\u8eac\u8ead\u8eae\u8eaf\u8eb0\u8eb1\u8eb2\u8eb3\u8eb4\u8eb5\u8eb6\u8eb7\u8eb8\u8eb9\u8eba\u8ebb\u8ebc\u8ebd\u8ebe\u8ebf\u8ec0\u8ec1\u8ec2\u8ec3\u8ec4\u8ec5\u8ec6\u8ec7\u8ec8\u8ec9\u8eca\u8ecb\u8ecc\u8ecd\u8ece\u8ecf\u8ed0\u8ed1\u8ed2\u8ed3\u8ed4\u8ed5\u8ed6\u8ed7\u8ed8\u8ed9\u8eda\u8edb\u8edc\u8edd\u8ede\u8edf\u8ee0\u8ee1\u8ee2\u8ee3\u8ee4\u8ee5\u8ee6\u8ee7\u8ee8\u8ee9\u8eea\u8eeb\u8eec\u8eed\u8eee\u8eef\u8ef0\u8ef1\u8ef2\u8ef3\u8ef4\u8ef5\u8ef6\u8ef7\u8ef8\u8ef9\u8efa\u8efb\u8efc\u8efd\u8efe\u8eff\u8f00\u8f01\u8f02\u8f03\u8f04\u8f05\u8f06\u8f07\u8f08\u8f09\u8f0a\u8f0b\u8f0c\u8f0d\u8f0e\u8f0f\u8f10\u8f11\u8f12\u8f13\u8f14\u8f15\u8f16\u8f17\u8f18\u8f19\u8f1a\u8f1b\u8f1c\u8f1d\u8f1e\u8f1f\u8f20\u8f21\u8f22\u8f23\u8f24\u8f25\u8f26\u8f27\u8f28\u8f29\u8f2a\u8f2b\u8f2c\u8f2d\u8f2e\u8f2f\u8f30\u8f31\u8f32\u8f33\u8f34\u8f35\u8f36\u8f37\u8f38\u8f39\u8f3a\u8f3b\u8f3c\u8f3d\u8f3e\u8f3f\u8f40\u8f41\u8f42\u8f43\u8f44\u8f45\u8f46\u8f47\u8f48\u8f49\u8f4a\u8f4b\u8f4c\u8f4d\u8f4e\u8f4f\u8f50\u8f51\u8f52\u8f53\u8f54\u8f55\u8f56\u8f57\u8f58\u8f59\u8f5a\u8f5b\u8f5c\u8f5d\u8f5e\u8f5f\u8f60\u8f61\u8f62\u8f63\u8f64\u8f65\u8f66\u8f67\u8f68\u8f69\u8f6a\u8f6b\u8f6c\u8f6d\u8f6e\u8f6f\u8f70\u8f71\u8f72\u8f73\u8f74\u8f75\u8f76\u8f77\u8f78\u8f79\u8f7a\u8f7b\u8f7c\u8f7d\u8f7e\u8f7f\u8f80\u8f81\u8f82\u8f83\u8f84\u8f85\u8f86\u8f87\u8f88\u8f89\u8f8a\u8f8b\u8f8c\u8f8d\u8f8e\u8f8f\u8f90\u8f91\u8f92\u8f93\u8f94\u8f95\u8f96\u8f97\u8f98\u8f99\u8f9a\u8f9b\u8f9c\u8f9d\u8f9e\u8f9f\u8fa0\u8fa1\u8fa2\u8fa3\u8fa4\u8fa5\u8fa6\u8fa7\u8fa8\u8fa9\u8faa\u8fab\u8fac\u8fad\u8fae\u8faf\u8fb0\u8fb1\u8fb2\u8fb3\u8fb4\u8fb5\u8fb6\u8fb7\u8fb8\u8fb9\u8fba\u8fbb\u8fbc\u8fbd\u8fbe\u8fbf\u8fc0\u8fc1\u8fc2\u8fc3\u8fc4\u8fc5\u8fc6\u8fc7\u8fc8\u8fc9\u8fca\u8fcb\u8fcc\u8fcd\u8fce\u8fcf\u8fd0\u8fd1\u8fd2\u8fd3\u8fd4\u8fd5\u8fd6\u8fd7\u8fd8\u8fd9\u8fda\u8fdb\u8fdc\u8fdd\u8fde\u8fdf\u8fe0\u8fe1\u8fe2\u8fe3\u8fe4\u8fe5\u8fe6\u8fe7\u8fe8\u8fe9\u8fea\u8feb\u8fec\u8fed\u8fee\u8fef\u8ff0\u8ff1\u8ff2\u8ff3\u8ff4\u8ff5\u8ff6\u8ff7\u8ff8\u8ff9\u8ffa\u8ffb\u8ffc\u8ffd\u8ffe\u8fff\u9000\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008\u9009\u900a\u900b\u900c\u900d\u900e\u900f\u9010\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018\u9019\u901a\u901b\u901c\u901d\u901e\u901f\u9020\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028\u9029\u902a\u902b\u902c\u902d\u902e\u902f\u9030\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038\u9039\u903a\u903b\u903c\u903d\u903e\u903f\u9040\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048\u9049\u904a\u904b\u904c\u904d\u904e\u904f\u9050\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058\u9059\u905a\u905b\u905c\u905d\u905e\u905f\u9060\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068\u9069\u906a\u906b\u906c\u906d\u906e\u906f\u9070\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078\u9079\u907a\u907b\u907c\u907d\u907e\u907f\u9080\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088\u9089\u908a\u908b\u908c\u908d\u908e\u908f\u9090\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098\u9099\u909a\u909b\u909c\u909d\u909e\u909f\u90a0\u90a1\u90a2\u90a3\u90a4\u90a5\u90a6\u90a7\u90a8\u90a9\u90aa\u90ab\u90ac\u90ad\u90ae\u90af\u90b0\u90b1\u90b2\u90b3\u90b4\u90b5\u90b6\u90b7\u90b8\u90b9\u90ba\u90bb\u90bc\u90bd\u90be\u90bf\u90c0\u90c1\u90c2\u90c3\u90c4\u90c5\u90c6\u90c7\u90c8\u90c9\u90ca\u90cb\u90cc\u90cd\u90ce\u90cf\u90d0\u90d1\u90d2\u90d3\u90d4\u90d5\u90d6\u90d7\u90d8\u90d9\u90da\u90db\u90dc\u90dd\u90de\u90df\u90e0\u90e1\u90e2\u90e3\u90e4\u90e5\u90e6\u90e7\u90e8\u90e9\u90ea\u90eb\u90ec\u90ed\u90ee\u90ef\u90f0\u90f1\u90f2\u90f3\u90f4\u90f5\u90f6\u90f7\u90f8\u90f9\u90fa\u90fb\u90fc\u90fd\u90fe\u90ff\u9100\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108\u9109\u910a\u910b\u910c\u910d\u910e\u910f\u9110\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118\u9119\u911a\u911b\u911c\u911d\u911e\u911f\u9120\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128\u9129\u912a\u912b\u912c\u912d\u912e\u912f\u9130\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138\u9139\u913a\u913b\u913c\u913d\u913e\u913f\u9140\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148\u9149\u914a\u914b\u914c\u914d\u914e\u914f\u9150\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158\u9159\u915a\u915b\u915c\u915d\u915e\u915f\u9160\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168\u9169\u916a\u916b\u916c\u916d\u916e\u916f\u9170\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178\u9179\u917a\u917b\u917c\u917d\u917e\u917f\u9180\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188\u9189\u918a\u918b\u918c\u918d\u918e\u918f\u9190\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198\u9199\u919a\u919b\u919c\u919d\u919e\u919f\u91a0\u91a1\u91a2\u91a3\u91a4\u91a5\u91a6\u91a7\u91a8\u91a9\u91aa\u91ab\u91ac\u91ad\u91ae\u91af\u91b0\u91b1\u91b2\u91b3\u91b4\u91b5\u91b6\u91b7\u91b8\u91b9\u91ba\u91bb\u91bc\u91bd\u91be\u91bf\u91c0\u91c1\u91c2\u91c3\u91c4\u91c5\u91c6\u91c7\u91c8\u91c9\u91ca\u91cb\u91cc\u91cd\u91ce\u91cf\u91d0\u91d1\u91d2\u91d3\u91d4\u91d5\u91d6\u91d7\u91d8\u91d9\u91da\u91db\u91dc\u91dd\u91de\u91df\u91e0\u91e1\u91e2\u91e3\u91e4\u91e5\u91e6\u91e7\u91e8\u91e9\u91ea\u91eb\u91ec\u91ed\u91ee\u91ef\u91f0\u91f1\u91f2\u91f3\u91f4\u91f5\u91f6\u91f7\u91f8\u91f9\u91fa\u91fb\u91fc\u91fd\u91fe\u91ff\u9200\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208\u9209\u920a\u920b\u920c\u920d\u920e\u920f\u9210\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218\u9219\u921a\u921b\u921c\u921d\u921e\u921f\u9220\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228\u9229\u922a\u922b\u922c\u922d\u922e\u922f\u9230\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238\u9239\u923a\u923b\u923c\u923d\u923e\u923f\u9240\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248\u9249\u924a\u924b\u924c\u924d\u924e\u924f\u9250\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258\u9259\u925a\u925b\u925c\u925d\u925e\u925f\u9260\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268\u9269\u926a\u926b\u926c\u926d\u926e\u926f\u9270\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278\u9279\u927a\u927b\u927c\u927d\u927e\u927f\u9280\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288\u9289\u928a\u928b\u928c\u928d\u928e\u928f\u9290\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298\u9299\u929a\u929b\u929c\u929d\u929e\u929f\u92a0\u92a1\u92a2\u92a3\u92a4\u92a5\u92a6\u92a7\u92a8\u92a9\u92aa\u92ab\u92ac\u92ad\u92ae\u92af\u92b0\u92b1\u92b2\u92b3\u92b4\u92b5\u92b6\u92b7\u92b8\u92b9\u92ba\u92bb\u92bc\u92bd\u92be\u92bf\u92c0\u92c1\u92c2\u92c3\u92c4\u92c5\u92c6\u92c7\u92c8\u92c9\u92ca\u92cb\u92cc\u92cd\u92ce\u92cf\u92d0\u92d1\u92d2\u92d3\u92d4\u92d5\u92d6\u92d7\u92d8\u92d9\u92da\u92db\u92dc\u92dd\u92de\u92df\u92e0\u92e1\u92e2\u92e3\u92e4\u92e5\u92e6\u92e7\u92e8\u92e9\u92ea\u92eb\u92ec\u92ed\u92ee\u92ef\u92f0\u92f1\u92f2\u92f3\u92f4\u92f5\u92f6\u92f7\u92f8\u92f9\u92fa\u92fb\u92fc\u92fd\u92fe\u92ff\u9300\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308\u9309\u930a\u930b\u930c\u930d\u930e\u930f\u9310\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318\u9319\u931a\u931b\u931c\u931d\u931e\u931f\u9320\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328\u9329\u932a\u932b\u932c\u932d\u932e\u932f\u9330\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338\u9339\u933a\u933b\u933c\u933d\u933e\u933f\u9340\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348\u9349\u934a\u934b\u934c\u934d\u934e\u934f\u9350\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358\u9359\u935a\u935b\u935c\u935d\u935e\u935f\u9360\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368\u9369\u936a\u936b\u936c\u936d\u936e\u936f\u9370\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378\u9379\u937a\u937b\u937c\u937d\u937e\u937f\u9380\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388\u9389\u938a\u938b\u938c\u938d\u938e\u938f\u9390\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398\u9399\u939a\u939b\u939c\u939d\u939e\u939f\u93a0\u93a1\u93a2\u93a3\u93a4\u93a5\u93a6\u93a7\u93a8\u93a9\u93aa\u93ab\u93ac\u93ad\u93ae\u93af\u93b0\u93b1\u93b2\u93b3\u93b4\u93b5\u93b6\u93b7\u93b8\u93b9\u93ba\u93bb\u93bc\u93bd\u93be\u93bf\u93c0\u93c1\u93c2\u93c3\u93c4\u93c5\u93c6\u93c7\u93c8\u93c9\u93ca\u93cb\u93cc\u93cd\u93ce\u93cf\u93d0\u93d1\u93d2\u93d3\u93d4\u93d5\u93d6\u93d7\u93d8\u93d9\u93da\u93db\u93dc\u93dd\u93de\u93df\u93e0\u93e1\u93e2\u93e3\u93e4\u93e5\u93e6\u93e7\u93e8\u93e9\u93ea\u93eb\u93ec\u93ed\u93ee\u93ef\u93f0\u93f1\u93f2\u93f3\u93f4\u93f5\u93f6\u93f7\u93f8\u93f9\u93fa\u93fb\u93fc\u93fd\u93fe\u93ff\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407\u9408\u9409\u940a\u940b\u940c\u940d\u940e\u940f\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417\u9418\u9419\u941a\u941b\u941c\u941d\u941e\u941f\u9420\u9421\u9422\u9423\u9424\u9425\u9426\u9427\u9428\u9429\u942a\u942b\u942c\u942d\u942e\u942f\u9430\u9431\u9432\u9433\u9434\u9435\u9436\u9437\u9438\u9439\u943a\u943b\u943c\u943d\u943e\u943f\u9440\u9441\u9442\u9443\u9444\u9445\u9446\u9447\u9448\u9449\u944a\u944b\u944c\u944d\u944e\u944f\u9450\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458\u9459\u945a\u945b\u945c\u945d\u945e\u945f\u9460\u9461\u9462\u9463\u9464\u9465\u9466\u9467\u9468\u9469\u946a\u946b\u946c\u946d\u946e\u946f\u9470\u9471\u9472\u9473\u9474\u9475\u9476\u9477\u9478\u9479\u947a\u947b\u947c\u947d\u947e\u947f\u9480\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488\u9489\u948a\u948b\u948c\u948d\u948e\u948f\u9490\u9491\u9492\u9493\u9494\u9495\u9496\u9497\u9498\u9499\u949a\u949b\u949c\u949d\u949e\u949f\u94a0\u94a1\u94a2\u94a3\u94a4\u94a5\u94a6\u94a7\u94a8\u94a9\u94aa\u94ab\u94ac\u94ad\u94ae\u94af\u94b0\u94b1\u94b2\u94b3\u94b4\u94b5\u94b6\u94b7\u94b8\u94b9\u94ba\u94bb\u94bc\u94bd\u94be\u94bf\u94c0\u94c1\u94c2\u94c3\u94c4\u94c5\u94c6\u94c7\u94c8\u94c9\u94ca\u94cb\u94cc\u94cd\u94ce\u94cf\u94d0\u94d1\u94d2\u94d3\u94d4\u94d5\u94d6\u94d7\u94d8\u94d9\u94da\u94db\u94dc\u94dd\u94de\u94df\u94e0\u94e1\u94e2\u94e3\u94e4\u94e5\u94e6\u94e7\u94e8\u94e9\u94ea\u94eb\u94ec\u94ed\u94ee\u94ef\u94f0\u94f1\u94f2\u94f3\u94f4\u94f5\u94f6\u94f7\u94f8\u94f9\u94fa\u94fb\u94fc\u94fd\u94fe\u94ff\u9500\u9501\u9502\u9503\u9504\u9505\u9506\u9507\u9508\u9509\u950a\u950b\u950c\u950d\u950e\u950f\u9510\u9511\u9512\u9513\u9514\u9515\u9516\u9517\u9518\u9519\u951a\u951b\u951c\u951d\u951e\u951f\u9520\u9521\u9522\u9523\u9524\u9525\u9526\u9527\u9528\u9529\u952a\u952b\u952c\u952d\u952e\u952f\u9530\u9531\u9532\u9533\u9534\u9535\u9536\u9537\u9538\u9539\u953a\u953b\u953c\u953d\u953e\u953f\u9540\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548\u9549\u954a\u954b\u954c\u954d\u954e\u954f\u9550\u9551\u9552\u9553\u9554\u9555\u9556\u9557\u9558\u9559\u955a\u955b\u955c\u955d\u955e\u955f\u9560\u9561\u9562\u9563\u9564\u9565\u9566\u9567\u9568\u9569\u956a\u956b\u956c\u956d\u956e\u956f\u9570\u9571\u9572\u9573\u9574\u9575\u9576\u9577\u9578\u9579\u957a\u957b\u957c\u957d\u957e\u957f\u9580\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588\u9589\u958a\u958b\u958c\u958d\u958e\u958f\u9590\u9591\u9592\u9593\u9594\u9595\u9596\u9597\u9598\u9599\u959a\u959b\u959c\u959d\u959e\u959f\u95a0\u95a1\u95a2\u95a3\u95a4\u95a5\u95a6\u95a7\u95a8\u95a9\u95aa\u95ab\u95ac\u95ad\u95ae\u95af\u95b0\u95b1\u95b2\u95b3\u95b4\u95b5\u95b6\u95b7\u95b8\u95b9\u95ba\u95bb\u95bc\u95bd\u95be\u95bf\u95c0\u95c1\u95c2\u95c3\u95c4\u95c5\u95c6\u95c7\u95c8\u95c9\u95ca\u95cb\u95cc\u95cd\u95ce\u95cf\u95d0\u95d1\u95d2\u95d3\u95d4\u95d5\u95d6\u95d7\u95d8\u95d9\u95da\u95db\u95dc\u95dd\u95de\u95df\u95e0\u95e1\u95e2\u95e3\u95e4\u95e5\u95e6\u95e7\u95e8\u95e9\u95ea\u95eb\u95ec\u95ed\u95ee\u95ef\u95f0\u95f1\u95f2\u95f3\u95f4\u95f5\u95f6\u95f7\u95f8\u95f9\u95fa\u95fb\u95fc\u95fd\u95fe\u95ff\u9600\u9601\u9602\u9603\u9604\u9605\u9606\u9607\u9608\u9609\u960a\u960b\u960c\u960d\u960e\u960f\u9610\u9611\u9612\u9613\u9614\u9615\u9616\u9617\u9618\u9619\u961a\u961b\u961c\u961d\u961e\u961f\u9620\u9621\u9622\u9623\u9624\u9625\u9626\u9627\u9628\u9629\u962a\u962b\u962c\u962d\u962e\u962f\u9630\u9631\u9632\u9633\u9634\u9635\u9636\u9637\u9638\u9639\u963a\u963b\u963c\u963d\u963e\u963f\u9640\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648\u9649\u964a\u964b\u964c\u964d\u964e\u964f\u9650\u9651\u9652\u9653\u9654\u9655\u9656\u9657\u9658\u9659\u965a\u965b\u965c\u965d\u965e\u965f\u9660\u9661\u9662\u9663\u9664\u9665\u9666\u9667\u9668\u9669\u966a\u966b\u966c\u966d\u966e\u966f\u9670\u9671\u9672\u9673\u9674\u9675\u9676\u9677\u9678\u9679\u967a\u967b\u967c\u967d\u967e\u967f\u9680\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688\u9689\u968a\u968b\u968c\u968d\u968e\u968f\u9690\u9691\u9692\u9693\u9694\u9695\u9696\u9697\u9698\u9699\u969a\u969b\u969c\u969d\u969e\u969f\u96a0\u96a1\u96a2\u96a3\u96a4\u96a5\u96a6\u96a7\u96a8\u96a9\u96aa\u96ab\u96ac\u96ad\u96ae\u96af\u96b0\u96b1\u96b2\u96b3\u96b4\u96b5\u96b6\u96b7\u96b8\u96b9\u96ba\u96bb\u96bc\u96bd\u96be\u96bf\u96c0\u96c1\u96c2\u96c3\u96c4\u96c5\u96c6\u96c7\u96c8\u96c9\u96ca\u96cb\u96cc\u96cd\u96ce\u96cf\u96d0\u96d1\u96d2\u96d3\u96d4\u96d5\u96d6\u96d7\u96d8\u96d9\u96da\u96db\u96dc\u96dd\u96de\u96df\u96e0\u96e1\u96e2\u96e3\u96e4\u96e5\u96e6\u96e7\u96e8\u96e9\u96ea\u96eb\u96ec\u96ed\u96ee\u96ef\u96f0\u96f1\u96f2\u96f3\u96f4\u96f5\u96f6\u96f7\u96f8\u96f9\u96fa\u96fb\u96fc\u96fd\u96fe\u96ff\u9700\u9701\u9702\u9703\u9704\u9705\u9706\u9707\u9708\u9709\u970a\u970b\u970c\u970d\u970e\u970f\u9710\u9711\u9712\u9713\u9714\u9715\u9716\u9717\u9718\u9719\u971a\u971b\u971c\u971d\u971e\u971f\u9720\u9721\u9722\u9723\u9724\u9725\u9726\u9727\u9728\u9729\u972a\u972b\u972c\u972d\u972e\u972f\u9730\u9731\u9732\u9733\u9734\u9735\u9736\u9737\u9738\u9739\u973a\u973b\u973c\u973d\u973e\u973f\u9740\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748\u9749\u974a\u974b\u974c\u974d\u974e\u974f\u9750\u9751\u9752\u9753\u9754\u9755\u9756\u9757\u9758\u9759\u975a\u975b\u975c\u975d\u975e\u975f\u9760\u9761\u9762\u9763\u9764\u9765\u9766\u9767\u9768\u9769\u976a\u976b\u976c\u976d\u976e\u976f\u9770\u9771\u9772\u9773\u9774\u9775\u9776\u9777\u9778\u9779\u977a\u977b\u977c\u977d\u977e\u977f\u9780\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788\u9789\u978a\u978b\u978c\u978d\u978e\u978f\u9790\u9791\u9792\u9793\u9794\u9795\u9796\u9797\u9798\u9799\u979a\u979b\u979c\u979d\u979e\u979f\u97a0\u97a1\u97a2\u97a3\u97a4\u97a5\u97a6\u97a7\u97a8\u97a9\u97aa\u97ab\u97ac\u97ad\u97ae\u97af\u97b0\u97b1\u97b2\u97b3\u97b4\u97b5\u97b6\u97b7\u97b8\u97b9\u97ba\u97bb\u97bc\u97bd\u97be\u97bf\u97c0\u97c1\u97c2\u97c3\u97c4\u97c5\u97c6\u97c7\u97c8\u97c9\u97ca\u97cb\u97cc\u97cd\u97ce\u97cf\u97d0\u97d1\u97d2\u97d3\u97d4\u97d5\u97d6\u97d7\u97d8\u97d9\u97da\u97db\u97dc\u97dd\u97de\u97df\u97e0\u97e1\u97e2\u97e3\u97e4\u97e5\u97e6\u97e7\u97e8\u97e9\u97ea\u97eb\u97ec\u97ed\u97ee\u97ef\u97f0\u97f1\u97f2\u97f3\u97f4\u97f5\u97f6\u97f7\u97f8\u97f9\u97fa\u97fb\u97fc\u97fd\u97fe\u97ff\u9800\u9801\u9802\u9803\u9804\u9805\u9806\u9807\u9808\u9809\u980a\u980b\u980c\u980d\u980e\u980f\u9810\u9811\u9812\u9813\u9814\u9815\u9816\u9817\u9818\u9819\u981a\u981b\u981c\u981d\u981e\u981f\u9820\u9821\u9822\u9823\u9824\u9825\u9826\u9827\u9828\u9829\u982a\u982b\u982c\u982d\u982e\u982f\u9830\u9831\u9832\u9833\u9834\u9835\u9836\u9837\u9838\u9839\u983a\u983b\u983c\u983d\u983e\u983f\u9840\u9841\u9842\u9843\u9844\u9845\u9846\u9847\u9848\u9849\u984a\u984b\u984c\u984d\u984e\u984f\u9850\u9851\u9852\u9853\u9854\u9855\u9856\u9857\u9858\u9859\u985a\u985b\u985c\u985d\u985e\u985f\u9860\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868\u9869\u986a\u986b\u986c\u986d\u986e\u986f\u9870\u9871\u9872\u9873\u9874\u9875\u9876\u9877\u9878\u9879\u987a\u987b\u987c\u987d\u987e\u987f\u9880\u9881\u9882\u9883\u9884\u9885\u9886\u9887\u9888\u9889\u988a\u988b\u988c\u988d\u988e\u988f\u9890\u9891\u9892\u9893\u9894\u9895\u9896\u9897\u9898\u9899\u989a\u989b\u989c\u989d\u989e\u989f\u98a0\u98a1\u98a2\u98a3\u98a4\u98a5\u98a6\u98a7\u98a8\u98a9\u98aa\u98ab\u98ac\u98ad\u98ae\u98af\u98b0\u98b1\u98b2\u98b3\u98b4\u98b5\u98b6\u98b7\u98b8\u98b9\u98ba\u98bb\u98bc\u98bd\u98be\u98bf\u98c0\u98c1\u98c2\u98c3\u98c4\u98c5\u98c6\u98c7\u98c8\u98c9\u98ca\u98cb\u98cc\u98cd\u98ce\u98cf\u98d0\u98d1\u98d2\u98d3\u98d4\u98d5\u98d6\u98d7\u98d8\u98d9\u98da\u98db\u98dc\u98dd\u98de\u98df\u98e0\u98e1\u98e2\u98e3\u98e4\u98e5\u98e6\u98e7\u98e8\u98e9\u98ea\u98eb\u98ec\u98ed\u98ee\u98ef\u98f0\u98f1\u98f2\u98f3\u98f4\u98f5\u98f6\u98f7\u98f8\u98f9\u98fa\u98fb\u98fc\u98fd\u98fe\u98ff\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907\u9908\u9909\u990a\u990b\u990c\u990d\u990e\u990f\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917\u9918\u9919\u991a\u991b\u991c\u991d\u991e\u991f\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927\u9928\u9929\u992a\u992b\u992c\u992d\u992e\u992f\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937\u9938\u9939\u993a\u993b\u993c\u993d\u993e\u993f\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947\u9948\u9949\u994a\u994b\u994c\u994d\u994e\u994f\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957\u9958\u9959\u995a\u995b\u995c\u995d\u995e\u995f\u9960\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969\u996a\u996b\u996c\u996d\u996e\u996f\u9970\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979\u997a\u997b\u997c\u997d\u997e\u997f\u9980\u9981\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989\u998a\u998b\u998c\u998d\u998e\u998f\u9990\u9991\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999\u999a\u999b\u999c\u999d\u999e\u999f\u99a0\u99a1\u99a2\u99a3\u99a4\u99a5\u99a6\u99a7\u99a8\u99a9\u99aa\u99ab\u99ac\u99ad\u99ae\u99af\u99b0\u99b1\u99b2\u99b3\u99b4\u99b5\u99b6\u99b7\u99b8\u99b9\u99ba\u99bb\u99bc\u99bd\u99be\u99bf\u99c0\u99c1\u99c2\u99c3\u99c4\u99c5\u99c6\u99c7\u99c8\u99c9\u99ca\u99cb\u99cc\u99cd\u99ce\u99cf\u99d0\u99d1\u99d2\u99d3\u99d4\u99d5\u99d6\u99d7\u99d8\u99d9\u99da\u99db\u99dc\u99dd\u99de\u99df\u99e0\u99e1\u99e2\u99e3\u99e4\u99e5\u99e6\u99e7\u99e8\u99e9\u99ea\u99eb\u99ec\u99ed\u99ee\u99ef\u99f0\u99f1\u99f2\u99f3\u99f4\u99f5\u99f6\u99f7\u99f8\u99f9\u99fa\u99fb\u99fc\u99fd\u99fe\u99ff\u9a00\u9a01\u9a02\u9a03\u9a04\u9a05\u9a06\u9a07\u9a08\u9a09\u9a0a\u9a0b\u9a0c\u9a0d\u9a0e\u9a0f\u9a10\u9a11\u9a12\u9a13\u9a14\u9a15\u9a16\u9a17\u9a18\u9a19\u9a1a\u9a1b\u9a1c\u9a1d\u9a1e\u9a1f\u9a20\u9a21\u9a22\u9a23\u9a24\u9a25\u9a26\u9a27\u9a28\u9a29\u9a2a\u9a2b\u9a2c\u9a2d\u9a2e\u9a2f\u9a30\u9a31\u9a32\u9a33\u9a34\u9a35\u9a36\u9a37\u9a38\u9a39\u9a3a\u9a3b\u9a3c\u9a3d\u9a3e\u9a3f\u9a40\u9a41\u9a42\u9a43\u9a44\u9a45\u9a46\u9a47\u9a48\u9a49\u9a4a\u9a4b\u9a4c\u9a4d\u9a4e\u9a4f\u9a50\u9a51\u9a52\u9a53\u9a54\u9a55\u9a56\u9a57\u9a58\u9a59\u9a5a\u9a5b\u9a5c\u9a5d\u9a5e\u9a5f\u9a60\u9a61\u9a62\u9a63\u9a64\u9a65\u9a66\u9a67\u9a68\u9a69\u9a6a\u9a6b\u9a6c\u9a6d\u9a6e\u9a6f\u9a70\u9a71\u9a72\u9a73\u9a74\u9a75\u9a76\u9a77\u9a78\u9a79\u9a7a\u9a7b\u9a7c\u9a7d\u9a7e\u9a7f\u9a80\u9a81\u9a82\u9a83\u9a84\u9a85\u9a86\u9a87\u9a88\u9a89\u9a8a\u9a8b\u9a8c\u9a8d\u9a8e\u9a8f\u9a90\u9a91\u9a92\u9a93\u9a94\u9a95\u9a96\u9a97\u9a98\u9a99\u9a9a\u9a9b\u9a9c\u9a9d\u9a9e\u9a9f\u9aa0\u9aa1\u9aa2\u9aa3\u9aa4\u9aa5\u9aa6\u9aa7\u9aa8\u9aa9\u9aaa\u9aab\u9aac\u9aad\u9aae\u9aaf\u9ab0\u9ab1\u9ab2\u9ab3\u9ab4\u9ab5\u9ab6\u9ab7\u9ab8\u9ab9\u9aba\u9abb\u9abc\u9abd\u9abe\u9abf\u9ac0\u9ac1\u9ac2\u9ac3\u9ac4\u9ac5\u9ac6\u9ac7\u9ac8\u9ac9\u9aca\u9acb\u9acc\u9acd\u9ace\u9acf\u9ad0\u9ad1\u9ad2\u9ad3\u9ad4\u9ad5\u9ad6\u9ad7\u9ad8\u9ad9\u9ada\u9adb\u9adc\u9add\u9ade\u9adf\u9ae0\u9ae1\u9ae2\u9ae3\u9ae4\u9ae5\u9ae6\u9ae7\u9ae8\u9ae9\u9aea\u9aeb\u9aec\u9aed\u9aee\u9aef\u9af0\u9af1\u9af2\u9af3\u9af4\u9af5\u9af6\u9af7\u9af8\u9af9\u9afa\u9afb\u9afc\u9afd\u9afe\u9aff\u9b00\u9b01\u9b02\u9b03\u9b04\u9b05\u9b06\u9b07\u9b08\u9b09\u9b0a\u9b0b\u9b0c\u9b0d\u9b0e\u9b0f\u9b10\u9b11\u9b12\u9b13\u9b14\u9b15\u9b16\u9b17\u9b18\u9b19\u9b1a\u9b1b\u9b1c\u9b1d\u9b1e\u9b1f\u9b20\u9b21\u9b22\u9b23\u9b24\u9b25\u9b26\u9b27\u9b28\u9b29\u9b2a\u9b2b\u9b2c\u9b2d\u9b2e\u9b2f\u9b30\u9b31\u9b32\u9b33\u9b34\u9b35\u9b36\u9b37\u9b38\u9b39\u9b3a\u9b3b\u9b3c\u9b3d\u9b3e\u9b3f\u9b40\u9b41\u9b42\u9b43\u9b44\u9b45\u9b46\u9b47\u9b48\u9b49\u9b4a\u9b4b\u9b4c\u9b4d\u9b4e\u9b4f\u9b50\u9b51\u9b52\u9b53\u9b54\u9b55\u9b56\u9b57\u9b58\u9b59\u9b5a\u9b5b\u9b5c\u9b5d\u9b5e\u9b5f\u9b60\u9b61\u9b62\u9b63\u9b64\u9b65\u9b66\u9b67\u9b68\u9b69\u9b6a\u9b6b\u9b6c\u9b6d\u9b6e\u9b6f\u9b70\u9b71\u9b72\u9b73\u9b74\u9b75\u9b76\u9b77\u9b78\u9b79\u9b7a\u9b7b\u9b7c\u9b7d\u9b7e\u9b7f\u9b80\u9b81\u9b82\u9b83\u9b84\u9b85\u9b86\u9b87\u9b88\u9b89\u9b8a\u9b8b\u9b8c\u9b8d\u9b8e\u9b8f\u9b90\u9b91\u9b92\u9b93\u9b94\u9b95\u9b96\u9b97\u9b98\u9b99\u9b9a\u9b9b\u9b9c\u9b9d\u9b9e\u9b9f\u9ba0\u9ba1\u9ba2\u9ba3\u9ba4\u9ba5\u9ba6\u9ba7\u9ba8\u9ba9\u9baa\u9bab\u9bac\u9bad\u9bae\u9baf\u9bb0\u9bb1\u9bb2\u9bb3\u9bb4\u9bb5\u9bb6\u9bb7\u9bb8\u9bb9\u9bba\u9bbb\u9bbc\u9bbd\u9bbe\u9bbf\u9bc0\u9bc1\u9bc2\u9bc3\u9bc4\u9bc5\u9bc6\u9bc7\u9bc8\u9bc9\u9bca\u9bcb\u9bcc\u9bcd\u9bce\u9bcf\u9bd0\u9bd1\u9bd2\u9bd3\u9bd4\u9bd5\u9bd6\u9bd7\u9bd8\u9bd9\u9bda\u9bdb\u9bdc\u9bdd\u9bde\u9bdf\u9be0\u9be1\u9be2\u9be3\u9be4\u9be5\u9be6\u9be7\u9be8\u9be9\u9bea\u9beb\u9bec\u9bed\u9bee\u9bef\u9bf0\u9bf1\u9bf2\u9bf3\u9bf4\u9bf5\u9bf6\u9bf7\u9bf8\u9bf9\u9bfa\u9bfb\u9bfc\u9bfd\u9bfe\u9bff\u9c00\u9c01\u9c02\u9c03\u9c04\u9c05\u9c06\u9c07\u9c08\u9c09\u9c0a\u9c0b\u9c0c\u9c0d\u9c0e\u9c0f\u9c10\u9c11\u9c12\u9c13\u9c14\u9c15\u9c16\u9c17\u9c18\u9c19\u9c1a\u9c1b\u9c1c\u9c1d\u9c1e\u9c1f\u9c20\u9c21\u9c22\u9c23\u9c24\u9c25\u9c26\u9c27\u9c28\u9c29\u9c2a\u9c2b\u9c2c\u9c2d\u9c2e\u9c2f\u9c30\u9c31\u9c32\u9c33\u9c34\u9c35\u9c36\u9c37\u9c38\u9c39\u9c3a\u9c3b\u9c3c\u9c3d\u9c3e\u9c3f\u9c40\u9c41\u9c42\u9c43\u9c44\u9c45\u9c46\u9c47\u9c48\u9c49\u9c4a\u9c4b\u9c4c\u9c4d\u9c4e\u9c4f\u9c50\u9c51\u9c52\u9c53\u9c54\u9c55\u9c56\u9c57\u9c58\u9c59\u9c5a\u9c5b\u9c5c\u9c5d\u9c5e\u9c5f\u9c60\u9c61\u9c62\u9c63\u9c64\u9c65\u9c66\u9c67\u9c68\u9c69\u9c6a\u9c6b\u9c6c\u9c6d\u9c6e\u9c6f\u9c70\u9c71\u9c72\u9c73\u9c74\u9c75\u9c76\u9c77\u9c78\u9c79\u9c7a\u9c7b\u9c7c\u9c7d\u9c7e\u9c7f\u9c80\u9c81\u9c82\u9c83\u9c84\u9c85\u9c86\u9c87\u9c88\u9c89\u9c8a\u9c8b\u9c8c\u9c8d\u9c8e\u9c8f\u9c90\u9c91\u9c92\u9c93\u9c94\u9c95\u9c96\u9c97\u9c98\u9c99\u9c9a\u9c9b\u9c9c\u9c9d\u9c9e\u9c9f\u9ca0\u9ca1\u9ca2\u9ca3\u9ca4\u9ca5\u9ca6\u9ca7\u9ca8\u9ca9\u9caa\u9cab\u9cac\u9cad\u9cae\u9caf\u9cb0\u9cb1\u9cb2\u9cb3\u9cb4\u9cb5\u9cb6\u9cb7\u9cb8\u9cb9\u9cba\u9cbb\u9cbc\u9cbd\u9cbe\u9cbf\u9cc0\u9cc1\u9cc2\u9cc3\u9cc4\u9cc5\u9cc6\u9cc7\u9cc8\u9cc9\u9cca\u9ccb\u9ccc\u9ccd\u9cce\u9ccf\u9cd0\u9cd1\u9cd2\u9cd3\u9cd4\u9cd5\u9cd6\u9cd7\u9cd8\u9cd9\u9cda\u9cdb\u9cdc\u9cdd\u9cde\u9cdf\u9ce0\u9ce1\u9ce2\u9ce3\u9ce4\u9ce5\u9ce6\u9ce7\u9ce8\u9ce9\u9cea\u9ceb\u9cec\u9ced\u9cee\u9cef\u9cf0\u9cf1\u9cf2\u9cf3\u9cf4\u9cf5\u9cf6\u9cf7\u9cf8\u9cf9\u9cfa\u9cfb\u9cfc\u9cfd\u9cfe\u9cff\u9d00\u9d01\u9d02\u9d03\u9d04\u9d05\u9d06\u9d07\u9d08\u9d09\u9d0a\u9d0b\u9d0c\u9d0d\u9d0e\u9d0f\u9d10\u9d11\u9d12\u9d13\u9d14\u9d15\u9d16\u9d17\u9d18\u9d19\u9d1a\u9d1b\u9d1c\u9d1d\u9d1e\u9d1f\u9d20\u9d21\u9d22\u9d23\u9d24\u9d25\u9d26\u9d27\u9d28\u9d29\u9d2a\u9d2b\u9d2c\u9d2d\u9d2e\u9d2f\u9d30\u9d31\u9d32\u9d33\u9d34\u9d35\u9d36\u9d37\u9d38\u9d39\u9d3a\u9d3b\u9d3c\u9d3d\u9d3e\u9d3f\u9d40\u9d41\u9d42\u9d43\u9d44\u9d45\u9d46\u9d47\u9d48\u9d49\u9d4a\u9d4b\u9d4c\u9d4d\u9d4e\u9d4f\u9d50\u9d51\u9d52\u9d53\u9d54\u9d55\u9d56\u9d57\u9d58\u9d59\u9d5a\u9d5b\u9d5c\u9d5d\u9d5e\u9d5f\u9d60\u9d61\u9d62\u9d63\u9d64\u9d65\u9d66\u9d67\u9d68\u9d69\u9d6a\u9d6b\u9d6c\u9d6d\u9d6e\u9d6f\u9d70\u9d71\u9d72\u9d73\u9d74\u9d75\u9d76\u9d77\u9d78\u9d79\u9d7a\u9d7b\u9d7c\u9d7d\u9d7e\u9d7f\u9d80\u9d81\u9d82\u9d83\u9d84\u9d85\u9d86\u9d87\u9d88\u9d89\u9d8a\u9d8b\u9d8c\u9d8d\u9d8e\u9d8f\u9d90\u9d91\u9d92\u9d93\u9d94\u9d95\u9d96\u9d97\u9d98\u9d99\u9d9a\u9d9b\u9d9c\u9d9d\u9d9e\u9d9f\u9da0\u9da1\u9da2\u9da3\u9da4\u9da5\u9da6\u9da7\u9da8\u9da9\u9daa\u9dab\u9dac\u9dad\u9dae\u9daf\u9db0\u9db1\u9db2\u9db3\u9db4\u9db5\u9db6\u9db7\u9db8\u9db9\u9dba\u9dbb\u9dbc\u9dbd\u9dbe\u9dbf\u9dc0\u9dc1\u9dc2\u9dc3\u9dc4\u9dc5\u9dc6\u9dc7\u9dc8\u9dc9\u9dca\u9dcb\u9dcc\u9dcd\u9dce\u9dcf\u9dd0\u9dd1\u9dd2\u9dd3\u9dd4\u9dd5\u9dd6\u9dd7\u9dd8\u9dd9\u9dda\u9ddb\u9ddc\u9ddd\u9dde\u9ddf\u9de0\u9de1\u9de2\u9de3\u9de4\u9de5\u9de6\u9de7\u9de8\u9de9\u9dea\u9deb\u9dec\u9ded\u9dee\u9def\u9df0\u9df1\u9df2\u9df3\u9df4\u9df5\u9df6\u9df7\u9df8\u9df9\u9dfa\u9dfb\u9dfc\u9dfd\u9dfe\u9dff\u9e00\u9e01\u9e02\u9e03\u9e04\u9e05\u9e06\u9e07\u9e08\u9e09\u9e0a\u9e0b\u9e0c\u9e0d\u9e0e\u9e0f\u9e10\u9e11\u9e12\u9e13\u9e14\u9e15\u9e16\u9e17\u9e18\u9e19\u9e1a\u9e1b\u9e1c\u9e1d\u9e1e\u9e1f\u9e20\u9e21\u9e22\u9e23\u9e24\u9e25\u9e26\u9e27\u9e28\u9e29\u9e2a\u9e2b\u9e2c\u9e2d\u9e2e\u9e2f\u9e30\u9e31\u9e32\u9e33\u9e34\u9e35\u9e36\u9e37\u9e38\u9e39\u9e3a\u9e3b\u9e3c\u9e3d\u9e3e\u9e3f\u9e40\u9e41\u9e42\u9e43\u9e44\u9e45\u9e46\u9e47\u9e48\u9e49\u9e4a\u9e4b\u9e4c\u9e4d\u9e4e\u9e4f\u9e50\u9e51\u9e52\u9e53\u9e54\u9e55\u9e56\u9e57\u9e58\u9e59\u9e5a\u9e5b\u9e5c\u9e5d\u9e5e\u9e5f\u9e60\u9e61\u9e62\u9e63\u9e64\u9e65\u9e66\u9e67\u9e68\u9e69\u9e6a\u9e6b\u9e6c\u9e6d\u9e6e\u9e6f\u9e70\u9e71\u9e72\u9e73\u9e74\u9e75\u9e76\u9e77\u9e78\u9e79\u9e7a\u9e7b\u9e7c\u9e7d\u9e7e\u9e7f\u9e80\u9e81\u9e82\u9e83\u9e84\u9e85\u9e86\u9e87\u9e88\u9e89\u9e8a\u9e8b\u9e8c\u9e8d\u9e8e\u9e8f\u9e90\u9e91\u9e92\u9e93\u9e94\u9e95\u9e96\u9e97\u9e98\u9e99\u9e9a\u9e9b\u9e9c\u9e9d\u9e9e\u9e9f\u9ea0\u9ea1\u9ea2\u9ea3\u9ea4\u9ea5\u9ea6\u9ea7\u9ea8\u9ea9\u9eaa\u9eab\u9eac\u9ead\u9eae\u9eaf\u9eb0\u9eb1\u9eb2\u9eb3\u9eb4\u9eb5\u9eb6\u9eb7\u9eb8\u9eb9\u9eba\u9ebb\u9ebc\u9ebd\u9ebe\u9ebf\u9ec0\u9ec1\u9ec2\u9ec3\u9ec4\u9ec5\u9ec6\u9ec7\u9ec8\u9ec9\u9eca\u9ecb\u9ecc\u9ecd\u9ece\u9ecf\u9ed0\u9ed1\u9ed2\u9ed3\u9ed4\u9ed5\u9ed6\u9ed7\u9ed8\u9ed9\u9eda\u9edb\u9edc\u9edd\u9ede\u9edf\u9ee0\u9ee1\u9ee2\u9ee3\u9ee4\u9ee5\u9ee6\u9ee7\u9ee8\u9ee9\u9eea\u9eeb\u9eec\u9eed\u9eee\u9eef\u9ef0\u9ef1\u9ef2\u9ef3\u9ef4\u9ef5\u9ef6\u9ef7\u9ef8\u9ef9\u9efa\u9efb\u9efc\u9efd\u9efe\u9eff\u9f00\u9f01\u9f02\u9f03\u9f04\u9f05\u9f06\u9f07\u9f08\u9f09\u9f0a\u9f0b\u9f0c\u9f0d\u9f0e\u9f0f\u9f10\u9f11\u9f12\u9f13\u9f14\u9f15\u9f16\u9f17\u9f18\u9f19\u9f1a\u9f1b\u9f1c\u9f1d\u9f1e\u9f1f\u9f20\u9f21\u9f22\u9f23\u9f24\u9f25\u9f26\u9f27\u9f28\u9f29\u9f2a\u9f2b\u9f2c\u9f2d\u9f2e\u9f2f\u9f30\u9f31\u9f32\u9f33\u9f34\u9f35\u9f36\u9f37\u9f38\u9f39\u9f3a\u9f3b\u9f3c\u9f3d\u9f3e\u9f3f\u9f40\u9f41\u9f42\u9f43\u9f44\u9f45\u9f46\u9f47\u9f48\u9f49\u9f4a\u9f4b\u9f4c\u9f4d\u9f4e\u9f4f\u9f50\u9f51\u9f52\u9f53\u9f54\u9f55\u9f56\u9f57\u9f58\u9f59\u9f5a\u9f5b\u9f5c\u9f5d\u9f5e\u9f5f\u9f60\u9f61\u9f62\u9f63\u9f64\u9f65\u9f66\u9f67\u9f68\u9f69\u9f6a\u9f6b\u9f6c\u9f6d\u9f6e\u9f6f\u9f70\u9f71\u9f72\u9f73\u9f74\u9f75\u9f76\u9f77\u9f78\u9f79\u9f7a\u9f7b\u9f7c\u9f7d\u9f7e\u9f7f\u9f80\u9f81\u9f82\u9f83\u9f84\u9f85\u9f86\u9f87\u9f88\u9f89\u9f8a\u9f8b\u9f8c\u9f8d\u9f8e\u9f8f\u9f90\u9f91\u9f92\u9f93\u9f94\u9f95\u9f96\u9f97\u9f98\u9f99\u9f9a\u9f9b\u9f9c\u9f9d\u9f9e\u9f9f\u9fa0\u9fa1\u9fa2\u9fa3\u9fa4\u9fa5\u9fa6\u9fa7\u9fa8\u9fa9\u9faa\u9fab\u9fac\u9fad\u9fae\u9faf\u9fb0\u9fb1\u9fb2\u9fb3\u9fb4\u9fb5\u9fb6\u9fb7\u9fb8\u9fb9\u9fba\u9fbb\u9fbc\u9fbd\u9fbe\u9fbf\u9fc0\u9fc1\u9fc2\u9fc3\u9fc4\u9fc5\u9fc6\u9fc7\u9fc8\u9fc9\u9fca\u9fcb\u9fcc\u9fcd\u9fce\u9fcf\u9fd0\u9fd1\u9fd2\u9fd3\u9fd4\u9fd5\ua000\ua001\ua002\ua003\ua004\ua005\ua006\ua007\ua008\ua009\ua00a\ua00b\ua00c\ua00d\ua00e\ua00f\ua010\ua011\ua012\ua013\ua014\ua015\ua016\ua017\ua018\ua019\ua01a\ua01b\ua01c\ua01d\ua01e\ua01f\ua020\ua021\ua022\ua023\ua024\ua025\ua026\ua027\ua028\ua029\ua02a\ua02b\ua02c\ua02d\ua02e\ua02f\ua030\ua031\ua032\ua033\ua034\ua035\ua036\ua037\ua038\ua039\ua03a\ua03b\ua03c\ua03d\ua03e\ua03f\ua040\ua041\ua042\ua043\ua044\ua045\ua046\ua047\ua048\ua049\ua04a\ua04b\ua04c\ua04d\ua04e\ua04f\ua050\ua051\ua052\ua053\ua054\ua055\ua056\ua057\ua058\ua059\ua05a\ua05b\ua05c\ua05d\ua05e\ua05f\ua060\ua061\ua062\ua063\ua064\ua065\ua066\ua067\ua068\ua069\ua06a\ua06b\ua06c\ua06d\ua06e\ua06f\ua070\ua071\ua072\ua073\ua074\ua075\ua076\ua077\ua078\ua079\ua07a\ua07b\ua07c\ua07d\ua07e\ua07f\ua080\ua081\ua082\ua083\ua084\ua085\ua086\ua087\ua088\ua089\ua08a\ua08b\ua08c\ua08d\ua08e\ua08f\ua090\ua091\ua092\ua093\ua094\ua095\ua096\ua097\ua098\ua099\ua09a\ua09b\ua09c\ua09d\ua09e\ua09f\ua0a0\ua0a1\ua0a2\ua0a3\ua0a4\ua0a5\ua0a6\ua0a7\ua0a8\ua0a9\ua0aa\ua0ab\ua0ac\ua0ad\ua0ae\ua0af\ua0b0\ua0b1\ua0b2\ua0b3\ua0b4\ua0b5\ua0b6\ua0b7\ua0b8\ua0b9\ua0ba\ua0bb\ua0bc\ua0bd\ua0be\ua0bf\ua0c0\ua0c1\ua0c2\ua0c3\ua0c4\ua0c5\ua0c6\ua0c7\ua0c8\ua0c9\ua0ca\ua0cb\ua0cc\ua0cd\ua0ce\ua0cf\ua0d0\ua0d1\ua0d2\ua0d3\ua0d4\ua0d5\ua0d6\ua0d7\ua0d8\ua0d9\ua0da\ua0db\ua0dc\ua0dd\ua0de\ua0df\ua0e0\ua0e1\ua0e2\ua0e3\ua0e4\ua0e5\ua0e6\ua0e7\ua0e8\ua0e9\ua0ea\ua0eb\ua0ec\ua0ed\ua0ee\ua0ef\ua0f0\ua0f1\ua0f2\ua0f3\ua0f4\ua0f5\ua0f6\ua0f7\ua0f8\ua0f9\ua0fa\ua0fb\ua0fc\ua0fd\ua0fe\ua0ff\ua100\ua101\ua102\ua103\ua104\ua105\ua106\ua107\ua108\ua109\ua10a\ua10b\ua10c\ua10d\ua10e\ua10f\ua110\ua111\ua112\ua113\ua114\ua115\ua116\ua117\ua118\ua119\ua11a\ua11b\ua11c\ua11d\ua11e\ua11f\ua120\ua121\ua122\ua123\ua124\ua125\ua126\ua127\ua128\ua129\ua12a\ua12b\ua12c\ua12d\ua12e\ua12f\ua130\ua131\ua132\ua133\ua134\ua135\ua136\ua137\ua138\ua139\ua13a\ua13b\ua13c\ua13d\ua13e\ua13f\ua140\ua141\ua142\ua143\ua144\ua145\ua146\ua147\ua148\ua149\ua14a\ua14b\ua14c\ua14d\ua14e\ua14f\ua150\ua151\ua152\ua153\ua154\ua155\ua156\ua157\ua158\ua159\ua15a\ua15b\ua15c\ua15d\ua15e\ua15f\ua160\ua161\ua162\ua163\ua164\ua165\ua166\ua167\ua168\ua169\ua16a\ua16b\ua16c\ua16d\ua16e\ua16f\ua170\ua171\ua172\ua173\ua174\ua175\ua176\ua177\ua178\ua179\ua17a\ua17b\ua17c\ua17d\ua17e\ua17f\ua180\ua181\ua182\ua183\ua184\ua185\ua186\ua187\ua188\ua189\ua18a\ua18b\ua18c\ua18d\ua18e\ua18f\ua190\ua191\ua192\ua193\ua194\ua195\ua196\ua197\ua198\ua199\ua19a\ua19b\ua19c\ua19d\ua19e\ua19f\ua1a0\ua1a1\ua1a2\ua1a3\ua1a4\ua1a5\ua1a6\ua1a7\ua1a8\ua1a9\ua1aa\ua1ab\ua1ac\ua1ad\ua1ae\ua1af\ua1b0\ua1b1\ua1b2\ua1b3\ua1b4\ua1b5\ua1b6\ua1b7\ua1b8\ua1b9\ua1ba\ua1bb\ua1bc\ua1bd\ua1be\ua1bf\ua1c0\ua1c1\ua1c2\ua1c3\ua1c4\ua1c5\ua1c6\ua1c7\ua1c8\ua1c9\ua1ca\ua1cb\ua1cc\ua1cd\ua1ce\ua1cf\ua1d0\ua1d1\ua1d2\ua1d3\ua1d4\ua1d5\ua1d6\ua1d7\ua1d8\ua1d9\ua1da\ua1db\ua1dc\ua1dd\ua1de\ua1df\ua1e0\ua1e1\ua1e2\ua1e3\ua1e4\ua1e5\ua1e6\ua1e7\ua1e8\ua1e9\ua1ea\ua1eb\ua1ec\ua1ed\ua1ee\ua1ef\ua1f0\ua1f1\ua1f2\ua1f3\ua1f4\ua1f5\ua1f6\ua1f7\ua1f8\ua1f9\ua1fa\ua1fb\ua1fc\ua1fd\ua1fe\ua1ff\ua200\ua201\ua202\ua203\ua204\ua205\ua206\ua207\ua208\ua209\ua20a\ua20b\ua20c\ua20d\ua20e\ua20f\ua210\ua211\ua212\ua213\ua214\ua215\ua216\ua217\ua218\ua219\ua21a\ua21b\ua21c\ua21d\ua21e\ua21f\ua220\ua221\ua222\ua223\ua224\ua225\ua226\ua227\ua228\ua229\ua22a\ua22b\ua22c\ua22d\ua22e\ua22f\ua230\ua231\ua232\ua233\ua234\ua235\ua236\ua237\ua238\ua239\ua23a\ua23b\ua23c\ua23d\ua23e\ua23f\ua240\ua241\ua242\ua243\ua244\ua245\ua246\ua247\ua248\ua249\ua24a\ua24b\ua24c\ua24d\ua24e\ua24f\ua250\ua251\ua252\ua253\ua254\ua255\ua256\ua257\ua258\ua259\ua25a\ua25b\ua25c\ua25d\ua25e\ua25f\ua260\ua261\ua262\ua263\ua264\ua265\ua266\ua267\ua268\ua269\ua26a\ua26b\ua26c\ua26d\ua26e\ua26f\ua270\ua271\ua272\ua273\ua274\ua275\ua276\ua277\ua278\ua279\ua27a\ua27b\ua27c\ua27d\ua27e\ua27f\ua280\ua281\ua282\ua283\ua284\ua285\ua286\ua287\ua288\ua289\ua28a\ua28b\ua28c\ua28d\ua28e\ua28f\ua290\ua291\ua292\ua293\ua294\ua295\ua296\ua297\ua298\ua299\ua29a\ua29b\ua29c\ua29d\ua29e\ua29f\ua2a0\ua2a1\ua2a2\ua2a3\ua2a4\ua2a5\ua2a6\ua2a7\ua2a8\ua2a9\ua2aa\ua2ab\ua2ac\ua2ad\ua2ae\ua2af\ua2b0\ua2b1\ua2b2\ua2b3\ua2b4\ua2b5\ua2b6\ua2b7\ua2b8\ua2b9\ua2ba\ua2bb\ua2bc\ua2bd\ua2be\ua2bf\ua2c0\ua2c1\ua2c2\ua2c3\ua2c4\ua2c5\ua2c6\ua2c7\ua2c8\ua2c9\ua2ca\ua2cb\ua2cc\ua2cd\ua2ce\ua2cf\ua2d0\ua2d1\ua2d2\ua2d3\ua2d4\ua2d5\ua2d6\ua2d7\ua2d8\ua2d9\ua2da\ua2db\ua2dc\ua2dd\ua2de\ua2df\ua2e0\ua2e1\ua2e2\ua2e3\ua2e4\ua2e5\ua2e6\ua2e7\ua2e8\ua2e9\ua2ea\ua2eb\ua2ec\ua2ed\ua2ee\ua2ef\ua2f0\ua2f1\ua2f2\ua2f3\ua2f4\ua2f5\ua2f6\ua2f7\ua2f8\ua2f9\ua2fa\ua2fb\ua2fc\ua2fd\ua2fe\ua2ff\ua300\ua301\ua302\ua303\ua304\ua305\ua306\ua307\ua308\ua309\ua30a\ua30b\ua30c\ua30d\ua30e\ua30f\ua310\ua311\ua312\ua313\ua314\ua315\ua316\ua317\ua318\ua319\ua31a\ua31b\ua31c\ua31d\ua31e\ua31f\ua320\ua321\ua322\ua323\ua324\ua325\ua326\ua327\ua328\ua329\ua32a\ua32b\ua32c\ua32d\ua32e\ua32f\ua330\ua331\ua332\ua333\ua334\ua335\ua336\ua337\ua338\ua339\ua33a\ua33b\ua33c\ua33d\ua33e\ua33f\ua340\ua341\ua342\ua343\ua344\ua345\ua346\ua347\ua348\ua349\ua34a\ua34b\ua34c\ua34d\ua34e\ua34f\ua350\ua351\ua352\ua353\ua354\ua355\ua356\ua357\ua358\ua359\ua35a\ua35b\ua35c\ua35d\ua35e\ua35f\ua360\ua361\ua362\ua363\ua364\ua365\ua366\ua367\ua368\ua369\ua36a\ua36b\ua36c\ua36d\ua36e\ua36f\ua370\ua371\ua372\ua373\ua374\ua375\ua376\ua377\ua378\ua379\ua37a\ua37b\ua37c\ua37d\ua37e\ua37f\ua380\ua381\ua382\ua383\ua384\ua385\ua386\ua387\ua388\ua389\ua38a\ua38b\ua38c\ua38d\ua38e\ua38f\ua390\ua391\ua392\ua393\ua394\ua395\ua396\ua397\ua398\ua399\ua39a\ua39b\ua39c\ua39d\ua39e\ua39f\ua3a0\ua3a1\ua3a2\ua3a3\ua3a4\ua3a5\ua3a6\ua3a7\ua3a8\ua3a9\ua3aa\ua3ab\ua3ac\ua3ad\ua3ae\ua3af\ua3b0\ua3b1\ua3b2\ua3b3\ua3b4\ua3b5\ua3b6\ua3b7\ua3b8\ua3b9\ua3ba\ua3bb\ua3bc\ua3bd\ua3be\ua3bf\ua3c0\ua3c1\ua3c2\ua3c3\ua3c4\ua3c5\ua3c6\ua3c7\ua3c8\ua3c9\ua3ca\ua3cb\ua3cc\ua3cd\ua3ce\ua3cf\ua3d0\ua3d1\ua3d2\ua3d3\ua3d4\ua3d5\ua3d6\ua3d7\ua3d8\ua3d9\ua3da\ua3db\ua3dc\ua3dd\ua3de\ua3df\ua3e0\ua3e1\ua3e2\ua3e3\ua3e4\ua3e5\ua3e6\ua3e7\ua3e8\ua3e9\ua3ea\ua3eb\ua3ec\ua3ed\ua3ee\ua3ef\ua3f0\ua3f1\ua3f2\ua3f3\ua3f4\ua3f5\ua3f6\ua3f7\ua3f8\ua3f9\ua3fa\ua3fb\ua3fc\ua3fd\ua3fe\ua3ff\ua400\ua401\ua402\ua403\ua404\ua405\ua406\ua407\ua408\ua409\ua40a\ua40b\ua40c\ua40d\ua40e\ua40f\ua410\ua411\ua412\ua413\ua414\ua415\ua416\ua417\ua418\ua419\ua41a\ua41b\ua41c\ua41d\ua41e\ua41f\ua420\ua421\ua422\ua423\ua424\ua425\ua426\ua427\ua428\ua429\ua42a\ua42b\ua42c\ua42d\ua42e\ua42f\ua430\ua431\ua432\ua433\ua434\ua435\ua436\ua437\ua438\ua439\ua43a\ua43b\ua43c\ua43d\ua43e\ua43f\ua440\ua441\ua442\ua443\ua444\ua445\ua446\ua447\ua448\ua449\ua44a\ua44b\ua44c\ua44d\ua44e\ua44f\ua450\ua451\ua452\ua453\ua454\ua455\ua456\ua457\ua458\ua459\ua45a\ua45b\ua45c\ua45d\ua45e\ua45f\ua460\ua461\ua462\ua463\ua464\ua465\ua466\ua467\ua468\ua469\ua46a\ua46b\ua46c\ua46d\ua46e\ua46f\ua470\ua471\ua472\ua473\ua474\ua475\ua476\ua477\ua478\ua479\ua47a\ua47b\ua47c\ua47d\ua47e\ua47f\ua480\ua481\ua482\ua483\ua484\ua485\ua486\ua487\ua488\ua489\ua48a\ua48b\ua48c\ua4d0\ua4d1\ua4d2\ua4d3\ua4d4\ua4d5\ua4d6\ua4d7\ua4d8\ua4d9\ua4da\ua4db\ua4dc\ua4dd\ua4de\ua4df\ua4e0\ua4e1\ua4e2\ua4e3\ua4e4\ua4e5\ua4e6\ua4e7\ua4e8\ua4e9\ua4ea\ua4eb\ua4ec\ua4ed\ua4ee\ua4ef\ua4f0\ua4f1\ua4f2\ua4f3\ua4f4\ua4f5\ua4f6\ua4f7\ua4f8\ua4f9\ua4fa\ua4fb\ua4fc\ua4fd\ua500\ua501\ua502\ua503\ua504\ua505\ua506\ua507\ua508\ua509\ua50a\ua50b\ua50c\ua50d\ua50e\ua50f\ua510\ua511\ua512\ua513\ua514\ua515\ua516\ua517\ua518\ua519\ua51a\ua51b\ua51c\ua51d\ua51e\ua51f\ua520\ua521\ua522\ua523\ua524\ua525\ua526\ua527\ua528\ua529\ua52a\ua52b\ua52c\ua52d\ua52e\ua52f\ua530\ua531\ua532\ua533\ua534\ua535\ua536\ua537\ua538\ua539\ua53a\ua53b\ua53c\ua53d\ua53e\ua53f\ua540\ua541\ua542\ua543\ua544\ua545\ua546\ua547\ua548\ua549\ua54a\ua54b\ua54c\ua54d\ua54e\ua54f\ua550\ua551\ua552\ua553\ua554\ua555\ua556\ua557\ua558\ua559\ua55a\ua55b\ua55c\ua55d\ua55e\ua55f\ua560\ua561\ua562\ua563\ua564\ua565\ua566\ua567\ua568\ua569\ua56a\ua56b\ua56c\ua56d\ua56e\ua56f\ua570\ua571\ua572\ua573\ua574\ua575\ua576\ua577\ua578\ua579\ua57a\ua57b\ua57c\ua57d\ua57e\ua57f\ua580\ua581\ua582\ua583\ua584\ua585\ua586\ua587\ua588\ua589\ua58a\ua58b\ua58c\ua58d\ua58e\ua58f\ua590\ua591\ua592\ua593\ua594\ua595\ua596\ua597\ua598\ua599\ua59a\ua59b\ua59c\ua59d\ua59e\ua59f\ua5a0\ua5a1\ua5a2\ua5a3\ua5a4\ua5a5\ua5a6\ua5a7\ua5a8\ua5a9\ua5aa\ua5ab\ua5ac\ua5ad\ua5ae\ua5af\ua5b0\ua5b1\ua5b2\ua5b3\ua5b4\ua5b5\ua5b6\ua5b7\ua5b8\ua5b9\ua5ba\ua5bb\ua5bc\ua5bd\ua5be\ua5bf\ua5c0\ua5c1\ua5c2\ua5c3\ua5c4\ua5c5\ua5c6\ua5c7\ua5c8\ua5c9\ua5ca\ua5cb\ua5cc\ua5cd\ua5ce\ua5cf\ua5d0\ua5d1\ua5d2\ua5d3\ua5d4\ua5d5\ua5d6\ua5d7\ua5d8\ua5d9\ua5da\ua5db\ua5dc\ua5dd\ua5de\ua5df\ua5e0\ua5e1\ua5e2\ua5e3\ua5e4\ua5e5\ua5e6\ua5e7\ua5e8\ua5e9\ua5ea\ua5eb\ua5ec\ua5ed\ua5ee\ua5ef\ua5f0\ua5f1\ua5f2\ua5f3\ua5f4\ua5f5\ua5f6\ua5f7\ua5f8\ua5f9\ua5fa\ua5fb\ua5fc\ua5fd\ua5fe\ua5ff\ua600\ua601\ua602\ua603\ua604\ua605\ua606\ua607\ua608\ua609\ua60a\ua60b\ua60c\ua610\ua611\ua612\ua613\ua614\ua615\ua616\ua617\ua618\ua619\ua61a\ua61b\ua61c\ua61d\ua61e\ua61f\ua620\ua621\ua622\ua623\ua624\ua625\ua626\ua627\ua628\ua629\ua62a\ua62b\ua640\ua641\ua642\ua643\ua644\ua645\ua646\ua647\ua648\ua649\ua64a\ua64b\ua64c\ua64d\ua64e\ua64f\ua650\ua651\ua652\ua653\ua654\ua655\ua656\ua657\ua658\ua659\ua65a\ua65b\ua65c\ua65d\ua65e\ua65f\ua660\ua661\ua662\ua663\ua664\ua665\ua666\ua667\ua668\ua669\ua66a\ua66b\ua66c\ua66d\ua66e\ua66f\ua674\ua675\ua676\ua677\ua678\ua679\ua67a\ua67b\ua67c\ua67d\ua67f\ua680\ua681\ua682\ua683\ua684\ua685\ua686\ua687\ua688\ua689\ua68a\ua68b\ua68c\ua68d\ua68e\ua68f\ua690\ua691\ua692\ua693\ua694\ua695\ua696\ua697\ua698\ua699\ua69a\ua69b\ua69c\ua69d\ua69e\ua69f\ua6a0\ua6a1\ua6a2\ua6a3\ua6a4\ua6a5\ua6a6\ua6a7\ua6a8\ua6a9\ua6aa\ua6ab\ua6ac\ua6ad\ua6ae\ua6af\ua6b0\ua6b1\ua6b2\ua6b3\ua6b4\ua6b5\ua6b6\ua6b7\ua6b8\ua6b9\ua6ba\ua6bb\ua6bc\ua6bd\ua6be\ua6bf\ua6c0\ua6c1\ua6c2\ua6c3\ua6c4\ua6c5\ua6c6\ua6c7\ua6c8\ua6c9\ua6ca\ua6cb\ua6cc\ua6cd\ua6ce\ua6cf\ua6d0\ua6d1\ua6d2\ua6d3\ua6d4\ua6d5\ua6d6\ua6d7\ua6d8\ua6d9\ua6da\ua6db\ua6dc\ua6dd\ua6de\ua6df\ua6e0\ua6e1\ua6e2\ua6e3\ua6e4\ua6e5\ua6e6\ua6e7\ua6e8\ua6e9\ua6ea\ua6eb\ua6ec\ua6ed\ua6ee\ua6ef\ua6f0\ua6f1\ua717\ua718\ua719\ua71a\ua71b\ua71c\ua71d\ua71e\ua71f\ua722\ua723\ua724\ua725\ua726\ua727\ua728\ua729\ua72a\ua72b\ua72c\ua72d\ua72e\ua72f\ua730\ua731\ua732\ua733\ua734\ua735\ua736\ua737\ua738\ua739\ua73a\ua73b\ua73c\ua73d\ua73e\ua73f\ua740\ua741\ua742\ua743\ua744\ua745\ua746\ua747\ua748\ua749\ua74a\ua74b\ua74c\ua74d\ua74e\ua74f\ua750\ua751\ua752\ua753\ua754\ua755\ua756\ua757\ua758\ua759\ua75a\ua75b\ua75c\ua75d\ua75e\ua75f\ua760\ua761\ua762\ua763\ua764\ua765\ua766\ua767\ua768\ua769\ua76a\ua76b\ua76c\ua76d\ua76e\ua76f\ua770\ua771\ua772\ua773\ua774\ua775\ua776\ua777\ua778\ua779\ua77a\ua77b\ua77c\ua77d\ua77e\ua77f\ua780\ua781\ua782\ua783\ua784\ua785\ua786\ua787\ua788\ua78b\ua78c\ua78d\ua78e\ua78f\ua790\ua791\ua792\ua793\ua794\ua795\ua796\ua797\ua798\ua799\ua79a\ua79b\ua79c\ua79d\ua79e\ua79f\ua7a0\ua7a1\ua7a2\ua7a3\ua7a4\ua7a5\ua7a6\ua7a7\ua7a8\ua7a9\ua7aa\ua7ab\ua7ac\ua7ad\ua7ae\ua7b0\ua7b1\ua7b2\ua7b3\ua7b4\ua7b5\ua7b6\ua7b7\ua7f7\ua7f8\ua7f9\ua7fa\ua7fb\ua7fc\ua7fd\ua7fe\ua7ff\ua800\ua801\ua802\ua803\ua804\ua805\ua806\ua807\ua808\ua809\ua80a\ua80b\ua80c\ua80d\ua80e\ua80f\ua810\ua811\ua812\ua813\ua814\ua815\ua816\ua817\ua818\ua819\ua81a\ua81b\ua81c\ua81d\ua81e\ua81f\ua820\ua821\ua822\ua823\ua824\ua825\ua826\ua827\ua840\ua841\ua842\ua843\ua844\ua845\ua846\ua847\ua848\ua849\ua84a\ua84b\ua84c\ua84d\ua84e\ua84f\ua850\ua851\ua852\ua853\ua854\ua855\ua856\ua857\ua858\ua859\ua85a\ua85b\ua85c\ua85d\ua85e\ua85f\ua860\ua861\ua862\ua863\ua864\ua865\ua866\ua867\ua868\ua869\ua86a\ua86b\ua86c\ua86d\ua86e\ua86f\ua870\ua871\ua872\ua873\ua880\ua881\ua882\ua883\ua884\ua885\ua886\ua887\ua888\ua889\ua88a\ua88b\ua88c\ua88d\ua88e\ua88f\ua890\ua891\ua892\ua893\ua894\ua895\ua896\ua897\ua898\ua899\ua89a\ua89b\ua89c\ua89d\ua89e\ua89f\ua8a0\ua8a1\ua8a2\ua8a3\ua8a4\ua8a5\ua8a6\ua8a7\ua8a8\ua8a9\ua8aa\ua8ab\ua8ac\ua8ad\ua8ae\ua8af\ua8b0\ua8b1\ua8b2\ua8b3\ua8b4\ua8b5\ua8b6\ua8b7\ua8b8\ua8b9\ua8ba\ua8bb\ua8bc\ua8bd\ua8be\ua8bf\ua8c0\ua8c1\ua8c2\ua8c3\ua8c4\ua8c5\ua8d0\ua8d1\ua8d2\ua8d3\ua8d4\ua8d5\ua8d6\ua8d7\ua8d8\ua8d9\ua8e0\ua8e1\ua8e2\ua8e3\ua8e4\ua8e5\ua8e6\ua8e7\ua8e8\ua8e9\ua8ea\ua8eb\ua8ec\ua8ed\ua8ee\ua8ef\ua8f0\ua8f1\ua8f2\ua8f3\ua8f4\ua8f5\ua8f6\ua8f7\ua8fb\ua8fd\ua900\ua901\ua902\ua903\ua904\ua905\ua906\ua907\ua908\ua909\ua90a\ua90b\ua90c\ua90d\ua90e\ua90f\ua910\ua911\ua912\ua913\ua914\ua915\ua916\ua917\ua918\ua919\ua91a\ua91b\ua91c\ua91d\ua91e\ua91f\ua920\ua921\ua922\ua923\ua924\ua925\ua926\ua927\ua928\ua929\ua92a\ua92b\ua92c\ua92d\ua930\ua931\ua932\ua933\ua934\ua935\ua936\ua937\ua938\ua939\ua93a\ua93b\ua93c\ua93d\ua93e\ua93f\ua940\ua941\ua942\ua943\ua944\ua945\ua946\ua947\ua948\ua949\ua94a\ua94b\ua94c\ua94d\ua94e\ua94f\ua950\ua951\ua952\ua953\ua960\ua961\ua962\ua963\ua964\ua965\ua966\ua967\ua968\ua969\ua96a\ua96b\ua96c\ua96d\ua96e\ua96f\ua970\ua971\ua972\ua973\ua974\ua975\ua976\ua977\ua978\ua979\ua97a\ua97b\ua97c\ua980\ua981\ua982\ua983\ua984\ua985\ua986\ua987\ua988\ua989\ua98a\ua98b\ua98c\ua98d\ua98e\ua98f\ua990\ua991\ua992\ua993\ua994\ua995\ua996\ua997\ua998\ua999\ua99a\ua99b\ua99c\ua99d\ua99e\ua99f\ua9a0\ua9a1\ua9a2\ua9a3\ua9a4\ua9a5\ua9a6\ua9a7\ua9a8\ua9a9\ua9aa\ua9ab\ua9ac\ua9ad\ua9ae\ua9af\ua9b0\ua9b1\ua9b2\ua9b3\ua9b4\ua9b5\ua9b6\ua9b7\ua9b8\ua9b9\ua9ba\ua9bb\ua9bc\ua9bd\ua9be\ua9bf\ua9c0\ua9cf\ua9d0\ua9d1\ua9d2\ua9d3\ua9d4\ua9d5\ua9d6\ua9d7\ua9d8\ua9d9\ua9e0\ua9e1\ua9e2\ua9e3\ua9e4\ua9e5\ua9e6\ua9e7\ua9e8\ua9e9\ua9ea\ua9eb\ua9ec\ua9ed\ua9ee\ua9ef\ua9f0\ua9f1\ua9f2\ua9f3\ua9f4\ua9f5\ua9f6\ua9f7\ua9f8\ua9f9\ua9fa\ua9fb\ua9fc\ua9fd\ua9fe\uaa00\uaa01\uaa02\uaa03\uaa04\uaa05\uaa06\uaa07\uaa08\uaa09\uaa0a\uaa0b\uaa0c\uaa0d\uaa0e\uaa0f\uaa10\uaa11\uaa12\uaa13\uaa14\uaa15\uaa16\uaa17\uaa18\uaa19\uaa1a\uaa1b\uaa1c\uaa1d\uaa1e\uaa1f\uaa20\uaa21\uaa22\uaa23\uaa24\uaa25\uaa26\uaa27\uaa28\uaa29\uaa2a\uaa2b\uaa2c\uaa2d\uaa2e\uaa2f\uaa30\uaa31\uaa32\uaa33\uaa34\uaa35\uaa36\uaa40\uaa41\uaa42\uaa43\uaa44\uaa45\uaa46\uaa47\uaa48\uaa49\uaa4a\uaa4b\uaa4c\uaa4d\uaa50\uaa51\uaa52\uaa53\uaa54\uaa55\uaa56\uaa57\uaa58\uaa59\uaa60\uaa61\uaa62\uaa63\uaa64\uaa65\uaa66\uaa67\uaa68\uaa69\uaa6a\uaa6b\uaa6c\uaa6d\uaa6e\uaa6f\uaa70\uaa71\uaa72\uaa73\uaa74\uaa75\uaa76\uaa7a\uaa7b\uaa7c\uaa7d\uaa7e\uaa7f\uaa80\uaa81\uaa82\uaa83\uaa84\uaa85\uaa86\uaa87\uaa88\uaa89\uaa8a\uaa8b\uaa8c\uaa8d\uaa8e\uaa8f\uaa90\uaa91\uaa92\uaa93\uaa94\uaa95\uaa96\uaa97\uaa98\uaa99\uaa9a\uaa9b\uaa9c\uaa9d\uaa9e\uaa9f\uaaa0\uaaa1\uaaa2\uaaa3\uaaa4\uaaa5\uaaa6\uaaa7\uaaa8\uaaa9\uaaaa\uaaab\uaaac\uaaad\uaaae\uaaaf\uaab0\uaab1\uaab2\uaab3\uaab4\uaab5\uaab6\uaab7\uaab8\uaab9\uaaba\uaabb\uaabc\uaabd\uaabe\uaabf\uaac0\uaac1\uaac2\uaadb\uaadc\uaadd\uaae0\uaae1\uaae2\uaae3\uaae4\uaae5\uaae6\uaae7\uaae8\uaae9\uaaea\uaaeb\uaaec\uaaed\uaaee\uaaef\uaaf2\uaaf3\uaaf4\uaaf5\uaaf6\uab01\uab02\uab03\uab04\uab05\uab06\uab09\uab0a\uab0b\uab0c\uab0d\uab0e\uab11\uab12\uab13\uab14\uab15\uab16\uab20\uab21\uab22\uab23\uab24\uab25\uab26\uab28\uab29\uab2a\uab2b\uab2c\uab2d\uab2e\uab30\uab31\uab32\uab33\uab34\uab35\uab36\uab37\uab38\uab39\uab3a\uab3b\uab3c\uab3d\uab3e\uab3f\uab40\uab41\uab42\uab43\uab44\uab45\uab46\uab47\uab48\uab49\uab4a\uab4b\uab4c\uab4d\uab4e\uab4f\uab50\uab51\uab52\uab53\uab54\uab55\uab56\uab57\uab58\uab59\uab5a\uab5c\uab5d\uab5e\uab5f\uab60\uab61\uab62\uab63\uab64\uab65\uab70\uab71\uab72\uab73\uab74\uab75\uab76\uab77\uab78\uab79\uab7a\uab7b\uab7c\uab7d\uab7e\uab7f\uab80\uab81\uab82\uab83\uab84\uab85\uab86\uab87\uab88\uab89\uab8a\uab8b\uab8c\uab8d\uab8e\uab8f\uab90\uab91\uab92\uab93\uab94\uab95\uab96\uab97\uab98\uab99\uab9a\uab9b\uab9c\uab9d\uab9e\uab9f\uaba0\uaba1\uaba2\uaba3\uaba4\uaba5\uaba6\uaba7\uaba8\uaba9\uabaa\uabab\uabac\uabad\uabae\uabaf\uabb0\uabb1\uabb2\uabb3\uabb4\uabb5\uabb6\uabb7\uabb8\uabb9\uabba\uabbb\uabbc\uabbd\uabbe\uabbf\uabc0\uabc1\uabc2\uabc3\uabc4\uabc5\uabc6\uabc7\uabc8\uabc9\uabca\uabcb\uabcc\uabcd\uabce\uabcf\uabd0\uabd1\uabd2\uabd3\uabd4\uabd5\uabd6\uabd7\uabd8\uabd9\uabda\uabdb\uabdc\uabdd\uabde\uabdf\uabe0\uabe1\uabe2\uabe3\uabe4\uabe5\uabe6\uabe7\uabe8\uabe9\uabea\uabec\uabed\uabf0\uabf1\uabf2\uabf3\uabf4\uabf5\uabf6\uabf7\uabf8\uabf9\uac00\uac01\uac02\uac03\uac04\uac05\uac06\uac07\uac08\uac09\uac0a\uac0b\uac0c\uac0d\uac0e\uac0f\uac10\uac11\uac12\uac13\uac14\uac15\uac16\uac17\uac18\uac19\uac1a\uac1b\uac1c\uac1d\uac1e\uac1f\uac20\uac21\uac22\uac23\uac24\uac25\uac26\uac27\uac28\uac29\uac2a\uac2b\uac2c\uac2d\uac2e\uac2f\uac30\uac31\uac32\uac33\uac34\uac35\uac36\uac37\uac38\uac39\uac3a\uac3b\uac3c\uac3d\uac3e\uac3f\uac40\uac41\uac42\uac43\uac44\uac45\uac46\uac47\uac48\uac49\uac4a\uac4b\uac4c\uac4d\uac4e\uac4f\uac50\uac51\uac52\uac53\uac54\uac55\uac56\uac57\uac58\uac59\uac5a\uac5b\uac5c\uac5d\uac5e\uac5f\uac60\uac61\uac62\uac63\uac64\uac65\uac66\uac67\uac68\uac69\uac6a\uac6b\uac6c\uac6d\uac6e\uac6f\uac70\uac71\uac72\uac73\uac74\uac75\uac76\uac77\uac78\uac79\uac7a\uac7b\uac7c\uac7d\uac7e\uac7f\uac80\uac81\uac82\uac83\uac84\uac85\uac86\uac87\uac88\uac89\uac8a\uac8b\uac8c\uac8d\uac8e\uac8f\uac90\uac91\uac92\uac93\uac94\uac95\uac96\uac97\uac98\uac99\uac9a\uac9b\uac9c\uac9d\uac9e\uac9f\uaca0\uaca1\uaca2\uaca3\uaca4\uaca5\uaca6\uaca7\uaca8\uaca9\uacaa\uacab\uacac\uacad\uacae\uacaf\uacb0\uacb1\uacb2\uacb3\uacb4\uacb5\uacb6\uacb7\uacb8\uacb9\uacba\uacbb\uacbc\uacbd\uacbe\uacbf\uacc0\uacc1\uacc2\uacc3\uacc4\uacc5\uacc6\uacc7\uacc8\uacc9\uacca\uaccb\uaccc\uaccd\uacce\uaccf\uacd0\uacd1\uacd2\uacd3\uacd4\uacd5\uacd6\uacd7\uacd8\uacd9\uacda\uacdb\uacdc\uacdd\uacde\uacdf\uace0\uace1\uace2\uace3\uace4\uace5\uace6\uace7\uace8\uace9\uacea\uaceb\uacec\uaced\uacee\uacef\uacf0\uacf1\uacf2\uacf3\uacf4\uacf5\uacf6\uacf7\uacf8\uacf9\uacfa\uacfb\uacfc\uacfd\uacfe\uacff\uad00\uad01\uad02\uad03\uad04\uad05\uad06\uad07\uad08\uad09\uad0a\uad0b\uad0c\uad0d\uad0e\uad0f\uad10\uad11\uad12\uad13\uad14\uad15\uad16\uad17\uad18\uad19\uad1a\uad1b\uad1c\uad1d\uad1e\uad1f\uad20\uad21\uad22\uad23\uad24\uad25\uad26\uad27\uad28\uad29\uad2a\uad2b\uad2c\uad2d\uad2e\uad2f\uad30\uad31\uad32\uad33\uad34\uad35\uad36\uad37\uad38\uad39\uad3a\uad3b\uad3c\uad3d\uad3e\uad3f\uad40\uad41\uad42\uad43\uad44\uad45\uad46\uad47\uad48\uad49\uad4a\uad4b\uad4c\uad4d\uad4e\uad4f\uad50\uad51\uad52\uad53\uad54\uad55\uad56\uad57\uad58\uad59\uad5a\uad5b\uad5c\uad5d\uad5e\uad5f\uad60\uad61\uad62\uad63\uad64\uad65\uad66\uad67\uad68\uad69\uad6a\uad6b\uad6c\uad6d\uad6e\uad6f\uad70\uad71\uad72\uad73\uad74\uad75\uad76\uad77\uad78\uad79\uad7a\uad7b\uad7c\uad7d\uad7e\uad7f\uad80\uad81\uad82\uad83\uad84\uad85\uad86\uad87\uad88\uad89\uad8a\uad8b\uad8c\uad8d\uad8e\uad8f\uad90\uad91\uad92\uad93\uad94\uad95\uad96\uad97\uad98\uad99\uad9a\uad9b\uad9c\uad9d\uad9e\uad9f\uada0\uada1\uada2\uada3\uada4\uada5\uada6\uada7\uada8\uada9\uadaa\uadab\uadac\uadad\uadae\uadaf\uadb0\uadb1\uadb2\uadb3\uadb4\uadb5\uadb6\uadb7\uadb8\uadb9\uadba\uadbb\uadbc\uadbd\uadbe\uadbf\uadc0\uadc1\uadc2\uadc3\uadc4\uadc5\uadc6\uadc7\uadc8\uadc9\uadca\uadcb\uadcc\uadcd\uadce\uadcf\uadd0\uadd1\uadd2\uadd3\uadd4\uadd5\uadd6\uadd7\uadd8\uadd9\uadda\uaddb\uaddc\uaddd\uadde\uaddf\uade0\uade1\uade2\uade3\uade4\uade5\uade6\uade7\uade8\uade9\uadea\uadeb\uadec\uaded\uadee\uadef\uadf0\uadf1\uadf2\uadf3\uadf4\uadf5\uadf6\uadf7\uadf8\uadf9\uadfa\uadfb\uadfc\uadfd\uadfe\uadff\uae00\uae01\uae02\uae03\uae04\uae05\uae06\uae07\uae08\uae09\uae0a\uae0b\uae0c\uae0d\uae0e\uae0f\uae10\uae11\uae12\uae13\uae14\uae15\uae16\uae17\uae18\uae19\uae1a\uae1b\uae1c\uae1d\uae1e\uae1f\uae20\uae21\uae22\uae23\uae24\uae25\uae26\uae27\uae28\uae29\uae2a\uae2b\uae2c\uae2d\uae2e\uae2f\uae30\uae31\uae32\uae33\uae34\uae35\uae36\uae37\uae38\uae39\uae3a\uae3b\uae3c\uae3d\uae3e\uae3f\uae40\uae41\uae42\uae43\uae44\uae45\uae46\uae47\uae48\uae49\uae4a\uae4b\uae4c\uae4d\uae4e\uae4f\uae50\uae51\uae52\uae53\uae54\uae55\uae56\uae57\uae58\uae59\uae5a\uae5b\uae5c\uae5d\uae5e\uae5f\uae60\uae61\uae62\uae63\uae64\uae65\uae66\uae67\uae68\uae69\uae6a\uae6b\uae6c\uae6d\uae6e\uae6f\uae70\uae71\uae72\uae73\uae74\uae75\uae76\uae77\uae78\uae79\uae7a\uae7b\uae7c\uae7d\uae7e\uae7f\uae80\uae81\uae82\uae83\uae84\uae85\uae86\uae87\uae88\uae89\uae8a\uae8b\uae8c\uae8d\uae8e\uae8f\uae90\uae91\uae92\uae93\uae94\uae95\uae96\uae97\uae98\uae99\uae9a\uae9b\uae9c\uae9d\uae9e\uae9f\uaea0\uaea1\uaea2\uaea3\uaea4\uaea5\uaea6\uaea7\uaea8\uaea9\uaeaa\uaeab\uaeac\uaead\uaeae\uaeaf\uaeb0\uaeb1\uaeb2\uaeb3\uaeb4\uaeb5\uaeb6\uaeb7\uaeb8\uaeb9\uaeba\uaebb\uaebc\uaebd\uaebe\uaebf\uaec0\uaec1\uaec2\uaec3\uaec4\uaec5\uaec6\uaec7\uaec8\uaec9\uaeca\uaecb\uaecc\uaecd\uaece\uaecf\uaed0\uaed1\uaed2\uaed3\uaed4\uaed5\uaed6\uaed7\uaed8\uaed9\uaeda\uaedb\uaedc\uaedd\uaede\uaedf\uaee0\uaee1\uaee2\uaee3\uaee4\uaee5\uaee6\uaee7\uaee8\uaee9\uaeea\uaeeb\uaeec\uaeed\uaeee\uaeef\uaef0\uaef1\uaef2\uaef3\uaef4\uaef5\uaef6\uaef7\uaef8\uaef9\uaefa\uaefb\uaefc\uaefd\uaefe\uaeff\uaf00\uaf01\uaf02\uaf03\uaf04\uaf05\uaf06\uaf07\uaf08\uaf09\uaf0a\uaf0b\uaf0c\uaf0d\uaf0e\uaf0f\uaf10\uaf11\uaf12\uaf13\uaf14\uaf15\uaf16\uaf17\uaf18\uaf19\uaf1a\uaf1b\uaf1c\uaf1d\uaf1e\uaf1f\uaf20\uaf21\uaf22\uaf23\uaf24\uaf25\uaf26\uaf27\uaf28\uaf29\uaf2a\uaf2b\uaf2c\uaf2d\uaf2e\uaf2f\uaf30\uaf31\uaf32\uaf33\uaf34\uaf35\uaf36\uaf37\uaf38\uaf39\uaf3a\uaf3b\uaf3c\uaf3d\uaf3e\uaf3f\uaf40\uaf41\uaf42\uaf43\uaf44\uaf45\uaf46\uaf47\uaf48\uaf49\uaf4a\uaf4b\uaf4c\uaf4d\uaf4e\uaf4f\uaf50\uaf51\uaf52\uaf53\uaf54\uaf55\uaf56\uaf57\uaf58\uaf59\uaf5a\uaf5b\uaf5c\uaf5d\uaf5e\uaf5f\uaf60\uaf61\uaf62\uaf63\uaf64\uaf65\uaf66\uaf67\uaf68\uaf69\uaf6a\uaf6b\uaf6c\uaf6d\uaf6e\uaf6f\uaf70\uaf71\uaf72\uaf73\uaf74\uaf75\uaf76\uaf77\uaf78\uaf79\uaf7a\uaf7b\uaf7c\uaf7d\uaf7e\uaf7f\uaf80\uaf81\uaf82\uaf83\uaf84\uaf85\uaf86\uaf87\uaf88\uaf89\uaf8a\uaf8b\uaf8c\uaf8d\uaf8e\uaf8f\uaf90\uaf91\uaf92\uaf93\uaf94\uaf95\uaf96\uaf97\uaf98\uaf99\uaf9a\uaf9b\uaf9c\uaf9d\uaf9e\uaf9f\uafa0\uafa1\uafa2\uafa3\uafa4\uafa5\uafa6\uafa7\uafa8\uafa9\uafaa\uafab\uafac\uafad\uafae\uafaf\uafb0\uafb1\uafb2\uafb3\uafb4\uafb5\uafb6\uafb7\uafb8\uafb9\uafba\uafbb\uafbc\uafbd\uafbe\uafbf\uafc0\uafc1\uafc2\uafc3\uafc4\uafc5\uafc6\uafc7\uafc8\uafc9\uafca\uafcb\uafcc\uafcd\uafce\uafcf\uafd0\uafd1\uafd2\uafd3\uafd4\uafd5\uafd6\uafd7\uafd8\uafd9\uafda\uafdb\uafdc\uafdd\uafde\uafdf\uafe0\uafe1\uafe2\uafe3\uafe4\uafe5\uafe6\uafe7\uafe8\uafe9\uafea\uafeb\uafec\uafed\uafee\uafef\uaff0\uaff1\uaff2\uaff3\uaff4\uaff5\uaff6\uaff7\uaff8\uaff9\uaffa\uaffb\uaffc\uaffd\uaffe\uafff\ub000\ub001\ub002\ub003\ub004\ub005\ub006\ub007\ub008\ub009\ub00a\ub00b\ub00c\ub00d\ub00e\ub00f\ub010\ub011\ub012\ub013\ub014\ub015\ub016\ub017\ub018\ub019\ub01a\ub01b\ub01c\ub01d\ub01e\ub01f\ub020\ub021\ub022\ub023\ub024\ub025\ub026\ub027\ub028\ub029\ub02a\ub02b\ub02c\ub02d\ub02e\ub02f\ub030\ub031\ub032\ub033\ub034\ub035\ub036\ub037\ub038\ub039\ub03a\ub03b\ub03c\ub03d\ub03e\ub03f\ub040\ub041\ub042\ub043\ub044\ub045\ub046\ub047\ub048\ub049\ub04a\ub04b\ub04c\ub04d\ub04e\ub04f\ub050\ub051\ub052\ub053\ub054\ub055\ub056\ub057\ub058\ub059\ub05a\ub05b\ub05c\ub05d\ub05e\ub05f\ub060\ub061\ub062\ub063\ub064\ub065\ub066\ub067\ub068\ub069\ub06a\ub06b\ub06c\ub06d\ub06e\ub06f\ub070\ub071\ub072\ub073\ub074\ub075\ub076\ub077\ub078\ub079\ub07a\ub07b\ub07c\ub07d\ub07e\ub07f\ub080\ub081\ub082\ub083\ub084\ub085\ub086\ub087\ub088\ub089\ub08a\ub08b\ub08c\ub08d\ub08e\ub08f\ub090\ub091\ub092\ub093\ub094\ub095\ub096\ub097\ub098\ub099\ub09a\ub09b\ub09c\ub09d\ub09e\ub09f\ub0a0\ub0a1\ub0a2\ub0a3\ub0a4\ub0a5\ub0a6\ub0a7\ub0a8\ub0a9\ub0aa\ub0ab\ub0ac\ub0ad\ub0ae\ub0af\ub0b0\ub0b1\ub0b2\ub0b3\ub0b4\ub0b5\ub0b6\ub0b7\ub0b8\ub0b9\ub0ba\ub0bb\ub0bc\ub0bd\ub0be\ub0bf\ub0c0\ub0c1\ub0c2\ub0c3\ub0c4\ub0c5\ub0c6\ub0c7\ub0c8\ub0c9\ub0ca\ub0cb\ub0cc\ub0cd\ub0ce\ub0cf\ub0d0\ub0d1\ub0d2\ub0d3\ub0d4\ub0d5\ub0d6\ub0d7\ub0d8\ub0d9\ub0da\ub0db\ub0dc\ub0dd\ub0de\ub0df\ub0e0\ub0e1\ub0e2\ub0e3\ub0e4\ub0e5\ub0e6\ub0e7\ub0e8\ub0e9\ub0ea\ub0eb\ub0ec\ub0ed\ub0ee\ub0ef\ub0f0\ub0f1\ub0f2\ub0f3\ub0f4\ub0f5\ub0f6\ub0f7\ub0f8\ub0f9\ub0fa\ub0fb\ub0fc\ub0fd\ub0fe\ub0ff\ub100\ub101\ub102\ub103\ub104\ub105\ub106\ub107\ub108\ub109\ub10a\ub10b\ub10c\ub10d\ub10e\ub10f\ub110\ub111\ub112\ub113\ub114\ub115\ub116\ub117\ub118\ub119\ub11a\ub11b\ub11c\ub11d\ub11e\ub11f\ub120\ub121\ub122\ub123\ub124\ub125\ub126\ub127\ub128\ub129\ub12a\ub12b\ub12c\ub12d\ub12e\ub12f\ub130\ub131\ub132\ub133\ub134\ub135\ub136\ub137\ub138\ub139\ub13a\ub13b\ub13c\ub13d\ub13e\ub13f\ub140\ub141\ub142\ub143\ub144\ub145\ub146\ub147\ub148\ub149\ub14a\ub14b\ub14c\ub14d\ub14e\ub14f\ub150\ub151\ub152\ub153\ub154\ub155\ub156\ub157\ub158\ub159\ub15a\ub15b\ub15c\ub15d\ub15e\ub15f\ub160\ub161\ub162\ub163\ub164\ub165\ub166\ub167\ub168\ub169\ub16a\ub16b\ub16c\ub16d\ub16e\ub16f\ub170\ub171\ub172\ub173\ub174\ub175\ub176\ub177\ub178\ub179\ub17a\ub17b\ub17c\ub17d\ub17e\ub17f\ub180\ub181\ub182\ub183\ub184\ub185\ub186\ub187\ub188\ub189\ub18a\ub18b\ub18c\ub18d\ub18e\ub18f\ub190\ub191\ub192\ub193\ub194\ub195\ub196\ub197\ub198\ub199\ub19a\ub19b\ub19c\ub19d\ub19e\ub19f\ub1a0\ub1a1\ub1a2\ub1a3\ub1a4\ub1a5\ub1a6\ub1a7\ub1a8\ub1a9\ub1aa\ub1ab\ub1ac\ub1ad\ub1ae\ub1af\ub1b0\ub1b1\ub1b2\ub1b3\ub1b4\ub1b5\ub1b6\ub1b7\ub1b8\ub1b9\ub1ba\ub1bb\ub1bc\ub1bd\ub1be\ub1bf\ub1c0\ub1c1\ub1c2\ub1c3\ub1c4\ub1c5\ub1c6\ub1c7\ub1c8\ub1c9\ub1ca\ub1cb\ub1cc\ub1cd\ub1ce\ub1cf\ub1d0\ub1d1\ub1d2\ub1d3\ub1d4\ub1d5\ub1d6\ub1d7\ub1d8\ub1d9\ub1da\ub1db\ub1dc\ub1dd\ub1de\ub1df\ub1e0\ub1e1\ub1e2\ub1e3\ub1e4\ub1e5\ub1e6\ub1e7\ub1e8\ub1e9\ub1ea\ub1eb\ub1ec\ub1ed\ub1ee\ub1ef\ub1f0\ub1f1\ub1f2\ub1f3\ub1f4\ub1f5\ub1f6\ub1f7\ub1f8\ub1f9\ub1fa\ub1fb\ub1fc\ub1fd\ub1fe\ub1ff\ub200\ub201\ub202\ub203\ub204\ub205\ub206\ub207\ub208\ub209\ub20a\ub20b\ub20c\ub20d\ub20e\ub20f\ub210\ub211\ub212\ub213\ub214\ub215\ub216\ub217\ub218\ub219\ub21a\ub21b\ub21c\ub21d\ub21e\ub21f\ub220\ub221\ub222\ub223\ub224\ub225\ub226\ub227\ub228\ub229\ub22a\ub22b\ub22c\ub22d\ub22e\ub22f\ub230\ub231\ub232\ub233\ub234\ub235\ub236\ub237\ub238\ub239\ub23a\ub23b\ub23c\ub23d\ub23e\ub23f\ub240\ub241\ub242\ub243\ub244\ub245\ub246\ub247\ub248\ub249\ub24a\ub24b\ub24c\ub24d\ub24e\ub24f\ub250\ub251\ub252\ub253\ub254\ub255\ub256\ub257\ub258\ub259\ub25a\ub25b\ub25c\ub25d\ub25e\ub25f\ub260\ub261\ub262\ub263\ub264\ub265\ub266\ub267\ub268\ub269\ub26a\ub26b\ub26c\ub26d\ub26e\ub26f\ub270\ub271\ub272\ub273\ub274\ub275\ub276\ub277\ub278\ub279\ub27a\ub27b\ub27c\ub27d\ub27e\ub27f\ub280\ub281\ub282\ub283\ub284\ub285\ub286\ub287\ub288\ub289\ub28a\ub28b\ub28c\ub28d\ub28e\ub28f\ub290\ub291\ub292\ub293\ub294\ub295\ub296\ub297\ub298\ub299\ub29a\ub29b\ub29c\ub29d\ub29e\ub29f\ub2a0\ub2a1\ub2a2\ub2a3\ub2a4\ub2a5\ub2a6\ub2a7\ub2a8\ub2a9\ub2aa\ub2ab\ub2ac\ub2ad\ub2ae\ub2af\ub2b0\ub2b1\ub2b2\ub2b3\ub2b4\ub2b5\ub2b6\ub2b7\ub2b8\ub2b9\ub2ba\ub2bb\ub2bc\ub2bd\ub2be\ub2bf\ub2c0\ub2c1\ub2c2\ub2c3\ub2c4\ub2c5\ub2c6\ub2c7\ub2c8\ub2c9\ub2ca\ub2cb\ub2cc\ub2cd\ub2ce\ub2cf\ub2d0\ub2d1\ub2d2\ub2d3\ub2d4\ub2d5\ub2d6\ub2d7\ub2d8\ub2d9\ub2da\ub2db\ub2dc\ub2dd\ub2de\ub2df\ub2e0\ub2e1\ub2e2\ub2e3\ub2e4\ub2e5\ub2e6\ub2e7\ub2e8\ub2e9\ub2ea\ub2eb\ub2ec\ub2ed\ub2ee\ub2ef\ub2f0\ub2f1\ub2f2\ub2f3\ub2f4\ub2f5\ub2f6\ub2f7\ub2f8\ub2f9\ub2fa\ub2fb\ub2fc\ub2fd\ub2fe\ub2ff\ub300\ub301\ub302\ub303\ub304\ub305\ub306\ub307\ub308\ub309\ub30a\ub30b\ub30c\ub30d\ub30e\ub30f\ub310\ub311\ub312\ub313\ub314\ub315\ub316\ub317\ub318\ub319\ub31a\ub31b\ub31c\ub31d\ub31e\ub31f\ub320\ub321\ub322\ub323\ub324\ub325\ub326\ub327\ub328\ub329\ub32a\ub32b\ub32c\ub32d\ub32e\ub32f\ub330\ub331\ub332\ub333\ub334\ub335\ub336\ub337\ub338\ub339\ub33a\ub33b\ub33c\ub33d\ub33e\ub33f\ub340\ub341\ub342\ub343\ub344\ub345\ub346\ub347\ub348\ub349\ub34a\ub34b\ub34c\ub34d\ub34e\ub34f\ub350\ub351\ub352\ub353\ub354\ub355\ub356\ub357\ub358\ub359\ub35a\ub35b\ub35c\ub35d\ub35e\ub35f\ub360\ub361\ub362\ub363\ub364\ub365\ub366\ub367\ub368\ub369\ub36a\ub36b\ub36c\ub36d\ub36e\ub36f\ub370\ub371\ub372\ub373\ub374\ub375\ub376\ub377\ub378\ub379\ub37a\ub37b\ub37c\ub37d\ub37e\ub37f\ub380\ub381\ub382\ub383\ub384\ub385\ub386\ub387\ub388\ub389\ub38a\ub38b\ub38c\ub38d\ub38e\ub38f\ub390\ub391\ub392\ub393\ub394\ub395\ub396\ub397\ub398\ub399\ub39a\ub39b\ub39c\ub39d\ub39e\ub39f\ub3a0\ub3a1\ub3a2\ub3a3\ub3a4\ub3a5\ub3a6\ub3a7\ub3a8\ub3a9\ub3aa\ub3ab\ub3ac\ub3ad\ub3ae\ub3af\ub3b0\ub3b1\ub3b2\ub3b3\ub3b4\ub3b5\ub3b6\ub3b7\ub3b8\ub3b9\ub3ba\ub3bb\ub3bc\ub3bd\ub3be\ub3bf\ub3c0\ub3c1\ub3c2\ub3c3\ub3c4\ub3c5\ub3c6\ub3c7\ub3c8\ub3c9\ub3ca\ub3cb\ub3cc\ub3cd\ub3ce\ub3cf\ub3d0\ub3d1\ub3d2\ub3d3\ub3d4\ub3d5\ub3d6\ub3d7\ub3d8\ub3d9\ub3da\ub3db\ub3dc\ub3dd\ub3de\ub3df\ub3e0\ub3e1\ub3e2\ub3e3\ub3e4\ub3e5\ub3e6\ub3e7\ub3e8\ub3e9\ub3ea\ub3eb\ub3ec\ub3ed\ub3ee\ub3ef\ub3f0\ub3f1\ub3f2\ub3f3\ub3f4\ub3f5\ub3f6\ub3f7\ub3f8\ub3f9\ub3fa\ub3fb\ub3fc\ub3fd\ub3fe\ub3ff\ub400\ub401\ub402\ub403\ub404\ub405\ub406\ub407\ub408\ub409\ub40a\ub40b\ub40c\ub40d\ub40e\ub40f\ub410\ub411\ub412\ub413\ub414\ub415\ub416\ub417\ub418\ub419\ub41a\ub41b\ub41c\ub41d\ub41e\ub41f\ub420\ub421\ub422\ub423\ub424\ub425\ub426\ub427\ub428\ub429\ub42a\ub42b\ub42c\ub42d\ub42e\ub42f\ub430\ub431\ub432\ub433\ub434\ub435\ub436\ub437\ub438\ub439\ub43a\ub43b\ub43c\ub43d\ub43e\ub43f\ub440\ub441\ub442\ub443\ub444\ub445\ub446\ub447\ub448\ub449\ub44a\ub44b\ub44c\ub44d\ub44e\ub44f\ub450\ub451\ub452\ub453\ub454\ub455\ub456\ub457\ub458\ub459\ub45a\ub45b\ub45c\ub45d\ub45e\ub45f\ub460\ub461\ub462\ub463\ub464\ub465\ub466\ub467\ub468\ub469\ub46a\ub46b\ub46c\ub46d\ub46e\ub46f\ub470\ub471\ub472\ub473\ub474\ub475\ub476\ub477\ub478\ub479\ub47a\ub47b\ub47c\ub47d\ub47e\ub47f\ub480\ub481\ub482\ub483\ub484\ub485\ub486\ub487\ub488\ub489\ub48a\ub48b\ub48c\ub48d\ub48e\ub48f\ub490\ub491\ub492\ub493\ub494\ub495\ub496\ub497\ub498\ub499\ub49a\ub49b\ub49c\ub49d\ub49e\ub49f\ub4a0\ub4a1\ub4a2\ub4a3\ub4a4\ub4a5\ub4a6\ub4a7\ub4a8\ub4a9\ub4aa\ub4ab\ub4ac\ub4ad\ub4ae\ub4af\ub4b0\ub4b1\ub4b2\ub4b3\ub4b4\ub4b5\ub4b6\ub4b7\ub4b8\ub4b9\ub4ba\ub4bb\ub4bc\ub4bd\ub4be\ub4bf\ub4c0\ub4c1\ub4c2\ub4c3\ub4c4\ub4c5\ub4c6\ub4c7\ub4c8\ub4c9\ub4ca\ub4cb\ub4cc\ub4cd\ub4ce\ub4cf\ub4d0\ub4d1\ub4d2\ub4d3\ub4d4\ub4d5\ub4d6\ub4d7\ub4d8\ub4d9\ub4da\ub4db\ub4dc\ub4dd\ub4de\ub4df\ub4e0\ub4e1\ub4e2\ub4e3\ub4e4\ub4e5\ub4e6\ub4e7\ub4e8\ub4e9\ub4ea\ub4eb\ub4ec\ub4ed\ub4ee\ub4ef\ub4f0\ub4f1\ub4f2\ub4f3\ub4f4\ub4f5\ub4f6\ub4f7\ub4f8\ub4f9\ub4fa\ub4fb\ub4fc\ub4fd\ub4fe\ub4ff\ub500\ub501\ub502\ub503\ub504\ub505\ub506\ub507\ub508\ub509\ub50a\ub50b\ub50c\ub50d\ub50e\ub50f\ub510\ub511\ub512\ub513\ub514\ub515\ub516\ub517\ub518\ub519\ub51a\ub51b\ub51c\ub51d\ub51e\ub51f\ub520\ub521\ub522\ub523\ub524\ub525\ub526\ub527\ub528\ub529\ub52a\ub52b\ub52c\ub52d\ub52e\ub52f\ub530\ub531\ub532\ub533\ub534\ub535\ub536\ub537\ub538\ub539\ub53a\ub53b\ub53c\ub53d\ub53e\ub53f\ub540\ub541\ub542\ub543\ub544\ub545\ub546\ub547\ub548\ub549\ub54a\ub54b\ub54c\ub54d\ub54e\ub54f\ub550\ub551\ub552\ub553\ub554\ub555\ub556\ub557\ub558\ub559\ub55a\ub55b\ub55c\ub55d\ub55e\ub55f\ub560\ub561\ub562\ub563\ub564\ub565\ub566\ub567\ub568\ub569\ub56a\ub56b\ub56c\ub56d\ub56e\ub56f\ub570\ub571\ub572\ub573\ub574\ub575\ub576\ub577\ub578\ub579\ub57a\ub57b\ub57c\ub57d\ub57e\ub57f\ub580\ub581\ub582\ub583\ub584\ub585\ub586\ub587\ub588\ub589\ub58a\ub58b\ub58c\ub58d\ub58e\ub58f\ub590\ub591\ub592\ub593\ub594\ub595\ub596\ub597\ub598\ub599\ub59a\ub59b\ub59c\ub59d\ub59e\ub59f\ub5a0\ub5a1\ub5a2\ub5a3\ub5a4\ub5a5\ub5a6\ub5a7\ub5a8\ub5a9\ub5aa\ub5ab\ub5ac\ub5ad\ub5ae\ub5af\ub5b0\ub5b1\ub5b2\ub5b3\ub5b4\ub5b5\ub5b6\ub5b7\ub5b8\ub5b9\ub5ba\ub5bb\ub5bc\ub5bd\ub5be\ub5bf\ub5c0\ub5c1\ub5c2\ub5c3\ub5c4\ub5c5\ub5c6\ub5c7\ub5c8\ub5c9\ub5ca\ub5cb\ub5cc\ub5cd\ub5ce\ub5cf\ub5d0\ub5d1\ub5d2\ub5d3\ub5d4\ub5d5\ub5d6\ub5d7\ub5d8\ub5d9\ub5da\ub5db\ub5dc\ub5dd\ub5de\ub5df\ub5e0\ub5e1\ub5e2\ub5e3\ub5e4\ub5e5\ub5e6\ub5e7\ub5e8\ub5e9\ub5ea\ub5eb\ub5ec\ub5ed\ub5ee\ub5ef\ub5f0\ub5f1\ub5f2\ub5f3\ub5f4\ub5f5\ub5f6\ub5f7\ub5f8\ub5f9\ub5fa\ub5fb\ub5fc\ub5fd\ub5fe\ub5ff\ub600\ub601\ub602\ub603\ub604\ub605\ub606\ub607\ub608\ub609\ub60a\ub60b\ub60c\ub60d\ub60e\ub60f\ub610\ub611\ub612\ub613\ub614\ub615\ub616\ub617\ub618\ub619\ub61a\ub61b\ub61c\ub61d\ub61e\ub61f\ub620\ub621\ub622\ub623\ub624\ub625\ub626\ub627\ub628\ub629\ub62a\ub62b\ub62c\ub62d\ub62e\ub62f\ub630\ub631\ub632\ub633\ub634\ub635\ub636\ub637\ub638\ub639\ub63a\ub63b\ub63c\ub63d\ub63e\ub63f\ub640\ub641\ub642\ub643\ub644\ub645\ub646\ub647\ub648\ub649\ub64a\ub64b\ub64c\ub64d\ub64e\ub64f\ub650\ub651\ub652\ub653\ub654\ub655\ub656\ub657\ub658\ub659\ub65a\ub65b\ub65c\ub65d\ub65e\ub65f\ub660\ub661\ub662\ub663\ub664\ub665\ub666\ub667\ub668\ub669\ub66a\ub66b\ub66c\ub66d\ub66e\ub66f\ub670\ub671\ub672\ub673\ub674\ub675\ub676\ub677\ub678\ub679\ub67a\ub67b\ub67c\ub67d\ub67e\ub67f\ub680\ub681\ub682\ub683\ub684\ub685\ub686\ub687\ub688\ub689\ub68a\ub68b\ub68c\ub68d\ub68e\ub68f\ub690\ub691\ub692\ub693\ub694\ub695\ub696\ub697\ub698\ub699\ub69a\ub69b\ub69c\ub69d\ub69e\ub69f\ub6a0\ub6a1\ub6a2\ub6a3\ub6a4\ub6a5\ub6a6\ub6a7\ub6a8\ub6a9\ub6aa\ub6ab\ub6ac\ub6ad\ub6ae\ub6af\ub6b0\ub6b1\ub6b2\ub6b3\ub6b4\ub6b5\ub6b6\ub6b7\ub6b8\ub6b9\ub6ba\ub6bb\ub6bc\ub6bd\ub6be\ub6bf\ub6c0\ub6c1\ub6c2\ub6c3\ub6c4\ub6c5\ub6c6\ub6c7\ub6c8\ub6c9\ub6ca\ub6cb\ub6cc\ub6cd\ub6ce\ub6cf\ub6d0\ub6d1\ub6d2\ub6d3\ub6d4\ub6d5\ub6d6\ub6d7\ub6d8\ub6d9\ub6da\ub6db\ub6dc\ub6dd\ub6de\ub6df\ub6e0\ub6e1\ub6e2\ub6e3\ub6e4\ub6e5\ub6e6\ub6e7\ub6e8\ub6e9\ub6ea\ub6eb\ub6ec\ub6ed\ub6ee\ub6ef\ub6f0\ub6f1\ub6f2\ub6f3\ub6f4\ub6f5\ub6f6\ub6f7\ub6f8\ub6f9\ub6fa\ub6fb\ub6fc\ub6fd\ub6fe\ub6ff\ub700\ub701\ub702\ub703\ub704\ub705\ub706\ub707\ub708\ub709\ub70a\ub70b\ub70c\ub70d\ub70e\ub70f\ub710\ub711\ub712\ub713\ub714\ub715\ub716\ub717\ub718\ub719\ub71a\ub71b\ub71c\ub71d\ub71e\ub71f\ub720\ub721\ub722\ub723\ub724\ub725\ub726\ub727\ub728\ub729\ub72a\ub72b\ub72c\ub72d\ub72e\ub72f\ub730\ub731\ub732\ub733\ub734\ub735\ub736\ub737\ub738\ub739\ub73a\ub73b\ub73c\ub73d\ub73e\ub73f\ub740\ub741\ub742\ub743\ub744\ub745\ub746\ub747\ub748\ub749\ub74a\ub74b\ub74c\ub74d\ub74e\ub74f\ub750\ub751\ub752\ub753\ub754\ub755\ub756\ub757\ub758\ub759\ub75a\ub75b\ub75c\ub75d\ub75e\ub75f\ub760\ub761\ub762\ub763\ub764\ub765\ub766\ub767\ub768\ub769\ub76a\ub76b\ub76c\ub76d\ub76e\ub76f\ub770\ub771\ub772\ub773\ub774\ub775\ub776\ub777\ub778\ub779\ub77a\ub77b\ub77c\ub77d\ub77e\ub77f\ub780\ub781\ub782\ub783\ub784\ub785\ub786\ub787\ub788\ub789\ub78a\ub78b\ub78c\ub78d\ub78e\ub78f\ub790\ub791\ub792\ub793\ub794\ub795\ub796\ub797\ub798\ub799\ub79a\ub79b\ub79c\ub79d\ub79e\ub79f\ub7a0\ub7a1\ub7a2\ub7a3\ub7a4\ub7a5\ub7a6\ub7a7\ub7a8\ub7a9\ub7aa\ub7ab\ub7ac\ub7ad\ub7ae\ub7af\ub7b0\ub7b1\ub7b2\ub7b3\ub7b4\ub7b5\ub7b6\ub7b7\ub7b8\ub7b9\ub7ba\ub7bb\ub7bc\ub7bd\ub7be\ub7bf\ub7c0\ub7c1\ub7c2\ub7c3\ub7c4\ub7c5\ub7c6\ub7c7\ub7c8\ub7c9\ub7ca\ub7cb\ub7cc\ub7cd\ub7ce\ub7cf\ub7d0\ub7d1\ub7d2\ub7d3\ub7d4\ub7d5\ub7d6\ub7d7\ub7d8\ub7d9\ub7da\ub7db\ub7dc\ub7dd\ub7de\ub7df\ub7e0\ub7e1\ub7e2\ub7e3\ub7e4\ub7e5\ub7e6\ub7e7\ub7e8\ub7e9\ub7ea\ub7eb\ub7ec\ub7ed\ub7ee\ub7ef\ub7f0\ub7f1\ub7f2\ub7f3\ub7f4\ub7f5\ub7f6\ub7f7\ub7f8\ub7f9\ub7fa\ub7fb\ub7fc\ub7fd\ub7fe\ub7ff\ub800\ub801\ub802\ub803\ub804\ub805\ub806\ub807\ub808\ub809\ub80a\ub80b\ub80c\ub80d\ub80e\ub80f\ub810\ub811\ub812\ub813\ub814\ub815\ub816\ub817\ub818\ub819\ub81a\ub81b\ub81c\ub81d\ub81e\ub81f\ub820\ub821\ub822\ub823\ub824\ub825\ub826\ub827\ub828\ub829\ub82a\ub82b\ub82c\ub82d\ub82e\ub82f\ub830\ub831\ub832\ub833\ub834\ub835\ub836\ub837\ub838\ub839\ub83a\ub83b\ub83c\ub83d\ub83e\ub83f\ub840\ub841\ub842\ub843\ub844\ub845\ub846\ub847\ub848\ub849\ub84a\ub84b\ub84c\ub84d\ub84e\ub84f\ub850\ub851\ub852\ub853\ub854\ub855\ub856\ub857\ub858\ub859\ub85a\ub85b\ub85c\ub85d\ub85e\ub85f\ub860\ub861\ub862\ub863\ub864\ub865\ub866\ub867\ub868\ub869\ub86a\ub86b\ub86c\ub86d\ub86e\ub86f\ub870\ub871\ub872\ub873\ub874\ub875\ub876\ub877\ub878\ub879\ub87a\ub87b\ub87c\ub87d\ub87e\ub87f\ub880\ub881\ub882\ub883\ub884\ub885\ub886\ub887\ub888\ub889\ub88a\ub88b\ub88c\ub88d\ub88e\ub88f\ub890\ub891\ub892\ub893\ub894\ub895\ub896\ub897\ub898\ub899\ub89a\ub89b\ub89c\ub89d\ub89e\ub89f\ub8a0\ub8a1\ub8a2\ub8a3\ub8a4\ub8a5\ub8a6\ub8a7\ub8a8\ub8a9\ub8aa\ub8ab\ub8ac\ub8ad\ub8ae\ub8af\ub8b0\ub8b1\ub8b2\ub8b3\ub8b4\ub8b5\ub8b6\ub8b7\ub8b8\ub8b9\ub8ba\ub8bb\ub8bc\ub8bd\ub8be\ub8bf\ub8c0\ub8c1\ub8c2\ub8c3\ub8c4\ub8c5\ub8c6\ub8c7\ub8c8\ub8c9\ub8ca\ub8cb\ub8cc\ub8cd\ub8ce\ub8cf\ub8d0\ub8d1\ub8d2\ub8d3\ub8d4\ub8d5\ub8d6\ub8d7\ub8d8\ub8d9\ub8da\ub8db\ub8dc\ub8dd\ub8de\ub8df\ub8e0\ub8e1\ub8e2\ub8e3\ub8e4\ub8e5\ub8e6\ub8e7\ub8e8\ub8e9\ub8ea\ub8eb\ub8ec\ub8ed\ub8ee\ub8ef\ub8f0\ub8f1\ub8f2\ub8f3\ub8f4\ub8f5\ub8f6\ub8f7\ub8f8\ub8f9\ub8fa\ub8fb\ub8fc\ub8fd\ub8fe\ub8ff\ub900\ub901\ub902\ub903\ub904\ub905\ub906\ub907\ub908\ub909\ub90a\ub90b\ub90c\ub90d\ub90e\ub90f\ub910\ub911\ub912\ub913\ub914\ub915\ub916\ub917\ub918\ub919\ub91a\ub91b\ub91c\ub91d\ub91e\ub91f\ub920\ub921\ub922\ub923\ub924\ub925\ub926\ub927\ub928\ub929\ub92a\ub92b\ub92c\ub92d\ub92e\ub92f\ub930\ub931\ub932\ub933\ub934\ub935\ub936\ub937\ub938\ub939\ub93a\ub93b\ub93c\ub93d\ub93e\ub93f\ub940\ub941\ub942\ub943\ub944\ub945\ub946\ub947\ub948\ub949\ub94a\ub94b\ub94c\ub94d\ub94e\ub94f\ub950\ub951\ub952\ub953\ub954\ub955\ub956\ub957\ub958\ub959\ub95a\ub95b\ub95c\ub95d\ub95e\ub95f\ub960\ub961\ub962\ub963\ub964\ub965\ub966\ub967\ub968\ub969\ub96a\ub96b\ub96c\ub96d\ub96e\ub96f\ub970\ub971\ub972\ub973\ub974\ub975\ub976\ub977\ub978\ub979\ub97a\ub97b\ub97c\ub97d\ub97e\ub97f\ub980\ub981\ub982\ub983\ub984\ub985\ub986\ub987\ub988\ub989\ub98a\ub98b\ub98c\ub98d\ub98e\ub98f\ub990\ub991\ub992\ub993\ub994\ub995\ub996\ub997\ub998\ub999\ub99a\ub99b\ub99c\ub99d\ub99e\ub99f\ub9a0\ub9a1\ub9a2\ub9a3\ub9a4\ub9a5\ub9a6\ub9a7\ub9a8\ub9a9\ub9aa\ub9ab\ub9ac\ub9ad\ub9ae\ub9af\ub9b0\ub9b1\ub9b2\ub9b3\ub9b4\ub9b5\ub9b6\ub9b7\ub9b8\ub9b9\ub9ba\ub9bb\ub9bc\ub9bd\ub9be\ub9bf\ub9c0\ub9c1\ub9c2\ub9c3\ub9c4\ub9c5\ub9c6\ub9c7\ub9c8\ub9c9\ub9ca\ub9cb\ub9cc\ub9cd\ub9ce\ub9cf\ub9d0\ub9d1\ub9d2\ub9d3\ub9d4\ub9d5\ub9d6\ub9d7\ub9d8\ub9d9\ub9da\ub9db\ub9dc\ub9dd\ub9de\ub9df\ub9e0\ub9e1\ub9e2\ub9e3\ub9e4\ub9e5\ub9e6\ub9e7\ub9e8\ub9e9\ub9ea\ub9eb\ub9ec\ub9ed\ub9ee\ub9ef\ub9f0\ub9f1\ub9f2\ub9f3\ub9f4\ub9f5\ub9f6\ub9f7\ub9f8\ub9f9\ub9fa\ub9fb\ub9fc\ub9fd\ub9fe\ub9ff\uba00\uba01\uba02\uba03\uba04\uba05\uba06\uba07\uba08\uba09\uba0a\uba0b\uba0c\uba0d\uba0e\uba0f\uba10\uba11\uba12\uba13\uba14\uba15\uba16\uba17\uba18\uba19\uba1a\uba1b\uba1c\uba1d\uba1e\uba1f\uba20\uba21\uba22\uba23\uba24\uba25\uba26\uba27\uba28\uba29\uba2a\uba2b\uba2c\uba2d\uba2e\uba2f\uba30\uba31\uba32\uba33\uba34\uba35\uba36\uba37\uba38\uba39\uba3a\uba3b\uba3c\uba3d\uba3e\uba3f\uba40\uba41\uba42\uba43\uba44\uba45\uba46\uba47\uba48\uba49\uba4a\uba4b\uba4c\uba4d\uba4e\uba4f\uba50\uba51\uba52\uba53\uba54\uba55\uba56\uba57\uba58\uba59\uba5a\uba5b\uba5c\uba5d\uba5e\uba5f\uba60\uba61\uba62\uba63\uba64\uba65\uba66\uba67\uba68\uba69\uba6a\uba6b\uba6c\uba6d\uba6e\uba6f\uba70\uba71\uba72\uba73\uba74\uba75\uba76\uba77\uba78\uba79\uba7a\uba7b\uba7c\uba7d\uba7e\uba7f\uba80\uba81\uba82\uba83\uba84\uba85\uba86\uba87\uba88\uba89\uba8a\uba8b\uba8c\uba8d\uba8e\uba8f\uba90\uba91\uba92\uba93\uba94\uba95\uba96\uba97\uba98\uba99\uba9a\uba9b\uba9c\uba9d\uba9e\uba9f\ubaa0\ubaa1\ubaa2\ubaa3\ubaa4\ubaa5\ubaa6\ubaa7\ubaa8\ubaa9\ubaaa\ubaab\ubaac\ubaad\ubaae\ubaaf\ubab0\ubab1\ubab2\ubab3\ubab4\ubab5\ubab6\ubab7\ubab8\ubab9\ubaba\ubabb\ubabc\ubabd\ubabe\ubabf\ubac0\ubac1\ubac2\ubac3\ubac4\ubac5\ubac6\ubac7\ubac8\ubac9\ubaca\ubacb\ubacc\ubacd\ubace\ubacf\ubad0\ubad1\ubad2\ubad3\ubad4\ubad5\ubad6\ubad7\ubad8\ubad9\ubada\ubadb\ubadc\ubadd\ubade\ubadf\ubae0\ubae1\ubae2\ubae3\ubae4\ubae5\ubae6\ubae7\ubae8\ubae9\ubaea\ubaeb\ubaec\ubaed\ubaee\ubaef\ubaf0\ubaf1\ubaf2\ubaf3\ubaf4\ubaf5\ubaf6\ubaf7\ubaf8\ubaf9\ubafa\ubafb\ubafc\ubafd\ubafe\ubaff\ubb00\ubb01\ubb02\ubb03\ubb04\ubb05\ubb06\ubb07\ubb08\ubb09\ubb0a\ubb0b\ubb0c\ubb0d\ubb0e\ubb0f\ubb10\ubb11\ubb12\ubb13\ubb14\ubb15\ubb16\ubb17\ubb18\ubb19\ubb1a\ubb1b\ubb1c\ubb1d\ubb1e\ubb1f\ubb20\ubb21\ubb22\ubb23\ubb24\ubb25\ubb26\ubb27\ubb28\ubb29\ubb2a\ubb2b\ubb2c\ubb2d\ubb2e\ubb2f\ubb30\ubb31\ubb32\ubb33\ubb34\ubb35\ubb36\ubb37\ubb38\ubb39\ubb3a\ubb3b\ubb3c\ubb3d\ubb3e\ubb3f\ubb40\ubb41\ubb42\ubb43\ubb44\ubb45\ubb46\ubb47\ubb48\ubb49\ubb4a\ubb4b\ubb4c\ubb4d\ubb4e\ubb4f\ubb50\ubb51\ubb52\ubb53\ubb54\ubb55\ubb56\ubb57\ubb58\ubb59\ubb5a\ubb5b\ubb5c\ubb5d\ubb5e\ubb5f\ubb60\ubb61\ubb62\ubb63\ubb64\ubb65\ubb66\ubb67\ubb68\ubb69\ubb6a\ubb6b\ubb6c\ubb6d\ubb6e\ubb6f\ubb70\ubb71\ubb72\ubb73\ubb74\ubb75\ubb76\ubb77\ubb78\ubb79\ubb7a\ubb7b\ubb7c\ubb7d\ubb7e\ubb7f\ubb80\ubb81\ubb82\ubb83\ubb84\ubb85\ubb86\ubb87\ubb88\ubb89\ubb8a\ubb8b\ubb8c\ubb8d\ubb8e\ubb8f\ubb90\ubb91\ubb92\ubb93\ubb94\ubb95\ubb96\ubb97\ubb98\ubb99\ubb9a\ubb9b\ubb9c\ubb9d\ubb9e\ubb9f\ubba0\ubba1\ubba2\ubba3\ubba4\ubba5\ubba6\ubba7\ubba8\ubba9\ubbaa\ubbab\ubbac\ubbad\ubbae\ubbaf\ubbb0\ubbb1\ubbb2\ubbb3\ubbb4\ubbb5\ubbb6\ubbb7\ubbb8\ubbb9\ubbba\ubbbb\ubbbc\ubbbd\ubbbe\ubbbf\ubbc0\ubbc1\ubbc2\ubbc3\ubbc4\ubbc5\ubbc6\ubbc7\ubbc8\ubbc9\ubbca\ubbcb\ubbcc\ubbcd\ubbce\ubbcf\ubbd0\ubbd1\ubbd2\ubbd3\ubbd4\ubbd5\ubbd6\ubbd7\ubbd8\ubbd9\ubbda\ubbdb\ubbdc\ubbdd\ubbde\ubbdf\ubbe0\ubbe1\ubbe2\ubbe3\ubbe4\ubbe5\ubbe6\ubbe7\ubbe8\ubbe9\ubbea\ubbeb\ubbec\ubbed\ubbee\ubbef\ubbf0\ubbf1\ubbf2\ubbf3\ubbf4\ubbf5\ubbf6\ubbf7\ubbf8\ubbf9\ubbfa\ubbfb\ubbfc\ubbfd\ubbfe\ubbff\ubc00\ubc01\ubc02\ubc03\ubc04\ubc05\ubc06\ubc07\ubc08\ubc09\ubc0a\ubc0b\ubc0c\ubc0d\ubc0e\ubc0f\ubc10\ubc11\ubc12\ubc13\ubc14\ubc15\ubc16\ubc17\ubc18\ubc19\ubc1a\ubc1b\ubc1c\ubc1d\ubc1e\ubc1f\ubc20\ubc21\ubc22\ubc23\ubc24\ubc25\ubc26\ubc27\ubc28\ubc29\ubc2a\ubc2b\ubc2c\ubc2d\ubc2e\ubc2f\ubc30\ubc31\ubc32\ubc33\ubc34\ubc35\ubc36\ubc37\ubc38\ubc39\ubc3a\ubc3b\ubc3c\ubc3d\ubc3e\ubc3f\ubc40\ubc41\ubc42\ubc43\ubc44\ubc45\ubc46\ubc47\ubc48\ubc49\ubc4a\ubc4b\ubc4c\ubc4d\ubc4e\ubc4f\ubc50\ubc51\ubc52\ubc53\ubc54\ubc55\ubc56\ubc57\ubc58\ubc59\ubc5a\ubc5b\ubc5c\ubc5d\ubc5e\ubc5f\ubc60\ubc61\ubc62\ubc63\ubc64\ubc65\ubc66\ubc67\ubc68\ubc69\ubc6a\ubc6b\ubc6c\ubc6d\ubc6e\ubc6f\ubc70\ubc71\ubc72\ubc73\ubc74\ubc75\ubc76\ubc77\ubc78\ubc79\ubc7a\ubc7b\ubc7c\ubc7d\ubc7e\ubc7f\ubc80\ubc81\ubc82\ubc83\ubc84\ubc85\ubc86\ubc87\ubc88\ubc89\ubc8a\ubc8b\ubc8c\ubc8d\ubc8e\ubc8f\ubc90\ubc91\ubc92\ubc93\ubc94\ubc95\ubc96\ubc97\ubc98\ubc99\ubc9a\ubc9b\ubc9c\ubc9d\ubc9e\ubc9f\ubca0\ubca1\ubca2\ubca3\ubca4\ubca5\ubca6\ubca7\ubca8\ubca9\ubcaa\ubcab\ubcac\ubcad\ubcae\ubcaf\ubcb0\ubcb1\ubcb2\ubcb3\ubcb4\ubcb5\ubcb6\ubcb7\ubcb8\ubcb9\ubcba\ubcbb\ubcbc\ubcbd\ubcbe\ubcbf\ubcc0\ubcc1\ubcc2\ubcc3\ubcc4\ubcc5\ubcc6\ubcc7\ubcc8\ubcc9\ubcca\ubccb\ubccc\ubccd\ubcce\ubccf\ubcd0\ubcd1\ubcd2\ubcd3\ubcd4\ubcd5\ubcd6\ubcd7\ubcd8\ubcd9\ubcda\ubcdb\ubcdc\ubcdd\ubcde\ubcdf\ubce0\ubce1\ubce2\ubce3\ubce4\ubce5\ubce6\ubce7\ubce8\ubce9\ubcea\ubceb\ubcec\ubced\ubcee\ubcef\ubcf0\ubcf1\ubcf2\ubcf3\ubcf4\ubcf5\ubcf6\ubcf7\ubcf8\ubcf9\ubcfa\ubcfb\ubcfc\ubcfd\ubcfe\ubcff\ubd00\ubd01\ubd02\ubd03\ubd04\ubd05\ubd06\ubd07\ubd08\ubd09\ubd0a\ubd0b\ubd0c\ubd0d\ubd0e\ubd0f\ubd10\ubd11\ubd12\ubd13\ubd14\ubd15\ubd16\ubd17\ubd18\ubd19\ubd1a\ubd1b\ubd1c\ubd1d\ubd1e\ubd1f\ubd20\ubd21\ubd22\ubd23\ubd24\ubd25\ubd26\ubd27\ubd28\ubd29\ubd2a\ubd2b\ubd2c\ubd2d\ubd2e\ubd2f\ubd30\ubd31\ubd32\ubd33\ubd34\ubd35\ubd36\ubd37\ubd38\ubd39\ubd3a\ubd3b\ubd3c\ubd3d\ubd3e\ubd3f\ubd40\ubd41\ubd42\ubd43\ubd44\ubd45\ubd46\ubd47\ubd48\ubd49\ubd4a\ubd4b\ubd4c\ubd4d\ubd4e\ubd4f\ubd50\ubd51\ubd52\ubd53\ubd54\ubd55\ubd56\ubd57\ubd58\ubd59\ubd5a\ubd5b\ubd5c\ubd5d\ubd5e\ubd5f\ubd60\ubd61\ubd62\ubd63\ubd64\ubd65\ubd66\ubd67\ubd68\ubd69\ubd6a\ubd6b\ubd6c\ubd6d\ubd6e\ubd6f\ubd70\ubd71\ubd72\ubd73\ubd74\ubd75\ubd76\ubd77\ubd78\ubd79\ubd7a\ubd7b\ubd7c\ubd7d\ubd7e\ubd7f\ubd80\ubd81\ubd82\ubd83\ubd84\ubd85\ubd86\ubd87\ubd88\ubd89\ubd8a\ubd8b\ubd8c\ubd8d\ubd8e\ubd8f\ubd90\ubd91\ubd92\ubd93\ubd94\ubd95\ubd96\ubd97\ubd98\ubd99\ubd9a\ubd9b\ubd9c\ubd9d\ubd9e\ubd9f\ubda0\ubda1\ubda2\ubda3\ubda4\ubda5\ubda6\ubda7\ubda8\ubda9\ubdaa\ubdab\ubdac\ubdad\ubdae\ubdaf\ubdb0\ubdb1\ubdb2\ubdb3\ubdb4\ubdb5\ubdb6\ubdb7\ubdb8\ubdb9\ubdba\ubdbb\ubdbc\ubdbd\ubdbe\ubdbf\ubdc0\ubdc1\ubdc2\ubdc3\ubdc4\ubdc5\ubdc6\ubdc7\ubdc8\ubdc9\ubdca\ubdcb\ubdcc\ubdcd\ubdce\ubdcf\ubdd0\ubdd1\ubdd2\ubdd3\ubdd4\ubdd5\ubdd6\ubdd7\ubdd8\ubdd9\ubdda\ubddb\ubddc\ubddd\ubdde\ubddf\ubde0\ubde1\ubde2\ubde3\ubde4\ubde5\ubde6\ubde7\ubde8\ubde9\ubdea\ubdeb\ubdec\ubded\ubdee\ubdef\ubdf0\ubdf1\ubdf2\ubdf3\ubdf4\ubdf5\ubdf6\ubdf7\ubdf8\ubdf9\ubdfa\ubdfb\ubdfc\ubdfd\ubdfe\ubdff\ube00\ube01\ube02\ube03\ube04\ube05\ube06\ube07\ube08\ube09\ube0a\ube0b\ube0c\ube0d\ube0e\ube0f\ube10\ube11\ube12\ube13\ube14\ube15\ube16\ube17\ube18\ube19\ube1a\ube1b\ube1c\ube1d\ube1e\ube1f\ube20\ube21\ube22\ube23\ube24\ube25\ube26\ube27\ube28\ube29\ube2a\ube2b\ube2c\ube2d\ube2e\ube2f\ube30\ube31\ube32\ube33\ube34\ube35\ube36\ube37\ube38\ube39\ube3a\ube3b\ube3c\ube3d\ube3e\ube3f\ube40\ube41\ube42\ube43\ube44\ube45\ube46\ube47\ube48\ube49\ube4a\ube4b\ube4c\ube4d\ube4e\ube4f\ube50\ube51\ube52\ube53\ube54\ube55\ube56\ube57\ube58\ube59\ube5a\ube5b\ube5c\ube5d\ube5e\ube5f\ube60\ube61\ube62\ube63\ube64\ube65\ube66\ube67\ube68\ube69\ube6a\ube6b\ube6c\ube6d\ube6e\ube6f\ube70\ube71\ube72\ube73\ube74\ube75\ube76\ube77\ube78\ube79\ube7a\ube7b\ube7c\ube7d\ube7e\ube7f\ube80\ube81\ube82\ube83\ube84\ube85\ube86\ube87\ube88\ube89\ube8a\ube8b\ube8c\ube8d\ube8e\ube8f\ube90\ube91\ube92\ube93\ube94\ube95\ube96\ube97\ube98\ube99\ube9a\ube9b\ube9c\ube9d\ube9e\ube9f\ubea0\ubea1\ubea2\ubea3\ubea4\ubea5\ubea6\ubea7\ubea8\ubea9\ubeaa\ubeab\ubeac\ubead\ubeae\ubeaf\ubeb0\ubeb1\ubeb2\ubeb3\ubeb4\ubeb5\ubeb6\ubeb7\ubeb8\ubeb9\ubeba\ubebb\ubebc\ubebd\ubebe\ubebf\ubec0\ubec1\ubec2\ubec3\ubec4\ubec5\ubec6\ubec7\ubec8\ubec9\ubeca\ubecb\ubecc\ubecd\ubece\ubecf\ubed0\ubed1\ubed2\ubed3\ubed4\ubed5\ubed6\ubed7\ubed8\ubed9\ubeda\ubedb\ubedc\ubedd\ubede\ubedf\ubee0\ubee1\ubee2\ubee3\ubee4\ubee5\ubee6\ubee7\ubee8\ubee9\ubeea\ubeeb\ubeec\ubeed\ubeee\ubeef\ubef0\ubef1\ubef2\ubef3\ubef4\ubef5\ubef6\ubef7\ubef8\ubef9\ubefa\ubefb\ubefc\ubefd\ubefe\ubeff\ubf00\ubf01\ubf02\ubf03\ubf04\ubf05\ubf06\ubf07\ubf08\ubf09\ubf0a\ubf0b\ubf0c\ubf0d\ubf0e\ubf0f\ubf10\ubf11\ubf12\ubf13\ubf14\ubf15\ubf16\ubf17\ubf18\ubf19\ubf1a\ubf1b\ubf1c\ubf1d\ubf1e\ubf1f\ubf20\ubf21\ubf22\ubf23\ubf24\ubf25\ubf26\ubf27\ubf28\ubf29\ubf2a\ubf2b\ubf2c\ubf2d\ubf2e\ubf2f\ubf30\ubf31\ubf32\ubf33\ubf34\ubf35\ubf36\ubf37\ubf38\ubf39\ubf3a\ubf3b\ubf3c\ubf3d\ubf3e\ubf3f\ubf40\ubf41\ubf42\ubf43\ubf44\ubf45\ubf46\ubf47\ubf48\ubf49\ubf4a\ubf4b\ubf4c\ubf4d\ubf4e\ubf4f\ubf50\ubf51\ubf52\ubf53\ubf54\ubf55\ubf56\ubf57\ubf58\ubf59\ubf5a\ubf5b\ubf5c\ubf5d\ubf5e\ubf5f\ubf60\ubf61\ubf62\ubf63\ubf64\ubf65\ubf66\ubf67\ubf68\ubf69\ubf6a\ubf6b\ubf6c\ubf6d\ubf6e\ubf6f\ubf70\ubf71\ubf72\ubf73\ubf74\ubf75\ubf76\ubf77\ubf78\ubf79\ubf7a\ubf7b\ubf7c\ubf7d\ubf7e\ubf7f\ubf80\ubf81\ubf82\ubf83\ubf84\ubf85\ubf86\ubf87\ubf88\ubf89\ubf8a\ubf8b\ubf8c\ubf8d\ubf8e\ubf8f\ubf90\ubf91\ubf92\ubf93\ubf94\ubf95\ubf96\ubf97\ubf98\ubf99\ubf9a\ubf9b\ubf9c\ubf9d\ubf9e\ubf9f\ubfa0\ubfa1\ubfa2\ubfa3\ubfa4\ubfa5\ubfa6\ubfa7\ubfa8\ubfa9\ubfaa\ubfab\ubfac\ubfad\ubfae\ubfaf\ubfb0\ubfb1\ubfb2\ubfb3\ubfb4\ubfb5\ubfb6\ubfb7\ubfb8\ubfb9\ubfba\ubfbb\ubfbc\ubfbd\ubfbe\ubfbf\ubfc0\ubfc1\ubfc2\ubfc3\ubfc4\ubfc5\ubfc6\ubfc7\ubfc8\ubfc9\ubfca\ubfcb\ubfcc\ubfcd\ubfce\ubfcf\ubfd0\ubfd1\ubfd2\ubfd3\ubfd4\ubfd5\ubfd6\ubfd7\ubfd8\ubfd9\ubfda\ubfdb\ubfdc\ubfdd\ubfde\ubfdf\ubfe0\ubfe1\ubfe2\ubfe3\ubfe4\ubfe5\ubfe6\ubfe7\ubfe8\ubfe9\ubfea\ubfeb\ubfec\ubfed\ubfee\ubfef\ubff0\ubff1\ubff2\ubff3\ubff4\ubff5\ubff6\ubff7\ubff8\ubff9\ubffa\ubffb\ubffc\ubffd\ubffe\ubfff\uc000\uc001\uc002\uc003\uc004\uc005\uc006\uc007\uc008\uc009\uc00a\uc00b\uc00c\uc00d\uc00e\uc00f\uc010\uc011\uc012\uc013\uc014\uc015\uc016\uc017\uc018\uc019\uc01a\uc01b\uc01c\uc01d\uc01e\uc01f\uc020\uc021\uc022\uc023\uc024\uc025\uc026\uc027\uc028\uc029\uc02a\uc02b\uc02c\uc02d\uc02e\uc02f\uc030\uc031\uc032\uc033\uc034\uc035\uc036\uc037\uc038\uc039\uc03a\uc03b\uc03c\uc03d\uc03e\uc03f\uc040\uc041\uc042\uc043\uc044\uc045\uc046\uc047\uc048\uc049\uc04a\uc04b\uc04c\uc04d\uc04e\uc04f\uc050\uc051\uc052\uc053\uc054\uc055\uc056\uc057\uc058\uc059\uc05a\uc05b\uc05c\uc05d\uc05e\uc05f\uc060\uc061\uc062\uc063\uc064\uc065\uc066\uc067\uc068\uc069\uc06a\uc06b\uc06c\uc06d\uc06e\uc06f\uc070\uc071\uc072\uc073\uc074\uc075\uc076\uc077\uc078\uc079\uc07a\uc07b\uc07c\uc07d\uc07e\uc07f\uc080\uc081\uc082\uc083\uc084\uc085\uc086\uc087\uc088\uc089\uc08a\uc08b\uc08c\uc08d\uc08e\uc08f\uc090\uc091\uc092\uc093\uc094\uc095\uc096\uc097\uc098\uc099\uc09a\uc09b\uc09c\uc09d\uc09e\uc09f\uc0a0\uc0a1\uc0a2\uc0a3\uc0a4\uc0a5\uc0a6\uc0a7\uc0a8\uc0a9\uc0aa\uc0ab\uc0ac\uc0ad\uc0ae\uc0af\uc0b0\uc0b1\uc0b2\uc0b3\uc0b4\uc0b5\uc0b6\uc0b7\uc0b8\uc0b9\uc0ba\uc0bb\uc0bc\uc0bd\uc0be\uc0bf\uc0c0\uc0c1\uc0c2\uc0c3\uc0c4\uc0c5\uc0c6\uc0c7\uc0c8\uc0c9\uc0ca\uc0cb\uc0cc\uc0cd\uc0ce\uc0cf\uc0d0\uc0d1\uc0d2\uc0d3\uc0d4\uc0d5\uc0d6\uc0d7\uc0d8\uc0d9\uc0da\uc0db\uc0dc\uc0dd\uc0de\uc0df\uc0e0\uc0e1\uc0e2\uc0e3\uc0e4\uc0e5\uc0e6\uc0e7\uc0e8\uc0e9\uc0ea\uc0eb\uc0ec\uc0ed\uc0ee\uc0ef\uc0f0\uc0f1\uc0f2\uc0f3\uc0f4\uc0f5\uc0f6\uc0f7\uc0f8\uc0f9\uc0fa\uc0fb\uc0fc\uc0fd\uc0fe\uc0ff\uc100\uc101\uc102\uc103\uc104\uc105\uc106\uc107\uc108\uc109\uc10a\uc10b\uc10c\uc10d\uc10e\uc10f\uc110\uc111\uc112\uc113\uc114\uc115\uc116\uc117\uc118\uc119\uc11a\uc11b\uc11c\uc11d\uc11e\uc11f\uc120\uc121\uc122\uc123\uc124\uc125\uc126\uc127\uc128\uc129\uc12a\uc12b\uc12c\uc12d\uc12e\uc12f\uc130\uc131\uc132\uc133\uc134\uc135\uc136\uc137\uc138\uc139\uc13a\uc13b\uc13c\uc13d\uc13e\uc13f\uc140\uc141\uc142\uc143\uc144\uc145\uc146\uc147\uc148\uc149\uc14a\uc14b\uc14c\uc14d\uc14e\uc14f\uc150\uc151\uc152\uc153\uc154\uc155\uc156\uc157\uc158\uc159\uc15a\uc15b\uc15c\uc15d\uc15e\uc15f\uc160\uc161\uc162\uc163\uc164\uc165\uc166\uc167\uc168\uc169\uc16a\uc16b\uc16c\uc16d\uc16e\uc16f\uc170\uc171\uc172\uc173\uc174\uc175\uc176\uc177\uc178\uc179\uc17a\uc17b\uc17c\uc17d\uc17e\uc17f\uc180\uc181\uc182\uc183\uc184\uc185\uc186\uc187\uc188\uc189\uc18a\uc18b\uc18c\uc18d\uc18e\uc18f\uc190\uc191\uc192\uc193\uc194\uc195\uc196\uc197\uc198\uc199\uc19a\uc19b\uc19c\uc19d\uc19e\uc19f\uc1a0\uc1a1\uc1a2\uc1a3\uc1a4\uc1a5\uc1a6\uc1a7\uc1a8\uc1a9\uc1aa\uc1ab\uc1ac\uc1ad\uc1ae\uc1af\uc1b0\uc1b1\uc1b2\uc1b3\uc1b4\uc1b5\uc1b6\uc1b7\uc1b8\uc1b9\uc1ba\uc1bb\uc1bc\uc1bd\uc1be\uc1bf\uc1c0\uc1c1\uc1c2\uc1c3\uc1c4\uc1c5\uc1c6\uc1c7\uc1c8\uc1c9\uc1ca\uc1cb\uc1cc\uc1cd\uc1ce\uc1cf\uc1d0\uc1d1\uc1d2\uc1d3\uc1d4\uc1d5\uc1d6\uc1d7\uc1d8\uc1d9\uc1da\uc1db\uc1dc\uc1dd\uc1de\uc1df\uc1e0\uc1e1\uc1e2\uc1e3\uc1e4\uc1e5\uc1e6\uc1e7\uc1e8\uc1e9\uc1ea\uc1eb\uc1ec\uc1ed\uc1ee\uc1ef\uc1f0\uc1f1\uc1f2\uc1f3\uc1f4\uc1f5\uc1f6\uc1f7\uc1f8\uc1f9\uc1fa\uc1fb\uc1fc\uc1fd\uc1fe\uc1ff\uc200\uc201\uc202\uc203\uc204\uc205\uc206\uc207\uc208\uc209\uc20a\uc20b\uc20c\uc20d\uc20e\uc20f\uc210\uc211\uc212\uc213\uc214\uc215\uc216\uc217\uc218\uc219\uc21a\uc21b\uc21c\uc21d\uc21e\uc21f\uc220\uc221\uc222\uc223\uc224\uc225\uc226\uc227\uc228\uc229\uc22a\uc22b\uc22c\uc22d\uc22e\uc22f\uc230\uc231\uc232\uc233\uc234\uc235\uc236\uc237\uc238\uc239\uc23a\uc23b\uc23c\uc23d\uc23e\uc23f\uc240\uc241\uc242\uc243\uc244\uc245\uc246\uc247\uc248\uc249\uc24a\uc24b\uc24c\uc24d\uc24e\uc24f\uc250\uc251\uc252\uc253\uc254\uc255\uc256\uc257\uc258\uc259\uc25a\uc25b\uc25c\uc25d\uc25e\uc25f\uc260\uc261\uc262\uc263\uc264\uc265\uc266\uc267\uc268\uc269\uc26a\uc26b\uc26c\uc26d\uc26e\uc26f\uc270\uc271\uc272\uc273\uc274\uc275\uc276\uc277\uc278\uc279\uc27a\uc27b\uc27c\uc27d\uc27e\uc27f\uc280\uc281\uc282\uc283\uc284\uc285\uc286\uc287\uc288\uc289\uc28a\uc28b\uc28c\uc28d\uc28e\uc28f\uc290\uc291\uc292\uc293\uc294\uc295\uc296\uc297\uc298\uc299\uc29a\uc29b\uc29c\uc29d\uc29e\uc29f\uc2a0\uc2a1\uc2a2\uc2a3\uc2a4\uc2a5\uc2a6\uc2a7\uc2a8\uc2a9\uc2aa\uc2ab\uc2ac\uc2ad\uc2ae\uc2af\uc2b0\uc2b1\uc2b2\uc2b3\uc2b4\uc2b5\uc2b6\uc2b7\uc2b8\uc2b9\uc2ba\uc2bb\uc2bc\uc2bd\uc2be\uc2bf\uc2c0\uc2c1\uc2c2\uc2c3\uc2c4\uc2c5\uc2c6\uc2c7\uc2c8\uc2c9\uc2ca\uc2cb\uc2cc\uc2cd\uc2ce\uc2cf\uc2d0\uc2d1\uc2d2\uc2d3\uc2d4\uc2d5\uc2d6\uc2d7\uc2d8\uc2d9\uc2da\uc2db\uc2dc\uc2dd\uc2de\uc2df\uc2e0\uc2e1\uc2e2\uc2e3\uc2e4\uc2e5\uc2e6\uc2e7\uc2e8\uc2e9\uc2ea\uc2eb\uc2ec\uc2ed\uc2ee\uc2ef\uc2f0\uc2f1\uc2f2\uc2f3\uc2f4\uc2f5\uc2f6\uc2f7\uc2f8\uc2f9\uc2fa\uc2fb\uc2fc\uc2fd\uc2fe\uc2ff\uc300\uc301\uc302\uc303\uc304\uc305\uc306\uc307\uc308\uc309\uc30a\uc30b\uc30c\uc30d\uc30e\uc30f\uc310\uc311\uc312\uc313\uc314\uc315\uc316\uc317\uc318\uc319\uc31a\uc31b\uc31c\uc31d\uc31e\uc31f\uc320\uc321\uc322\uc323\uc324\uc325\uc326\uc327\uc328\uc329\uc32a\uc32b\uc32c\uc32d\uc32e\uc32f\uc330\uc331\uc332\uc333\uc334\uc335\uc336\uc337\uc338\uc339\uc33a\uc33b\uc33c\uc33d\uc33e\uc33f\uc340\uc341\uc342\uc343\uc344\uc345\uc346\uc347\uc348\uc349\uc34a\uc34b\uc34c\uc34d\uc34e\uc34f\uc350\uc351\uc352\uc353\uc354\uc355\uc356\uc357\uc358\uc359\uc35a\uc35b\uc35c\uc35d\uc35e\uc35f\uc360\uc361\uc362\uc363\uc364\uc365\uc366\uc367\uc368\uc369\uc36a\uc36b\uc36c\uc36d\uc36e\uc36f\uc370\uc371\uc372\uc373\uc374\uc375\uc376\uc377\uc378\uc379\uc37a\uc37b\uc37c\uc37d\uc37e\uc37f\uc380\uc381\uc382\uc383\uc384\uc385\uc386\uc387\uc388\uc389\uc38a\uc38b\uc38c\uc38d\uc38e\uc38f\uc390\uc391\uc392\uc393\uc394\uc395\uc396\uc397\uc398\uc399\uc39a\uc39b\uc39c\uc39d\uc39e\uc39f\uc3a0\uc3a1\uc3a2\uc3a3\uc3a4\uc3a5\uc3a6\uc3a7\uc3a8\uc3a9\uc3aa\uc3ab\uc3ac\uc3ad\uc3ae\uc3af\uc3b0\uc3b1\uc3b2\uc3b3\uc3b4\uc3b5\uc3b6\uc3b7\uc3b8\uc3b9\uc3ba\uc3bb\uc3bc\uc3bd\uc3be\uc3bf\uc3c0\uc3c1\uc3c2\uc3c3\uc3c4\uc3c5\uc3c6\uc3c7\uc3c8\uc3c9\uc3ca\uc3cb\uc3cc\uc3cd\uc3ce\uc3cf\uc3d0\uc3d1\uc3d2\uc3d3\uc3d4\uc3d5\uc3d6\uc3d7\uc3d8\uc3d9\uc3da\uc3db\uc3dc\uc3dd\uc3de\uc3df\uc3e0\uc3e1\uc3e2\uc3e3\uc3e4\uc3e5\uc3e6\uc3e7\uc3e8\uc3e9\uc3ea\uc3eb\uc3ec\uc3ed\uc3ee\uc3ef\uc3f0\uc3f1\uc3f2\uc3f3\uc3f4\uc3f5\uc3f6\uc3f7\uc3f8\uc3f9\uc3fa\uc3fb\uc3fc\uc3fd\uc3fe\uc3ff\uc400\uc401\uc402\uc403\uc404\uc405\uc406\uc407\uc408\uc409\uc40a\uc40b\uc40c\uc40d\uc40e\uc40f\uc410\uc411\uc412\uc413\uc414\uc415\uc416\uc417\uc418\uc419\uc41a\uc41b\uc41c\uc41d\uc41e\uc41f\uc420\uc421\uc422\uc423\uc424\uc425\uc426\uc427\uc428\uc429\uc42a\uc42b\uc42c\uc42d\uc42e\uc42f\uc430\uc431\uc432\uc433\uc434\uc435\uc436\uc437\uc438\uc439\uc43a\uc43b\uc43c\uc43d\uc43e\uc43f\uc440\uc441\uc442\uc443\uc444\uc445\uc446\uc447\uc448\uc449\uc44a\uc44b\uc44c\uc44d\uc44e\uc44f\uc450\uc451\uc452\uc453\uc454\uc455\uc456\uc457\uc458\uc459\uc45a\uc45b\uc45c\uc45d\uc45e\uc45f\uc460\uc461\uc462\uc463\uc464\uc465\uc466\uc467\uc468\uc469\uc46a\uc46b\uc46c\uc46d\uc46e\uc46f\uc470\uc471\uc472\uc473\uc474\uc475\uc476\uc477\uc478\uc479\uc47a\uc47b\uc47c\uc47d\uc47e\uc47f\uc480\uc481\uc482\uc483\uc484\uc485\uc486\uc487\uc488\uc489\uc48a\uc48b\uc48c\uc48d\uc48e\uc48f\uc490\uc491\uc492\uc493\uc494\uc495\uc496\uc497\uc498\uc499\uc49a\uc49b\uc49c\uc49d\uc49e\uc49f\uc4a0\uc4a1\uc4a2\uc4a3\uc4a4\uc4a5\uc4a6\uc4a7\uc4a8\uc4a9\uc4aa\uc4ab\uc4ac\uc4ad\uc4ae\uc4af\uc4b0\uc4b1\uc4b2\uc4b3\uc4b4\uc4b5\uc4b6\uc4b7\uc4b8\uc4b9\uc4ba\uc4bb\uc4bc\uc4bd\uc4be\uc4bf\uc4c0\uc4c1\uc4c2\uc4c3\uc4c4\uc4c5\uc4c6\uc4c7\uc4c8\uc4c9\uc4ca\uc4cb\uc4cc\uc4cd\uc4ce\uc4cf\uc4d0\uc4d1\uc4d2\uc4d3\uc4d4\uc4d5\uc4d6\uc4d7\uc4d8\uc4d9\uc4da\uc4db\uc4dc\uc4dd\uc4de\uc4df\uc4e0\uc4e1\uc4e2\uc4e3\uc4e4\uc4e5\uc4e6\uc4e7\uc4e8\uc4e9\uc4ea\uc4eb\uc4ec\uc4ed\uc4ee\uc4ef\uc4f0\uc4f1\uc4f2\uc4f3\uc4f4\uc4f5\uc4f6\uc4f7\uc4f8\uc4f9\uc4fa\uc4fb\uc4fc\uc4fd\uc4fe\uc4ff\uc500\uc501\uc502\uc503\uc504\uc505\uc506\uc507\uc508\uc509\uc50a\uc50b\uc50c\uc50d\uc50e\uc50f\uc510\uc511\uc512\uc513\uc514\uc515\uc516\uc517\uc518\uc519\uc51a\uc51b\uc51c\uc51d\uc51e\uc51f\uc520\uc521\uc522\uc523\uc524\uc525\uc526\uc527\uc528\uc529\uc52a\uc52b\uc52c\uc52d\uc52e\uc52f\uc530\uc531\uc532\uc533\uc534\uc535\uc536\uc537\uc538\uc539\uc53a\uc53b\uc53c\uc53d\uc53e\uc53f\uc540\uc541\uc542\uc543\uc544\uc545\uc546\uc547\uc548\uc549\uc54a\uc54b\uc54c\uc54d\uc54e\uc54f\uc550\uc551\uc552\uc553\uc554\uc555\uc556\uc557\uc558\uc559\uc55a\uc55b\uc55c\uc55d\uc55e\uc55f\uc560\uc561\uc562\uc563\uc564\uc565\uc566\uc567\uc568\uc569\uc56a\uc56b\uc56c\uc56d\uc56e\uc56f\uc570\uc571\uc572\uc573\uc574\uc575\uc576\uc577\uc578\uc579\uc57a\uc57b\uc57c\uc57d\uc57e\uc57f\uc580\uc581\uc582\uc583\uc584\uc585\uc586\uc587\uc588\uc589\uc58a\uc58b\uc58c\uc58d\uc58e\uc58f\uc590\uc591\uc592\uc593\uc594\uc595\uc596\uc597\uc598\uc599\uc59a\uc59b\uc59c\uc59d\uc59e\uc59f\uc5a0\uc5a1\uc5a2\uc5a3\uc5a4\uc5a5\uc5a6\uc5a7\uc5a8\uc5a9\uc5aa\uc5ab\uc5ac\uc5ad\uc5ae\uc5af\uc5b0\uc5b1\uc5b2\uc5b3\uc5b4\uc5b5\uc5b6\uc5b7\uc5b8\uc5b9\uc5ba\uc5bb\uc5bc\uc5bd\uc5be\uc5bf\uc5c0\uc5c1\uc5c2\uc5c3\uc5c4\uc5c5\uc5c6\uc5c7\uc5c8\uc5c9\uc5ca\uc5cb\uc5cc\uc5cd\uc5ce\uc5cf\uc5d0\uc5d1\uc5d2\uc5d3\uc5d4\uc5d5\uc5d6\uc5d7\uc5d8\uc5d9\uc5da\uc5db\uc5dc\uc5dd\uc5de\uc5df\uc5e0\uc5e1\uc5e2\uc5e3\uc5e4\uc5e5\uc5e6\uc5e7\uc5e8\uc5e9\uc5ea\uc5eb\uc5ec\uc5ed\uc5ee\uc5ef\uc5f0\uc5f1\uc5f2\uc5f3\uc5f4\uc5f5\uc5f6\uc5f7\uc5f8\uc5f9\uc5fa\uc5fb\uc5fc\uc5fd\uc5fe\uc5ff\uc600\uc601\uc602\uc603\uc604\uc605\uc606\uc607\uc608\uc609\uc60a\uc60b\uc60c\uc60d\uc60e\uc60f\uc610\uc611\uc612\uc613\uc614\uc615\uc616\uc617\uc618\uc619\uc61a\uc61b\uc61c\uc61d\uc61e\uc61f\uc620\uc621\uc622\uc623\uc624\uc625\uc626\uc627\uc628\uc629\uc62a\uc62b\uc62c\uc62d\uc62e\uc62f\uc630\uc631\uc632\uc633\uc634\uc635\uc636\uc637\uc638\uc639\uc63a\uc63b\uc63c\uc63d\uc63e\uc63f\uc640\uc641\uc642\uc643\uc644\uc645\uc646\uc647\uc648\uc649\uc64a\uc64b\uc64c\uc64d\uc64e\uc64f\uc650\uc651\uc652\uc653\uc654\uc655\uc656\uc657\uc658\uc659\uc65a\uc65b\uc65c\uc65d\uc65e\uc65f\uc660\uc661\uc662\uc663\uc664\uc665\uc666\uc667\uc668\uc669\uc66a\uc66b\uc66c\uc66d\uc66e\uc66f\uc670\uc671\uc672\uc673\uc674\uc675\uc676\uc677\uc678\uc679\uc67a\uc67b\uc67c\uc67d\uc67e\uc67f\uc680\uc681\uc682\uc683\uc684\uc685\uc686\uc687\uc688\uc689\uc68a\uc68b\uc68c\uc68d\uc68e\uc68f\uc690\uc691\uc692\uc693\uc694\uc695\uc696\uc697\uc698\uc699\uc69a\uc69b\uc69c\uc69d\uc69e\uc69f\uc6a0\uc6a1\uc6a2\uc6a3\uc6a4\uc6a5\uc6a6\uc6a7\uc6a8\uc6a9\uc6aa\uc6ab\uc6ac\uc6ad\uc6ae\uc6af\uc6b0\uc6b1\uc6b2\uc6b3\uc6b4\uc6b5\uc6b6\uc6b7\uc6b8\uc6b9\uc6ba\uc6bb\uc6bc\uc6bd\uc6be\uc6bf\uc6c0\uc6c1\uc6c2\uc6c3\uc6c4\uc6c5\uc6c6\uc6c7\uc6c8\uc6c9\uc6ca\uc6cb\uc6cc\uc6cd\uc6ce\uc6cf\uc6d0\uc6d1\uc6d2\uc6d3\uc6d4\uc6d5\uc6d6\uc6d7\uc6d8\uc6d9\uc6da\uc6db\uc6dc\uc6dd\uc6de\uc6df\uc6e0\uc6e1\uc6e2\uc6e3\uc6e4\uc6e5\uc6e6\uc6e7\uc6e8\uc6e9\uc6ea\uc6eb\uc6ec\uc6ed\uc6ee\uc6ef\uc6f0\uc6f1\uc6f2\uc6f3\uc6f4\uc6f5\uc6f6\uc6f7\uc6f8\uc6f9\uc6fa\uc6fb\uc6fc\uc6fd\uc6fe\uc6ff\uc700\uc701\uc702\uc703\uc704\uc705\uc706\uc707\uc708\uc709\uc70a\uc70b\uc70c\uc70d\uc70e\uc70f\uc710\uc711\uc712\uc713\uc714\uc715\uc716\uc717\uc718\uc719\uc71a\uc71b\uc71c\uc71d\uc71e\uc71f\uc720\uc721\uc722\uc723\uc724\uc725\uc726\uc727\uc728\uc729\uc72a\uc72b\uc72c\uc72d\uc72e\uc72f\uc730\uc731\uc732\uc733\uc734\uc735\uc736\uc737\uc738\uc739\uc73a\uc73b\uc73c\uc73d\uc73e\uc73f\uc740\uc741\uc742\uc743\uc744\uc745\uc746\uc747\uc748\uc749\uc74a\uc74b\uc74c\uc74d\uc74e\uc74f\uc750\uc751\uc752\uc753\uc754\uc755\uc756\uc757\uc758\uc759\uc75a\uc75b\uc75c\uc75d\uc75e\uc75f\uc760\uc761\uc762\uc763\uc764\uc765\uc766\uc767\uc768\uc769\uc76a\uc76b\uc76c\uc76d\uc76e\uc76f\uc770\uc771\uc772\uc773\uc774\uc775\uc776\uc777\uc778\uc779\uc77a\uc77b\uc77c\uc77d\uc77e\uc77f\uc780\uc781\uc782\uc783\uc784\uc785\uc786\uc787\uc788\uc789\uc78a\uc78b\uc78c\uc78d\uc78e\uc78f\uc790\uc791\uc792\uc793\uc794\uc795\uc796\uc797\uc798\uc799\uc79a\uc79b\uc79c\uc79d\uc79e\uc79f\uc7a0\uc7a1\uc7a2\uc7a3\uc7a4\uc7a5\uc7a6\uc7a7\uc7a8\uc7a9\uc7aa\uc7ab\uc7ac\uc7ad\uc7ae\uc7af\uc7b0\uc7b1\uc7b2\uc7b3\uc7b4\uc7b5\uc7b6\uc7b7\uc7b8\uc7b9\uc7ba\uc7bb\uc7bc\uc7bd\uc7be\uc7bf\uc7c0\uc7c1\uc7c2\uc7c3\uc7c4\uc7c5\uc7c6\uc7c7\uc7c8\uc7c9\uc7ca\uc7cb\uc7cc\uc7cd\uc7ce\uc7cf\uc7d0\uc7d1\uc7d2\uc7d3\uc7d4\uc7d5\uc7d6\uc7d7\uc7d8\uc7d9\uc7da\uc7db\uc7dc\uc7dd\uc7de\uc7df\uc7e0\uc7e1\uc7e2\uc7e3\uc7e4\uc7e5\uc7e6\uc7e7\uc7e8\uc7e9\uc7ea\uc7eb\uc7ec\uc7ed\uc7ee\uc7ef\uc7f0\uc7f1\uc7f2\uc7f3\uc7f4\uc7f5\uc7f6\uc7f7\uc7f8\uc7f9\uc7fa\uc7fb\uc7fc\uc7fd\uc7fe\uc7ff\uc800\uc801\uc802\uc803\uc804\uc805\uc806\uc807\uc808\uc809\uc80a\uc80b\uc80c\uc80d\uc80e\uc80f\uc810\uc811\uc812\uc813\uc814\uc815\uc816\uc817\uc818\uc819\uc81a\uc81b\uc81c\uc81d\uc81e\uc81f\uc820\uc821\uc822\uc823\uc824\uc825\uc826\uc827\uc828\uc829\uc82a\uc82b\uc82c\uc82d\uc82e\uc82f\uc830\uc831\uc832\uc833\uc834\uc835\uc836\uc837\uc838\uc839\uc83a\uc83b\uc83c\uc83d\uc83e\uc83f\uc840\uc841\uc842\uc843\uc844\uc845\uc846\uc847\uc848\uc849\uc84a\uc84b\uc84c\uc84d\uc84e\uc84f\uc850\uc851\uc852\uc853\uc854\uc855\uc856\uc857\uc858\uc859\uc85a\uc85b\uc85c\uc85d\uc85e\uc85f\uc860\uc861\uc862\uc863\uc864\uc865\uc866\uc867\uc868\uc869\uc86a\uc86b\uc86c\uc86d\uc86e\uc86f\uc870\uc871\uc872\uc873\uc874\uc875\uc876\uc877\uc878\uc879\uc87a\uc87b\uc87c\uc87d\uc87e\uc87f\uc880\uc881\uc882\uc883\uc884\uc885\uc886\uc887\uc888\uc889\uc88a\uc88b\uc88c\uc88d\uc88e\uc88f\uc890\uc891\uc892\uc893\uc894\uc895\uc896\uc897\uc898\uc899\uc89a\uc89b\uc89c\uc89d\uc89e\uc89f\uc8a0\uc8a1\uc8a2\uc8a3\uc8a4\uc8a5\uc8a6\uc8a7\uc8a8\uc8a9\uc8aa\uc8ab\uc8ac\uc8ad\uc8ae\uc8af\uc8b0\uc8b1\uc8b2\uc8b3\uc8b4\uc8b5\uc8b6\uc8b7\uc8b8\uc8b9\uc8ba\uc8bb\uc8bc\uc8bd\uc8be\uc8bf\uc8c0\uc8c1\uc8c2\uc8c3\uc8c4\uc8c5\uc8c6\uc8c7\uc8c8\uc8c9\uc8ca\uc8cb\uc8cc\uc8cd\uc8ce\uc8cf\uc8d0\uc8d1\uc8d2\uc8d3\uc8d4\uc8d5\uc8d6\uc8d7\uc8d8\uc8d9\uc8da\uc8db\uc8dc\uc8dd\uc8de\uc8df\uc8e0\uc8e1\uc8e2\uc8e3\uc8e4\uc8e5\uc8e6\uc8e7\uc8e8\uc8e9\uc8ea\uc8eb\uc8ec\uc8ed\uc8ee\uc8ef\uc8f0\uc8f1\uc8f2\uc8f3\uc8f4\uc8f5\uc8f6\uc8f7\uc8f8\uc8f9\uc8fa\uc8fb\uc8fc\uc8fd\uc8fe\uc8ff\uc900\uc901\uc902\uc903\uc904\uc905\uc906\uc907\uc908\uc909\uc90a\uc90b\uc90c\uc90d\uc90e\uc90f\uc910\uc911\uc912\uc913\uc914\uc915\uc916\uc917\uc918\uc919\uc91a\uc91b\uc91c\uc91d\uc91e\uc91f\uc920\uc921\uc922\uc923\uc924\uc925\uc926\uc927\uc928\uc929\uc92a\uc92b\uc92c\uc92d\uc92e\uc92f\uc930\uc931\uc932\uc933\uc934\uc935\uc936\uc937\uc938\uc939\uc93a\uc93b\uc93c\uc93d\uc93e\uc93f\uc940\uc941\uc942\uc943\uc944\uc945\uc946\uc947\uc948\uc949\uc94a\uc94b\uc94c\uc94d\uc94e\uc94f\uc950\uc951\uc952\uc953\uc954\uc955\uc956\uc957\uc958\uc959\uc95a\uc95b\uc95c\uc95d\uc95e\uc95f\uc960\uc961\uc962\uc963\uc964\uc965\uc966\uc967\uc968\uc969\uc96a\uc96b\uc96c\uc96d\uc96e\uc96f\uc970\uc971\uc972\uc973\uc974\uc975\uc976\uc977\uc978\uc979\uc97a\uc97b\uc97c\uc97d\uc97e\uc97f\uc980\uc981\uc982\uc983\uc984\uc985\uc986\uc987\uc988\uc989\uc98a\uc98b\uc98c\uc98d\uc98e\uc98f\uc990\uc991\uc992\uc993\uc994\uc995\uc996\uc997\uc998\uc999\uc99a\uc99b\uc99c\uc99d\uc99e\uc99f\uc9a0\uc9a1\uc9a2\uc9a3\uc9a4\uc9a5\uc9a6\uc9a7\uc9a8\uc9a9\uc9aa\uc9ab\uc9ac\uc9ad\uc9ae\uc9af\uc9b0\uc9b1\uc9b2\uc9b3\uc9b4\uc9b5\uc9b6\uc9b7\uc9b8\uc9b9\uc9ba\uc9bb\uc9bc\uc9bd\uc9be\uc9bf\uc9c0\uc9c1\uc9c2\uc9c3\uc9c4\uc9c5\uc9c6\uc9c7\uc9c8\uc9c9\uc9ca\uc9cb\uc9cc\uc9cd\uc9ce\uc9cf\uc9d0\uc9d1\uc9d2\uc9d3\uc9d4\uc9d5\uc9d6\uc9d7\uc9d8\uc9d9\uc9da\uc9db\uc9dc\uc9dd\uc9de\uc9df\uc9e0\uc9e1\uc9e2\uc9e3\uc9e4\uc9e5\uc9e6\uc9e7\uc9e8\uc9e9\uc9ea\uc9eb\uc9ec\uc9ed\uc9ee\uc9ef\uc9f0\uc9f1\uc9f2\uc9f3\uc9f4\uc9f5\uc9f6\uc9f7\uc9f8\uc9f9\uc9fa\uc9fb\uc9fc\uc9fd\uc9fe\uc9ff\uca00\uca01\uca02\uca03\uca04\uca05\uca06\uca07\uca08\uca09\uca0a\uca0b\uca0c\uca0d\uca0e\uca0f\uca10\uca11\uca12\uca13\uca14\uca15\uca16\uca17\uca18\uca19\uca1a\uca1b\uca1c\uca1d\uca1e\uca1f\uca20\uca21\uca22\uca23\uca24\uca25\uca26\uca27\uca28\uca29\uca2a\uca2b\uca2c\uca2d\uca2e\uca2f\uca30\uca31\uca32\uca33\uca34\uca35\uca36\uca37\uca38\uca39\uca3a\uca3b\uca3c\uca3d\uca3e\uca3f\uca40\uca41\uca42\uca43\uca44\uca45\uca46\uca47\uca48\uca49\uca4a\uca4b\uca4c\uca4d\uca4e\uca4f\uca50\uca51\uca52\uca53\uca54\uca55\uca56\uca57\uca58\uca59\uca5a\uca5b\uca5c\uca5d\uca5e\uca5f\uca60\uca61\uca62\uca63\uca64\uca65\uca66\uca67\uca68\uca69\uca6a\uca6b\uca6c\uca6d\uca6e\uca6f\uca70\uca71\uca72\uca73\uca74\uca75\uca76\uca77\uca78\uca79\uca7a\uca7b\uca7c\uca7d\uca7e\uca7f\uca80\uca81\uca82\uca83\uca84\uca85\uca86\uca87\uca88\uca89\uca8a\uca8b\uca8c\uca8d\uca8e\uca8f\uca90\uca91\uca92\uca93\uca94\uca95\uca96\uca97\uca98\uca99\uca9a\uca9b\uca9c\uca9d\uca9e\uca9f\ucaa0\ucaa1\ucaa2\ucaa3\ucaa4\ucaa5\ucaa6\ucaa7\ucaa8\ucaa9\ucaaa\ucaab\ucaac\ucaad\ucaae\ucaaf\ucab0\ucab1\ucab2\ucab3\ucab4\ucab5\ucab6\ucab7\ucab8\ucab9\ucaba\ucabb\ucabc\ucabd\ucabe\ucabf\ucac0\ucac1\ucac2\ucac3\ucac4\ucac5\ucac6\ucac7\ucac8\ucac9\ucaca\ucacb\ucacc\ucacd\ucace\ucacf\ucad0\ucad1\ucad2\ucad3\ucad4\ucad5\ucad6\ucad7\ucad8\ucad9\ucada\ucadb\ucadc\ucadd\ucade\ucadf\ucae0\ucae1\ucae2\ucae3\ucae4\ucae5\ucae6\ucae7\ucae8\ucae9\ucaea\ucaeb\ucaec\ucaed\ucaee\ucaef\ucaf0\ucaf1\ucaf2\ucaf3\ucaf4\ucaf5\ucaf6\ucaf7\ucaf8\ucaf9\ucafa\ucafb\ucafc\ucafd\ucafe\ucaff\ucb00\ucb01\ucb02\ucb03\ucb04\ucb05\ucb06\ucb07\ucb08\ucb09\ucb0a\ucb0b\ucb0c\ucb0d\ucb0e\ucb0f\ucb10\ucb11\ucb12\ucb13\ucb14\ucb15\ucb16\ucb17\ucb18\ucb19\ucb1a\ucb1b\ucb1c\ucb1d\ucb1e\ucb1f\ucb20\ucb21\ucb22\ucb23\ucb24\ucb25\ucb26\ucb27\ucb28\ucb29\ucb2a\ucb2b\ucb2c\ucb2d\ucb2e\ucb2f\ucb30\ucb31\ucb32\ucb33\ucb34\ucb35\ucb36\ucb37\ucb38\ucb39\ucb3a\ucb3b\ucb3c\ucb3d\ucb3e\ucb3f\ucb40\ucb41\ucb42\ucb43\ucb44\ucb45\ucb46\ucb47\ucb48\ucb49\ucb4a\ucb4b\ucb4c\ucb4d\ucb4e\ucb4f\ucb50\ucb51\ucb52\ucb53\ucb54\ucb55\ucb56\ucb57\ucb58\ucb59\ucb5a\ucb5b\ucb5c\ucb5d\ucb5e\ucb5f\ucb60\ucb61\ucb62\ucb63\ucb64\ucb65\ucb66\ucb67\ucb68\ucb69\ucb6a\ucb6b\ucb6c\ucb6d\ucb6e\ucb6f\ucb70\ucb71\ucb72\ucb73\ucb74\ucb75\ucb76\ucb77\ucb78\ucb79\ucb7a\ucb7b\ucb7c\ucb7d\ucb7e\ucb7f\ucb80\ucb81\ucb82\ucb83\ucb84\ucb85\ucb86\ucb87\ucb88\ucb89\ucb8a\ucb8b\ucb8c\ucb8d\ucb8e\ucb8f\ucb90\ucb91\ucb92\ucb93\ucb94\ucb95\ucb96\ucb97\ucb98\ucb99\ucb9a\ucb9b\ucb9c\ucb9d\ucb9e\ucb9f\ucba0\ucba1\ucba2\ucba3\ucba4\ucba5\ucba6\ucba7\ucba8\ucba9\ucbaa\ucbab\ucbac\ucbad\ucbae\ucbaf\ucbb0\ucbb1\ucbb2\ucbb3\ucbb4\ucbb5\ucbb6\ucbb7\ucbb8\ucbb9\ucbba\ucbbb\ucbbc\ucbbd\ucbbe\ucbbf\ucbc0\ucbc1\ucbc2\ucbc3\ucbc4\ucbc5\ucbc6\ucbc7\ucbc8\ucbc9\ucbca\ucbcb\ucbcc\ucbcd\ucbce\ucbcf\ucbd0\ucbd1\ucbd2\ucbd3\ucbd4\ucbd5\ucbd6\ucbd7\ucbd8\ucbd9\ucbda\ucbdb\ucbdc\ucbdd\ucbde\ucbdf\ucbe0\ucbe1\ucbe2\ucbe3\ucbe4\ucbe5\ucbe6\ucbe7\ucbe8\ucbe9\ucbea\ucbeb\ucbec\ucbed\ucbee\ucbef\ucbf0\ucbf1\ucbf2\ucbf3\ucbf4\ucbf5\ucbf6\ucbf7\ucbf8\ucbf9\ucbfa\ucbfb\ucbfc\ucbfd\ucbfe\ucbff\ucc00\ucc01\ucc02\ucc03\ucc04\ucc05\ucc06\ucc07\ucc08\ucc09\ucc0a\ucc0b\ucc0c\ucc0d\ucc0e\ucc0f\ucc10\ucc11\ucc12\ucc13\ucc14\ucc15\ucc16\ucc17\ucc18\ucc19\ucc1a\ucc1b\ucc1c\ucc1d\ucc1e\ucc1f\ucc20\ucc21\ucc22\ucc23\ucc24\ucc25\ucc26\ucc27\ucc28\ucc29\ucc2a\ucc2b\ucc2c\ucc2d\ucc2e\ucc2f\ucc30\ucc31\ucc32\ucc33\ucc34\ucc35\ucc36\ucc37\ucc38\ucc39\ucc3a\ucc3b\ucc3c\ucc3d\ucc3e\ucc3f\ucc40\ucc41\ucc42\ucc43\ucc44\ucc45\ucc46\ucc47\ucc48\ucc49\ucc4a\ucc4b\ucc4c\ucc4d\ucc4e\ucc4f\ucc50\ucc51\ucc52\ucc53\ucc54\ucc55\ucc56\ucc57\ucc58\ucc59\ucc5a\ucc5b\ucc5c\ucc5d\ucc5e\ucc5f\ucc60\ucc61\ucc62\ucc63\ucc64\ucc65\ucc66\ucc67\ucc68\ucc69\ucc6a\ucc6b\ucc6c\ucc6d\ucc6e\ucc6f\ucc70\ucc71\ucc72\ucc73\ucc74\ucc75\ucc76\ucc77\ucc78\ucc79\ucc7a\ucc7b\ucc7c\ucc7d\ucc7e\ucc7f\ucc80\ucc81\ucc82\ucc83\ucc84\ucc85\ucc86\ucc87\ucc88\ucc89\ucc8a\ucc8b\ucc8c\ucc8d\ucc8e\ucc8f\ucc90\ucc91\ucc92\ucc93\ucc94\ucc95\ucc96\ucc97\ucc98\ucc99\ucc9a\ucc9b\ucc9c\ucc9d\ucc9e\ucc9f\ucca0\ucca1\ucca2\ucca3\ucca4\ucca5\ucca6\ucca7\ucca8\ucca9\uccaa\uccab\uccac\uccad\uccae\uccaf\uccb0\uccb1\uccb2\uccb3\uccb4\uccb5\uccb6\uccb7\uccb8\uccb9\uccba\uccbb\uccbc\uccbd\uccbe\uccbf\uccc0\uccc1\uccc2\uccc3\uccc4\uccc5\uccc6\uccc7\uccc8\uccc9\uccca\ucccb\ucccc\ucccd\uccce\ucccf\uccd0\uccd1\uccd2\uccd3\uccd4\uccd5\uccd6\uccd7\uccd8\uccd9\uccda\uccdb\uccdc\uccdd\uccde\uccdf\ucce0\ucce1\ucce2\ucce3\ucce4\ucce5\ucce6\ucce7\ucce8\ucce9\uccea\ucceb\uccec\ucced\uccee\uccef\uccf0\uccf1\uccf2\uccf3\uccf4\uccf5\uccf6\uccf7\uccf8\uccf9\uccfa\uccfb\uccfc\uccfd\uccfe\uccff\ucd00\ucd01\ucd02\ucd03\ucd04\ucd05\ucd06\ucd07\ucd08\ucd09\ucd0a\ucd0b\ucd0c\ucd0d\ucd0e\ucd0f\ucd10\ucd11\ucd12\ucd13\ucd14\ucd15\ucd16\ucd17\ucd18\ucd19\ucd1a\ucd1b\ucd1c\ucd1d\ucd1e\ucd1f\ucd20\ucd21\ucd22\ucd23\ucd24\ucd25\ucd26\ucd27\ucd28\ucd29\ucd2a\ucd2b\ucd2c\ucd2d\ucd2e\ucd2f\ucd30\ucd31\ucd32\ucd33\ucd34\ucd35\ucd36\ucd37\ucd38\ucd39\ucd3a\ucd3b\ucd3c\ucd3d\ucd3e\ucd3f\ucd40\ucd41\ucd42\ucd43\ucd44\ucd45\ucd46\ucd47\ucd48\ucd49\ucd4a\ucd4b\ucd4c\ucd4d\ucd4e\ucd4f\ucd50\ucd51\ucd52\ucd53\ucd54\ucd55\ucd56\ucd57\ucd58\ucd59\ucd5a\ucd5b\ucd5c\ucd5d\ucd5e\ucd5f\ucd60\ucd61\ucd62\ucd63\ucd64\ucd65\ucd66\ucd67\ucd68\ucd69\ucd6a\ucd6b\ucd6c\ucd6d\ucd6e\ucd6f\ucd70\ucd71\ucd72\ucd73\ucd74\ucd75\ucd76\ucd77\ucd78\ucd79\ucd7a\ucd7b\ucd7c\ucd7d\ucd7e\ucd7f\ucd80\ucd81\ucd82\ucd83\ucd84\ucd85\ucd86\ucd87\ucd88\ucd89\ucd8a\ucd8b\ucd8c\ucd8d\ucd8e\ucd8f\ucd90\ucd91\ucd92\ucd93\ucd94\ucd95\ucd96\ucd97\ucd98\ucd99\ucd9a\ucd9b\ucd9c\ucd9d\ucd9e\ucd9f\ucda0\ucda1\ucda2\ucda3\ucda4\ucda5\ucda6\ucda7\ucda8\ucda9\ucdaa\ucdab\ucdac\ucdad\ucdae\ucdaf\ucdb0\ucdb1\ucdb2\ucdb3\ucdb4\ucdb5\ucdb6\ucdb7\ucdb8\ucdb9\ucdba\ucdbb\ucdbc\ucdbd\ucdbe\ucdbf\ucdc0\ucdc1\ucdc2\ucdc3\ucdc4\ucdc5\ucdc6\ucdc7\ucdc8\ucdc9\ucdca\ucdcb\ucdcc\ucdcd\ucdce\ucdcf\ucdd0\ucdd1\ucdd2\ucdd3\ucdd4\ucdd5\ucdd6\ucdd7\ucdd8\ucdd9\ucdda\ucddb\ucddc\ucddd\ucdde\ucddf\ucde0\ucde1\ucde2\ucde3\ucde4\ucde5\ucde6\ucde7\ucde8\ucde9\ucdea\ucdeb\ucdec\ucded\ucdee\ucdef\ucdf0\ucdf1\ucdf2\ucdf3\ucdf4\ucdf5\ucdf6\ucdf7\ucdf8\ucdf9\ucdfa\ucdfb\ucdfc\ucdfd\ucdfe\ucdff\uce00\uce01\uce02\uce03\uce04\uce05\uce06\uce07\uce08\uce09\uce0a\uce0b\uce0c\uce0d\uce0e\uce0f\uce10\uce11\uce12\uce13\uce14\uce15\uce16\uce17\uce18\uce19\uce1a\uce1b\uce1c\uce1d\uce1e\uce1f\uce20\uce21\uce22\uce23\uce24\uce25\uce26\uce27\uce28\uce29\uce2a\uce2b\uce2c\uce2d\uce2e\uce2f\uce30\uce31\uce32\uce33\uce34\uce35\uce36\uce37\uce38\uce39\uce3a\uce3b\uce3c\uce3d\uce3e\uce3f\uce40\uce41\uce42\uce43\uce44\uce45\uce46\uce47\uce48\uce49\uce4a\uce4b\uce4c\uce4d\uce4e\uce4f\uce50\uce51\uce52\uce53\uce54\uce55\uce56\uce57\uce58\uce59\uce5a\uce5b\uce5c\uce5d\uce5e\uce5f\uce60\uce61\uce62\uce63\uce64\uce65\uce66\uce67\uce68\uce69\uce6a\uce6b\uce6c\uce6d\uce6e\uce6f\uce70\uce71\uce72\uce73\uce74\uce75\uce76\uce77\uce78\uce79\uce7a\uce7b\uce7c\uce7d\uce7e\uce7f\uce80\uce81\uce82\uce83\uce84\uce85\uce86\uce87\uce88\uce89\uce8a\uce8b\uce8c\uce8d\uce8e\uce8f\uce90\uce91\uce92\uce93\uce94\uce95\uce96\uce97\uce98\uce99\uce9a\uce9b\uce9c\uce9d\uce9e\uce9f\ucea0\ucea1\ucea2\ucea3\ucea4\ucea5\ucea6\ucea7\ucea8\ucea9\uceaa\uceab\uceac\ucead\uceae\uceaf\uceb0\uceb1\uceb2\uceb3\uceb4\uceb5\uceb6\uceb7\uceb8\uceb9\uceba\ucebb\ucebc\ucebd\ucebe\ucebf\ucec0\ucec1\ucec2\ucec3\ucec4\ucec5\ucec6\ucec7\ucec8\ucec9\uceca\ucecb\ucecc\ucecd\ucece\ucecf\uced0\uced1\uced2\uced3\uced4\uced5\uced6\uced7\uced8\uced9\uceda\ucedb\ucedc\ucedd\ucede\ucedf\ucee0\ucee1\ucee2\ucee3\ucee4\ucee5\ucee6\ucee7\ucee8\ucee9\uceea\uceeb\uceec\uceed\uceee\uceef\ucef0\ucef1\ucef2\ucef3\ucef4\ucef5\ucef6\ucef7\ucef8\ucef9\ucefa\ucefb\ucefc\ucefd\ucefe\uceff\ucf00\ucf01\ucf02\ucf03\ucf04\ucf05\ucf06\ucf07\ucf08\ucf09\ucf0a\ucf0b\ucf0c\ucf0d\ucf0e\ucf0f\ucf10\ucf11\ucf12\ucf13\ucf14\ucf15\ucf16\ucf17\ucf18\ucf19\ucf1a\ucf1b\ucf1c\ucf1d\ucf1e\ucf1f\ucf20\ucf21\ucf22\ucf23\ucf24\ucf25\ucf26\ucf27\ucf28\ucf29\ucf2a\ucf2b\ucf2c\ucf2d\ucf2e\ucf2f\ucf30\ucf31\ucf32\ucf33\ucf34\ucf35\ucf36\ucf37\ucf38\ucf39\ucf3a\ucf3b\ucf3c\ucf3d\ucf3e\ucf3f\ucf40\ucf41\ucf42\ucf43\ucf44\ucf45\ucf46\ucf47\ucf48\ucf49\ucf4a\ucf4b\ucf4c\ucf4d\ucf4e\ucf4f\ucf50\ucf51\ucf52\ucf53\ucf54\ucf55\ucf56\ucf57\ucf58\ucf59\ucf5a\ucf5b\ucf5c\ucf5d\ucf5e\ucf5f\ucf60\ucf61\ucf62\ucf63\ucf64\ucf65\ucf66\ucf67\ucf68\ucf69\ucf6a\ucf6b\ucf6c\ucf6d\ucf6e\ucf6f\ucf70\ucf71\ucf72\ucf73\ucf74\ucf75\ucf76\ucf77\ucf78\ucf79\ucf7a\ucf7b\ucf7c\ucf7d\ucf7e\ucf7f\ucf80\ucf81\ucf82\ucf83\ucf84\ucf85\ucf86\ucf87\ucf88\ucf89\ucf8a\ucf8b\ucf8c\ucf8d\ucf8e\ucf8f\ucf90\ucf91\ucf92\ucf93\ucf94\ucf95\ucf96\ucf97\ucf98\ucf99\ucf9a\ucf9b\ucf9c\ucf9d\ucf9e\ucf9f\ucfa0\ucfa1\ucfa2\ucfa3\ucfa4\ucfa5\ucfa6\ucfa7\ucfa8\ucfa9\ucfaa\ucfab\ucfac\ucfad\ucfae\ucfaf\ucfb0\ucfb1\ucfb2\ucfb3\ucfb4\ucfb5\ucfb6\ucfb7\ucfb8\ucfb9\ucfba\ucfbb\ucfbc\ucfbd\ucfbe\ucfbf\ucfc0\ucfc1\ucfc2\ucfc3\ucfc4\ucfc5\ucfc6\ucfc7\ucfc8\ucfc9\ucfca\ucfcb\ucfcc\ucfcd\ucfce\ucfcf\ucfd0\ucfd1\ucfd2\ucfd3\ucfd4\ucfd5\ucfd6\ucfd7\ucfd8\ucfd9\ucfda\ucfdb\ucfdc\ucfdd\ucfde\ucfdf\ucfe0\ucfe1\ucfe2\ucfe3\ucfe4\ucfe5\ucfe6\ucfe7\ucfe8\ucfe9\ucfea\ucfeb\ucfec\ucfed\ucfee\ucfef\ucff0\ucff1\ucff2\ucff3\ucff4\ucff5\ucff6\ucff7\ucff8\ucff9\ucffa\ucffb\ucffc\ucffd\ucffe\ucfff\ud000\ud001\ud002\ud003\ud004\ud005\ud006\ud007\ud008\ud009\ud00a\ud00b\ud00c\ud00d\ud00e\ud00f\ud010\ud011\ud012\ud013\ud014\ud015\ud016\ud017\ud018\ud019\ud01a\ud01b\ud01c\ud01d\ud01e\ud01f\ud020\ud021\ud022\ud023\ud024\ud025\ud026\ud027\ud028\ud029\ud02a\ud02b\ud02c\ud02d\ud02e\ud02f\ud030\ud031\ud032\ud033\ud034\ud035\ud036\ud037\ud038\ud039\ud03a\ud03b\ud03c\ud03d\ud03e\ud03f\ud040\ud041\ud042\ud043\ud044\ud045\ud046\ud047\ud048\ud049\ud04a\ud04b\ud04c\ud04d\ud04e\ud04f\ud050\ud051\ud052\ud053\ud054\ud055\ud056\ud057\ud058\ud059\ud05a\ud05b\ud05c\ud05d\ud05e\ud05f\ud060\ud061\ud062\ud063\ud064\ud065\ud066\ud067\ud068\ud069\ud06a\ud06b\ud06c\ud06d\ud06e\ud06f\ud070\ud071\ud072\ud073\ud074\ud075\ud076\ud077\ud078\ud079\ud07a\ud07b\ud07c\ud07d\ud07e\ud07f\ud080\ud081\ud082\ud083\ud084\ud085\ud086\ud087\ud088\ud089\ud08a\ud08b\ud08c\ud08d\ud08e\ud08f\ud090\ud091\ud092\ud093\ud094\ud095\ud096\ud097\ud098\ud099\ud09a\ud09b\ud09c\ud09d\ud09e\ud09f\ud0a0\ud0a1\ud0a2\ud0a3\ud0a4\ud0a5\ud0a6\ud0a7\ud0a8\ud0a9\ud0aa\ud0ab\ud0ac\ud0ad\ud0ae\ud0af\ud0b0\ud0b1\ud0b2\ud0b3\ud0b4\ud0b5\ud0b6\ud0b7\ud0b8\ud0b9\ud0ba\ud0bb\ud0bc\ud0bd\ud0be\ud0bf\ud0c0\ud0c1\ud0c2\ud0c3\ud0c4\ud0c5\ud0c6\ud0c7\ud0c8\ud0c9\ud0ca\ud0cb\ud0cc\ud0cd\ud0ce\ud0cf\ud0d0\ud0d1\ud0d2\ud0d3\ud0d4\ud0d5\ud0d6\ud0d7\ud0d8\ud0d9\ud0da\ud0db\ud0dc\ud0dd\ud0de\ud0df\ud0e0\ud0e1\ud0e2\ud0e3\ud0e4\ud0e5\ud0e6\ud0e7\ud0e8\ud0e9\ud0ea\ud0eb\ud0ec\ud0ed\ud0ee\ud0ef\ud0f0\ud0f1\ud0f2\ud0f3\ud0f4\ud0f5\ud0f6\ud0f7\ud0f8\ud0f9\ud0fa\ud0fb\ud0fc\ud0fd\ud0fe\ud0ff\ud100\ud101\ud102\ud103\ud104\ud105\ud106\ud107\ud108\ud109\ud10a\ud10b\ud10c\ud10d\ud10e\ud10f\ud110\ud111\ud112\ud113\ud114\ud115\ud116\ud117\ud118\ud119\ud11a\ud11b\ud11c\ud11d\ud11e\ud11f\ud120\ud121\ud122\ud123\ud124\ud125\ud126\ud127\ud128\ud129\ud12a\ud12b\ud12c\ud12d\ud12e\ud12f\ud130\ud131\ud132\ud133\ud134\ud135\ud136\ud137\ud138\ud139\ud13a\ud13b\ud13c\ud13d\ud13e\ud13f\ud140\ud141\ud142\ud143\ud144\ud145\ud146\ud147\ud148\ud149\ud14a\ud14b\ud14c\ud14d\ud14e\ud14f\ud150\ud151\ud152\ud153\ud154\ud155\ud156\ud157\ud158\ud159\ud15a\ud15b\ud15c\ud15d\ud15e\ud15f\ud160\ud161\ud162\ud163\ud164\ud165\ud166\ud167\ud168\ud169\ud16a\ud16b\ud16c\ud16d\ud16e\ud16f\ud170\ud171\ud172\ud173\ud174\ud175\ud176\ud177\ud178\ud179\ud17a\ud17b\ud17c\ud17d\ud17e\ud17f\ud180\ud181\ud182\ud183\ud184\ud185\ud186\ud187\ud188\ud189\ud18a\ud18b\ud18c\ud18d\ud18e\ud18f\ud190\ud191\ud192\ud193\ud194\ud195\ud196\ud197\ud198\ud199\ud19a\ud19b\ud19c\ud19d\ud19e\ud19f\ud1a0\ud1a1\ud1a2\ud1a3\ud1a4\ud1a5\ud1a6\ud1a7\ud1a8\ud1a9\ud1aa\ud1ab\ud1ac\ud1ad\ud1ae\ud1af\ud1b0\ud1b1\ud1b2\ud1b3\ud1b4\ud1b5\ud1b6\ud1b7\ud1b8\ud1b9\ud1ba\ud1bb\ud1bc\ud1bd\ud1be\ud1bf\ud1c0\ud1c1\ud1c2\ud1c3\ud1c4\ud1c5\ud1c6\ud1c7\ud1c8\ud1c9\ud1ca\ud1cb\ud1cc\ud1cd\ud1ce\ud1cf\ud1d0\ud1d1\ud1d2\ud1d3\ud1d4\ud1d5\ud1d6\ud1d7\ud1d8\ud1d9\ud1da\ud1db\ud1dc\ud1dd\ud1de\ud1df\ud1e0\ud1e1\ud1e2\ud1e3\ud1e4\ud1e5\ud1e6\ud1e7\ud1e8\ud1e9\ud1ea\ud1eb\ud1ec\ud1ed\ud1ee\ud1ef\ud1f0\ud1f1\ud1f2\ud1f3\ud1f4\ud1f5\ud1f6\ud1f7\ud1f8\ud1f9\ud1fa\ud1fb\ud1fc\ud1fd\ud1fe\ud1ff\ud200\ud201\ud202\ud203\ud204\ud205\ud206\ud207\ud208\ud209\ud20a\ud20b\ud20c\ud20d\ud20e\ud20f\ud210\ud211\ud212\ud213\ud214\ud215\ud216\ud217\ud218\ud219\ud21a\ud21b\ud21c\ud21d\ud21e\ud21f\ud220\ud221\ud222\ud223\ud224\ud225\ud226\ud227\ud228\ud229\ud22a\ud22b\ud22c\ud22d\ud22e\ud22f\ud230\ud231\ud232\ud233\ud234\ud235\ud236\ud237\ud238\ud239\ud23a\ud23b\ud23c\ud23d\ud23e\ud23f\ud240\ud241\ud242\ud243\ud244\ud245\ud246\ud247\ud248\ud249\ud24a\ud24b\ud24c\ud24d\ud24e\ud24f\ud250\ud251\ud252\ud253\ud254\ud255\ud256\ud257\ud258\ud259\ud25a\ud25b\ud25c\ud25d\ud25e\ud25f\ud260\ud261\ud262\ud263\ud264\ud265\ud266\ud267\ud268\ud269\ud26a\ud26b\ud26c\ud26d\ud26e\ud26f\ud270\ud271\ud272\ud273\ud274\ud275\ud276\ud277\ud278\ud279\ud27a\ud27b\ud27c\ud27d\ud27e\ud27f\ud280\ud281\ud282\ud283\ud284\ud285\ud286\ud287\ud288\ud289\ud28a\ud28b\ud28c\ud28d\ud28e\ud28f\ud290\ud291\ud292\ud293\ud294\ud295\ud296\ud297\ud298\ud299\ud29a\ud29b\ud29c\ud29d\ud29e\ud29f\ud2a0\ud2a1\ud2a2\ud2a3\ud2a4\ud2a5\ud2a6\ud2a7\ud2a8\ud2a9\ud2aa\ud2ab\ud2ac\ud2ad\ud2ae\ud2af\ud2b0\ud2b1\ud2b2\ud2b3\ud2b4\ud2b5\ud2b6\ud2b7\ud2b8\ud2b9\ud2ba\ud2bb\ud2bc\ud2bd\ud2be\ud2bf\ud2c0\ud2c1\ud2c2\ud2c3\ud2c4\ud2c5\ud2c6\ud2c7\ud2c8\ud2c9\ud2ca\ud2cb\ud2cc\ud2cd\ud2ce\ud2cf\ud2d0\ud2d1\ud2d2\ud2d3\ud2d4\ud2d5\ud2d6\ud2d7\ud2d8\ud2d9\ud2da\ud2db\ud2dc\ud2dd\ud2de\ud2df\ud2e0\ud2e1\ud2e2\ud2e3\ud2e4\ud2e5\ud2e6\ud2e7\ud2e8\ud2e9\ud2ea\ud2eb\ud2ec\ud2ed\ud2ee\ud2ef\ud2f0\ud2f1\ud2f2\ud2f3\ud2f4\ud2f5\ud2f6\ud2f7\ud2f8\ud2f9\ud2fa\ud2fb\ud2fc\ud2fd\ud2fe\ud2ff\ud300\ud301\ud302\ud303\ud304\ud305\ud306\ud307\ud308\ud309\ud30a\ud30b\ud30c\ud30d\ud30e\ud30f\ud310\ud311\ud312\ud313\ud314\ud315\ud316\ud317\ud318\ud319\ud31a\ud31b\ud31c\ud31d\ud31e\ud31f\ud320\ud321\ud322\ud323\ud324\ud325\ud326\ud327\ud328\ud329\ud32a\ud32b\ud32c\ud32d\ud32e\ud32f\ud330\ud331\ud332\ud333\ud334\ud335\ud336\ud337\ud338\ud339\ud33a\ud33b\ud33c\ud33d\ud33e\ud33f\ud340\ud341\ud342\ud343\ud344\ud345\ud346\ud347\ud348\ud349\ud34a\ud34b\ud34c\ud34d\ud34e\ud34f\ud350\ud351\ud352\ud353\ud354\ud355\ud356\ud357\ud358\ud359\ud35a\ud35b\ud35c\ud35d\ud35e\ud35f\ud360\ud361\ud362\ud363\ud364\ud365\ud366\ud367\ud368\ud369\ud36a\ud36b\ud36c\ud36d\ud36e\ud36f\ud370\ud371\ud372\ud373\ud374\ud375\ud376\ud377\ud378\ud379\ud37a\ud37b\ud37c\ud37d\ud37e\ud37f\ud380\ud381\ud382\ud383\ud384\ud385\ud386\ud387\ud388\ud389\ud38a\ud38b\ud38c\ud38d\ud38e\ud38f\ud390\ud391\ud392\ud393\ud394\ud395\ud396\ud397\ud398\ud399\ud39a\ud39b\ud39c\ud39d\ud39e\ud39f\ud3a0\ud3a1\ud3a2\ud3a3\ud3a4\ud3a5\ud3a6\ud3a7\ud3a8\ud3a9\ud3aa\ud3ab\ud3ac\ud3ad\ud3ae\ud3af\ud3b0\ud3b1\ud3b2\ud3b3\ud3b4\ud3b5\ud3b6\ud3b7\ud3b8\ud3b9\ud3ba\ud3bb\ud3bc\ud3bd\ud3be\ud3bf\ud3c0\ud3c1\ud3c2\ud3c3\ud3c4\ud3c5\ud3c6\ud3c7\ud3c8\ud3c9\ud3ca\ud3cb\ud3cc\ud3cd\ud3ce\ud3cf\ud3d0\ud3d1\ud3d2\ud3d3\ud3d4\ud3d5\ud3d6\ud3d7\ud3d8\ud3d9\ud3da\ud3db\ud3dc\ud3dd\ud3de\ud3df\ud3e0\ud3e1\ud3e2\ud3e3\ud3e4\ud3e5\ud3e6\ud3e7\ud3e8\ud3e9\ud3ea\ud3eb\ud3ec\ud3ed\ud3ee\ud3ef\ud3f0\ud3f1\ud3f2\ud3f3\ud3f4\ud3f5\ud3f6\ud3f7\ud3f8\ud3f9\ud3fa\ud3fb\ud3fc\ud3fd\ud3fe\ud3ff\ud400\ud401\ud402\ud403\ud404\ud405\ud406\ud407\ud408\ud409\ud40a\ud40b\ud40c\ud40d\ud40e\ud40f\ud410\ud411\ud412\ud413\ud414\ud415\ud416\ud417\ud418\ud419\ud41a\ud41b\ud41c\ud41d\ud41e\ud41f\ud420\ud421\ud422\ud423\ud424\ud425\ud426\ud427\ud428\ud429\ud42a\ud42b\ud42c\ud42d\ud42e\ud42f\ud430\ud431\ud432\ud433\ud434\ud435\ud436\ud437\ud438\ud439\ud43a\ud43b\ud43c\ud43d\ud43e\ud43f\ud440\ud441\ud442\ud443\ud444\ud445\ud446\ud447\ud448\ud449\ud44a\ud44b\ud44c\ud44d\ud44e\ud44f\ud450\ud451\ud452\ud453\ud454\ud455\ud456\ud457\ud458\ud459\ud45a\ud45b\ud45c\ud45d\ud45e\ud45f\ud460\ud461\ud462\ud463\ud464\ud465\ud466\ud467\ud468\ud469\ud46a\ud46b\ud46c\ud46d\ud46e\ud46f\ud470\ud471\ud472\ud473\ud474\ud475\ud476\ud477\ud478\ud479\ud47a\ud47b\ud47c\ud47d\ud47e\ud47f\ud480\ud481\ud482\ud483\ud484\ud485\ud486\ud487\ud488\ud489\ud48a\ud48b\ud48c\ud48d\ud48e\ud48f\ud490\ud491\ud492\ud493\ud494\ud495\ud496\ud497\ud498\ud499\ud49a\ud49b\ud49c\ud49d\ud49e\ud49f\ud4a0\ud4a1\ud4a2\ud4a3\ud4a4\ud4a5\ud4a6\ud4a7\ud4a8\ud4a9\ud4aa\ud4ab\ud4ac\ud4ad\ud4ae\ud4af\ud4b0\ud4b1\ud4b2\ud4b3\ud4b4\ud4b5\ud4b6\ud4b7\ud4b8\ud4b9\ud4ba\ud4bb\ud4bc\ud4bd\ud4be\ud4bf\ud4c0\ud4c1\ud4c2\ud4c3\ud4c4\ud4c5\ud4c6\ud4c7\ud4c8\ud4c9\ud4ca\ud4cb\ud4cc\ud4cd\ud4ce\ud4cf\ud4d0\ud4d1\ud4d2\ud4d3\ud4d4\ud4d5\ud4d6\ud4d7\ud4d8\ud4d9\ud4da\ud4db\ud4dc\ud4dd\ud4de\ud4df\ud4e0\ud4e1\ud4e2\ud4e3\ud4e4\ud4e5\ud4e6\ud4e7\ud4e8\ud4e9\ud4ea\ud4eb\ud4ec\ud4ed\ud4ee\ud4ef\ud4f0\ud4f1\ud4f2\ud4f3\ud4f4\ud4f5\ud4f6\ud4f7\ud4f8\ud4f9\ud4fa\ud4fb\ud4fc\ud4fd\ud4fe\ud4ff\ud500\ud501\ud502\ud503\ud504\ud505\ud506\ud507\ud508\ud509\ud50a\ud50b\ud50c\ud50d\ud50e\ud50f\ud510\ud511\ud512\ud513\ud514\ud515\ud516\ud517\ud518\ud519\ud51a\ud51b\ud51c\ud51d\ud51e\ud51f\ud520\ud521\ud522\ud523\ud524\ud525\ud526\ud527\ud528\ud529\ud52a\ud52b\ud52c\ud52d\ud52e\ud52f\ud530\ud531\ud532\ud533\ud534\ud535\ud536\ud537\ud538\ud539\ud53a\ud53b\ud53c\ud53d\ud53e\ud53f\ud540\ud541\ud542\ud543\ud544\ud545\ud546\ud547\ud548\ud549\ud54a\ud54b\ud54c\ud54d\ud54e\ud54f\ud550\ud551\ud552\ud553\ud554\ud555\ud556\ud557\ud558\ud559\ud55a\ud55b\ud55c\ud55d\ud55e\ud55f\ud560\ud561\ud562\ud563\ud564\ud565\ud566\ud567\ud568\ud569\ud56a\ud56b\ud56c\ud56d\ud56e\ud56f\ud570\ud571\ud572\ud573\ud574\ud575\ud576\ud577\ud578\ud579\ud57a\ud57b\ud57c\ud57d\ud57e\ud57f\ud580\ud581\ud582\ud583\ud584\ud585\ud586\ud587\ud588\ud589\ud58a\ud58b\ud58c\ud58d\ud58e\ud58f\ud590\ud591\ud592\ud593\ud594\ud595\ud596\ud597\ud598\ud599\ud59a\ud59b\ud59c\ud59d\ud59e\ud59f\ud5a0\ud5a1\ud5a2\ud5a3\ud5a4\ud5a5\ud5a6\ud5a7\ud5a8\ud5a9\ud5aa\ud5ab\ud5ac\ud5ad\ud5ae\ud5af\ud5b0\ud5b1\ud5b2\ud5b3\ud5b4\ud5b5\ud5b6\ud5b7\ud5b8\ud5b9\ud5ba\ud5bb\ud5bc\ud5bd\ud5be\ud5bf\ud5c0\ud5c1\ud5c2\ud5c3\ud5c4\ud5c5\ud5c6\ud5c7\ud5c8\ud5c9\ud5ca\ud5cb\ud5cc\ud5cd\ud5ce\ud5cf\ud5d0\ud5d1\ud5d2\ud5d3\ud5d4\ud5d5\ud5d6\ud5d7\ud5d8\ud5d9\ud5da\ud5db\ud5dc\ud5dd\ud5de\ud5df\ud5e0\ud5e1\ud5e2\ud5e3\ud5e4\ud5e5\ud5e6\ud5e7\ud5e8\ud5e9\ud5ea\ud5eb\ud5ec\ud5ed\ud5ee\ud5ef\ud5f0\ud5f1\ud5f2\ud5f3\ud5f4\ud5f5\ud5f6\ud5f7\ud5f8\ud5f9\ud5fa\ud5fb\ud5fc\ud5fd\ud5fe\ud5ff\ud600\ud601\ud602\ud603\ud604\ud605\ud606\ud607\ud608\ud609\ud60a\ud60b\ud60c\ud60d\ud60e\ud60f\ud610\ud611\ud612\ud613\ud614\ud615\ud616\ud617\ud618\ud619\ud61a\ud61b\ud61c\ud61d\ud61e\ud61f\ud620\ud621\ud622\ud623\ud624\ud625\ud626\ud627\ud628\ud629\ud62a\ud62b\ud62c\ud62d\ud62e\ud62f\ud630\ud631\ud632\ud633\ud634\ud635\ud636\ud637\ud638\ud639\ud63a\ud63b\ud63c\ud63d\ud63e\ud63f\ud640\ud641\ud642\ud643\ud644\ud645\ud646\ud647\ud648\ud649\ud64a\ud64b\ud64c\ud64d\ud64e\ud64f\ud650\ud651\ud652\ud653\ud654\ud655\ud656\ud657\ud658\ud659\ud65a\ud65b\ud65c\ud65d\ud65e\ud65f\ud660\ud661\ud662\ud663\ud664\ud665\ud666\ud667\ud668\ud669\ud66a\ud66b\ud66c\ud66d\ud66e\ud66f\ud670\ud671\ud672\ud673\ud674\ud675\ud676\ud677\ud678\ud679\ud67a\ud67b\ud67c\ud67d\ud67e\ud67f\ud680\ud681\ud682\ud683\ud684\ud685\ud686\ud687\ud688\ud689\ud68a\ud68b\ud68c\ud68d\ud68e\ud68f\ud690\ud691\ud692\ud693\ud694\ud695\ud696\ud697\ud698\ud699\ud69a\ud69b\ud69c\ud69d\ud69e\ud69f\ud6a0\ud6a1\ud6a2\ud6a3\ud6a4\ud6a5\ud6a6\ud6a7\ud6a8\ud6a9\ud6aa\ud6ab\ud6ac\ud6ad\ud6ae\ud6af\ud6b0\ud6b1\ud6b2\ud6b3\ud6b4\ud6b5\ud6b6\ud6b7\ud6b8\ud6b9\ud6ba\ud6bb\ud6bc\ud6bd\ud6be\ud6bf\ud6c0\ud6c1\ud6c2\ud6c3\ud6c4\ud6c5\ud6c6\ud6c7\ud6c8\ud6c9\ud6ca\ud6cb\ud6cc\ud6cd\ud6ce\ud6cf\ud6d0\ud6d1\ud6d2\ud6d3\ud6d4\ud6d5\ud6d6\ud6d7\ud6d8\ud6d9\ud6da\ud6db\ud6dc\ud6dd\ud6de\ud6df\ud6e0\ud6e1\ud6e2\ud6e3\ud6e4\ud6e5\ud6e6\ud6e7\ud6e8\ud6e9\ud6ea\ud6eb\ud6ec\ud6ed\ud6ee\ud6ef\ud6f0\ud6f1\ud6f2\ud6f3\ud6f4\ud6f5\ud6f6\ud6f7\ud6f8\ud6f9\ud6fa\ud6fb\ud6fc\ud6fd\ud6fe\ud6ff\ud700\ud701\ud702\ud703\ud704\ud705\ud706\ud707\ud708\ud709\ud70a\ud70b\ud70c\ud70d\ud70e\ud70f\ud710\ud711\ud712\ud713\ud714\ud715\ud716\ud717\ud718\ud719\ud71a\ud71b\ud71c\ud71d\ud71e\ud71f\ud720\ud721\ud722\ud723\ud724\ud725\ud726\ud727\ud728\ud729\ud72a\ud72b\ud72c\ud72d\ud72e\ud72f\ud730\ud731\ud732\ud733\ud734\ud735\ud736\ud737\ud738\ud739\ud73a\ud73b\ud73c\ud73d\ud73e\ud73f\ud740\ud741\ud742\ud743\ud744\ud745\ud746\ud747\ud748\ud749\ud74a\ud74b\ud74c\ud74d\ud74e\ud74f\ud750\ud751\ud752\ud753\ud754\ud755\ud756\ud757\ud758\ud759\ud75a\ud75b\ud75c\ud75d\ud75e\ud75f\ud760\ud761\ud762\ud763\ud764\ud765\ud766\ud767\ud768\ud769\ud76a\ud76b\ud76c\ud76d\ud76e\ud76f\ud770\ud771\ud772\ud773\ud774\ud775\ud776\ud777\ud778\ud779\ud77a\ud77b\ud77c\ud77d\ud77e\ud77f\ud780\ud781\ud782\ud783\ud784\ud785\ud786\ud787\ud788\ud789\ud78a\ud78b\ud78c\ud78d\ud78e\ud78f\ud790\ud791\ud792\ud793\ud794\ud795\ud796\ud797\ud798\ud799\ud79a\ud79b\ud79c\ud79d\ud79e\ud79f\ud7a0\ud7a1\ud7a2\ud7a3\ud7b0\ud7b1\ud7b2\ud7b3\ud7b4\ud7b5\ud7b6\ud7b7\ud7b8\ud7b9\ud7ba\ud7bb\ud7bc\ud7bd\ud7be\ud7bf\ud7c0\ud7c1\ud7c2\ud7c3\ud7c4\ud7c5\ud7c6\ud7cb\ud7cc\ud7cd\ud7ce\ud7cf\ud7d0\ud7d1\ud7d2\ud7d3\ud7d4\ud7d5\ud7d6\ud7d7\ud7d8\ud7d9\ud7da\ud7db\ud7dc\ud7dd\ud7de\ud7df\ud7e0\ud7e1\ud7e2\ud7e3\ud7e4\ud7e5\ud7e6\ud7e7\ud7e8\ud7e9\ud7ea\ud7eb\ud7ec\ud7ed\ud7ee\ud7ef\ud7f0\ud7f1\ud7f2\ud7f3\ud7f4\ud7f5\ud7f6\ud7f7\ud7f8\ud7f9\ud7fa\ud7fb\uf900\uf901\uf902\uf903\uf904\uf905\uf906\uf907\uf908\uf909\uf90a\uf90b\uf90c\uf90d\uf90e\uf90f\uf910\uf911\uf912\uf913\uf914\uf915\uf916\uf917\uf918\uf919\uf91a\uf91b\uf91c\uf91d\uf91e\uf91f\uf920\uf921\uf922\uf923\uf924\uf925\uf926\uf927\uf928\uf929\uf92a\uf92b\uf92c\uf92d\uf92e\uf92f\uf930\uf931\uf932\uf933\uf934\uf935\uf936\uf937\uf938\uf939\uf93a\uf93b\uf93c\uf93d\uf93e\uf93f\uf940\uf941\uf942\uf943\uf944\uf945\uf946\uf947\uf948\uf949\uf94a\uf94b\uf94c\uf94d\uf94e\uf94f\uf950\uf951\uf952\uf953\uf954\uf955\uf956\uf957\uf958\uf959\uf95a\uf95b\uf95c\uf95d\uf95e\uf95f\uf960\uf961\uf962\uf963\uf964\uf965\uf966\uf967\uf968\uf969\uf96a\uf96b\uf96c\uf96d\uf96e\uf96f\uf970\uf971\uf972\uf973\uf974\uf975\uf976\uf977\uf978\uf979\uf97a\uf97b\uf97c\uf97d\uf97e\uf97f\uf980\uf981\uf982\uf983\uf984\uf985\uf986\uf987\uf988\uf989\uf98a\uf98b\uf98c\uf98d\uf98e\uf98f\uf990\uf991\uf992\uf993\uf994\uf995\uf996\uf997\uf998\uf999\uf99a\uf99b\uf99c\uf99d\uf99e\uf99f\uf9a0\uf9a1\uf9a2\uf9a3\uf9a4\uf9a5\uf9a6\uf9a7\uf9a8\uf9a9\uf9aa\uf9ab\uf9ac\uf9ad\uf9ae\uf9af\uf9b0\uf9b1\uf9b2\uf9b3\uf9b4\uf9b5\uf9b6\uf9b7\uf9b8\uf9b9\uf9ba\uf9bb\uf9bc\uf9bd\uf9be\uf9bf\uf9c0\uf9c1\uf9c2\uf9c3\uf9c4\uf9c5\uf9c6\uf9c7\uf9c8\uf9c9\uf9ca\uf9cb\uf9cc\uf9cd\uf9ce\uf9cf\uf9d0\uf9d1\uf9d2\uf9d3\uf9d4\uf9d5\uf9d6\uf9d7\uf9d8\uf9d9\uf9da\uf9db\uf9dc\uf9dd\uf9de\uf9df\uf9e0\uf9e1\uf9e2\uf9e3\uf9e4\uf9e5\uf9e6\uf9e7\uf9e8\uf9e9\uf9ea\uf9eb\uf9ec\uf9ed\uf9ee\uf9ef\uf9f0\uf9f1\uf9f2\uf9f3\uf9f4\uf9f5\uf9f6\uf9f7\uf9f8\uf9f9\uf9fa\uf9fb\uf9fc\uf9fd\uf9fe\uf9ff\ufa00\ufa01\ufa02\ufa03\ufa04\ufa05\ufa06\ufa07\ufa08\ufa09\ufa0a\ufa0b\ufa0c\ufa0d\ufa0e\ufa0f\ufa10\ufa11\ufa12\ufa13\ufa14\ufa15\ufa16\ufa17\ufa18\ufa19\ufa1a\ufa1b\ufa1c\ufa1d\ufa1e\ufa1f\ufa20\ufa21\ufa22\ufa23\ufa24\ufa25\ufa26\ufa27\ufa28\ufa29\ufa2a\ufa2b\ufa2c\ufa2d\ufa2e\ufa2f\ufa30\ufa31\ufa32\ufa33\ufa34\ufa35\ufa36\ufa37\ufa38\ufa39\ufa3a\ufa3b\ufa3c\ufa3d\ufa3e\ufa3f\ufa40\ufa41\ufa42\ufa43\ufa44\ufa45\ufa46\ufa47\ufa48\ufa49\ufa4a\ufa4b\ufa4c\ufa4d\ufa4e\ufa4f\ufa50\ufa51\ufa52\ufa53\ufa54\ufa55\ufa56\ufa57\ufa58\ufa59\ufa5a\ufa5b\ufa5c\ufa5d\ufa5e\ufa5f\ufa60\ufa61\ufa62\ufa63\ufa64\ufa65\ufa66\ufa67\ufa68\ufa69\ufa6a\ufa6b\ufa6d\ufa70\ufa71\ufa72\ufa73\ufa74\ufa75\ufa76\ufa77\ufa78\ufa79\ufa7a\ufa7b\ufa7c\ufa7d\ufa7e\ufa7f\ufa80\ufa81\ufa82\ufa83\ufa84\ufa85\ufa86\ufa87\ufa88\ufa89\ufa8a\ufa8b\ufa8c\ufa8d\ufa8e\ufa8f\ufa90\ufa91\ufa92\ufa93\ufa94\ufa95\ufa96\ufa97\ufa98\ufa99\ufa9a\ufa9b\ufa9c\ufa9d\ufa9e\ufa9f\ufaa0\ufaa1\ufaa2\ufaa3\ufaa4\ufaa5\ufaa6\ufaa7\ufaa8\ufaa9\ufaaa\ufaab\ufaac\ufaad\ufaae\ufaaf\ufab0\ufab1\ufab2\ufab3\ufab4\ufab5\ufab6\ufab7\ufab8\ufab9\ufaba\ufabb\ufabc\ufabd\ufabe\ufabf\ufac0\ufac1\ufac2\ufac3\ufac4\ufac5\ufac6\ufac7\ufac8\ufac9\ufaca\ufacb\ufacc\ufacd\uface\ufad2\ufad3\ufad4\ufad8\ufad9\ufb1e\ufb20\ufb21\ufb22\ufb23\ufb24\ufb25\ufb26\ufb27\ufb28\ufb50\ufb51\ufb52\ufb53\ufb54\ufb55\ufb56\ufb57\ufb58\ufb59\ufb5a\ufb5b\ufb5c\ufb5d\ufb5e\ufb5f\ufb60\ufb61\ufb62\ufb63\ufb64\ufb65\ufb66\ufb67\ufb68\ufb69\ufb6a\ufb6b\ufb6c\ufb6d\ufb6e\ufb6f\ufb70\ufb71\ufb72\ufb73\ufb74\ufb75\ufb76\ufb77\ufb78\ufb79\ufb7a\ufb7b\ufb7c\ufb7d\ufb7e\ufb7f\ufb80\ufb81\ufb82\ufb83\ufb84\ufb85\ufb86\ufb87\ufb88\ufb89\ufb8a\ufb8b\ufb8c\ufb8d\ufb8e\ufb8f\ufb90\ufb91\ufb92\ufb93\ufb94\ufb95\ufb96\ufb97\ufb98\ufb99\ufb9a\ufb9b\ufb9c\ufb9d\ufb9e\ufb9f\ufba0\ufba1\ufba2\ufba3\ufba4\ufba5\ufba6\ufba7\ufba8\ufba9\ufbaa\ufbab\ufbac\ufbad\ufbae\ufbaf\ufbb0\ufbb1\ufbd3\ufbd4\ufbd5\ufbd6\ufbd7\ufbd8\ufbd9\ufbda\ufbdb\ufbdc\ufbde\ufbdf\ufbe0\ufbe1\ufbe2\ufbe3\ufbe4\ufbe5\ufbe6\ufbe7\ufbe8\ufbe9\ufbfc\ufbfd\ufbfe\ufbff\ufe00\ufe01\ufe02\ufe03\ufe04\ufe05\ufe06\ufe07\ufe08\ufe09\ufe0a\ufe0b\ufe0c\ufe0d\ufe0e\ufe0f\ufe20\ufe21\ufe22\ufe23\ufe24\ufe25\ufe26\ufe27\ufe28\ufe29\ufe2a\ufe2b\ufe2c\ufe2d\ufe2e\ufe2f\ufe33\ufe34\ufe4d\ufe4e\ufe4f\ufe73\ufe80\ufe81\ufe82\ufe83\ufe84\ufe85\ufe86\ufe87\ufe88\ufe89\ufe8a\ufe8b\ufe8c\ufe8d\ufe8e\ufe8f\ufe90\ufe91\ufe92\ufe93\ufe94\ufe95\ufe96\ufe97\ufe98\ufe99\ufe9a\ufe9b\ufe9c\ufe9d\ufe9e\ufe9f\ufea0\ufea1\ufea2\ufea3\ufea4\ufea5\ufea6\ufea7\ufea8\ufea9\ufeaa\ufeab\ufeac\ufead\ufeae\ufeaf\ufeb0\ufeb1\ufeb2\ufeb3\ufeb4\ufeb5\ufeb6\ufeb7\ufeb8\ufeb9\ufeba\ufebb\ufebc\ufebd\ufebe\ufebf\ufec0\ufec1\ufec2\ufec3\ufec4\ufec5\ufec6\ufec7\ufec8\ufec9\ufeca\ufecb\ufecc\ufecd\ufece\ufecf\ufed0\ufed1\ufed2\ufed3\ufed4\ufed5\ufed6\ufed7\ufed8\ufed9\ufeda\ufedb\ufedc\ufedd\ufede\ufedf\ufee0\ufee1\ufee2\ufee3\ufee4\ufee5\ufee6\ufee7\ufee8\ufee9\ufeea\ufeeb\ufeec\ufeed\ufeee\ufeef\ufef0\ufef1\ufef2\ufef3\ufef4\uff10\uff11\uff12\uff13\uff14\uff15\uff16\uff17\uff18\uff19\uff21\uff22\uff23\uff24\uff25\uff26\uff27\uff28\uff29\uff2a\uff2b\uff2c\uff2d\uff2e\uff2f\uff30\uff31\uff32\uff33\uff34\uff35\uff36\uff37\uff38\uff39\uff3a\uff3f\uff41\uff42\uff43\uff44\uff45\uff46\uff47\uff48\uff49\uff4a\uff4b\uff4c\uff4d\uff4e\uff4f\uff50\uff51\uff52\uff53\uff54\uff55\uff56\uff57\uff58\uff59\uff5a\uff66\uff67\uff68\uff69\uff6a\uff6b\uff6c\uff6d\uff6e\uff6f\uff70\uff71\uff72\uff73\uff74\uff75\uff76\uff77\uff78\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff80\uff81\uff82\uff83\uff84\uff85\uff86\uff87\uff88\uff89\uff8a\uff8b\uff8c\uff8d\uff8e\uff8f\uff90\uff91\uff92\uff93\uff94\uff95\uff96\uff97\uff98\uff99\uff9a\uff9b\uff9c\uff9d\uff9e\uff9f\uffa0\uffa1\uffa2\uffa3\uffa4\uffa5\uffa6\uffa7\uffa8\uffa9\uffaa\uffab\uffac\uffad\uffae\uffaf\uffb0\uffb1\uffb2\uffb3\uffb4\uffb5\uffb6\uffb7\uffb8\uffb9\uffba\uffbb\uffbc\uffbd\uffbe\uffc2\uffc3\uffc4\uffc5\uffc6\uffc7\uffca\uffcb\uffcc\uffcd\uffce\uffcf\uffd2\uffd3\uffd4\uffd5\uffd6\uffd7\uffda\uffdb\uffdc'
+# Generated code end
+
+if __name__ == '__main__':
+ import sys
+ import unicodedata
+
+ if sys.version_info[0] < 3:
+ raise RuntimeError('This needs to run on python 3')
+
+ categories = {}
+
+ f = open(__file__.rstrip('co'))
+ try:
+ content = f.read()
+ finally:
+ f.close()
+
+ start = '# Generated code start\n'
+ header = content[:content.find(start) + len(start)] + '\n'
+ footer = content[content.find("# Generated code end\n"):]
+
+ for code in range(65535):
+ c = chr(code)
+ cat = unicodedata.category(c)
+ categories.setdefault(cat, []).append(c)
+
+ # from 8.0.0 PropList (Other_ID_Start) + underscore
+ id_start = set(u'_\u2118\u212E\u309B\u309C')
+ for cat in 'Lu', 'Ll', 'Lt', 'Lm', 'Lo', 'Nl':
+ id_start.update(categories[cat])
+
+ # from 8.0.0 PropList (Other_ID_Continue)
+ id_continue = set(id_start)
+ id_continue.update(u'\u00B7\u0387\u1369\u1370\u1371\u19DA')
+ for cat in 'Mn', 'Mc', 'Nd', 'Pc':
+ id_continue.update(categories[cat])
+
+ xid_start = u''.join(sorted(c for c in id_continue if
+ unicodedata.normalize('NFKC', c)
+ in id_start))
+ xid_continue = u''.join(sorted(c for c in id_continue if
+ unicodedata.normalize('NFKC', c) in
+ id_continue))
+
+ f = open(__file__, 'w')
+ f.write(header)
+
+ f.write('xid_start = %s\nxid_continue = %s\n' % (ascii(xid_start),
+ ascii(xid_continue)))
+
+ f.write(footer)
+ f.close()
diff --git a/lib/spack/external/jinja2/asyncfilters.py b/lib/spack/external/jinja2/asyncfilters.py
new file mode 100644
index 0000000000..5c1f46d7fa
--- /dev/null
+++ b/lib/spack/external/jinja2/asyncfilters.py
@@ -0,0 +1,146 @@
+from functools import wraps
+
+from jinja2.asyncsupport import auto_aiter
+from jinja2 import filters
+
+
+async def auto_to_seq(value):
+ seq = []
+ if hasattr(value, '__aiter__'):
+ async for item in value:
+ seq.append(item)
+ else:
+ for item in value:
+ seq.append(item)
+ return seq
+
+
+async def async_select_or_reject(args, kwargs, modfunc, lookup_attr):
+ seq, func = filters.prepare_select_or_reject(
+ args, kwargs, modfunc, lookup_attr)
+ if seq:
+ async for item in auto_aiter(seq):
+ if func(item):
+ yield item
+
+
+def dualfilter(normal_filter, async_filter):
+ wrap_evalctx = False
+ if getattr(normal_filter, 'environmentfilter', False):
+ is_async = lambda args: args[0].is_async
+ wrap_evalctx = False
+ else:
+ if not getattr(normal_filter, 'evalcontextfilter', False) and \
+ not getattr(normal_filter, 'contextfilter', False):
+ wrap_evalctx = True
+ is_async = lambda args: args[0].environment.is_async
+
+ @wraps(normal_filter)
+ def wrapper(*args, **kwargs):
+ b = is_async(args)
+ if wrap_evalctx:
+ args = args[1:]
+ if b:
+ return async_filter(*args, **kwargs)
+ return normal_filter(*args, **kwargs)
+
+ if wrap_evalctx:
+ wrapper.evalcontextfilter = True
+
+ wrapper.asyncfiltervariant = True
+
+ return wrapper
+
+
+def asyncfiltervariant(original):
+ def decorator(f):
+ return dualfilter(original, f)
+ return decorator
+
+
+@asyncfiltervariant(filters.do_first)
+async def do_first(environment, seq):
+ try:
+ return await auto_aiter(seq).__anext__()
+ except StopAsyncIteration:
+ return environment.undefined('No first item, sequence was empty.')
+
+
+@asyncfiltervariant(filters.do_groupby)
+async def do_groupby(environment, value, attribute):
+ expr = filters.make_attrgetter(environment, attribute)
+ return [filters._GroupTuple(key, await auto_to_seq(values))
+ for key, values in filters.groupby(sorted(
+ await auto_to_seq(value), key=expr), expr)]
+
+
+@asyncfiltervariant(filters.do_join)
+async def do_join(eval_ctx, value, d=u'', attribute=None):
+ return filters.do_join(eval_ctx, await auto_to_seq(value), d, attribute)
+
+
+@asyncfiltervariant(filters.do_list)
+async def do_list(value):
+ return await auto_to_seq(value)
+
+
+@asyncfiltervariant(filters.do_reject)
+async def do_reject(*args, **kwargs):
+ return async_select_or_reject(args, kwargs, lambda x: not x, False)
+
+
+@asyncfiltervariant(filters.do_rejectattr)
+async def do_rejectattr(*args, **kwargs):
+ return async_select_or_reject(args, kwargs, lambda x: not x, True)
+
+
+@asyncfiltervariant(filters.do_select)
+async def do_select(*args, **kwargs):
+ return async_select_or_reject(args, kwargs, lambda x: x, False)
+
+
+@asyncfiltervariant(filters.do_selectattr)
+async def do_selectattr(*args, **kwargs):
+ return async_select_or_reject(args, kwargs, lambda x: x, True)
+
+
+@asyncfiltervariant(filters.do_map)
+async def do_map(*args, **kwargs):
+ seq, func = filters.prepare_map(args, kwargs)
+ if seq:
+ async for item in auto_aiter(seq):
+ yield func(item)
+
+
+@asyncfiltervariant(filters.do_sum)
+async def do_sum(environment, iterable, attribute=None, start=0):
+ rv = start
+ if attribute is not None:
+ func = filters.make_attrgetter(environment, attribute)
+ else:
+ func = lambda x: x
+ async for item in auto_aiter(iterable):
+ rv += func(item)
+ return rv
+
+
+@asyncfiltervariant(filters.do_slice)
+async def do_slice(value, slices, fill_with=None):
+ return filters.do_slice(await auto_to_seq(value), slices, fill_with)
+
+
+ASYNC_FILTERS = {
+ 'first': do_first,
+ 'groupby': do_groupby,
+ 'join': do_join,
+ 'list': do_list,
+ # we intentionally do not support do_last because that would be
+ # ridiculous
+ 'reject': do_reject,
+ 'rejectattr': do_rejectattr,
+ 'map': do_map,
+ 'select': do_select,
+ 'selectattr': do_selectattr,
+ 'sum': do_sum,
+ 'slice': do_slice,
+}
diff --git a/lib/spack/external/jinja2/asyncsupport.py b/lib/spack/external/jinja2/asyncsupport.py
new file mode 100644
index 0000000000..f4f264ad8c
--- /dev/null
+++ b/lib/spack/external/jinja2/asyncsupport.py
@@ -0,0 +1,254 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.asyncsupport
+ ~~~~~~~~~~~~~~~~~~~
+
+ Has all the code for async support which is implemented as a patch
+ for supported Python versions.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import sys
+import asyncio
+import inspect
+from functools import update_wrapper
+
+from jinja2.utils import concat, internalcode, Markup
+from jinja2.environment import TemplateModule
+from jinja2.runtime import LoopContextBase, _last_iteration
+
+
+async def concat_async(async_gen):
+ rv = []
+ async def collect():
+ async for event in async_gen:
+ rv.append(event)
+ await collect()
+ return concat(rv)
+
+
+async def generate_async(self, *args, **kwargs):
+ vars = dict(*args, **kwargs)
+ try:
+ async for event in self.root_render_func(self.new_context(vars)):
+ yield event
+ except Exception:
+ exc_info = sys.exc_info()
+ else:
+ return
+ yield self.environment.handle_exception(exc_info, True)
+
+
+def wrap_generate_func(original_generate):
+ def _convert_generator(self, loop, args, kwargs):
+ async_gen = self.generate_async(*args, **kwargs)
+ try:
+ while 1:
+ yield loop.run_until_complete(async_gen.__anext__())
+ except StopAsyncIteration:
+ pass
+ def generate(self, *args, **kwargs):
+ if not self.environment.is_async:
+ return original_generate(self, *args, **kwargs)
+ return _convert_generator(self, asyncio.get_event_loop(), args, kwargs)
+ return update_wrapper(generate, original_generate)
+
+
+async def render_async(self, *args, **kwargs):
+ if not self.environment.is_async:
+ raise RuntimeError('The environment was not created with async mode '
+ 'enabled.')
+
+ vars = dict(*args, **kwargs)
+ ctx = self.new_context(vars)
+
+ try:
+ return await concat_async(self.root_render_func(ctx))
+ except Exception:
+ exc_info = sys.exc_info()
+ return self.environment.handle_exception(exc_info, True)
+
+
+def wrap_render_func(original_render):
+ def render(self, *args, **kwargs):
+ if not self.environment.is_async:
+ return original_render(self, *args, **kwargs)
+ loop = asyncio.get_event_loop()
+ return loop.run_until_complete(self.render_async(*args, **kwargs))
+ return update_wrapper(render, original_render)
+
+
+def wrap_block_reference_call(original_call):
+ @internalcode
+ async def async_call(self):
+ rv = await concat_async(self._stack[self._depth](self._context))
+ if self._context.eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv
+
+ @internalcode
+ def __call__(self):
+ if not self._context.environment.is_async:
+ return original_call(self)
+ return async_call(self)
+
+ return update_wrapper(__call__, original_call)
+
+
+def wrap_macro_invoke(original_invoke):
+ @internalcode
+ async def async_invoke(self, arguments, autoescape):
+ rv = await self._func(*arguments)
+ if autoescape:
+ rv = Markup(rv)
+ return rv
+
+ @internalcode
+ def _invoke(self, arguments, autoescape):
+ if not self._environment.is_async:
+ return original_invoke(self, arguments, autoescape)
+ return async_invoke(self, arguments, autoescape)
+ return update_wrapper(_invoke, original_invoke)
+
+
+@internalcode
+async def get_default_module_async(self):
+ if self._module is not None:
+ return self._module
+ self._module = rv = await self.make_module_async()
+ return rv
+
+
+def wrap_default_module(original_default_module):
+ @internalcode
+ def _get_default_module(self):
+ if self.environment.is_async:
+ raise RuntimeError('Template module attribute is unavailable '
+ 'in async mode')
+ return original_default_module(self)
+ return _get_default_module
+
+
+async def make_module_async(self, vars=None, shared=False, locals=None):
+ context = self.new_context(vars, shared, locals)
+ body_stream = []
+ async for item in self.root_render_func(context):
+ body_stream.append(item)
+ return TemplateModule(self, context, body_stream)
+
+
+def patch_template():
+ from jinja2 import Template
+ Template.generate = wrap_generate_func(Template.generate)
+ Template.generate_async = update_wrapper(
+ generate_async, Template.generate_async)
+ Template.render_async = update_wrapper(
+ render_async, Template.render_async)
+ Template.render = wrap_render_func(Template.render)
+ Template._get_default_module = wrap_default_module(
+ Template._get_default_module)
+ Template._get_default_module_async = get_default_module_async
+ Template.make_module_async = update_wrapper(
+ make_module_async, Template.make_module_async)
+
+
+def patch_runtime():
+ from jinja2.runtime import BlockReference, Macro
+ BlockReference.__call__ = wrap_block_reference_call(
+ BlockReference.__call__)
+ Macro._invoke = wrap_macro_invoke(Macro._invoke)
+
+
+def patch_filters():
+ from jinja2.filters import FILTERS
+ from jinja2.asyncfilters import ASYNC_FILTERS
+ FILTERS.update(ASYNC_FILTERS)
+
+
+def patch_all():
+ patch_template()
+ patch_runtime()
+ patch_filters()
+
+
+async def auto_await(value):
+ if inspect.isawaitable(value):
+ return await value
+ return value
+
+
+async def auto_aiter(iterable):
+ if hasattr(iterable, '__aiter__'):
+ async for item in iterable:
+ yield item
+ return
+ for item in iterable:
+ yield item
+
+
+class AsyncLoopContext(LoopContextBase):
+
+ def __init__(self, async_iterator, after, length, recurse=None,
+ depth0=0):
+ LoopContextBase.__init__(self, recurse, depth0)
+ self._async_iterator = async_iterator
+ self._after = after
+ self._length = length
+
+ @property
+ def length(self):
+ if self._length is None:
+ raise TypeError('Loop length for some iterators cannot be '
+ 'lazily calculated in async mode')
+ return self._length
+
+ def __aiter__(self):
+ return AsyncLoopContextIterator(self)
+
+
+class AsyncLoopContextIterator(object):
+ __slots__ = ('context',)
+
+ def __init__(self, context):
+ self.context = context
+
+ def __aiter__(self):
+ return self
+
+ async def __anext__(self):
+ ctx = self.context
+ ctx.index0 += 1
+ if ctx._after is _last_iteration:
+ raise StopAsyncIteration()
+ next_elem = ctx._after
+ try:
+ ctx._after = await ctx._async_iterator.__anext__()
+ except StopAsyncIteration:
+ ctx._after = _last_iteration
+ return next_elem, ctx
+
+
+async def make_async_loop_context(iterable, recurse=None, depth0=0):
+ # Length is more complicated and less efficient in async mode. The
+ # reason for this is that we cannot know if length will be used
+ # upfront but because length is a property we cannot lazily execute it
+ # later. This means that we need to buffer it up and measure :(
+ #
+ # We however only do this for actual iterators, not for async
+ # iterators as blocking here does not seem like the best idea in the
+ # world.
+ try:
+ length = len(iterable)
+ except (TypeError, AttributeError):
+ if not hasattr(iterable, '__aiter__'):
+ iterable = tuple(iterable)
+ length = len(iterable)
+ else:
+ length = None
+ async_iterator = auto_aiter(iterable)
+ try:
+ after = await async_iterator.__anext__()
+ except StopAsyncIteration:
+ after = _last_iteration
+ return AsyncLoopContext(async_iterator, after, length, recurse, depth0)
diff --git a/lib/spack/external/jinja2/bccache.py b/lib/spack/external/jinja2/bccache.py
new file mode 100644
index 0000000000..d687d036fb
--- /dev/null
+++ b/lib/spack/external/jinja2/bccache.py
@@ -0,0 +1,362 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.bccache
+ ~~~~~~~~~~~~~~
+
+ This module implements the bytecode cache system Jinja is optionally
+ using. This is useful if you have very complex template situations and
+ the compiliation of all those templates slow down your application too
+ much.
+
+ Situations where this is useful are often forking web applications that
+ are initialized on the first request.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+from os import path, listdir
+import os
+import sys
+import stat
+import errno
+import marshal
+import tempfile
+import fnmatch
+from hashlib import sha1
+from jinja2.utils import open_if_exists
+from jinja2._compat import BytesIO, pickle, PY2, text_type
+
+
+# marshal works better on 3.x, one hack less required
+if not PY2:
+ marshal_dump = marshal.dump
+ marshal_load = marshal.load
+else:
+
+ def marshal_dump(code, f):
+ if isinstance(f, file):
+ marshal.dump(code, f)
+ else:
+ f.write(marshal.dumps(code))
+
+ def marshal_load(f):
+ if isinstance(f, file):
+ return marshal.load(f)
+ return marshal.loads(f.read())
+
+
+bc_version = 3
+
+# magic version used to only change with new jinja versions. With 2.6
+# we change this to also take Python version changes into account. The
+# reason for this is that Python tends to segfault if fed earlier bytecode
+# versions because someone thought it would be a good idea to reuse opcodes
+# or make Python incompatible with earlier versions.
+bc_magic = 'j2'.encode('ascii') + \
+ pickle.dumps(bc_version, 2) + \
+ pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1])
+
+
+class Bucket(object):
+ """Buckets are used to store the bytecode for one template. It's created
+ and initialized by the bytecode cache and passed to the loading functions.
+
+ The buckets get an internal checksum from the cache assigned and use this
+ to automatically reject outdated cache material. Individual bytecode
+ cache subclasses don't have to care about cache invalidation.
+ """
+
+ def __init__(self, environment, key, checksum):
+ self.environment = environment
+ self.key = key
+ self.checksum = checksum
+ self.reset()
+
+ def reset(self):
+ """Resets the bucket (unloads the bytecode)."""
+ self.code = None
+
+ def load_bytecode(self, f):
+ """Loads bytecode from a file or file like object."""
+ # make sure the magic header is correct
+ magic = f.read(len(bc_magic))
+ if magic != bc_magic:
+ self.reset()
+ return
+ # the source code of the file changed, we need to reload
+ checksum = pickle.load(f)
+ if self.checksum != checksum:
+ self.reset()
+ return
+ # if marshal_load fails then we need to reload
+ try:
+ self.code = marshal_load(f)
+ except (EOFError, ValueError, TypeError):
+ self.reset()
+ return
+
+ def write_bytecode(self, f):
+ """Dump the bytecode into the file or file like object passed."""
+ if self.code is None:
+ raise TypeError('can\'t write empty bucket')
+ f.write(bc_magic)
+ pickle.dump(self.checksum, f, 2)
+ marshal_dump(self.code, f)
+
+ def bytecode_from_string(self, string):
+ """Load bytecode from a string."""
+ self.load_bytecode(BytesIO(string))
+
+ def bytecode_to_string(self):
+ """Return the bytecode as string."""
+ out = BytesIO()
+ self.write_bytecode(out)
+ return out.getvalue()
+
+
+class BytecodeCache(object):
+ """To implement your own bytecode cache you have to subclass this class
+ and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of
+ these methods are passed a :class:`~jinja2.bccache.Bucket`.
+
+ A very basic bytecode cache that saves the bytecode on the file system::
+
+ from os import path
+
+ class MyCache(BytecodeCache):
+
+ def __init__(self, directory):
+ self.directory = directory
+
+ def load_bytecode(self, bucket):
+ filename = path.join(self.directory, bucket.key)
+ if path.exists(filename):
+ with open(filename, 'rb') as f:
+ bucket.load_bytecode(f)
+
+ def dump_bytecode(self, bucket):
+ filename = path.join(self.directory, bucket.key)
+ with open(filename, 'wb') as f:
+ bucket.write_bytecode(f)
+
+ A more advanced version of a filesystem based bytecode cache is part of
+ Jinja2.
+ """
+
+ def load_bytecode(self, bucket):
+ """Subclasses have to override this method to load bytecode into a
+ bucket. If they are not able to find code in the cache for the
+ bucket, it must not do anything.
+ """
+ raise NotImplementedError()
+
+ def dump_bytecode(self, bucket):
+ """Subclasses have to override this method to write the bytecode
+ from a bucket back to the cache. If it unable to do so it must not
+ fail silently but raise an exception.
+ """
+ raise NotImplementedError()
+
+ def clear(self):
+ """Clears the cache. This method is not used by Jinja2 but should be
+ implemented to allow applications to clear the bytecode cache used
+ by a particular environment.
+ """
+
+ def get_cache_key(self, name, filename=None):
+ """Returns the unique hash key for this template name."""
+ hash = sha1(name.encode('utf-8'))
+ if filename is not None:
+ filename = '|' + filename
+ if isinstance(filename, text_type):
+ filename = filename.encode('utf-8')
+ hash.update(filename)
+ return hash.hexdigest()
+
+ def get_source_checksum(self, source):
+ """Returns a checksum for the source."""
+ return sha1(source.encode('utf-8')).hexdigest()
+
+ def get_bucket(self, environment, name, filename, source):
+ """Return a cache bucket for the given template. All arguments are
+ mandatory but filename may be `None`.
+ """
+ key = self.get_cache_key(name, filename)
+ checksum = self.get_source_checksum(source)
+ bucket = Bucket(environment, key, checksum)
+ self.load_bytecode(bucket)
+ return bucket
+
+ def set_bucket(self, bucket):
+ """Put the bucket into the cache."""
+ self.dump_bytecode(bucket)
+
+
+class FileSystemBytecodeCache(BytecodeCache):
+ """A bytecode cache that stores bytecode on the filesystem. It accepts
+ two arguments: The directory where the cache items are stored and a
+ pattern string that is used to build the filename.
+
+ If no directory is specified a default cache directory is selected. On
+ Windows the user's temp directory is used, on UNIX systems a directory
+ is created for the user in the system temp directory.
+
+ The pattern can be used to have multiple separate caches operate on the
+ same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s``
+ is replaced with the cache key.
+
+ >>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache')
+
+ This bytecode cache supports clearing of the cache using the clear method.
+ """
+
+ def __init__(self, directory=None, pattern='__jinja2_%s.cache'):
+ if directory is None:
+ directory = self._get_default_cache_dir()
+ self.directory = directory
+ self.pattern = pattern
+
+ def _get_default_cache_dir(self):
+ def _unsafe_dir():
+ raise RuntimeError('Cannot determine safe temp directory. You '
+ 'need to explicitly provide one.')
+
+ tmpdir = tempfile.gettempdir()
+
+ # On windows the temporary directory is used specific unless
+ # explicitly forced otherwise. We can just use that.
+ if os.name == 'nt':
+ return tmpdir
+ if not hasattr(os, 'getuid'):
+ _unsafe_dir()
+
+ dirname = '_jinja2-cache-%d' % os.getuid()
+ actual_dir = os.path.join(tmpdir, dirname)
+
+ try:
+ os.mkdir(actual_dir, stat.S_IRWXU)
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+ try:
+ os.chmod(actual_dir, stat.S_IRWXU)
+ actual_dir_stat = os.lstat(actual_dir)
+ if actual_dir_stat.st_uid != os.getuid() \
+ or not stat.S_ISDIR(actual_dir_stat.st_mode) \
+ or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU:
+ _unsafe_dir()
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ raise
+
+ actual_dir_stat = os.lstat(actual_dir)
+ if actual_dir_stat.st_uid != os.getuid() \
+ or not stat.S_ISDIR(actual_dir_stat.st_mode) \
+ or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU:
+ _unsafe_dir()
+
+ return actual_dir
+
+ def _get_cache_filename(self, bucket):
+ return path.join(self.directory, self.pattern % bucket.key)
+
+ def load_bytecode(self, bucket):
+ f = open_if_exists(self._get_cache_filename(bucket), 'rb')
+ if f is not None:
+ try:
+ bucket.load_bytecode(f)
+ finally:
+ f.close()
+
+ def dump_bytecode(self, bucket):
+ f = open(self._get_cache_filename(bucket), 'wb')
+ try:
+ bucket.write_bytecode(f)
+ finally:
+ f.close()
+
+ def clear(self):
+ # imported lazily here because google app-engine doesn't support
+ # write access on the file system and the function does not exist
+ # normally.
+ from os import remove
+ files = fnmatch.filter(listdir(self.directory), self.pattern % '*')
+ for filename in files:
+ try:
+ remove(path.join(self.directory, filename))
+ except OSError:
+ pass
+
+
+class MemcachedBytecodeCache(BytecodeCache):
+ """This class implements a bytecode cache that uses a memcache cache for
+ storing the information. It does not enforce a specific memcache library
+ (tummy's memcache or cmemcache) but will accept any class that provides
+ the minimal interface required.
+
+ Libraries compatible with this class:
+
+ - `werkzeug <http://werkzeug.pocoo.org/>`_.contrib.cache
+ - `python-memcached <http://www.tummy.com/Community/software/python-memcached/>`_
+ - `cmemcache <http://gijsbert.org/cmemcache/>`_
+
+ (Unfortunately the django cache interface is not compatible because it
+ does not support storing binary data, only unicode. You can however pass
+ the underlying cache client to the bytecode cache which is available
+ as `django.core.cache.cache._client`.)
+
+ The minimal interface for the client passed to the constructor is this:
+
+ .. class:: MinimalClientInterface
+
+ .. method:: set(key, value[, timeout])
+
+ Stores the bytecode in the cache. `value` is a string and
+ `timeout` the timeout of the key. If timeout is not provided
+ a default timeout or no timeout should be assumed, if it's
+ provided it's an integer with the number of seconds the cache
+ item should exist.
+
+ .. method:: get(key)
+
+ Returns the value for the cache key. If the item does not
+ exist in the cache the return value must be `None`.
+
+ The other arguments to the constructor are the prefix for all keys that
+ is added before the actual cache key and the timeout for the bytecode in
+ the cache system. We recommend a high (or no) timeout.
+
+ This bytecode cache does not support clearing of used items in the cache.
+ The clear method is a no-operation function.
+
+ .. versionadded:: 2.7
+ Added support for ignoring memcache errors through the
+ `ignore_memcache_errors` parameter.
+ """
+
+ def __init__(self, client, prefix='jinja2/bytecode/', timeout=None,
+ ignore_memcache_errors=True):
+ self.client = client
+ self.prefix = prefix
+ self.timeout = timeout
+ self.ignore_memcache_errors = ignore_memcache_errors
+
+ def load_bytecode(self, bucket):
+ try:
+ code = self.client.get(self.prefix + bucket.key)
+ except Exception:
+ if not self.ignore_memcache_errors:
+ raise
+ code = None
+ if code is not None:
+ bucket.bytecode_from_string(code)
+
+ def dump_bytecode(self, bucket):
+ args = (self.prefix + bucket.key, bucket.bytecode_to_string())
+ if self.timeout is not None:
+ args += (self.timeout,)
+ try:
+ self.client.set(*args)
+ except Exception:
+ if not self.ignore_memcache_errors:
+ raise
diff --git a/lib/spack/external/jinja2/compiler.py b/lib/spack/external/jinja2/compiler.py
new file mode 100644
index 0000000000..b2ab6fe6a8
--- /dev/null
+++ b/lib/spack/external/jinja2/compiler.py
@@ -0,0 +1,1653 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.compiler
+ ~~~~~~~~~~~~~~~
+
+ Compiles nodes into python code.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+from itertools import chain
+from copy import deepcopy
+from keyword import iskeyword as is_python_keyword
+from functools import update_wrapper
+from jinja2 import nodes
+from jinja2.nodes import EvalContext
+from jinja2.visitor import NodeVisitor
+from jinja2.optimizer import Optimizer
+from jinja2.exceptions import TemplateAssertionError
+from jinja2.utils import Markup, concat, escape
+from jinja2._compat import range_type, text_type, string_types, \
+ iteritems, NativeStringIO, imap, izip
+from jinja2.idtracking import Symbols, VAR_LOAD_PARAMETER, \
+ VAR_LOAD_RESOLVE, VAR_LOAD_ALIAS, VAR_LOAD_UNDEFINED
+
+
+operators = {
+ 'eq': '==',
+ 'ne': '!=',
+ 'gt': '>',
+ 'gteq': '>=',
+ 'lt': '<',
+ 'lteq': '<=',
+ 'in': 'in',
+ 'notin': 'not in'
+}
+
+# what method to iterate over items do we want to use for dict iteration
+# in generated code? on 2.x let's go with iteritems, on 3.x with items
+if hasattr(dict, 'iteritems'):
+ dict_item_iter = 'iteritems'
+else:
+ dict_item_iter = 'items'
+
+code_features = ['division']
+
+# does this python version support generator stops? (PEP 0479)
+try:
+ exec('from __future__ import generator_stop')
+ code_features.append('generator_stop')
+except SyntaxError:
+ pass
+
+# does this python version support yield from?
+try:
+ exec('def f(): yield from x()')
+except SyntaxError:
+ supports_yield_from = False
+else:
+ supports_yield_from = True
+
+
+def optimizeconst(f):
+ def new_func(self, node, frame, **kwargs):
+ # Only optimize if the frame is not volatile
+ if self.optimized and not frame.eval_ctx.volatile:
+ new_node = self.optimizer.visit(node, frame.eval_ctx)
+ if new_node != node:
+ return self.visit(new_node, frame)
+ return f(self, node, frame, **kwargs)
+ return update_wrapper(new_func, f)
+
+
+def generate(node, environment, name, filename, stream=None,
+ defer_init=False, optimized=True):
+ """Generate the python source for a node tree."""
+ if not isinstance(node, nodes.Template):
+ raise TypeError('Can\'t compile non template nodes')
+ generator = environment.code_generator_class(environment, name, filename,
+ stream, defer_init,
+ optimized)
+ generator.visit(node)
+ if stream is None:
+ return generator.stream.getvalue()
+
+
+def has_safe_repr(value):
+ """Does the node have a safe representation?"""
+ if value is None or value is NotImplemented or value is Ellipsis:
+ return True
+ if type(value) in (bool, int, float, complex, range_type, Markup) + string_types:
+ return True
+ if type(value) in (tuple, list, set, frozenset):
+ for item in value:
+ if not has_safe_repr(item):
+ return False
+ return True
+ elif type(value) is dict:
+ for key, value in iteritems(value):
+ if not has_safe_repr(key):
+ return False
+ if not has_safe_repr(value):
+ return False
+ return True
+ return False
+
+
+def find_undeclared(nodes, names):
+ """Check if the names passed are accessed undeclared. The return value
+ is a set of all the undeclared names from the sequence of names found.
+ """
+ visitor = UndeclaredNameVisitor(names)
+ try:
+ for node in nodes:
+ visitor.visit(node)
+ except VisitorExit:
+ pass
+ return visitor.undeclared
+
+
+class MacroRef(object):
+
+ def __init__(self, node):
+ self.node = node
+ self.accesses_caller = False
+ self.accesses_kwargs = False
+ self.accesses_varargs = False
+
+
+class Frame(object):
+ """Holds compile time information for us."""
+
+ def __init__(self, eval_ctx, parent=None):
+ self.eval_ctx = eval_ctx
+ self.symbols = Symbols(parent and parent.symbols or None)
+
+ # a toplevel frame is the root + soft frames such as if conditions.
+ self.toplevel = False
+
+ # the root frame is basically just the outermost frame, so no if
+ # conditions. This information is used to optimize inheritance
+ # situations.
+ self.rootlevel = False
+
+ # in some dynamic inheritance situations the compiler needs to add
+ # write tests around output statements.
+ self.require_output_check = parent and parent.require_output_check
+
+ # inside some tags we are using a buffer rather than yield statements.
+ # this for example affects {% filter %} or {% macro %}. If a frame
+ # is buffered this variable points to the name of the list used as
+ # buffer.
+ self.buffer = None
+
+ # the name of the block we're in, otherwise None.
+ self.block = parent and parent.block or None
+
+ # the parent of this frame
+ self.parent = parent
+
+ if parent is not None:
+ self.buffer = parent.buffer
+
+ def copy(self):
+ """Create a copy of the current one."""
+ rv = object.__new__(self.__class__)
+ rv.__dict__.update(self.__dict__)
+ rv.symbols = self.symbols.copy()
+ return rv
+
+ def inner(self):
+ """Return an inner frame."""
+ return Frame(self.eval_ctx, self)
+
+ def soft(self):
+ """Return a soft frame. A soft frame may not be modified as
+ standalone thing as it shares the resources with the frame it
+ was created of, but it's not a rootlevel frame any longer.
+
+ This is only used to implement if-statements.
+ """
+ rv = self.copy()
+ rv.rootlevel = False
+ return rv
+
+ __copy__ = copy
+
+
+class VisitorExit(RuntimeError):
+ """Exception used by the `UndeclaredNameVisitor` to signal a stop."""
+
+
+class DependencyFinderVisitor(NodeVisitor):
+ """A visitor that collects filter and test calls."""
+
+ def __init__(self):
+ self.filters = set()
+ self.tests = set()
+
+ def visit_Filter(self, node):
+ self.generic_visit(node)
+ self.filters.add(node.name)
+
+ def visit_Test(self, node):
+ self.generic_visit(node)
+ self.tests.add(node.name)
+
+ def visit_Block(self, node):
+ """Stop visiting at blocks."""
+
+
+class UndeclaredNameVisitor(NodeVisitor):
+ """A visitor that checks if a name is accessed without being
+ declared. This is different from the frame visitor as it will
+ not stop at closure frames.
+ """
+
+ def __init__(self, names):
+ self.names = set(names)
+ self.undeclared = set()
+
+ def visit_Name(self, node):
+ if node.ctx == 'load' and node.name in self.names:
+ self.undeclared.add(node.name)
+ if self.undeclared == self.names:
+ raise VisitorExit()
+ else:
+ self.names.discard(node.name)
+
+ def visit_Block(self, node):
+ """Stop visiting a blocks."""
+
+
+class CompilerExit(Exception):
+ """Raised if the compiler encountered a situation where it just
+ doesn't make sense to further process the code. Any block that
+ raises such an exception is not further processed.
+ """
+
+
+class CodeGenerator(NodeVisitor):
+
+ def __init__(self, environment, name, filename, stream=None,
+ defer_init=False, optimized=True):
+ if stream is None:
+ stream = NativeStringIO()
+ self.environment = environment
+ self.name = name
+ self.filename = filename
+ self.stream = stream
+ self.created_block_context = False
+ self.defer_init = defer_init
+ self.optimized = optimized
+ if optimized:
+ self.optimizer = Optimizer(environment)
+
+ # aliases for imports
+ self.import_aliases = {}
+
+ # a registry for all blocks. Because blocks are moved out
+ # into the global python scope they are registered here
+ self.blocks = {}
+
+ # the number of extends statements so far
+ self.extends_so_far = 0
+
+ # some templates have a rootlevel extends. In this case we
+ # can safely assume that we're a child template and do some
+ # more optimizations.
+ self.has_known_extends = False
+
+ # the current line number
+ self.code_lineno = 1
+
+ # registry of all filters and tests (global, not block local)
+ self.tests = {}
+ self.filters = {}
+
+ # the debug information
+ self.debug_info = []
+ self._write_debug_info = None
+
+ # the number of new lines before the next write()
+ self._new_lines = 0
+
+ # the line number of the last written statement
+ self._last_line = 0
+
+ # true if nothing was written so far.
+ self._first_write = True
+
+ # used by the `temporary_identifier` method to get new
+ # unique, temporary identifier
+ self._last_identifier = 0
+
+ # the current indentation
+ self._indentation = 0
+
+ # Tracks toplevel assignments
+ self._assign_stack = []
+
+ # Tracks parameter definition blocks
+ self._param_def_block = []
+
+ # -- Various compilation helpers
+
+ def fail(self, msg, lineno):
+ """Fail with a :exc:`TemplateAssertionError`."""
+ raise TemplateAssertionError(msg, lineno, self.name, self.filename)
+
+ def temporary_identifier(self):
+ """Get a new unique identifier."""
+ self._last_identifier += 1
+ return 't_%d' % self._last_identifier
+
+ def buffer(self, frame):
+ """Enable buffering for the frame from that point onwards."""
+ frame.buffer = self.temporary_identifier()
+ self.writeline('%s = []' % frame.buffer)
+
+ def return_buffer_contents(self, frame, force_unescaped=False):
+ """Return the buffer contents of the frame."""
+ if not force_unescaped:
+ if frame.eval_ctx.volatile:
+ self.writeline('if context.eval_ctx.autoescape:')
+ self.indent()
+ self.writeline('return Markup(concat(%s))' % frame.buffer)
+ self.outdent()
+ self.writeline('else:')
+ self.indent()
+ self.writeline('return concat(%s)' % frame.buffer)
+ self.outdent()
+ return
+ elif frame.eval_ctx.autoescape:
+ self.writeline('return Markup(concat(%s))' % frame.buffer)
+ return
+ self.writeline('return concat(%s)' % frame.buffer)
+
+ def indent(self):
+ """Indent by one."""
+ self._indentation += 1
+
+ def outdent(self, step=1):
+ """Outdent by step."""
+ self._indentation -= step
+
+ def start_write(self, frame, node=None):
+ """Yield or write into the frame buffer."""
+ if frame.buffer is None:
+ self.writeline('yield ', node)
+ else:
+ self.writeline('%s.append(' % frame.buffer, node)
+
+ def end_write(self, frame):
+ """End the writing process started by `start_write`."""
+ if frame.buffer is not None:
+ self.write(')')
+
+ def simple_write(self, s, frame, node=None):
+ """Simple shortcut for start_write + write + end_write."""
+ self.start_write(frame, node)
+ self.write(s)
+ self.end_write(frame)
+
+ def blockvisit(self, nodes, frame):
+ """Visit a list of nodes as block in a frame. If the current frame
+ is no buffer a dummy ``if 0: yield None`` is written automatically.
+ """
+ try:
+ self.writeline('pass')
+ for node in nodes:
+ self.visit(node, frame)
+ except CompilerExit:
+ pass
+
+ def write(self, x):
+ """Write a string into the output stream."""
+ if self._new_lines:
+ if not self._first_write:
+ self.stream.write('\n' * self._new_lines)
+ self.code_lineno += self._new_lines
+ if self._write_debug_info is not None:
+ self.debug_info.append((self._write_debug_info,
+ self.code_lineno))
+ self._write_debug_info = None
+ self._first_write = False
+ self.stream.write(' ' * self._indentation)
+ self._new_lines = 0
+ self.stream.write(x)
+
+ def writeline(self, x, node=None, extra=0):
+ """Combination of newline and write."""
+ self.newline(node, extra)
+ self.write(x)
+
+ def newline(self, node=None, extra=0):
+ """Add one or more newlines before the next write."""
+ self._new_lines = max(self._new_lines, 1 + extra)
+ if node is not None and node.lineno != self._last_line:
+ self._write_debug_info = node.lineno
+ self._last_line = node.lineno
+
+ def signature(self, node, frame, extra_kwargs=None):
+ """Writes a function call to the stream for the current node.
+ A leading comma is added automatically. The extra keyword
+ arguments may not include python keywords otherwise a syntax
+ error could occour. The extra keyword arguments should be given
+ as python dict.
+ """
+ # if any of the given keyword arguments is a python keyword
+ # we have to make sure that no invalid call is created.
+ kwarg_workaround = False
+ for kwarg in chain((x.key for x in node.kwargs), extra_kwargs or ()):
+ if is_python_keyword(kwarg):
+ kwarg_workaround = True
+ break
+
+ for arg in node.args:
+ self.write(', ')
+ self.visit(arg, frame)
+
+ if not kwarg_workaround:
+ for kwarg in node.kwargs:
+ self.write(', ')
+ self.visit(kwarg, frame)
+ if extra_kwargs is not None:
+ for key, value in iteritems(extra_kwargs):
+ self.write(', %s=%s' % (key, value))
+ if node.dyn_args:
+ self.write(', *')
+ self.visit(node.dyn_args, frame)
+
+ if kwarg_workaround:
+ if node.dyn_kwargs is not None:
+ self.write(', **dict({')
+ else:
+ self.write(', **{')
+ for kwarg in node.kwargs:
+ self.write('%r: ' % kwarg.key)
+ self.visit(kwarg.value, frame)
+ self.write(', ')
+ if extra_kwargs is not None:
+ for key, value in iteritems(extra_kwargs):
+ self.write('%r: %s, ' % (key, value))
+ if node.dyn_kwargs is not None:
+ self.write('}, **')
+ self.visit(node.dyn_kwargs, frame)
+ self.write(')')
+ else:
+ self.write('}')
+
+ elif node.dyn_kwargs is not None:
+ self.write(', **')
+ self.visit(node.dyn_kwargs, frame)
+
+ def pull_dependencies(self, nodes):
+ """Pull all the dependencies."""
+ visitor = DependencyFinderVisitor()
+ for node in nodes:
+ visitor.visit(node)
+ for dependency in 'filters', 'tests':
+ mapping = getattr(self, dependency)
+ for name in getattr(visitor, dependency):
+ if name not in mapping:
+ mapping[name] = self.temporary_identifier()
+ self.writeline('%s = environment.%s[%r]' %
+ (mapping[name], dependency, name))
+
+ def enter_frame(self, frame):
+ undefs = []
+ for target, (action, param) in iteritems(frame.symbols.loads):
+ if action == VAR_LOAD_PARAMETER:
+ pass
+ elif action == VAR_LOAD_RESOLVE:
+ self.writeline('%s = resolve(%r)' %
+ (target, param))
+ elif action == VAR_LOAD_ALIAS:
+ self.writeline('%s = %s' % (target, param))
+ elif action == VAR_LOAD_UNDEFINED:
+ undefs.append(target)
+ else:
+ raise NotImplementedError('unknown load instruction')
+ if undefs:
+ self.writeline('%s = missing' % ' = '.join(undefs))
+
+ def leave_frame(self, frame, with_python_scope=False):
+ if not with_python_scope:
+ undefs = []
+ for target, _ in iteritems(frame.symbols.loads):
+ undefs.append(target)
+ if undefs:
+ self.writeline('%s = missing' % ' = '.join(undefs))
+
+ def func(self, name):
+ if self.environment.is_async:
+ return 'async def %s' % name
+ return 'def %s' % name
+
+ def macro_body(self, node, frame):
+ """Dump the function def of a macro or call block."""
+ frame = frame.inner()
+ frame.symbols.analyze_node(node)
+ macro_ref = MacroRef(node)
+
+ explicit_caller = None
+ skip_special_params = set()
+ args = []
+ for idx, arg in enumerate(node.args):
+ if arg.name == 'caller':
+ explicit_caller = idx
+ if arg.name in ('kwargs', 'varargs'):
+ skip_special_params.add(arg.name)
+ args.append(frame.symbols.ref(arg.name))
+
+ undeclared = find_undeclared(node.body, ('caller', 'kwargs', 'varargs'))
+
+ if 'caller' in undeclared:
+ # In older Jinja2 versions there was a bug that allowed caller
+ # to retain the special behavior even if it was mentioned in
+ # the argument list. However thankfully this was only really
+ # working if it was the last argument. So we are explicitly
+ # checking this now and error out if it is anywhere else in
+ # the argument list.
+ if explicit_caller is not None:
+ try:
+ node.defaults[explicit_caller - len(node.args)]
+ except IndexError:
+ self.fail('When defining macros or call blocks the '
+ 'special "caller" argument must be omitted '
+ 'or be given a default.', node.lineno)
+ else:
+ args.append(frame.symbols.declare_parameter('caller'))
+ macro_ref.accesses_caller = True
+ if 'kwargs' in undeclared and not 'kwargs' in skip_special_params:
+ args.append(frame.symbols.declare_parameter('kwargs'))
+ macro_ref.accesses_kwargs = True
+ if 'varargs' in undeclared and not 'varargs' in skip_special_params:
+ args.append(frame.symbols.declare_parameter('varargs'))
+ macro_ref.accesses_varargs = True
+
+ # macros are delayed, they never require output checks
+ frame.require_output_check = False
+ frame.symbols.analyze_node(node)
+ self.writeline('%s(%s):' % (self.func('macro'), ', '.join(args)), node)
+ self.indent()
+
+ self.buffer(frame)
+ self.enter_frame(frame)
+
+ self.push_parameter_definitions(frame)
+ for idx, arg in enumerate(node.args):
+ ref = frame.symbols.ref(arg.name)
+ self.writeline('if %s is missing:' % ref)
+ self.indent()
+ try:
+ default = node.defaults[idx - len(node.args)]
+ except IndexError:
+ self.writeline('%s = undefined(%r, name=%r)' % (
+ ref,
+ 'parameter %r was not provided' % arg.name,
+ arg.name))
+ else:
+ self.writeline('%s = ' % ref)
+ self.visit(default, frame)
+ self.mark_parameter_stored(ref)
+ self.outdent()
+ self.pop_parameter_definitions()
+
+ self.blockvisit(node.body, frame)
+ self.return_buffer_contents(frame, force_unescaped=True)
+ self.leave_frame(frame, with_python_scope=True)
+ self.outdent()
+
+ return frame, macro_ref
+
+ def macro_def(self, macro_ref, frame):
+ """Dump the macro definition for the def created by macro_body."""
+ arg_tuple = ', '.join(repr(x.name) for x in macro_ref.node.args)
+ name = getattr(macro_ref.node, 'name', None)
+ if len(macro_ref.node.args) == 1:
+ arg_tuple += ','
+ self.write('Macro(environment, macro, %r, (%s), %r, %r, %r, '
+ 'context.eval_ctx.autoescape)' %
+ (name, arg_tuple, macro_ref.accesses_kwargs,
+ macro_ref.accesses_varargs, macro_ref.accesses_caller))
+
+ def position(self, node):
+ """Return a human readable position for the node."""
+ rv = 'line %d' % node.lineno
+ if self.name is not None:
+ rv += ' in ' + repr(self.name)
+ return rv
+
+ def dump_local_context(self, frame):
+ return '{%s}' % ', '.join(
+ '%r: %s' % (name, target) for name, target
+ in iteritems(frame.symbols.dump_stores()))
+
+ def write_commons(self):
+ """Writes a common preamble that is used by root and block functions.
+ Primarily this sets up common local helpers and enforces a generator
+ through a dead branch.
+ """
+ self.writeline('resolve = context.resolve_or_missing')
+ self.writeline('undefined = environment.undefined')
+ self.writeline('if 0: yield None')
+
+ def push_parameter_definitions(self, frame):
+ """Pushes all parameter targets from the given frame into a local
+ stack that permits tracking of yet to be assigned parameters. In
+ particular this enables the optimization from `visit_Name` to skip
+ undefined expressions for parameters in macros as macros can reference
+ otherwise unbound parameters.
+ """
+ self._param_def_block.append(frame.symbols.dump_param_targets())
+
+ def pop_parameter_definitions(self):
+ """Pops the current parameter definitions set."""
+ self._param_def_block.pop()
+
+ def mark_parameter_stored(self, target):
+ """Marks a parameter in the current parameter definitions as stored.
+ This will skip the enforced undefined checks.
+ """
+ if self._param_def_block:
+ self._param_def_block[-1].discard(target)
+
+ def parameter_is_undeclared(self, target):
+ """Checks if a given target is an undeclared parameter."""
+ if not self._param_def_block:
+ return False
+ return target in self._param_def_block[-1]
+
+ def push_assign_tracking(self):
+ """Pushes a new layer for assignment tracking."""
+ self._assign_stack.append(set())
+
+ def pop_assign_tracking(self, frame):
+ """Pops the topmost level for assignment tracking and updates the
+ context variables if necessary.
+ """
+ vars = self._assign_stack.pop()
+ if not frame.toplevel or not vars:
+ return
+ public_names = [x for x in vars if x[:1] != '_']
+ if len(vars) == 1:
+ name = next(iter(vars))
+ ref = frame.symbols.ref(name)
+ self.writeline('context.vars[%r] = %s' % (name, ref))
+ else:
+ self.writeline('context.vars.update({')
+ for idx, name in enumerate(vars):
+ if idx:
+ self.write(', ')
+ ref = frame.symbols.ref(name)
+ self.write('%r: %s' % (name, ref))
+ self.write('})')
+ if public_names:
+ if len(public_names) == 1:
+ self.writeline('context.exported_vars.add(%r)' %
+ public_names[0])
+ else:
+ self.writeline('context.exported_vars.update((%s))' %
+ ', '.join(imap(repr, public_names)))
+
+ # -- Statement Visitors
+
+ def visit_Template(self, node, frame=None):
+ assert frame is None, 'no root frame allowed'
+ eval_ctx = EvalContext(self.environment, self.name)
+
+ from jinja2.runtime import __all__ as exported
+ self.writeline('from __future__ import %s' % ', '.join(code_features))
+ self.writeline('from jinja2.runtime import ' + ', '.join(exported))
+
+ if self.environment.is_async:
+ self.writeline('from jinja2.asyncsupport import auto_await, '
+ 'auto_aiter, make_async_loop_context')
+
+ # if we want a deferred initialization we cannot move the
+ # environment into a local name
+ envenv = not self.defer_init and ', environment=environment' or ''
+
+ # do we have an extends tag at all? If not, we can save some
+ # overhead by just not processing any inheritance code.
+ have_extends = node.find(nodes.Extends) is not None
+
+ # find all blocks
+ for block in node.find_all(nodes.Block):
+ if block.name in self.blocks:
+ self.fail('block %r defined twice' % block.name, block.lineno)
+ self.blocks[block.name] = block
+
+ # find all imports and import them
+ for import_ in node.find_all(nodes.ImportedName):
+ if import_.importname not in self.import_aliases:
+ imp = import_.importname
+ self.import_aliases[imp] = alias = self.temporary_identifier()
+ if '.' in imp:
+ module, obj = imp.rsplit('.', 1)
+ self.writeline('from %s import %s as %s' %
+ (module, obj, alias))
+ else:
+ self.writeline('import %s as %s' % (imp, alias))
+
+ # add the load name
+ self.writeline('name = %r' % self.name)
+
+ # generate the root render function.
+ self.writeline('%s(context, missing=missing%s):' %
+ (self.func('root'), envenv), extra=1)
+ self.indent()
+ self.write_commons()
+
+ # process the root
+ frame = Frame(eval_ctx)
+ if 'self' in find_undeclared(node.body, ('self',)):
+ ref = frame.symbols.declare_parameter('self')
+ self.writeline('%s = TemplateReference(context)' % ref)
+ frame.symbols.analyze_node(node)
+ frame.toplevel = frame.rootlevel = True
+ frame.require_output_check = have_extends and not self.has_known_extends
+ if have_extends:
+ self.writeline('parent_template = None')
+ self.enter_frame(frame)
+ self.pull_dependencies(node.body)
+ self.blockvisit(node.body, frame)
+ self.leave_frame(frame, with_python_scope=True)
+ self.outdent()
+
+ # make sure that the parent root is called.
+ if have_extends:
+ if not self.has_known_extends:
+ self.indent()
+ self.writeline('if parent_template is not None:')
+ self.indent()
+ if supports_yield_from and not self.environment.is_async:
+ self.writeline('yield from parent_template.'
+ 'root_render_func(context)')
+ else:
+ self.writeline('%sfor event in parent_template.'
+ 'root_render_func(context):' %
+ (self.environment.is_async and 'async ' or ''))
+ self.indent()
+ self.writeline('yield event')
+ self.outdent()
+ self.outdent(1 + (not self.has_known_extends))
+
+ # at this point we now have the blocks collected and can visit them too.
+ for name, block in iteritems(self.blocks):
+ self.writeline('%s(context, missing=missing%s):' %
+ (self.func('block_' + name), envenv),
+ block, 1)
+ self.indent()
+ self.write_commons()
+ # It's important that we do not make this frame a child of the
+ # toplevel template. This would cause a variety of
+ # interesting issues with identifier tracking.
+ block_frame = Frame(eval_ctx)
+ undeclared = find_undeclared(block.body, ('self', 'super'))
+ if 'self' in undeclared:
+ ref = block_frame.symbols.declare_parameter('self')
+ self.writeline('%s = TemplateReference(context)' % ref)
+ if 'super' in undeclared:
+ ref = block_frame.symbols.declare_parameter('super')
+ self.writeline('%s = context.super(%r, '
+ 'block_%s)' % (ref, name, name))
+ block_frame.symbols.analyze_node(block)
+ block_frame.block = name
+ self.enter_frame(block_frame)
+ self.pull_dependencies(block.body)
+ self.blockvisit(block.body, block_frame)
+ self.leave_frame(block_frame, with_python_scope=True)
+ self.outdent()
+
+ self.writeline('blocks = {%s}' % ', '.join('%r: block_%s' % (x, x)
+ for x in self.blocks),
+ extra=1)
+
+ # add a function that returns the debug info
+ self.writeline('debug_info = %r' % '&'.join('%s=%s' % x for x
+ in self.debug_info))
+
+ def visit_Block(self, node, frame):
+ """Call a block and register it for the template."""
+ level = 0
+ if frame.toplevel:
+ # if we know that we are a child template, there is no need to
+ # check if we are one
+ if self.has_known_extends:
+ return
+ if self.extends_so_far > 0:
+ self.writeline('if parent_template is None:')
+ self.indent()
+ level += 1
+ context = node.scoped and (
+ 'context.derived(%s)' % self.dump_local_context(frame)) or 'context'
+
+ if supports_yield_from and not self.environment.is_async and \
+ frame.buffer is None:
+ self.writeline('yield from context.blocks[%r][0](%s)' % (
+ node.name, context), node)
+ else:
+ loop = self.environment.is_async and 'async for' or 'for'
+ self.writeline('%s event in context.blocks[%r][0](%s):' % (
+ loop, node.name, context), node)
+ self.indent()
+ self.simple_write('event', frame)
+ self.outdent()
+
+ self.outdent(level)
+
+ def visit_Extends(self, node, frame):
+ """Calls the extender."""
+ if not frame.toplevel:
+ self.fail('cannot use extend from a non top-level scope',
+ node.lineno)
+
+ # if the number of extends statements in general is zero so
+ # far, we don't have to add a check if something extended
+ # the template before this one.
+ if self.extends_so_far > 0:
+
+ # if we have a known extends we just add a template runtime
+ # error into the generated code. We could catch that at compile
+ # time too, but i welcome it not to confuse users by throwing the
+ # same error at different times just "because we can".
+ if not self.has_known_extends:
+ self.writeline('if parent_template is not None:')
+ self.indent()
+ self.writeline('raise TemplateRuntimeError(%r)' %
+ 'extended multiple times')
+
+ # if we have a known extends already we don't need that code here
+ # as we know that the template execution will end here.
+ if self.has_known_extends:
+ raise CompilerExit()
+ else:
+ self.outdent()
+
+ self.writeline('parent_template = environment.get_template(', node)
+ self.visit(node.template, frame)
+ self.write(', %r)' % self.name)
+ self.writeline('for name, parent_block in parent_template.'
+ 'blocks.%s():' % dict_item_iter)
+ self.indent()
+ self.writeline('context.blocks.setdefault(name, []).'
+ 'append(parent_block)')
+ self.outdent()
+
+ # if this extends statement was in the root level we can take
+ # advantage of that information and simplify the generated code
+ # in the top level from this point onwards
+ if frame.rootlevel:
+ self.has_known_extends = True
+
+ # and now we have one more
+ self.extends_so_far += 1
+
+ def visit_Include(self, node, frame):
+ """Handles includes."""
+ if node.ignore_missing:
+ self.writeline('try:')
+ self.indent()
+
+ func_name = 'get_or_select_template'
+ if isinstance(node.template, nodes.Const):
+ if isinstance(node.template.value, string_types):
+ func_name = 'get_template'
+ elif isinstance(node.template.value, (tuple, list)):
+ func_name = 'select_template'
+ elif isinstance(node.template, (nodes.Tuple, nodes.List)):
+ func_name = 'select_template'
+
+ self.writeline('template = environment.%s(' % func_name, node)
+ self.visit(node.template, frame)
+ self.write(', %r)' % self.name)
+ if node.ignore_missing:
+ self.outdent()
+ self.writeline('except TemplateNotFound:')
+ self.indent()
+ self.writeline('pass')
+ self.outdent()
+ self.writeline('else:')
+ self.indent()
+
+ skip_event_yield = False
+ if node.with_context:
+ loop = self.environment.is_async and 'async for' or 'for'
+ self.writeline('%s event in template.root_render_func('
+ 'template.new_context(context.get_all(), True, '
+ '%s)):' % (loop, self.dump_local_context(frame)))
+ elif self.environment.is_async:
+ self.writeline('for event in (await '
+ 'template._get_default_module_async())'
+ '._body_stream:')
+ else:
+ if supports_yield_from:
+ self.writeline('yield from template._get_default_module()'
+ '._body_stream')
+ skip_event_yield = True
+ else:
+ self.writeline('for event in template._get_default_module()'
+ '._body_stream:')
+
+ if not skip_event_yield:
+ self.indent()
+ self.simple_write('event', frame)
+ self.outdent()
+
+ if node.ignore_missing:
+ self.outdent()
+
+ def visit_Import(self, node, frame):
+ """Visit regular imports."""
+ self.writeline('%s = ' % frame.symbols.ref(node.target), node)
+ if frame.toplevel:
+ self.write('context.vars[%r] = ' % node.target)
+ if self.environment.is_async:
+ self.write('await ')
+ self.write('environment.get_template(')
+ self.visit(node.template, frame)
+ self.write(', %r).' % self.name)
+ if node.with_context:
+ self.write('make_module%s(context.get_all(), True, %s)'
+ % (self.environment.is_async and '_async' or '',
+ self.dump_local_context(frame)))
+ elif self.environment.is_async:
+ self.write('_get_default_module_async()')
+ else:
+ self.write('_get_default_module()')
+ if frame.toplevel and not node.target.startswith('_'):
+ self.writeline('context.exported_vars.discard(%r)' % node.target)
+
+ def visit_FromImport(self, node, frame):
+ """Visit named imports."""
+ self.newline(node)
+ self.write('included_template = %senvironment.get_template('
+ % (self.environment.is_async and 'await ' or ''))
+ self.visit(node.template, frame)
+ self.write(', %r).' % self.name)
+ if node.with_context:
+ self.write('make_module%s(context.get_all(), True, %s)'
+ % (self.environment.is_async and '_async' or '',
+ self.dump_local_context(frame)))
+ elif self.environment.is_async:
+ self.write('_get_default_module_async()')
+ else:
+ self.write('_get_default_module()')
+
+ var_names = []
+ discarded_names = []
+ for name in node.names:
+ if isinstance(name, tuple):
+ name, alias = name
+ else:
+ alias = name
+ self.writeline('%s = getattr(included_template, '
+ '%r, missing)' % (frame.symbols.ref(alias), name))
+ self.writeline('if %s is missing:' % frame.symbols.ref(alias))
+ self.indent()
+ self.writeline('%s = undefined(%r %% '
+ 'included_template.__name__, '
+ 'name=%r)' %
+ (frame.symbols.ref(alias),
+ 'the template %%r (imported on %s) does '
+ 'not export the requested name %s' % (
+ self.position(node),
+ repr(name)
+ ), name))
+ self.outdent()
+ if frame.toplevel:
+ var_names.append(alias)
+ if not alias.startswith('_'):
+ discarded_names.append(alias)
+
+ if var_names:
+ if len(var_names) == 1:
+ name = var_names[0]
+ self.writeline('context.vars[%r] = %s' %
+ (name, frame.symbols.ref(name)))
+ else:
+ self.writeline('context.vars.update({%s})' % ', '.join(
+ '%r: %s' % (name, frame.symbols.ref(name)) for name in var_names
+ ))
+ if discarded_names:
+ if len(discarded_names) == 1:
+ self.writeline('context.exported_vars.discard(%r)' %
+ discarded_names[0])
+ else:
+ self.writeline('context.exported_vars.difference_'
+ 'update((%s))' % ', '.join(imap(repr, discarded_names)))
+
+ def visit_For(self, node, frame):
+ loop_frame = frame.inner()
+ test_frame = frame.inner()
+ else_frame = frame.inner()
+
+ # try to figure out if we have an extended loop. An extended loop
+ # is necessary if the loop is in recursive mode if the special loop
+ # variable is accessed in the body.
+ extended_loop = node.recursive or 'loop' in \
+ find_undeclared(node.iter_child_nodes(
+ only=('body',)), ('loop',))
+
+ loop_ref = None
+ if extended_loop:
+ loop_ref = loop_frame.symbols.declare_parameter('loop')
+
+ loop_frame.symbols.analyze_node(node, for_branch='body')
+ if node.else_:
+ else_frame.symbols.analyze_node(node, for_branch='else')
+
+ if node.test:
+ loop_filter_func = self.temporary_identifier()
+ test_frame.symbols.analyze_node(node, for_branch='test')
+ self.writeline('%s(fiter):' % self.func(loop_filter_func), node.test)
+ self.indent()
+ self.enter_frame(test_frame)
+ self.writeline(self.environment.is_async and 'async for ' or 'for ')
+ self.visit(node.target, loop_frame)
+ self.write(' in ')
+ self.write(self.environment.is_async and 'auto_aiter(fiter)' or 'fiter')
+ self.write(':')
+ self.indent()
+ self.writeline('if ', node.test)
+ self.visit(node.test, test_frame)
+ self.write(':')
+ self.indent()
+ self.writeline('yield ')
+ self.visit(node.target, loop_frame)
+ self.outdent(3)
+ self.leave_frame(test_frame, with_python_scope=True)
+
+ # if we don't have an recursive loop we have to find the shadowed
+ # variables at that point. Because loops can be nested but the loop
+ # variable is a special one we have to enforce aliasing for it.
+ if node.recursive:
+ self.writeline('%s(reciter, loop_render_func, depth=0):' %
+ self.func('loop'), node)
+ self.indent()
+ self.buffer(loop_frame)
+
+ # Use the same buffer for the else frame
+ else_frame.buffer = loop_frame.buffer
+
+ # make sure the loop variable is a special one and raise a template
+ # assertion error if a loop tries to write to loop
+ if extended_loop:
+ self.writeline('%s = missing' % loop_ref)
+
+ for name in node.find_all(nodes.Name):
+ if name.ctx == 'store' and name.name == 'loop':
+ self.fail('Can\'t assign to special loop variable '
+ 'in for-loop target', name.lineno)
+
+ if node.else_:
+ iteration_indicator = self.temporary_identifier()
+ self.writeline('%s = 1' % iteration_indicator)
+
+ self.writeline(self.environment.is_async and 'async for ' or 'for ', node)
+ self.visit(node.target, loop_frame)
+ if extended_loop:
+ if self.environment.is_async:
+ self.write(', %s in await make_async_loop_context(' % loop_ref)
+ else:
+ self.write(', %s in LoopContext(' % loop_ref)
+ else:
+ self.write(' in ')
+
+ if node.test:
+ self.write('%s(' % loop_filter_func)
+ if node.recursive:
+ self.write('reciter')
+ else:
+ if self.environment.is_async and not extended_loop:
+ self.write('auto_aiter(')
+ self.visit(node.iter, frame)
+ if self.environment.is_async and not extended_loop:
+ self.write(')')
+ if node.test:
+ self.write(')')
+
+ if node.recursive:
+ self.write(', loop_render_func, depth):')
+ else:
+ self.write(extended_loop and '):' or ':')
+
+ self.indent()
+ self.enter_frame(loop_frame)
+
+ self.blockvisit(node.body, loop_frame)
+ if node.else_:
+ self.writeline('%s = 0' % iteration_indicator)
+ self.outdent()
+ self.leave_frame(loop_frame, with_python_scope=node.recursive
+ and not node.else_)
+
+ if node.else_:
+ self.writeline('if %s:' % iteration_indicator)
+ self.indent()
+ self.enter_frame(else_frame)
+ self.blockvisit(node.else_, else_frame)
+ self.leave_frame(else_frame)
+ self.outdent()
+
+ # if the node was recursive we have to return the buffer contents
+ # and start the iteration code
+ if node.recursive:
+ self.return_buffer_contents(loop_frame)
+ self.outdent()
+ self.start_write(frame, node)
+ if self.environment.is_async:
+ self.write('await ')
+ self.write('loop(')
+ if self.environment.is_async:
+ self.write('auto_aiter(')
+ self.visit(node.iter, frame)
+ if self.environment.is_async:
+ self.write(')')
+ self.write(', loop)')
+ self.end_write(frame)
+
+ def visit_If(self, node, frame):
+ if_frame = frame.soft()
+ self.writeline('if ', node)
+ self.visit(node.test, if_frame)
+ self.write(':')
+ self.indent()
+ self.blockvisit(node.body, if_frame)
+ self.outdent()
+ if node.else_:
+ self.writeline('else:')
+ self.indent()
+ self.blockvisit(node.else_, if_frame)
+ self.outdent()
+
+ def visit_Macro(self, node, frame):
+ macro_frame, macro_ref = self.macro_body(node, frame)
+ self.newline()
+ if frame.toplevel:
+ if not node.name.startswith('_'):
+ self.write('context.exported_vars.add(%r)' % node.name)
+ ref = frame.symbols.ref(node.name)
+ self.writeline('context.vars[%r] = ' % node.name)
+ self.write('%s = ' % frame.symbols.ref(node.name))
+ self.macro_def(macro_ref, macro_frame)
+
+ def visit_CallBlock(self, node, frame):
+ call_frame, macro_ref = self.macro_body(node, frame)
+ self.writeline('caller = ')
+ self.macro_def(macro_ref, call_frame)
+ self.start_write(frame, node)
+ self.visit_Call(node.call, frame, forward_caller=True)
+ self.end_write(frame)
+
+ def visit_FilterBlock(self, node, frame):
+ filter_frame = frame.inner()
+ filter_frame.symbols.analyze_node(node)
+ self.enter_frame(filter_frame)
+ self.buffer(filter_frame)
+ self.blockvisit(node.body, filter_frame)
+ self.start_write(frame, node)
+ self.visit_Filter(node.filter, filter_frame)
+ self.end_write(frame)
+ self.leave_frame(filter_frame)
+
+ def visit_With(self, node, frame):
+ with_frame = frame.inner()
+ with_frame.symbols.analyze_node(node)
+ self.enter_frame(with_frame)
+ for idx, (target, expr) in enumerate(izip(node.targets, node.values)):
+ self.newline()
+ self.visit(target, with_frame)
+ self.write(' = ')
+ self.visit(expr, frame)
+ self.blockvisit(node.body, with_frame)
+ self.leave_frame(with_frame)
+
+ def visit_ExprStmt(self, node, frame):
+ self.newline(node)
+ self.visit(node.node, frame)
+
+ def visit_Output(self, node, frame):
+ # if we have a known extends statement, we don't output anything
+ # if we are in a require_output_check section
+ if self.has_known_extends and frame.require_output_check:
+ return
+
+ allow_constant_finalize = True
+ if self.environment.finalize:
+ func = self.environment.finalize
+ if getattr(func, 'contextfunction', False) or \
+ getattr(func, 'evalcontextfunction', False):
+ allow_constant_finalize = False
+ elif getattr(func, 'environmentfunction', False):
+ finalize = lambda x: text_type(
+ self.environment.finalize(self.environment, x))
+ else:
+ finalize = lambda x: text_type(self.environment.finalize(x))
+ else:
+ finalize = text_type
+
+ # if we are inside a frame that requires output checking, we do so
+ outdent_later = False
+ if frame.require_output_check:
+ self.writeline('if parent_template is None:')
+ self.indent()
+ outdent_later = True
+
+ # try to evaluate as many chunks as possible into a static
+ # string at compile time.
+ body = []
+ for child in node.nodes:
+ try:
+ if not allow_constant_finalize:
+ raise nodes.Impossible()
+ const = child.as_const(frame.eval_ctx)
+ except nodes.Impossible:
+ body.append(child)
+ continue
+ # the frame can't be volatile here, becaus otherwise the
+ # as_const() function would raise an Impossible exception
+ # at that point.
+ try:
+ if frame.eval_ctx.autoescape:
+ if hasattr(const, '__html__'):
+ const = const.__html__()
+ else:
+ const = escape(const)
+ const = finalize(const)
+ except Exception:
+ # if something goes wrong here we evaluate the node
+ # at runtime for easier debugging
+ body.append(child)
+ continue
+ if body and isinstance(body[-1], list):
+ body[-1].append(const)
+ else:
+ body.append([const])
+
+ # if we have less than 3 nodes or a buffer we yield or extend/append
+ if len(body) < 3 or frame.buffer is not None:
+ if frame.buffer is not None:
+ # for one item we append, for more we extend
+ if len(body) == 1:
+ self.writeline('%s.append(' % frame.buffer)
+ else:
+ self.writeline('%s.extend((' % frame.buffer)
+ self.indent()
+ for item in body:
+ if isinstance(item, list):
+ val = repr(concat(item))
+ if frame.buffer is None:
+ self.writeline('yield ' + val)
+ else:
+ self.writeline(val + ',')
+ else:
+ if frame.buffer is None:
+ self.writeline('yield ', item)
+ else:
+ self.newline(item)
+ close = 1
+ if frame.eval_ctx.volatile:
+ self.write('(escape if context.eval_ctx.autoescape'
+ ' else to_string)(')
+ elif frame.eval_ctx.autoescape:
+ self.write('escape(')
+ else:
+ self.write('to_string(')
+ if self.environment.finalize is not None:
+ self.write('environment.finalize(')
+ if getattr(self.environment.finalize,
+ "contextfunction", False):
+ self.write('context, ')
+ close += 1
+ self.visit(item, frame)
+ self.write(')' * close)
+ if frame.buffer is not None:
+ self.write(',')
+ if frame.buffer is not None:
+ # close the open parentheses
+ self.outdent()
+ self.writeline(len(body) == 1 and ')' or '))')
+
+ # otherwise we create a format string as this is faster in that case
+ else:
+ format = []
+ arguments = []
+ for item in body:
+ if isinstance(item, list):
+ format.append(concat(item).replace('%', '%%'))
+ else:
+ format.append('%s')
+ arguments.append(item)
+ self.writeline('yield ')
+ self.write(repr(concat(format)) + ' % (')
+ self.indent()
+ for argument in arguments:
+ self.newline(argument)
+ close = 0
+ if frame.eval_ctx.volatile:
+ self.write('(escape if context.eval_ctx.autoescape else'
+ ' to_string)(')
+ close += 1
+ elif frame.eval_ctx.autoescape:
+ self.write('escape(')
+ close += 1
+ if self.environment.finalize is not None:
+ self.write('environment.finalize(')
+ if getattr(self.environment.finalize,
+ 'contextfunction', False):
+ self.write('context, ')
+ elif getattr(self.environment.finalize,
+ 'evalcontextfunction', False):
+ self.write('context.eval_ctx, ')
+ elif getattr(self.environment.finalize,
+ 'environmentfunction', False):
+ self.write('environment, ')
+ close += 1
+ self.visit(argument, frame)
+ self.write(')' * close + ', ')
+ self.outdent()
+ self.writeline(')')
+
+ if outdent_later:
+ self.outdent()
+
+ def visit_Assign(self, node, frame):
+ self.push_assign_tracking()
+ self.newline(node)
+ self.visit(node.target, frame)
+ self.write(' = ')
+ self.visit(node.node, frame)
+ self.pop_assign_tracking(frame)
+
+ def visit_AssignBlock(self, node, frame):
+ self.push_assign_tracking()
+ block_frame = frame.inner()
+ # This is a special case. Since a set block always captures we
+ # will disable output checks. This way one can use set blocks
+ # toplevel even in extended templates.
+ block_frame.require_output_check = False
+ block_frame.symbols.analyze_node(node)
+ self.enter_frame(block_frame)
+ self.buffer(block_frame)
+ self.blockvisit(node.body, block_frame)
+ self.newline(node)
+ self.visit(node.target, frame)
+ self.write(' = (Markup if context.eval_ctx.autoescape '
+ 'else identity)(concat(%s))' % block_frame.buffer)
+ self.pop_assign_tracking(frame)
+ self.leave_frame(block_frame)
+
+ # -- Expression Visitors
+
+ def visit_Name(self, node, frame):
+ if node.ctx == 'store' and frame.toplevel:
+ if self._assign_stack:
+ self._assign_stack[-1].add(node.name)
+ ref = frame.symbols.ref(node.name)
+
+ # If we are looking up a variable we might have to deal with the
+ # case where it's undefined. We can skip that case if the load
+ # instruction indicates a parameter which are always defined.
+ if node.ctx == 'load':
+ load = frame.symbols.find_load(ref)
+ if not (load is not None and load[0] == VAR_LOAD_PARAMETER and \
+ not self.parameter_is_undeclared(ref)):
+ self.write('(undefined(name=%r) if %s is missing else %s)' %
+ (node.name, ref, ref))
+ return
+
+ self.write(ref)
+
+ def visit_Const(self, node, frame):
+ val = node.as_const(frame.eval_ctx)
+ if isinstance(val, float):
+ self.write(str(val))
+ else:
+ self.write(repr(val))
+
+ def visit_TemplateData(self, node, frame):
+ try:
+ self.write(repr(node.as_const(frame.eval_ctx)))
+ except nodes.Impossible:
+ self.write('(Markup if context.eval_ctx.autoescape else identity)(%r)'
+ % node.data)
+
+ def visit_Tuple(self, node, frame):
+ self.write('(')
+ idx = -1
+ for idx, item in enumerate(node.items):
+ if idx:
+ self.write(', ')
+ self.visit(item, frame)
+ self.write(idx == 0 and ',)' or ')')
+
+ def visit_List(self, node, frame):
+ self.write('[')
+ for idx, item in enumerate(node.items):
+ if idx:
+ self.write(', ')
+ self.visit(item, frame)
+ self.write(']')
+
+ def visit_Dict(self, node, frame):
+ self.write('{')
+ for idx, item in enumerate(node.items):
+ if idx:
+ self.write(', ')
+ self.visit(item.key, frame)
+ self.write(': ')
+ self.visit(item.value, frame)
+ self.write('}')
+
+ def binop(operator, interceptable=True):
+ @optimizeconst
+ def visitor(self, node, frame):
+ if self.environment.sandboxed and \
+ operator in self.environment.intercepted_binops:
+ self.write('environment.call_binop(context, %r, ' % operator)
+ self.visit(node.left, frame)
+ self.write(', ')
+ self.visit(node.right, frame)
+ else:
+ self.write('(')
+ self.visit(node.left, frame)
+ self.write(' %s ' % operator)
+ self.visit(node.right, frame)
+ self.write(')')
+ return visitor
+
+ def uaop(operator, interceptable=True):
+ @optimizeconst
+ def visitor(self, node, frame):
+ if self.environment.sandboxed and \
+ operator in self.environment.intercepted_unops:
+ self.write('environment.call_unop(context, %r, ' % operator)
+ self.visit(node.node, frame)
+ else:
+ self.write('(' + operator)
+ self.visit(node.node, frame)
+ self.write(')')
+ return visitor
+
+ visit_Add = binop('+')
+ visit_Sub = binop('-')
+ visit_Mul = binop('*')
+ visit_Div = binop('/')
+ visit_FloorDiv = binop('//')
+ visit_Pow = binop('**')
+ visit_Mod = binop('%')
+ visit_And = binop('and', interceptable=False)
+ visit_Or = binop('or', interceptable=False)
+ visit_Pos = uaop('+')
+ visit_Neg = uaop('-')
+ visit_Not = uaop('not ', interceptable=False)
+ del binop, uaop
+
+ @optimizeconst
+ def visit_Concat(self, node, frame):
+ if frame.eval_ctx.volatile:
+ func_name = '(context.eval_ctx.volatile and' \
+ ' markup_join or unicode_join)'
+ elif frame.eval_ctx.autoescape:
+ func_name = 'markup_join'
+ else:
+ func_name = 'unicode_join'
+ self.write('%s((' % func_name)
+ for arg in node.nodes:
+ self.visit(arg, frame)
+ self.write(', ')
+ self.write('))')
+
+ @optimizeconst
+ def visit_Compare(self, node, frame):
+ self.visit(node.expr, frame)
+ for op in node.ops:
+ self.visit(op, frame)
+
+ def visit_Operand(self, node, frame):
+ self.write(' %s ' % operators[node.op])
+ self.visit(node.expr, frame)
+
+ @optimizeconst
+ def visit_Getattr(self, node, frame):
+ self.write('environment.getattr(')
+ self.visit(node.node, frame)
+ self.write(', %r)' % node.attr)
+
+ @optimizeconst
+ def visit_Getitem(self, node, frame):
+ # slices bypass the environment getitem method.
+ if isinstance(node.arg, nodes.Slice):
+ self.visit(node.node, frame)
+ self.write('[')
+ self.visit(node.arg, frame)
+ self.write(']')
+ else:
+ self.write('environment.getitem(')
+ self.visit(node.node, frame)
+ self.write(', ')
+ self.visit(node.arg, frame)
+ self.write(')')
+
+ def visit_Slice(self, node, frame):
+ if node.start is not None:
+ self.visit(node.start, frame)
+ self.write(':')
+ if node.stop is not None:
+ self.visit(node.stop, frame)
+ if node.step is not None:
+ self.write(':')
+ self.visit(node.step, frame)
+
+ @optimizeconst
+ def visit_Filter(self, node, frame):
+ if self.environment.is_async:
+ self.write('await auto_await(')
+ self.write(self.filters[node.name] + '(')
+ func = self.environment.filters.get(node.name)
+ if func is None:
+ self.fail('no filter named %r' % node.name, node.lineno)
+ if getattr(func, 'contextfilter', False):
+ self.write('context, ')
+ elif getattr(func, 'evalcontextfilter', False):
+ self.write('context.eval_ctx, ')
+ elif getattr(func, 'environmentfilter', False):
+ self.write('environment, ')
+
+ # if the filter node is None we are inside a filter block
+ # and want to write to the current buffer
+ if node.node is not None:
+ self.visit(node.node, frame)
+ elif frame.eval_ctx.volatile:
+ self.write('(context.eval_ctx.autoescape and'
+ ' Markup(concat(%s)) or concat(%s))' %
+ (frame.buffer, frame.buffer))
+ elif frame.eval_ctx.autoescape:
+ self.write('Markup(concat(%s))' % frame.buffer)
+ else:
+ self.write('concat(%s)' % frame.buffer)
+ self.signature(node, frame)
+ self.write(')')
+ if self.environment.is_async:
+ self.write(')')
+
+ @optimizeconst
+ def visit_Test(self, node, frame):
+ self.write(self.tests[node.name] + '(')
+ if node.name not in self.environment.tests:
+ self.fail('no test named %r' % node.name, node.lineno)
+ self.visit(node.node, frame)
+ self.signature(node, frame)
+ self.write(')')
+
+ @optimizeconst
+ def visit_CondExpr(self, node, frame):
+ def write_expr2():
+ if node.expr2 is not None:
+ return self.visit(node.expr2, frame)
+ self.write('undefined(%r)' % ('the inline if-'
+ 'expression on %s evaluated to false and '
+ 'no else section was defined.' % self.position(node)))
+
+ self.write('(')
+ self.visit(node.expr1, frame)
+ self.write(' if ')
+ self.visit(node.test, frame)
+ self.write(' else ')
+ write_expr2()
+ self.write(')')
+
+ @optimizeconst
+ def visit_Call(self, node, frame, forward_caller=False):
+ if self.environment.is_async:
+ self.write('await auto_await(')
+ if self.environment.sandboxed:
+ self.write('environment.call(context, ')
+ else:
+ self.write('context.call(')
+ self.visit(node.node, frame)
+ extra_kwargs = forward_caller and {'caller': 'caller'} or None
+ self.signature(node, frame, extra_kwargs)
+ self.write(')')
+ if self.environment.is_async:
+ self.write(')')
+
+ def visit_Keyword(self, node, frame):
+ self.write(node.key + '=')
+ self.visit(node.value, frame)
+
+ # -- Unused nodes for extensions
+
+ def visit_MarkSafe(self, node, frame):
+ self.write('Markup(')
+ self.visit(node.expr, frame)
+ self.write(')')
+
+ def visit_MarkSafeIfAutoescape(self, node, frame):
+ self.write('(context.eval_ctx.autoescape and Markup or identity)(')
+ self.visit(node.expr, frame)
+ self.write(')')
+
+ def visit_EnvironmentAttribute(self, node, frame):
+ self.write('environment.' + node.name)
+
+ def visit_ExtensionAttribute(self, node, frame):
+ self.write('environment.extensions[%r].%s' % (node.identifier, node.name))
+
+ def visit_ImportedName(self, node, frame):
+ self.write(self.import_aliases[node.importname])
+
+ def visit_InternalName(self, node, frame):
+ self.write(node.name)
+
+ def visit_ContextReference(self, node, frame):
+ self.write('context')
+
+ def visit_Continue(self, node, frame):
+ self.writeline('continue', node)
+
+ def visit_Break(self, node, frame):
+ self.writeline('break', node)
+
+ def visit_Scope(self, node, frame):
+ scope_frame = frame.inner()
+ scope_frame.symbols.analyze_node(node)
+ self.enter_frame(scope_frame)
+ self.blockvisit(node.body, scope_frame)
+ self.leave_frame(scope_frame)
+
+ def visit_EvalContextModifier(self, node, frame):
+ for keyword in node.options:
+ self.writeline('context.eval_ctx.%s = ' % keyword.key)
+ self.visit(keyword.value, frame)
+ try:
+ val = keyword.value.as_const(frame.eval_ctx)
+ except nodes.Impossible:
+ frame.eval_ctx.volatile = True
+ else:
+ setattr(frame.eval_ctx, keyword.key, val)
+
+ def visit_ScopedEvalContextModifier(self, node, frame):
+ old_ctx_name = self.temporary_identifier()
+ saved_ctx = frame.eval_ctx.save()
+ self.writeline('%s = context.eval_ctx.save()' % old_ctx_name)
+ self.visit_EvalContextModifier(node, frame)
+ for child in node.body:
+ self.visit(child, frame)
+ frame.eval_ctx.revert(saved_ctx)
+ self.writeline('context.eval_ctx.revert(%s)' % old_ctx_name)
diff --git a/lib/spack/external/jinja2/constants.py b/lib/spack/external/jinja2/constants.py
new file mode 100644
index 0000000000..11efd1ed15
--- /dev/null
+++ b/lib/spack/external/jinja2/constants.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja.constants
+ ~~~~~~~~~~~~~~~
+
+ Various constants.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+
+
+#: list of lorem ipsum words used by the lipsum() helper function
+LOREM_IPSUM_WORDS = u'''\
+a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at
+auctor augue bibendum blandit class commodo condimentum congue consectetuer
+consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus
+diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend
+elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames
+faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac
+hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum
+justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem
+luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie
+mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non
+nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque
+penatibus per pharetra phasellus placerat platea porta porttitor posuere
+potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus
+ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit
+sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor
+tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices
+ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus
+viverra volutpat vulputate'''
diff --git a/lib/spack/external/jinja2/debug.py b/lib/spack/external/jinja2/debug.py
new file mode 100644
index 0000000000..07c21f1a8b
--- /dev/null
+++ b/lib/spack/external/jinja2/debug.py
@@ -0,0 +1,372 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.debug
+ ~~~~~~~~~~~~
+
+ Implements the debug interface for Jinja. This module does some pretty
+ ugly stuff with the Python traceback system in order to achieve tracebacks
+ with correct line numbers, locals and contents.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import sys
+import traceback
+from types import TracebackType, CodeType
+from jinja2.utils import missing, internal_code
+from jinja2.exceptions import TemplateSyntaxError
+from jinja2._compat import iteritems, reraise, PY2
+
+# on pypy we can take advantage of transparent proxies
+try:
+ from __pypy__ import tproxy
+except ImportError:
+ tproxy = None
+
+
+# how does the raise helper look like?
+try:
+ exec("raise TypeError, 'foo'")
+except SyntaxError:
+ raise_helper = 'raise __jinja_exception__[1]'
+except TypeError:
+ raise_helper = 'raise __jinja_exception__[0], __jinja_exception__[1]'
+
+
+class TracebackFrameProxy(object):
+ """Proxies a traceback frame."""
+
+ def __init__(self, tb):
+ self.tb = tb
+ self._tb_next = None
+
+ @property
+ def tb_next(self):
+ return self._tb_next
+
+ def set_next(self, next):
+ if tb_set_next is not None:
+ try:
+ tb_set_next(self.tb, next and next.tb or None)
+ except Exception:
+ # this function can fail due to all the hackery it does
+ # on various python implementations. We just catch errors
+ # down and ignore them if necessary.
+ pass
+ self._tb_next = next
+
+ @property
+ def is_jinja_frame(self):
+ return '__jinja_template__' in self.tb.tb_frame.f_globals
+
+ def __getattr__(self, name):
+ return getattr(self.tb, name)
+
+
+def make_frame_proxy(frame):
+ proxy = TracebackFrameProxy(frame)
+ if tproxy is None:
+ return proxy
+ def operation_handler(operation, *args, **kwargs):
+ if operation in ('__getattribute__', '__getattr__'):
+ return getattr(proxy, args[0])
+ elif operation == '__setattr__':
+ proxy.__setattr__(*args, **kwargs)
+ else:
+ return getattr(proxy, operation)(*args, **kwargs)
+ return tproxy(TracebackType, operation_handler)
+
+
+class ProcessedTraceback(object):
+ """Holds a Jinja preprocessed traceback for printing or reraising."""
+
+ def __init__(self, exc_type, exc_value, frames):
+ assert frames, 'no frames for this traceback?'
+ self.exc_type = exc_type
+ self.exc_value = exc_value
+ self.frames = frames
+
+ # newly concatenate the frames (which are proxies)
+ prev_tb = None
+ for tb in self.frames:
+ if prev_tb is not None:
+ prev_tb.set_next(tb)
+ prev_tb = tb
+ prev_tb.set_next(None)
+
+ def render_as_text(self, limit=None):
+ """Return a string with the traceback."""
+ lines = traceback.format_exception(self.exc_type, self.exc_value,
+ self.frames[0], limit=limit)
+ return ''.join(lines).rstrip()
+
+ def render_as_html(self, full=False):
+ """Return a unicode string with the traceback as rendered HTML."""
+ from jinja2.debugrenderer import render_traceback
+ return u'%s\n\n<!--\n%s\n-->' % (
+ render_traceback(self, full=full),
+ self.render_as_text().decode('utf-8', 'replace')
+ )
+
+ @property
+ def is_template_syntax_error(self):
+ """`True` if this is a template syntax error."""
+ return isinstance(self.exc_value, TemplateSyntaxError)
+
+ @property
+ def exc_info(self):
+ """Exception info tuple with a proxy around the frame objects."""
+ return self.exc_type, self.exc_value, self.frames[0]
+
+ @property
+ def standard_exc_info(self):
+ """Standard python exc_info for re-raising"""
+ tb = self.frames[0]
+ # the frame will be an actual traceback (or transparent proxy) if
+ # we are on pypy or a python implementation with support for tproxy
+ if type(tb) is not TracebackType:
+ tb = tb.tb
+ return self.exc_type, self.exc_value, tb
+
+
+def make_traceback(exc_info, source_hint=None):
+ """Creates a processed traceback object from the exc_info."""
+ exc_type, exc_value, tb = exc_info
+ if isinstance(exc_value, TemplateSyntaxError):
+ exc_info = translate_syntax_error(exc_value, source_hint)
+ initial_skip = 0
+ else:
+ initial_skip = 1
+ return translate_exception(exc_info, initial_skip)
+
+
+def translate_syntax_error(error, source=None):
+ """Rewrites a syntax error to please traceback systems."""
+ error.source = source
+ error.translated = True
+ exc_info = (error.__class__, error, None)
+ filename = error.filename
+ if filename is None:
+ filename = '<unknown>'
+ return fake_exc_info(exc_info, filename, error.lineno)
+
+
+def translate_exception(exc_info, initial_skip=0):
+ """If passed an exc_info it will automatically rewrite the exceptions
+ all the way down to the correct line numbers and frames.
+ """
+ tb = exc_info[2]
+ frames = []
+
+ # skip some internal frames if wanted
+ for x in range(initial_skip):
+ if tb is not None:
+ tb = tb.tb_next
+ initial_tb = tb
+
+ while tb is not None:
+ # skip frames decorated with @internalcode. These are internal
+ # calls we can't avoid and that are useless in template debugging
+ # output.
+ if tb.tb_frame.f_code in internal_code:
+ tb = tb.tb_next
+ continue
+
+ # save a reference to the next frame if we override the current
+ # one with a faked one.
+ next = tb.tb_next
+
+ # fake template exceptions
+ template = tb.tb_frame.f_globals.get('__jinja_template__')
+ if template is not None:
+ lineno = template.get_corresponding_lineno(tb.tb_lineno)
+ tb = fake_exc_info(exc_info[:2] + (tb,), template.filename,
+ lineno)[2]
+
+ frames.append(make_frame_proxy(tb))
+ tb = next
+
+ # if we don't have any exceptions in the frames left, we have to
+ # reraise it unchanged.
+ # XXX: can we backup here? when could this happen?
+ if not frames:
+ reraise(exc_info[0], exc_info[1], exc_info[2])
+
+ return ProcessedTraceback(exc_info[0], exc_info[1], frames)
+
+
+def get_jinja_locals(real_locals):
+ ctx = real_locals.get('context')
+ if ctx:
+ locals = ctx.get_all()
+ else:
+ locals = {}
+
+ local_overrides = {}
+
+ for name, value in iteritems(real_locals):
+ if not name.startswith('l_') or value is missing:
+ continue
+ try:
+ _, depth, name = name.split('_', 2)
+ depth = int(depth)
+ except ValueError:
+ continue
+ cur_depth = local_overrides.get(name, (-1,))[0]
+ if cur_depth < depth:
+ local_overrides[name] = (depth, value)
+
+ for name, (_, value) in iteritems(local_overrides):
+ if value is missing:
+ locals.pop(name, None)
+ else:
+ locals[name] = value
+
+ return locals
+
+
+def fake_exc_info(exc_info, filename, lineno):
+ """Helper for `translate_exception`."""
+ exc_type, exc_value, tb = exc_info
+
+ # figure the real context out
+ if tb is not None:
+ locals = get_jinja_locals(tb.tb_frame.f_locals)
+
+ # if there is a local called __jinja_exception__, we get
+ # rid of it to not break the debug functionality.
+ locals.pop('__jinja_exception__', None)
+ else:
+ locals = {}
+
+ # assamble fake globals we need
+ globals = {
+ '__name__': filename,
+ '__file__': filename,
+ '__jinja_exception__': exc_info[:2],
+
+ # we don't want to keep the reference to the template around
+ # to not cause circular dependencies, but we mark it as Jinja
+ # frame for the ProcessedTraceback
+ '__jinja_template__': None
+ }
+
+ # and fake the exception
+ code = compile('\n' * (lineno - 1) + raise_helper, filename, 'exec')
+
+ # if it's possible, change the name of the code. This won't work
+ # on some python environments such as google appengine
+ try:
+ if tb is None:
+ location = 'template'
+ else:
+ function = tb.tb_frame.f_code.co_name
+ if function == 'root':
+ location = 'top-level template code'
+ elif function.startswith('block_'):
+ location = 'block "%s"' % function[6:]
+ else:
+ location = 'template'
+
+ if PY2:
+ code = CodeType(0, code.co_nlocals, code.co_stacksize,
+ code.co_flags, code.co_code, code.co_consts,
+ code.co_names, code.co_varnames, filename,
+ location, code.co_firstlineno,
+ code.co_lnotab, (), ())
+ else:
+ code = CodeType(0, code.co_kwonlyargcount,
+ code.co_nlocals, code.co_stacksize,
+ code.co_flags, code.co_code, code.co_consts,
+ code.co_names, code.co_varnames, filename,
+ location, code.co_firstlineno,
+ code.co_lnotab, (), ())
+ except Exception as e:
+ pass
+
+ # execute the code and catch the new traceback
+ try:
+ exec(code, globals, locals)
+ except:
+ exc_info = sys.exc_info()
+ new_tb = exc_info[2].tb_next
+
+ # return without this frame
+ return exc_info[:2] + (new_tb,)
+
+
+def _init_ugly_crap():
+ """This function implements a few ugly things so that we can patch the
+ traceback objects. The function returned allows resetting `tb_next` on
+ any python traceback object. Do not attempt to use this on non cpython
+ interpreters
+ """
+ import ctypes
+ from types import TracebackType
+
+ if PY2:
+ # figure out size of _Py_ssize_t for Python 2:
+ if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'):
+ _Py_ssize_t = ctypes.c_int64
+ else:
+ _Py_ssize_t = ctypes.c_int
+ else:
+ # platform ssize_t on Python 3
+ _Py_ssize_t = ctypes.c_ssize_t
+
+ # regular python
+ class _PyObject(ctypes.Structure):
+ pass
+ _PyObject._fields_ = [
+ ('ob_refcnt', _Py_ssize_t),
+ ('ob_type', ctypes.POINTER(_PyObject))
+ ]
+
+ # python with trace
+ if hasattr(sys, 'getobjects'):
+ class _PyObject(ctypes.Structure):
+ pass
+ _PyObject._fields_ = [
+ ('_ob_next', ctypes.POINTER(_PyObject)),
+ ('_ob_prev', ctypes.POINTER(_PyObject)),
+ ('ob_refcnt', _Py_ssize_t),
+ ('ob_type', ctypes.POINTER(_PyObject))
+ ]
+
+ class _Traceback(_PyObject):
+ pass
+ _Traceback._fields_ = [
+ ('tb_next', ctypes.POINTER(_Traceback)),
+ ('tb_frame', ctypes.POINTER(_PyObject)),
+ ('tb_lasti', ctypes.c_int),
+ ('tb_lineno', ctypes.c_int)
+ ]
+
+ def tb_set_next(tb, next):
+ """Set the tb_next attribute of a traceback object."""
+ if not (isinstance(tb, TracebackType) and
+ (next is None or isinstance(next, TracebackType))):
+ raise TypeError('tb_set_next arguments must be traceback objects')
+ obj = _Traceback.from_address(id(tb))
+ if tb.tb_next is not None:
+ old = _Traceback.from_address(id(tb.tb_next))
+ old.ob_refcnt -= 1
+ if next is None:
+ obj.tb_next = ctypes.POINTER(_Traceback)()
+ else:
+ next = _Traceback.from_address(id(next))
+ next.ob_refcnt += 1
+ obj.tb_next = ctypes.pointer(next)
+
+ return tb_set_next
+
+
+# try to get a tb_set_next implementation if we don't have transparent
+# proxies.
+tb_set_next = None
+if tproxy is None:
+ try:
+ tb_set_next = _init_ugly_crap()
+ except:
+ pass
+ del _init_ugly_crap
diff --git a/lib/spack/external/jinja2/defaults.py b/lib/spack/external/jinja2/defaults.py
new file mode 100644
index 0000000000..35903883cd
--- /dev/null
+++ b/lib/spack/external/jinja2/defaults.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.defaults
+ ~~~~~~~~~~~~~~~
+
+ Jinja default filters and tags.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+from jinja2._compat import range_type
+from jinja2.utils import generate_lorem_ipsum, Cycler, Joiner
+
+
+# defaults for the parser / lexer
+BLOCK_START_STRING = '{%'
+BLOCK_END_STRING = '%}'
+VARIABLE_START_STRING = '{{'
+VARIABLE_END_STRING = '}}'
+COMMENT_START_STRING = '{#'
+COMMENT_END_STRING = '#}'
+LINE_STATEMENT_PREFIX = None
+LINE_COMMENT_PREFIX = None
+TRIM_BLOCKS = False
+LSTRIP_BLOCKS = False
+NEWLINE_SEQUENCE = '\n'
+KEEP_TRAILING_NEWLINE = False
+
+
+# default filters, tests and namespace
+from jinja2.filters import FILTERS as DEFAULT_FILTERS
+from jinja2.tests import TESTS as DEFAULT_TESTS
+DEFAULT_NAMESPACE = {
+ 'range': range_type,
+ 'dict': dict,
+ 'lipsum': generate_lorem_ipsum,
+ 'cycler': Cycler,
+ 'joiner': Joiner
+}
+
+
+# default policies
+DEFAULT_POLICIES = {
+ 'compiler.ascii_str': True,
+ 'urlize.rel': 'noopener',
+ 'urlize.target': None,
+ 'truncate.leeway': 5,
+ 'json.dumps_function': None,
+ 'json.dumps_kwargs': {'sort_keys': True},
+}
+
+
+# export all constants
+__all__ = tuple(x for x in locals().keys() if x.isupper())
diff --git a/lib/spack/external/jinja2/environment.py b/lib/spack/external/jinja2/environment.py
new file mode 100644
index 0000000000..2a4d3d7da9
--- /dev/null
+++ b/lib/spack/external/jinja2/environment.py
@@ -0,0 +1,1276 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.environment
+ ~~~~~~~~~~~~~~~~~~
+
+ Provides a class that holds runtime and parsing time options.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import os
+import sys
+import weakref
+from functools import reduce, partial
+from jinja2 import nodes
+from jinja2.defaults import BLOCK_START_STRING, \
+ BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \
+ COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \
+ LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \
+ DEFAULT_FILTERS, DEFAULT_TESTS, DEFAULT_NAMESPACE, \
+ DEFAULT_POLICIES, KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS
+from jinja2.lexer import get_lexer, TokenStream
+from jinja2.parser import Parser
+from jinja2.nodes import EvalContext
+from jinja2.compiler import generate, CodeGenerator
+from jinja2.runtime import Undefined, new_context, Context
+from jinja2.exceptions import TemplateSyntaxError, TemplateNotFound, \
+ TemplatesNotFound, TemplateRuntimeError
+from jinja2.utils import import_string, LRUCache, Markup, missing, \
+ concat, consume, internalcode, have_async_gen
+from jinja2._compat import imap, ifilter, string_types, iteritems, \
+ text_type, reraise, implements_iterator, implements_to_string, \
+ encode_filename, PY2, PYPY
+
+
+# for direct template usage we have up to ten living environments
+_spontaneous_environments = LRUCache(10)
+
+# the function to create jinja traceback objects. This is dynamically
+# imported on the first exception in the exception handler.
+_make_traceback = None
+
+
+def get_spontaneous_environment(*args):
+ """Return a new spontaneous environment. A spontaneous environment is an
+ unnamed and unaccessible (in theory) environment that is used for
+ templates generated from a string and not from the file system.
+ """
+ try:
+ env = _spontaneous_environments.get(args)
+ except TypeError:
+ return Environment(*args)
+ if env is not None:
+ return env
+ _spontaneous_environments[args] = env = Environment(*args)
+ env.shared = True
+ return env
+
+
+def create_cache(size):
+ """Return the cache class for the given size."""
+ if size == 0:
+ return None
+ if size < 0:
+ return {}
+ return LRUCache(size)
+
+
+def copy_cache(cache):
+ """Create an empty copy of the given cache."""
+ if cache is None:
+ return None
+ elif type(cache) is dict:
+ return {}
+ return LRUCache(cache.capacity)
+
+
+def load_extensions(environment, extensions):
+ """Load the extensions from the list and bind it to the environment.
+ Returns a dict of instantiated environments.
+ """
+ result = {}
+ for extension in extensions:
+ if isinstance(extension, string_types):
+ extension = import_string(extension)
+ result[extension.identifier] = extension(environment)
+ return result
+
+
+def fail_for_missing_callable(string, name):
+ msg = string % name
+ if isinstance(name, Undefined):
+ try:
+ name._fail_with_undefined_error()
+ except Exception as e:
+ msg = '%s (%s; did you forget to quote the callable name?)' % (msg, e)
+ raise TemplateRuntimeError(msg)
+
+
+def _environment_sanity_check(environment):
+ """Perform a sanity check on the environment."""
+ assert issubclass(environment.undefined, Undefined), 'undefined must ' \
+ 'be a subclass of undefined because filters depend on it.'
+ assert environment.block_start_string != \
+ environment.variable_start_string != \
+ environment.comment_start_string, 'block, variable and comment ' \
+ 'start strings must be different'
+ assert environment.newline_sequence in ('\r', '\r\n', '\n'), \
+ 'newline_sequence set to unknown line ending string.'
+ return environment
+
+
+class Environment(object):
+ r"""The core component of Jinja is the `Environment`. It contains
+ important shared variables like configuration, filters, tests,
+ globals and others. Instances of this class may be modified if
+ they are not shared and if no template was loaded so far.
+ Modifications on environments after the first template was loaded
+ will lead to surprising effects and undefined behavior.
+
+ Here are the possible initialization parameters:
+
+ `block_start_string`
+ The string marking the beginning of a block. Defaults to ``'{%'``.
+
+ `block_end_string`
+ The string marking the end of a block. Defaults to ``'%}'``.
+
+ `variable_start_string`
+ The string marking the beginning of a print statement.
+ Defaults to ``'{{'``.
+
+ `variable_end_string`
+ The string marking the end of a print statement. Defaults to
+ ``'}}'``.
+
+ `comment_start_string`
+ The string marking the beginning of a comment. Defaults to ``'{#'``.
+
+ `comment_end_string`
+ The string marking the end of a comment. Defaults to ``'#}'``.
+
+ `line_statement_prefix`
+ If given and a string, this will be used as prefix for line based
+ statements. See also :ref:`line-statements`.
+
+ `line_comment_prefix`
+ If given and a string, this will be used as prefix for line based
+ comments. See also :ref:`line-statements`.
+
+ .. versionadded:: 2.2
+
+ `trim_blocks`
+ If this is set to ``True`` the first newline after a block is
+ removed (block, not variable tag!). Defaults to `False`.
+
+ `lstrip_blocks`
+ If this is set to ``True`` leading spaces and tabs are stripped
+ from the start of a line to a block. Defaults to `False`.
+
+ `newline_sequence`
+ The sequence that starts a newline. Must be one of ``'\r'``,
+ ``'\n'`` or ``'\r\n'``. The default is ``'\n'`` which is a
+ useful default for Linux and OS X systems as well as web
+ applications.
+
+ `keep_trailing_newline`
+ Preserve the trailing newline when rendering templates.
+ The default is ``False``, which causes a single newline,
+ if present, to be stripped from the end of the template.
+
+ .. versionadded:: 2.7
+
+ `extensions`
+ List of Jinja extensions to use. This can either be import paths
+ as strings or extension classes. For more information have a
+ look at :ref:`the extensions documentation <jinja-extensions>`.
+
+ `optimized`
+ should the optimizer be enabled? Default is ``True``.
+
+ `undefined`
+ :class:`Undefined` or a subclass of it that is used to represent
+ undefined values in the template.
+
+ `finalize`
+ A callable that can be used to process the result of a variable
+ expression before it is output. For example one can convert
+ ``None`` implicitly into an empty string here.
+
+ `autoescape`
+ If set to ``True`` the XML/HTML autoescaping feature is enabled by
+ default. For more details about autoescaping see
+ :class:`~jinja2.utils.Markup`. As of Jinja 2.4 this can also
+ be a callable that is passed the template name and has to
+ return ``True`` or ``False`` depending on autoescape should be
+ enabled by default.
+
+ .. versionchanged:: 2.4
+ `autoescape` can now be a function
+
+ `loader`
+ The template loader for this environment.
+
+ `cache_size`
+ The size of the cache. Per default this is ``400`` which means
+ that if more than 400 templates are loaded the loader will clean
+ out the least recently used template. If the cache size is set to
+ ``0`` templates are recompiled all the time, if the cache size is
+ ``-1`` the cache will not be cleaned.
+
+ .. versionchanged:: 2.8
+ The cache size was increased to 400 from a low 50.
+
+ `auto_reload`
+ Some loaders load templates from locations where the template
+ sources may change (ie: file system or database). If
+ ``auto_reload`` is set to ``True`` (default) every time a template is
+ requested the loader checks if the source changed and if yes, it
+ will reload the template. For higher performance it's possible to
+ disable that.
+
+ `bytecode_cache`
+ If set to a bytecode cache object, this object will provide a
+ cache for the internal Jinja bytecode so that templates don't
+ have to be parsed if they were not changed.
+
+ See :ref:`bytecode-cache` for more information.
+
+ `enable_async`
+ If set to true this enables async template execution which allows
+ you to take advantage of newer Python features. This requires
+ Python 3.6 or later.
+ """
+
+ #: if this environment is sandboxed. Modifying this variable won't make
+ #: the environment sandboxed though. For a real sandboxed environment
+ #: have a look at jinja2.sandbox. This flag alone controls the code
+ #: generation by the compiler.
+ sandboxed = False
+
+ #: True if the environment is just an overlay
+ overlayed = False
+
+ #: the environment this environment is linked to if it is an overlay
+ linked_to = None
+
+ #: shared environments have this set to `True`. A shared environment
+ #: must not be modified
+ shared = False
+
+ #: these are currently EXPERIMENTAL undocumented features.
+ exception_handler = None
+ exception_formatter = None
+
+ #: the class that is used for code generation. See
+ #: :class:`~jinja2.compiler.CodeGenerator` for more information.
+ code_generator_class = CodeGenerator
+
+ #: the context class thatis used for templates. See
+ #: :class:`~jinja2.runtime.Context` for more information.
+ context_class = Context
+
+ def __init__(self,
+ block_start_string=BLOCK_START_STRING,
+ block_end_string=BLOCK_END_STRING,
+ variable_start_string=VARIABLE_START_STRING,
+ variable_end_string=VARIABLE_END_STRING,
+ comment_start_string=COMMENT_START_STRING,
+ comment_end_string=COMMENT_END_STRING,
+ line_statement_prefix=LINE_STATEMENT_PREFIX,
+ line_comment_prefix=LINE_COMMENT_PREFIX,
+ trim_blocks=TRIM_BLOCKS,
+ lstrip_blocks=LSTRIP_BLOCKS,
+ newline_sequence=NEWLINE_SEQUENCE,
+ keep_trailing_newline=KEEP_TRAILING_NEWLINE,
+ extensions=(),
+ optimized=True,
+ undefined=Undefined,
+ finalize=None,
+ autoescape=False,
+ loader=None,
+ cache_size=400,
+ auto_reload=True,
+ bytecode_cache=None,
+ enable_async=False):
+ # !!Important notice!!
+ # The constructor accepts quite a few arguments that should be
+ # passed by keyword rather than position. However it's important to
+ # not change the order of arguments because it's used at least
+ # internally in those cases:
+ # - spontaneous environments (i18n extension and Template)
+ # - unittests
+ # If parameter changes are required only add parameters at the end
+ # and don't change the arguments (or the defaults!) of the arguments
+ # existing already.
+
+ # lexer / parser information
+ self.block_start_string = block_start_string
+ self.block_end_string = block_end_string
+ self.variable_start_string = variable_start_string
+ self.variable_end_string = variable_end_string
+ self.comment_start_string = comment_start_string
+ self.comment_end_string = comment_end_string
+ self.line_statement_prefix = line_statement_prefix
+ self.line_comment_prefix = line_comment_prefix
+ self.trim_blocks = trim_blocks
+ self.lstrip_blocks = lstrip_blocks
+ self.newline_sequence = newline_sequence
+ self.keep_trailing_newline = keep_trailing_newline
+
+ # runtime information
+ self.undefined = undefined
+ self.optimized = optimized
+ self.finalize = finalize
+ self.autoescape = autoescape
+
+ # defaults
+ self.filters = DEFAULT_FILTERS.copy()
+ self.tests = DEFAULT_TESTS.copy()
+ self.globals = DEFAULT_NAMESPACE.copy()
+
+ # set the loader provided
+ self.loader = loader
+ self.cache = create_cache(cache_size)
+ self.bytecode_cache = bytecode_cache
+ self.auto_reload = auto_reload
+
+ # configurable policies
+ self.policies = DEFAULT_POLICIES.copy()
+
+ # load extensions
+ self.extensions = load_extensions(self, extensions)
+
+ self.enable_async = enable_async
+ self.is_async = self.enable_async and have_async_gen
+
+ _environment_sanity_check(self)
+
+ def add_extension(self, extension):
+ """Adds an extension after the environment was created.
+
+ .. versionadded:: 2.5
+ """
+ self.extensions.update(load_extensions(self, [extension]))
+
+ def extend(self, **attributes):
+ """Add the items to the instance of the environment if they do not exist
+ yet. This is used by :ref:`extensions <writing-extensions>` to register
+ callbacks and configuration values without breaking inheritance.
+ """
+ for key, value in iteritems(attributes):
+ if not hasattr(self, key):
+ setattr(self, key, value)
+
+ def overlay(self, block_start_string=missing, block_end_string=missing,
+ variable_start_string=missing, variable_end_string=missing,
+ comment_start_string=missing, comment_end_string=missing,
+ line_statement_prefix=missing, line_comment_prefix=missing,
+ trim_blocks=missing, lstrip_blocks=missing,
+ extensions=missing, optimized=missing,
+ undefined=missing, finalize=missing, autoescape=missing,
+ loader=missing, cache_size=missing, auto_reload=missing,
+ bytecode_cache=missing):
+ """Create a new overlay environment that shares all the data with the
+ current environment except for cache and the overridden attributes.
+ Extensions cannot be removed for an overlayed environment. An overlayed
+ environment automatically gets all the extensions of the environment it
+ is linked to plus optional extra extensions.
+
+ Creating overlays should happen after the initial environment was set
+ up completely. Not all attributes are truly linked, some are just
+ copied over so modifications on the original environment may not shine
+ through.
+ """
+ args = dict(locals())
+ del args['self'], args['cache_size'], args['extensions']
+
+ rv = object.__new__(self.__class__)
+ rv.__dict__.update(self.__dict__)
+ rv.overlayed = True
+ rv.linked_to = self
+
+ for key, value in iteritems(args):
+ if value is not missing:
+ setattr(rv, key, value)
+
+ if cache_size is not missing:
+ rv.cache = create_cache(cache_size)
+ else:
+ rv.cache = copy_cache(self.cache)
+
+ rv.extensions = {}
+ for key, value in iteritems(self.extensions):
+ rv.extensions[key] = value.bind(rv)
+ if extensions is not missing:
+ rv.extensions.update(load_extensions(rv, extensions))
+
+ return _environment_sanity_check(rv)
+
+ lexer = property(get_lexer, doc="The lexer for this environment.")
+
+ def iter_extensions(self):
+ """Iterates over the extensions by priority."""
+ return iter(sorted(self.extensions.values(),
+ key=lambda x: x.priority))
+
+ def getitem(self, obj, argument):
+ """Get an item or attribute of an object but prefer the item."""
+ try:
+ return obj[argument]
+ except (AttributeError, TypeError, LookupError):
+ if isinstance(argument, string_types):
+ try:
+ attr = str(argument)
+ except Exception:
+ pass
+ else:
+ try:
+ return getattr(obj, attr)
+ except AttributeError:
+ pass
+ return self.undefined(obj=obj, name=argument)
+
+ def getattr(self, obj, attribute):
+ """Get an item or attribute of an object but prefer the attribute.
+ Unlike :meth:`getitem` the attribute *must* be a bytestring.
+ """
+ try:
+ return getattr(obj, attribute)
+ except AttributeError:
+ pass
+ try:
+ return obj[attribute]
+ except (TypeError, LookupError, AttributeError):
+ return self.undefined(obj=obj, name=attribute)
+
+ def call_filter(self, name, value, args=None, kwargs=None,
+ context=None, eval_ctx=None):
+ """Invokes a filter on a value the same way the compiler does it.
+
+ Note that on Python 3 this might return a coroutine in case the
+ filter is running from an environment in async mode and the filter
+ supports async execution. It's your responsibility to await this
+ if needed.
+
+ .. versionadded:: 2.7
+ """
+ func = self.filters.get(name)
+ if func is None:
+ fail_for_missing_callable('no filter named %r', name)
+ args = [value] + list(args or ())
+ if getattr(func, 'contextfilter', False):
+ if context is None:
+ raise TemplateRuntimeError('Attempted to invoke context '
+ 'filter without context')
+ args.insert(0, context)
+ elif getattr(func, 'evalcontextfilter', False):
+ if eval_ctx is None:
+ if context is not None:
+ eval_ctx = context.eval_ctx
+ else:
+ eval_ctx = EvalContext(self)
+ args.insert(0, eval_ctx)
+ elif getattr(func, 'environmentfilter', False):
+ args.insert(0, self)
+ return func(*args, **(kwargs or {}))
+
+ def call_test(self, name, value, args=None, kwargs=None):
+ """Invokes a test on a value the same way the compiler does it.
+
+ .. versionadded:: 2.7
+ """
+ func = self.tests.get(name)
+ if func is None:
+ fail_for_missing_callable('no test named %r', name)
+ return func(value, *(args or ()), **(kwargs or {}))
+
+ @internalcode
+ def parse(self, source, name=None, filename=None):
+ """Parse the sourcecode and return the abstract syntax tree. This
+ tree of nodes is used by the compiler to convert the template into
+ executable source- or bytecode. This is useful for debugging or to
+ extract information from templates.
+
+ If you are :ref:`developing Jinja2 extensions <writing-extensions>`
+ this gives you a good overview of the node tree generated.
+ """
+ try:
+ return self._parse(source, name, filename)
+ except TemplateSyntaxError:
+ exc_info = sys.exc_info()
+ self.handle_exception(exc_info, source_hint=source)
+
+ def _parse(self, source, name, filename):
+ """Internal parsing function used by `parse` and `compile`."""
+ return Parser(self, source, name, encode_filename(filename)).parse()
+
+ def lex(self, source, name=None, filename=None):
+ """Lex the given sourcecode and return a generator that yields
+ tokens as tuples in the form ``(lineno, token_type, value)``.
+ This can be useful for :ref:`extension development <writing-extensions>`
+ and debugging templates.
+
+ This does not perform preprocessing. If you want the preprocessing
+ of the extensions to be applied you have to filter source through
+ the :meth:`preprocess` method.
+ """
+ source = text_type(source)
+ try:
+ return self.lexer.tokeniter(source, name, filename)
+ except TemplateSyntaxError:
+ exc_info = sys.exc_info()
+ self.handle_exception(exc_info, source_hint=source)
+
+ def preprocess(self, source, name=None, filename=None):
+ """Preprocesses the source with all extensions. This is automatically
+ called for all parsing and compiling methods but *not* for :meth:`lex`
+ because there you usually only want the actual source tokenized.
+ """
+ return reduce(lambda s, e: e.preprocess(s, name, filename),
+ self.iter_extensions(), text_type(source))
+
+ def _tokenize(self, source, name, filename=None, state=None):
+ """Called by the parser to do the preprocessing and filtering
+ for all the extensions. Returns a :class:`~jinja2.lexer.TokenStream`.
+ """
+ source = self.preprocess(source, name, filename)
+ stream = self.lexer.tokenize(source, name, filename, state)
+ for ext in self.iter_extensions():
+ stream = ext.filter_stream(stream)
+ if not isinstance(stream, TokenStream):
+ stream = TokenStream(stream, name, filename)
+ return stream
+
+ def _generate(self, source, name, filename, defer_init=False):
+ """Internal hook that can be overridden to hook a different generate
+ method in.
+
+ .. versionadded:: 2.5
+ """
+ return generate(source, self, name, filename, defer_init=defer_init,
+ optimized=self.optimized)
+
+ def _compile(self, source, filename):
+ """Internal hook that can be overridden to hook a different compile
+ method in.
+
+ .. versionadded:: 2.5
+ """
+ return compile(source, filename, 'exec')
+
+ @internalcode
+ def compile(self, source, name=None, filename=None, raw=False,
+ defer_init=False):
+ """Compile a node or template source code. The `name` parameter is
+ the load name of the template after it was joined using
+ :meth:`join_path` if necessary, not the filename on the file system.
+ the `filename` parameter is the estimated filename of the template on
+ the file system. If the template came from a database or memory this
+ can be omitted.
+
+ The return value of this method is a python code object. If the `raw`
+ parameter is `True` the return value will be a string with python
+ code equivalent to the bytecode returned otherwise. This method is
+ mainly used internally.
+
+ `defer_init` is use internally to aid the module code generator. This
+ causes the generated code to be able to import without the global
+ environment variable to be set.
+
+ .. versionadded:: 2.4
+ `defer_init` parameter added.
+ """
+ source_hint = None
+ try:
+ if isinstance(source, string_types):
+ source_hint = source
+ source = self._parse(source, name, filename)
+ source = self._generate(source, name, filename,
+ defer_init=defer_init)
+ if raw:
+ return source
+ if filename is None:
+ filename = '<template>'
+ else:
+ filename = encode_filename(filename)
+ return self._compile(source, filename)
+ except TemplateSyntaxError:
+ exc_info = sys.exc_info()
+ self.handle_exception(exc_info, source_hint=source_hint)
+
+ def compile_expression(self, source, undefined_to_none=True):
+ """A handy helper method that returns a callable that accepts keyword
+ arguments that appear as variables in the expression. If called it
+ returns the result of the expression.
+
+ This is useful if applications want to use the same rules as Jinja
+ in template "configuration files" or similar situations.
+
+ Example usage:
+
+ >>> env = Environment()
+ >>> expr = env.compile_expression('foo == 42')
+ >>> expr(foo=23)
+ False
+ >>> expr(foo=42)
+ True
+
+ Per default the return value is converted to `None` if the
+ expression returns an undefined value. This can be changed
+ by setting `undefined_to_none` to `False`.
+
+ >>> env.compile_expression('var')() is None
+ True
+ >>> env.compile_expression('var', undefined_to_none=False)()
+ Undefined
+
+ .. versionadded:: 2.1
+ """
+ parser = Parser(self, source, state='variable')
+ exc_info = None
+ try:
+ expr = parser.parse_expression()
+ if not parser.stream.eos:
+ raise TemplateSyntaxError('chunk after expression',
+ parser.stream.current.lineno,
+ None, None)
+ expr.set_environment(self)
+ except TemplateSyntaxError:
+ exc_info = sys.exc_info()
+ if exc_info is not None:
+ self.handle_exception(exc_info, source_hint=source)
+ body = [nodes.Assign(nodes.Name('result', 'store'), expr, lineno=1)]
+ template = self.from_string(nodes.Template(body, lineno=1))
+ return TemplateExpression(template, undefined_to_none)
+
+ def compile_templates(self, target, extensions=None, filter_func=None,
+ zip='deflated', log_function=None,
+ ignore_errors=True, py_compile=False):
+ """Finds all the templates the loader can find, compiles them
+ and stores them in `target`. If `zip` is `None`, instead of in a
+ zipfile, the templates will be stored in a directory.
+ By default a deflate zip algorithm is used. To switch to
+ the stored algorithm, `zip` can be set to ``'stored'``.
+
+ `extensions` and `filter_func` are passed to :meth:`list_templates`.
+ Each template returned will be compiled to the target folder or
+ zipfile.
+
+ By default template compilation errors are ignored. In case a
+ log function is provided, errors are logged. If you want template
+ syntax errors to abort the compilation you can set `ignore_errors`
+ to `False` and you will get an exception on syntax errors.
+
+ If `py_compile` is set to `True` .pyc files will be written to the
+ target instead of standard .py files. This flag does not do anything
+ on pypy and Python 3 where pyc files are not picked up by itself and
+ don't give much benefit.
+
+ .. versionadded:: 2.4
+ """
+ from jinja2.loaders import ModuleLoader
+
+ if log_function is None:
+ log_function = lambda x: None
+
+ if py_compile:
+ if not PY2 or PYPY:
+ from warnings import warn
+ warn(Warning('py_compile has no effect on pypy or Python 3'))
+ py_compile = False
+ else:
+ import imp
+ import marshal
+ py_header = imp.get_magic() + \
+ u'\xff\xff\xff\xff'.encode('iso-8859-15')
+
+ # Python 3.3 added a source filesize to the header
+ if sys.version_info >= (3, 3):
+ py_header += u'\x00\x00\x00\x00'.encode('iso-8859-15')
+
+ def write_file(filename, data, mode):
+ if zip:
+ info = ZipInfo(filename)
+ info.external_attr = 0o755 << 16
+ zip_file.writestr(info, data)
+ else:
+ f = open(os.path.join(target, filename), mode)
+ try:
+ f.write(data)
+ finally:
+ f.close()
+
+ if zip is not None:
+ from zipfile import ZipFile, ZipInfo, ZIP_DEFLATED, ZIP_STORED
+ zip_file = ZipFile(target, 'w', dict(deflated=ZIP_DEFLATED,
+ stored=ZIP_STORED)[zip])
+ log_function('Compiling into Zip archive "%s"' % target)
+ else:
+ if not os.path.isdir(target):
+ os.makedirs(target)
+ log_function('Compiling into folder "%s"' % target)
+
+ try:
+ for name in self.list_templates(extensions, filter_func):
+ source, filename, _ = self.loader.get_source(self, name)
+ try:
+ code = self.compile(source, name, filename, True, True)
+ except TemplateSyntaxError as e:
+ if not ignore_errors:
+ raise
+ log_function('Could not compile "%s": %s' % (name, e))
+ continue
+
+ filename = ModuleLoader.get_module_filename(name)
+
+ if py_compile:
+ c = self._compile(code, encode_filename(filename))
+ write_file(filename + 'c', py_header +
+ marshal.dumps(c), 'wb')
+ log_function('Byte-compiled "%s" as %s' %
+ (name, filename + 'c'))
+ else:
+ write_file(filename, code, 'w')
+ log_function('Compiled "%s" as %s' % (name, filename))
+ finally:
+ if zip:
+ zip_file.close()
+
+ log_function('Finished compiling templates')
+
+ def list_templates(self, extensions=None, filter_func=None):
+ """Returns a list of templates for this environment. This requires
+ that the loader supports the loader's
+ :meth:`~BaseLoader.list_templates` method.
+
+ If there are other files in the template folder besides the
+ actual templates, the returned list can be filtered. There are two
+ ways: either `extensions` is set to a list of file extensions for
+ templates, or a `filter_func` can be provided which is a callable that
+ is passed a template name and should return `True` if it should end up
+ in the result list.
+
+ If the loader does not support that, a :exc:`TypeError` is raised.
+
+ .. versionadded:: 2.4
+ """
+ x = self.loader.list_templates()
+ if extensions is not None:
+ if filter_func is not None:
+ raise TypeError('either extensions or filter_func '
+ 'can be passed, but not both')
+ filter_func = lambda x: '.' in x and \
+ x.rsplit('.', 1)[1] in extensions
+ if filter_func is not None:
+ x = list(ifilter(filter_func, x))
+ return x
+
+ def handle_exception(self, exc_info=None, rendered=False, source_hint=None):
+ """Exception handling helper. This is used internally to either raise
+ rewritten exceptions or return a rendered traceback for the template.
+ """
+ global _make_traceback
+ if exc_info is None:
+ exc_info = sys.exc_info()
+
+ # the debugging module is imported when it's used for the first time.
+ # we're doing a lot of stuff there and for applications that do not
+ # get any exceptions in template rendering there is no need to load
+ # all of that.
+ if _make_traceback is None:
+ from jinja2.debug import make_traceback as _make_traceback
+ traceback = _make_traceback(exc_info, source_hint)
+ if rendered and self.exception_formatter is not None:
+ return self.exception_formatter(traceback)
+ if self.exception_handler is not None:
+ self.exception_handler(traceback)
+ exc_type, exc_value, tb = traceback.standard_exc_info
+ reraise(exc_type, exc_value, tb)
+
+ def join_path(self, template, parent):
+ """Join a template with the parent. By default all the lookups are
+ relative to the loader root so this method returns the `template`
+ parameter unchanged, but if the paths should be relative to the
+ parent template, this function can be used to calculate the real
+ template name.
+
+ Subclasses may override this method and implement template path
+ joining here.
+ """
+ return template
+
+ @internalcode
+ def _load_template(self, name, globals):
+ if self.loader is None:
+ raise TypeError('no loader for this environment specified')
+ cache_key = (weakref.ref(self.loader), name)
+ if self.cache is not None:
+ template = self.cache.get(cache_key)
+ if template is not None and (not self.auto_reload or
+ template.is_up_to_date):
+ return template
+ template = self.loader.load(self, name, globals)
+ if self.cache is not None:
+ self.cache[cache_key] = template
+ return template
+
+ @internalcode
+ def get_template(self, name, parent=None, globals=None):
+ """Load a template from the loader. If a loader is configured this
+ method ask the loader for the template and returns a :class:`Template`.
+ If the `parent` parameter is not `None`, :meth:`join_path` is called
+ to get the real template name before loading.
+
+ The `globals` parameter can be used to provide template wide globals.
+ These variables are available in the context at render time.
+
+ If the template does not exist a :exc:`TemplateNotFound` exception is
+ raised.
+
+ .. versionchanged:: 2.4
+ If `name` is a :class:`Template` object it is returned from the
+ function unchanged.
+ """
+ if isinstance(name, Template):
+ return name
+ if parent is not None:
+ name = self.join_path(name, parent)
+ return self._load_template(name, self.make_globals(globals))
+
+ @internalcode
+ def select_template(self, names, parent=None, globals=None):
+ """Works like :meth:`get_template` but tries a number of templates
+ before it fails. If it cannot find any of the templates, it will
+ raise a :exc:`TemplatesNotFound` exception.
+
+ .. versionadded:: 2.3
+
+ .. versionchanged:: 2.4
+ If `names` contains a :class:`Template` object it is returned
+ from the function unchanged.
+ """
+ if not names:
+ raise TemplatesNotFound(message=u'Tried to select from an empty list '
+ u'of templates.')
+ globals = self.make_globals(globals)
+ for name in names:
+ if isinstance(name, Template):
+ return name
+ if parent is not None:
+ name = self.join_path(name, parent)
+ try:
+ return self._load_template(name, globals)
+ except TemplateNotFound:
+ pass
+ raise TemplatesNotFound(names)
+
+ @internalcode
+ def get_or_select_template(self, template_name_or_list,
+ parent=None, globals=None):
+ """Does a typecheck and dispatches to :meth:`select_template`
+ if an iterable of template names is given, otherwise to
+ :meth:`get_template`.
+
+ .. versionadded:: 2.3
+ """
+ if isinstance(template_name_or_list, string_types):
+ return self.get_template(template_name_or_list, parent, globals)
+ elif isinstance(template_name_or_list, Template):
+ return template_name_or_list
+ return self.select_template(template_name_or_list, parent, globals)
+
+ def from_string(self, source, globals=None, template_class=None):
+ """Load a template from a string. This parses the source given and
+ returns a :class:`Template` object.
+ """
+ globals = self.make_globals(globals)
+ cls = template_class or self.template_class
+ return cls.from_code(self, self.compile(source), globals, None)
+
+ def make_globals(self, d):
+ """Return a dict for the globals."""
+ if not d:
+ return self.globals
+ return dict(self.globals, **d)
+
+
+class Template(object):
+ """The central template object. This class represents a compiled template
+ and is used to evaluate it.
+
+ Normally the template object is generated from an :class:`Environment` but
+ it also has a constructor that makes it possible to create a template
+ instance directly using the constructor. It takes the same arguments as
+ the environment constructor but it's not possible to specify a loader.
+
+ Every template object has a few methods and members that are guaranteed
+ to exist. However it's important that a template object should be
+ considered immutable. Modifications on the object are not supported.
+
+ Template objects created from the constructor rather than an environment
+ do have an `environment` attribute that points to a temporary environment
+ that is probably shared with other templates created with the constructor
+ and compatible settings.
+
+ >>> template = Template('Hello {{ name }}!')
+ >>> template.render(name='John Doe') == u'Hello John Doe!'
+ True
+ >>> stream = template.stream(name='John Doe')
+ >>> next(stream) == u'Hello John Doe!'
+ True
+ >>> next(stream)
+ Traceback (most recent call last):
+ ...
+ StopIteration
+ """
+
+ def __new__(cls, source,
+ block_start_string=BLOCK_START_STRING,
+ block_end_string=BLOCK_END_STRING,
+ variable_start_string=VARIABLE_START_STRING,
+ variable_end_string=VARIABLE_END_STRING,
+ comment_start_string=COMMENT_START_STRING,
+ comment_end_string=COMMENT_END_STRING,
+ line_statement_prefix=LINE_STATEMENT_PREFIX,
+ line_comment_prefix=LINE_COMMENT_PREFIX,
+ trim_blocks=TRIM_BLOCKS,
+ lstrip_blocks=LSTRIP_BLOCKS,
+ newline_sequence=NEWLINE_SEQUENCE,
+ keep_trailing_newline=KEEP_TRAILING_NEWLINE,
+ extensions=(),
+ optimized=True,
+ undefined=Undefined,
+ finalize=None,
+ autoescape=False,
+ enable_async=False):
+ env = get_spontaneous_environment(
+ block_start_string, block_end_string, variable_start_string,
+ variable_end_string, comment_start_string, comment_end_string,
+ line_statement_prefix, line_comment_prefix, trim_blocks,
+ lstrip_blocks, newline_sequence, keep_trailing_newline,
+ frozenset(extensions), optimized, undefined, finalize, autoescape,
+ None, 0, False, None, enable_async)
+ return env.from_string(source, template_class=cls)
+
+ @classmethod
+ def from_code(cls, environment, code, globals, uptodate=None):
+ """Creates a template object from compiled code and the globals. This
+ is used by the loaders and environment to create a template object.
+ """
+ namespace = {
+ 'environment': environment,
+ '__file__': code.co_filename
+ }
+ exec(code, namespace)
+ rv = cls._from_namespace(environment, namespace, globals)
+ rv._uptodate = uptodate
+ return rv
+
+ @classmethod
+ def from_module_dict(cls, environment, module_dict, globals):
+ """Creates a template object from a module. This is used by the
+ module loader to create a template object.
+
+ .. versionadded:: 2.4
+ """
+ return cls._from_namespace(environment, module_dict, globals)
+
+ @classmethod
+ def _from_namespace(cls, environment, namespace, globals):
+ t = object.__new__(cls)
+ t.environment = environment
+ t.globals = globals
+ t.name = namespace['name']
+ t.filename = namespace['__file__']
+ t.blocks = namespace['blocks']
+
+ # render function and module
+ t.root_render_func = namespace['root']
+ t._module = None
+
+ # debug and loader helpers
+ t._debug_info = namespace['debug_info']
+ t._uptodate = None
+
+ # store the reference
+ namespace['environment'] = environment
+ namespace['__jinja_template__'] = t
+
+ return t
+
+ def render(self, *args, **kwargs):
+ """This method accepts the same arguments as the `dict` constructor:
+ A dict, a dict subclass or some keyword arguments. If no arguments
+ are given the context will be empty. These two calls do the same::
+
+ template.render(knights='that say nih')
+ template.render({'knights': 'that say nih'})
+
+ This will return the rendered template as unicode string.
+ """
+ vars = dict(*args, **kwargs)
+ try:
+ return concat(self.root_render_func(self.new_context(vars)))
+ except Exception:
+ exc_info = sys.exc_info()
+ return self.environment.handle_exception(exc_info, True)
+
+ def render_async(self, *args, **kwargs):
+ """This works similar to :meth:`render` but returns a coroutine
+ that when awaited returns the entire rendered template string. This
+ requires the async feature to be enabled.
+
+ Example usage::
+
+ await template.render_async(knights='that say nih; asynchronously')
+ """
+ # see asyncsupport for the actual implementation
+ raise NotImplementedError('This feature is not available for this '
+ 'version of Python')
+
+ def stream(self, *args, **kwargs):
+ """Works exactly like :meth:`generate` but returns a
+ :class:`TemplateStream`.
+ """
+ return TemplateStream(self.generate(*args, **kwargs))
+
+ def generate(self, *args, **kwargs):
+ """For very large templates it can be useful to not render the whole
+ template at once but evaluate each statement after another and yield
+ piece for piece. This method basically does exactly that and returns
+ a generator that yields one item after another as unicode strings.
+
+ It accepts the same arguments as :meth:`render`.
+ """
+ vars = dict(*args, **kwargs)
+ try:
+ for event in self.root_render_func(self.new_context(vars)):
+ yield event
+ except Exception:
+ exc_info = sys.exc_info()
+ else:
+ return
+ yield self.environment.handle_exception(exc_info, True)
+
+ def generate_async(self, *args, **kwargs):
+ """An async version of :meth:`generate`. Works very similarly but
+ returns an async iterator instead.
+ """
+ # see asyncsupport for the actual implementation
+ raise NotImplementedError('This feature is not available for this '
+ 'version of Python')
+
+ def new_context(self, vars=None, shared=False, locals=None):
+ """Create a new :class:`Context` for this template. The vars
+ provided will be passed to the template. Per default the globals
+ are added to the context. If shared is set to `True` the data
+ is passed as it to the context without adding the globals.
+
+ `locals` can be a dict of local variables for internal usage.
+ """
+ return new_context(self.environment, self.name, self.blocks,
+ vars, shared, self.globals, locals)
+
+ def make_module(self, vars=None, shared=False, locals=None):
+ """This method works like the :attr:`module` attribute when called
+ without arguments but it will evaluate the template on every call
+ rather than caching it. It's also possible to provide
+ a dict which is then used as context. The arguments are the same
+ as for the :meth:`new_context` method.
+ """
+ return TemplateModule(self, self.new_context(vars, shared, locals))
+
+ def make_module_async(self, vars=None, shared=False, locals=None):
+ """As template module creation can invoke template code for
+ asynchronous exections this method must be used instead of the
+ normal :meth:`make_module` one. Likewise the module attribute
+ becomes unavailable in async mode.
+ """
+ # see asyncsupport for the actual implementation
+ raise NotImplementedError('This feature is not available for this '
+ 'version of Python')
+
+ @internalcode
+ def _get_default_module(self):
+ if self._module is not None:
+ return self._module
+ self._module = rv = self.make_module()
+ return rv
+
+ @property
+ def module(self):
+ """The template as module. This is used for imports in the
+ template runtime but is also useful if one wants to access
+ exported template variables from the Python layer:
+
+ >>> t = Template('{% macro foo() %}42{% endmacro %}23')
+ >>> str(t.module)
+ '23'
+ >>> t.module.foo() == u'42'
+ True
+
+ This attribute is not available if async mode is enabled.
+ """
+ return self._get_default_module()
+
+ def get_corresponding_lineno(self, lineno):
+ """Return the source line number of a line number in the
+ generated bytecode as they are not in sync.
+ """
+ for template_line, code_line in reversed(self.debug_info):
+ if code_line <= lineno:
+ return template_line
+ return 1
+
+ @property
+ def is_up_to_date(self):
+ """If this variable is `False` there is a newer version available."""
+ if self._uptodate is None:
+ return True
+ return self._uptodate()
+
+ @property
+ def debug_info(self):
+ """The debug info mapping."""
+ return [tuple(imap(int, x.split('='))) for x in
+ self._debug_info.split('&')]
+
+ def __repr__(self):
+ if self.name is None:
+ name = 'memory:%x' % id(self)
+ else:
+ name = repr(self.name)
+ return '<%s %s>' % (self.__class__.__name__, name)
+
+
+@implements_to_string
+class TemplateModule(object):
+ """Represents an imported template. All the exported names of the
+ template are available as attributes on this object. Additionally
+ converting it into an unicode- or bytestrings renders the contents.
+ """
+
+ def __init__(self, template, context, body_stream=None):
+ if body_stream is None:
+ if context.environment.is_async:
+ raise RuntimeError('Async mode requires a body stream '
+ 'to be passed to a template module. Use '
+ 'the async methods of the API you are '
+ 'using.')
+ body_stream = list(template.root_render_func(context))
+ self._body_stream = body_stream
+ self.__dict__.update(context.get_exported())
+ self.__name__ = template.name
+
+ def __html__(self):
+ return Markup(concat(self._body_stream))
+
+ def __str__(self):
+ return concat(self._body_stream)
+
+ def __repr__(self):
+ if self.__name__ is None:
+ name = 'memory:%x' % id(self)
+ else:
+ name = repr(self.__name__)
+ return '<%s %s>' % (self.__class__.__name__, name)
+
+
+class TemplateExpression(object):
+ """The :meth:`jinja2.Environment.compile_expression` method returns an
+ instance of this object. It encapsulates the expression-like access
+ to the template with an expression it wraps.
+ """
+
+ def __init__(self, template, undefined_to_none):
+ self._template = template
+ self._undefined_to_none = undefined_to_none
+
+ def __call__(self, *args, **kwargs):
+ context = self._template.new_context(dict(*args, **kwargs))
+ consume(self._template.root_render_func(context))
+ rv = context.vars['result']
+ if self._undefined_to_none and isinstance(rv, Undefined):
+ rv = None
+ return rv
+
+
+@implements_iterator
+class TemplateStream(object):
+ """A template stream works pretty much like an ordinary python generator
+ but it can buffer multiple items to reduce the number of total iterations.
+ Per default the output is unbuffered which means that for every unbuffered
+ instruction in the template one unicode string is yielded.
+
+ If buffering is enabled with a buffer size of 5, five items are combined
+ into a new unicode string. This is mainly useful if you are streaming
+ big templates to a client via WSGI which flushes after each iteration.
+ """
+
+ def __init__(self, gen):
+ self._gen = gen
+ self.disable_buffering()
+
+ def dump(self, fp, encoding=None, errors='strict'):
+ """Dump the complete stream into a file or file-like object.
+ Per default unicode strings are written, if you want to encode
+ before writing specify an `encoding`.
+
+ Example usage::
+
+ Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
+ """
+ close = False
+ if isinstance(fp, string_types):
+ if encoding is None:
+ encoding = 'utf-8'
+ fp = open(fp, 'wb')
+ close = True
+ try:
+ if encoding is not None:
+ iterable = (x.encode(encoding, errors) for x in self)
+ else:
+ iterable = self
+ if hasattr(fp, 'writelines'):
+ fp.writelines(iterable)
+ else:
+ for item in iterable:
+ fp.write(item)
+ finally:
+ if close:
+ fp.close()
+
+ def disable_buffering(self):
+ """Disable the output buffering."""
+ self._next = partial(next, self._gen)
+ self.buffered = False
+
+ def _buffered_generator(self, size):
+ buf = []
+ c_size = 0
+ push = buf.append
+
+ while 1:
+ try:
+ while c_size < size:
+ c = next(self._gen)
+ push(c)
+ if c:
+ c_size += 1
+ except StopIteration:
+ if not c_size:
+ return
+ yield concat(buf)
+ del buf[:]
+ c_size = 0
+
+ def enable_buffering(self, size=5):
+ """Enable buffering. Buffer `size` items before yielding them."""
+ if size <= 1:
+ raise ValueError('buffer size too small')
+
+ self.buffered = True
+ self._next = partial(next, self._buffered_generator(size))
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ return self._next()
+
+
+# hook in default template class. if anyone reads this comment: ignore that
+# it's possible to use custom templates ;-)
+Environment.template_class = Template
diff --git a/lib/spack/external/jinja2/exceptions.py b/lib/spack/external/jinja2/exceptions.py
new file mode 100644
index 0000000000..c018a33e32
--- /dev/null
+++ b/lib/spack/external/jinja2/exceptions.py
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.exceptions
+ ~~~~~~~~~~~~~~~~~
+
+ Jinja exceptions.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+from jinja2._compat import imap, text_type, PY2, implements_to_string
+
+
+class TemplateError(Exception):
+ """Baseclass for all template errors."""
+
+ if PY2:
+ def __init__(self, message=None):
+ if message is not None:
+ message = text_type(message).encode('utf-8')
+ Exception.__init__(self, message)
+
+ @property
+ def message(self):
+ if self.args:
+ message = self.args[0]
+ if message is not None:
+ return message.decode('utf-8', 'replace')
+
+ def __unicode__(self):
+ return self.message or u''
+ else:
+ def __init__(self, message=None):
+ Exception.__init__(self, message)
+
+ @property
+ def message(self):
+ if self.args:
+ message = self.args[0]
+ if message is not None:
+ return message
+
+
+@implements_to_string
+class TemplateNotFound(IOError, LookupError, TemplateError):
+ """Raised if a template does not exist."""
+
+ # looks weird, but removes the warning descriptor that just
+ # bogusly warns us about message being deprecated
+ message = None
+
+ def __init__(self, name, message=None):
+ IOError.__init__(self)
+ if message is None:
+ message = name
+ self.message = message
+ self.name = name
+ self.templates = [name]
+
+ def __str__(self):
+ return self.message
+
+
+class TemplatesNotFound(TemplateNotFound):
+ """Like :class:`TemplateNotFound` but raised if multiple templates
+ are selected. This is a subclass of :class:`TemplateNotFound`
+ exception, so just catching the base exception will catch both.
+
+ .. versionadded:: 2.2
+ """
+
+ def __init__(self, names=(), message=None):
+ if message is None:
+ message = u'none of the templates given were found: ' + \
+ u', '.join(imap(text_type, names))
+ TemplateNotFound.__init__(self, names and names[-1] or None, message)
+ self.templates = list(names)
+
+
+@implements_to_string
+class TemplateSyntaxError(TemplateError):
+ """Raised to tell the user that there is a problem with the template."""
+
+ def __init__(self, message, lineno, name=None, filename=None):
+ TemplateError.__init__(self, message)
+ self.lineno = lineno
+ self.name = name
+ self.filename = filename
+ self.source = None
+
+ # this is set to True if the debug.translate_syntax_error
+ # function translated the syntax error into a new traceback
+ self.translated = False
+
+ def __str__(self):
+ # for translated errors we only return the message
+ if self.translated:
+ return self.message
+
+ # otherwise attach some stuff
+ location = 'line %d' % self.lineno
+ name = self.filename or self.name
+ if name:
+ location = 'File "%s", %s' % (name, location)
+ lines = [self.message, ' ' + location]
+
+ # if the source is set, add the line to the output
+ if self.source is not None:
+ try:
+ line = self.source.splitlines()[self.lineno - 1]
+ except IndexError:
+ line = None
+ if line:
+ lines.append(' ' + line.strip())
+
+ return u'\n'.join(lines)
+
+
+class TemplateAssertionError(TemplateSyntaxError):
+ """Like a template syntax error, but covers cases where something in the
+ template caused an error at compile time that wasn't necessarily caused
+ by a syntax error. However it's a direct subclass of
+ :exc:`TemplateSyntaxError` and has the same attributes.
+ """
+
+
+class TemplateRuntimeError(TemplateError):
+ """A generic runtime error in the template engine. Under some situations
+ Jinja may raise this exception.
+ """
+
+
+class UndefinedError(TemplateRuntimeError):
+ """Raised if a template tries to operate on :class:`Undefined`."""
+
+
+class SecurityError(TemplateRuntimeError):
+ """Raised if a template tries to do something insecure if the
+ sandbox is enabled.
+ """
+
+
+class FilterArgumentError(TemplateRuntimeError):
+ """This error is raised if a filter was called with inappropriate
+ arguments
+ """
diff --git a/lib/spack/external/jinja2/ext.py b/lib/spack/external/jinja2/ext.py
new file mode 100644
index 0000000000..75e1f3b625
--- /dev/null
+++ b/lib/spack/external/jinja2/ext.py
@@ -0,0 +1,609 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.ext
+ ~~~~~~~~~~
+
+ Jinja extensions allow to add custom tags similar to the way django custom
+ tags work. By default two example extensions exist: an i18n and a cache
+ extension.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+from jinja2 import nodes
+from jinja2.defaults import BLOCK_START_STRING, \
+ BLOCK_END_STRING, VARIABLE_START_STRING, VARIABLE_END_STRING, \
+ COMMENT_START_STRING, COMMENT_END_STRING, LINE_STATEMENT_PREFIX, \
+ LINE_COMMENT_PREFIX, TRIM_BLOCKS, NEWLINE_SEQUENCE, \
+ KEEP_TRAILING_NEWLINE, LSTRIP_BLOCKS
+from jinja2.environment import Environment
+from jinja2.runtime import concat
+from jinja2.exceptions import TemplateAssertionError, TemplateSyntaxError
+from jinja2.utils import contextfunction, import_string, Markup
+from jinja2._compat import with_metaclass, string_types, iteritems
+
+
+# the only real useful gettext functions for a Jinja template. Note
+# that ugettext must be assigned to gettext as Jinja doesn't support
+# non unicode strings.
+GETTEXT_FUNCTIONS = ('_', 'gettext', 'ngettext')
+
+
+class ExtensionRegistry(type):
+ """Gives the extension an unique identifier."""
+
+ def __new__(cls, name, bases, d):
+ rv = type.__new__(cls, name, bases, d)
+ rv.identifier = rv.__module__ + '.' + rv.__name__
+ return rv
+
+
+class Extension(with_metaclass(ExtensionRegistry, object)):
+ """Extensions can be used to add extra functionality to the Jinja template
+ system at the parser level. Custom extensions are bound to an environment
+ but may not store environment specific data on `self`. The reason for
+ this is that an extension can be bound to another environment (for
+ overlays) by creating a copy and reassigning the `environment` attribute.
+
+ As extensions are created by the environment they cannot accept any
+ arguments for configuration. One may want to work around that by using
+ a factory function, but that is not possible as extensions are identified
+ by their import name. The correct way to configure the extension is
+ storing the configuration values on the environment. Because this way the
+ environment ends up acting as central configuration storage the
+ attributes may clash which is why extensions have to ensure that the names
+ they choose for configuration are not too generic. ``prefix`` for example
+ is a terrible name, ``fragment_cache_prefix`` on the other hand is a good
+ name as includes the name of the extension (fragment cache).
+ """
+
+ #: if this extension parses this is the list of tags it's listening to.
+ tags = set()
+
+ #: the priority of that extension. This is especially useful for
+ #: extensions that preprocess values. A lower value means higher
+ #: priority.
+ #:
+ #: .. versionadded:: 2.4
+ priority = 100
+
+ def __init__(self, environment):
+ self.environment = environment
+
+ def bind(self, environment):
+ """Create a copy of this extension bound to another environment."""
+ rv = object.__new__(self.__class__)
+ rv.__dict__.update(self.__dict__)
+ rv.environment = environment
+ return rv
+
+ def preprocess(self, source, name, filename=None):
+ """This method is called before the actual lexing and can be used to
+ preprocess the source. The `filename` is optional. The return value
+ must be the preprocessed source.
+ """
+ return source
+
+ def filter_stream(self, stream):
+ """It's passed a :class:`~jinja2.lexer.TokenStream` that can be used
+ to filter tokens returned. This method has to return an iterable of
+ :class:`~jinja2.lexer.Token`\\s, but it doesn't have to return a
+ :class:`~jinja2.lexer.TokenStream`.
+
+ In the `ext` folder of the Jinja2 source distribution there is a file
+ called `inlinegettext.py` which implements a filter that utilizes this
+ method.
+ """
+ return stream
+
+ def parse(self, parser):
+ """If any of the :attr:`tags` matched this method is called with the
+ parser as first argument. The token the parser stream is pointing at
+ is the name token that matched. This method has to return one or a
+ list of multiple nodes.
+ """
+ raise NotImplementedError()
+
+ def attr(self, name, lineno=None):
+ """Return an attribute node for the current extension. This is useful
+ to pass constants on extensions to generated template code.
+
+ ::
+
+ self.attr('_my_attribute', lineno=lineno)
+ """
+ return nodes.ExtensionAttribute(self.identifier, name, lineno=lineno)
+
+ def call_method(self, name, args=None, kwargs=None, dyn_args=None,
+ dyn_kwargs=None, lineno=None):
+ """Call a method of the extension. This is a shortcut for
+ :meth:`attr` + :class:`jinja2.nodes.Call`.
+ """
+ if args is None:
+ args = []
+ if kwargs is None:
+ kwargs = []
+ return nodes.Call(self.attr(name, lineno=lineno), args, kwargs,
+ dyn_args, dyn_kwargs, lineno=lineno)
+
+
+@contextfunction
+def _gettext_alias(__context, *args, **kwargs):
+ return __context.call(__context.resolve('gettext'), *args, **kwargs)
+
+
+def _make_new_gettext(func):
+ @contextfunction
+ def gettext(__context, __string, **variables):
+ rv = __context.call(func, __string)
+ if __context.eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv % variables
+ return gettext
+
+
+def _make_new_ngettext(func):
+ @contextfunction
+ def ngettext(__context, __singular, __plural, __num, **variables):
+ variables.setdefault('num', __num)
+ rv = __context.call(func, __singular, __plural, __num)
+ if __context.eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv % variables
+ return ngettext
+
+
+class InternationalizationExtension(Extension):
+ """This extension adds gettext support to Jinja2."""
+ tags = set(['trans'])
+
+ # TODO: the i18n extension is currently reevaluating values in a few
+ # situations. Take this example:
+ # {% trans count=something() %}{{ count }} foo{% pluralize
+ # %}{{ count }} fooss{% endtrans %}
+ # something is called twice here. One time for the gettext value and
+ # the other time for the n-parameter of the ngettext function.
+
+ def __init__(self, environment):
+ Extension.__init__(self, environment)
+ environment.globals['_'] = _gettext_alias
+ environment.extend(
+ install_gettext_translations=self._install,
+ install_null_translations=self._install_null,
+ install_gettext_callables=self._install_callables,
+ uninstall_gettext_translations=self._uninstall,
+ extract_translations=self._extract,
+ newstyle_gettext=False
+ )
+
+ def _install(self, translations, newstyle=None):
+ gettext = getattr(translations, 'ugettext', None)
+ if gettext is None:
+ gettext = translations.gettext
+ ngettext = getattr(translations, 'ungettext', None)
+ if ngettext is None:
+ ngettext = translations.ngettext
+ self._install_callables(gettext, ngettext, newstyle)
+
+ def _install_null(self, newstyle=None):
+ self._install_callables(
+ lambda x: x,
+ lambda s, p, n: (n != 1 and (p,) or (s,))[0],
+ newstyle
+ )
+
+ def _install_callables(self, gettext, ngettext, newstyle=None):
+ if newstyle is not None:
+ self.environment.newstyle_gettext = newstyle
+ if self.environment.newstyle_gettext:
+ gettext = _make_new_gettext(gettext)
+ ngettext = _make_new_ngettext(ngettext)
+ self.environment.globals.update(
+ gettext=gettext,
+ ngettext=ngettext
+ )
+
+ def _uninstall(self, translations):
+ for key in 'gettext', 'ngettext':
+ self.environment.globals.pop(key, None)
+
+ def _extract(self, source, gettext_functions=GETTEXT_FUNCTIONS):
+ if isinstance(source, string_types):
+ source = self.environment.parse(source)
+ return extract_from_ast(source, gettext_functions)
+
+ def parse(self, parser):
+ """Parse a translatable tag."""
+ lineno = next(parser.stream).lineno
+ num_called_num = False
+
+ # find all the variables referenced. Additionally a variable can be
+ # defined in the body of the trans block too, but this is checked at
+ # a later state.
+ plural_expr = None
+ plural_expr_assignment = None
+ variables = {}
+ while parser.stream.current.type != 'block_end':
+ if variables:
+ parser.stream.expect('comma')
+
+ # skip colon for python compatibility
+ if parser.stream.skip_if('colon'):
+ break
+
+ name = parser.stream.expect('name')
+ if name.value in variables:
+ parser.fail('translatable variable %r defined twice.' %
+ name.value, name.lineno,
+ exc=TemplateAssertionError)
+
+ # expressions
+ if parser.stream.current.type == 'assign':
+ next(parser.stream)
+ variables[name.value] = var = parser.parse_expression()
+ else:
+ variables[name.value] = var = nodes.Name(name.value, 'load')
+
+ if plural_expr is None:
+ if isinstance(var, nodes.Call):
+ plural_expr = nodes.Name('_trans', 'load')
+ variables[name.value] = plural_expr
+ plural_expr_assignment = nodes.Assign(
+ nodes.Name('_trans', 'store'), var)
+ else:
+ plural_expr = var
+ num_called_num = name.value == 'num'
+
+ parser.stream.expect('block_end')
+
+ plural = plural_names = None
+ have_plural = False
+ referenced = set()
+
+ # now parse until endtrans or pluralize
+ singular_names, singular = self._parse_block(parser, True)
+ if singular_names:
+ referenced.update(singular_names)
+ if plural_expr is None:
+ plural_expr = nodes.Name(singular_names[0], 'load')
+ num_called_num = singular_names[0] == 'num'
+
+ # if we have a pluralize block, we parse that too
+ if parser.stream.current.test('name:pluralize'):
+ have_plural = True
+ next(parser.stream)
+ if parser.stream.current.type != 'block_end':
+ name = parser.stream.expect('name')
+ if name.value not in variables:
+ parser.fail('unknown variable %r for pluralization' %
+ name.value, name.lineno,
+ exc=TemplateAssertionError)
+ plural_expr = variables[name.value]
+ num_called_num = name.value == 'num'
+ parser.stream.expect('block_end')
+ plural_names, plural = self._parse_block(parser, False)
+ next(parser.stream)
+ referenced.update(plural_names)
+ else:
+ next(parser.stream)
+
+ # register free names as simple name expressions
+ for var in referenced:
+ if var not in variables:
+ variables[var] = nodes.Name(var, 'load')
+
+ if not have_plural:
+ plural_expr = None
+ elif plural_expr is None:
+ parser.fail('pluralize without variables', lineno)
+
+ node = self._make_node(singular, plural, variables, plural_expr,
+ bool(referenced),
+ num_called_num and have_plural)
+ node.set_lineno(lineno)
+ if plural_expr_assignment is not None:
+ return [plural_expr_assignment, node]
+ else:
+ return node
+
+ def _parse_block(self, parser, allow_pluralize):
+ """Parse until the next block tag with a given name."""
+ referenced = []
+ buf = []
+ while 1:
+ if parser.stream.current.type == 'data':
+ buf.append(parser.stream.current.value.replace('%', '%%'))
+ next(parser.stream)
+ elif parser.stream.current.type == 'variable_begin':
+ next(parser.stream)
+ name = parser.stream.expect('name').value
+ referenced.append(name)
+ buf.append('%%(%s)s' % name)
+ parser.stream.expect('variable_end')
+ elif parser.stream.current.type == 'block_begin':
+ next(parser.stream)
+ if parser.stream.current.test('name:endtrans'):
+ break
+ elif parser.stream.current.test('name:pluralize'):
+ if allow_pluralize:
+ break
+ parser.fail('a translatable section can have only one '
+ 'pluralize section')
+ parser.fail('control structures in translatable sections are '
+ 'not allowed')
+ elif parser.stream.eos:
+ parser.fail('unclosed translation block')
+ else:
+ assert False, 'internal parser error'
+
+ return referenced, concat(buf)
+
+ def _make_node(self, singular, plural, variables, plural_expr,
+ vars_referenced, num_called_num):
+ """Generates a useful node from the data provided."""
+ # no variables referenced? no need to escape for old style
+ # gettext invocations only if there are vars.
+ if not vars_referenced and not self.environment.newstyle_gettext:
+ singular = singular.replace('%%', '%')
+ if plural:
+ plural = plural.replace('%%', '%')
+
+ # singular only:
+ if plural_expr is None:
+ gettext = nodes.Name('gettext', 'load')
+ node = nodes.Call(gettext, [nodes.Const(singular)],
+ [], None, None)
+
+ # singular and plural
+ else:
+ ngettext = nodes.Name('ngettext', 'load')
+ node = nodes.Call(ngettext, [
+ nodes.Const(singular),
+ nodes.Const(plural),
+ plural_expr
+ ], [], None, None)
+
+ # in case newstyle gettext is used, the method is powerful
+ # enough to handle the variable expansion and autoescape
+ # handling itself
+ if self.environment.newstyle_gettext:
+ for key, value in iteritems(variables):
+ # the function adds that later anyways in case num was
+ # called num, so just skip it.
+ if num_called_num and key == 'num':
+ continue
+ node.kwargs.append(nodes.Keyword(key, value))
+
+ # otherwise do that here
+ else:
+ # mark the return value as safe if we are in an
+ # environment with autoescaping turned on
+ node = nodes.MarkSafeIfAutoescape(node)
+ if variables:
+ node = nodes.Mod(node, nodes.Dict([
+ nodes.Pair(nodes.Const(key), value)
+ for key, value in variables.items()
+ ]))
+ return nodes.Output([node])
+
+
+class ExprStmtExtension(Extension):
+ """Adds a `do` tag to Jinja2 that works like the print statement just
+ that it doesn't print the return value.
+ """
+ tags = set(['do'])
+
+ def parse(self, parser):
+ node = nodes.ExprStmt(lineno=next(parser.stream).lineno)
+ node.node = parser.parse_tuple()
+ return node
+
+
+class LoopControlExtension(Extension):
+ """Adds break and continue to the template engine."""
+ tags = set(['break', 'continue'])
+
+ def parse(self, parser):
+ token = next(parser.stream)
+ if token.value == 'break':
+ return nodes.Break(lineno=token.lineno)
+ return nodes.Continue(lineno=token.lineno)
+
+
+class WithExtension(Extension):
+ pass
+
+
+class AutoEscapeExtension(Extension):
+ pass
+
+
+def extract_from_ast(node, gettext_functions=GETTEXT_FUNCTIONS,
+ babel_style=True):
+ """Extract localizable strings from the given template node. Per
+ default this function returns matches in babel style that means non string
+ parameters as well as keyword arguments are returned as `None`. This
+ allows Babel to figure out what you really meant if you are using
+ gettext functions that allow keyword arguments for placeholder expansion.
+ If you don't want that behavior set the `babel_style` parameter to `False`
+ which causes only strings to be returned and parameters are always stored
+ in tuples. As a consequence invalid gettext calls (calls without a single
+ string parameter or string parameters after non-string parameters) are
+ skipped.
+
+ This example explains the behavior:
+
+ >>> from jinja2 import Environment
+ >>> env = Environment()
+ >>> node = env.parse('{{ (_("foo"), _(), ngettext("foo", "bar", 42)) }}')
+ >>> list(extract_from_ast(node))
+ [(1, '_', 'foo'), (1, '_', ()), (1, 'ngettext', ('foo', 'bar', None))]
+ >>> list(extract_from_ast(node, babel_style=False))
+ [(1, '_', ('foo',)), (1, 'ngettext', ('foo', 'bar'))]
+
+ For every string found this function yields a ``(lineno, function,
+ message)`` tuple, where:
+
+ * ``lineno`` is the number of the line on which the string was found,
+ * ``function`` is the name of the ``gettext`` function used (if the
+ string was extracted from embedded Python code), and
+ * ``message`` is the string itself (a ``unicode`` object, or a tuple
+ of ``unicode`` objects for functions with multiple string arguments).
+
+ This extraction function operates on the AST and is because of that unable
+ to extract any comments. For comment support you have to use the babel
+ extraction interface or extract comments yourself.
+ """
+ for node in node.find_all(nodes.Call):
+ if not isinstance(node.node, nodes.Name) or \
+ node.node.name not in gettext_functions:
+ continue
+
+ strings = []
+ for arg in node.args:
+ if isinstance(arg, nodes.Const) and \
+ isinstance(arg.value, string_types):
+ strings.append(arg.value)
+ else:
+ strings.append(None)
+
+ for arg in node.kwargs:
+ strings.append(None)
+ if node.dyn_args is not None:
+ strings.append(None)
+ if node.dyn_kwargs is not None:
+ strings.append(None)
+
+ if not babel_style:
+ strings = tuple(x for x in strings if x is not None)
+ if not strings:
+ continue
+ else:
+ if len(strings) == 1:
+ strings = strings[0]
+ else:
+ strings = tuple(strings)
+ yield node.lineno, node.node.name, strings
+
+
+class _CommentFinder(object):
+ """Helper class to find comments in a token stream. Can only
+ find comments for gettext calls forwards. Once the comment
+ from line 4 is found, a comment for line 1 will not return a
+ usable value.
+ """
+
+ def __init__(self, tokens, comment_tags):
+ self.tokens = tokens
+ self.comment_tags = comment_tags
+ self.offset = 0
+ self.last_lineno = 0
+
+ def find_backwards(self, offset):
+ try:
+ for _, token_type, token_value in \
+ reversed(self.tokens[self.offset:offset]):
+ if token_type in ('comment', 'linecomment'):
+ try:
+ prefix, comment = token_value.split(None, 1)
+ except ValueError:
+ continue
+ if prefix in self.comment_tags:
+ return [comment.rstrip()]
+ return []
+ finally:
+ self.offset = offset
+
+ def find_comments(self, lineno):
+ if not self.comment_tags or self.last_lineno > lineno:
+ return []
+ for idx, (token_lineno, _, _) in enumerate(self.tokens[self.offset:]):
+ if token_lineno > lineno:
+ return self.find_backwards(self.offset + idx)
+ return self.find_backwards(len(self.tokens))
+
+
+def babel_extract(fileobj, keywords, comment_tags, options):
+ """Babel extraction method for Jinja templates.
+
+ .. versionchanged:: 2.3
+ Basic support for translation comments was added. If `comment_tags`
+ is now set to a list of keywords for extraction, the extractor will
+ try to find the best preceeding comment that begins with one of the
+ keywords. For best results, make sure to not have more than one
+ gettext call in one line of code and the matching comment in the
+ same line or the line before.
+
+ .. versionchanged:: 2.5.1
+ The `newstyle_gettext` flag can be set to `True` to enable newstyle
+ gettext calls.
+
+ .. versionchanged:: 2.7
+ A `silent` option can now be provided. If set to `False` template
+ syntax errors are propagated instead of being ignored.
+
+ :param fileobj: the file-like object the messages should be extracted from
+ :param keywords: a list of keywords (i.e. function names) that should be
+ recognized as translation functions
+ :param comment_tags: a list of translator tags to search for and include
+ in the results.
+ :param options: a dictionary of additional options (optional)
+ :return: an iterator over ``(lineno, funcname, message, comments)`` tuples.
+ (comments will be empty currently)
+ """
+ extensions = set()
+ for extension in options.get('extensions', '').split(','):
+ extension = extension.strip()
+ if not extension:
+ continue
+ extensions.add(import_string(extension))
+ if InternationalizationExtension not in extensions:
+ extensions.add(InternationalizationExtension)
+
+ def getbool(options, key, default=False):
+ return options.get(key, str(default)).lower() in \
+ ('1', 'on', 'yes', 'true')
+
+ silent = getbool(options, 'silent', True)
+ environment = Environment(
+ options.get('block_start_string', BLOCK_START_STRING),
+ options.get('block_end_string', BLOCK_END_STRING),
+ options.get('variable_start_string', VARIABLE_START_STRING),
+ options.get('variable_end_string', VARIABLE_END_STRING),
+ options.get('comment_start_string', COMMENT_START_STRING),
+ options.get('comment_end_string', COMMENT_END_STRING),
+ options.get('line_statement_prefix') or LINE_STATEMENT_PREFIX,
+ options.get('line_comment_prefix') or LINE_COMMENT_PREFIX,
+ getbool(options, 'trim_blocks', TRIM_BLOCKS),
+ getbool(options, 'lstrip_blocks', LSTRIP_BLOCKS),
+ NEWLINE_SEQUENCE,
+ getbool(options, 'keep_trailing_newline', KEEP_TRAILING_NEWLINE),
+ frozenset(extensions),
+ cache_size=0,
+ auto_reload=False
+ )
+
+ if getbool(options, 'newstyle_gettext'):
+ environment.newstyle_gettext = True
+
+ source = fileobj.read().decode(options.get('encoding', 'utf-8'))
+ try:
+ node = environment.parse(source)
+ tokens = list(environment.lex(environment.preprocess(source)))
+ except TemplateSyntaxError as e:
+ if not silent:
+ raise
+ # skip templates with syntax errors
+ return
+
+ finder = _CommentFinder(tokens, comment_tags)
+ for lineno, func, message in extract_from_ast(node, keywords):
+ yield lineno, func, message, finder.find_comments(lineno)
+
+
+#: nicer import names
+i18n = InternationalizationExtension
+do = ExprStmtExtension
+loopcontrols = LoopControlExtension
+with_ = WithExtension
+autoescape = AutoEscapeExtension
diff --git a/lib/spack/external/jinja2/filters.py b/lib/spack/external/jinja2/filters.py
new file mode 100644
index 0000000000..76e04db665
--- /dev/null
+++ b/lib/spack/external/jinja2/filters.py
@@ -0,0 +1,1073 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.filters
+ ~~~~~~~~~~~~~~
+
+ Bundled jinja filters.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import re
+import math
+
+from random import choice
+from itertools import groupby
+from collections import namedtuple
+from jinja2.utils import Markup, escape, pformat, urlize, soft_unicode, \
+ unicode_urlencode, htmlsafe_json_dumps
+from jinja2.runtime import Undefined
+from jinja2.exceptions import FilterArgumentError
+from jinja2._compat import imap, string_types, text_type, iteritems, PY2
+
+
+_word_re = re.compile(r'\w+', re.UNICODE)
+_word_beginning_split_re = re.compile(r'([-\s\(\{\[\<]+)', re.UNICODE)
+
+
+def contextfilter(f):
+ """Decorator for marking context dependent filters. The current
+ :class:`Context` will be passed as first argument.
+ """
+ f.contextfilter = True
+ return f
+
+
+def evalcontextfilter(f):
+ """Decorator for marking eval-context dependent filters. An eval
+ context object is passed as first argument. For more information
+ about the eval context, see :ref:`eval-context`.
+
+ .. versionadded:: 2.4
+ """
+ f.evalcontextfilter = True
+ return f
+
+
+def environmentfilter(f):
+ """Decorator for marking environment dependent filters. The current
+ :class:`Environment` is passed to the filter as first argument.
+ """
+ f.environmentfilter = True
+ return f
+
+
+def make_attrgetter(environment, attribute):
+ """Returns a callable that looks up the given attribute from a
+ passed object with the rules of the environment. Dots are allowed
+ to access attributes of attributes. Integer parts in paths are
+ looked up as integers.
+ """
+ if not isinstance(attribute, string_types) \
+ or ('.' not in attribute and not attribute.isdigit()):
+ return lambda x: environment.getitem(x, attribute)
+ attribute = attribute.split('.')
+ def attrgetter(item):
+ for part in attribute:
+ if part.isdigit():
+ part = int(part)
+ item = environment.getitem(item, part)
+ return item
+ return attrgetter
+
+
+def do_forceescape(value):
+ """Enforce HTML escaping. This will probably double escape variables."""
+ if hasattr(value, '__html__'):
+ value = value.__html__()
+ return escape(text_type(value))
+
+
+def do_urlencode(value):
+ """Escape strings for use in URLs (uses UTF-8 encoding). It accepts both
+ dictionaries and regular strings as well as pairwise iterables.
+
+ .. versionadded:: 2.7
+ """
+ itemiter = None
+ if isinstance(value, dict):
+ itemiter = iteritems(value)
+ elif not isinstance(value, string_types):
+ try:
+ itemiter = iter(value)
+ except TypeError:
+ pass
+ if itemiter is None:
+ return unicode_urlencode(value)
+ return u'&'.join(unicode_urlencode(k) + '=' +
+ unicode_urlencode(v, for_qs=True)
+ for k, v in itemiter)
+
+
+@evalcontextfilter
+def do_replace(eval_ctx, s, old, new, count=None):
+ """Return a copy of the value with all occurrences of a substring
+ replaced with a new one. The first argument is the substring
+ that should be replaced, the second is the replacement string.
+ If the optional third argument ``count`` is given, only the first
+ ``count`` occurrences are replaced:
+
+ .. sourcecode:: jinja
+
+ {{ "Hello World"|replace("Hello", "Goodbye") }}
+ -> Goodbye World
+
+ {{ "aaaaargh"|replace("a", "d'oh, ", 2) }}
+ -> d'oh, d'oh, aaargh
+ """
+ if count is None:
+ count = -1
+ if not eval_ctx.autoescape:
+ return text_type(s).replace(text_type(old), text_type(new), count)
+ if hasattr(old, '__html__') or hasattr(new, '__html__') and \
+ not hasattr(s, '__html__'):
+ s = escape(s)
+ else:
+ s = soft_unicode(s)
+ return s.replace(soft_unicode(old), soft_unicode(new), count)
+
+
+def do_upper(s):
+ """Convert a value to uppercase."""
+ return soft_unicode(s).upper()
+
+
+def do_lower(s):
+ """Convert a value to lowercase."""
+ return soft_unicode(s).lower()
+
+
+@evalcontextfilter
+def do_xmlattr(_eval_ctx, d, autospace=True):
+ """Create an SGML/XML attribute string based on the items in a dict.
+ All values that are neither `none` nor `undefined` are automatically
+ escaped:
+
+ .. sourcecode:: html+jinja
+
+ <ul{{ {'class': 'my_list', 'missing': none,
+ 'id': 'list-%d'|format(variable)}|xmlattr }}>
+ ...
+ </ul>
+
+ Results in something like this:
+
+ .. sourcecode:: html
+
+ <ul class="my_list" id="list-42">
+ ...
+ </ul>
+
+ As you can see it automatically prepends a space in front of the item
+ if the filter returned something unless the second parameter is false.
+ """
+ rv = u' '.join(
+ u'%s="%s"' % (escape(key), escape(value))
+ for key, value in iteritems(d)
+ if value is not None and not isinstance(value, Undefined)
+ )
+ if autospace and rv:
+ rv = u' ' + rv
+ if _eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv
+
+
+def do_capitalize(s):
+ """Capitalize a value. The first character will be uppercase, all others
+ lowercase.
+ """
+ return soft_unicode(s).capitalize()
+
+
+def do_title(s):
+ """Return a titlecased version of the value. I.e. words will start with
+ uppercase letters, all remaining characters are lowercase.
+ """
+ return ''.join(
+ [item[0].upper() + item[1:].lower()
+ for item in _word_beginning_split_re.split(soft_unicode(s))
+ if item])
+
+
+def do_dictsort(value, case_sensitive=False, by='key'):
+ """Sort a dict and yield (key, value) pairs. Because python dicts are
+ unsorted you may want to use this function to order them by either
+ key or value:
+
+ .. sourcecode:: jinja
+
+ {% for item in mydict|dictsort %}
+ sort the dict by key, case insensitive
+
+ {% for item in mydict|dictsort(true) %}
+ sort the dict by key, case sensitive
+
+ {% for item in mydict|dictsort(false, 'value') %}
+ sort the dict by value, case insensitive
+ """
+ if by == 'key':
+ pos = 0
+ elif by == 'value':
+ pos = 1
+ else:
+ raise FilterArgumentError('You can only sort by either '
+ '"key" or "value"')
+ def sort_func(item):
+ value = item[pos]
+ if isinstance(value, string_types) and not case_sensitive:
+ value = value.lower()
+ return value
+
+ return sorted(value.items(), key=sort_func)
+
+
+@environmentfilter
+def do_sort(environment, value, reverse=False, case_sensitive=False,
+ attribute=None):
+ """Sort an iterable. Per default it sorts ascending, if you pass it
+ true as first argument it will reverse the sorting.
+
+ If the iterable is made of strings the third parameter can be used to
+ control the case sensitiveness of the comparison which is disabled by
+ default.
+
+ .. sourcecode:: jinja
+
+ {% for item in iterable|sort %}
+ ...
+ {% endfor %}
+
+ It is also possible to sort by an attribute (for example to sort
+ by the date of an object) by specifying the `attribute` parameter:
+
+ .. sourcecode:: jinja
+
+ {% for item in iterable|sort(attribute='date') %}
+ ...
+ {% endfor %}
+
+ .. versionchanged:: 2.6
+ The `attribute` parameter was added.
+ """
+ if not case_sensitive:
+ def sort_func(item):
+ if isinstance(item, string_types):
+ item = item.lower()
+ return item
+ else:
+ sort_func = None
+ if attribute is not None:
+ getter = make_attrgetter(environment, attribute)
+ def sort_func(item, processor=sort_func or (lambda x: x)):
+ return processor(getter(item))
+ return sorted(value, key=sort_func, reverse=reverse)
+
+
+def do_default(value, default_value=u'', boolean=False):
+ """If the value is undefined it will return the passed default value,
+ otherwise the value of the variable:
+
+ .. sourcecode:: jinja
+
+ {{ my_variable|default('my_variable is not defined') }}
+
+ This will output the value of ``my_variable`` if the variable was
+ defined, otherwise ``'my_variable is not defined'``. If you want
+ to use default with variables that evaluate to false you have to
+ set the second parameter to `true`:
+
+ .. sourcecode:: jinja
+
+ {{ ''|default('the string was empty', true) }}
+ """
+ if isinstance(value, Undefined) or (boolean and not value):
+ return default_value
+ return value
+
+
+@evalcontextfilter
+def do_join(eval_ctx, value, d=u'', attribute=None):
+ """Return a string which is the concatenation of the strings in the
+ sequence. The separator between elements is an empty string per
+ default, you can define it with the optional parameter:
+
+ .. sourcecode:: jinja
+
+ {{ [1, 2, 3]|join('|') }}
+ -> 1|2|3
+
+ {{ [1, 2, 3]|join }}
+ -> 123
+
+ It is also possible to join certain attributes of an object:
+
+ .. sourcecode:: jinja
+
+ {{ users|join(', ', attribute='username') }}
+
+ .. versionadded:: 2.6
+ The `attribute` parameter was added.
+ """
+ if attribute is not None:
+ value = imap(make_attrgetter(eval_ctx.environment, attribute), value)
+
+ # no automatic escaping? joining is a lot eaiser then
+ if not eval_ctx.autoescape:
+ return text_type(d).join(imap(text_type, value))
+
+ # if the delimiter doesn't have an html representation we check
+ # if any of the items has. If yes we do a coercion to Markup
+ if not hasattr(d, '__html__'):
+ value = list(value)
+ do_escape = False
+ for idx, item in enumerate(value):
+ if hasattr(item, '__html__'):
+ do_escape = True
+ else:
+ value[idx] = text_type(item)
+ if do_escape:
+ d = escape(d)
+ else:
+ d = text_type(d)
+ return d.join(value)
+
+ # no html involved, to normal joining
+ return soft_unicode(d).join(imap(soft_unicode, value))
+
+
+def do_center(value, width=80):
+ """Centers the value in a field of a given width."""
+ return text_type(value).center(width)
+
+
+@environmentfilter
+def do_first(environment, seq):
+ """Return the first item of a sequence."""
+ try:
+ return next(iter(seq))
+ except StopIteration:
+ return environment.undefined('No first item, sequence was empty.')
+
+
+@environmentfilter
+def do_last(environment, seq):
+ """Return the last item of a sequence."""
+ try:
+ return next(iter(reversed(seq)))
+ except StopIteration:
+ return environment.undefined('No last item, sequence was empty.')
+
+
+@environmentfilter
+def do_random(environment, seq):
+ """Return a random item from the sequence."""
+ try:
+ return choice(seq)
+ except IndexError:
+ return environment.undefined('No random item, sequence was empty.')
+
+
+def do_filesizeformat(value, binary=False):
+ """Format the value like a 'human-readable' file size (i.e. 13 kB,
+ 4.1 MB, 102 Bytes, etc). Per default decimal prefixes are used (Mega,
+ Giga, etc.), if the second parameter is set to `True` the binary
+ prefixes are used (Mebi, Gibi).
+ """
+ bytes = float(value)
+ base = binary and 1024 or 1000
+ prefixes = [
+ (binary and 'KiB' or 'kB'),
+ (binary and 'MiB' or 'MB'),
+ (binary and 'GiB' or 'GB'),
+ (binary and 'TiB' or 'TB'),
+ (binary and 'PiB' or 'PB'),
+ (binary and 'EiB' or 'EB'),
+ (binary and 'ZiB' or 'ZB'),
+ (binary and 'YiB' or 'YB')
+ ]
+ if bytes == 1:
+ return '1 Byte'
+ elif bytes < base:
+ return '%d Bytes' % bytes
+ else:
+ for i, prefix in enumerate(prefixes):
+ unit = base ** (i + 2)
+ if bytes < unit:
+ return '%.1f %s' % ((base * bytes / unit), prefix)
+ return '%.1f %s' % ((base * bytes / unit), prefix)
+
+
+def do_pprint(value, verbose=False):
+ """Pretty print a variable. Useful for debugging.
+
+ With Jinja 1.2 onwards you can pass it a parameter. If this parameter
+ is truthy the output will be more verbose (this requires `pretty`)
+ """
+ return pformat(value, verbose=verbose)
+
+
+@evalcontextfilter
+def do_urlize(eval_ctx, value, trim_url_limit=None, nofollow=False,
+ target=None, rel=None):
+ """Converts URLs in plain text into clickable links.
+
+ If you pass the filter an additional integer it will shorten the urls
+ to that number. Also a third argument exists that makes the urls
+ "nofollow":
+
+ .. sourcecode:: jinja
+
+ {{ mytext|urlize(40, true) }}
+ links are shortened to 40 chars and defined with rel="nofollow"
+
+ If *target* is specified, the ``target`` attribute will be added to the
+ ``<a>`` tag:
+
+ .. sourcecode:: jinja
+
+ {{ mytext|urlize(40, target='_blank') }}
+
+ .. versionchanged:: 2.8+
+ The *target* parameter was added.
+ """
+ policies = eval_ctx.environment.policies
+ rel = set((rel or '').split() or [])
+ if nofollow:
+ rel.add('nofollow')
+ rel.update((policies['urlize.rel'] or '').split())
+ if target is None:
+ target = policies['urlize.target']
+ rel = ' '.join(sorted(rel)) or None
+ rv = urlize(value, trim_url_limit, rel=rel, target=target)
+ if eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv
+
+
+def do_indent(s, width=4, indentfirst=False):
+ """Return a copy of the passed string, each line indented by
+ 4 spaces. The first line is not indented. If you want to
+ change the number of spaces or indent the first line too
+ you can pass additional parameters to the filter:
+
+ .. sourcecode:: jinja
+
+ {{ mytext|indent(2, true) }}
+ indent by two spaces and indent the first line too.
+ """
+ indention = u' ' * width
+ rv = (u'\n' + indention).join(s.splitlines())
+ if indentfirst:
+ rv = indention + rv
+ return rv
+
+
+@environmentfilter
+def do_truncate(env, s, length=255, killwords=False, end='...', leeway=None):
+ """Return a truncated copy of the string. The length is specified
+ with the first parameter which defaults to ``255``. If the second
+ parameter is ``true`` the filter will cut the text at length. Otherwise
+ it will discard the last word. If the text was in fact
+ truncated it will append an ellipsis sign (``"..."``). If you want a
+ different ellipsis sign than ``"..."`` you can specify it using the
+ third parameter. Strings that only exceed the length by the tolerance
+ margin given in the fourth parameter will not be truncated.
+
+ .. sourcecode:: jinja
+
+ {{ "foo bar baz qux"|truncate(9) }}
+ -> "foo..."
+ {{ "foo bar baz qux"|truncate(9, True) }}
+ -> "foo ba..."
+ {{ "foo bar baz qux"|truncate(11) }}
+ -> "foo bar baz qux"
+ {{ "foo bar baz qux"|truncate(11, False, '...', 0) }}
+ -> "foo bar..."
+
+ The default leeway on newer Jinja2 versions is 5 and was 0 before but
+ can be reconfigured globally.
+ """
+ if leeway is None:
+ leeway = env.policies['truncate.leeway']
+ assert length >= len(end), 'expected length >= %s, got %s' % (len(end), length)
+ assert leeway >= 0, 'expected leeway >= 0, got %s' % leeway
+ if len(s) <= length + leeway:
+ return s
+ if killwords:
+ return s[:length - len(end)] + end
+ result = s[:length - len(end)].rsplit(' ', 1)[0]
+ return result + end
+
+
+@environmentfilter
+def do_wordwrap(environment, s, width=79, break_long_words=True,
+ wrapstring=None):
+ """
+ Return a copy of the string passed to the filter wrapped after
+ ``79`` characters. You can override this default using the first
+ parameter. If you set the second parameter to `false` Jinja will not
+ split words apart if they are longer than `width`. By default, the newlines
+ will be the default newlines for the environment, but this can be changed
+ using the wrapstring keyword argument.
+
+ .. versionadded:: 2.7
+ Added support for the `wrapstring` parameter.
+ """
+ if not wrapstring:
+ wrapstring = environment.newline_sequence
+ import textwrap
+ return wrapstring.join(textwrap.wrap(s, width=width, expand_tabs=False,
+ replace_whitespace=False,
+ break_long_words=break_long_words))
+
+
+def do_wordcount(s):
+ """Count the words in that string."""
+ return len(_word_re.findall(s))
+
+
+def do_int(value, default=0, base=10):
+ """Convert the value into an integer. If the
+ conversion doesn't work it will return ``0``. You can
+ override this default using the first parameter. You
+ can also override the default base (10) in the second
+ parameter, which handles input with prefixes such as
+ 0b, 0o and 0x for bases 2, 8 and 16 respectively.
+ The base is ignored for decimal numbers and non-string values.
+ """
+ try:
+ if isinstance(value, string_types):
+ return int(value, base)
+ return int(value)
+ except (TypeError, ValueError):
+ # this quirk is necessary so that "42.23"|int gives 42.
+ try:
+ return int(float(value))
+ except (TypeError, ValueError):
+ return default
+
+
+def do_float(value, default=0.0):
+ """Convert the value into a floating point number. If the
+ conversion doesn't work it will return ``0.0``. You can
+ override this default using the first parameter.
+ """
+ try:
+ return float(value)
+ except (TypeError, ValueError):
+ return default
+
+
+def do_format(value, *args, **kwargs):
+ """
+ Apply python string formatting on an object:
+
+ .. sourcecode:: jinja
+
+ {{ "%s - %s"|format("Hello?", "Foo!") }}
+ -> Hello? - Foo!
+ """
+ if args and kwargs:
+ raise FilterArgumentError('can\'t handle positional and keyword '
+ 'arguments at the same time')
+ return soft_unicode(value) % (kwargs or args)
+
+
+def do_trim(value):
+ """Strip leading and trailing whitespace."""
+ return soft_unicode(value).strip()
+
+
+def do_striptags(value):
+ """Strip SGML/XML tags and replace adjacent whitespace by one space.
+ """
+ if hasattr(value, '__html__'):
+ value = value.__html__()
+ return Markup(text_type(value)).striptags()
+
+
+def do_slice(value, slices, fill_with=None):
+ """Slice an iterator and return a list of lists containing
+ those items. Useful if you want to create a div containing
+ three ul tags that represent columns:
+
+ .. sourcecode:: html+jinja
+
+ <div class="columwrapper">
+ {%- for column in items|slice(3) %}
+ <ul class="column-{{ loop.index }}">
+ {%- for item in column %}
+ <li>{{ item }}</li>
+ {%- endfor %}
+ </ul>
+ {%- endfor %}
+ </div>
+
+ If you pass it a second argument it's used to fill missing
+ values on the last iteration.
+ """
+ seq = list(value)
+ length = len(seq)
+ items_per_slice = length // slices
+ slices_with_extra = length % slices
+ offset = 0
+ for slice_number in range(slices):
+ start = offset + slice_number * items_per_slice
+ if slice_number < slices_with_extra:
+ offset += 1
+ end = offset + (slice_number + 1) * items_per_slice
+ tmp = seq[start:end]
+ if fill_with is not None and slice_number >= slices_with_extra:
+ tmp.append(fill_with)
+ yield tmp
+
+
+def do_batch(value, linecount, fill_with=None):
+ """
+ A filter that batches items. It works pretty much like `slice`
+ just the other way round. It returns a list of lists with the
+ given number of items. If you provide a second parameter this
+ is used to fill up missing items. See this example:
+
+ .. sourcecode:: html+jinja
+
+ <table>
+ {%- for row in items|batch(3, '&nbsp;') %}
+ <tr>
+ {%- for column in row %}
+ <td>{{ column }}</td>
+ {%- endfor %}
+ </tr>
+ {%- endfor %}
+ </table>
+ """
+ tmp = []
+ for item in value:
+ if len(tmp) == linecount:
+ yield tmp
+ tmp = []
+ tmp.append(item)
+ if tmp:
+ if fill_with is not None and len(tmp) < linecount:
+ tmp += [fill_with] * (linecount - len(tmp))
+ yield tmp
+
+
+def do_round(value, precision=0, method='common'):
+ """Round the number to a given precision. The first
+ parameter specifies the precision (default is ``0``), the
+ second the rounding method:
+
+ - ``'common'`` rounds either up or down
+ - ``'ceil'`` always rounds up
+ - ``'floor'`` always rounds down
+
+ If you don't specify a method ``'common'`` is used.
+
+ .. sourcecode:: jinja
+
+ {{ 42.55|round }}
+ -> 43.0
+ {{ 42.55|round(1, 'floor') }}
+ -> 42.5
+
+ Note that even if rounded to 0 precision, a float is returned. If
+ you need a real integer, pipe it through `int`:
+
+ .. sourcecode:: jinja
+
+ {{ 42.55|round|int }}
+ -> 43
+ """
+ if not method in ('common', 'ceil', 'floor'):
+ raise FilterArgumentError('method must be common, ceil or floor')
+ if method == 'common':
+ return round(value, precision)
+ func = getattr(math, method)
+ return func(value * (10 ** precision)) / (10 ** precision)
+
+
+# Use a regular tuple repr here. This is what we did in the past and we
+# really want to hide this custom type as much as possible. In particular
+# we do not want to accidentally expose an auto generated repr in case
+# people start to print this out in comments or something similar for
+# debugging.
+_GroupTuple = namedtuple('_GroupTuple', ['grouper', 'list'])
+_GroupTuple.__repr__ = tuple.__repr__
+_GroupTuple.__str__ = tuple.__str__
+
+@environmentfilter
+def do_groupby(environment, value, attribute):
+ """Group a sequence of objects by a common attribute.
+
+ If you for example have a list of dicts or objects that represent persons
+ with `gender`, `first_name` and `last_name` attributes and you want to
+ group all users by genders you can do something like the following
+ snippet:
+
+ .. sourcecode:: html+jinja
+
+ <ul>
+ {% for group in persons|groupby('gender') %}
+ <li>{{ group.grouper }}<ul>
+ {% for person in group.list %}
+ <li>{{ person.first_name }} {{ person.last_name }}</li>
+ {% endfor %}</ul></li>
+ {% endfor %}
+ </ul>
+
+ Additionally it's possible to use tuple unpacking for the grouper and
+ list:
+
+ .. sourcecode:: html+jinja
+
+ <ul>
+ {% for grouper, list in persons|groupby('gender') %}
+ ...
+ {% endfor %}
+ </ul>
+
+ As you can see the item we're grouping by is stored in the `grouper`
+ attribute and the `list` contains all the objects that have this grouper
+ in common.
+
+ .. versionchanged:: 2.6
+ It's now possible to use dotted notation to group by the child
+ attribute of another attribute.
+ """
+ expr = make_attrgetter(environment, attribute)
+ return [_GroupTuple(key, list(values)) for key, values
+ in groupby(sorted(value, key=expr), expr)]
+
+
+@environmentfilter
+def do_sum(environment, iterable, attribute=None, start=0):
+ """Returns the sum of a sequence of numbers plus the value of parameter
+ 'start' (which defaults to 0). When the sequence is empty it returns
+ start.
+
+ It is also possible to sum up only certain attributes:
+
+ .. sourcecode:: jinja
+
+ Total: {{ items|sum(attribute='price') }}
+
+ .. versionchanged:: 2.6
+ The `attribute` parameter was added to allow suming up over
+ attributes. Also the `start` parameter was moved on to the right.
+ """
+ if attribute is not None:
+ iterable = imap(make_attrgetter(environment, attribute), iterable)
+ return sum(iterable, start)
+
+
+def do_list(value):
+ """Convert the value into a list. If it was a string the returned list
+ will be a list of characters.
+ """
+ return list(value)
+
+
+def do_mark_safe(value):
+ """Mark the value as safe which means that in an environment with automatic
+ escaping enabled this variable will not be escaped.
+ """
+ return Markup(value)
+
+
+def do_mark_unsafe(value):
+ """Mark a value as unsafe. This is the reverse operation for :func:`safe`."""
+ return text_type(value)
+
+
+def do_reverse(value):
+ """Reverse the object or return an iterator that iterates over it the other
+ way round.
+ """
+ if isinstance(value, string_types):
+ return value[::-1]
+ try:
+ return reversed(value)
+ except TypeError:
+ try:
+ rv = list(value)
+ rv.reverse()
+ return rv
+ except TypeError:
+ raise FilterArgumentError('argument must be iterable')
+
+
+@environmentfilter
+def do_attr(environment, obj, name):
+ """Get an attribute of an object. ``foo|attr("bar")`` works like
+ ``foo.bar`` just that always an attribute is returned and items are not
+ looked up.
+
+ See :ref:`Notes on subscriptions <notes-on-subscriptions>` for more details.
+ """
+ try:
+ name = str(name)
+ except UnicodeError:
+ pass
+ else:
+ try:
+ value = getattr(obj, name)
+ except AttributeError:
+ pass
+ else:
+ if environment.sandboxed and not \
+ environment.is_safe_attribute(obj, name, value):
+ return environment.unsafe_undefined(obj, name)
+ return value
+ return environment.undefined(obj=obj, name=name)
+
+
+@contextfilter
+def do_map(*args, **kwargs):
+ """Applies a filter on a sequence of objects or looks up an attribute.
+ This is useful when dealing with lists of objects but you are really
+ only interested in a certain value of it.
+
+ The basic usage is mapping on an attribute. Imagine you have a list
+ of users but you are only interested in a list of usernames:
+
+ .. sourcecode:: jinja
+
+ Users on this page: {{ users|map(attribute='username')|join(', ') }}
+
+ Alternatively you can let it invoke a filter by passing the name of the
+ filter and the arguments afterwards. A good example would be applying a
+ text conversion filter on a sequence:
+
+ .. sourcecode:: jinja
+
+ Users on this page: {{ titles|map('lower')|join(', ') }}
+
+ .. versionadded:: 2.7
+ """
+ seq, func = prepare_map(args, kwargs)
+ if seq:
+ for item in seq:
+ yield func(item)
+
+
+@contextfilter
+def do_select(*args, **kwargs):
+ """Filters a sequence of objects by applying a test to each object,
+ and only selecting the objects with the test succeeding.
+
+ If no test is specified, each object will be evaluated as a boolean.
+
+ Example usage:
+
+ .. sourcecode:: jinja
+
+ {{ numbers|select("odd") }}
+ {{ numbers|select("odd") }}
+
+ .. versionadded:: 2.7
+ """
+ return select_or_reject(args, kwargs, lambda x: x, False)
+
+
+@contextfilter
+def do_reject(*args, **kwargs):
+ """Filters a sequence of objects by applying a test to each object,
+ and rejecting the objects with the test succeeding.
+
+ If no test is specified, each object will be evaluated as a boolean.
+
+ Example usage:
+
+ .. sourcecode:: jinja
+
+ {{ numbers|reject("odd") }}
+
+ .. versionadded:: 2.7
+ """
+ return select_or_reject(args, kwargs, lambda x: not x, False)
+
+
+@contextfilter
+def do_selectattr(*args, **kwargs):
+ """Filters a sequence of objects by applying a test to the specified
+ attribute of each object, and only selecting the objects with the
+ test succeeding.
+
+ If no test is specified, the attribute's value will be evaluated as
+ a boolean.
+
+ Example usage:
+
+ .. sourcecode:: jinja
+
+ {{ users|selectattr("is_active") }}
+ {{ users|selectattr("email", "none") }}
+
+ .. versionadded:: 2.7
+ """
+ return select_or_reject(args, kwargs, lambda x: x, True)
+
+
+@contextfilter
+def do_rejectattr(*args, **kwargs):
+ """Filters a sequence of objects by applying a test to the specified
+ attribute of each object, and rejecting the objects with the test
+ succeeding.
+
+ If no test is specified, the attribute's value will be evaluated as
+ a boolean.
+
+ .. sourcecode:: jinja
+
+ {{ users|rejectattr("is_active") }}
+ {{ users|rejectattr("email", "none") }}
+
+ .. versionadded:: 2.7
+ """
+ return select_or_reject(args, kwargs, lambda x: not x, True)
+
+
+@evalcontextfilter
+def do_tojson(eval_ctx, value, indent=None):
+ """Dumps a structure to JSON so that it's safe to use in ``<script>``
+ tags. It accepts the same arguments and returns a JSON string. Note that
+ this is available in templates through the ``|tojson`` filter which will
+ also mark the result as safe. Due to how this function escapes certain
+ characters this is safe even if used outside of ``<script>`` tags.
+
+ The following characters are escaped in strings:
+
+ - ``<``
+ - ``>``
+ - ``&``
+ - ``'``
+
+ This makes it safe to embed such strings in any place in HTML with the
+ notable exception of double quoted attributes. In that case single
+ quote your attributes or HTML escape it in addition.
+
+ The indent parameter can be used to enable pretty printing. Set it to
+ the number of spaces that the structures should be indented with.
+
+ Note that this filter is for use in HTML contexts only.
+
+ .. versionadded:: 2.9
+ """
+ policies = eval_ctx.environment.policies
+ dumper = policies['json.dumps_function']
+ options = policies['json.dumps_kwargs']
+ if indent is not None:
+ options = dict(options)
+ options['indent'] = indent
+ return htmlsafe_json_dumps(value, dumper=dumper, **options)
+
+
+def prepare_map(args, kwargs):
+ context = args[0]
+ seq = args[1]
+
+ if len(args) == 2 and 'attribute' in kwargs:
+ attribute = kwargs.pop('attribute')
+ if kwargs:
+ raise FilterArgumentError('Unexpected keyword argument %r' %
+ next(iter(kwargs)))
+ func = make_attrgetter(context.environment, attribute)
+ else:
+ try:
+ name = args[2]
+ args = args[3:]
+ except LookupError:
+ raise FilterArgumentError('map requires a filter argument')
+ func = lambda item: context.environment.call_filter(
+ name, item, args, kwargs, context=context)
+
+ return seq, func
+
+
+def prepare_select_or_reject(args, kwargs, modfunc, lookup_attr):
+ context = args[0]
+ seq = args[1]
+ if lookup_attr:
+ try:
+ attr = args[2]
+ except LookupError:
+ raise FilterArgumentError('Missing parameter for attribute name')
+ transfunc = make_attrgetter(context.environment, attr)
+ off = 1
+ else:
+ off = 0
+ transfunc = lambda x: x
+
+ try:
+ name = args[2 + off]
+ args = args[3 + off:]
+ func = lambda item: context.environment.call_test(
+ name, item, args, kwargs)
+ except LookupError:
+ func = bool
+
+ return seq, lambda item: modfunc(func(transfunc(item)))
+
+
+def select_or_reject(args, kwargs, modfunc, lookup_attr):
+ seq, func = prepare_select_or_reject(args, kwargs, modfunc, lookup_attr)
+ if seq:
+ for item in seq:
+ if func(item):
+ yield item
+
+
+FILTERS = {
+ 'abs': abs,
+ 'attr': do_attr,
+ 'batch': do_batch,
+ 'capitalize': do_capitalize,
+ 'center': do_center,
+ 'count': len,
+ 'd': do_default,
+ 'default': do_default,
+ 'dictsort': do_dictsort,
+ 'e': escape,
+ 'escape': escape,
+ 'filesizeformat': do_filesizeformat,
+ 'first': do_first,
+ 'float': do_float,
+ 'forceescape': do_forceescape,
+ 'format': do_format,
+ 'groupby': do_groupby,
+ 'indent': do_indent,
+ 'int': do_int,
+ 'join': do_join,
+ 'last': do_last,
+ 'length': len,
+ 'list': do_list,
+ 'lower': do_lower,
+ 'map': do_map,
+ 'pprint': do_pprint,
+ 'random': do_random,
+ 'reject': do_reject,
+ 'rejectattr': do_rejectattr,
+ 'replace': do_replace,
+ 'reverse': do_reverse,
+ 'round': do_round,
+ 'safe': do_mark_safe,
+ 'select': do_select,
+ 'selectattr': do_selectattr,
+ 'slice': do_slice,
+ 'sort': do_sort,
+ 'string': soft_unicode,
+ 'striptags': do_striptags,
+ 'sum': do_sum,
+ 'title': do_title,
+ 'trim': do_trim,
+ 'truncate': do_truncate,
+ 'upper': do_upper,
+ 'urlencode': do_urlencode,
+ 'urlize': do_urlize,
+ 'wordcount': do_wordcount,
+ 'wordwrap': do_wordwrap,
+ 'xmlattr': do_xmlattr,
+ 'tojson': do_tojson,
+}
diff --git a/lib/spack/external/jinja2/idtracking.py b/lib/spack/external/jinja2/idtracking.py
new file mode 100644
index 0000000000..8479b72c23
--- /dev/null
+++ b/lib/spack/external/jinja2/idtracking.py
@@ -0,0 +1,273 @@
+from jinja2.visitor import NodeVisitor
+from jinja2._compat import iteritems
+
+
+VAR_LOAD_PARAMETER = 'param'
+VAR_LOAD_RESOLVE = 'resolve'
+VAR_LOAD_ALIAS = 'alias'
+VAR_LOAD_UNDEFINED = 'undefined'
+
+
+def find_symbols(nodes, parent_symbols=None):
+ sym = Symbols(parent=parent_symbols)
+ visitor = FrameSymbolVisitor(sym)
+ for node in nodes:
+ visitor.visit(node)
+ return sym
+
+
+def symbols_for_node(node, parent_symbols=None):
+ sym = Symbols(parent=parent_symbols)
+ sym.analyze_node(node)
+ return sym
+
+
+class Symbols(object):
+
+ def __init__(self, parent=None):
+ if parent is None:
+ self.level = 0
+ else:
+ self.level = parent.level + 1
+ self.parent = parent
+ self.refs = {}
+ self.loads = {}
+ self.stores = set()
+
+ def analyze_node(self, node, **kwargs):
+ visitor = RootVisitor(self)
+ visitor.visit(node, **kwargs)
+
+ def _define_ref(self, name, load=None):
+ ident = 'l_%d_%s' % (self.level, name)
+ self.refs[name] = ident
+ if load is not None:
+ self.loads[ident] = load
+ return ident
+
+ def find_load(self, target):
+ if target in self.loads:
+ return self.loads[target]
+ if self.parent is not None:
+ return self.parent.find_load(target)
+
+ def find_ref(self, name):
+ if name in self.refs:
+ return self.refs[name]
+ if self.parent is not None:
+ return self.parent.find_ref(name)
+
+ def ref(self, name):
+ rv = self.find_ref(name)
+ if rv is None:
+ raise AssertionError('Tried to resolve a name to a reference that '
+ 'was unknown to the frame (%r)' % name)
+ return rv
+
+ def copy(self):
+ rv = object.__new__(self.__class__)
+ rv.__dict__.update(self.__dict__)
+ rv.refs = self.refs.copy()
+ rv.loads = self.loads.copy()
+ rv.stores = self.stores.copy()
+ return rv
+
+ def store(self, name):
+ self.stores.add(name)
+
+ # If we have not see the name referenced yet, we need to figure
+ # out what to set it to.
+ if name not in self.refs:
+ # If there is a parent scope we check if the name has a
+ # reference there. If it does it means we might have to alias
+ # to a variable there.
+ if self.parent is not None:
+ outer_ref = self.parent.find_ref(name)
+ if outer_ref is not None:
+ self._define_ref(name, load=(VAR_LOAD_ALIAS, outer_ref))
+ return
+
+ # Otherwise we can just set it to undefined.
+ self._define_ref(name, load=(VAR_LOAD_UNDEFINED, None))
+
+ def declare_parameter(self, name):
+ self.stores.add(name)
+ return self._define_ref(name, load=(VAR_LOAD_PARAMETER, None))
+
+ def load(self, name):
+ target = self.find_ref(name)
+ if target is None:
+ self._define_ref(name, load=(VAR_LOAD_RESOLVE, name))
+
+ def branch_update(self, branch_symbols):
+ stores = {}
+ for branch in branch_symbols:
+ for target in branch.stores:
+ if target in self.stores:
+ continue
+ stores[target] = stores.get(target, 0) + 1
+
+ for sym in branch_symbols:
+ self.refs.update(sym.refs)
+ self.loads.update(sym.loads)
+ self.stores.update(sym.stores)
+
+ for name, branch_count in iteritems(stores):
+ if branch_count == len(branch_symbols):
+ continue
+ target = self.find_ref(name)
+ assert target is not None, 'should not happen'
+
+ if self.parent is not None:
+ outer_target = self.parent.find_ref(name)
+ if outer_target is not None:
+ self.loads[target] = (VAR_LOAD_ALIAS, outer_target)
+ continue
+ self.loads[target] = (VAR_LOAD_RESOLVE, name)
+
+ def dump_stores(self):
+ rv = {}
+ node = self
+ while node is not None:
+ for name in node.stores:
+ if name not in rv:
+ rv[name] = self.find_ref(name)
+ node = node.parent
+ return rv
+
+ def dump_param_targets(self):
+ rv = set()
+ node = self
+ while node is not None:
+ for target, (instr, _) in iteritems(self.loads):
+ if instr == VAR_LOAD_PARAMETER:
+ rv.add(target)
+ node = node.parent
+ return rv
+
+
+class RootVisitor(NodeVisitor):
+
+ def __init__(self, symbols):
+ self.sym_visitor = FrameSymbolVisitor(symbols)
+
+ def _simple_visit(self, node, **kwargs):
+ for child in node.iter_child_nodes():
+ self.sym_visitor.visit(child)
+
+ visit_Template = visit_Block = visit_Macro = visit_FilterBlock = \
+ visit_Scope = visit_If = visit_ScopedEvalContextModifier = \
+ _simple_visit
+
+ def visit_AssignBlock(self, node, **kwargs):
+ for child in node.body:
+ self.sym_visitor.visit(child)
+
+ def visit_CallBlock(self, node, **kwargs):
+ for child in node.iter_child_nodes(exclude=('call',)):
+ self.sym_visitor.visit(child)
+
+ def visit_For(self, node, for_branch='body', **kwargs):
+ if for_branch == 'body':
+ self.sym_visitor.visit(node.target, store_as_param=True)
+ branch = node.body
+ elif for_branch == 'else':
+ branch = node.else_
+ elif for_branch == 'test':
+ self.sym_visitor.visit(node.target, store_as_param=True)
+ if node.test is not None:
+ self.sym_visitor.visit(node.test)
+ return
+ else:
+ raise RuntimeError('Unknown for branch')
+ for item in branch or ():
+ self.sym_visitor.visit(item)
+
+ def visit_With(self, node, **kwargs):
+ for target in node.targets:
+ self.sym_visitor.visit(target)
+ for child in node.body:
+ self.sym_visitor.visit(child)
+
+ def generic_visit(self, node, *args, **kwargs):
+ raise NotImplementedError('Cannot find symbols for %r' %
+ node.__class__.__name__)
+
+
+class FrameSymbolVisitor(NodeVisitor):
+ """A visitor for `Frame.inspect`."""
+
+ def __init__(self, symbols):
+ self.symbols = symbols
+
+ def visit_Name(self, node, store_as_param=False, **kwargs):
+ """All assignments to names go through this function."""
+ if store_as_param or node.ctx == 'param':
+ self.symbols.declare_parameter(node.name)
+ elif node.ctx == 'store':
+ self.symbols.store(node.name)
+ elif node.ctx == 'load':
+ self.symbols.load(node.name)
+
+ def visit_If(self, node, **kwargs):
+ self.visit(node.test, **kwargs)
+
+ original_symbols = self.symbols
+
+ def inner_visit(nodes):
+ self.symbols = rv = original_symbols.copy()
+ for subnode in nodes:
+ self.visit(subnode, **kwargs)
+ self.symbols = original_symbols
+ return rv
+
+ body_symbols = inner_visit(node.body)
+ else_symbols = inner_visit(node.else_ or ())
+
+ self.symbols.branch_update([body_symbols, else_symbols])
+
+ def visit_Macro(self, node, **kwargs):
+ self.symbols.store(node.name)
+
+ def visit_Import(self, node, **kwargs):
+ self.generic_visit(node, **kwargs)
+ self.symbols.store(node.target)
+
+ def visit_FromImport(self, node, **kwargs):
+ self.generic_visit(node, **kwargs)
+ for name in node.names:
+ if isinstance(name, tuple):
+ self.symbols.store(name[1])
+ else:
+ self.symbols.store(name)
+
+ def visit_Assign(self, node, **kwargs):
+ """Visit assignments in the correct order."""
+ self.visit(node.node, **kwargs)
+ self.visit(node.target, **kwargs)
+
+ def visit_For(self, node, **kwargs):
+ """Visiting stops at for blocks. However the block sequence
+ is visited as part of the outer scope.
+ """
+ self.visit(node.iter, **kwargs)
+
+ def visit_CallBlock(self, node, **kwargs):
+ self.visit(node.call, **kwargs)
+
+ def visit_FilterBlock(self, node, **kwargs):
+ self.visit(node.filter, **kwargs)
+
+ def visit_With(self, node, **kwargs):
+ for target in node.values:
+ self.visit(target)
+
+ def visit_AssignBlock(self, node, **kwargs):
+ """Stop visiting at block assigns."""
+ self.visit(node.target, **kwargs)
+
+ def visit_Scope(self, node, **kwargs):
+ """Stop visiting at scopes."""
+
+ def visit_Block(self, node, **kwargs):
+ """Stop visiting at blocks."""
diff --git a/lib/spack/external/jinja2/lexer.py b/lib/spack/external/jinja2/lexer.py
new file mode 100644
index 0000000000..30e82fb019
--- /dev/null
+++ b/lib/spack/external/jinja2/lexer.py
@@ -0,0 +1,737 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.lexer
+ ~~~~~~~~~~~~
+
+ This module implements a Jinja / Python combination lexer. The
+ `Lexer` class provided by this module is used to do some preprocessing
+ for Jinja.
+
+ On the one hand it filters out invalid operators like the bitshift
+ operators we don't allow in templates. On the other hand it separates
+ template code and python code in expressions.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import re
+import sys
+
+from operator import itemgetter
+from collections import deque
+from jinja2.exceptions import TemplateSyntaxError
+from jinja2.utils import LRUCache
+from jinja2._compat import iteritems, implements_iterator, text_type, intern
+
+
+# cache for the lexers. Exists in order to be able to have multiple
+# environments with the same lexer
+_lexer_cache = LRUCache(50)
+
+# static regular expressions
+whitespace_re = re.compile(r'\s+', re.U)
+string_re = re.compile(r"('([^'\\]*(?:\\.[^'\\]*)*)'"
+ r'|"([^"\\]*(?:\\.[^"\\]*)*)")', re.S)
+integer_re = re.compile(r'\d+')
+
+def _make_name_re():
+ try:
+ compile('föö', '<unknown>', 'eval')
+ except SyntaxError:
+ return re.compile(r'\b[a-zA-Z_][a-zA-Z0-9_]*\b')
+
+ import jinja2
+ from jinja2 import _stringdefs
+ name_re = re.compile(r'[%s][%s]*' % (_stringdefs.xid_start,
+ _stringdefs.xid_continue))
+
+ # Save some memory here
+ sys.modules.pop('jinja2._stringdefs')
+ del _stringdefs
+ del jinja2._stringdefs
+
+ return name_re
+
+# we use the unicode identifier rule if this python version is able
+# to handle unicode identifiers, otherwise the standard ASCII one.
+name_re = _make_name_re()
+del _make_name_re
+
+float_re = re.compile(r'(?<!\.)\d+\.\d+')
+newline_re = re.compile(r'(\r\n|\r|\n)')
+
+# internal the tokens and keep references to them
+TOKEN_ADD = intern('add')
+TOKEN_ASSIGN = intern('assign')
+TOKEN_COLON = intern('colon')
+TOKEN_COMMA = intern('comma')
+TOKEN_DIV = intern('div')
+TOKEN_DOT = intern('dot')
+TOKEN_EQ = intern('eq')
+TOKEN_FLOORDIV = intern('floordiv')
+TOKEN_GT = intern('gt')
+TOKEN_GTEQ = intern('gteq')
+TOKEN_LBRACE = intern('lbrace')
+TOKEN_LBRACKET = intern('lbracket')
+TOKEN_LPAREN = intern('lparen')
+TOKEN_LT = intern('lt')
+TOKEN_LTEQ = intern('lteq')
+TOKEN_MOD = intern('mod')
+TOKEN_MUL = intern('mul')
+TOKEN_NE = intern('ne')
+TOKEN_PIPE = intern('pipe')
+TOKEN_POW = intern('pow')
+TOKEN_RBRACE = intern('rbrace')
+TOKEN_RBRACKET = intern('rbracket')
+TOKEN_RPAREN = intern('rparen')
+TOKEN_SEMICOLON = intern('semicolon')
+TOKEN_SUB = intern('sub')
+TOKEN_TILDE = intern('tilde')
+TOKEN_WHITESPACE = intern('whitespace')
+TOKEN_FLOAT = intern('float')
+TOKEN_INTEGER = intern('integer')
+TOKEN_NAME = intern('name')
+TOKEN_STRING = intern('string')
+TOKEN_OPERATOR = intern('operator')
+TOKEN_BLOCK_BEGIN = intern('block_begin')
+TOKEN_BLOCK_END = intern('block_end')
+TOKEN_VARIABLE_BEGIN = intern('variable_begin')
+TOKEN_VARIABLE_END = intern('variable_end')
+TOKEN_RAW_BEGIN = intern('raw_begin')
+TOKEN_RAW_END = intern('raw_end')
+TOKEN_COMMENT_BEGIN = intern('comment_begin')
+TOKEN_COMMENT_END = intern('comment_end')
+TOKEN_COMMENT = intern('comment')
+TOKEN_LINESTATEMENT_BEGIN = intern('linestatement_begin')
+TOKEN_LINESTATEMENT_END = intern('linestatement_end')
+TOKEN_LINECOMMENT_BEGIN = intern('linecomment_begin')
+TOKEN_LINECOMMENT_END = intern('linecomment_end')
+TOKEN_LINECOMMENT = intern('linecomment')
+TOKEN_DATA = intern('data')
+TOKEN_INITIAL = intern('initial')
+TOKEN_EOF = intern('eof')
+
+# bind operators to token types
+operators = {
+ '+': TOKEN_ADD,
+ '-': TOKEN_SUB,
+ '/': TOKEN_DIV,
+ '//': TOKEN_FLOORDIV,
+ '*': TOKEN_MUL,
+ '%': TOKEN_MOD,
+ '**': TOKEN_POW,
+ '~': TOKEN_TILDE,
+ '[': TOKEN_LBRACKET,
+ ']': TOKEN_RBRACKET,
+ '(': TOKEN_LPAREN,
+ ')': TOKEN_RPAREN,
+ '{': TOKEN_LBRACE,
+ '}': TOKEN_RBRACE,
+ '==': TOKEN_EQ,
+ '!=': TOKEN_NE,
+ '>': TOKEN_GT,
+ '>=': TOKEN_GTEQ,
+ '<': TOKEN_LT,
+ '<=': TOKEN_LTEQ,
+ '=': TOKEN_ASSIGN,
+ '.': TOKEN_DOT,
+ ':': TOKEN_COLON,
+ '|': TOKEN_PIPE,
+ ',': TOKEN_COMMA,
+ ';': TOKEN_SEMICOLON
+}
+
+reverse_operators = dict([(v, k) for k, v in iteritems(operators)])
+assert len(operators) == len(reverse_operators), 'operators dropped'
+operator_re = re.compile('(%s)' % '|'.join(re.escape(x) for x in
+ sorted(operators, key=lambda x: -len(x))))
+
+ignored_tokens = frozenset([TOKEN_COMMENT_BEGIN, TOKEN_COMMENT,
+ TOKEN_COMMENT_END, TOKEN_WHITESPACE,
+ TOKEN_LINECOMMENT_BEGIN, TOKEN_LINECOMMENT_END,
+ TOKEN_LINECOMMENT])
+ignore_if_empty = frozenset([TOKEN_WHITESPACE, TOKEN_DATA,
+ TOKEN_COMMENT, TOKEN_LINECOMMENT])
+
+
+def _describe_token_type(token_type):
+ if token_type in reverse_operators:
+ return reverse_operators[token_type]
+ return {
+ TOKEN_COMMENT_BEGIN: 'begin of comment',
+ TOKEN_COMMENT_END: 'end of comment',
+ TOKEN_COMMENT: 'comment',
+ TOKEN_LINECOMMENT: 'comment',
+ TOKEN_BLOCK_BEGIN: 'begin of statement block',
+ TOKEN_BLOCK_END: 'end of statement block',
+ TOKEN_VARIABLE_BEGIN: 'begin of print statement',
+ TOKEN_VARIABLE_END: 'end of print statement',
+ TOKEN_LINESTATEMENT_BEGIN: 'begin of line statement',
+ TOKEN_LINESTATEMENT_END: 'end of line statement',
+ TOKEN_DATA: 'template data / text',
+ TOKEN_EOF: 'end of template'
+ }.get(token_type, token_type)
+
+
+def describe_token(token):
+ """Returns a description of the token."""
+ if token.type == 'name':
+ return token.value
+ return _describe_token_type(token.type)
+
+
+def describe_token_expr(expr):
+ """Like `describe_token` but for token expressions."""
+ if ':' in expr:
+ type, value = expr.split(':', 1)
+ if type == 'name':
+ return value
+ else:
+ type = expr
+ return _describe_token_type(type)
+
+
+def count_newlines(value):
+ """Count the number of newline characters in the string. This is
+ useful for extensions that filter a stream.
+ """
+ return len(newline_re.findall(value))
+
+
+def compile_rules(environment):
+ """Compiles all the rules from the environment into a list of rules."""
+ e = re.escape
+ rules = [
+ (len(environment.comment_start_string), 'comment',
+ e(environment.comment_start_string)),
+ (len(environment.block_start_string), 'block',
+ e(environment.block_start_string)),
+ (len(environment.variable_start_string), 'variable',
+ e(environment.variable_start_string))
+ ]
+
+ if environment.line_statement_prefix is not None:
+ rules.append((len(environment.line_statement_prefix), 'linestatement',
+ r'^[ \t\v]*' + e(environment.line_statement_prefix)))
+ if environment.line_comment_prefix is not None:
+ rules.append((len(environment.line_comment_prefix), 'linecomment',
+ r'(?:^|(?<=\S))[^\S\r\n]*' +
+ e(environment.line_comment_prefix)))
+
+ return [x[1:] for x in sorted(rules, reverse=True)]
+
+
+class Failure(object):
+ """Class that raises a `TemplateSyntaxError` if called.
+ Used by the `Lexer` to specify known errors.
+ """
+
+ def __init__(self, message, cls=TemplateSyntaxError):
+ self.message = message
+ self.error_class = cls
+
+ def __call__(self, lineno, filename):
+ raise self.error_class(self.message, lineno, filename)
+
+
+class Token(tuple):
+ """Token class."""
+ __slots__ = ()
+ lineno, type, value = (property(itemgetter(x)) for x in range(3))
+
+ def __new__(cls, lineno, type, value):
+ return tuple.__new__(cls, (lineno, intern(str(type)), value))
+
+ def __str__(self):
+ if self.type in reverse_operators:
+ return reverse_operators[self.type]
+ elif self.type == 'name':
+ return self.value
+ return self.type
+
+ def test(self, expr):
+ """Test a token against a token expression. This can either be a
+ token type or ``'token_type:token_value'``. This can only test
+ against string values and types.
+ """
+ # here we do a regular string equality check as test_any is usually
+ # passed an iterable of not interned strings.
+ if self.type == expr:
+ return True
+ elif ':' in expr:
+ return expr.split(':', 1) == [self.type, self.value]
+ return False
+
+ def test_any(self, *iterable):
+ """Test against multiple token expressions."""
+ for expr in iterable:
+ if self.test(expr):
+ return True
+ return False
+
+ def __repr__(self):
+ return 'Token(%r, %r, %r)' % (
+ self.lineno,
+ self.type,
+ self.value
+ )
+
+
+@implements_iterator
+class TokenStreamIterator(object):
+ """The iterator for tokenstreams. Iterate over the stream
+ until the eof token is reached.
+ """
+
+ def __init__(self, stream):
+ self.stream = stream
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ token = self.stream.current
+ if token.type is TOKEN_EOF:
+ self.stream.close()
+ raise StopIteration()
+ next(self.stream)
+ return token
+
+
+@implements_iterator
+class TokenStream(object):
+ """A token stream is an iterable that yields :class:`Token`\\s. The
+ parser however does not iterate over it but calls :meth:`next` to go
+ one token ahead. The current active token is stored as :attr:`current`.
+ """
+
+ def __init__(self, generator, name, filename):
+ self._iter = iter(generator)
+ self._pushed = deque()
+ self.name = name
+ self.filename = filename
+ self.closed = False
+ self.current = Token(1, TOKEN_INITIAL, '')
+ next(self)
+
+ def __iter__(self):
+ return TokenStreamIterator(self)
+
+ def __bool__(self):
+ return bool(self._pushed) or self.current.type is not TOKEN_EOF
+ __nonzero__ = __bool__ # py2
+
+ eos = property(lambda x: not x, doc="Are we at the end of the stream?")
+
+ def push(self, token):
+ """Push a token back to the stream."""
+ self._pushed.append(token)
+
+ def look(self):
+ """Look at the next token."""
+ old_token = next(self)
+ result = self.current
+ self.push(result)
+ self.current = old_token
+ return result
+
+ def skip(self, n=1):
+ """Got n tokens ahead."""
+ for x in range(n):
+ next(self)
+
+ def next_if(self, expr):
+ """Perform the token test and return the token if it matched.
+ Otherwise the return value is `None`.
+ """
+ if self.current.test(expr):
+ return next(self)
+
+ def skip_if(self, expr):
+ """Like :meth:`next_if` but only returns `True` or `False`."""
+ return self.next_if(expr) is not None
+
+ def __next__(self):
+ """Go one token ahead and return the old one"""
+ rv = self.current
+ if self._pushed:
+ self.current = self._pushed.popleft()
+ elif self.current.type is not TOKEN_EOF:
+ try:
+ self.current = next(self._iter)
+ except StopIteration:
+ self.close()
+ return rv
+
+ def close(self):
+ """Close the stream."""
+ self.current = Token(self.current.lineno, TOKEN_EOF, '')
+ self._iter = None
+ self.closed = True
+
+ def expect(self, expr):
+ """Expect a given token type and return it. This accepts the same
+ argument as :meth:`jinja2.lexer.Token.test`.
+ """
+ if not self.current.test(expr):
+ expr = describe_token_expr(expr)
+ if self.current.type is TOKEN_EOF:
+ raise TemplateSyntaxError('unexpected end of template, '
+ 'expected %r.' % expr,
+ self.current.lineno,
+ self.name, self.filename)
+ raise TemplateSyntaxError("expected token %r, got %r" %
+ (expr, describe_token(self.current)),
+ self.current.lineno,
+ self.name, self.filename)
+ try:
+ return self.current
+ finally:
+ next(self)
+
+
+def get_lexer(environment):
+ """Return a lexer which is probably cached."""
+ key = (environment.block_start_string,
+ environment.block_end_string,
+ environment.variable_start_string,
+ environment.variable_end_string,
+ environment.comment_start_string,
+ environment.comment_end_string,
+ environment.line_statement_prefix,
+ environment.line_comment_prefix,
+ environment.trim_blocks,
+ environment.lstrip_blocks,
+ environment.newline_sequence,
+ environment.keep_trailing_newline)
+ lexer = _lexer_cache.get(key)
+ if lexer is None:
+ lexer = Lexer(environment)
+ _lexer_cache[key] = lexer
+ return lexer
+
+
+class Lexer(object):
+ """Class that implements a lexer for a given environment. Automatically
+ created by the environment class, usually you don't have to do that.
+
+ Note that the lexer is not automatically bound to an environment.
+ Multiple environments can share the same lexer.
+ """
+
+ def __init__(self, environment):
+ # shortcuts
+ c = lambda x: re.compile(x, re.M | re.S)
+ e = re.escape
+
+ # lexing rules for tags
+ tag_rules = [
+ (whitespace_re, TOKEN_WHITESPACE, None),
+ (float_re, TOKEN_FLOAT, None),
+ (integer_re, TOKEN_INTEGER, None),
+ (name_re, TOKEN_NAME, None),
+ (string_re, TOKEN_STRING, None),
+ (operator_re, TOKEN_OPERATOR, None)
+ ]
+
+ # assemble the root lexing rule. because "|" is ungreedy
+ # we have to sort by length so that the lexer continues working
+ # as expected when we have parsing rules like <% for block and
+ # <%= for variables. (if someone wants asp like syntax)
+ # variables are just part of the rules if variable processing
+ # is required.
+ root_tag_rules = compile_rules(environment)
+
+ # block suffix if trimming is enabled
+ block_suffix_re = environment.trim_blocks and '\\n?' or ''
+
+ # strip leading spaces if lstrip_blocks is enabled
+ prefix_re = {}
+ if environment.lstrip_blocks:
+ # use '{%+' to manually disable lstrip_blocks behavior
+ no_lstrip_re = e('+')
+ # detect overlap between block and variable or comment strings
+ block_diff = c(r'^%s(.*)' % e(environment.block_start_string))
+ # make sure we don't mistake a block for a variable or a comment
+ m = block_diff.match(environment.comment_start_string)
+ no_lstrip_re += m and r'|%s' % e(m.group(1)) or ''
+ m = block_diff.match(environment.variable_start_string)
+ no_lstrip_re += m and r'|%s' % e(m.group(1)) or ''
+
+ # detect overlap between comment and variable strings
+ comment_diff = c(r'^%s(.*)' % e(environment.comment_start_string))
+ m = comment_diff.match(environment.variable_start_string)
+ no_variable_re = m and r'(?!%s)' % e(m.group(1)) or ''
+
+ lstrip_re = r'^[ \t]*'
+ block_prefix_re = r'%s%s(?!%s)|%s\+?' % (
+ lstrip_re,
+ e(environment.block_start_string),
+ no_lstrip_re,
+ e(environment.block_start_string),
+ )
+ comment_prefix_re = r'%s%s%s|%s\+?' % (
+ lstrip_re,
+ e(environment.comment_start_string),
+ no_variable_re,
+ e(environment.comment_start_string),
+ )
+ prefix_re['block'] = block_prefix_re
+ prefix_re['comment'] = comment_prefix_re
+ else:
+ block_prefix_re = '%s' % e(environment.block_start_string)
+
+ self.newline_sequence = environment.newline_sequence
+ self.keep_trailing_newline = environment.keep_trailing_newline
+
+ # global lexing rules
+ self.rules = {
+ 'root': [
+ # directives
+ (c('(.*?)(?:%s)' % '|'.join(
+ [r'(?P<raw_begin>(?:\s*%s\-|%s)\s*raw\s*(?:\-%s\s*|%s))' % (
+ e(environment.block_start_string),
+ block_prefix_re,
+ e(environment.block_end_string),
+ e(environment.block_end_string)
+ )] + [
+ r'(?P<%s_begin>\s*%s\-|%s)' % (n, r, prefix_re.get(n,r))
+ for n, r in root_tag_rules
+ ])), (TOKEN_DATA, '#bygroup'), '#bygroup'),
+ # data
+ (c('.+'), TOKEN_DATA, None)
+ ],
+ # comments
+ TOKEN_COMMENT_BEGIN: [
+ (c(r'(.*?)((?:\-%s\s*|%s)%s)' % (
+ e(environment.comment_end_string),
+ e(environment.comment_end_string),
+ block_suffix_re
+ )), (TOKEN_COMMENT, TOKEN_COMMENT_END), '#pop'),
+ (c('(.)'), (Failure('Missing end of comment tag'),), None)
+ ],
+ # blocks
+ TOKEN_BLOCK_BEGIN: [
+ (c(r'(?:\-%s\s*|%s)%s' % (
+ e(environment.block_end_string),
+ e(environment.block_end_string),
+ block_suffix_re
+ )), TOKEN_BLOCK_END, '#pop'),
+ ] + tag_rules,
+ # variables
+ TOKEN_VARIABLE_BEGIN: [
+ (c(r'\-%s\s*|%s' % (
+ e(environment.variable_end_string),
+ e(environment.variable_end_string)
+ )), TOKEN_VARIABLE_END, '#pop')
+ ] + tag_rules,
+ # raw block
+ TOKEN_RAW_BEGIN: [
+ (c(r'(.*?)((?:\s*%s\-|%s)\s*endraw\s*(?:\-%s\s*|%s%s))' % (
+ e(environment.block_start_string),
+ block_prefix_re,
+ e(environment.block_end_string),
+ e(environment.block_end_string),
+ block_suffix_re
+ )), (TOKEN_DATA, TOKEN_RAW_END), '#pop'),
+ (c('(.)'), (Failure('Missing end of raw directive'),), None)
+ ],
+ # line statements
+ TOKEN_LINESTATEMENT_BEGIN: [
+ (c(r'\s*(\n|$)'), TOKEN_LINESTATEMENT_END, '#pop')
+ ] + tag_rules,
+ # line comments
+ TOKEN_LINECOMMENT_BEGIN: [
+ (c(r'(.*?)()(?=\n|$)'), (TOKEN_LINECOMMENT,
+ TOKEN_LINECOMMENT_END), '#pop')
+ ]
+ }
+
+ def _normalize_newlines(self, value):
+ """Called for strings and template data to normalize it to unicode."""
+ return newline_re.sub(self.newline_sequence, value)
+
+ def tokenize(self, source, name=None, filename=None, state=None):
+ """Calls tokeniter + tokenize and wraps it in a token stream.
+ """
+ stream = self.tokeniter(source, name, filename, state)
+ return TokenStream(self.wrap(stream, name, filename), name, filename)
+
+ def wrap(self, stream, name=None, filename=None):
+ """This is called with the stream as returned by `tokenize` and wraps
+ every token in a :class:`Token` and converts the value.
+ """
+ for lineno, token, value in stream:
+ if token in ignored_tokens:
+ continue
+ elif token == 'linestatement_begin':
+ token = 'block_begin'
+ elif token == 'linestatement_end':
+ token = 'block_end'
+ # we are not interested in those tokens in the parser
+ elif token in ('raw_begin', 'raw_end'):
+ continue
+ elif token == 'data':
+ value = self._normalize_newlines(value)
+ elif token == 'keyword':
+ token = value
+ elif token == 'name':
+ value = str(value)
+ elif token == 'string':
+ # try to unescape string
+ try:
+ value = self._normalize_newlines(value[1:-1]) \
+ .encode('ascii', 'backslashreplace') \
+ .decode('unicode-escape')
+ except Exception as e:
+ msg = str(e).split(':')[-1].strip()
+ raise TemplateSyntaxError(msg, lineno, name, filename)
+ elif token == 'integer':
+ value = int(value)
+ elif token == 'float':
+ value = float(value)
+ elif token == 'operator':
+ token = operators[value]
+ yield Token(lineno, token, value)
+
+ def tokeniter(self, source, name, filename=None, state=None):
+ """This method tokenizes the text and returns the tokens in a
+ generator. Use this method if you just want to tokenize a template.
+ """
+ source = text_type(source)
+ lines = source.splitlines()
+ if self.keep_trailing_newline and source:
+ for newline in ('\r\n', '\r', '\n'):
+ if source.endswith(newline):
+ lines.append('')
+ break
+ source = '\n'.join(lines)
+ pos = 0
+ lineno = 1
+ stack = ['root']
+ if state is not None and state != 'root':
+ assert state in ('variable', 'block'), 'invalid state'
+ stack.append(state + '_begin')
+ else:
+ state = 'root'
+ statetokens = self.rules[stack[-1]]
+ source_length = len(source)
+
+ balancing_stack = []
+
+ while 1:
+ # tokenizer loop
+ for regex, tokens, new_state in statetokens:
+ m = regex.match(source, pos)
+ # if no match we try again with the next rule
+ if m is None:
+ continue
+
+ # we only match blocks and variables if braces / parentheses
+ # are balanced. continue parsing with the lower rule which
+ # is the operator rule. do this only if the end tags look
+ # like operators
+ if balancing_stack and \
+ tokens in ('variable_end', 'block_end',
+ 'linestatement_end'):
+ continue
+
+ # tuples support more options
+ if isinstance(tokens, tuple):
+ for idx, token in enumerate(tokens):
+ # failure group
+ if token.__class__ is Failure:
+ raise token(lineno, filename)
+ # bygroup is a bit more complex, in that case we
+ # yield for the current token the first named
+ # group that matched
+ elif token == '#bygroup':
+ for key, value in iteritems(m.groupdict()):
+ if value is not None:
+ yield lineno, key, value
+ lineno += value.count('\n')
+ break
+ else:
+ raise RuntimeError('%r wanted to resolve '
+ 'the token dynamically'
+ ' but no group matched'
+ % regex)
+ # normal group
+ else:
+ data = m.group(idx + 1)
+ if data or token not in ignore_if_empty:
+ yield lineno, token, data
+ lineno += data.count('\n')
+
+ # strings as token just are yielded as it.
+ else:
+ data = m.group()
+ # update brace/parentheses balance
+ if tokens == 'operator':
+ if data == '{':
+ balancing_stack.append('}')
+ elif data == '(':
+ balancing_stack.append(')')
+ elif data == '[':
+ balancing_stack.append(']')
+ elif data in ('}', ')', ']'):
+ if not balancing_stack:
+ raise TemplateSyntaxError('unexpected \'%s\'' %
+ data, lineno, name,
+ filename)
+ expected_op = balancing_stack.pop()
+ if expected_op != data:
+ raise TemplateSyntaxError('unexpected \'%s\', '
+ 'expected \'%s\'' %
+ (data, expected_op),
+ lineno, name,
+ filename)
+ # yield items
+ if data or tokens not in ignore_if_empty:
+ yield lineno, tokens, data
+ lineno += data.count('\n')
+
+ # fetch new position into new variable so that we can check
+ # if there is a internal parsing error which would result
+ # in an infinite loop
+ pos2 = m.end()
+
+ # handle state changes
+ if new_state is not None:
+ # remove the uppermost state
+ if new_state == '#pop':
+ stack.pop()
+ # resolve the new state by group checking
+ elif new_state == '#bygroup':
+ for key, value in iteritems(m.groupdict()):
+ if value is not None:
+ stack.append(key)
+ break
+ else:
+ raise RuntimeError('%r wanted to resolve the '
+ 'new state dynamically but'
+ ' no group matched' %
+ regex)
+ # direct state name given
+ else:
+ stack.append(new_state)
+ statetokens = self.rules[stack[-1]]
+ # we are still at the same position and no stack change.
+ # this means a loop without break condition, avoid that and
+ # raise error
+ elif pos2 == pos:
+ raise RuntimeError('%r yielded empty string without '
+ 'stack change' % regex)
+ # publish new function and start again
+ pos = pos2
+ break
+ # if loop terminated without break we haven't found a single match
+ # either we are at the end of the file or we have a problem
+ else:
+ # end of text
+ if pos >= source_length:
+ return
+ # something went wrong
+ raise TemplateSyntaxError('unexpected char %r at %d' %
+ (source[pos], pos), lineno,
+ name, filename)
diff --git a/lib/spack/external/jinja2/loaders.py b/lib/spack/external/jinja2/loaders.py
new file mode 100644
index 0000000000..4c79793760
--- /dev/null
+++ b/lib/spack/external/jinja2/loaders.py
@@ -0,0 +1,481 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.loaders
+ ~~~~~~~~~~~~~~
+
+ Jinja loader classes.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import os
+import sys
+import weakref
+from types import ModuleType
+from os import path
+from hashlib import sha1
+from jinja2.exceptions import TemplateNotFound
+from jinja2.utils import open_if_exists, internalcode
+from jinja2._compat import string_types, iteritems
+
+
+def split_template_path(template):
+ """Split a path into segments and perform a sanity check. If it detects
+ '..' in the path it will raise a `TemplateNotFound` error.
+ """
+ pieces = []
+ for piece in template.split('/'):
+ if path.sep in piece \
+ or (path.altsep and path.altsep in piece) or \
+ piece == path.pardir:
+ raise TemplateNotFound(template)
+ elif piece and piece != '.':
+ pieces.append(piece)
+ return pieces
+
+
+class BaseLoader(object):
+ """Baseclass for all loaders. Subclass this and override `get_source` to
+ implement a custom loading mechanism. The environment provides a
+ `get_template` method that calls the loader's `load` method to get the
+ :class:`Template` object.
+
+ A very basic example for a loader that looks up templates on the file
+ system could look like this::
+
+ from jinja2 import BaseLoader, TemplateNotFound
+ from os.path import join, exists, getmtime
+
+ class MyLoader(BaseLoader):
+
+ def __init__(self, path):
+ self.path = path
+
+ def get_source(self, environment, template):
+ path = join(self.path, template)
+ if not exists(path):
+ raise TemplateNotFound(template)
+ mtime = getmtime(path)
+ with file(path) as f:
+ source = f.read().decode('utf-8')
+ return source, path, lambda: mtime == getmtime(path)
+ """
+
+ #: if set to `False` it indicates that the loader cannot provide access
+ #: to the source of templates.
+ #:
+ #: .. versionadded:: 2.4
+ has_source_access = True
+
+ def get_source(self, environment, template):
+ """Get the template source, filename and reload helper for a template.
+ It's passed the environment and template name and has to return a
+ tuple in the form ``(source, filename, uptodate)`` or raise a
+ `TemplateNotFound` error if it can't locate the template.
+
+ The source part of the returned tuple must be the source of the
+ template as unicode string or a ASCII bytestring. The filename should
+ be the name of the file on the filesystem if it was loaded from there,
+ otherwise `None`. The filename is used by python for the tracebacks
+ if no loader extension is used.
+
+ The last item in the tuple is the `uptodate` function. If auto
+ reloading is enabled it's always called to check if the template
+ changed. No arguments are passed so the function must store the
+ old state somewhere (for example in a closure). If it returns `False`
+ the template will be reloaded.
+ """
+ if not self.has_source_access:
+ raise RuntimeError('%s cannot provide access to the source' %
+ self.__class__.__name__)
+ raise TemplateNotFound(template)
+
+ def list_templates(self):
+ """Iterates over all templates. If the loader does not support that
+ it should raise a :exc:`TypeError` which is the default behavior.
+ """
+ raise TypeError('this loader cannot iterate over all templates')
+
+ @internalcode
+ def load(self, environment, name, globals=None):
+ """Loads a template. This method looks up the template in the cache
+ or loads one by calling :meth:`get_source`. Subclasses should not
+ override this method as loaders working on collections of other
+ loaders (such as :class:`PrefixLoader` or :class:`ChoiceLoader`)
+ will not call this method but `get_source` directly.
+ """
+ code = None
+ if globals is None:
+ globals = {}
+
+ # first we try to get the source for this template together
+ # with the filename and the uptodate function.
+ source, filename, uptodate = self.get_source(environment, name)
+
+ # try to load the code from the bytecode cache if there is a
+ # bytecode cache configured.
+ bcc = environment.bytecode_cache
+ if bcc is not None:
+ bucket = bcc.get_bucket(environment, name, filename, source)
+ code = bucket.code
+
+ # if we don't have code so far (not cached, no longer up to
+ # date) etc. we compile the template
+ if code is None:
+ code = environment.compile(source, name, filename)
+
+ # if the bytecode cache is available and the bucket doesn't
+ # have a code so far, we give the bucket the new code and put
+ # it back to the bytecode cache.
+ if bcc is not None and bucket.code is None:
+ bucket.code = code
+ bcc.set_bucket(bucket)
+
+ return environment.template_class.from_code(environment, code,
+ globals, uptodate)
+
+
+class FileSystemLoader(BaseLoader):
+ """Loads templates from the file system. This loader can find templates
+ in folders on the file system and is the preferred way to load them.
+
+ The loader takes the path to the templates as string, or if multiple
+ locations are wanted a list of them which is then looked up in the
+ given order::
+
+ >>> loader = FileSystemLoader('/path/to/templates')
+ >>> loader = FileSystemLoader(['/path/to/templates', '/other/path'])
+
+ Per default the template encoding is ``'utf-8'`` which can be changed
+ by setting the `encoding` parameter to something else.
+
+ To follow symbolic links, set the *followlinks* parameter to ``True``::
+
+ >>> loader = FileSystemLoader('/path/to/templates', followlinks=True)
+
+ .. versionchanged:: 2.8+
+ The *followlinks* parameter was added.
+ """
+
+ def __init__(self, searchpath, encoding='utf-8', followlinks=False):
+ if isinstance(searchpath, string_types):
+ searchpath = [searchpath]
+ self.searchpath = list(searchpath)
+ self.encoding = encoding
+ self.followlinks = followlinks
+
+ def get_source(self, environment, template):
+ pieces = split_template_path(template)
+ for searchpath in self.searchpath:
+ filename = path.join(searchpath, *pieces)
+ f = open_if_exists(filename)
+ if f is None:
+ continue
+ try:
+ contents = f.read().decode(self.encoding)
+ finally:
+ f.close()
+
+ mtime = path.getmtime(filename)
+
+ def uptodate():
+ try:
+ return path.getmtime(filename) == mtime
+ except OSError:
+ return False
+ return contents, filename, uptodate
+ raise TemplateNotFound(template)
+
+ def list_templates(self):
+ found = set()
+ for searchpath in self.searchpath:
+ walk_dir = os.walk(searchpath, followlinks=self.followlinks)
+ for dirpath, dirnames, filenames in walk_dir:
+ for filename in filenames:
+ template = os.path.join(dirpath, filename) \
+ [len(searchpath):].strip(os.path.sep) \
+ .replace(os.path.sep, '/')
+ if template[:2] == './':
+ template = template[2:]
+ if template not in found:
+ found.add(template)
+ return sorted(found)
+
+
+class PackageLoader(BaseLoader):
+ """Load templates from python eggs or packages. It is constructed with
+ the name of the python package and the path to the templates in that
+ package::
+
+ loader = PackageLoader('mypackage', 'views')
+
+ If the package path is not given, ``'templates'`` is assumed.
+
+ Per default the template encoding is ``'utf-8'`` which can be changed
+ by setting the `encoding` parameter to something else. Due to the nature
+ of eggs it's only possible to reload templates if the package was loaded
+ from the file system and not a zip file.
+ """
+
+ def __init__(self, package_name, package_path='templates',
+ encoding='utf-8'):
+ from pkg_resources import DefaultProvider, ResourceManager, \
+ get_provider
+ provider = get_provider(package_name)
+ self.encoding = encoding
+ self.manager = ResourceManager()
+ self.filesystem_bound = isinstance(provider, DefaultProvider)
+ self.provider = provider
+ self.package_path = package_path
+
+ def get_source(self, environment, template):
+ pieces = split_template_path(template)
+ p = '/'.join((self.package_path,) + tuple(pieces))
+ if not self.provider.has_resource(p):
+ raise TemplateNotFound(template)
+
+ filename = uptodate = None
+ if self.filesystem_bound:
+ filename = self.provider.get_resource_filename(self.manager, p)
+ mtime = path.getmtime(filename)
+ def uptodate():
+ try:
+ return path.getmtime(filename) == mtime
+ except OSError:
+ return False
+
+ source = self.provider.get_resource_string(self.manager, p)
+ return source.decode(self.encoding), filename, uptodate
+
+ def list_templates(self):
+ path = self.package_path
+ if path[:2] == './':
+ path = path[2:]
+ elif path == '.':
+ path = ''
+ offset = len(path)
+ results = []
+ def _walk(path):
+ for filename in self.provider.resource_listdir(path):
+ fullname = path + '/' + filename
+ if self.provider.resource_isdir(fullname):
+ _walk(fullname)
+ else:
+ results.append(fullname[offset:].lstrip('/'))
+ _walk(path)
+ results.sort()
+ return results
+
+
+class DictLoader(BaseLoader):
+ """Loads a template from a python dict. It's passed a dict of unicode
+ strings bound to template names. This loader is useful for unittesting:
+
+ >>> loader = DictLoader({'index.html': 'source here'})
+
+ Because auto reloading is rarely useful this is disabled per default.
+ """
+
+ def __init__(self, mapping):
+ self.mapping = mapping
+
+ def get_source(self, environment, template):
+ if template in self.mapping:
+ source = self.mapping[template]
+ return source, None, lambda: source == self.mapping.get(template)
+ raise TemplateNotFound(template)
+
+ def list_templates(self):
+ return sorted(self.mapping)
+
+
+class FunctionLoader(BaseLoader):
+ """A loader that is passed a function which does the loading. The
+ function receives the name of the template and has to return either
+ an unicode string with the template source, a tuple in the form ``(source,
+ filename, uptodatefunc)`` or `None` if the template does not exist.
+
+ >>> def load_template(name):
+ ... if name == 'index.html':
+ ... return '...'
+ ...
+ >>> loader = FunctionLoader(load_template)
+
+ The `uptodatefunc` is a function that is called if autoreload is enabled
+ and has to return `True` if the template is still up to date. For more
+ details have a look at :meth:`BaseLoader.get_source` which has the same
+ return value.
+ """
+
+ def __init__(self, load_func):
+ self.load_func = load_func
+
+ def get_source(self, environment, template):
+ rv = self.load_func(template)
+ if rv is None:
+ raise TemplateNotFound(template)
+ elif isinstance(rv, string_types):
+ return rv, None, None
+ return rv
+
+
+class PrefixLoader(BaseLoader):
+ """A loader that is passed a dict of loaders where each loader is bound
+ to a prefix. The prefix is delimited from the template by a slash per
+ default, which can be changed by setting the `delimiter` argument to
+ something else::
+
+ loader = PrefixLoader({
+ 'app1': PackageLoader('mypackage.app1'),
+ 'app2': PackageLoader('mypackage.app2')
+ })
+
+ By loading ``'app1/index.html'`` the file from the app1 package is loaded,
+ by loading ``'app2/index.html'`` the file from the second.
+ """
+
+ def __init__(self, mapping, delimiter='/'):
+ self.mapping = mapping
+ self.delimiter = delimiter
+
+ def get_loader(self, template):
+ try:
+ prefix, name = template.split(self.delimiter, 1)
+ loader = self.mapping[prefix]
+ except (ValueError, KeyError):
+ raise TemplateNotFound(template)
+ return loader, name
+
+ def get_source(self, environment, template):
+ loader, name = self.get_loader(template)
+ try:
+ return loader.get_source(environment, name)
+ except TemplateNotFound:
+ # re-raise the exception with the correct filename here.
+ # (the one that includes the prefix)
+ raise TemplateNotFound(template)
+
+ @internalcode
+ def load(self, environment, name, globals=None):
+ loader, local_name = self.get_loader(name)
+ try:
+ return loader.load(environment, local_name, globals)
+ except TemplateNotFound:
+ # re-raise the exception with the correct filename here.
+ # (the one that includes the prefix)
+ raise TemplateNotFound(name)
+
+ def list_templates(self):
+ result = []
+ for prefix, loader in iteritems(self.mapping):
+ for template in loader.list_templates():
+ result.append(prefix + self.delimiter + template)
+ return result
+
+
+class ChoiceLoader(BaseLoader):
+ """This loader works like the `PrefixLoader` just that no prefix is
+ specified. If a template could not be found by one loader the next one
+ is tried.
+
+ >>> loader = ChoiceLoader([
+ ... FileSystemLoader('/path/to/user/templates'),
+ ... FileSystemLoader('/path/to/system/templates')
+ ... ])
+
+ This is useful if you want to allow users to override builtin templates
+ from a different location.
+ """
+
+ def __init__(self, loaders):
+ self.loaders = loaders
+
+ def get_source(self, environment, template):
+ for loader in self.loaders:
+ try:
+ return loader.get_source(environment, template)
+ except TemplateNotFound:
+ pass
+ raise TemplateNotFound(template)
+
+ @internalcode
+ def load(self, environment, name, globals=None):
+ for loader in self.loaders:
+ try:
+ return loader.load(environment, name, globals)
+ except TemplateNotFound:
+ pass
+ raise TemplateNotFound(name)
+
+ def list_templates(self):
+ found = set()
+ for loader in self.loaders:
+ found.update(loader.list_templates())
+ return sorted(found)
+
+
+class _TemplateModule(ModuleType):
+ """Like a normal module but with support for weak references"""
+
+
+class ModuleLoader(BaseLoader):
+ """This loader loads templates from precompiled templates.
+
+ Example usage:
+
+ >>> loader = ChoiceLoader([
+ ... ModuleLoader('/path/to/compiled/templates'),
+ ... FileSystemLoader('/path/to/templates')
+ ... ])
+
+ Templates can be precompiled with :meth:`Environment.compile_templates`.
+ """
+
+ has_source_access = False
+
+ def __init__(self, path):
+ package_name = '_jinja2_module_templates_%x' % id(self)
+
+ # create a fake module that looks for the templates in the
+ # path given.
+ mod = _TemplateModule(package_name)
+ if isinstance(path, string_types):
+ path = [path]
+ else:
+ path = list(path)
+ mod.__path__ = path
+
+ sys.modules[package_name] = weakref.proxy(mod,
+ lambda x: sys.modules.pop(package_name, None))
+
+ # the only strong reference, the sys.modules entry is weak
+ # so that the garbage collector can remove it once the
+ # loader that created it goes out of business.
+ self.module = mod
+ self.package_name = package_name
+
+ @staticmethod
+ def get_template_key(name):
+ return 'tmpl_' + sha1(name.encode('utf-8')).hexdigest()
+
+ @staticmethod
+ def get_module_filename(name):
+ return ModuleLoader.get_template_key(name) + '.py'
+
+ @internalcode
+ def load(self, environment, name, globals=None):
+ key = self.get_template_key(name)
+ module = '%s.%s' % (self.package_name, key)
+ mod = getattr(self.module, module, None)
+ if mod is None:
+ try:
+ mod = __import__(module, None, None, ['root'])
+ except ImportError:
+ raise TemplateNotFound(name)
+
+ # remove the entry from sys.modules, we only want the attribute
+ # on the module object we have stored on the loader.
+ sys.modules.pop(module, None)
+
+ return environment.template_class.from_module_dict(
+ environment, mod.__dict__, globals)
diff --git a/lib/spack/external/jinja2/meta.py b/lib/spack/external/jinja2/meta.py
new file mode 100644
index 0000000000..7421914f77
--- /dev/null
+++ b/lib/spack/external/jinja2/meta.py
@@ -0,0 +1,106 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.meta
+ ~~~~~~~~~~~
+
+ This module implements various functions that exposes information about
+ templates that might be interesting for various kinds of applications.
+
+ :copyright: (c) 2017 by the Jinja Team, see AUTHORS for more details.
+ :license: BSD, see LICENSE for more details.
+"""
+from jinja2 import nodes
+from jinja2.compiler import CodeGenerator
+from jinja2._compat import string_types, iteritems
+
+
+class TrackingCodeGenerator(CodeGenerator):
+ """We abuse the code generator for introspection."""
+
+ def __init__(self, environment):
+ CodeGenerator.__init__(self, environment, '<introspection>',
+ '<introspection>')
+ self.undeclared_identifiers = set()
+
+ def write(self, x):
+ """Don't write."""
+
+ def enter_frame(self, frame):
+ """Remember all undeclared identifiers."""
+ CodeGenerator.enter_frame(self, frame)
+ for _, (action, param) in iteritems(frame.symbols.loads):
+ if action == 'resolve':
+ self.undeclared_identifiers.add(param)
+
+
+def find_undeclared_variables(ast):
+ """Returns a set of all variables in the AST that will be looked up from
+ the context at runtime. Because at compile time it's not known which
+ variables will be used depending on the path the execution takes at
+ runtime, all variables are returned.
+
+ >>> from jinja2 import Environment, meta
+ >>> env = Environment()
+ >>> ast = env.parse('{% set foo = 42 %}{{ bar + foo }}')
+ >>> meta.find_undeclared_variables(ast) == set(['bar'])
+ True
+
+ .. admonition:: Implementation
+
+ Internally the code generator is used for finding undeclared variables.
+ This is good to know because the code generator might raise a
+ :exc:`TemplateAssertionError` during compilation and as a matter of
+ fact this function can currently raise that exception as well.
+ """
+ codegen = TrackingCodeGenerator(ast.environment)
+ codegen.visit(ast)
+ return codegen.undeclared_identifiers
+
+
+def find_referenced_templates(ast):
+ """Finds all the referenced templates from the AST. This will return an
+ iterator over all the hardcoded template extensions, inclusions and
+ imports. If dynamic inheritance or inclusion is used, `None` will be
+ yielded.
+
+ >>> from jinja2 import Environment, meta
+ >>> env = Environment()
+ >>> ast = env.parse('{% extends "layout.html" %}{% include helper %}')
+ >>> list(meta.find_referenced_templates(ast))
+ ['layout.html', None]
+
+ This function is useful for dependency tracking. For example if you want
+ to rebuild parts of the website after a layout template has changed.
+ """
+ for node in ast.find_all((nodes.Extends, nodes.FromImport, nodes.Import,
+ nodes.Include)):
+ if not isinstance(node.template, nodes.Const):
+ # a tuple with some non consts in there
+ if isinstance(node.template, (nodes.Tuple, nodes.List)):
+ for template_name in node.template.items:
+ # something const, only yield the strings and ignore
+ # non-string consts that really just make no sense
+ if isinstance(template_name, nodes.Const):
+ if isinstance(template_name.value, string_types):
+ yield template_name.value
+ # something dynamic in there
+ else:
+ yield None
+ # something dynamic we don't know about here
+ else:
+ yield None
+ continue
+ # constant is a basestring, direct template name
+ if isinstance(node.template.value, string_types):
+ yield node.template.value
+ # a tuple or list (latter *should* not happen) made of consts,
+ # yield the consts that are strings. We could warn here for
+ # non string values
+ elif isinstance(node, nodes.Include) and \
+ isinstance(node.template.value, (tuple, list)):
+ for template_name in node.template.value:
+ if isinstance(template_name, string_types):
+ yield template_name
+ # something else we don't care about, we could warn here
+ else:
+ yield None
diff --git a/lib/spack/external/jinja2/nodes.py b/lib/spack/external/jinja2/nodes.py
new file mode 100644
index 0000000000..aa4df72380
--- /dev/null
+++ b/lib/spack/external/jinja2/nodes.py
@@ -0,0 +1,939 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.nodes
+ ~~~~~~~~~~~~
+
+ This module implements additional nodes derived from the ast base node.
+
+ It also provides some node tree helper functions like `in_lineno` and
+ `get_nodes` used by the parser and translator in order to normalize
+ python and jinja nodes.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import types
+import operator
+
+from collections import deque
+from jinja2.utils import Markup
+from jinja2._compat import izip, with_metaclass, text_type, PY2
+
+
+#: the types we support for context functions
+_context_function_types = (types.FunctionType, types.MethodType)
+
+
+_binop_to_func = {
+ '*': operator.mul,
+ '/': operator.truediv,
+ '//': operator.floordiv,
+ '**': operator.pow,
+ '%': operator.mod,
+ '+': operator.add,
+ '-': operator.sub
+}
+
+_uaop_to_func = {
+ 'not': operator.not_,
+ '+': operator.pos,
+ '-': operator.neg
+}
+
+_cmpop_to_func = {
+ 'eq': operator.eq,
+ 'ne': operator.ne,
+ 'gt': operator.gt,
+ 'gteq': operator.ge,
+ 'lt': operator.lt,
+ 'lteq': operator.le,
+ 'in': lambda a, b: a in b,
+ 'notin': lambda a, b: a not in b
+}
+
+
+class Impossible(Exception):
+ """Raised if the node could not perform a requested action."""
+
+
+class NodeType(type):
+ """A metaclass for nodes that handles the field and attribute
+ inheritance. fields and attributes from the parent class are
+ automatically forwarded to the child."""
+
+ def __new__(cls, name, bases, d):
+ for attr in 'fields', 'attributes':
+ storage = []
+ storage.extend(getattr(bases[0], attr, ()))
+ storage.extend(d.get(attr, ()))
+ assert len(bases) == 1, 'multiple inheritance not allowed'
+ assert len(storage) == len(set(storage)), 'layout conflict'
+ d[attr] = tuple(storage)
+ d.setdefault('abstract', False)
+ return type.__new__(cls, name, bases, d)
+
+
+class EvalContext(object):
+ """Holds evaluation time information. Custom attributes can be attached
+ to it in extensions.
+ """
+
+ def __init__(self, environment, template_name=None):
+ self.environment = environment
+ if callable(environment.autoescape):
+ self.autoescape = environment.autoescape(template_name)
+ else:
+ self.autoescape = environment.autoescape
+ self.volatile = False
+
+ def save(self):
+ return self.__dict__.copy()
+
+ def revert(self, old):
+ self.__dict__.clear()
+ self.__dict__.update(old)
+
+
+def get_eval_context(node, ctx):
+ if ctx is None:
+ if node.environment is None:
+ raise RuntimeError('if no eval context is passed, the '
+ 'node must have an attached '
+ 'environment.')
+ return EvalContext(node.environment)
+ return ctx
+
+
+class Node(with_metaclass(NodeType, object)):
+ """Baseclass for all Jinja2 nodes. There are a number of nodes available
+ of different types. There are four major types:
+
+ - :class:`Stmt`: statements
+ - :class:`Expr`: expressions
+ - :class:`Helper`: helper nodes
+ - :class:`Template`: the outermost wrapper node
+
+ All nodes have fields and attributes. Fields may be other nodes, lists,
+ or arbitrary values. Fields are passed to the constructor as regular
+ positional arguments, attributes as keyword arguments. Each node has
+ two attributes: `lineno` (the line number of the node) and `environment`.
+ The `environment` attribute is set at the end of the parsing process for
+ all nodes automatically.
+ """
+ fields = ()
+ attributes = ('lineno', 'environment')
+ abstract = True
+
+ def __init__(self, *fields, **attributes):
+ if self.abstract:
+ raise TypeError('abstract nodes are not instanciable')
+ if fields:
+ if len(fields) != len(self.fields):
+ if not self.fields:
+ raise TypeError('%r takes 0 arguments' %
+ self.__class__.__name__)
+ raise TypeError('%r takes 0 or %d argument%s' % (
+ self.__class__.__name__,
+ len(self.fields),
+ len(self.fields) != 1 and 's' or ''
+ ))
+ for name, arg in izip(self.fields, fields):
+ setattr(self, name, arg)
+ for attr in self.attributes:
+ setattr(self, attr, attributes.pop(attr, None))
+ if attributes:
+ raise TypeError('unknown attribute %r' %
+ next(iter(attributes)))
+
+ def iter_fields(self, exclude=None, only=None):
+ """This method iterates over all fields that are defined and yields
+ ``(key, value)`` tuples. Per default all fields are returned, but
+ it's possible to limit that to some fields by providing the `only`
+ parameter or to exclude some using the `exclude` parameter. Both
+ should be sets or tuples of field names.
+ """
+ for name in self.fields:
+ if (exclude is only is None) or \
+ (exclude is not None and name not in exclude) or \
+ (only is not None and name in only):
+ try:
+ yield name, getattr(self, name)
+ except AttributeError:
+ pass
+
+ def iter_child_nodes(self, exclude=None, only=None):
+ """Iterates over all direct child nodes of the node. This iterates
+ over all fields and yields the values of they are nodes. If the value
+ of a field is a list all the nodes in that list are returned.
+ """
+ for field, item in self.iter_fields(exclude, only):
+ if isinstance(item, list):
+ for n in item:
+ if isinstance(n, Node):
+ yield n
+ elif isinstance(item, Node):
+ yield item
+
+ def find(self, node_type):
+ """Find the first node of a given type. If no such node exists the
+ return value is `None`.
+ """
+ for result in self.find_all(node_type):
+ return result
+
+ def find_all(self, node_type):
+ """Find all the nodes of a given type. If the type is a tuple,
+ the check is performed for any of the tuple items.
+ """
+ for child in self.iter_child_nodes():
+ if isinstance(child, node_type):
+ yield child
+ for result in child.find_all(node_type):
+ yield result
+
+ def set_ctx(self, ctx):
+ """Reset the context of a node and all child nodes. Per default the
+ parser will all generate nodes that have a 'load' context as it's the
+ most common one. This method is used in the parser to set assignment
+ targets and other nodes to a store context.
+ """
+ todo = deque([self])
+ while todo:
+ node = todo.popleft()
+ if 'ctx' in node.fields:
+ node.ctx = ctx
+ todo.extend(node.iter_child_nodes())
+ return self
+
+ def set_lineno(self, lineno, override=False):
+ """Set the line numbers of the node and children."""
+ todo = deque([self])
+ while todo:
+ node = todo.popleft()
+ if 'lineno' in node.attributes:
+ if node.lineno is None or override:
+ node.lineno = lineno
+ todo.extend(node.iter_child_nodes())
+ return self
+
+ def set_environment(self, environment):
+ """Set the environment for all nodes."""
+ todo = deque([self])
+ while todo:
+ node = todo.popleft()
+ node.environment = environment
+ todo.extend(node.iter_child_nodes())
+ return self
+
+ def __eq__(self, other):
+ return type(self) is type(other) and \
+ tuple(self.iter_fields()) == tuple(other.iter_fields())
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ # Restore Python 2 hashing behavior on Python 3
+ __hash__ = object.__hash__
+
+ def __repr__(self):
+ return '%s(%s)' % (
+ self.__class__.__name__,
+ ', '.join('%s=%r' % (arg, getattr(self, arg, None)) for
+ arg in self.fields)
+ )
+
+ def dump(self):
+ def _dump(node):
+ if not isinstance(node, Node):
+ buf.append(repr(node))
+ return
+
+ buf.append('nodes.%s(' % node.__class__.__name__)
+ if not node.fields:
+ buf.append(')')
+ return
+ for idx, field in enumerate(node.fields):
+ if idx:
+ buf.append(', ')
+ value = getattr(node, field)
+ if isinstance(value, list):
+ buf.append('[')
+ for idx, item in enumerate(value):
+ if idx:
+ buf.append(', ')
+ _dump(item)
+ buf.append(']')
+ else:
+ _dump(value)
+ buf.append(')')
+ buf = []
+ _dump(self)
+ return ''.join(buf)
+
+
+
+class Stmt(Node):
+ """Base node for all statements."""
+ abstract = True
+
+
+class Helper(Node):
+ """Nodes that exist in a specific context only."""
+ abstract = True
+
+
+class Template(Node):
+ """Node that represents a template. This must be the outermost node that
+ is passed to the compiler.
+ """
+ fields = ('body',)
+
+
+class Output(Stmt):
+ """A node that holds multiple expressions which are then printed out.
+ This is used both for the `print` statement and the regular template data.
+ """
+ fields = ('nodes',)
+
+
+class Extends(Stmt):
+ """Represents an extends statement."""
+ fields = ('template',)
+
+
+class For(Stmt):
+ """The for loop. `target` is the target for the iteration (usually a
+ :class:`Name` or :class:`Tuple`), `iter` the iterable. `body` is a list
+ of nodes that are used as loop-body, and `else_` a list of nodes for the
+ `else` block. If no else node exists it has to be an empty list.
+
+ For filtered nodes an expression can be stored as `test`, otherwise `None`.
+ """
+ fields = ('target', 'iter', 'body', 'else_', 'test', 'recursive')
+
+
+class If(Stmt):
+ """If `test` is true, `body` is rendered, else `else_`."""
+ fields = ('test', 'body', 'else_')
+
+
+class Macro(Stmt):
+ """A macro definition. `name` is the name of the macro, `args` a list of
+ arguments and `defaults` a list of defaults if there are any. `body` is
+ a list of nodes for the macro body.
+ """
+ fields = ('name', 'args', 'defaults', 'body')
+
+
+class CallBlock(Stmt):
+ """Like a macro without a name but a call instead. `call` is called with
+ the unnamed macro as `caller` argument this node holds.
+ """
+ fields = ('call', 'args', 'defaults', 'body')
+
+
+class FilterBlock(Stmt):
+ """Node for filter sections."""
+ fields = ('body', 'filter')
+
+
+class With(Stmt):
+ """Specific node for with statements. In older versions of Jinja the
+ with statement was implemented on the base of the `Scope` node instead.
+
+ .. versionadded:: 2.9.3
+ """
+ fields = ('targets', 'values', 'body')
+
+
+class Block(Stmt):
+ """A node that represents a block."""
+ fields = ('name', 'body', 'scoped')
+
+
+class Include(Stmt):
+ """A node that represents the include tag."""
+ fields = ('template', 'with_context', 'ignore_missing')
+
+
+class Import(Stmt):
+ """A node that represents the import tag."""
+ fields = ('template', 'target', 'with_context')
+
+
+class FromImport(Stmt):
+ """A node that represents the from import tag. It's important to not
+ pass unsafe names to the name attribute. The compiler translates the
+ attribute lookups directly into getattr calls and does *not* use the
+ subscript callback of the interface. As exported variables may not
+ start with double underscores (which the parser asserts) this is not a
+ problem for regular Jinja code, but if this node is used in an extension
+ extra care must be taken.
+
+ The list of names may contain tuples if aliases are wanted.
+ """
+ fields = ('template', 'names', 'with_context')
+
+
+class ExprStmt(Stmt):
+ """A statement that evaluates an expression and discards the result."""
+ fields = ('node',)
+
+
+class Assign(Stmt):
+ """Assigns an expression to a target."""
+ fields = ('target', 'node')
+
+
+class AssignBlock(Stmt):
+ """Assigns a block to a target."""
+ fields = ('target', 'body')
+
+
+class Expr(Node):
+ """Baseclass for all expressions."""
+ abstract = True
+
+ def as_const(self, eval_ctx=None):
+ """Return the value of the expression as constant or raise
+ :exc:`Impossible` if this was not possible.
+
+ An :class:`EvalContext` can be provided, if none is given
+ a default context is created which requires the nodes to have
+ an attached environment.
+
+ .. versionchanged:: 2.4
+ the `eval_ctx` parameter was added.
+ """
+ raise Impossible()
+
+ def can_assign(self):
+ """Check if it's possible to assign something to this node."""
+ return False
+
+
+class BinExpr(Expr):
+ """Baseclass for all binary expressions."""
+ fields = ('left', 'right')
+ operator = None
+ abstract = True
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ # intercepted operators cannot be folded at compile time
+ if self.environment.sandboxed and \
+ self.operator in self.environment.intercepted_binops:
+ raise Impossible()
+ f = _binop_to_func[self.operator]
+ try:
+ return f(self.left.as_const(eval_ctx), self.right.as_const(eval_ctx))
+ except Exception:
+ raise Impossible()
+
+
+class UnaryExpr(Expr):
+ """Baseclass for all unary expressions."""
+ fields = ('node',)
+ operator = None
+ abstract = True
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ # intercepted operators cannot be folded at compile time
+ if self.environment.sandboxed and \
+ self.operator in self.environment.intercepted_unops:
+ raise Impossible()
+ f = _uaop_to_func[self.operator]
+ try:
+ return f(self.node.as_const(eval_ctx))
+ except Exception:
+ raise Impossible()
+
+
+class Name(Expr):
+ """Looks up a name or stores a value in a name.
+ The `ctx` of the node can be one of the following values:
+
+ - `store`: store a value in the name
+ - `load`: load that name
+ - `param`: like `store` but if the name was defined as function parameter.
+ """
+ fields = ('name', 'ctx')
+
+ def can_assign(self):
+ return self.name not in ('true', 'false', 'none',
+ 'True', 'False', 'None')
+
+
+class Literal(Expr):
+ """Baseclass for literals."""
+ abstract = True
+
+
+class Const(Literal):
+ """All constant values. The parser will return this node for simple
+ constants such as ``42`` or ``"foo"`` but it can be used to store more
+ complex values such as lists too. Only constants with a safe
+ representation (objects where ``eval(repr(x)) == x`` is true).
+ """
+ fields = ('value',)
+
+ def as_const(self, eval_ctx=None):
+ rv = self.value
+ if PY2 and type(rv) is text_type and \
+ self.environment.policies['compiler.ascii_str']:
+ try:
+ rv = rv.encode('ascii')
+ except UnicodeError:
+ pass
+ return rv
+
+ @classmethod
+ def from_untrusted(cls, value, lineno=None, environment=None):
+ """Return a const object if the value is representable as
+ constant value in the generated code, otherwise it will raise
+ an `Impossible` exception.
+ """
+ from .compiler import has_safe_repr
+ if not has_safe_repr(value):
+ raise Impossible()
+ return cls(value, lineno=lineno, environment=environment)
+
+
+class TemplateData(Literal):
+ """A constant template string."""
+ fields = ('data',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ if eval_ctx.volatile:
+ raise Impossible()
+ if eval_ctx.autoescape:
+ return Markup(self.data)
+ return self.data
+
+
+class Tuple(Literal):
+ """For loop unpacking and some other things like multiple arguments
+ for subscripts. Like for :class:`Name` `ctx` specifies if the tuple
+ is used for loading the names or storing.
+ """
+ fields = ('items', 'ctx')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return tuple(x.as_const(eval_ctx) for x in self.items)
+
+ def can_assign(self):
+ for item in self.items:
+ if not item.can_assign():
+ return False
+ return True
+
+
+class List(Literal):
+ """Any list literal such as ``[1, 2, 3]``"""
+ fields = ('items',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return [x.as_const(eval_ctx) for x in self.items]
+
+
+class Dict(Literal):
+ """Any dict literal such as ``{1: 2, 3: 4}``. The items must be a list of
+ :class:`Pair` nodes.
+ """
+ fields = ('items',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return dict(x.as_const(eval_ctx) for x in self.items)
+
+
+class Pair(Helper):
+ """A key, value pair for dicts."""
+ fields = ('key', 'value')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return self.key.as_const(eval_ctx), self.value.as_const(eval_ctx)
+
+
+class Keyword(Helper):
+ """A key, value pair for keyword arguments where key is a string."""
+ fields = ('key', 'value')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return self.key, self.value.as_const(eval_ctx)
+
+
+class CondExpr(Expr):
+ """A conditional expression (inline if expression). (``{{
+ foo if bar else baz }}``)
+ """
+ fields = ('test', 'expr1', 'expr2')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ if self.test.as_const(eval_ctx):
+ return self.expr1.as_const(eval_ctx)
+
+ # if we evaluate to an undefined object, we better do that at runtime
+ if self.expr2 is None:
+ raise Impossible()
+
+ return self.expr2.as_const(eval_ctx)
+
+
+class Filter(Expr):
+ """This node applies a filter on an expression. `name` is the name of
+ the filter, the rest of the fields are the same as for :class:`Call`.
+
+ If the `node` of a filter is `None` the contents of the last buffer are
+ filtered. Buffers are created by macros and filter blocks.
+ """
+ fields = ('node', 'name', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ if eval_ctx.volatile or self.node is None:
+ raise Impossible()
+ # we have to be careful here because we call filter_ below.
+ # if this variable would be called filter, 2to3 would wrap the
+ # call in a list beause it is assuming we are talking about the
+ # builtin filter function here which no longer returns a list in
+ # python 3. because of that, do not rename filter_ to filter!
+ filter_ = self.environment.filters.get(self.name)
+ if filter_ is None or getattr(filter_, 'contextfilter', False):
+ raise Impossible()
+
+ # We cannot constant handle async filters, so we need to make sure
+ # to not go down this path.
+ if eval_ctx.environment.is_async and \
+ getattr(filter_, 'asyncfiltervariant', False):
+ raise Impossible()
+
+ obj = self.node.as_const(eval_ctx)
+ args = [obj] + [x.as_const(eval_ctx) for x in self.args]
+ if getattr(filter_, 'evalcontextfilter', False):
+ args.insert(0, eval_ctx)
+ elif getattr(filter_, 'environmentfilter', False):
+ args.insert(0, self.environment)
+ kwargs = dict(x.as_const(eval_ctx) for x in self.kwargs)
+ if self.dyn_args is not None:
+ try:
+ args.extend(self.dyn_args.as_const(eval_ctx))
+ except Exception:
+ raise Impossible()
+ if self.dyn_kwargs is not None:
+ try:
+ kwargs.update(self.dyn_kwargs.as_const(eval_ctx))
+ except Exception:
+ raise Impossible()
+ try:
+ return filter_(*args, **kwargs)
+ except Exception:
+ raise Impossible()
+
+
+class Test(Expr):
+ """Applies a test on an expression. `name` is the name of the test, the
+ rest of the fields are the same as for :class:`Call`.
+ """
+ fields = ('node', 'name', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
+
+
+class Call(Expr):
+ """Calls an expression. `args` is a list of arguments, `kwargs` a list
+ of keyword arguments (list of :class:`Keyword` nodes), and `dyn_args`
+ and `dyn_kwargs` has to be either `None` or a node that is used as
+ node for dynamic positional (``*args``) or keyword (``**kwargs``)
+ arguments.
+ """
+ fields = ('node', 'args', 'kwargs', 'dyn_args', 'dyn_kwargs')
+
+
+class Getitem(Expr):
+ """Get an attribute or item from an expression and prefer the item."""
+ fields = ('node', 'arg', 'ctx')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ if self.ctx != 'load':
+ raise Impossible()
+ try:
+ return self.environment.getitem(self.node.as_const(eval_ctx),
+ self.arg.as_const(eval_ctx))
+ except Exception:
+ raise Impossible()
+
+ def can_assign(self):
+ return False
+
+
+class Getattr(Expr):
+ """Get an attribute or item from an expression that is a ascii-only
+ bytestring and prefer the attribute.
+ """
+ fields = ('node', 'attr', 'ctx')
+
+ def as_const(self, eval_ctx=None):
+ if self.ctx != 'load':
+ raise Impossible()
+ try:
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return self.environment.getattr(self.node.as_const(eval_ctx),
+ self.attr)
+ except Exception:
+ raise Impossible()
+
+ def can_assign(self):
+ return False
+
+
+class Slice(Expr):
+ """Represents a slice object. This must only be used as argument for
+ :class:`Subscript`.
+ """
+ fields = ('start', 'stop', 'step')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ def const(obj):
+ if obj is None:
+ return None
+ return obj.as_const(eval_ctx)
+ return slice(const(self.start), const(self.stop), const(self.step))
+
+
+class Concat(Expr):
+ """Concatenates the list of expressions provided after converting them to
+ unicode.
+ """
+ fields = ('nodes',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return ''.join(text_type(x.as_const(eval_ctx)) for x in self.nodes)
+
+
+class Compare(Expr):
+ """Compares an expression with some other expressions. `ops` must be a
+ list of :class:`Operand`\\s.
+ """
+ fields = ('expr', 'ops')
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ result = value = self.expr.as_const(eval_ctx)
+ try:
+ for op in self.ops:
+ new_value = op.expr.as_const(eval_ctx)
+ result = _cmpop_to_func[op.op](value, new_value)
+ value = new_value
+ except Exception:
+ raise Impossible()
+ return result
+
+
+class Operand(Helper):
+ """Holds an operator and an expression."""
+ fields = ('op', 'expr')
+
+if __debug__:
+ Operand.__doc__ += '\nThe following operators are available: ' + \
+ ', '.join(sorted('``%s``' % x for x in set(_binop_to_func) |
+ set(_uaop_to_func) | set(_cmpop_to_func)))
+
+
+class Mul(BinExpr):
+ """Multiplies the left with the right node."""
+ operator = '*'
+
+
+class Div(BinExpr):
+ """Divides the left by the right node."""
+ operator = '/'
+
+
+class FloorDiv(BinExpr):
+ """Divides the left by the right node and truncates conver the
+ result into an integer by truncating.
+ """
+ operator = '//'
+
+
+class Add(BinExpr):
+ """Add the left to the right node."""
+ operator = '+'
+
+
+class Sub(BinExpr):
+ """Subtract the right from the left node."""
+ operator = '-'
+
+
+class Mod(BinExpr):
+ """Left modulo right."""
+ operator = '%'
+
+
+class Pow(BinExpr):
+ """Left to the power of right."""
+ operator = '**'
+
+
+class And(BinExpr):
+ """Short circuited AND."""
+ operator = 'and'
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return self.left.as_const(eval_ctx) and self.right.as_const(eval_ctx)
+
+
+class Or(BinExpr):
+ """Short circuited OR."""
+ operator = 'or'
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return self.left.as_const(eval_ctx) or self.right.as_const(eval_ctx)
+
+
+class Not(UnaryExpr):
+ """Negate the expression."""
+ operator = 'not'
+
+
+class Neg(UnaryExpr):
+ """Make the expression negative."""
+ operator = '-'
+
+
+class Pos(UnaryExpr):
+ """Make the expression positive (noop for most expressions)"""
+ operator = '+'
+
+
+# Helpers for extensions
+
+
+class EnvironmentAttribute(Expr):
+ """Loads an attribute from the environment object. This is useful for
+ extensions that want to call a callback stored on the environment.
+ """
+ fields = ('name',)
+
+
+class ExtensionAttribute(Expr):
+ """Returns the attribute of an extension bound to the environment.
+ The identifier is the identifier of the :class:`Extension`.
+
+ This node is usually constructed by calling the
+ :meth:`~jinja2.ext.Extension.attr` method on an extension.
+ """
+ fields = ('identifier', 'name')
+
+
+class ImportedName(Expr):
+ """If created with an import name the import name is returned on node
+ access. For example ``ImportedName('cgi.escape')`` returns the `escape`
+ function from the cgi module on evaluation. Imports are optimized by the
+ compiler so there is no need to assign them to local variables.
+ """
+ fields = ('importname',)
+
+
+class InternalName(Expr):
+ """An internal name in the compiler. You cannot create these nodes
+ yourself but the parser provides a
+ :meth:`~jinja2.parser.Parser.free_identifier` method that creates
+ a new identifier for you. This identifier is not available from the
+ template and is not threated specially by the compiler.
+ """
+ fields = ('name',)
+
+ def __init__(self):
+ raise TypeError('Can\'t create internal names. Use the '
+ '`free_identifier` method on a parser.')
+
+
+class MarkSafe(Expr):
+ """Mark the wrapped expression as safe (wrap it as `Markup`)."""
+ fields = ('expr',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ return Markup(self.expr.as_const(eval_ctx))
+
+
+class MarkSafeIfAutoescape(Expr):
+ """Mark the wrapped expression as safe (wrap it as `Markup`) but
+ only if autoescaping is active.
+
+ .. versionadded:: 2.5
+ """
+ fields = ('expr',)
+
+ def as_const(self, eval_ctx=None):
+ eval_ctx = get_eval_context(self, eval_ctx)
+ if eval_ctx.volatile:
+ raise Impossible()
+ expr = self.expr.as_const(eval_ctx)
+ if eval_ctx.autoescape:
+ return Markup(expr)
+ return expr
+
+
+class ContextReference(Expr):
+ """Returns the current template context. It can be used like a
+ :class:`Name` node, with a ``'load'`` ctx and will return the
+ current :class:`~jinja2.runtime.Context` object.
+
+ Here an example that assigns the current template name to a
+ variable named `foo`::
+
+ Assign(Name('foo', ctx='store'),
+ Getattr(ContextReference(), 'name'))
+ """
+
+
+class Continue(Stmt):
+ """Continue a loop."""
+
+
+class Break(Stmt):
+ """Break a loop."""
+
+
+class Scope(Stmt):
+ """An artificial scope."""
+ fields = ('body',)
+
+
+class EvalContextModifier(Stmt):
+ """Modifies the eval context. For each option that should be modified,
+ a :class:`Keyword` has to be added to the :attr:`options` list.
+
+ Example to change the `autoescape` setting::
+
+ EvalContextModifier(options=[Keyword('autoescape', Const(True))])
+ """
+ fields = ('options',)
+
+
+class ScopedEvalContextModifier(EvalContextModifier):
+ """Modifies the eval context and reverts it later. Works exactly like
+ :class:`EvalContextModifier` but will only modify the
+ :class:`~jinja2.nodes.EvalContext` for nodes in the :attr:`body`.
+ """
+ fields = ('body',)
+
+
+# make sure nobody creates custom nodes
+def _failing_new(*args, **kwargs):
+ raise TypeError('can\'t create custom node types')
+NodeType.__new__ = staticmethod(_failing_new); del _failing_new
diff --git a/lib/spack/external/jinja2/optimizer.py b/lib/spack/external/jinja2/optimizer.py
new file mode 100644
index 0000000000..65ab3ceb71
--- /dev/null
+++ b/lib/spack/external/jinja2/optimizer.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.optimizer
+ ~~~~~~~~~~~~~~~~
+
+ The jinja optimizer is currently trying to constant fold a few expressions
+ and modify the AST in place so that it should be easier to evaluate it.
+
+ Because the AST does not contain all the scoping information and the
+ compiler has to find that out, we cannot do all the optimizations we
+ want. For example loop unrolling doesn't work because unrolled loops would
+ have a different scoping.
+
+ The solution would be a second syntax tree that has the scoping rules stored.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+from jinja2 import nodes
+from jinja2.visitor import NodeTransformer
+
+
+def optimize(node, environment):
+ """The context hint can be used to perform an static optimization
+ based on the context given."""
+ optimizer = Optimizer(environment)
+ return optimizer.visit(node)
+
+
+class Optimizer(NodeTransformer):
+
+ def __init__(self, environment):
+ self.environment = environment
+
+ def fold(self, node, eval_ctx=None):
+ """Do constant folding."""
+ node = self.generic_visit(node)
+ try:
+ return nodes.Const.from_untrusted(node.as_const(eval_ctx),
+ lineno=node.lineno,
+ environment=self.environment)
+ except nodes.Impossible:
+ return node
+
+ visit_Add = visit_Sub = visit_Mul = visit_Div = visit_FloorDiv = \
+ visit_Pow = visit_Mod = visit_And = visit_Or = visit_Pos = visit_Neg = \
+ visit_Not = visit_Compare = visit_Getitem = visit_Getattr = visit_Call = \
+ visit_Filter = visit_Test = visit_CondExpr = fold
+ del fold
diff --git a/lib/spack/external/jinja2/parser.py b/lib/spack/external/jinja2/parser.py
new file mode 100644
index 0000000000..0bf74c9459
--- /dev/null
+++ b/lib/spack/external/jinja2/parser.py
@@ -0,0 +1,898 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.parser
+ ~~~~~~~~~~~~~
+
+ Implements the template parser.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+from jinja2 import nodes
+from jinja2.exceptions import TemplateSyntaxError, TemplateAssertionError
+from jinja2.lexer import describe_token, describe_token_expr
+from jinja2._compat import imap
+
+
+_statement_keywords = frozenset(['for', 'if', 'block', 'extends', 'print',
+ 'macro', 'include', 'from', 'import',
+ 'set', 'with', 'autoescape'])
+_compare_operators = frozenset(['eq', 'ne', 'lt', 'lteq', 'gt', 'gteq'])
+
+_math_nodes = {
+ 'add': nodes.Add,
+ 'sub': nodes.Sub,
+ 'mul': nodes.Mul,
+ 'div': nodes.Div,
+ 'floordiv': nodes.FloorDiv,
+ 'mod': nodes.Mod,
+}
+
+
+class Parser(object):
+ """This is the central parsing class Jinja2 uses. It's passed to
+ extensions and can be used to parse expressions or statements.
+ """
+
+ def __init__(self, environment, source, name=None, filename=None,
+ state=None):
+ self.environment = environment
+ self.stream = environment._tokenize(source, name, filename, state)
+ self.name = name
+ self.filename = filename
+ self.closed = False
+ self.extensions = {}
+ for extension in environment.iter_extensions():
+ for tag in extension.tags:
+ self.extensions[tag] = extension.parse
+ self._last_identifier = 0
+ self._tag_stack = []
+ self._end_token_stack = []
+
+ def fail(self, msg, lineno=None, exc=TemplateSyntaxError):
+ """Convenience method that raises `exc` with the message, passed
+ line number or last line number as well as the current name and
+ filename.
+ """
+ if lineno is None:
+ lineno = self.stream.current.lineno
+ raise exc(msg, lineno, self.name, self.filename)
+
+ def _fail_ut_eof(self, name, end_token_stack, lineno):
+ expected = []
+ for exprs in end_token_stack:
+ expected.extend(imap(describe_token_expr, exprs))
+ if end_token_stack:
+ currently_looking = ' or '.join(
+ "'%s'" % describe_token_expr(expr)
+ for expr in end_token_stack[-1])
+ else:
+ currently_looking = None
+
+ if name is None:
+ message = ['Unexpected end of template.']
+ else:
+ message = ['Encountered unknown tag \'%s\'.' % name]
+
+ if currently_looking:
+ if name is not None and name in expected:
+ message.append('You probably made a nesting mistake. Jinja '
+ 'is expecting this tag, but currently looking '
+ 'for %s.' % currently_looking)
+ else:
+ message.append('Jinja was looking for the following tags: '
+ '%s.' % currently_looking)
+
+ if self._tag_stack:
+ message.append('The innermost block that needs to be '
+ 'closed is \'%s\'.' % self._tag_stack[-1])
+
+ self.fail(' '.join(message), lineno)
+
+ def fail_unknown_tag(self, name, lineno=None):
+ """Called if the parser encounters an unknown tag. Tries to fail
+ with a human readable error message that could help to identify
+ the problem.
+ """
+ return self._fail_ut_eof(name, self._end_token_stack, lineno)
+
+ def fail_eof(self, end_tokens=None, lineno=None):
+ """Like fail_unknown_tag but for end of template situations."""
+ stack = list(self._end_token_stack)
+ if end_tokens is not None:
+ stack.append(end_tokens)
+ return self._fail_ut_eof(None, stack, lineno)
+
+ def is_tuple_end(self, extra_end_rules=None):
+ """Are we at the end of a tuple?"""
+ if self.stream.current.type in ('variable_end', 'block_end', 'rparen'):
+ return True
+ elif extra_end_rules is not None:
+ return self.stream.current.test_any(extra_end_rules)
+ return False
+
+ def free_identifier(self, lineno=None):
+ """Return a new free identifier as :class:`~jinja2.nodes.InternalName`."""
+ self._last_identifier += 1
+ rv = object.__new__(nodes.InternalName)
+ nodes.Node.__init__(rv, 'fi%d' % self._last_identifier, lineno=lineno)
+ return rv
+
+ def parse_statement(self):
+ """Parse a single statement."""
+ token = self.stream.current
+ if token.type != 'name':
+ self.fail('tag name expected', token.lineno)
+ self._tag_stack.append(token.value)
+ pop_tag = True
+ try:
+ if token.value in _statement_keywords:
+ return getattr(self, 'parse_' + self.stream.current.value)()
+ if token.value == 'call':
+ return self.parse_call_block()
+ if token.value == 'filter':
+ return self.parse_filter_block()
+ ext = self.extensions.get(token.value)
+ if ext is not None:
+ return ext(self)
+
+ # did not work out, remove the token we pushed by accident
+ # from the stack so that the unknown tag fail function can
+ # produce a proper error message.
+ self._tag_stack.pop()
+ pop_tag = False
+ self.fail_unknown_tag(token.value, token.lineno)
+ finally:
+ if pop_tag:
+ self._tag_stack.pop()
+
+ def parse_statements(self, end_tokens, drop_needle=False):
+ """Parse multiple statements into a list until one of the end tokens
+ is reached. This is used to parse the body of statements as it also
+ parses template data if appropriate. The parser checks first if the
+ current token is a colon and skips it if there is one. Then it checks
+ for the block end and parses until if one of the `end_tokens` is
+ reached. Per default the active token in the stream at the end of
+ the call is the matched end token. If this is not wanted `drop_needle`
+ can be set to `True` and the end token is removed.
+ """
+ # the first token may be a colon for python compatibility
+ self.stream.skip_if('colon')
+
+ # in the future it would be possible to add whole code sections
+ # by adding some sort of end of statement token and parsing those here.
+ self.stream.expect('block_end')
+ result = self.subparse(end_tokens)
+
+ # we reached the end of the template too early, the subparser
+ # does not check for this, so we do that now
+ if self.stream.current.type == 'eof':
+ self.fail_eof(end_tokens)
+
+ if drop_needle:
+ next(self.stream)
+ return result
+
+ def parse_set(self):
+ """Parse an assign statement."""
+ lineno = next(self.stream).lineno
+ target = self.parse_assign_target()
+ if self.stream.skip_if('assign'):
+ expr = self.parse_tuple()
+ return nodes.Assign(target, expr, lineno=lineno)
+ body = self.parse_statements(('name:endset',),
+ drop_needle=True)
+ return nodes.AssignBlock(target, body, lineno=lineno)
+
+ def parse_for(self):
+ """Parse a for loop."""
+ lineno = self.stream.expect('name:for').lineno
+ target = self.parse_assign_target(extra_end_rules=('name:in',))
+ self.stream.expect('name:in')
+ iter = self.parse_tuple(with_condexpr=False,
+ extra_end_rules=('name:recursive',))
+ test = None
+ if self.stream.skip_if('name:if'):
+ test = self.parse_expression()
+ recursive = self.stream.skip_if('name:recursive')
+ body = self.parse_statements(('name:endfor', 'name:else'))
+ if next(self.stream).value == 'endfor':
+ else_ = []
+ else:
+ else_ = self.parse_statements(('name:endfor',), drop_needle=True)
+ return nodes.For(target, iter, body, else_, test,
+ recursive, lineno=lineno)
+
+ def parse_if(self):
+ """Parse an if construct."""
+ node = result = nodes.If(lineno=self.stream.expect('name:if').lineno)
+ while 1:
+ node.test = self.parse_tuple(with_condexpr=False)
+ node.body = self.parse_statements(('name:elif', 'name:else',
+ 'name:endif'))
+ token = next(self.stream)
+ if token.test('name:elif'):
+ new_node = nodes.If(lineno=self.stream.current.lineno)
+ node.else_ = [new_node]
+ node = new_node
+ continue
+ elif token.test('name:else'):
+ node.else_ = self.parse_statements(('name:endif',),
+ drop_needle=True)
+ else:
+ node.else_ = []
+ break
+ return result
+
+ def parse_with(self):
+ node = nodes.With(lineno=next(self.stream).lineno)
+ targets = []
+ values = []
+ while self.stream.current.type != 'block_end':
+ lineno = self.stream.current.lineno
+ if targets:
+ self.stream.expect('comma')
+ target = self.parse_assign_target()
+ target.set_ctx('param')
+ targets.append(target)
+ self.stream.expect('assign')
+ values.append(self.parse_expression())
+ node.targets = targets
+ node.values = values
+ node.body = self.parse_statements(('name:endwith',),
+ drop_needle=True)
+ return node
+
+ def parse_autoescape(self):
+ node = nodes.ScopedEvalContextModifier(lineno=next(self.stream).lineno)
+ node.options = [
+ nodes.Keyword('autoescape', self.parse_expression())
+ ]
+ node.body = self.parse_statements(('name:endautoescape',),
+ drop_needle=True)
+ return nodes.Scope([node])
+
+ def parse_block(self):
+ node = nodes.Block(lineno=next(self.stream).lineno)
+ node.name = self.stream.expect('name').value
+ node.scoped = self.stream.skip_if('name:scoped')
+
+ # common problem people encounter when switching from django
+ # to jinja. we do not support hyphens in block names, so let's
+ # raise a nicer error message in that case.
+ if self.stream.current.type == 'sub':
+ self.fail('Block names in Jinja have to be valid Python '
+ 'identifiers and may not contain hyphens, use an '
+ 'underscore instead.')
+
+ node.body = self.parse_statements(('name:endblock',), drop_needle=True)
+ self.stream.skip_if('name:' + node.name)
+ return node
+
+ def parse_extends(self):
+ node = nodes.Extends(lineno=next(self.stream).lineno)
+ node.template = self.parse_expression()
+ return node
+
+ def parse_import_context(self, node, default):
+ if self.stream.current.test_any('name:with', 'name:without') and \
+ self.stream.look().test('name:context'):
+ node.with_context = next(self.stream).value == 'with'
+ self.stream.skip()
+ else:
+ node.with_context = default
+ return node
+
+ def parse_include(self):
+ node = nodes.Include(lineno=next(self.stream).lineno)
+ node.template = self.parse_expression()
+ if self.stream.current.test('name:ignore') and \
+ self.stream.look().test('name:missing'):
+ node.ignore_missing = True
+ self.stream.skip(2)
+ else:
+ node.ignore_missing = False
+ return self.parse_import_context(node, True)
+
+ def parse_import(self):
+ node = nodes.Import(lineno=next(self.stream).lineno)
+ node.template = self.parse_expression()
+ self.stream.expect('name:as')
+ node.target = self.parse_assign_target(name_only=True).name
+ return self.parse_import_context(node, False)
+
+ def parse_from(self):
+ node = nodes.FromImport(lineno=next(self.stream).lineno)
+ node.template = self.parse_expression()
+ self.stream.expect('name:import')
+ node.names = []
+
+ def parse_context():
+ if self.stream.current.value in ('with', 'without') and \
+ self.stream.look().test('name:context'):
+ node.with_context = next(self.stream).value == 'with'
+ self.stream.skip()
+ return True
+ return False
+
+ while 1:
+ if node.names:
+ self.stream.expect('comma')
+ if self.stream.current.type == 'name':
+ if parse_context():
+ break
+ target = self.parse_assign_target(name_only=True)
+ if target.name.startswith('_'):
+ self.fail('names starting with an underline can not '
+ 'be imported', target.lineno,
+ exc=TemplateAssertionError)
+ if self.stream.skip_if('name:as'):
+ alias = self.parse_assign_target(name_only=True)
+ node.names.append((target.name, alias.name))
+ else:
+ node.names.append(target.name)
+ if parse_context() or self.stream.current.type != 'comma':
+ break
+ else:
+ break
+ if not hasattr(node, 'with_context'):
+ node.with_context = False
+ self.stream.skip_if('comma')
+ return node
+
+ def parse_signature(self, node):
+ node.args = args = []
+ node.defaults = defaults = []
+ self.stream.expect('lparen')
+ while self.stream.current.type != 'rparen':
+ if args:
+ self.stream.expect('comma')
+ arg = self.parse_assign_target(name_only=True)
+ arg.set_ctx('param')
+ if self.stream.skip_if('assign'):
+ defaults.append(self.parse_expression())
+ elif defaults:
+ self.fail('non-default argument follows default argument')
+ args.append(arg)
+ self.stream.expect('rparen')
+
+ def parse_call_block(self):
+ node = nodes.CallBlock(lineno=next(self.stream).lineno)
+ if self.stream.current.type == 'lparen':
+ self.parse_signature(node)
+ else:
+ node.args = []
+ node.defaults = []
+
+ node.call = self.parse_expression()
+ if not isinstance(node.call, nodes.Call):
+ self.fail('expected call', node.lineno)
+ node.body = self.parse_statements(('name:endcall',), drop_needle=True)
+ return node
+
+ def parse_filter_block(self):
+ node = nodes.FilterBlock(lineno=next(self.stream).lineno)
+ node.filter = self.parse_filter(None, start_inline=True)
+ node.body = self.parse_statements(('name:endfilter',),
+ drop_needle=True)
+ return node
+
+ def parse_macro(self):
+ node = nodes.Macro(lineno=next(self.stream).lineno)
+ node.name = self.parse_assign_target(name_only=True).name
+ self.parse_signature(node)
+ node.body = self.parse_statements(('name:endmacro',),
+ drop_needle=True)
+ return node
+
+ def parse_print(self):
+ node = nodes.Output(lineno=next(self.stream).lineno)
+ node.nodes = []
+ while self.stream.current.type != 'block_end':
+ if node.nodes:
+ self.stream.expect('comma')
+ node.nodes.append(self.parse_expression())
+ return node
+
+ def parse_assign_target(self, with_tuple=True, name_only=False,
+ extra_end_rules=None):
+ """Parse an assignment target. As Jinja2 allows assignments to
+ tuples, this function can parse all allowed assignment targets. Per
+ default assignments to tuples are parsed, that can be disable however
+ by setting `with_tuple` to `False`. If only assignments to names are
+ wanted `name_only` can be set to `True`. The `extra_end_rules`
+ parameter is forwarded to the tuple parsing function.
+ """
+ if name_only:
+ token = self.stream.expect('name')
+ target = nodes.Name(token.value, 'store', lineno=token.lineno)
+ else:
+ if with_tuple:
+ target = self.parse_tuple(simplified=True,
+ extra_end_rules=extra_end_rules)
+ else:
+ target = self.parse_primary()
+ target.set_ctx('store')
+ if not target.can_assign():
+ self.fail('can\'t assign to %r' % target.__class__.
+ __name__.lower(), target.lineno)
+ return target
+
+ def parse_expression(self, with_condexpr=True):
+ """Parse an expression. Per default all expressions are parsed, if
+ the optional `with_condexpr` parameter is set to `False` conditional
+ expressions are not parsed.
+ """
+ if with_condexpr:
+ return self.parse_condexpr()
+ return self.parse_or()
+
+ def parse_condexpr(self):
+ lineno = self.stream.current.lineno
+ expr1 = self.parse_or()
+ while self.stream.skip_if('name:if'):
+ expr2 = self.parse_or()
+ if self.stream.skip_if('name:else'):
+ expr3 = self.parse_condexpr()
+ else:
+ expr3 = None
+ expr1 = nodes.CondExpr(expr2, expr1, expr3, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return expr1
+
+ def parse_or(self):
+ lineno = self.stream.current.lineno
+ left = self.parse_and()
+ while self.stream.skip_if('name:or'):
+ right = self.parse_and()
+ left = nodes.Or(left, right, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return left
+
+ def parse_and(self):
+ lineno = self.stream.current.lineno
+ left = self.parse_not()
+ while self.stream.skip_if('name:and'):
+ right = self.parse_not()
+ left = nodes.And(left, right, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return left
+
+ def parse_not(self):
+ if self.stream.current.test('name:not'):
+ lineno = next(self.stream).lineno
+ return nodes.Not(self.parse_not(), lineno=lineno)
+ return self.parse_compare()
+
+ def parse_compare(self):
+ lineno = self.stream.current.lineno
+ expr = self.parse_math1()
+ ops = []
+ while 1:
+ token_type = self.stream.current.type
+ if token_type in _compare_operators:
+ next(self.stream)
+ ops.append(nodes.Operand(token_type, self.parse_math1()))
+ elif self.stream.skip_if('name:in'):
+ ops.append(nodes.Operand('in', self.parse_math1()))
+ elif (self.stream.current.test('name:not') and
+ self.stream.look().test('name:in')):
+ self.stream.skip(2)
+ ops.append(nodes.Operand('notin', self.parse_math1()))
+ else:
+ break
+ lineno = self.stream.current.lineno
+ if not ops:
+ return expr
+ return nodes.Compare(expr, ops, lineno=lineno)
+
+ def parse_math1(self):
+ lineno = self.stream.current.lineno
+ left = self.parse_concat()
+ while self.stream.current.type in ('add', 'sub'):
+ cls = _math_nodes[self.stream.current.type]
+ next(self.stream)
+ right = self.parse_concat()
+ left = cls(left, right, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return left
+
+ def parse_concat(self):
+ lineno = self.stream.current.lineno
+ args = [self.parse_math2()]
+ while self.stream.current.type == 'tilde':
+ next(self.stream)
+ args.append(self.parse_math2())
+ if len(args) == 1:
+ return args[0]
+ return nodes.Concat(args, lineno=lineno)
+
+ def parse_math2(self):
+ lineno = self.stream.current.lineno
+ left = self.parse_pow()
+ while self.stream.current.type in ('mul', 'div', 'floordiv', 'mod'):
+ cls = _math_nodes[self.stream.current.type]
+ next(self.stream)
+ right = self.parse_pow()
+ left = cls(left, right, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return left
+
+ def parse_pow(self):
+ lineno = self.stream.current.lineno
+ left = self.parse_unary()
+ while self.stream.current.type == 'pow':
+ next(self.stream)
+ right = self.parse_unary()
+ left = nodes.Pow(left, right, lineno=lineno)
+ lineno = self.stream.current.lineno
+ return left
+
+ def parse_unary(self, with_filter=True):
+ token_type = self.stream.current.type
+ lineno = self.stream.current.lineno
+ if token_type == 'sub':
+ next(self.stream)
+ node = nodes.Neg(self.parse_unary(False), lineno=lineno)
+ elif token_type == 'add':
+ next(self.stream)
+ node = nodes.Pos(self.parse_unary(False), lineno=lineno)
+ else:
+ node = self.parse_primary()
+ node = self.parse_postfix(node)
+ if with_filter:
+ node = self.parse_filter_expr(node)
+ return node
+
+ def parse_primary(self):
+ token = self.stream.current
+ if token.type == 'name':
+ if token.value in ('true', 'false', 'True', 'False'):
+ node = nodes.Const(token.value in ('true', 'True'),
+ lineno=token.lineno)
+ elif token.value in ('none', 'None'):
+ node = nodes.Const(None, lineno=token.lineno)
+ else:
+ node = nodes.Name(token.value, 'load', lineno=token.lineno)
+ next(self.stream)
+ elif token.type == 'string':
+ next(self.stream)
+ buf = [token.value]
+ lineno = token.lineno
+ while self.stream.current.type == 'string':
+ buf.append(self.stream.current.value)
+ next(self.stream)
+ node = nodes.Const(''.join(buf), lineno=lineno)
+ elif token.type in ('integer', 'float'):
+ next(self.stream)
+ node = nodes.Const(token.value, lineno=token.lineno)
+ elif token.type == 'lparen':
+ next(self.stream)
+ node = self.parse_tuple(explicit_parentheses=True)
+ self.stream.expect('rparen')
+ elif token.type == 'lbracket':
+ node = self.parse_list()
+ elif token.type == 'lbrace':
+ node = self.parse_dict()
+ else:
+ self.fail("unexpected '%s'" % describe_token(token), token.lineno)
+ return node
+
+ def parse_tuple(self, simplified=False, with_condexpr=True,
+ extra_end_rules=None, explicit_parentheses=False):
+ """Works like `parse_expression` but if multiple expressions are
+ delimited by a comma a :class:`~jinja2.nodes.Tuple` node is created.
+ This method could also return a regular expression instead of a tuple
+ if no commas where found.
+
+ The default parsing mode is a full tuple. If `simplified` is `True`
+ only names and literals are parsed. The `no_condexpr` parameter is
+ forwarded to :meth:`parse_expression`.
+
+ Because tuples do not require delimiters and may end in a bogus comma
+ an extra hint is needed that marks the end of a tuple. For example
+ for loops support tuples between `for` and `in`. In that case the
+ `extra_end_rules` is set to ``['name:in']``.
+
+ `explicit_parentheses` is true if the parsing was triggered by an
+ expression in parentheses. This is used to figure out if an empty
+ tuple is a valid expression or not.
+ """
+ lineno = self.stream.current.lineno
+ if simplified:
+ parse = self.parse_primary
+ elif with_condexpr:
+ parse = self.parse_expression
+ else:
+ parse = lambda: self.parse_expression(with_condexpr=False)
+ args = []
+ is_tuple = False
+ while 1:
+ if args:
+ self.stream.expect('comma')
+ if self.is_tuple_end(extra_end_rules):
+ break
+ args.append(parse())
+ if self.stream.current.type == 'comma':
+ is_tuple = True
+ else:
+ break
+ lineno = self.stream.current.lineno
+
+ if not is_tuple:
+ if args:
+ return args[0]
+
+ # if we don't have explicit parentheses, an empty tuple is
+ # not a valid expression. This would mean nothing (literally
+ # nothing) in the spot of an expression would be an empty
+ # tuple.
+ if not explicit_parentheses:
+ self.fail('Expected an expression, got \'%s\'' %
+ describe_token(self.stream.current))
+
+ return nodes.Tuple(args, 'load', lineno=lineno)
+
+ def parse_list(self):
+ token = self.stream.expect('lbracket')
+ items = []
+ while self.stream.current.type != 'rbracket':
+ if items:
+ self.stream.expect('comma')
+ if self.stream.current.type == 'rbracket':
+ break
+ items.append(self.parse_expression())
+ self.stream.expect('rbracket')
+ return nodes.List(items, lineno=token.lineno)
+
+ def parse_dict(self):
+ token = self.stream.expect('lbrace')
+ items = []
+ while self.stream.current.type != 'rbrace':
+ if items:
+ self.stream.expect('comma')
+ if self.stream.current.type == 'rbrace':
+ break
+ key = self.parse_expression()
+ self.stream.expect('colon')
+ value = self.parse_expression()
+ items.append(nodes.Pair(key, value, lineno=key.lineno))
+ self.stream.expect('rbrace')
+ return nodes.Dict(items, lineno=token.lineno)
+
+ def parse_postfix(self, node):
+ while 1:
+ token_type = self.stream.current.type
+ if token_type == 'dot' or token_type == 'lbracket':
+ node = self.parse_subscript(node)
+ # calls are valid both after postfix expressions (getattr
+ # and getitem) as well as filters and tests
+ elif token_type == 'lparen':
+ node = self.parse_call(node)
+ else:
+ break
+ return node
+
+ def parse_filter_expr(self, node):
+ while 1:
+ token_type = self.stream.current.type
+ if token_type == 'pipe':
+ node = self.parse_filter(node)
+ elif token_type == 'name' and self.stream.current.value == 'is':
+ node = self.parse_test(node)
+ # calls are valid both after postfix expressions (getattr
+ # and getitem) as well as filters and tests
+ elif token_type == 'lparen':
+ node = self.parse_call(node)
+ else:
+ break
+ return node
+
+ def parse_subscript(self, node):
+ token = next(self.stream)
+ if token.type == 'dot':
+ attr_token = self.stream.current
+ next(self.stream)
+ if attr_token.type == 'name':
+ return nodes.Getattr(node, attr_token.value, 'load',
+ lineno=token.lineno)
+ elif attr_token.type != 'integer':
+ self.fail('expected name or number', attr_token.lineno)
+ arg = nodes.Const(attr_token.value, lineno=attr_token.lineno)
+ return nodes.Getitem(node, arg, 'load', lineno=token.lineno)
+ if token.type == 'lbracket':
+ args = []
+ while self.stream.current.type != 'rbracket':
+ if args:
+ self.stream.expect('comma')
+ args.append(self.parse_subscribed())
+ self.stream.expect('rbracket')
+ if len(args) == 1:
+ arg = args[0]
+ else:
+ arg = nodes.Tuple(args, 'load', lineno=token.lineno)
+ return nodes.Getitem(node, arg, 'load', lineno=token.lineno)
+ self.fail('expected subscript expression', self.lineno)
+
+ def parse_subscribed(self):
+ lineno = self.stream.current.lineno
+
+ if self.stream.current.type == 'colon':
+ next(self.stream)
+ args = [None]
+ else:
+ node = self.parse_expression()
+ if self.stream.current.type != 'colon':
+ return node
+ next(self.stream)
+ args = [node]
+
+ if self.stream.current.type == 'colon':
+ args.append(None)
+ elif self.stream.current.type not in ('rbracket', 'comma'):
+ args.append(self.parse_expression())
+ else:
+ args.append(None)
+
+ if self.stream.current.type == 'colon':
+ next(self.stream)
+ if self.stream.current.type not in ('rbracket', 'comma'):
+ args.append(self.parse_expression())
+ else:
+ args.append(None)
+ else:
+ args.append(None)
+
+ return nodes.Slice(lineno=lineno, *args)
+
+ def parse_call(self, node):
+ token = self.stream.expect('lparen')
+ args = []
+ kwargs = []
+ dyn_args = dyn_kwargs = None
+ require_comma = False
+
+ def ensure(expr):
+ if not expr:
+ self.fail('invalid syntax for function call expression',
+ token.lineno)
+
+ while self.stream.current.type != 'rparen':
+ if require_comma:
+ self.stream.expect('comma')
+ # support for trailing comma
+ if self.stream.current.type == 'rparen':
+ break
+ if self.stream.current.type == 'mul':
+ ensure(dyn_args is None and dyn_kwargs is None)
+ next(self.stream)
+ dyn_args = self.parse_expression()
+ elif self.stream.current.type == 'pow':
+ ensure(dyn_kwargs is None)
+ next(self.stream)
+ dyn_kwargs = self.parse_expression()
+ else:
+ ensure(dyn_args is None and dyn_kwargs is None)
+ if self.stream.current.type == 'name' and \
+ self.stream.look().type == 'assign':
+ key = self.stream.current.value
+ self.stream.skip(2)
+ value = self.parse_expression()
+ kwargs.append(nodes.Keyword(key, value,
+ lineno=value.lineno))
+ else:
+ ensure(not kwargs)
+ args.append(self.parse_expression())
+
+ require_comma = True
+ self.stream.expect('rparen')
+
+ if node is None:
+ return args, kwargs, dyn_args, dyn_kwargs
+ return nodes.Call(node, args, kwargs, dyn_args, dyn_kwargs,
+ lineno=token.lineno)
+
+ def parse_filter(self, node, start_inline=False):
+ while self.stream.current.type == 'pipe' or start_inline:
+ if not start_inline:
+ next(self.stream)
+ token = self.stream.expect('name')
+ name = token.value
+ while self.stream.current.type == 'dot':
+ next(self.stream)
+ name += '.' + self.stream.expect('name').value
+ if self.stream.current.type == 'lparen':
+ args, kwargs, dyn_args, dyn_kwargs = self.parse_call(None)
+ else:
+ args = []
+ kwargs = []
+ dyn_args = dyn_kwargs = None
+ node = nodes.Filter(node, name, args, kwargs, dyn_args,
+ dyn_kwargs, lineno=token.lineno)
+ start_inline = False
+ return node
+
+ def parse_test(self, node):
+ token = next(self.stream)
+ if self.stream.current.test('name:not'):
+ next(self.stream)
+ negated = True
+ else:
+ negated = False
+ name = self.stream.expect('name').value
+ while self.stream.current.type == 'dot':
+ next(self.stream)
+ name += '.' + self.stream.expect('name').value
+ dyn_args = dyn_kwargs = None
+ kwargs = []
+ if self.stream.current.type == 'lparen':
+ args, kwargs, dyn_args, dyn_kwargs = self.parse_call(None)
+ elif (self.stream.current.type in ('name', 'string', 'integer',
+ 'float', 'lparen', 'lbracket',
+ 'lbrace') and not
+ self.stream.current.test_any('name:else', 'name:or',
+ 'name:and')):
+ if self.stream.current.test('name:is'):
+ self.fail('You cannot chain multiple tests with is')
+ args = [self.parse_primary()]
+ else:
+ args = []
+ node = nodes.Test(node, name, args, kwargs, dyn_args,
+ dyn_kwargs, lineno=token.lineno)
+ if negated:
+ node = nodes.Not(node, lineno=token.lineno)
+ return node
+
+ def subparse(self, end_tokens=None):
+ body = []
+ data_buffer = []
+ add_data = data_buffer.append
+
+ if end_tokens is not None:
+ self._end_token_stack.append(end_tokens)
+
+ def flush_data():
+ if data_buffer:
+ lineno = data_buffer[0].lineno
+ body.append(nodes.Output(data_buffer[:], lineno=lineno))
+ del data_buffer[:]
+
+ try:
+ while self.stream:
+ token = self.stream.current
+ if token.type == 'data':
+ if token.value:
+ add_data(nodes.TemplateData(token.value,
+ lineno=token.lineno))
+ next(self.stream)
+ elif token.type == 'variable_begin':
+ next(self.stream)
+ add_data(self.parse_tuple(with_condexpr=True))
+ self.stream.expect('variable_end')
+ elif token.type == 'block_begin':
+ flush_data()
+ next(self.stream)
+ if end_tokens is not None and \
+ self.stream.current.test_any(*end_tokens):
+ return body
+ rv = self.parse_statement()
+ if isinstance(rv, list):
+ body.extend(rv)
+ else:
+ body.append(rv)
+ self.stream.expect('block_end')
+ else:
+ raise AssertionError('internal parsing error')
+
+ flush_data()
+ finally:
+ if end_tokens is not None:
+ self._end_token_stack.pop()
+
+ return body
+
+ def parse(self):
+ """Parse the whole template into a `Template` node."""
+ result = nodes.Template(self.subparse(), lineno=1)
+ result.set_environment(self.environment)
+ return result
diff --git a/lib/spack/external/jinja2/runtime.py b/lib/spack/external/jinja2/runtime.py
new file mode 100644
index 0000000000..00d5f03ca6
--- /dev/null
+++ b/lib/spack/external/jinja2/runtime.py
@@ -0,0 +1,787 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.runtime
+ ~~~~~~~~~~~~~~
+
+ Runtime helpers.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+import sys
+
+from itertools import chain
+from types import MethodType
+
+from jinja2.nodes import EvalContext, _context_function_types
+from jinja2.utils import Markup, soft_unicode, escape, missing, concat, \
+ internalcode, object_type_repr, evalcontextfunction
+from jinja2.exceptions import UndefinedError, TemplateRuntimeError, \
+ TemplateNotFound
+from jinja2._compat import imap, text_type, iteritems, \
+ implements_iterator, implements_to_string, string_types, PY2, \
+ with_metaclass
+
+
+# these variables are exported to the template runtime
+__all__ = ['LoopContext', 'TemplateReference', 'Macro', 'Markup',
+ 'TemplateRuntimeError', 'missing', 'concat', 'escape',
+ 'markup_join', 'unicode_join', 'to_string', 'identity',
+ 'TemplateNotFound']
+
+#: the name of the function that is used to convert something into
+#: a string. We can just use the text type here.
+to_string = text_type
+
+#: the identity function. Useful for certain things in the environment
+identity = lambda x: x
+
+_last_iteration = object()
+
+
+def markup_join(seq):
+ """Concatenation that escapes if necessary and converts to unicode."""
+ buf = []
+ iterator = imap(soft_unicode, seq)
+ for arg in iterator:
+ buf.append(arg)
+ if hasattr(arg, '__html__'):
+ return Markup(u'').join(chain(buf, iterator))
+ return concat(buf)
+
+
+def unicode_join(seq):
+ """Simple args to unicode conversion and concatenation."""
+ return concat(imap(text_type, seq))
+
+
+def new_context(environment, template_name, blocks, vars=None,
+ shared=None, globals=None, locals=None):
+ """Internal helper to for context creation."""
+ if vars is None:
+ vars = {}
+ if shared:
+ parent = vars
+ else:
+ parent = dict(globals or (), **vars)
+ if locals:
+ # if the parent is shared a copy should be created because
+ # we don't want to modify the dict passed
+ if shared:
+ parent = dict(parent)
+ for key, value in iteritems(locals):
+ if value is not missing:
+ parent[key] = value
+ return environment.context_class(environment, parent, template_name,
+ blocks)
+
+
+class TemplateReference(object):
+ """The `self` in templates."""
+
+ def __init__(self, context):
+ self.__context = context
+
+ def __getitem__(self, name):
+ blocks = self.__context.blocks[name]
+ return BlockReference(name, self.__context, blocks, 0)
+
+ def __repr__(self):
+ return '<%s %r>' % (
+ self.__class__.__name__,
+ self.__context.name
+ )
+
+
+def _get_func(x):
+ return getattr(x, '__func__', x)
+
+
+class ContextMeta(type):
+
+ def __new__(cls, name, bases, d):
+ rv = type.__new__(cls, name, bases, d)
+ if bases == ():
+ return rv
+
+ resolve = _get_func(rv.resolve)
+ default_resolve = _get_func(Context.resolve)
+ resolve_or_missing = _get_func(rv.resolve_or_missing)
+ default_resolve_or_missing = _get_func(Context.resolve_or_missing)
+
+ # If we have a changed resolve but no changed default or missing
+ # resolve we invert the call logic.
+ if resolve is not default_resolve and \
+ resolve_or_missing is default_resolve_or_missing:
+ rv._legacy_resolve_mode = True
+ elif resolve is default_resolve and \
+ resolve_or_missing is default_resolve_or_missing:
+ rv._fast_resolve_mode = True
+
+ return rv
+
+
+def resolve_or_missing(context, key, missing=missing):
+ if key in context.vars:
+ return context.vars[key]
+ if key in context.parent:
+ return context.parent[key]
+ return missing
+
+
+class Context(with_metaclass(ContextMeta)):
+ """The template context holds the variables of a template. It stores the
+ values passed to the template and also the names the template exports.
+ Creating instances is neither supported nor useful as it's created
+ automatically at various stages of the template evaluation and should not
+ be created by hand.
+
+ The context is immutable. Modifications on :attr:`parent` **must not**
+ happen and modifications on :attr:`vars` are allowed from generated
+ template code only. Template filters and global functions marked as
+ :func:`contextfunction`\\s get the active context passed as first argument
+ and are allowed to access the context read-only.
+
+ The template context supports read only dict operations (`get`,
+ `keys`, `values`, `items`, `iterkeys`, `itervalues`, `iteritems`,
+ `__getitem__`, `__contains__`). Additionally there is a :meth:`resolve`
+ method that doesn't fail with a `KeyError` but returns an
+ :class:`Undefined` object for missing variables.
+ """
+ # XXX: we want to eventually make this be a deprecation warning and
+ # remove it.
+ _legacy_resolve_mode = False
+ _fast_resolve_mode = False
+
+ def __init__(self, environment, parent, name, blocks):
+ self.parent = parent
+ self.vars = {}
+ self.environment = environment
+ self.eval_ctx = EvalContext(self.environment, name)
+ self.exported_vars = set()
+ self.name = name
+
+ # create the initial mapping of blocks. Whenever template inheritance
+ # takes place the runtime will update this mapping with the new blocks
+ # from the template.
+ self.blocks = dict((k, [v]) for k, v in iteritems(blocks))
+
+ # In case we detect the fast resolve mode we can set up an alias
+ # here that bypasses the legacy code logic.
+ if self._fast_resolve_mode:
+ self.resolve_or_missing = MethodType(resolve_or_missing, self)
+
+ def super(self, name, current):
+ """Render a parent block."""
+ try:
+ blocks = self.blocks[name]
+ index = blocks.index(current) + 1
+ blocks[index]
+ except LookupError:
+ return self.environment.undefined('there is no parent block '
+ 'called %r.' % name,
+ name='super')
+ return BlockReference(name, self, blocks, index)
+
+ def get(self, key, default=None):
+ """Returns an item from the template context, if it doesn't exist
+ `default` is returned.
+ """
+ try:
+ return self[key]
+ except KeyError:
+ return default
+
+ def resolve(self, key):
+ """Looks up a variable like `__getitem__` or `get` but returns an
+ :class:`Undefined` object with the name of the name looked up.
+ """
+ if self._legacy_resolve_mode:
+ rv = resolve_or_missing(self, key)
+ else:
+ rv = self.resolve_or_missing(key)
+ if rv is missing:
+ return self.environment.undefined(name=key)
+ return rv
+
+ def resolve_or_missing(self, key):
+ """Resolves a variable like :meth:`resolve` but returns the
+ special `missing` value if it cannot be found.
+ """
+ if self._legacy_resolve_mode:
+ rv = self.resolve(key)
+ if isinstance(rv, Undefined):
+ rv = missing
+ return rv
+ return resolve_or_missing(self, key)
+
+ def get_exported(self):
+ """Get a new dict with the exported variables."""
+ return dict((k, self.vars[k]) for k in self.exported_vars)
+
+ def get_all(self):
+ """Return the complete context as dict including the exported
+ variables. For optimizations reasons this might not return an
+ actual copy so be careful with using it.
+ """
+ if not self.vars:
+ return self.parent
+ if not self.parent:
+ return self.vars
+ return dict(self.parent, **self.vars)
+
+ @internalcode
+ def call(__self, __obj, *args, **kwargs):
+ """Call the callable with the arguments and keyword arguments
+ provided but inject the active context or environment as first
+ argument if the callable is a :func:`contextfunction` or
+ :func:`environmentfunction`.
+ """
+ if __debug__:
+ __traceback_hide__ = True # noqa
+
+ # Allow callable classes to take a context
+ fn = __obj.__call__
+ for fn_type in ('contextfunction',
+ 'evalcontextfunction',
+ 'environmentfunction'):
+ if hasattr(fn, fn_type):
+ __obj = fn
+ break
+
+ if isinstance(__obj, _context_function_types):
+ if getattr(__obj, 'contextfunction', 0):
+ args = (__self,) + args
+ elif getattr(__obj, 'evalcontextfunction', 0):
+ args = (__self.eval_ctx,) + args
+ elif getattr(__obj, 'environmentfunction', 0):
+ args = (__self.environment,) + args
+ try:
+ return __obj(*args, **kwargs)
+ except StopIteration:
+ return __self.environment.undefined('value was undefined because '
+ 'a callable raised a '
+ 'StopIteration exception')
+
+ def derived(self, locals=None):
+ """Internal helper function to create a derived context. This is
+ used in situations where the system needs a new context in the same
+ template that is independent.
+ """
+ context = new_context(self.environment, self.name, {},
+ self.get_all(), True, None, locals)
+ context.eval_ctx = self.eval_ctx
+ context.blocks.update((k, list(v)) for k, v in iteritems(self.blocks))
+ return context
+
+ def _all(meth):
+ proxy = lambda self: getattr(self.get_all(), meth)()
+ proxy.__doc__ = getattr(dict, meth).__doc__
+ proxy.__name__ = meth
+ return proxy
+
+ keys = _all('keys')
+ values = _all('values')
+ items = _all('items')
+
+ # not available on python 3
+ if PY2:
+ iterkeys = _all('iterkeys')
+ itervalues = _all('itervalues')
+ iteritems = _all('iteritems')
+ del _all
+
+ def __contains__(self, name):
+ return name in self.vars or name in self.parent
+
+ def __getitem__(self, key):
+ """Lookup a variable or raise `KeyError` if the variable is
+ undefined.
+ """
+ item = self.resolve_or_missing(key)
+ if item is missing:
+ raise KeyError(key)
+ return item
+
+ def __repr__(self):
+ return '<%s %s of %r>' % (
+ self.__class__.__name__,
+ repr(self.get_all()),
+ self.name
+ )
+
+
+# register the context as mapping if possible
+try:
+ from collections import Mapping
+ Mapping.register(Context)
+except ImportError:
+ pass
+
+
+class BlockReference(object):
+ """One block on a template reference."""
+
+ def __init__(self, name, context, stack, depth):
+ self.name = name
+ self._context = context
+ self._stack = stack
+ self._depth = depth
+
+ @property
+ def super(self):
+ """Super the block."""
+ if self._depth + 1 >= len(self._stack):
+ return self._context.environment. \
+ undefined('there is no parent block called %r.' %
+ self.name, name='super')
+ return BlockReference(self.name, self._context, self._stack,
+ self._depth + 1)
+
+ @internalcode
+ def __call__(self):
+ rv = concat(self._stack[self._depth](self._context))
+ if self._context.eval_ctx.autoescape:
+ rv = Markup(rv)
+ return rv
+
+
+class LoopContextBase(object):
+ """A loop context for dynamic iteration."""
+
+ _after = _last_iteration
+ _length = None
+
+ def __init__(self, recurse=None, depth0=0):
+ self._recurse = recurse
+ self.index0 = -1
+ self.depth0 = depth0
+
+ def cycle(self, *args):
+ """Cycles among the arguments with the current loop index."""
+ if not args:
+ raise TypeError('no items for cycling given')
+ return args[self.index0 % len(args)]
+
+ first = property(lambda x: x.index0 == 0)
+ last = property(lambda x: x._after is _last_iteration)
+ index = property(lambda x: x.index0 + 1)
+ revindex = property(lambda x: x.length - x.index0)
+ revindex0 = property(lambda x: x.length - x.index)
+ depth = property(lambda x: x.depth0 + 1)
+
+ def __len__(self):
+ return self.length
+
+ @internalcode
+ def loop(self, iterable):
+ if self._recurse is None:
+ raise TypeError('Tried to call non recursive loop. Maybe you '
+ "forgot the 'recursive' modifier.")
+ return self._recurse(iterable, self._recurse, self.depth0 + 1)
+
+ # a nifty trick to enhance the error message if someone tried to call
+ # the the loop without or with too many arguments.
+ __call__ = loop
+ del loop
+
+ def __repr__(self):
+ return '<%s %r/%r>' % (
+ self.__class__.__name__,
+ self.index,
+ self.length
+ )
+
+
+class LoopContext(LoopContextBase):
+
+ def __init__(self, iterable, recurse=None, depth0=0):
+ LoopContextBase.__init__(self, recurse, depth0)
+ self._iterator = iter(iterable)
+
+ # try to get the length of the iterable early. This must be done
+ # here because there are some broken iterators around where there
+ # __len__ is the number of iterations left (i'm looking at your
+ # listreverseiterator!).
+ try:
+ self._length = len(iterable)
+ except (TypeError, AttributeError):
+ self._length = None
+ self._after = self._safe_next()
+
+ @property
+ def length(self):
+ if self._length is None:
+ # if was not possible to get the length of the iterator when
+ # the loop context was created (ie: iterating over a generator)
+ # we have to convert the iterable into a sequence and use the
+ # length of that + the number of iterations so far.
+ iterable = tuple(self._iterator)
+ self._iterator = iter(iterable)
+ iterations_done = self.index0 + 2
+ self._length = len(iterable) + iterations_done
+ return self._length
+
+ def __iter__(self):
+ return LoopContextIterator(self)
+
+ def _safe_next(self):
+ try:
+ return next(self._iterator)
+ except StopIteration:
+ return _last_iteration
+
+
+@implements_iterator
+class LoopContextIterator(object):
+ """The iterator for a loop context."""
+ __slots__ = ('context',)
+
+ def __init__(self, context):
+ self.context = context
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ ctx = self.context
+ ctx.index0 += 1
+ if ctx._after is _last_iteration:
+ raise StopIteration()
+ next_elem = ctx._after
+ ctx._after = ctx._safe_next()
+ return next_elem, ctx
+
+
+class Macro(object):
+ """Wraps a macro function."""
+
+ def __init__(self, environment, func, name, arguments,
+ catch_kwargs, catch_varargs, caller,
+ default_autoescape=None):
+ self._environment = environment
+ self._func = func
+ self._argument_count = len(arguments)
+ self.name = name
+ self.arguments = arguments
+ self.catch_kwargs = catch_kwargs
+ self.catch_varargs = catch_varargs
+ self.caller = caller
+ self.explicit_caller = 'caller' in arguments
+ if default_autoescape is None:
+ default_autoescape = environment.autoescape
+ self._default_autoescape = default_autoescape
+
+ @internalcode
+ @evalcontextfunction
+ def __call__(self, *args, **kwargs):
+ # This requires a bit of explanation, In the past we used to
+ # decide largely based on compile-time information if a macro is
+ # safe or unsafe. While there was a volatile mode it was largely
+ # unused for deciding on escaping. This turns out to be
+ # problemtic for macros because if a macro is safe or not not so
+ # much depends on the escape mode when it was defined but when it
+ # was used.
+ #
+ # Because however we export macros from the module system and
+ # there are historic callers that do not pass an eval context (and
+ # will continue to not pass one), we need to perform an instance
+ # check here.
+ #
+ # This is considered safe because an eval context is not a valid
+ # argument to callables otherwise anwyays. Worst case here is
+ # that if no eval context is passed we fall back to the compile
+ # time autoescape flag.
+ if args and isinstance(args[0], EvalContext):
+ autoescape = args[0].autoescape
+ args = args[1:]
+ else:
+ autoescape = self._default_autoescape
+
+ # try to consume the positional arguments
+ arguments = list(args[:self._argument_count])
+ off = len(arguments)
+
+ # For information why this is necessary refer to the handling
+ # of caller in the `macro_body` handler in the compiler.
+ found_caller = False
+
+ # if the number of arguments consumed is not the number of
+ # arguments expected we start filling in keyword arguments
+ # and defaults.
+ if off != self._argument_count:
+ for idx, name in enumerate(self.arguments[len(arguments):]):
+ try:
+ value = kwargs.pop(name)
+ except KeyError:
+ value = missing
+ if name == 'caller':
+ found_caller = True
+ arguments.append(value)
+ else:
+ found_caller = self.explicit_caller
+
+ # it's important that the order of these arguments does not change
+ # if not also changed in the compiler's `function_scoping` method.
+ # the order is caller, keyword arguments, positional arguments!
+ if self.caller and not found_caller:
+ caller = kwargs.pop('caller', None)
+ if caller is None:
+ caller = self._environment.undefined('No caller defined',
+ name='caller')
+ arguments.append(caller)
+
+ if self.catch_kwargs:
+ arguments.append(kwargs)
+ elif kwargs:
+ if 'caller' in kwargs:
+ raise TypeError('macro %r was invoked with two values for '
+ 'the special caller argument. This is '
+ 'most likely a bug.' % self.name)
+ raise TypeError('macro %r takes no keyword argument %r' %
+ (self.name, next(iter(kwargs))))
+ if self.catch_varargs:
+ arguments.append(args[self._argument_count:])
+ elif len(args) > self._argument_count:
+ raise TypeError('macro %r takes not more than %d argument(s)' %
+ (self.name, len(self.arguments)))
+
+ return self._invoke(arguments, autoescape)
+
+ def _invoke(self, arguments, autoescape):
+ """This method is being swapped out by the async implementation."""
+ rv = self._func(*arguments)
+ if autoescape:
+ rv = Markup(rv)
+ return rv
+
+ def __repr__(self):
+ return '<%s %s>' % (
+ self.__class__.__name__,
+ self.name is None and 'anonymous' or repr(self.name)
+ )
+
+
+@implements_to_string
+class Undefined(object):
+ """The default undefined type. This undefined type can be printed and
+ iterated over, but every other access will raise an :exc:`jinja2.exceptions.UndefinedError`:
+
+ >>> foo = Undefined(name='foo')
+ >>> str(foo)
+ ''
+ >>> not foo
+ True
+ >>> foo + 42
+ Traceback (most recent call last):
+ ...
+ jinja2.exceptions.UndefinedError: 'foo' is undefined
+ """
+ __slots__ = ('_undefined_hint', '_undefined_obj', '_undefined_name',
+ '_undefined_exception')
+
+ def __init__(self, hint=None, obj=missing, name=None, exc=UndefinedError):
+ self._undefined_hint = hint
+ self._undefined_obj = obj
+ self._undefined_name = name
+ self._undefined_exception = exc
+
+ @internalcode
+ def _fail_with_undefined_error(self, *args, **kwargs):
+ """Regular callback function for undefined objects that raises an
+ `jinja2.exceptions.UndefinedError` on call.
+ """
+ if self._undefined_hint is None:
+ if self._undefined_obj is missing:
+ hint = '%r is undefined' % self._undefined_name
+ elif not isinstance(self._undefined_name, string_types):
+ hint = '%s has no element %r' % (
+ object_type_repr(self._undefined_obj),
+ self._undefined_name
+ )
+ else:
+ hint = '%r has no attribute %r' % (
+ object_type_repr(self._undefined_obj),
+ self._undefined_name
+ )
+ else:
+ hint = self._undefined_hint
+ raise self._undefined_exception(hint)
+
+ @internalcode
+ def __getattr__(self, name):
+ if name[:2] == '__':
+ raise AttributeError(name)
+ return self._fail_with_undefined_error()
+
+ __add__ = __radd__ = __mul__ = __rmul__ = __div__ = __rdiv__ = \
+ __truediv__ = __rtruediv__ = __floordiv__ = __rfloordiv__ = \
+ __mod__ = __rmod__ = __pos__ = __neg__ = __call__ = \
+ __getitem__ = __lt__ = __le__ = __gt__ = __ge__ = __int__ = \
+ __float__ = __complex__ = __pow__ = __rpow__ = __sub__ = \
+ __rsub__ = _fail_with_undefined_error
+
+ def __eq__(self, other):
+ return type(self) is type(other)
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def __hash__(self):
+ return id(type(self))
+
+ def __str__(self):
+ return u''
+
+ def __len__(self):
+ return 0
+
+ def __iter__(self):
+ if 0:
+ yield None
+
+ def __nonzero__(self):
+ return False
+ __bool__ = __nonzero__
+
+ def __repr__(self):
+ return 'Undefined'
+
+
+def make_logging_undefined(logger=None, base=None):
+ """Given a logger object this returns a new undefined class that will
+ log certain failures. It will log iterations and printing. If no
+ logger is given a default logger is created.
+
+ Example::
+
+ logger = logging.getLogger(__name__)
+ LoggingUndefined = make_logging_undefined(
+ logger=logger,
+ base=Undefined
+ )
+
+ .. versionadded:: 2.8
+
+ :param logger: the logger to use. If not provided, a default logger
+ is created.
+ :param base: the base class to add logging functionality to. This
+ defaults to :class:`Undefined`.
+ """
+ if logger is None:
+ import logging
+ logger = logging.getLogger(__name__)
+ logger.addHandler(logging.StreamHandler(sys.stderr))
+ if base is None:
+ base = Undefined
+
+ def _log_message(undef):
+ if undef._undefined_hint is None:
+ if undef._undefined_obj is missing:
+ hint = '%s is undefined' % undef._undefined_name
+ elif not isinstance(undef._undefined_name, string_types):
+ hint = '%s has no element %s' % (
+ object_type_repr(undef._undefined_obj),
+ undef._undefined_name)
+ else:
+ hint = '%s has no attribute %s' % (
+ object_type_repr(undef._undefined_obj),
+ undef._undefined_name)
+ else:
+ hint = undef._undefined_hint
+ logger.warning('Template variable warning: %s', hint)
+
+ class LoggingUndefined(base):
+
+ def _fail_with_undefined_error(self, *args, **kwargs):
+ try:
+ return base._fail_with_undefined_error(self, *args, **kwargs)
+ except self._undefined_exception as e:
+ logger.error('Template variable error: %s', str(e))
+ raise e
+
+ def __str__(self):
+ rv = base.__str__(self)
+ _log_message(self)
+ return rv
+
+ def __iter__(self):
+ rv = base.__iter__(self)
+ _log_message(self)
+ return rv
+
+ if PY2:
+ def __nonzero__(self):
+ rv = base.__nonzero__(self)
+ _log_message(self)
+ return rv
+
+ def __unicode__(self):
+ rv = base.__unicode__(self)
+ _log_message(self)
+ return rv
+ else:
+ def __bool__(self):
+ rv = base.__bool__(self)
+ _log_message(self)
+ return rv
+
+ return LoggingUndefined
+
+
+@implements_to_string
+class DebugUndefined(Undefined):
+ """An undefined that returns the debug info when printed.
+
+ >>> foo = DebugUndefined(name='foo')
+ >>> str(foo)
+ '{{ foo }}'
+ >>> not foo
+ True
+ >>> foo + 42
+ Traceback (most recent call last):
+ ...
+ jinja2.exceptions.UndefinedError: 'foo' is undefined
+ """
+ __slots__ = ()
+
+ def __str__(self):
+ if self._undefined_hint is None:
+ if self._undefined_obj is missing:
+ return u'{{ %s }}' % self._undefined_name
+ return '{{ no such element: %s[%r] }}' % (
+ object_type_repr(self._undefined_obj),
+ self._undefined_name
+ )
+ return u'{{ undefined value printed: %s }}' % self._undefined_hint
+
+
+@implements_to_string
+class StrictUndefined(Undefined):
+ """An undefined that barks on print and iteration as well as boolean
+ tests and all kinds of comparisons. In other words: you can do nothing
+ with it except checking if it's defined using the `defined` test.
+
+ >>> foo = StrictUndefined(name='foo')
+ >>> str(foo)
+ Traceback (most recent call last):
+ ...
+ jinja2.exceptions.UndefinedError: 'foo' is undefined
+ >>> not foo
+ Traceback (most recent call last):
+ ...
+ jinja2.exceptions.UndefinedError: 'foo' is undefined
+ >>> foo + 42
+ Traceback (most recent call last):
+ ...
+ jinja2.exceptions.UndefinedError: 'foo' is undefined
+ """
+ __slots__ = ()
+ __iter__ = __str__ = __len__ = __nonzero__ = __eq__ = \
+ __ne__ = __bool__ = __hash__ = \
+ Undefined._fail_with_undefined_error
+
+
+# remove remaining slots attributes, after the metaclass did the magic they
+# are unneeded and irritating as they contain wrong data for the subclasses.
+del Undefined.__slots__, DebugUndefined.__slots__, StrictUndefined.__slots__
diff --git a/lib/spack/external/jinja2/sandbox.py b/lib/spack/external/jinja2/sandbox.py
new file mode 100644
index 0000000000..32e2435010
--- /dev/null
+++ b/lib/spack/external/jinja2/sandbox.py
@@ -0,0 +1,475 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.sandbox
+ ~~~~~~~~~~~~~~
+
+ Adds a sandbox layer to Jinja as it was the default behavior in the old
+ Jinja 1 releases. This sandbox is slightly different from Jinja 1 as the
+ default behavior is easier to use.
+
+ The behavior can be changed by subclassing the environment.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+import types
+import operator
+from collections import Mapping
+from jinja2.environment import Environment
+from jinja2.exceptions import SecurityError
+from jinja2._compat import string_types, PY2
+from jinja2.utils import Markup
+
+from markupsafe import EscapeFormatter
+from string import Formatter
+
+
+#: maximum number of items a range may produce
+MAX_RANGE = 100000
+
+#: attributes of function objects that are considered unsafe.
+if PY2:
+ UNSAFE_FUNCTION_ATTRIBUTES = set(['func_closure', 'func_code', 'func_dict',
+ 'func_defaults', 'func_globals'])
+else:
+ # On versions > python 2 the special attributes on functions are gone,
+ # but they remain on methods and generators for whatever reason.
+ UNSAFE_FUNCTION_ATTRIBUTES = set()
+
+
+#: unsafe method attributes. function attributes are unsafe for methods too
+UNSAFE_METHOD_ATTRIBUTES = set(['im_class', 'im_func', 'im_self'])
+
+#: unsafe generator attirbutes.
+UNSAFE_GENERATOR_ATTRIBUTES = set(['gi_frame', 'gi_code'])
+
+#: unsafe attributes on coroutines
+UNSAFE_COROUTINE_ATTRIBUTES = set(['cr_frame', 'cr_code'])
+
+#: unsafe attributes on async generators
+UNSAFE_ASYNC_GENERATOR_ATTRIBUTES = set(['ag_code', 'ag_frame'])
+
+import warnings
+
+# make sure we don't warn in python 2.6 about stuff we don't care about
+warnings.filterwarnings('ignore', 'the sets module', DeprecationWarning,
+ module='jinja2.sandbox')
+
+from collections import deque
+
+_mutable_set_types = (set,)
+_mutable_mapping_types = (dict,)
+_mutable_sequence_types = (list,)
+
+
+# on python 2.x we can register the user collection types
+try:
+ from UserDict import UserDict, DictMixin
+ from UserList import UserList
+ _mutable_mapping_types += (UserDict, DictMixin)
+ _mutable_set_types += (UserList,)
+except ImportError:
+ pass
+
+# if sets is still available, register the mutable set from there as well
+try:
+ from sets import Set
+ _mutable_set_types += (Set,)
+except ImportError:
+ pass
+
+#: register Python 2.6 abstract base classes
+from collections import MutableSet, MutableMapping, MutableSequence
+_mutable_set_types += (MutableSet,)
+_mutable_mapping_types += (MutableMapping,)
+_mutable_sequence_types += (MutableSequence,)
+
+
+_mutable_spec = (
+ (_mutable_set_types, frozenset([
+ 'add', 'clear', 'difference_update', 'discard', 'pop', 'remove',
+ 'symmetric_difference_update', 'update'
+ ])),
+ (_mutable_mapping_types, frozenset([
+ 'clear', 'pop', 'popitem', 'setdefault', 'update'
+ ])),
+ (_mutable_sequence_types, frozenset([
+ 'append', 'reverse', 'insert', 'sort', 'extend', 'remove'
+ ])),
+ (deque, frozenset([
+ 'append', 'appendleft', 'clear', 'extend', 'extendleft', 'pop',
+ 'popleft', 'remove', 'rotate'
+ ]))
+)
+
+
+class _MagicFormatMapping(Mapping):
+ """This class implements a dummy wrapper to fix a bug in the Python
+ standard library for string formatting.
+
+ See http://bugs.python.org/issue13598 for information about why
+ this is necessary.
+ """
+
+ def __init__(self, args, kwargs):
+ self._args = args
+ self._kwargs = kwargs
+ self._last_index = 0
+
+ def __getitem__(self, key):
+ if key == '':
+ idx = self._last_index
+ self._last_index += 1
+ try:
+ return self._args[idx]
+ except LookupError:
+ pass
+ key = str(idx)
+ return self._kwargs[key]
+
+ def __iter__(self):
+ return iter(self._kwargs)
+
+ def __len__(self):
+ return len(self._kwargs)
+
+
+def inspect_format_method(callable):
+ if not isinstance(callable, (types.MethodType,
+ types.BuiltinMethodType)) or \
+ callable.__name__ != 'format':
+ return None
+ obj = callable.__self__
+ if isinstance(obj, string_types):
+ return obj
+
+
+def safe_range(*args):
+ """A range that can't generate ranges with a length of more than
+ MAX_RANGE items.
+ """
+ rng = range(*args)
+ if len(rng) > MAX_RANGE:
+ raise OverflowError('range too big, maximum size for range is %d' %
+ MAX_RANGE)
+ return rng
+
+
+def unsafe(f):
+ """Marks a function or method as unsafe.
+
+ ::
+
+ @unsafe
+ def delete(self):
+ pass
+ """
+ f.unsafe_callable = True
+ return f
+
+
+def is_internal_attribute(obj, attr):
+ """Test if the attribute given is an internal python attribute. For
+ example this function returns `True` for the `func_code` attribute of
+ python objects. This is useful if the environment method
+ :meth:`~SandboxedEnvironment.is_safe_attribute` is overridden.
+
+ >>> from jinja2.sandbox import is_internal_attribute
+ >>> is_internal_attribute(str, "mro")
+ True
+ >>> is_internal_attribute(str, "upper")
+ False
+ """
+ if isinstance(obj, types.FunctionType):
+ if attr in UNSAFE_FUNCTION_ATTRIBUTES:
+ return True
+ elif isinstance(obj, types.MethodType):
+ if attr in UNSAFE_FUNCTION_ATTRIBUTES or \
+ attr in UNSAFE_METHOD_ATTRIBUTES:
+ return True
+ elif isinstance(obj, type):
+ if attr == 'mro':
+ return True
+ elif isinstance(obj, (types.CodeType, types.TracebackType, types.FrameType)):
+ return True
+ elif isinstance(obj, types.GeneratorType):
+ if attr in UNSAFE_GENERATOR_ATTRIBUTES:
+ return True
+ elif hasattr(types, 'CoroutineType') and isinstance(obj, types.CoroutineType):
+ if attr in UNSAFE_COROUTINE_ATTRIBUTES:
+ return True
+ elif hasattr(types, 'AsyncGeneratorType') and isinstance(obj, types.AsyncGeneratorType):
+ if attr in UNSAFE_ASYNC_GENERATOR_ATTRIBUTES:
+ return True
+ return attr.startswith('__')
+
+
+def modifies_known_mutable(obj, attr):
+ """This function checks if an attribute on a builtin mutable object
+ (list, dict, set or deque) would modify it if called. It also supports
+ the "user"-versions of the objects (`sets.Set`, `UserDict.*` etc.) and
+ with Python 2.6 onwards the abstract base classes `MutableSet`,
+ `MutableMapping`, and `MutableSequence`.
+
+ >>> modifies_known_mutable({}, "clear")
+ True
+ >>> modifies_known_mutable({}, "keys")
+ False
+ >>> modifies_known_mutable([], "append")
+ True
+ >>> modifies_known_mutable([], "index")
+ False
+
+ If called with an unsupported object (such as unicode) `False` is
+ returned.
+
+ >>> modifies_known_mutable("foo", "upper")
+ False
+ """
+ for typespec, unsafe in _mutable_spec:
+ if isinstance(obj, typespec):
+ return attr in unsafe
+ return False
+
+
+class SandboxedEnvironment(Environment):
+ """The sandboxed environment. It works like the regular environment but
+ tells the compiler to generate sandboxed code. Additionally subclasses of
+ this environment may override the methods that tell the runtime what
+ attributes or functions are safe to access.
+
+ If the template tries to access insecure code a :exc:`SecurityError` is
+ raised. However also other exceptions may occur during the rendering so
+ the caller has to ensure that all exceptions are caught.
+ """
+ sandboxed = True
+
+ #: default callback table for the binary operators. A copy of this is
+ #: available on each instance of a sandboxed environment as
+ #: :attr:`binop_table`
+ default_binop_table = {
+ '+': operator.add,
+ '-': operator.sub,
+ '*': operator.mul,
+ '/': operator.truediv,
+ '//': operator.floordiv,
+ '**': operator.pow,
+ '%': operator.mod
+ }
+
+ #: default callback table for the unary operators. A copy of this is
+ #: available on each instance of a sandboxed environment as
+ #: :attr:`unop_table`
+ default_unop_table = {
+ '+': operator.pos,
+ '-': operator.neg
+ }
+
+ #: a set of binary operators that should be intercepted. Each operator
+ #: that is added to this set (empty by default) is delegated to the
+ #: :meth:`call_binop` method that will perform the operator. The default
+ #: operator callback is specified by :attr:`binop_table`.
+ #:
+ #: The following binary operators are interceptable:
+ #: ``//``, ``%``, ``+``, ``*``, ``-``, ``/``, and ``**``
+ #:
+ #: The default operation form the operator table corresponds to the
+ #: builtin function. Intercepted calls are always slower than the native
+ #: operator call, so make sure only to intercept the ones you are
+ #: interested in.
+ #:
+ #: .. versionadded:: 2.6
+ intercepted_binops = frozenset()
+
+ #: a set of unary operators that should be intercepted. Each operator
+ #: that is added to this set (empty by default) is delegated to the
+ #: :meth:`call_unop` method that will perform the operator. The default
+ #: operator callback is specified by :attr:`unop_table`.
+ #:
+ #: The following unary operators are interceptable: ``+``, ``-``
+ #:
+ #: The default operation form the operator table corresponds to the
+ #: builtin function. Intercepted calls are always slower than the native
+ #: operator call, so make sure only to intercept the ones you are
+ #: interested in.
+ #:
+ #: .. versionadded:: 2.6
+ intercepted_unops = frozenset()
+
+ def intercept_unop(self, operator):
+ """Called during template compilation with the name of a unary
+ operator to check if it should be intercepted at runtime. If this
+ method returns `True`, :meth:`call_unop` is excuted for this unary
+ operator. The default implementation of :meth:`call_unop` will use
+ the :attr:`unop_table` dictionary to perform the operator with the
+ same logic as the builtin one.
+
+ The following unary operators are interceptable: ``+`` and ``-``
+
+ Intercepted calls are always slower than the native operator call,
+ so make sure only to intercept the ones you are interested in.
+
+ .. versionadded:: 2.6
+ """
+ return False
+
+
+ def __init__(self, *args, **kwargs):
+ Environment.__init__(self, *args, **kwargs)
+ self.globals['range'] = safe_range
+ self.binop_table = self.default_binop_table.copy()
+ self.unop_table = self.default_unop_table.copy()
+
+ def is_safe_attribute(self, obj, attr, value):
+ """The sandboxed environment will call this method to check if the
+ attribute of an object is safe to access. Per default all attributes
+ starting with an underscore are considered private as well as the
+ special attributes of internal python objects as returned by the
+ :func:`is_internal_attribute` function.
+ """
+ return not (attr.startswith('_') or is_internal_attribute(obj, attr))
+
+ def is_safe_callable(self, obj):
+ """Check if an object is safely callable. Per default a function is
+ considered safe unless the `unsafe_callable` attribute exists and is
+ True. Override this method to alter the behavior, but this won't
+ affect the `unsafe` decorator from this module.
+ """
+ return not (getattr(obj, 'unsafe_callable', False) or
+ getattr(obj, 'alters_data', False))
+
+ def call_binop(self, context, operator, left, right):
+ """For intercepted binary operator calls (:meth:`intercepted_binops`)
+ this function is executed instead of the builtin operator. This can
+ be used to fine tune the behavior of certain operators.
+
+ .. versionadded:: 2.6
+ """
+ return self.binop_table[operator](left, right)
+
+ def call_unop(self, context, operator, arg):
+ """For intercepted unary operator calls (:meth:`intercepted_unops`)
+ this function is executed instead of the builtin operator. This can
+ be used to fine tune the behavior of certain operators.
+
+ .. versionadded:: 2.6
+ """
+ return self.unop_table[operator](arg)
+
+ def getitem(self, obj, argument):
+ """Subscribe an object from sandboxed code."""
+ try:
+ return obj[argument]
+ except (TypeError, LookupError):
+ if isinstance(argument, string_types):
+ try:
+ attr = str(argument)
+ except Exception:
+ pass
+ else:
+ try:
+ value = getattr(obj, attr)
+ except AttributeError:
+ pass
+ else:
+ if self.is_safe_attribute(obj, argument, value):
+ return value
+ return self.unsafe_undefined(obj, argument)
+ return self.undefined(obj=obj, name=argument)
+
+ def getattr(self, obj, attribute):
+ """Subscribe an object from sandboxed code and prefer the
+ attribute. The attribute passed *must* be a bytestring.
+ """
+ try:
+ value = getattr(obj, attribute)
+ except AttributeError:
+ try:
+ return obj[attribute]
+ except (TypeError, LookupError):
+ pass
+ else:
+ if self.is_safe_attribute(obj, attribute, value):
+ return value
+ return self.unsafe_undefined(obj, attribute)
+ return self.undefined(obj=obj, name=attribute)
+
+ def unsafe_undefined(self, obj, attribute):
+ """Return an undefined object for unsafe attributes."""
+ return self.undefined('access to attribute %r of %r '
+ 'object is unsafe.' % (
+ attribute,
+ obj.__class__.__name__
+ ), name=attribute, obj=obj, exc=SecurityError)
+
+ def format_string(self, s, args, kwargs):
+ """If a format call is detected, then this is routed through this
+ method so that our safety sandbox can be used for it.
+ """
+ if isinstance(s, Markup):
+ formatter = SandboxedEscapeFormatter(self, s.escape)
+ else:
+ formatter = SandboxedFormatter(self)
+ kwargs = _MagicFormatMapping(args, kwargs)
+ rv = formatter.vformat(s, args, kwargs)
+ return type(s)(rv)
+
+ def call(__self, __context, __obj, *args, **kwargs):
+ """Call an object from sandboxed code."""
+ fmt = inspect_format_method(__obj)
+ if fmt is not None:
+ return __self.format_string(fmt, args, kwargs)
+
+ # the double prefixes are to avoid double keyword argument
+ # errors when proxying the call.
+ if not __self.is_safe_callable(__obj):
+ raise SecurityError('%r is not safely callable' % (__obj,))
+ return __context.call(__obj, *args, **kwargs)
+
+
+class ImmutableSandboxedEnvironment(SandboxedEnvironment):
+ """Works exactly like the regular `SandboxedEnvironment` but does not
+ permit modifications on the builtin mutable objects `list`, `set`, and
+ `dict` by using the :func:`modifies_known_mutable` function.
+ """
+
+ def is_safe_attribute(self, obj, attr, value):
+ if not SandboxedEnvironment.is_safe_attribute(self, obj, attr, value):
+ return False
+ return not modifies_known_mutable(obj, attr)
+
+
+# This really is not a public API apparenlty.
+try:
+ from _string import formatter_field_name_split
+except ImportError:
+ def formatter_field_name_split(field_name):
+ return field_name._formatter_field_name_split()
+
+
+class SandboxedFormatterMixin(object):
+
+ def __init__(self, env):
+ self._env = env
+
+ def get_field(self, field_name, args, kwargs):
+ first, rest = formatter_field_name_split(field_name)
+ obj = self.get_value(first, args, kwargs)
+ for is_attr, i in rest:
+ if is_attr:
+ obj = self._env.getattr(obj, i)
+ else:
+ obj = self._env.getitem(obj, i)
+ return obj, first
+
+class SandboxedFormatter(SandboxedFormatterMixin, Formatter):
+
+ def __init__(self, env):
+ SandboxedFormatterMixin.__init__(self, env)
+ Formatter.__init__(self)
+
+class SandboxedEscapeFormatter(SandboxedFormatterMixin, EscapeFormatter):
+
+ def __init__(self, env, escape):
+ SandboxedFormatterMixin.__init__(self, env)
+ EscapeFormatter.__init__(self, escape)
diff --git a/lib/spack/external/jinja2/tests.py b/lib/spack/external/jinja2/tests.py
new file mode 100644
index 0000000000..bd843b77bc
--- /dev/null
+++ b/lib/spack/external/jinja2/tests.py
@@ -0,0 +1,185 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.tests
+ ~~~~~~~~~~~~
+
+ Jinja test functions. Used with the "is" operator.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import re
+from collections import Mapping
+from jinja2.runtime import Undefined
+from jinja2._compat import text_type, string_types, integer_types
+import decimal
+
+number_re = re.compile(r'^-?\d+(\.\d+)?$')
+regex_type = type(number_re)
+
+
+test_callable = callable
+
+
+def test_odd(value):
+ """Return true if the variable is odd."""
+ return value % 2 == 1
+
+
+def test_even(value):
+ """Return true if the variable is even."""
+ return value % 2 == 0
+
+
+def test_divisibleby(value, num):
+ """Check if a variable is divisible by a number."""
+ return value % num == 0
+
+
+def test_defined(value):
+ """Return true if the variable is defined:
+
+ .. sourcecode:: jinja
+
+ {% if variable is defined %}
+ value of variable: {{ variable }}
+ {% else %}
+ variable is not defined
+ {% endif %}
+
+ See the :func:`default` filter for a simple way to set undefined
+ variables.
+ """
+ return not isinstance(value, Undefined)
+
+
+def test_undefined(value):
+ """Like :func:`defined` but the other way round."""
+ return isinstance(value, Undefined)
+
+
+def test_none(value):
+ """Return true if the variable is none."""
+ return value is None
+
+
+def test_lower(value):
+ """Return true if the variable is lowercased."""
+ return text_type(value).islower()
+
+
+def test_upper(value):
+ """Return true if the variable is uppercased."""
+ return text_type(value).isupper()
+
+
+def test_string(value):
+ """Return true if the object is a string."""
+ return isinstance(value, string_types)
+
+
+def test_mapping(value):
+ """Return true if the object is a mapping (dict etc.).
+
+ .. versionadded:: 2.6
+ """
+ return isinstance(value, Mapping)
+
+
+def test_number(value):
+ """Return true if the variable is a number."""
+ return isinstance(value, integer_types + (float, complex, decimal.Decimal))
+
+
+def test_sequence(value):
+ """Return true if the variable is a sequence. Sequences are variables
+ that are iterable.
+ """
+ try:
+ len(value)
+ value.__getitem__
+ except:
+ return False
+ return True
+
+
+def test_equalto(value, other):
+ """Check if an object has the same value as another object:
+
+ .. sourcecode:: jinja
+
+ {% if foo.expression is equalto 42 %}
+ the foo attribute evaluates to the constant 42
+ {% endif %}
+
+ This appears to be a useless test as it does exactly the same as the
+ ``==`` operator, but it can be useful when used together with the
+ `selectattr` function:
+
+ .. sourcecode:: jinja
+
+ {{ users|selectattr("email", "equalto", "foo@bar.invalid") }}
+
+ .. versionadded:: 2.8
+ """
+ return value == other
+
+
+def test_sameas(value, other):
+ """Check if an object points to the same memory address than another
+ object:
+
+ .. sourcecode:: jinja
+
+ {% if foo.attribute is sameas false %}
+ the foo attribute really is the `False` singleton
+ {% endif %}
+ """
+ return value is other
+
+
+def test_iterable(value):
+ """Check if it's possible to iterate over an object."""
+ try:
+ iter(value)
+ except TypeError:
+ return False
+ return True
+
+
+def test_escaped(value):
+ """Check if the value is escaped."""
+ return hasattr(value, '__html__')
+
+
+def test_greaterthan(value, other):
+ """Check if value is greater than other."""
+ return value > other
+
+
+def test_lessthan(value, other):
+ """Check if value is less than other."""
+ return value < other
+
+
+TESTS = {
+ 'odd': test_odd,
+ 'even': test_even,
+ 'divisibleby': test_divisibleby,
+ 'defined': test_defined,
+ 'undefined': test_undefined,
+ 'none': test_none,
+ 'lower': test_lower,
+ 'upper': test_upper,
+ 'string': test_string,
+ 'mapping': test_mapping,
+ 'number': test_number,
+ 'sequence': test_sequence,
+ 'iterable': test_iterable,
+ 'callable': test_callable,
+ 'sameas': test_sameas,
+ 'equalto': test_equalto,
+ 'escaped': test_escaped,
+ 'greaterthan': test_greaterthan,
+ 'lessthan': test_lessthan
+}
diff --git a/lib/spack/external/jinja2/utils.py b/lib/spack/external/jinja2/utils.py
new file mode 100644
index 0000000000..b96d309546
--- /dev/null
+++ b/lib/spack/external/jinja2/utils.py
@@ -0,0 +1,624 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.utils
+ ~~~~~~~~~~~~
+
+ Utility functions.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD, see LICENSE for more details.
+"""
+import re
+import json
+import errno
+from collections import deque
+from threading import Lock
+from jinja2._compat import text_type, string_types, implements_iterator, \
+ url_quote
+
+
+_word_split_re = re.compile(r'(\s+)')
+_punctuation_re = re.compile(
+ '^(?P<lead>(?:%s)*)(?P<middle>.*?)(?P<trail>(?:%s)*)$' % (
+ '|'.join(map(re.escape, ('(', '<', '&lt;'))),
+ '|'.join(map(re.escape, ('.', ',', ')', '>', '\n', '&gt;')))
+ )
+)
+_simple_email_re = re.compile(r'^\S+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+$')
+_striptags_re = re.compile(r'(<!--.*?-->|<[^>]*>)')
+_entity_re = re.compile(r'&([^;]+);')
+_letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
+_digits = '0123456789'
+
+# special singleton representing missing values for the runtime
+missing = type('MissingType', (), {'__repr__': lambda x: 'missing'})()
+
+# internal code
+internal_code = set()
+
+concat = u''.join
+
+_slash_escape = '\\/' not in json.dumps('/')
+
+
+def contextfunction(f):
+ """This decorator can be used to mark a function or method context callable.
+ A context callable is passed the active :class:`Context` as first argument when
+ called from the template. This is useful if a function wants to get access
+ to the context or functions provided on the context object. For example
+ a function that returns a sorted list of template variables the current
+ template exports could look like this::
+
+ @contextfunction
+ def get_exported_names(context):
+ return sorted(context.exported_vars)
+ """
+ f.contextfunction = True
+ return f
+
+
+def evalcontextfunction(f):
+ """This decorator can be used to mark a function or method as an eval
+ context callable. This is similar to the :func:`contextfunction`
+ but instead of passing the context, an evaluation context object is
+ passed. For more information about the eval context, see
+ :ref:`eval-context`.
+
+ .. versionadded:: 2.4
+ """
+ f.evalcontextfunction = True
+ return f
+
+
+def environmentfunction(f):
+ """This decorator can be used to mark a function or method as environment
+ callable. This decorator works exactly like the :func:`contextfunction`
+ decorator just that the first argument is the active :class:`Environment`
+ and not context.
+ """
+ f.environmentfunction = True
+ return f
+
+
+def internalcode(f):
+ """Marks the function as internally used"""
+ internal_code.add(f.__code__)
+ return f
+
+
+def is_undefined(obj):
+ """Check if the object passed is undefined. This does nothing more than
+ performing an instance check against :class:`Undefined` but looks nicer.
+ This can be used for custom filters or tests that want to react to
+ undefined variables. For example a custom default filter can look like
+ this::
+
+ def default(var, default=''):
+ if is_undefined(var):
+ return default
+ return var
+ """
+ from jinja2.runtime import Undefined
+ return isinstance(obj, Undefined)
+
+
+def consume(iterable):
+ """Consumes an iterable without doing anything with it."""
+ for event in iterable:
+ pass
+
+
+def clear_caches():
+ """Jinja2 keeps internal caches for environments and lexers. These are
+ used so that Jinja2 doesn't have to recreate environments and lexers all
+ the time. Normally you don't have to care about that but if you are
+ measuring memory consumption you may want to clean the caches.
+ """
+ from jinja2.environment import _spontaneous_environments
+ from jinja2.lexer import _lexer_cache
+ _spontaneous_environments.clear()
+ _lexer_cache.clear()
+
+
+def import_string(import_name, silent=False):
+ """Imports an object based on a string. This is useful if you want to
+ use import paths as endpoints or something similar. An import path can
+ be specified either in dotted notation (``xml.sax.saxutils.escape``)
+ or with a colon as object delimiter (``xml.sax.saxutils:escape``).
+
+ If the `silent` is True the return value will be `None` if the import
+ fails.
+
+ :return: imported object
+ """
+ try:
+ if ':' in import_name:
+ module, obj = import_name.split(':', 1)
+ elif '.' in import_name:
+ items = import_name.split('.')
+ module = '.'.join(items[:-1])
+ obj = items[-1]
+ else:
+ return __import__(import_name)
+ return getattr(__import__(module, None, None, [obj]), obj)
+ except (ImportError, AttributeError):
+ if not silent:
+ raise
+
+
+def open_if_exists(filename, mode='rb'):
+ """Returns a file descriptor for the filename if that file exists,
+ otherwise `None`.
+ """
+ try:
+ return open(filename, mode)
+ except IOError as e:
+ if e.errno not in (errno.ENOENT, errno.EISDIR, errno.EINVAL):
+ raise
+
+
+def object_type_repr(obj):
+ """Returns the name of the object's type. For some recognized
+ singletons the name of the object is returned instead. (For
+ example for `None` and `Ellipsis`).
+ """
+ if obj is None:
+ return 'None'
+ elif obj is Ellipsis:
+ return 'Ellipsis'
+ # __builtin__ in 2.x, builtins in 3.x
+ if obj.__class__.__module__ in ('__builtin__', 'builtins'):
+ name = obj.__class__.__name__
+ else:
+ name = obj.__class__.__module__ + '.' + obj.__class__.__name__
+ return '%s object' % name
+
+
+def pformat(obj, verbose=False):
+ """Prettyprint an object. Either use the `pretty` library or the
+ builtin `pprint`.
+ """
+ try:
+ from pretty import pretty
+ return pretty(obj, verbose=verbose)
+ except ImportError:
+ from pprint import pformat
+ return pformat(obj)
+
+
+def urlize(text, trim_url_limit=None, rel=None, target=None):
+ """Converts any URLs in text into clickable links. Works on http://,
+ https:// and www. links. Links can have trailing punctuation (periods,
+ commas, close-parens) and leading punctuation (opening parens) and
+ it'll still do the right thing.
+
+ If trim_url_limit is not None, the URLs in link text will be limited
+ to trim_url_limit characters.
+
+ If nofollow is True, the URLs in link text will get a rel="nofollow"
+ attribute.
+
+ If target is not None, a target attribute will be added to the link.
+ """
+ trim_url = lambda x, limit=trim_url_limit: limit is not None \
+ and (x[:limit] + (len(x) >=limit and '...'
+ or '')) or x
+ words = _word_split_re.split(text_type(escape(text)))
+ rel_attr = rel and ' rel="%s"' % text_type(escape(rel)) or ''
+ target_attr = target and ' target="%s"' % escape(target) or ''
+
+ for i, word in enumerate(words):
+ match = _punctuation_re.match(word)
+ if match:
+ lead, middle, trail = match.groups()
+ if middle.startswith('www.') or (
+ '@' not in middle and
+ not middle.startswith('http://') and
+ not middle.startswith('https://') and
+ len(middle) > 0 and
+ middle[0] in _letters + _digits and (
+ middle.endswith('.org') or
+ middle.endswith('.net') or
+ middle.endswith('.com')
+ )):
+ middle = '<a href="http://%s"%s%s>%s</a>' % (middle,
+ rel_attr, target_attr, trim_url(middle))
+ if middle.startswith('http://') or \
+ middle.startswith('https://'):
+ middle = '<a href="%s"%s%s>%s</a>' % (middle,
+ rel_attr, target_attr, trim_url(middle))
+ if '@' in middle and not middle.startswith('www.') and \
+ not ':' in middle and _simple_email_re.match(middle):
+ middle = '<a href="mailto:%s">%s</a>' % (middle, middle)
+ if lead + middle + trail != word:
+ words[i] = lead + middle + trail
+ return u''.join(words)
+
+
+def generate_lorem_ipsum(n=5, html=True, min=20, max=100):
+ """Generate some lorem ipsum for the template."""
+ from jinja2.constants import LOREM_IPSUM_WORDS
+ from random import choice, randrange
+ words = LOREM_IPSUM_WORDS.split()
+ result = []
+
+ for _ in range(n):
+ next_capitalized = True
+ last_comma = last_fullstop = 0
+ word = None
+ last = None
+ p = []
+
+ # each paragraph contains out of 20 to 100 words.
+ for idx, _ in enumerate(range(randrange(min, max))):
+ while True:
+ word = choice(words)
+ if word != last:
+ last = word
+ break
+ if next_capitalized:
+ word = word.capitalize()
+ next_capitalized = False
+ # add commas
+ if idx - randrange(3, 8) > last_comma:
+ last_comma = idx
+ last_fullstop += 2
+ word += ','
+ # add end of sentences
+ if idx - randrange(10, 20) > last_fullstop:
+ last_comma = last_fullstop = idx
+ word += '.'
+ next_capitalized = True
+ p.append(word)
+
+ # ensure that the paragraph ends with a dot.
+ p = u' '.join(p)
+ if p.endswith(','):
+ p = p[:-1] + '.'
+ elif not p.endswith('.'):
+ p += '.'
+ result.append(p)
+
+ if not html:
+ return u'\n\n'.join(result)
+ return Markup(u'\n'.join(u'<p>%s</p>' % escape(x) for x in result))
+
+
+def unicode_urlencode(obj, charset='utf-8', for_qs=False):
+ """URL escapes a single bytestring or unicode string with the
+ given charset if applicable to URL safe quoting under all rules
+ that need to be considered under all supported Python versions.
+
+ If non strings are provided they are converted to their unicode
+ representation first.
+ """
+ if not isinstance(obj, string_types):
+ obj = text_type(obj)
+ if isinstance(obj, text_type):
+ obj = obj.encode(charset)
+ safe = not for_qs and b'/' or b''
+ rv = text_type(url_quote(obj, safe))
+ if for_qs:
+ rv = rv.replace('%20', '+')
+ return rv
+
+
+class LRUCache(object):
+ """A simple LRU Cache implementation."""
+
+ # this is fast for small capacities (something below 1000) but doesn't
+ # scale. But as long as it's only used as storage for templates this
+ # won't do any harm.
+
+ def __init__(self, capacity):
+ self.capacity = capacity
+ self._mapping = {}
+ self._queue = deque()
+ self._postinit()
+
+ def _postinit(self):
+ # alias all queue methods for faster lookup
+ self._popleft = self._queue.popleft
+ self._pop = self._queue.pop
+ self._remove = self._queue.remove
+ self._wlock = Lock()
+ self._append = self._queue.append
+
+ def __getstate__(self):
+ return {
+ 'capacity': self.capacity,
+ '_mapping': self._mapping,
+ '_queue': self._queue
+ }
+
+ def __setstate__(self, d):
+ self.__dict__.update(d)
+ self._postinit()
+
+ def __getnewargs__(self):
+ return (self.capacity,)
+
+ def copy(self):
+ """Return a shallow copy of the instance."""
+ rv = self.__class__(self.capacity)
+ rv._mapping.update(self._mapping)
+ rv._queue = deque(self._queue)
+ return rv
+
+ def get(self, key, default=None):
+ """Return an item from the cache dict or `default`"""
+ try:
+ return self[key]
+ except KeyError:
+ return default
+
+ def setdefault(self, key, default=None):
+ """Set `default` if the key is not in the cache otherwise
+ leave unchanged. Return the value of this key.
+ """
+ self._wlock.acquire()
+ try:
+ try:
+ return self[key]
+ except KeyError:
+ self[key] = default
+ return default
+ finally:
+ self._wlock.release()
+
+ def clear(self):
+ """Clear the cache."""
+ self._wlock.acquire()
+ try:
+ self._mapping.clear()
+ self._queue.clear()
+ finally:
+ self._wlock.release()
+
+ def __contains__(self, key):
+ """Check if a key exists in this cache."""
+ return key in self._mapping
+
+ def __len__(self):
+ """Return the current size of the cache."""
+ return len(self._mapping)
+
+ def __repr__(self):
+ return '<%s %r>' % (
+ self.__class__.__name__,
+ self._mapping
+ )
+
+ def __getitem__(self, key):
+ """Get an item from the cache. Moves the item up so that it has the
+ highest priority then.
+
+ Raise a `KeyError` if it does not exist.
+ """
+ self._wlock.acquire()
+ try:
+ rv = self._mapping[key]
+ if self._queue[-1] != key:
+ try:
+ self._remove(key)
+ except ValueError:
+ # if something removed the key from the container
+ # when we read, ignore the ValueError that we would
+ # get otherwise.
+ pass
+ self._append(key)
+ return rv
+ finally:
+ self._wlock.release()
+
+ def __setitem__(self, key, value):
+ """Sets the value for an item. Moves the item up so that it
+ has the highest priority then.
+ """
+ self._wlock.acquire()
+ try:
+ if key in self._mapping:
+ self._remove(key)
+ elif len(self._mapping) == self.capacity:
+ del self._mapping[self._popleft()]
+ self._append(key)
+ self._mapping[key] = value
+ finally:
+ self._wlock.release()
+
+ def __delitem__(self, key):
+ """Remove an item from the cache dict.
+ Raise a `KeyError` if it does not exist.
+ """
+ self._wlock.acquire()
+ try:
+ del self._mapping[key]
+ try:
+ self._remove(key)
+ except ValueError:
+ # __getitem__ is not locked, it might happen
+ pass
+ finally:
+ self._wlock.release()
+
+ def items(self):
+ """Return a list of items."""
+ result = [(key, self._mapping[key]) for key in list(self._queue)]
+ result.reverse()
+ return result
+
+ def iteritems(self):
+ """Iterate over all items."""
+ return iter(self.items())
+
+ def values(self):
+ """Return a list of all values."""
+ return [x[1] for x in self.items()]
+
+ def itervalue(self):
+ """Iterate over all values."""
+ return iter(self.values())
+
+ def keys(self):
+ """Return a list of all keys ordered by most recent usage."""
+ return list(self)
+
+ def iterkeys(self):
+ """Iterate over all keys in the cache dict, ordered by
+ the most recent usage.
+ """
+ return reversed(tuple(self._queue))
+
+ __iter__ = iterkeys
+
+ def __reversed__(self):
+ """Iterate over the values in the cache dict, oldest items
+ coming first.
+ """
+ return iter(tuple(self._queue))
+
+ __copy__ = copy
+
+
+# register the LRU cache as mutable mapping if possible
+try:
+ from collections import MutableMapping
+ MutableMapping.register(LRUCache)
+except ImportError:
+ pass
+
+
+def select_autoescape(enabled_extensions=('html', 'htm', 'xml'),
+ disabled_extensions=(),
+ default_for_string=True,
+ default=False):
+ """Intelligently sets the initial value of autoescaping based on the
+ filename of the template. This is the recommended way to configure
+ autoescaping if you do not want to write a custom function yourself.
+
+ If you want to enable it for all templates created from strings or
+ for all templates with `.html` and `.xml` extensions::
+
+ from jinja2 import Environment, select_autoescape
+ env = Environment(autoescape=select_autoescape(
+ enabled_extensions=('html', 'xml'),
+ default_for_string=True,
+ ))
+
+ Example configuration to turn it on at all times except if the template
+ ends with `.txt`::
+
+ from jinja2 import Environment, select_autoescape
+ env = Environment(autoescape=select_autoescape(
+ disabled_extensions=('txt',),
+ default_for_string=True,
+ default=True,
+ ))
+
+ The `enabled_extensions` is an iterable of all the extensions that
+ autoescaping should be enabled for. Likewise `disabled_extensions` is
+ a list of all templates it should be disabled for. If a template is
+ loaded from a string then the default from `default_for_string` is used.
+ If nothing matches then the initial value of autoescaping is set to the
+ value of `default`.
+
+ For security reasons this function operates case insensitive.
+
+ .. versionadded:: 2.9
+ """
+ enabled_patterns = tuple('.' + x.lstrip('.').lower()
+ for x in enabled_extensions)
+ disabled_patterns = tuple('.' + x.lstrip('.').lower()
+ for x in disabled_extensions)
+ def autoescape(template_name):
+ if template_name is None:
+ return default_for_string
+ template_name = template_name.lower()
+ if template_name.endswith(enabled_patterns):
+ return True
+ if template_name.endswith(disabled_patterns):
+ return False
+ return default
+ return autoescape
+
+
+def htmlsafe_json_dumps(obj, dumper=None, **kwargs):
+ """Works exactly like :func:`dumps` but is safe for use in ``<script>``
+ tags. It accepts the same arguments and returns a JSON string. Note that
+ this is available in templates through the ``|tojson`` filter which will
+ also mark the result as safe. Due to how this function escapes certain
+ characters this is safe even if used outside of ``<script>`` tags.
+
+ The following characters are escaped in strings:
+
+ - ``<``
+ - ``>``
+ - ``&``
+ - ``'``
+
+ This makes it safe to embed such strings in any place in HTML with the
+ notable exception of double quoted attributes. In that case single
+ quote your attributes or HTML escape it in addition.
+ """
+ if dumper is None:
+ dumper = json.dumps
+ rv = dumper(obj, **kwargs) \
+ .replace(u'<', u'\\u003c') \
+ .replace(u'>', u'\\u003e') \
+ .replace(u'&', u'\\u0026') \
+ .replace(u"'", u'\\u0027')
+ return rv
+
+
+@implements_iterator
+class Cycler(object):
+ """A cycle helper for templates."""
+
+ def __init__(self, *items):
+ if not items:
+ raise RuntimeError('at least one item has to be provided')
+ self.items = items
+ self.reset()
+
+ def reset(self):
+ """Resets the cycle."""
+ self.pos = 0
+
+ @property
+ def current(self):
+ """Returns the current item."""
+ return self.items[self.pos]
+
+ def next(self):
+ """Goes one item ahead and returns it."""
+ rv = self.current
+ self.pos = (self.pos + 1) % len(self.items)
+ return rv
+
+ __next__ = next
+
+
+class Joiner(object):
+ """A joining helper for templates."""
+
+ def __init__(self, sep=u', '):
+ self.sep = sep
+ self.used = False
+
+ def __call__(self):
+ if not self.used:
+ self.used = True
+ return u''
+ return self.sep
+
+
+# does this python version support async for in and async generators?
+try:
+ exec('async def _():\n async for _ in ():\n yield _')
+ have_async_gen = True
+except SyntaxError:
+ have_async_gen = False
+
+
+# Imported here because that's where it was in the past
+from markupsafe import Markup, escape, soft_unicode
diff --git a/lib/spack/external/jinja2/visitor.py b/lib/spack/external/jinja2/visitor.py
new file mode 100644
index 0000000000..ba526dfac9
--- /dev/null
+++ b/lib/spack/external/jinja2/visitor.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+"""
+ jinja2.visitor
+ ~~~~~~~~~~~~~~
+
+ This module implements a visitor for the nodes.
+
+ :copyright: (c) 2017 by the Jinja Team.
+ :license: BSD.
+"""
+from jinja2.nodes import Node
+
+
+class NodeVisitor(object):
+ """Walks the abstract syntax tree and call visitor functions for every
+ node found. The visitor functions may return values which will be
+ forwarded by the `visit` method.
+
+ Per default the visitor functions for the nodes are ``'visit_'`` +
+ class name of the node. So a `TryFinally` node visit function would
+ be `visit_TryFinally`. This behavior can be changed by overriding
+ the `get_visitor` function. If no visitor function exists for a node
+ (return value `None`) the `generic_visit` visitor is used instead.
+ """
+
+ def get_visitor(self, node):
+ """Return the visitor function for this node or `None` if no visitor
+ exists for this node. In that case the generic visit function is
+ used instead.
+ """
+ method = 'visit_' + node.__class__.__name__
+ return getattr(self, method, None)
+
+ def visit(self, node, *args, **kwargs):
+ """Visit a node."""
+ f = self.get_visitor(node)
+ if f is not None:
+ return f(node, *args, **kwargs)
+ return self.generic_visit(node, *args, **kwargs)
+
+ def generic_visit(self, node, *args, **kwargs):
+ """Called if no explicit visitor function exists for a node."""
+ for node in node.iter_child_nodes():
+ self.visit(node, *args, **kwargs)
+
+
+class NodeTransformer(NodeVisitor):
+ """Walks the abstract syntax tree and allows modifications of nodes.
+
+ The `NodeTransformer` will walk the AST and use the return value of the
+ visitor functions to replace or remove the old node. If the return
+ value of the visitor function is `None` the node will be removed
+ from the previous location otherwise it's replaced with the return
+ value. The return value may be the original node in which case no
+ replacement takes place.
+ """
+
+ def generic_visit(self, node, *args, **kwargs):
+ for field, old_value in node.iter_fields():
+ if isinstance(old_value, list):
+ new_values = []
+ for value in old_value:
+ if isinstance(value, Node):
+ value = self.visit(value, *args, **kwargs)
+ if value is None:
+ continue
+ elif not isinstance(value, Node):
+ new_values.extend(value)
+ continue
+ new_values.append(value)
+ old_value[:] = new_values
+ elif isinstance(old_value, Node):
+ new_node = self.visit(old_value, *args, **kwargs)
+ if new_node is None:
+ delattr(node, field)
+ else:
+ setattr(node, field, new_node)
+ return node
+
+ def visit_list(self, node, *args, **kwargs):
+ """As transformers may return lists in some places this method
+ can be used to enforce a list as return value.
+ """
+ rv = self.visit(node, *args, **kwargs)
+ if not isinstance(rv, list):
+ rv = [rv]
+ return rv
diff --git a/lib/spack/external/markupsafe/AUTHORS b/lib/spack/external/markupsafe/AUTHORS
new file mode 100644
index 0000000000..f7e2942ecc
--- /dev/null
+++ b/lib/spack/external/markupsafe/AUTHORS
@@ -0,0 +1,13 @@
+MarkupSafe is written and maintained by Armin Ronacher and
+various contributors:
+
+Development Lead
+````````````````
+
+- Armin Ronacher <armin.ronacher@active-4.com>
+
+Patches and Suggestions
+```````````````````````
+
+- Georg Brandl
+- Mickaël Guérin
diff --git a/lib/spack/external/markupsafe/LICENSE b/lib/spack/external/markupsafe/LICENSE
new file mode 100644
index 0000000000..5d2693890d
--- /dev/null
+++ b/lib/spack/external/markupsafe/LICENSE
@@ -0,0 +1,33 @@
+Copyright (c) 2010 by Armin Ronacher and contributors. See AUTHORS
+for more details.
+
+Some rights reserved.
+
+Redistribution and use in source and binary forms of the software as well
+as documentation, with or without modification, are permitted provided
+that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials provided
+ with the distribution.
+
+* The names of the contributors may not be used to endorse or
+ promote products derived from this software without specific
+ prior written permission.
+
+THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
+NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
diff --git a/lib/spack/external/markupsafe/README.rst b/lib/spack/external/markupsafe/README.rst
new file mode 100644
index 0000000000..360a0877a4
--- /dev/null
+++ b/lib/spack/external/markupsafe/README.rst
@@ -0,0 +1,113 @@
+MarkupSafe
+==========
+
+Implements a unicode subclass that supports HTML strings:
+
+.. code-block:: python
+
+ >>> from markupsafe import Markup, escape
+ >>> escape("<script>alert(document.cookie);</script>")
+ Markup(u'&lt;script&gt;alert(document.cookie);&lt;/script&gt;')
+ >>> tmpl = Markup("<em>%s</em>")
+ >>> tmpl % "Peter > Lustig"
+ Markup(u'<em>Peter &gt; Lustig</em>')
+
+If you want to make an object unicode that is not yet unicode
+but don't want to lose the taint information, you can use the
+``soft_unicode`` function. (On Python 3 you can also use ``soft_str`` which
+is a different name for the same function).
+
+.. code-block:: python
+
+ >>> from markupsafe import soft_unicode
+ >>> soft_unicode(42)
+ u'42'
+ >>> soft_unicode(Markup('foo'))
+ Markup(u'foo')
+
+HTML Representations
+--------------------
+
+Objects can customize their HTML markup equivalent by overriding
+the ``__html__`` function:
+
+.. code-block:: python
+
+ >>> class Foo(object):
+ ... def __html__(self):
+ ... return '<strong>Nice</strong>'
+ ...
+ >>> escape(Foo())
+ Markup(u'<strong>Nice</strong>')
+ >>> Markup(Foo())
+ Markup(u'<strong>Nice</strong>')
+
+Silent Escapes
+--------------
+
+Since MarkupSafe 0.10 there is now also a separate escape function
+called ``escape_silent`` that returns an empty string for ``None`` for
+consistency with other systems that return empty strings for ``None``
+when escaping (for instance Pylons' webhelpers).
+
+If you also want to use this for the escape method of the Markup
+object, you can create your own subclass that does that:
+
+.. code-block:: python
+
+ from markupsafe import Markup, escape_silent as escape
+
+ class SilentMarkup(Markup):
+ __slots__ = ()
+
+ @classmethod
+ def escape(cls, s):
+ return cls(escape(s))
+
+New-Style String Formatting
+---------------------------
+
+Starting with MarkupSafe 0.21 new style string formats from Python 2.6 and
+3.x are now fully supported. Previously the escape behavior of those
+functions was spotty at best. The new implementations operates under the
+following algorithm:
+
+1. if an object has an ``__html_format__`` method it is called as
+ replacement for ``__format__`` with the format specifier. It either
+ has to return a string or markup object.
+2. if an object has an ``__html__`` method it is called.
+3. otherwise the default format system of Python kicks in and the result
+ is HTML escaped.
+
+Here is how you can implement your own formatting:
+
+.. code-block:: python
+
+ class User(object):
+
+ def __init__(self, id, username):
+ self.id = id
+ self.username = username
+
+ def __html_format__(self, format_spec):
+ if format_spec == 'link':
+ return Markup('<a href="/user/{0}">{1}</a>').format(
+ self.id,
+ self.__html__(),
+ )
+ elif format_spec:
+ raise ValueError('Invalid format spec')
+ return self.__html__()
+
+ def __html__(self):
+ return Markup('<span class=user>{0}</span>').format(self.username)
+
+And to format that user:
+
+.. code-block:: python
+
+ >>> user = User(1, 'foo')
+ >>> Markup('<p>User: {0:link}').format(user)
+ Markup(u'<p>User: <a href="/user/1"><span class=user>foo</span></a>')
+
+Markupsafe supports Python 2.6, 2.7 and Python 3.3 and higher.
diff --git a/lib/spack/external/markupsafe/__init__.py b/lib/spack/external/markupsafe/__init__.py
new file mode 100644
index 0000000000..68dc85f612
--- /dev/null
+++ b/lib/spack/external/markupsafe/__init__.py
@@ -0,0 +1,305 @@
+# -*- coding: utf-8 -*-
+"""
+ markupsafe
+ ~~~~~~~~~~
+
+ Implements a Markup string.
+
+ :copyright: (c) 2010 by Armin Ronacher.
+ :license: BSD, see LICENSE for more details.
+"""
+import re
+import string
+from collections import Mapping
+from markupsafe._compat import text_type, string_types, int_types, \
+ unichr, iteritems, PY2
+
+__version__ = "1.0"
+
+__all__ = ['Markup', 'soft_unicode', 'escape', 'escape_silent']
+
+
+_striptags_re = re.compile(r'(<!--.*?-->|<[^>]*>)')
+_entity_re = re.compile(r'&([^& ;]+);')
+
+
+class Markup(text_type):
+ r"""Marks a string as being safe for inclusion in HTML/XML output without
+ needing to be escaped. This implements the `__html__` interface a couple
+ of frameworks and web applications use. :class:`Markup` is a direct
+ subclass of `unicode` and provides all the methods of `unicode` just that
+ it escapes arguments passed and always returns `Markup`.
+
+ The `escape` function returns markup objects so that double escaping can't
+ happen.
+
+ The constructor of the :class:`Markup` class can be used for three
+ different things: When passed an unicode object it's assumed to be safe,
+ when passed an object with an HTML representation (has an `__html__`
+ method) that representation is used, otherwise the object passed is
+ converted into a unicode string and then assumed to be safe:
+
+ >>> Markup("Hello <em>World</em>!")
+ Markup(u'Hello <em>World</em>!')
+ >>> class Foo(object):
+ ... def __html__(self):
+ ... return '<a href="#">foo</a>'
+ ...
+ >>> Markup(Foo())
+ Markup(u'<a href="#">foo</a>')
+
+ If you want object passed being always treated as unsafe you can use the
+ :meth:`escape` classmethod to create a :class:`Markup` object:
+
+ >>> Markup.escape("Hello <em>World</em>!")
+ Markup(u'Hello &lt;em&gt;World&lt;/em&gt;!')
+
+ Operations on a markup string are markup aware which means that all
+ arguments are passed through the :func:`escape` function:
+
+ >>> em = Markup("<em>%s</em>")
+ >>> em % "foo & bar"
+ Markup(u'<em>foo &amp; bar</em>')
+ >>> strong = Markup("<strong>%(text)s</strong>")
+ >>> strong % {'text': '<blink>hacker here</blink>'}
+ Markup(u'<strong>&lt;blink&gt;hacker here&lt;/blink&gt;</strong>')
+ >>> Markup("<em>Hello</em> ") + "<foo>"
+ Markup(u'<em>Hello</em> &lt;foo&gt;')
+ """
+ __slots__ = ()
+
+ def __new__(cls, base=u'', encoding=None, errors='strict'):
+ if hasattr(base, '__html__'):
+ base = base.__html__()
+ if encoding is None:
+ return text_type.__new__(cls, base)
+ return text_type.__new__(cls, base, encoding, errors)
+
+ def __html__(self):
+ return self
+
+ def __add__(self, other):
+ if isinstance(other, string_types) or hasattr(other, '__html__'):
+ return self.__class__(super(Markup, self).__add__(self.escape(other)))
+ return NotImplemented
+
+ def __radd__(self, other):
+ if hasattr(other, '__html__') or isinstance(other, string_types):
+ return self.escape(other).__add__(self)
+ return NotImplemented
+
+ def __mul__(self, num):
+ if isinstance(num, int_types):
+ return self.__class__(text_type.__mul__(self, num))
+ return NotImplemented
+ __rmul__ = __mul__
+
+ def __mod__(self, arg):
+ if isinstance(arg, tuple):
+ arg = tuple(_MarkupEscapeHelper(x, self.escape) for x in arg)
+ else:
+ arg = _MarkupEscapeHelper(arg, self.escape)
+ return self.__class__(text_type.__mod__(self, arg))
+
+ def __repr__(self):
+ return '%s(%s)' % (
+ self.__class__.__name__,
+ text_type.__repr__(self)
+ )
+
+ def join(self, seq):
+ return self.__class__(text_type.join(self, map(self.escape, seq)))
+ join.__doc__ = text_type.join.__doc__
+
+ def split(self, *args, **kwargs):
+ return list(map(self.__class__, text_type.split(self, *args, **kwargs)))
+ split.__doc__ = text_type.split.__doc__
+
+ def rsplit(self, *args, **kwargs):
+ return list(map(self.__class__, text_type.rsplit(self, *args, **kwargs)))
+ rsplit.__doc__ = text_type.rsplit.__doc__
+
+ def splitlines(self, *args, **kwargs):
+ return list(map(self.__class__, text_type.splitlines(
+ self, *args, **kwargs)))
+ splitlines.__doc__ = text_type.splitlines.__doc__
+
+ def unescape(self):
+ r"""Unescape markup again into an text_type string. This also resolves
+ known HTML4 and XHTML entities:
+
+ >>> Markup("Main &raquo; <em>About</em>").unescape()
+ u'Main \xbb <em>About</em>'
+ """
+ from markupsafe._constants import HTML_ENTITIES
+ def handle_match(m):
+ name = m.group(1)
+ if name in HTML_ENTITIES:
+ return unichr(HTML_ENTITIES[name])
+ try:
+ if name[:2] in ('#x', '#X'):
+ return unichr(int(name[2:], 16))
+ elif name.startswith('#'):
+ return unichr(int(name[1:]))
+ except ValueError:
+ pass
+ # Don't modify unexpected input.
+ return m.group()
+ return _entity_re.sub(handle_match, text_type(self))
+
+ def striptags(self):
+ r"""Unescape markup into an text_type string and strip all tags. This
+ also resolves known HTML4 and XHTML entities. Whitespace is
+ normalized to one:
+
+ >>> Markup("Main &raquo; <em>About</em>").striptags()
+ u'Main \xbb About'
+ """
+ stripped = u' '.join(_striptags_re.sub('', self).split())
+ return Markup(stripped).unescape()
+
+ @classmethod
+ def escape(cls, s):
+ """Escape the string. Works like :func:`escape` with the difference
+ that for subclasses of :class:`Markup` this function would return the
+ correct subclass.
+ """
+ rv = escape(s)
+ if rv.__class__ is not cls:
+ return cls(rv)
+ return rv
+
+ def make_simple_escaping_wrapper(name):
+ orig = getattr(text_type, name)
+ def func(self, *args, **kwargs):
+ args = _escape_argspec(list(args), enumerate(args), self.escape)
+ _escape_argspec(kwargs, iteritems(kwargs), self.escape)
+ return self.__class__(orig(self, *args, **kwargs))
+ func.__name__ = orig.__name__
+ func.__doc__ = orig.__doc__
+ return func
+
+ for method in '__getitem__', 'capitalize', \
+ 'title', 'lower', 'upper', 'replace', 'ljust', \
+ 'rjust', 'lstrip', 'rstrip', 'center', 'strip', \
+ 'translate', 'expandtabs', 'swapcase', 'zfill':
+ locals()[method] = make_simple_escaping_wrapper(method)
+
+ # new in python 2.5
+ if hasattr(text_type, 'partition'):
+ def partition(self, sep):
+ return tuple(map(self.__class__,
+ text_type.partition(self, self.escape(sep))))
+ def rpartition(self, sep):
+ return tuple(map(self.__class__,
+ text_type.rpartition(self, self.escape(sep))))
+
+ # new in python 2.6
+ if hasattr(text_type, 'format'):
+ def format(*args, **kwargs):
+ self, args = args[0], args[1:]
+ formatter = EscapeFormatter(self.escape)
+ kwargs = _MagicFormatMapping(args, kwargs)
+ return self.__class__(formatter.vformat(self, args, kwargs))
+
+ def __html_format__(self, format_spec):
+ if format_spec:
+ raise ValueError('Unsupported format specification '
+ 'for Markup.')
+ return self
+
+ # not in python 3
+ if hasattr(text_type, '__getslice__'):
+ __getslice__ = make_simple_escaping_wrapper('__getslice__')
+
+ del method, make_simple_escaping_wrapper
+
+
+class _MagicFormatMapping(Mapping):
+ """This class implements a dummy wrapper to fix a bug in the Python
+ standard library for string formatting.
+
+ See http://bugs.python.org/issue13598 for information about why
+ this is necessary.
+ """
+
+ def __init__(self, args, kwargs):
+ self._args = args
+ self._kwargs = kwargs
+ self._last_index = 0
+
+ def __getitem__(self, key):
+ if key == '':
+ idx = self._last_index
+ self._last_index += 1
+ try:
+ return self._args[idx]
+ except LookupError:
+ pass
+ key = str(idx)
+ return self._kwargs[key]
+
+ def __iter__(self):
+ return iter(self._kwargs)
+
+ def __len__(self):
+ return len(self._kwargs)
+
+
+if hasattr(text_type, 'format'):
+ class EscapeFormatter(string.Formatter):
+
+ def __init__(self, escape):
+ self.escape = escape
+
+ def format_field(self, value, format_spec):
+ if hasattr(value, '__html_format__'):
+ rv = value.__html_format__(format_spec)
+ elif hasattr(value, '__html__'):
+ if format_spec:
+ raise ValueError('No format specification allowed '
+ 'when formatting an object with '
+ 'its __html__ method.')
+ rv = value.__html__()
+ else:
+ # We need to make sure the format spec is unicode here as
+ # otherwise the wrong callback methods are invoked. For
+ # instance a byte string there would invoke __str__ and
+ # not __unicode__.
+ rv = string.Formatter.format_field(
+ self, value, text_type(format_spec))
+ return text_type(self.escape(rv))
+
+
+def _escape_argspec(obj, iterable, escape):
+ """Helper for various string-wrapped functions."""
+ for key, value in iterable:
+ if hasattr(value, '__html__') or isinstance(value, string_types):
+ obj[key] = escape(value)
+ return obj
+
+
+class _MarkupEscapeHelper(object):
+ """Helper for Markup.__mod__"""
+
+ def __init__(self, obj, escape):
+ self.obj = obj
+ self.escape = escape
+
+ __getitem__ = lambda s, x: _MarkupEscapeHelper(s.obj[x], s.escape)
+ __unicode__ = __str__ = lambda s: text_type(s.escape(s.obj))
+ __repr__ = lambda s: str(s.escape(repr(s.obj)))
+ __int__ = lambda s: int(s.obj)
+ __float__ = lambda s: float(s.obj)
+
+
+# we have to import it down here as the speedups and native
+# modules imports the markup type which is define above.
+try:
+ from markupsafe._speedups import escape, escape_silent, soft_unicode
+except ImportError:
+ from markupsafe._native import escape, escape_silent, soft_unicode
+
+if not PY2:
+ soft_str = soft_unicode
+ __all__.append('soft_str')
diff --git a/lib/spack/external/markupsafe/_compat.py b/lib/spack/external/markupsafe/_compat.py
new file mode 100644
index 0000000000..62e5632ad8
--- /dev/null
+++ b/lib/spack/external/markupsafe/_compat.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+"""
+ markupsafe._compat
+ ~~~~~~~~~~~~~~~~~~
+
+ Compatibility module for different Python versions.
+
+ :copyright: (c) 2013 by Armin Ronacher.
+ :license: BSD, see LICENSE for more details.
+"""
+import sys
+
+PY2 = sys.version_info[0] == 2
+
+if not PY2:
+ text_type = str
+ string_types = (str,)
+ unichr = chr
+ int_types = (int,)
+ iteritems = lambda x: iter(x.items())
+else:
+ text_type = unicode
+ string_types = (str, unicode)
+ unichr = unichr
+ int_types = (int, long)
+ iteritems = lambda x: x.iteritems()
diff --git a/lib/spack/external/markupsafe/_constants.py b/lib/spack/external/markupsafe/_constants.py
new file mode 100644
index 0000000000..919bf03c50
--- /dev/null
+++ b/lib/spack/external/markupsafe/_constants.py
@@ -0,0 +1,267 @@
+# -*- coding: utf-8 -*-
+"""
+ markupsafe._constants
+ ~~~~~~~~~~~~~~~~~~~~~
+
+ Highlevel implementation of the Markup string.
+
+ :copyright: (c) 2010 by Armin Ronacher.
+ :license: BSD, see LICENSE for more details.
+"""
+
+
+HTML_ENTITIES = {
+ 'AElig': 198,
+ 'Aacute': 193,
+ 'Acirc': 194,
+ 'Agrave': 192,
+ 'Alpha': 913,
+ 'Aring': 197,
+ 'Atilde': 195,
+ 'Auml': 196,
+ 'Beta': 914,
+ 'Ccedil': 199,
+ 'Chi': 935,
+ 'Dagger': 8225,
+ 'Delta': 916,
+ 'ETH': 208,
+ 'Eacute': 201,
+ 'Ecirc': 202,
+ 'Egrave': 200,
+ 'Epsilon': 917,
+ 'Eta': 919,
+ 'Euml': 203,
+ 'Gamma': 915,
+ 'Iacute': 205,
+ 'Icirc': 206,
+ 'Igrave': 204,
+ 'Iota': 921,
+ 'Iuml': 207,
+ 'Kappa': 922,
+ 'Lambda': 923,
+ 'Mu': 924,
+ 'Ntilde': 209,
+ 'Nu': 925,
+ 'OElig': 338,
+ 'Oacute': 211,
+ 'Ocirc': 212,
+ 'Ograve': 210,
+ 'Omega': 937,
+ 'Omicron': 927,
+ 'Oslash': 216,
+ 'Otilde': 213,
+ 'Ouml': 214,
+ 'Phi': 934,
+ 'Pi': 928,
+ 'Prime': 8243,
+ 'Psi': 936,
+ 'Rho': 929,
+ 'Scaron': 352,
+ 'Sigma': 931,
+ 'THORN': 222,
+ 'Tau': 932,
+ 'Theta': 920,
+ 'Uacute': 218,
+ 'Ucirc': 219,
+ 'Ugrave': 217,
+ 'Upsilon': 933,
+ 'Uuml': 220,
+ 'Xi': 926,
+ 'Yacute': 221,
+ 'Yuml': 376,
+ 'Zeta': 918,
+ 'aacute': 225,
+ 'acirc': 226,
+ 'acute': 180,
+ 'aelig': 230,
+ 'agrave': 224,
+ 'alefsym': 8501,
+ 'alpha': 945,
+ 'amp': 38,
+ 'and': 8743,
+ 'ang': 8736,
+ 'apos': 39,
+ 'aring': 229,
+ 'asymp': 8776,
+ 'atilde': 227,
+ 'auml': 228,
+ 'bdquo': 8222,
+ 'beta': 946,
+ 'brvbar': 166,
+ 'bull': 8226,
+ 'cap': 8745,
+ 'ccedil': 231,
+ 'cedil': 184,
+ 'cent': 162,
+ 'chi': 967,
+ 'circ': 710,
+ 'clubs': 9827,
+ 'cong': 8773,
+ 'copy': 169,
+ 'crarr': 8629,
+ 'cup': 8746,
+ 'curren': 164,
+ 'dArr': 8659,
+ 'dagger': 8224,
+ 'darr': 8595,
+ 'deg': 176,
+ 'delta': 948,
+ 'diams': 9830,
+ 'divide': 247,
+ 'eacute': 233,
+ 'ecirc': 234,
+ 'egrave': 232,
+ 'empty': 8709,
+ 'emsp': 8195,
+ 'ensp': 8194,
+ 'epsilon': 949,
+ 'equiv': 8801,
+ 'eta': 951,
+ 'eth': 240,
+ 'euml': 235,
+ 'euro': 8364,
+ 'exist': 8707,
+ 'fnof': 402,
+ 'forall': 8704,
+ 'frac12': 189,
+ 'frac14': 188,
+ 'frac34': 190,
+ 'frasl': 8260,
+ 'gamma': 947,
+ 'ge': 8805,
+ 'gt': 62,
+ 'hArr': 8660,
+ 'harr': 8596,
+ 'hearts': 9829,
+ 'hellip': 8230,
+ 'iacute': 237,
+ 'icirc': 238,
+ 'iexcl': 161,
+ 'igrave': 236,
+ 'image': 8465,
+ 'infin': 8734,
+ 'int': 8747,
+ 'iota': 953,
+ 'iquest': 191,
+ 'isin': 8712,
+ 'iuml': 239,
+ 'kappa': 954,
+ 'lArr': 8656,
+ 'lambda': 955,
+ 'lang': 9001,
+ 'laquo': 171,
+ 'larr': 8592,
+ 'lceil': 8968,
+ 'ldquo': 8220,
+ 'le': 8804,
+ 'lfloor': 8970,
+ 'lowast': 8727,
+ 'loz': 9674,
+ 'lrm': 8206,
+ 'lsaquo': 8249,
+ 'lsquo': 8216,
+ 'lt': 60,
+ 'macr': 175,
+ 'mdash': 8212,
+ 'micro': 181,
+ 'middot': 183,
+ 'minus': 8722,
+ 'mu': 956,
+ 'nabla': 8711,
+ 'nbsp': 160,
+ 'ndash': 8211,
+ 'ne': 8800,
+ 'ni': 8715,
+ 'not': 172,
+ 'notin': 8713,
+ 'nsub': 8836,
+ 'ntilde': 241,
+ 'nu': 957,
+ 'oacute': 243,
+ 'ocirc': 244,
+ 'oelig': 339,
+ 'ograve': 242,
+ 'oline': 8254,
+ 'omega': 969,
+ 'omicron': 959,
+ 'oplus': 8853,
+ 'or': 8744,
+ 'ordf': 170,
+ 'ordm': 186,
+ 'oslash': 248,
+ 'otilde': 245,
+ 'otimes': 8855,
+ 'ouml': 246,
+ 'para': 182,
+ 'part': 8706,
+ 'permil': 8240,
+ 'perp': 8869,
+ 'phi': 966,
+ 'pi': 960,
+ 'piv': 982,
+ 'plusmn': 177,
+ 'pound': 163,
+ 'prime': 8242,
+ 'prod': 8719,
+ 'prop': 8733,
+ 'psi': 968,
+ 'quot': 34,
+ 'rArr': 8658,
+ 'radic': 8730,
+ 'rang': 9002,
+ 'raquo': 187,
+ 'rarr': 8594,
+ 'rceil': 8969,
+ 'rdquo': 8221,
+ 'real': 8476,
+ 'reg': 174,
+ 'rfloor': 8971,
+ 'rho': 961,
+ 'rlm': 8207,
+ 'rsaquo': 8250,
+ 'rsquo': 8217,
+ 'sbquo': 8218,
+ 'scaron': 353,
+ 'sdot': 8901,
+ 'sect': 167,
+ 'shy': 173,
+ 'sigma': 963,
+ 'sigmaf': 962,
+ 'sim': 8764,
+ 'spades': 9824,
+ 'sub': 8834,
+ 'sube': 8838,
+ 'sum': 8721,
+ 'sup': 8835,
+ 'sup1': 185,
+ 'sup2': 178,
+ 'sup3': 179,
+ 'supe': 8839,
+ 'szlig': 223,
+ 'tau': 964,
+ 'there4': 8756,
+ 'theta': 952,
+ 'thetasym': 977,
+ 'thinsp': 8201,
+ 'thorn': 254,
+ 'tilde': 732,
+ 'times': 215,
+ 'trade': 8482,
+ 'uArr': 8657,
+ 'uacute': 250,
+ 'uarr': 8593,
+ 'ucirc': 251,
+ 'ugrave': 249,
+ 'uml': 168,
+ 'upsih': 978,
+ 'upsilon': 965,
+ 'uuml': 252,
+ 'weierp': 8472,
+ 'xi': 958,
+ 'yacute': 253,
+ 'yen': 165,
+ 'yuml': 255,
+ 'zeta': 950,
+ 'zwj': 8205,
+ 'zwnj': 8204
+}
diff --git a/lib/spack/external/markupsafe/_native.py b/lib/spack/external/markupsafe/_native.py
new file mode 100644
index 0000000000..5e83f10a11
--- /dev/null
+++ b/lib/spack/external/markupsafe/_native.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+"""
+ markupsafe._native
+ ~~~~~~~~~~~~~~~~~~
+
+ Native Python implementation the C module is not compiled.
+
+ :copyright: (c) 2010 by Armin Ronacher.
+ :license: BSD, see LICENSE for more details.
+"""
+from markupsafe import Markup
+from markupsafe._compat import text_type
+
+
+def escape(s):
+ """Convert the characters &, <, >, ' and " in string s to HTML-safe
+ sequences. Use this if you need to display text that might contain
+ such characters in HTML. Marks return value as markup string.
+ """
+ if hasattr(s, '__html__'):
+ return s.__html__()
+ return Markup(text_type(s)
+ .replace('&', '&amp;')
+ .replace('>', '&gt;')
+ .replace('<', '&lt;')
+ .replace("'", '&#39;')
+ .replace('"', '&#34;')
+ )
+
+
+def escape_silent(s):
+ """Like :func:`escape` but converts `None` into an empty
+ markup string.
+ """
+ if s is None:
+ return Markup()
+ return escape(s)
+
+
+def soft_unicode(s):
+ """Make a string unicode if it isn't already. That way a markup
+ string is not converted back to unicode.
+ """
+ if not isinstance(s, text_type):
+ s = text_type(s)
+ return s
diff --git a/lib/spack/external/ordereddict_backport.py b/lib/spack/external/ordereddict_backport.py
index 8ddad1477e..154e5d1872 100644
--- a/lib/spack/external/ordereddict_backport.py
+++ b/lib/spack/external/ordereddict_backport.py
@@ -8,7 +8,13 @@
try:
from thread import get_ident as _get_ident
except ImportError:
- from dummy_thread import get_ident as _get_ident
+ try:
+ from dummy_thread import get_ident as _get_ident
+ except ImportError:
+ try:
+ from _dummy_thread import get_ident as _get_ident
+ except ImportError:
+ from threading import get_ident as _get_ident # nopyqver
try:
from _abcoll import KeysView, ValuesView, ItemsView
diff --git a/lib/spack/external/pyqver2.py b/lib/spack/external/pyqver2.py
index 571e005524..07b191425b 100755
--- a/lib/spack/external/pyqver2.py
+++ b/lib/spack/external/pyqver2.py
@@ -57,11 +57,7 @@ StandardModules = {
"hmac": (2, 2),
"hotshot": (2, 2),
"HTMLParser": (2, 2),
-# skip importlib until we can conditionally skip for pytest.
-# pytest tries to import this and catches the exception, but
-# the test will still fail.
-# TODO: can we excelude with a comment like '# flake: noqa?'
-# "importlib": (2, 7),
+ "importlib": (2, 7),
"inspect": (2, 1),
"io": (2, 6),
"itertools": (2, 3),
@@ -262,7 +258,7 @@ class NodeChecker(object):
self.add(node, (2,2), "yield expression")
self.default(node)
-def get_versions(source):
+def get_versions(source, filename=None):
"""Return information about the Python versions required for specific features.
The return value is a dictionary with keys as a version number as a tuple
@@ -346,65 +342,3 @@ def qver(source):
#(2, 6)
"""
return max(get_versions(source).keys())
-
-
-if __name__ == '__main__':
-
- Verbose = False
- MinVersion = (2, 3)
- Lint = False
-
- files = []
- i = 1
- while i < len(sys.argv):
- a = sys.argv[i]
- if a == "--test":
- import doctest
- doctest.testmod()
- sys.exit(0)
- if a == "-v" or a == "--verbose":
- Verbose = True
- elif a == "-l" or a == "--lint":
- Lint = True
- elif a == "-m" or a == "--min-version":
- i += 1
- MinVersion = tuple(map(int, sys.argv[i].split(".")))
- else:
- files.append(a)
- i += 1
-
- if not files:
- print >>sys.stderr, """Usage: %s [options] source ...
-
- Report minimum Python version required to run given source files.
-
- -m x.y or --min-version x.y (default 2.3)
- report version triggers at or above version x.y in verbose mode
- -v or --verbose
- print more detailed report of version triggers for each version
- """ % sys.argv[0]
- sys.exit(1)
-
- for fn in files:
- try:
- f = open(fn)
- source = f.read()
- f.close()
- ver = get_versions(source)
- if Verbose:
- print fn
- for v in sorted([k for k in ver.keys() if k >= MinVersion], reverse=True):
- reasons = [x for x in uniq(ver[v]) if x]
- if reasons:
- # each reason is (lineno, message)
- print "\t%s\t%s" % (".".join(map(str, v)), ", ".join([x[1] for x in reasons]))
- elif Lint:
- for v in sorted([k for k in ver.keys() if k >= MinVersion], reverse=True):
- reasons = [x for x in uniq(ver[v]) if x]
- for r in reasons:
- # each reason is (lineno, message)
- print "%s:%s: %s %s" % (fn, r[0], ".".join(map(str, v)), r[1])
- else:
- print "%s\t%s" % (".".join(map(str, max(ver.keys()))), fn)
- except SyntaxError, x:
- print "%s: syntax error compiling with Python %s: %s" % (fn, platform.python_version(), x)
diff --git a/lib/spack/external/pyqver3.py b/lib/spack/external/pyqver3.py
new file mode 100755
index 0000000000..b63576a064
--- /dev/null
+++ b/lib/spack/external/pyqver3.py
@@ -0,0 +1,248 @@
+#!/usr/bin/env python3
+#
+# pyqver3.py
+# by Greg Hewgill
+# https://github.com/ghewgill/pyqver
+#
+# This software is provided 'as-is', without any express or implied
+# warranty. In no event will the author be held liable for any damages
+# arising from the use of this software.
+#
+# Permission is granted to anyone to use this software for any purpose,
+# including commercial applications, and to alter it and redistribute it
+# freely, subject to the following restrictions:
+#
+# 1. The origin of this software must not be misrepresented; you must not
+# claim that you wrote the original software. If you use this software
+# in a product, an acknowledgment in the product documentation would be
+# appreciated but is not required.
+# 2. Altered source versions must be plainly marked as such, and must not be
+# misrepresented as being the original software.
+# 3. This notice may not be removed or altered from any source distribution.
+#
+# Copyright (c) 2009-2013 Greg Hewgill http://hewgill.com
+#
+import ast
+import platform
+import sys
+
+StandardModules = {
+# skip argparse now that it's in lib/spack/external
+# "argparse": (3, 2),
+ "faulthandler": (3, 3),
+ "importlib": (3, 1),
+ "ipaddress": (3, 3),
+ "lzma": (3, 3),
+ "tkinter.ttk": (3, 1),
+ "unittest.mock": (3, 3),
+ "venv": (3, 3),
+}
+
+Functions = {
+ "bytearray.maketrans": (3, 1),
+ "bytes.maketrans": (3, 1),
+ "bz2.open": (3, 3),
+ "collections.Counter": (3, 1),
+ "collections.OrderedDict": (3, 1),
+ "crypt.mksalt": (3, 3),
+ "email.generator.BytesGenerator": (3, 2),
+ "email.message_from_binary_file": (3, 2),
+ "email.message_from_bytes": (3, 2),
+ "functools.lru_cache": (3, 2),
+ "gzip.compress": (3, 2),
+ "gzip.decompress": (3, 2),
+ "inspect.getclosurevars": (3, 3),
+ "inspect.getgeneratorlocals": (3, 3),
+ "inspect.getgeneratorstate": (3, 2),
+ "itertools.combinations_with_replacement": (3, 1),
+ "itertools.compress": (3, 1),
+ "logging.config.dictConfig": (3, 2),
+ "logging.NullHandler": (3, 1),
+ "math.erf": (3, 2),
+ "math.erfc": (3, 2),
+ "math.expm1": (3, 2),
+ "math.gamma": (3, 2),
+ "math.isfinite": (3, 2),
+ "math.lgamma": (3, 2),
+ "math.log2": (3, 3),
+ "os.environb": (3, 2),
+ "os.fsdecode": (3, 2),
+ "os.fsencode": (3, 2),
+ "os.fwalk": (3, 3),
+ "os.getenvb": (3, 2),
+ "os.get_exec_path": (3, 2),
+ "os.getgrouplist": (3, 3),
+ "os.getpriority": (3, 3),
+ "os.getresgid": (3, 2),
+ "os.getresuid": (3, 2),
+ "os.get_terminal_size": (3, 3),
+ "os.getxattr": (3, 3),
+ "os.initgroups": (3, 2),
+ "os.listxattr": (3, 3),
+ "os.lockf": (3, 3),
+ "os.pipe2": (3, 3),
+ "os.posix_fadvise": (3, 3),
+ "os.posix_fallocate": (3, 3),
+ "os.pread": (3, 3),
+ "os.pwrite": (3, 3),
+ "os.readv": (3, 3),
+ "os.removexattr": (3, 3),
+ "os.replace": (3, 3),
+ "os.sched_get_priority_max": (3, 3),
+ "os.sched_get_priority_min": (3, 3),
+ "os.sched_getaffinity": (3, 3),
+ "os.sched_getparam": (3, 3),
+ "os.sched_getscheduler": (3, 3),
+ "os.sched_rr_get_interval": (3, 3),
+ "os.sched_setaffinity": (3, 3),
+ "os.sched_setparam": (3, 3),
+ "os.sched_setscheduler": (3, 3),
+ "os.sched_yield": (3, 3),
+ "os.sendfile": (3, 3),
+ "os.setpriority": (3, 3),
+ "os.setresgid": (3, 2),
+ "os.setresuid": (3, 2),
+ "os.setxattr": (3, 3),
+ "os.sync": (3, 3),
+ "os.truncate": (3, 3),
+ "os.waitid": (3, 3),
+ "os.writev": (3, 3),
+ "shutil.chown": (3, 3),
+ "shutil.disk_usage": (3, 3),
+ "shutil.get_archive_formats": (3, 3),
+ "shutil.get_terminal_size": (3, 3),
+ "shutil.get_unpack_formats": (3, 3),
+ "shutil.make_archive": (3, 3),
+ "shutil.register_archive_format": (3, 3),
+ "shutil.register_unpack_format": (3, 3),
+ "shutil.unpack_archive": (3, 3),
+ "shutil.unregister_archive_format": (3, 3),
+ "shutil.unregister_unpack_format": (3, 3),
+ "shutil.which": (3, 3),
+ "signal.pthread_kill": (3, 3),
+ "signal.pthread_sigmask": (3, 3),
+ "signal.sigpending": (3, 3),
+ "signal.sigtimedwait": (3, 3),
+ "signal.sigwait": (3, 3),
+ "signal.sigwaitinfo": (3, 3),
+ "socket.CMSG_LEN": (3, 3),
+ "socket.CMSG_SPACE": (3, 3),
+ "socket.fromshare": (3, 3),
+ "socket.if_indextoname": (3, 3),
+ "socket.if_nameindex": (3, 3),
+ "socket.if_nametoindex": (3, 3),
+ "socket.sethostname": (3, 3),
+ "ssl.match_hostname": (3, 2),
+ "ssl.RAND_bytes": (3, 3),
+ "ssl.RAND_pseudo_bytes": (3, 3),
+ "ssl.SSLContext": (3, 2),
+ "ssl.SSLEOFError": (3, 3),
+ "ssl.SSLSyscallError": (3, 3),
+ "ssl.SSLWantReadError": (3, 3),
+ "ssl.SSLWantWriteError": (3, 3),
+ "ssl.SSLZeroReturnError": (3, 3),
+ "stat.filemode": (3, 3),
+ "textwrap.indent": (3, 3),
+ "threading.get_ident": (3, 3),
+ "time.clock_getres": (3, 3),
+ "time.clock_gettime": (3, 3),
+ "time.clock_settime": (3, 3),
+ "time.get_clock_info": (3, 3),
+ "time.monotonic": (3, 3),
+ "time.perf_counter": (3, 3),
+ "time.process_time": (3, 3),
+ "types.new_class": (3, 3),
+ "types.prepare_class": (3, 3),
+}
+
+def uniq(a):
+ if len(a) == 0:
+ return []
+ else:
+ return [a[0]] + uniq([x for x in a if x != a[0]])
+
+class NodeChecker(ast.NodeVisitor):
+ def __init__(self):
+ self.vers = dict()
+ self.vers[(3,0)] = []
+ def add(self, node, ver, msg):
+ if ver not in self.vers:
+ self.vers[ver] = []
+ self.vers[ver].append((node.lineno, msg))
+ def visit_Call(self, node):
+ def rollup(n):
+ if isinstance(n, ast.Name):
+ return n.id
+ elif isinstance(n, ast.Attribute):
+ r = rollup(n.value)
+ if r:
+ return r + "." + n.attr
+ name = rollup(node.func)
+ if name:
+ v = Functions.get(name)
+ if v is not None:
+ self.add(node, v, name)
+ self.generic_visit(node)
+ def visit_Import(self, node):
+ for n in node.names:
+ v = StandardModules.get(n.name)
+ if v is not None:
+ self.add(node, v, n.name)
+ self.generic_visit(node)
+ def visit_ImportFrom(self, node):
+ v = StandardModules.get(node.module)
+ if v is not None:
+ self.add(node, v, node.module)
+ for n in node.names:
+ name = node.module + "." + n.name
+ v = Functions.get(name)
+ if v is not None:
+ self.add(node, v, name)
+ def visit_Raise(self, node):
+ if isinstance(node.cause, ast.Name) and node.cause.id == "None":
+ self.add(node, (3,3), "raise ... from None")
+ def visit_YieldFrom(self, node):
+ self.add(node, (3,3), "yield from")
+
+def get_versions(source, filename=None):
+ """Return information about the Python versions required for specific features.
+
+ The return value is a dictionary with keys as a version number as a tuple
+ (for example Python 3.1 is (3,1)) and the value are a list of features that
+ require the indicated Python version.
+ """
+ tree = ast.parse(source, filename=filename)
+ checker = NodeChecker()
+ checker.visit(tree)
+ return checker.vers
+
+def v33(source):
+ if sys.version_info >= (3, 3):
+ return qver(source)
+ else:
+ print("Not all features tested, run --test with Python 3.3", file=sys.stderr)
+ return (3, 3)
+
+def qver(source):
+ """Return the minimum Python version required to run a particular bit of code.
+
+ >>> qver('print("hello world")')
+ (3, 0)
+ >>> qver("import importlib")
+ (3, 1)
+ >>> qver("from importlib import x")
+ (3, 1)
+ >>> qver("import tkinter.ttk")
+ (3, 1)
+ >>> qver("from collections import Counter")
+ (3, 1)
+ >>> qver("collections.OrderedDict()")
+ (3, 1)
+ >>> qver("import functools\\n@functools.lru_cache()\\ndef f(x): x*x")
+ (3, 2)
+ >>> v33("yield from x")
+ (3, 3)
+ >>> v33("raise x from None")
+ (3, 3)
+ """
+ return max(get_versions(source).keys())
diff --git a/lib/spack/external/six.py b/lib/spack/external/six.py
new file mode 100644
index 0000000000..5293325821
--- /dev/null
+++ b/lib/spack/external/six.py
@@ -0,0 +1,886 @@
+# Copyright (c) 2010-2017 Benjamin Peterson
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+"""Utilities for writing code that runs on Python 2 and 3"""
+
+from __future__ import absolute_import
+
+import functools
+import itertools
+import operator
+import sys
+import types
+
+__author__ = "Benjamin Peterson <benjamin@python.org>"
+__version__ = "1.10.0"
+
+
+# Useful for very coarse version differentiation.
+PY2 = sys.version_info[0] == 2
+PY3 = sys.version_info[0] == 3
+PY34 = sys.version_info[0:2] >= (3, 4)
+
+if PY3:
+ string_types = str,
+ integer_types = int,
+ class_types = type,
+ text_type = str
+ binary_type = bytes
+
+ MAXSIZE = sys.maxsize
+else:
+ string_types = basestring,
+ integer_types = (int, long)
+ class_types = (type, types.ClassType)
+ text_type = unicode
+ binary_type = str
+
+ if sys.platform.startswith("java"):
+ # Jython always uses 32 bits.
+ MAXSIZE = int((1 << 31) - 1)
+ else:
+ # It's possible to have sizeof(long) != sizeof(Py_ssize_t).
+ class X(object):
+
+ def __len__(self):
+ return 1 << 31
+ try:
+ len(X())
+ except OverflowError:
+ # 32-bit
+ MAXSIZE = int((1 << 31) - 1)
+ else:
+ # 64-bit
+ MAXSIZE = int((1 << 63) - 1)
+ del X
+
+
+def _add_doc(func, doc):
+ """Add documentation to a function."""
+ func.__doc__ = doc
+
+
+def _import_module(name):
+ """Import module, returning the module after the last dot."""
+ __import__(name)
+ return sys.modules[name]
+
+
+class _LazyDescr(object):
+
+ def __init__(self, name):
+ self.name = name
+
+ def __get__(self, obj, tp):
+ result = self._resolve()
+ setattr(obj, self.name, result) # Invokes __set__.
+ try:
+ # This is a bit ugly, but it avoids running this again by
+ # removing this descriptor.
+ delattr(obj.__class__, self.name)
+ except AttributeError:
+ pass
+ return result
+
+
+class MovedModule(_LazyDescr):
+
+ def __init__(self, name, old, new=None):
+ super(MovedModule, self).__init__(name)
+ if PY3:
+ if new is None:
+ new = name
+ self.mod = new
+ else:
+ self.mod = old
+
+ def _resolve(self):
+ return _import_module(self.mod)
+
+ def __getattr__(self, attr):
+ _module = self._resolve()
+ value = getattr(_module, attr)
+ setattr(self, attr, value)
+ return value
+
+
+class _LazyModule(types.ModuleType):
+
+ def __init__(self, name):
+ super(_LazyModule, self).__init__(name)
+ self.__doc__ = self.__class__.__doc__
+
+ def __dir__(self):
+ attrs = ["__doc__", "__name__"]
+ attrs += [attr.name for attr in self._moved_attributes]
+ return attrs
+
+ # Subclasses should override this
+ _moved_attributes = []
+
+
+class MovedAttribute(_LazyDescr):
+
+ def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None):
+ super(MovedAttribute, self).__init__(name)
+ if PY3:
+ if new_mod is None:
+ new_mod = name
+ self.mod = new_mod
+ if new_attr is None:
+ if old_attr is None:
+ new_attr = name
+ else:
+ new_attr = old_attr
+ self.attr = new_attr
+ else:
+ self.mod = old_mod
+ if old_attr is None:
+ old_attr = name
+ self.attr = old_attr
+
+ def _resolve(self):
+ module = _import_module(self.mod)
+ return getattr(module, self.attr)
+
+
+class _SixMetaPathImporter(object):
+
+ """
+ A meta path importer to import six.moves and its submodules.
+
+ This class implements a PEP302 finder and loader. It should be compatible
+ with Python 2.5 and all existing versions of Python3
+ """
+
+ def __init__(self, six_module_name):
+ self.name = six_module_name
+ self.known_modules = {}
+
+ def _add_module(self, mod, *fullnames):
+ for fullname in fullnames:
+ self.known_modules[self.name + "." + fullname] = mod
+
+ def _get_module(self, fullname):
+ return self.known_modules[self.name + "." + fullname]
+
+ def find_module(self, fullname, path=None):
+ if fullname in self.known_modules:
+ return self
+ return None
+
+ def __get_module(self, fullname):
+ try:
+ return self.known_modules[fullname]
+ except KeyError:
+ raise ImportError("This loader does not know module " + fullname)
+
+ def load_module(self, fullname):
+ try:
+ # in case of a reload
+ return sys.modules[fullname]
+ except KeyError:
+ pass
+ mod = self.__get_module(fullname)
+ if isinstance(mod, MovedModule):
+ mod = mod._resolve()
+ else:
+ mod.__loader__ = self
+ sys.modules[fullname] = mod
+ return mod
+
+ def is_package(self, fullname):
+ """
+ Return true, if the named module is a package.
+
+ We need this method to get correct spec objects with
+ Python 3.4 (see PEP451)
+ """
+ return hasattr(self.__get_module(fullname), "__path__")
+
+ def get_code(self, fullname):
+ """Return None
+
+ Required, if is_package is implemented"""
+ self.__get_module(fullname) # eventually raises ImportError
+ return None
+ get_source = get_code # same as get_code
+
+_importer = _SixMetaPathImporter(__name__)
+
+
+class _MovedItems(_LazyModule):
+
+ """Lazy loading of moved objects"""
+ __path__ = [] # mark as package
+
+
+_moved_attributes = [
+ MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"),
+ MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"),
+ MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"),
+ MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"),
+ MovedAttribute("intern", "__builtin__", "sys"),
+ MovedAttribute("map", "itertools", "builtins", "imap", "map"),
+ MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"),
+ MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"),
+ MovedAttribute("getstatusoutput", "commands", "subprocess"),
+ MovedAttribute("getoutput", "commands", "subprocess"),
+ MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"),
+ MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"),
+ MovedAttribute("reduce", "__builtin__", "functools"),
+ MovedAttribute("shlex_quote", "pipes", "shlex", "quote"),
+ MovedAttribute("StringIO", "StringIO", "io"),
+ MovedAttribute("UserDict", "UserDict", "collections"),
+ MovedAttribute("UserList", "UserList", "collections"),
+ MovedAttribute("UserString", "UserString", "collections"),
+ MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"),
+ MovedAttribute("zip", "itertools", "builtins", "izip", "zip"),
+ MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"),
+ MovedModule("builtins", "__builtin__"),
+ MovedModule("configparser", "ConfigParser"),
+ MovedModule("copyreg", "copy_reg"),
+ MovedModule("dbm_gnu", "gdbm", "dbm.gnu"),
+ MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"),
+ MovedModule("http_cookiejar", "cookielib", "http.cookiejar"),
+ MovedModule("http_cookies", "Cookie", "http.cookies"),
+ MovedModule("html_entities", "htmlentitydefs", "html.entities"),
+ MovedModule("html_parser", "HTMLParser", "html.parser"),
+ MovedModule("http_client", "httplib", "http.client"),
+ MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"),
+ MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"),
+ MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"),
+ MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"),
+ MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"),
+ MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"),
+ MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"),
+ MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"),
+ MovedModule("cPickle", "cPickle", "pickle"),
+ MovedModule("queue", "Queue"),
+ MovedModule("reprlib", "repr"),
+ MovedModule("socketserver", "SocketServer"),
+ MovedModule("_thread", "thread", "_thread"),
+ MovedModule("tkinter", "Tkinter"),
+ MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"),
+ MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"),
+ MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"),
+ MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"),
+ MovedModule("tkinter_tix", "Tix", "tkinter.tix"),
+ MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"),
+ MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"),
+ MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"),
+ MovedModule("tkinter_colorchooser", "tkColorChooser",
+ "tkinter.colorchooser"),
+ MovedModule("tkinter_commondialog", "tkCommonDialog",
+ "tkinter.commondialog"),
+ MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"),
+ MovedModule("tkinter_font", "tkFont", "tkinter.font"),
+ MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"),
+ MovedModule("tkinter_tksimpledialog", "tkSimpleDialog",
+ "tkinter.simpledialog"),
+ MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"),
+ MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"),
+ MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"),
+ MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"),
+ MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"),
+ MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"),
+]
+# Add windows specific modules.
+if sys.platform == "win32":
+ _moved_attributes += [
+ MovedModule("winreg", "_winreg"),
+ ]
+
+for attr in _moved_attributes:
+ setattr(_MovedItems, attr.name, attr)
+ if isinstance(attr, MovedModule):
+ _importer._add_module(attr, "moves." + attr.name)
+del attr
+
+_MovedItems._moved_attributes = _moved_attributes
+
+moves = _MovedItems(__name__ + ".moves")
+_importer._add_module(moves, "moves")
+
+
+class Module_six_moves_urllib_parse(_LazyModule):
+
+ """Lazy loading of moved objects in six.moves.urllib_parse"""
+
+
+_urllib_parse_moved_attributes = [
+ MovedAttribute("ParseResult", "urlparse", "urllib.parse"),
+ MovedAttribute("SplitResult", "urlparse", "urllib.parse"),
+ MovedAttribute("parse_qs", "urlparse", "urllib.parse"),
+ MovedAttribute("parse_qsl", "urlparse", "urllib.parse"),
+ MovedAttribute("urldefrag", "urlparse", "urllib.parse"),
+ MovedAttribute("urljoin", "urlparse", "urllib.parse"),
+ MovedAttribute("urlparse", "urlparse", "urllib.parse"),
+ MovedAttribute("urlsplit", "urlparse", "urllib.parse"),
+ MovedAttribute("urlunparse", "urlparse", "urllib.parse"),
+ MovedAttribute("urlunsplit", "urlparse", "urllib.parse"),
+ MovedAttribute("quote", "urllib", "urllib.parse"),
+ MovedAttribute("quote_plus", "urllib", "urllib.parse"),
+ MovedAttribute("unquote", "urllib", "urllib.parse"),
+ MovedAttribute("unquote_plus", "urllib", "urllib.parse"),
+ MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"),
+ MovedAttribute("urlencode", "urllib", "urllib.parse"),
+ MovedAttribute("splitquery", "urllib", "urllib.parse"),
+ MovedAttribute("splittag", "urllib", "urllib.parse"),
+ MovedAttribute("splituser", "urllib", "urllib.parse"),
+ MovedAttribute("splitvalue", "urllib", "urllib.parse"),
+ MovedAttribute("uses_fragment", "urlparse", "urllib.parse"),
+ MovedAttribute("uses_netloc", "urlparse", "urllib.parse"),
+ MovedAttribute("uses_params", "urlparse", "urllib.parse"),
+ MovedAttribute("uses_query", "urlparse", "urllib.parse"),
+ MovedAttribute("uses_relative", "urlparse", "urllib.parse"),
+]
+for attr in _urllib_parse_moved_attributes:
+ setattr(Module_six_moves_urllib_parse, attr.name, attr)
+del attr
+
+Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes
+
+_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"),
+ "moves.urllib_parse", "moves.urllib.parse")
+
+
+class Module_six_moves_urllib_error(_LazyModule):
+
+ """Lazy loading of moved objects in six.moves.urllib_error"""
+
+
+_urllib_error_moved_attributes = [
+ MovedAttribute("URLError", "urllib2", "urllib.error"),
+ MovedAttribute("HTTPError", "urllib2", "urllib.error"),
+ MovedAttribute("ContentTooShortError", "urllib", "urllib.error"),
+]
+for attr in _urllib_error_moved_attributes:
+ setattr(Module_six_moves_urllib_error, attr.name, attr)
+del attr
+
+Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes
+
+_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"),
+ "moves.urllib_error", "moves.urllib.error")
+
+
+class Module_six_moves_urllib_request(_LazyModule):
+
+ """Lazy loading of moved objects in six.moves.urllib_request"""
+
+
+_urllib_request_moved_attributes = [
+ MovedAttribute("urlopen", "urllib2", "urllib.request"),
+ MovedAttribute("install_opener", "urllib2", "urllib.request"),
+ MovedAttribute("build_opener", "urllib2", "urllib.request"),
+ MovedAttribute("pathname2url", "urllib", "urllib.request"),
+ MovedAttribute("url2pathname", "urllib", "urllib.request"),
+ MovedAttribute("getproxies", "urllib", "urllib.request"),
+ MovedAttribute("Request", "urllib2", "urllib.request"),
+ MovedAttribute("OpenerDirector", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"),
+ MovedAttribute("ProxyHandler", "urllib2", "urllib.request"),
+ MovedAttribute("BaseHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"),
+ MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"),
+ MovedAttribute("FileHandler", "urllib2", "urllib.request"),
+ MovedAttribute("FTPHandler", "urllib2", "urllib.request"),
+ MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"),
+ MovedAttribute("UnknownHandler", "urllib2", "urllib.request"),
+ MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"),
+ MovedAttribute("urlretrieve", "urllib", "urllib.request"),
+ MovedAttribute("urlcleanup", "urllib", "urllib.request"),
+ MovedAttribute("URLopener", "urllib", "urllib.request"),
+ MovedAttribute("FancyURLopener", "urllib", "urllib.request"),
+ MovedAttribute("proxy_bypass", "urllib", "urllib.request"),
+]
+for attr in _urllib_request_moved_attributes:
+ setattr(Module_six_moves_urllib_request, attr.name, attr)
+del attr
+
+Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes
+
+_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"),
+ "moves.urllib_request", "moves.urllib.request")
+
+
+class Module_six_moves_urllib_response(_LazyModule):
+
+ """Lazy loading of moved objects in six.moves.urllib_response"""
+
+
+_urllib_response_moved_attributes = [
+ MovedAttribute("addbase", "urllib", "urllib.response"),
+ MovedAttribute("addclosehook", "urllib", "urllib.response"),
+ MovedAttribute("addinfo", "urllib", "urllib.response"),
+ MovedAttribute("addinfourl", "urllib", "urllib.response"),
+]
+for attr in _urllib_response_moved_attributes:
+ setattr(Module_six_moves_urllib_response, attr.name, attr)
+del attr
+
+Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes
+
+_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"),
+ "moves.urllib_response", "moves.urllib.response")
+
+
+class Module_six_moves_urllib_robotparser(_LazyModule):
+
+ """Lazy loading of moved objects in six.moves.urllib_robotparser"""
+
+
+_urllib_robotparser_moved_attributes = [
+ MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"),
+]
+for attr in _urllib_robotparser_moved_attributes:
+ setattr(Module_six_moves_urllib_robotparser, attr.name, attr)
+del attr
+
+Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes
+
+_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"),
+ "moves.urllib_robotparser", "moves.urllib.robotparser")
+
+
+class Module_six_moves_urllib(types.ModuleType):
+
+ """Create a six.moves.urllib namespace that resembles the Python 3 namespace"""
+ __path__ = [] # mark as package
+ parse = _importer._get_module("moves.urllib_parse")
+ error = _importer._get_module("moves.urllib_error")
+ request = _importer._get_module("moves.urllib_request")
+ response = _importer._get_module("moves.urllib_response")
+ robotparser = _importer._get_module("moves.urllib_robotparser")
+
+ def __dir__(self):
+ return ['parse', 'error', 'request', 'response', 'robotparser']
+
+_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"),
+ "moves.urllib")
+
+
+def add_move(move):
+ """Add an item to six.moves."""
+ setattr(_MovedItems, move.name, move)
+
+
+def remove_move(name):
+ """Remove item from six.moves."""
+ try:
+ delattr(_MovedItems, name)
+ except AttributeError:
+ try:
+ del moves.__dict__[name]
+ except KeyError:
+ raise AttributeError("no such move, %r" % (name,))
+
+
+if PY3:
+ _meth_func = "__func__"
+ _meth_self = "__self__"
+
+ _func_closure = "__closure__"
+ _func_code = "__code__"
+ _func_defaults = "__defaults__"
+ _func_globals = "__globals__"
+else:
+ _meth_func = "im_func"
+ _meth_self = "im_self"
+
+ _func_closure = "func_closure"
+ _func_code = "func_code"
+ _func_defaults = "func_defaults"
+ _func_globals = "func_globals"
+
+
+try:
+ advance_iterator = next
+except NameError:
+ def advance_iterator(it):
+ return it.next()
+next = advance_iterator
+
+
+try:
+ callable = callable
+except NameError:
+ def callable(obj):
+ return any("__call__" in klass.__dict__ for klass in type(obj).__mro__)
+
+
+if PY3:
+ def get_unbound_function(unbound):
+ return unbound
+
+ create_bound_method = types.MethodType
+
+ def create_unbound_method(func, cls):
+ return func
+
+ Iterator = object
+else:
+ def get_unbound_function(unbound):
+ return unbound.im_func
+
+ def create_bound_method(func, obj):
+ return types.MethodType(func, obj, obj.__class__)
+
+ def create_unbound_method(func, cls):
+ return types.MethodType(func, None, cls)
+
+ class Iterator(object):
+
+ def next(self):
+ return type(self).__next__(self)
+
+ callable = callable
+_add_doc(get_unbound_function,
+ """Get the function out of a possibly unbound function""")
+
+
+get_method_function = operator.attrgetter(_meth_func)
+get_method_self = operator.attrgetter(_meth_self)
+get_function_closure = operator.attrgetter(_func_closure)
+get_function_code = operator.attrgetter(_func_code)
+get_function_defaults = operator.attrgetter(_func_defaults)
+get_function_globals = operator.attrgetter(_func_globals)
+
+
+if PY3:
+ def iterkeys(d, **kw):
+ return iter(d.keys(**kw))
+
+ def itervalues(d, **kw):
+ return iter(d.values(**kw))
+
+ def iteritems(d, **kw):
+ return iter(d.items(**kw))
+
+ def iterlists(d, **kw):
+ return iter(d.lists(**kw))
+
+ viewkeys = operator.methodcaller("keys")
+
+ viewvalues = operator.methodcaller("values")
+
+ viewitems = operator.methodcaller("items")
+else:
+ def iterkeys(d, **kw):
+ return d.iterkeys(**kw)
+
+ def itervalues(d, **kw):
+ return d.itervalues(**kw)
+
+ def iteritems(d, **kw):
+ return d.iteritems(**kw)
+
+ def iterlists(d, **kw):
+ return d.iterlists(**kw)
+
+ viewkeys = operator.methodcaller("viewkeys")
+
+ viewvalues = operator.methodcaller("viewvalues")
+
+ viewitems = operator.methodcaller("viewitems")
+
+_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.")
+_add_doc(itervalues, "Return an iterator over the values of a dictionary.")
+_add_doc(iteritems,
+ "Return an iterator over the (key, value) pairs of a dictionary.")
+_add_doc(iterlists,
+ "Return an iterator over the (key, [values]) pairs of a dictionary.")
+
+
+if PY3:
+ def b(s):
+ return s.encode("latin-1")
+
+ def u(s):
+ return s
+ unichr = chr
+ import struct
+ int2byte = struct.Struct(">B").pack
+ del struct
+ byte2int = operator.itemgetter(0)
+ indexbytes = operator.getitem
+ iterbytes = iter
+ import io
+ StringIO = io.StringIO
+ BytesIO = io.BytesIO
+ _assertCountEqual = "assertCountEqual"
+ if sys.version_info[1] <= 1:
+ _assertRaisesRegex = "assertRaisesRegexp"
+ _assertRegex = "assertRegexpMatches"
+ else:
+ _assertRaisesRegex = "assertRaisesRegex"
+ _assertRegex = "assertRegex"
+else:
+ def b(s):
+ return s
+ # Workaround for standalone backslash
+
+ def u(s):
+ return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape")
+ unichr = unichr
+ int2byte = chr
+
+ def byte2int(bs):
+ return ord(bs[0])
+
+ def indexbytes(buf, i):
+ return ord(buf[i])
+ iterbytes = functools.partial(itertools.imap, ord)
+ import StringIO
+ StringIO = BytesIO = StringIO.StringIO
+ _assertCountEqual = "assertItemsEqual"
+ _assertRaisesRegex = "assertRaisesRegexp"
+ _assertRegex = "assertRegexpMatches"
+_add_doc(b, """Byte literal""")
+_add_doc(u, """Text literal""")
+
+
+def assertCountEqual(self, *args, **kwargs):
+ return getattr(self, _assertCountEqual)(*args, **kwargs)
+
+
+def assertRaisesRegex(self, *args, **kwargs):
+ return getattr(self, _assertRaisesRegex)(*args, **kwargs)
+
+
+def assertRegex(self, *args, **kwargs):
+ return getattr(self, _assertRegex)(*args, **kwargs)
+
+
+if PY3:
+ exec_ = getattr(moves.builtins, "exec")
+
+ def reraise(tp, value, tb=None):
+ try:
+ if value is None:
+ value = tp()
+ if value.__traceback__ is not tb:
+ raise value.with_traceback(tb)
+ raise value
+ finally:
+ value = None
+ tb = None
+
+else:
+ def exec_(_code_, _globs_=None, _locs_=None):
+ """Execute code in a namespace."""
+ if _globs_ is None:
+ frame = sys._getframe(1)
+ _globs_ = frame.f_globals
+ if _locs_ is None:
+ _locs_ = frame.f_locals
+ del frame
+ elif _locs_ is None:
+ _locs_ = _globs_
+ exec("""exec _code_ in _globs_, _locs_""")
+
+ exec_("""def reraise(tp, value, tb=None):
+ try:
+ raise tp, value, tb
+ finally:
+ tb = None
+""")
+
+
+if sys.version_info[:2] == (3, 2):
+ exec_("""def raise_from(value, from_value):
+ try:
+ if from_value is None:
+ raise value
+ raise value from from_value
+ finally:
+ value = None
+""")
+elif sys.version_info[:2] > (3, 2):
+ exec_("""def raise_from(value, from_value):
+ try:
+ raise value from from_value
+ finally:
+ value = None
+""")
+else:
+ def raise_from(value, from_value):
+ raise value
+
+
+print_ = getattr(moves.builtins, "print", None)
+if print_ is None:
+ def print_(*args, **kwargs):
+ """The new-style print function for Python 2.4 and 2.5."""
+ fp = kwargs.pop("file", sys.stdout)
+ if fp is None:
+ return
+
+ def write(data):
+ if not isinstance(data, basestring):
+ data = str(data)
+ # If the file has an encoding, encode unicode with it.
+ if (isinstance(fp, file) and
+ isinstance(data, unicode) and
+ fp.encoding is not None):
+ errors = getattr(fp, "errors", None)
+ if errors is None:
+ errors = "strict"
+ data = data.encode(fp.encoding, errors)
+ fp.write(data)
+ want_unicode = False
+ sep = kwargs.pop("sep", None)
+ if sep is not None:
+ if isinstance(sep, unicode):
+ want_unicode = True
+ elif not isinstance(sep, str):
+ raise TypeError("sep must be None or a string")
+ end = kwargs.pop("end", None)
+ if end is not None:
+ if isinstance(end, unicode):
+ want_unicode = True
+ elif not isinstance(end, str):
+ raise TypeError("end must be None or a string")
+ if kwargs:
+ raise TypeError("invalid keyword arguments to print()")
+ if not want_unicode:
+ for arg in args:
+ if isinstance(arg, unicode):
+ want_unicode = True
+ break
+ if want_unicode:
+ newline = unicode("\n")
+ space = unicode(" ")
+ else:
+ newline = "\n"
+ space = " "
+ if sep is None:
+ sep = space
+ if end is None:
+ end = newline
+ for i, arg in enumerate(args):
+ if i:
+ write(sep)
+ write(arg)
+ write(end)
+if sys.version_info[:2] < (3, 3):
+ _print = print_
+
+ def print_(*args, **kwargs):
+ fp = kwargs.get("file", sys.stdout)
+ flush = kwargs.pop("flush", False)
+ _print(*args, **kwargs)
+ if flush and fp is not None:
+ fp.flush()
+
+_add_doc(reraise, """Reraise an exception.""")
+
+if sys.version_info[0:2] < (3, 4):
+ def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS,
+ updated=functools.WRAPPER_UPDATES):
+ def wrapper(f):
+ f = functools.wraps(wrapped, assigned, updated)(f)
+ f.__wrapped__ = wrapped
+ return f
+ return wrapper
+else:
+ wraps = functools.wraps
+
+
+def with_metaclass(meta, *bases):
+ """Create a base class with a metaclass."""
+ # This requires a bit of explanation: the basic idea is to make a dummy
+ # metaclass for one level of class instantiation that replaces itself with
+ # the actual metaclass.
+ class metaclass(meta):
+
+ def __new__(cls, name, this_bases, d):
+ return meta(name, bases, d)
+ return type.__new__(metaclass, 'temporary_class', (), {})
+
+
+def add_metaclass(metaclass):
+ """Class decorator for creating a class with a metaclass."""
+ def wrapper(cls):
+ orig_vars = cls.__dict__.copy()
+ slots = orig_vars.get('__slots__')
+ if slots is not None:
+ if isinstance(slots, str):
+ slots = [slots]
+ for slots_var in slots:
+ orig_vars.pop(slots_var)
+ orig_vars.pop('__dict__', None)
+ orig_vars.pop('__weakref__', None)
+ return metaclass(cls.__name__, cls.__bases__, orig_vars)
+ return wrapper
+
+
+def python_2_unicode_compatible(klass):
+ """
+ A decorator that defines __unicode__ and __str__ methods under Python 2.
+ Under Python 3 it does nothing.
+
+ To support Python 2 and 3 with a single code base, define a __str__ method
+ returning text and apply this decorator to the class.
+ """
+ if PY2:
+ if '__str__' not in klass.__dict__:
+ raise ValueError("@python_2_unicode_compatible cannot be applied "
+ "to %s because it doesn't define __str__()." %
+ klass.__name__)
+ klass.__unicode__ = klass.__str__
+ klass.__str__ = lambda self: self.__unicode__().encode('utf-8')
+ return klass
+
+
+# Complete the moves implementation.
+# This code is at the end of this module to speed up module loading.
+# Turn this module into a package.
+__path__ = [] # required for PEP 302 and PEP 451
+__package__ = __name__ # see PEP 366 @ReservedAssignment
+if globals().get("__spec__") is not None:
+ __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable
+# Remove other six meta path importers, since they cause problems. This can
+# happen if six is removed from sys.modules and then reloaded. (Setuptools does
+# this for some reason.)
+if sys.meta_path:
+ for i, importer in enumerate(sys.meta_path):
+ # Here's some real nastiness: Another "instance" of the six module might
+ # be floating around. Therefore, we can't use isinstance() to check for
+ # the six meta path importer, since the other six instance will have
+ # inserted an importer with different class.
+ if (type(importer).__name__ == "_SixMetaPathImporter" and
+ importer.name == __name__):
+ del sys.meta_path[i]
+ break
+ del i, importer
+# Finally, add the importer to the meta path import hook.
+sys.meta_path.append(_importer)
diff --git a/lib/spack/external/yaml/README b/lib/spack/external/yaml/README
index c1edf13870..d186328eeb 100644
--- a/lib/spack/external/yaml/README
+++ b/lib/spack/external/yaml/README
@@ -28,7 +28,7 @@ Post your questions and opinions to the YAML-Core mailing list:
'http://lists.sourceforge.net/lists/listinfo/yaml-core'.
Submit bug reports and feature requests to the PyYAML bug tracker:
-'http://pyyaml.org/newticket?component=pyyaml'.
+'https://bitbucket.org/xi/pyyaml/issues/new'.
PyYAML is written by Kirill Simonov <xi@resolvent.net>. It is released
under the MIT license. See the file LICENSE for more details.
diff --git a/lib/spack/external/yaml/__init__.py b/lib/spack/external/yaml/lib/yaml/__init__.py
index f977f46ba7..87c15d38aa 100644
--- a/lib/spack/external/yaml/__init__.py
+++ b/lib/spack/external/yaml/lib/yaml/__init__.py
@@ -8,7 +8,7 @@ from nodes import *
from loader import *
from dumper import *
-__version__ = '3.10'
+__version__ = '3.12'
try:
from cyaml import *
diff --git a/lib/spack/external/yaml/composer.py b/lib/spack/external/yaml/lib/yaml/composer.py
index 06e5ac782f..06e5ac782f 100644
--- a/lib/spack/external/yaml/composer.py
+++ b/lib/spack/external/yaml/lib/yaml/composer.py
diff --git a/lib/spack/external/yaml/constructor.py b/lib/spack/external/yaml/lib/yaml/constructor.py
index 8c0ec181b2..635faac3e6 100644
--- a/lib/spack/external/yaml/constructor.py
+++ b/lib/spack/external/yaml/lib/yaml/constructor.py
@@ -131,9 +131,6 @@ class BaseConstructor(object):
raise ConstructorError("while constructing a mapping", node.start_mark,
"found unacceptable key (%s)" % exc, key_node.start_mark)
value = self.construct_object(value_node, deep=deep)
- if key in mapping:
- raise ConstructorError("while constructing a mapping", node.start_mark,
- "found already in-use key (%s)" % key, key_node.start_mark)
mapping[key] = value
return mapping
diff --git a/lib/spack/external/yaml/lib/yaml/cyaml.py b/lib/spack/external/yaml/lib/yaml/cyaml.py
new file mode 100644
index 0000000000..68dcd75192
--- /dev/null
+++ b/lib/spack/external/yaml/lib/yaml/cyaml.py
@@ -0,0 +1,85 @@
+
+__all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader',
+ 'CBaseDumper', 'CSafeDumper', 'CDumper']
+
+from _yaml import CParser, CEmitter
+
+from constructor import *
+
+from serializer import *
+from representer import *
+
+from resolver import *
+
+class CBaseLoader(CParser, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class CSafeLoader(CParser, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CLoader(CParser, Constructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class CSafeDumper(CEmitter, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class CDumper(CEmitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
diff --git a/lib/spack/external/yaml/dumper.py b/lib/spack/external/yaml/lib/yaml/dumper.py
index f811d2c919..f811d2c919 100644
--- a/lib/spack/external/yaml/dumper.py
+++ b/lib/spack/external/yaml/lib/yaml/dumper.py
diff --git a/lib/spack/external/yaml/emitter.py b/lib/spack/external/yaml/lib/yaml/emitter.py
index e5bcdcccbb..e5bcdcccbb 100644
--- a/lib/spack/external/yaml/emitter.py
+++ b/lib/spack/external/yaml/lib/yaml/emitter.py
diff --git a/lib/spack/external/yaml/error.py b/lib/spack/external/yaml/lib/yaml/error.py
index 577686db5f..577686db5f 100644
--- a/lib/spack/external/yaml/error.py
+++ b/lib/spack/external/yaml/lib/yaml/error.py
diff --git a/lib/spack/external/yaml/events.py b/lib/spack/external/yaml/lib/yaml/events.py
index f79ad389cb..f79ad389cb 100644
--- a/lib/spack/external/yaml/events.py
+++ b/lib/spack/external/yaml/lib/yaml/events.py
diff --git a/lib/spack/external/yaml/loader.py b/lib/spack/external/yaml/lib/yaml/loader.py
index 293ff467b1..293ff467b1 100644
--- a/lib/spack/external/yaml/loader.py
+++ b/lib/spack/external/yaml/lib/yaml/loader.py
diff --git a/lib/spack/external/yaml/nodes.py b/lib/spack/external/yaml/lib/yaml/nodes.py
index c4f070c41e..c4f070c41e 100644
--- a/lib/spack/external/yaml/nodes.py
+++ b/lib/spack/external/yaml/lib/yaml/nodes.py
diff --git a/lib/spack/external/yaml/parser.py b/lib/spack/external/yaml/lib/yaml/parser.py
index f9e3057f33..f9e3057f33 100644
--- a/lib/spack/external/yaml/parser.py
+++ b/lib/spack/external/yaml/lib/yaml/parser.py
diff --git a/lib/spack/external/yaml/reader.py b/lib/spack/external/yaml/lib/yaml/reader.py
index a67af7c5da..3249e6b9f5 100644
--- a/lib/spack/external/yaml/reader.py
+++ b/lib/spack/external/yaml/lib/yaml/reader.py
@@ -56,7 +56,8 @@ class Reader(object):
# Yeah, it's ugly and slow.
- def __init__(self, stream, name=None):
+ def __init__(self, stream):
+ self.name = None
self.stream = None
self.stream_pointer = 0
self.eof = True
@@ -69,16 +70,16 @@ class Reader(object):
self.line = 0
self.column = 0
if isinstance(stream, unicode):
- self.name = "<unicode string>" if name is None else name
+ self.name = "<unicode string>"
self.check_printable(stream)
self.buffer = stream+u'\0'
elif isinstance(stream, str):
- self.name = "<string>" if name is None else name
+ self.name = "<string>"
self.raw_buffer = stream
self.determine_encoding()
else:
self.stream = stream
- self.name = getattr(stream, 'name', "<file>") if name is None else name
+ self.name = getattr(stream, 'name', "<file>")
self.eof = False
self.raw_buffer = ''
self.determine_encoding()
diff --git a/lib/spack/external/yaml/representer.py b/lib/spack/external/yaml/lib/yaml/representer.py
index 5f4fc70dbc..4ea8cb1fe1 100644
--- a/lib/spack/external/yaml/representer.py
+++ b/lib/spack/external/yaml/lib/yaml/representer.py
@@ -139,7 +139,9 @@ class BaseRepresenter(object):
class SafeRepresenter(BaseRepresenter):
def ignore_aliases(self, data):
- if data in [None, ()]:
+ if data is None:
+ return True
+ if isinstance(data, tuple) and data == ():
return True
if isinstance(data, (str, unicode, bool, int, float)):
return True
diff --git a/lib/spack/external/yaml/resolver.py b/lib/spack/external/yaml/lib/yaml/resolver.py
index 6b5ab87596..528fbc0ead 100644
--- a/lib/spack/external/yaml/resolver.py
+++ b/lib/spack/external/yaml/lib/yaml/resolver.py
@@ -24,7 +24,10 @@ class BaseResolver(object):
def add_implicit_resolver(cls, tag, regexp, first):
if not 'yaml_implicit_resolvers' in cls.__dict__:
- cls.yaml_implicit_resolvers = cls.yaml_implicit_resolvers.copy()
+ implicit_resolvers = {}
+ for key in cls.yaml_implicit_resolvers:
+ implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:]
+ cls.yaml_implicit_resolvers = implicit_resolvers
if first is None:
first = [None]
for ch in first:
diff --git a/lib/spack/external/yaml/scanner.py b/lib/spack/external/yaml/lib/yaml/scanner.py
index 5228fad65c..834f662a4c 100644
--- a/lib/spack/external/yaml/scanner.py
+++ b/lib/spack/external/yaml/lib/yaml/scanner.py
@@ -286,7 +286,7 @@ class Scanner(object):
or self.index-key.index > 1024:
if key.required:
raise ScannerError("while scanning a simple key", key.mark,
- "could not found expected ':'", self.get_mark())
+ "could not find expected ':'", self.get_mark())
del self.possible_simple_keys[level]
def save_possible_simple_key(self):
@@ -297,10 +297,6 @@ class Scanner(object):
# Check if a simple key is required at the current position.
required = not self.flow_level and self.indent == self.column
- # A simple key is required only if it is the first token in the current
- # line. Therefore it is always allowed.
- assert self.allow_simple_key or not required
-
# The next token might be a simple key. Let's save it's number and
# position.
if self.allow_simple_key:
@@ -317,7 +313,7 @@ class Scanner(object):
if key.required:
raise ScannerError("while scanning a simple key", key.mark,
- "could not found expected ':'", self.get_mark())
+ "could not find expected ':'", self.get_mark())
del self.possible_simple_keys[self.flow_level]
diff --git a/lib/spack/external/yaml/serializer.py b/lib/spack/external/yaml/lib/yaml/serializer.py
index 0bf1e96dc1..0bf1e96dc1 100644
--- a/lib/spack/external/yaml/serializer.py
+++ b/lib/spack/external/yaml/lib/yaml/serializer.py
diff --git a/lib/spack/external/yaml/tokens.py b/lib/spack/external/yaml/lib/yaml/tokens.py
index 4d0b48a394..4d0b48a394 100644
--- a/lib/spack/external/yaml/tokens.py
+++ b/lib/spack/external/yaml/lib/yaml/tokens.py
diff --git a/lib/spack/external/yaml/lib3/yaml/__init__.py b/lib/spack/external/yaml/lib3/yaml/__init__.py
new file mode 100644
index 0000000000..d7d27fe63b
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/__init__.py
@@ -0,0 +1,312 @@
+
+from .error import *
+
+from .tokens import *
+from .events import *
+from .nodes import *
+
+from .loader import *
+from .dumper import *
+
+__version__ = '3.12'
+try:
+ from .cyaml import *
+ __with_libyaml__ = True
+except ImportError:
+ __with_libyaml__ = False
+
+import io
+
+def scan(stream, Loader=Loader):
+ """
+ Scan a YAML stream and produce scanning tokens.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_token():
+ yield loader.get_token()
+ finally:
+ loader.dispose()
+
+def parse(stream, Loader=Loader):
+ """
+ Parse a YAML stream and produce parsing events.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_event():
+ yield loader.get_event()
+ finally:
+ loader.dispose()
+
+def compose(stream, Loader=Loader):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding representation tree.
+ """
+ loader = Loader(stream)
+ try:
+ return loader.get_single_node()
+ finally:
+ loader.dispose()
+
+def compose_all(stream, Loader=Loader):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding representation trees.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_node():
+ yield loader.get_node()
+ finally:
+ loader.dispose()
+
+def load(stream, Loader=Loader):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+ """
+ loader = Loader(stream)
+ try:
+ return loader.get_single_data()
+ finally:
+ loader.dispose()
+
+def load_all(stream, Loader=Loader):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+ """
+ loader = Loader(stream)
+ try:
+ while loader.check_data():
+ yield loader.get_data()
+ finally:
+ loader.dispose()
+
+def safe_load(stream):
+ """
+ Parse the first YAML document in a stream
+ and produce the corresponding Python object.
+ Resolve only basic YAML tags.
+ """
+ return load(stream, SafeLoader)
+
+def safe_load_all(stream):
+ """
+ Parse all YAML documents in a stream
+ and produce corresponding Python objects.
+ Resolve only basic YAML tags.
+ """
+ return load_all(stream, SafeLoader)
+
+def emit(events, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+ """
+ Emit YAML parsing events into a stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ stream = io.StringIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ try:
+ for event in events:
+ dumper.emit(event)
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize_all(nodes, stream=None, Dumper=Dumper,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ """
+ Serialize a sequence of representation trees into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ stream = io.StringIO()
+ else:
+ stream = io.BytesIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end)
+ try:
+ dumper.open()
+ for node in nodes:
+ dumper.serialize(node)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def serialize(node, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a representation tree into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return serialize_all([node], stream, Dumper=Dumper, **kwds)
+
+def dump_all(documents, stream=None, Dumper=Dumper,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ getvalue = None
+ if stream is None:
+ if encoding is None:
+ stream = io.StringIO()
+ else:
+ stream = io.BytesIO()
+ getvalue = stream.getvalue
+ dumper = Dumper(stream, default_style=default_style,
+ default_flow_style=default_flow_style,
+ canonical=canonical, indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break,
+ encoding=encoding, version=version, tags=tags,
+ explicit_start=explicit_start, explicit_end=explicit_end)
+ try:
+ dumper.open()
+ for data in documents:
+ dumper.represent(data)
+ dumper.close()
+ finally:
+ dumper.dispose()
+ if getvalue:
+ return getvalue()
+
+def dump(data, stream=None, Dumper=Dumper, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=Dumper, **kwds)
+
+def safe_dump_all(documents, stream=None, **kwds):
+ """
+ Serialize a sequence of Python objects into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all(documents, stream, Dumper=SafeDumper, **kwds)
+
+def safe_dump(data, stream=None, **kwds):
+ """
+ Serialize a Python object into a YAML stream.
+ Produce only basic YAML tags.
+ If stream is None, return the produced string instead.
+ """
+ return dump_all([data], stream, Dumper=SafeDumper, **kwds)
+
+def add_implicit_resolver(tag, regexp, first=None,
+ Loader=Loader, Dumper=Dumper):
+ """
+ Add an implicit scalar detector.
+ If an implicit scalar value matches the given regexp,
+ the corresponding tag is assigned to the scalar.
+ first is a sequence of possible initial characters or None.
+ """
+ Loader.add_implicit_resolver(tag, regexp, first)
+ Dumper.add_implicit_resolver(tag, regexp, first)
+
+def add_path_resolver(tag, path, kind=None, Loader=Loader, Dumper=Dumper):
+ """
+ Add a path based resolver for the given tag.
+ A path is a list of keys that forms a path
+ to a node in the representation tree.
+ Keys can be string values, integers, or None.
+ """
+ Loader.add_path_resolver(tag, path, kind)
+ Dumper.add_path_resolver(tag, path, kind)
+
+def add_constructor(tag, constructor, Loader=Loader):
+ """
+ Add a constructor for the given tag.
+ Constructor is a function that accepts a Loader instance
+ and a node object and produces the corresponding Python object.
+ """
+ Loader.add_constructor(tag, constructor)
+
+def add_multi_constructor(tag_prefix, multi_constructor, Loader=Loader):
+ """
+ Add a multi-constructor for the given tag prefix.
+ Multi-constructor is called for a node if its tag starts with tag_prefix.
+ Multi-constructor accepts a Loader instance, a tag suffix,
+ and a node object and produces the corresponding Python object.
+ """
+ Loader.add_multi_constructor(tag_prefix, multi_constructor)
+
+def add_representer(data_type, representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Representer is a function accepting a Dumper instance
+ and an instance of the given data type
+ and producing the corresponding representation node.
+ """
+ Dumper.add_representer(data_type, representer)
+
+def add_multi_representer(data_type, multi_representer, Dumper=Dumper):
+ """
+ Add a representer for the given type.
+ Multi-representer is a function accepting a Dumper instance
+ and an instance of the given data type or subtype
+ and producing the corresponding representation node.
+ """
+ Dumper.add_multi_representer(data_type, multi_representer)
+
+class YAMLObjectMetaclass(type):
+ """
+ The metaclass for YAMLObject.
+ """
+ def __init__(cls, name, bases, kwds):
+ super(YAMLObjectMetaclass, cls).__init__(name, bases, kwds)
+ if 'yaml_tag' in kwds and kwds['yaml_tag'] is not None:
+ cls.yaml_loader.add_constructor(cls.yaml_tag, cls.from_yaml)
+ cls.yaml_dumper.add_representer(cls, cls.to_yaml)
+
+class YAMLObject(metaclass=YAMLObjectMetaclass):
+ """
+ An object that can dump itself to a YAML stream
+ and load itself from a YAML stream.
+ """
+
+ __slots__ = () # no direct instantiation, so allow immutable subclasses
+
+ yaml_loader = Loader
+ yaml_dumper = Dumper
+
+ yaml_tag = None
+ yaml_flow_style = None
+
+ @classmethod
+ def from_yaml(cls, loader, node):
+ """
+ Convert a representation node to a Python object.
+ """
+ return loader.construct_yaml_object(node, cls)
+
+ @classmethod
+ def to_yaml(cls, dumper, data):
+ """
+ Convert a Python object to a representation node.
+ """
+ return dumper.represent_yaml_object(cls.yaml_tag, data, cls,
+ flow_style=cls.yaml_flow_style)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/composer.py b/lib/spack/external/yaml/lib3/yaml/composer.py
new file mode 100644
index 0000000000..d5c6a7acd9
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/composer.py
@@ -0,0 +1,139 @@
+
+__all__ = ['Composer', 'ComposerError']
+
+from .error import MarkedYAMLError
+from .events import *
+from .nodes import *
+
+class ComposerError(MarkedYAMLError):
+ pass
+
+class Composer:
+
+ def __init__(self):
+ self.anchors = {}
+
+ def check_node(self):
+ # Drop the STREAM-START event.
+ if self.check_event(StreamStartEvent):
+ self.get_event()
+
+ # If there are more documents available?
+ return not self.check_event(StreamEndEvent)
+
+ def get_node(self):
+ # Get the root node of the next document.
+ if not self.check_event(StreamEndEvent):
+ return self.compose_document()
+
+ def get_single_node(self):
+ # Drop the STREAM-START event.
+ self.get_event()
+
+ # Compose a document if the stream is not empty.
+ document = None
+ if not self.check_event(StreamEndEvent):
+ document = self.compose_document()
+
+ # Ensure that the stream contains no more documents.
+ if not self.check_event(StreamEndEvent):
+ event = self.get_event()
+ raise ComposerError("expected a single document in the stream",
+ document.start_mark, "but found another document",
+ event.start_mark)
+
+ # Drop the STREAM-END event.
+ self.get_event()
+
+ return document
+
+ def compose_document(self):
+ # Drop the DOCUMENT-START event.
+ self.get_event()
+
+ # Compose the root node.
+ node = self.compose_node(None, None)
+
+ # Drop the DOCUMENT-END event.
+ self.get_event()
+
+ self.anchors = {}
+ return node
+
+ def compose_node(self, parent, index):
+ if self.check_event(AliasEvent):
+ event = self.get_event()
+ anchor = event.anchor
+ if anchor not in self.anchors:
+ raise ComposerError(None, None, "found undefined alias %r"
+ % anchor, event.start_mark)
+ return self.anchors[anchor]
+ event = self.peek_event()
+ anchor = event.anchor
+ if anchor is not None:
+ if anchor in self.anchors:
+ raise ComposerError("found duplicate anchor %r; first occurence"
+ % anchor, self.anchors[anchor].start_mark,
+ "second occurence", event.start_mark)
+ self.descend_resolver(parent, index)
+ if self.check_event(ScalarEvent):
+ node = self.compose_scalar_node(anchor)
+ elif self.check_event(SequenceStartEvent):
+ node = self.compose_sequence_node(anchor)
+ elif self.check_event(MappingStartEvent):
+ node = self.compose_mapping_node(anchor)
+ self.ascend_resolver()
+ return node
+
+ def compose_scalar_node(self, anchor):
+ event = self.get_event()
+ tag = event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(ScalarNode, event.value, event.implicit)
+ node = ScalarNode(tag, event.value,
+ event.start_mark, event.end_mark, style=event.style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ return node
+
+ def compose_sequence_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(SequenceNode, None, start_event.implicit)
+ node = SequenceNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ index = 0
+ while not self.check_event(SequenceEndEvent):
+ node.value.append(self.compose_node(node, index))
+ index += 1
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
+ def compose_mapping_node(self, anchor):
+ start_event = self.get_event()
+ tag = start_event.tag
+ if tag is None or tag == '!':
+ tag = self.resolve(MappingNode, None, start_event.implicit)
+ node = MappingNode(tag, [],
+ start_event.start_mark, None,
+ flow_style=start_event.flow_style)
+ if anchor is not None:
+ self.anchors[anchor] = node
+ while not self.check_event(MappingEndEvent):
+ #key_event = self.peek_event()
+ item_key = self.compose_node(node, None)
+ #if item_key in node.value:
+ # raise ComposerError("while composing a mapping", start_event.start_mark,
+ # "found duplicate key", key_event.start_mark)
+ item_value = self.compose_node(node, item_key)
+ #node.value[item_key] = item_value
+ node.value.append((item_key, item_value))
+ end_event = self.get_event()
+ node.end_mark = end_event.end_mark
+ return node
+
diff --git a/lib/spack/external/yaml/lib3/yaml/constructor.py b/lib/spack/external/yaml/lib3/yaml/constructor.py
new file mode 100644
index 0000000000..981543aebb
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/constructor.py
@@ -0,0 +1,686 @@
+
+__all__ = ['BaseConstructor', 'SafeConstructor', 'Constructor',
+ 'ConstructorError']
+
+from .error import *
+from .nodes import *
+
+import collections, datetime, base64, binascii, re, sys, types
+
+class ConstructorError(MarkedYAMLError):
+ pass
+
+class BaseConstructor:
+
+ yaml_constructors = {}
+ yaml_multi_constructors = {}
+
+ def __init__(self):
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.state_generators = []
+ self.deep_construct = False
+
+ def check_data(self):
+ # If there are more documents available?
+ return self.check_node()
+
+ def get_data(self):
+ # Construct and return the next document.
+ if self.check_node():
+ return self.construct_document(self.get_node())
+
+ def get_single_data(self):
+ # Ensure that the stream contains a single document and construct it.
+ node = self.get_single_node()
+ if node is not None:
+ return self.construct_document(node)
+ return None
+
+ def construct_document(self, node):
+ data = self.construct_object(node)
+ while self.state_generators:
+ state_generators = self.state_generators
+ self.state_generators = []
+ for generator in state_generators:
+ for dummy in generator:
+ pass
+ self.constructed_objects = {}
+ self.recursive_objects = {}
+ self.deep_construct = False
+ return data
+
+ def construct_object(self, node, deep=False):
+ if node in self.constructed_objects:
+ return self.constructed_objects[node]
+ if deep:
+ old_deep = self.deep_construct
+ self.deep_construct = True
+ if node in self.recursive_objects:
+ raise ConstructorError(None, None,
+ "found unconstructable recursive node", node.start_mark)
+ self.recursive_objects[node] = None
+ constructor = None
+ tag_suffix = None
+ if node.tag in self.yaml_constructors:
+ constructor = self.yaml_constructors[node.tag]
+ else:
+ for tag_prefix in self.yaml_multi_constructors:
+ if node.tag.startswith(tag_prefix):
+ tag_suffix = node.tag[len(tag_prefix):]
+ constructor = self.yaml_multi_constructors[tag_prefix]
+ break
+ else:
+ if None in self.yaml_multi_constructors:
+ tag_suffix = node.tag
+ constructor = self.yaml_multi_constructors[None]
+ elif None in self.yaml_constructors:
+ constructor = self.yaml_constructors[None]
+ elif isinstance(node, ScalarNode):
+ constructor = self.__class__.construct_scalar
+ elif isinstance(node, SequenceNode):
+ constructor = self.__class__.construct_sequence
+ elif isinstance(node, MappingNode):
+ constructor = self.__class__.construct_mapping
+ if tag_suffix is None:
+ data = constructor(self, node)
+ else:
+ data = constructor(self, tag_suffix, node)
+ if isinstance(data, types.GeneratorType):
+ generator = data
+ data = next(generator)
+ if self.deep_construct:
+ for dummy in generator:
+ pass
+ else:
+ self.state_generators.append(generator)
+ self.constructed_objects[node] = data
+ del self.recursive_objects[node]
+ if deep:
+ self.deep_construct = old_deep
+ return data
+
+ def construct_scalar(self, node):
+ if not isinstance(node, ScalarNode):
+ raise ConstructorError(None, None,
+ "expected a scalar node, but found %s" % node.id,
+ node.start_mark)
+ return node.value
+
+ def construct_sequence(self, node, deep=False):
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError(None, None,
+ "expected a sequence node, but found %s" % node.id,
+ node.start_mark)
+ return [self.construct_object(child, deep=deep)
+ for child in node.value]
+
+ def construct_mapping(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ mapping = {}
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ if not isinstance(key, collections.Hashable):
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "found unhashable key", key_node.start_mark)
+ value = self.construct_object(value_node, deep=deep)
+ mapping[key] = value
+ return mapping
+
+ def construct_pairs(self, node, deep=False):
+ if not isinstance(node, MappingNode):
+ raise ConstructorError(None, None,
+ "expected a mapping node, but found %s" % node.id,
+ node.start_mark)
+ pairs = []
+ for key_node, value_node in node.value:
+ key = self.construct_object(key_node, deep=deep)
+ value = self.construct_object(value_node, deep=deep)
+ pairs.append((key, value))
+ return pairs
+
+ @classmethod
+ def add_constructor(cls, tag, constructor):
+ if not 'yaml_constructors' in cls.__dict__:
+ cls.yaml_constructors = cls.yaml_constructors.copy()
+ cls.yaml_constructors[tag] = constructor
+
+ @classmethod
+ def add_multi_constructor(cls, tag_prefix, multi_constructor):
+ if not 'yaml_multi_constructors' in cls.__dict__:
+ cls.yaml_multi_constructors = cls.yaml_multi_constructors.copy()
+ cls.yaml_multi_constructors[tag_prefix] = multi_constructor
+
+class SafeConstructor(BaseConstructor):
+
+ def construct_scalar(self, node):
+ if isinstance(node, MappingNode):
+ for key_node, value_node in node.value:
+ if key_node.tag == 'tag:yaml.org,2002:value':
+ return self.construct_scalar(value_node)
+ return super().construct_scalar(node)
+
+ def flatten_mapping(self, node):
+ merge = []
+ index = 0
+ while index < len(node.value):
+ key_node, value_node = node.value[index]
+ if key_node.tag == 'tag:yaml.org,2002:merge':
+ del node.value[index]
+ if isinstance(value_node, MappingNode):
+ self.flatten_mapping(value_node)
+ merge.extend(value_node.value)
+ elif isinstance(value_node, SequenceNode):
+ submerge = []
+ for subnode in value_node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing a mapping",
+ node.start_mark,
+ "expected a mapping for merging, but found %s"
+ % subnode.id, subnode.start_mark)
+ self.flatten_mapping(subnode)
+ submerge.append(subnode.value)
+ submerge.reverse()
+ for value in submerge:
+ merge.extend(value)
+ else:
+ raise ConstructorError("while constructing a mapping", node.start_mark,
+ "expected a mapping or list of mappings for merging, but found %s"
+ % value_node.id, value_node.start_mark)
+ elif key_node.tag == 'tag:yaml.org,2002:value':
+ key_node.tag = 'tag:yaml.org,2002:str'
+ index += 1
+ else:
+ index += 1
+ if merge:
+ node.value = merge + node.value
+
+ def construct_mapping(self, node, deep=False):
+ if isinstance(node, MappingNode):
+ self.flatten_mapping(node)
+ return super().construct_mapping(node, deep=deep)
+
+ def construct_yaml_null(self, node):
+ self.construct_scalar(node)
+ return None
+
+ bool_values = {
+ 'yes': True,
+ 'no': False,
+ 'true': True,
+ 'false': False,
+ 'on': True,
+ 'off': False,
+ }
+
+ def construct_yaml_bool(self, node):
+ value = self.construct_scalar(node)
+ return self.bool_values[value.lower()]
+
+ def construct_yaml_int(self, node):
+ value = self.construct_scalar(node)
+ value = value.replace('_', '')
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '0':
+ return 0
+ elif value.startswith('0b'):
+ return sign*int(value[2:], 2)
+ elif value.startswith('0x'):
+ return sign*int(value[2:], 16)
+ elif value[0] == '0':
+ return sign*int(value, 8)
+ elif ':' in value:
+ digits = [int(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*int(value)
+
+ inf_value = 1e300
+ while inf_value != inf_value*inf_value:
+ inf_value *= inf_value
+ nan_value = -inf_value/inf_value # Trying to make a quiet NaN (like C99).
+
+ def construct_yaml_float(self, node):
+ value = self.construct_scalar(node)
+ value = value.replace('_', '').lower()
+ sign = +1
+ if value[0] == '-':
+ sign = -1
+ if value[0] in '+-':
+ value = value[1:]
+ if value == '.inf':
+ return sign*self.inf_value
+ elif value == '.nan':
+ return self.nan_value
+ elif ':' in value:
+ digits = [float(part) for part in value.split(':')]
+ digits.reverse()
+ base = 1
+ value = 0.0
+ for digit in digits:
+ value += digit*base
+ base *= 60
+ return sign*value
+ else:
+ return sign*float(value)
+
+ def construct_yaml_binary(self, node):
+ try:
+ value = self.construct_scalar(node).encode('ascii')
+ except UnicodeEncodeError as exc:
+ raise ConstructorError(None, None,
+ "failed to convert base64 data into ascii: %s" % exc,
+ node.start_mark)
+ try:
+ if hasattr(base64, 'decodebytes'):
+ return base64.decodebytes(value)
+ else:
+ return base64.decodestring(value)
+ except binascii.Error as exc:
+ raise ConstructorError(None, None,
+ "failed to decode base64 data: %s" % exc, node.start_mark)
+
+ timestamp_regexp = re.compile(
+ r'''^(?P<year>[0-9][0-9][0-9][0-9])
+ -(?P<month>[0-9][0-9]?)
+ -(?P<day>[0-9][0-9]?)
+ (?:(?:[Tt]|[ \t]+)
+ (?P<hour>[0-9][0-9]?)
+ :(?P<minute>[0-9][0-9])
+ :(?P<second>[0-9][0-9])
+ (?:\.(?P<fraction>[0-9]*))?
+ (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
+ (?::(?P<tz_minute>[0-9][0-9]))?))?)?$''', re.X)
+
+ def construct_yaml_timestamp(self, node):
+ value = self.construct_scalar(node)
+ match = self.timestamp_regexp.match(node.value)
+ values = match.groupdict()
+ year = int(values['year'])
+ month = int(values['month'])
+ day = int(values['day'])
+ if not values['hour']:
+ return datetime.date(year, month, day)
+ hour = int(values['hour'])
+ minute = int(values['minute'])
+ second = int(values['second'])
+ fraction = 0
+ if values['fraction']:
+ fraction = values['fraction'][:6]
+ while len(fraction) < 6:
+ fraction += '0'
+ fraction = int(fraction)
+ delta = None
+ if values['tz_sign']:
+ tz_hour = int(values['tz_hour'])
+ tz_minute = int(values['tz_minute'] or 0)
+ delta = datetime.timedelta(hours=tz_hour, minutes=tz_minute)
+ if values['tz_sign'] == '-':
+ delta = -delta
+ data = datetime.datetime(year, month, day, hour, minute, second, fraction)
+ if delta:
+ data -= delta
+ return data
+
+ def construct_yaml_omap(self, node):
+ # Note: we do not check for duplicate keys, because it's too
+ # CPU-expensive.
+ omap = []
+ yield omap
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing an ordered map", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ omap.append((key, value))
+
+ def construct_yaml_pairs(self, node):
+ # Note: the same code as `construct_yaml_omap`.
+ pairs = []
+ yield pairs
+ if not isinstance(node, SequenceNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a sequence, but found %s" % node.id, node.start_mark)
+ for subnode in node.value:
+ if not isinstance(subnode, MappingNode):
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a mapping of length 1, but found %s" % subnode.id,
+ subnode.start_mark)
+ if len(subnode.value) != 1:
+ raise ConstructorError("while constructing pairs", node.start_mark,
+ "expected a single mapping item, but found %d items" % len(subnode.value),
+ subnode.start_mark)
+ key_node, value_node = subnode.value[0]
+ key = self.construct_object(key_node)
+ value = self.construct_object(value_node)
+ pairs.append((key, value))
+
+ def construct_yaml_set(self, node):
+ data = set()
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_str(self, node):
+ return self.construct_scalar(node)
+
+ def construct_yaml_seq(self, node):
+ data = []
+ yield data
+ data.extend(self.construct_sequence(node))
+
+ def construct_yaml_map(self, node):
+ data = {}
+ yield data
+ value = self.construct_mapping(node)
+ data.update(value)
+
+ def construct_yaml_object(self, node, cls):
+ data = cls.__new__(cls)
+ yield data
+ if hasattr(data, '__setstate__'):
+ state = self.construct_mapping(node, deep=True)
+ data.__setstate__(state)
+ else:
+ state = self.construct_mapping(node)
+ data.__dict__.update(state)
+
+ def construct_undefined(self, node):
+ raise ConstructorError(None, None,
+ "could not determine a constructor for the tag %r" % node.tag,
+ node.start_mark)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:null',
+ SafeConstructor.construct_yaml_null)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:bool',
+ SafeConstructor.construct_yaml_bool)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:int',
+ SafeConstructor.construct_yaml_int)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:float',
+ SafeConstructor.construct_yaml_float)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:binary',
+ SafeConstructor.construct_yaml_binary)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:timestamp',
+ SafeConstructor.construct_yaml_timestamp)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:omap',
+ SafeConstructor.construct_yaml_omap)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:pairs',
+ SafeConstructor.construct_yaml_pairs)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:set',
+ SafeConstructor.construct_yaml_set)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:str',
+ SafeConstructor.construct_yaml_str)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:seq',
+ SafeConstructor.construct_yaml_seq)
+
+SafeConstructor.add_constructor(
+ 'tag:yaml.org,2002:map',
+ SafeConstructor.construct_yaml_map)
+
+SafeConstructor.add_constructor(None,
+ SafeConstructor.construct_undefined)
+
+class Constructor(SafeConstructor):
+
+ def construct_python_str(self, node):
+ return self.construct_scalar(node)
+
+ def construct_python_unicode(self, node):
+ return self.construct_scalar(node)
+
+ def construct_python_bytes(self, node):
+ try:
+ value = self.construct_scalar(node).encode('ascii')
+ except UnicodeEncodeError as exc:
+ raise ConstructorError(None, None,
+ "failed to convert base64 data into ascii: %s" % exc,
+ node.start_mark)
+ try:
+ if hasattr(base64, 'decodebytes'):
+ return base64.decodebytes(value)
+ else:
+ return base64.decodestring(value)
+ except binascii.Error as exc:
+ raise ConstructorError(None, None,
+ "failed to decode base64 data: %s" % exc, node.start_mark)
+
+ def construct_python_long(self, node):
+ return self.construct_yaml_int(node)
+
+ def construct_python_complex(self, node):
+ return complex(self.construct_scalar(node))
+
+ def construct_python_tuple(self, node):
+ return tuple(self.construct_sequence(node))
+
+ def find_python_module(self, name, mark):
+ if not name:
+ raise ConstructorError("while constructing a Python module", mark,
+ "expected non-empty name appended to the tag", mark)
+ try:
+ __import__(name)
+ except ImportError as exc:
+ raise ConstructorError("while constructing a Python module", mark,
+ "cannot find module %r (%s)" % (name, exc), mark)
+ return sys.modules[name]
+
+ def find_python_name(self, name, mark):
+ if not name:
+ raise ConstructorError("while constructing a Python object", mark,
+ "expected non-empty name appended to the tag", mark)
+ if '.' in name:
+ module_name, object_name = name.rsplit('.', 1)
+ else:
+ module_name = 'builtins'
+ object_name = name
+ try:
+ __import__(module_name)
+ except ImportError as exc:
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find module %r (%s)" % (module_name, exc), mark)
+ module = sys.modules[module_name]
+ if not hasattr(module, object_name):
+ raise ConstructorError("while constructing a Python object", mark,
+ "cannot find %r in the module %r"
+ % (object_name, module.__name__), mark)
+ return getattr(module, object_name)
+
+ def construct_python_name(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python name", node.start_mark,
+ "expected the empty value, but found %r" % value, node.start_mark)
+ return self.find_python_name(suffix, node.start_mark)
+
+ def construct_python_module(self, suffix, node):
+ value = self.construct_scalar(node)
+ if value:
+ raise ConstructorError("while constructing a Python module", node.start_mark,
+ "expected the empty value, but found %r" % value, node.start_mark)
+ return self.find_python_module(suffix, node.start_mark)
+
+ def make_python_instance(self, suffix, node,
+ args=None, kwds=None, newobj=False):
+ if not args:
+ args = []
+ if not kwds:
+ kwds = {}
+ cls = self.find_python_name(suffix, node.start_mark)
+ if newobj and isinstance(cls, type):
+ return cls.__new__(cls, *args, **kwds)
+ else:
+ return cls(*args, **kwds)
+
+ def set_python_instance_state(self, instance, state):
+ if hasattr(instance, '__setstate__'):
+ instance.__setstate__(state)
+ else:
+ slotstate = {}
+ if isinstance(state, tuple) and len(state) == 2:
+ state, slotstate = state
+ if hasattr(instance, '__dict__'):
+ instance.__dict__.update(state)
+ elif state:
+ slotstate.update(state)
+ for key, value in slotstate.items():
+ setattr(object, key, value)
+
+ def construct_python_object(self, suffix, node):
+ # Format:
+ # !!python/object:module.name { ... state ... }
+ instance = self.make_python_instance(suffix, node, newobj=True)
+ yield instance
+ deep = hasattr(instance, '__setstate__')
+ state = self.construct_mapping(node, deep=deep)
+ self.set_python_instance_state(instance, state)
+
+ def construct_python_object_apply(self, suffix, node, newobj=False):
+ # Format:
+ # !!python/object/apply # (or !!python/object/new)
+ # args: [ ... arguments ... ]
+ # kwds: { ... keywords ... }
+ # state: ... state ...
+ # listitems: [ ... listitems ... ]
+ # dictitems: { ... dictitems ... }
+ # or short format:
+ # !!python/object/apply [ ... arguments ... ]
+ # The difference between !!python/object/apply and !!python/object/new
+ # is how an object is created, check make_python_instance for details.
+ if isinstance(node, SequenceNode):
+ args = self.construct_sequence(node, deep=True)
+ kwds = {}
+ state = {}
+ listitems = []
+ dictitems = {}
+ else:
+ value = self.construct_mapping(node, deep=True)
+ args = value.get('args', [])
+ kwds = value.get('kwds', {})
+ state = value.get('state', {})
+ listitems = value.get('listitems', [])
+ dictitems = value.get('dictitems', {})
+ instance = self.make_python_instance(suffix, node, args, kwds, newobj)
+ if state:
+ self.set_python_instance_state(instance, state)
+ if listitems:
+ instance.extend(listitems)
+ if dictitems:
+ for key in dictitems:
+ instance[key] = dictitems[key]
+ return instance
+
+ def construct_python_object_new(self, suffix, node):
+ return self.construct_python_object_apply(suffix, node, newobj=True)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/none',
+ Constructor.construct_yaml_null)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/bool',
+ Constructor.construct_yaml_bool)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/str',
+ Constructor.construct_python_str)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/unicode',
+ Constructor.construct_python_unicode)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/bytes',
+ Constructor.construct_python_bytes)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/int',
+ Constructor.construct_yaml_int)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/long',
+ Constructor.construct_python_long)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/float',
+ Constructor.construct_yaml_float)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/complex',
+ Constructor.construct_python_complex)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/list',
+ Constructor.construct_yaml_seq)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/tuple',
+ Constructor.construct_python_tuple)
+
+Constructor.add_constructor(
+ 'tag:yaml.org,2002:python/dict',
+ Constructor.construct_yaml_map)
+
+Constructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/name:',
+ Constructor.construct_python_name)
+
+Constructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/module:',
+ Constructor.construct_python_module)
+
+Constructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object:',
+ Constructor.construct_python_object)
+
+Constructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object/apply:',
+ Constructor.construct_python_object_apply)
+
+Constructor.add_multi_constructor(
+ 'tag:yaml.org,2002:python/object/new:',
+ Constructor.construct_python_object_new)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/cyaml.py b/lib/spack/external/yaml/lib3/yaml/cyaml.py
new file mode 100644
index 0000000000..d5cb87e994
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/cyaml.py
@@ -0,0 +1,85 @@
+
+__all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader',
+ 'CBaseDumper', 'CSafeDumper', 'CDumper']
+
+from _yaml import CParser, CEmitter
+
+from .constructor import *
+
+from .serializer import *
+from .representer import *
+
+from .resolver import *
+
+class CBaseLoader(CParser, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class CSafeLoader(CParser, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class CLoader(CParser, Constructor, Resolver):
+
+ def __init__(self, stream):
+ CParser.__init__(self, stream)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
+class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class CSafeDumper(CEmitter, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class CDumper(CEmitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ CEmitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width, encoding=encoding,
+ allow_unicode=allow_unicode, line_break=line_break,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/dumper.py b/lib/spack/external/yaml/lib3/yaml/dumper.py
new file mode 100644
index 0000000000..0b69128771
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/dumper.py
@@ -0,0 +1,62 @@
+
+__all__ = ['BaseDumper', 'SafeDumper', 'Dumper']
+
+from .emitter import *
+from .serializer import *
+from .representer import *
+from .resolver import *
+
+class BaseDumper(Emitter, Serializer, BaseRepresenter, BaseResolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class SafeDumper(Emitter, Serializer, SafeRepresenter, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ SafeRepresenter.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
+class Dumper(Emitter, Serializer, Representer, Resolver):
+
+ def __init__(self, stream,
+ default_style=None, default_flow_style=None,
+ canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None,
+ encoding=None, explicit_start=None, explicit_end=None,
+ version=None, tags=None):
+ Emitter.__init__(self, stream, canonical=canonical,
+ indent=indent, width=width,
+ allow_unicode=allow_unicode, line_break=line_break)
+ Serializer.__init__(self, encoding=encoding,
+ explicit_start=explicit_start, explicit_end=explicit_end,
+ version=version, tags=tags)
+ Representer.__init__(self, default_style=default_style,
+ default_flow_style=default_flow_style)
+ Resolver.__init__(self)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/emitter.py b/lib/spack/external/yaml/lib3/yaml/emitter.py
new file mode 100644
index 0000000000..34cb145a5f
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/emitter.py
@@ -0,0 +1,1137 @@
+
+# Emitter expects events obeying the following grammar:
+# stream ::= STREAM-START document* STREAM-END
+# document ::= DOCUMENT-START node DOCUMENT-END
+# node ::= SCALAR | sequence | mapping
+# sequence ::= SEQUENCE-START node* SEQUENCE-END
+# mapping ::= MAPPING-START (node node)* MAPPING-END
+
+__all__ = ['Emitter', 'EmitterError']
+
+from .error import YAMLError
+from .events import *
+
+class EmitterError(YAMLError):
+ pass
+
+class ScalarAnalysis:
+ def __init__(self, scalar, empty, multiline,
+ allow_flow_plain, allow_block_plain,
+ allow_single_quoted, allow_double_quoted,
+ allow_block):
+ self.scalar = scalar
+ self.empty = empty
+ self.multiline = multiline
+ self.allow_flow_plain = allow_flow_plain
+ self.allow_block_plain = allow_block_plain
+ self.allow_single_quoted = allow_single_quoted
+ self.allow_double_quoted = allow_double_quoted
+ self.allow_block = allow_block
+
+class Emitter:
+
+ DEFAULT_TAG_PREFIXES = {
+ '!' : '!',
+ 'tag:yaml.org,2002:' : '!!',
+ }
+
+ def __init__(self, stream, canonical=None, indent=None, width=None,
+ allow_unicode=None, line_break=None):
+
+ # The stream should have the methods `write` and possibly `flush`.
+ self.stream = stream
+
+ # Encoding can be overriden by STREAM-START.
+ self.encoding = None
+
+ # Emitter is a state machine with a stack of states to handle nested
+ # structures.
+ self.states = []
+ self.state = self.expect_stream_start
+
+ # Current event and the event queue.
+ self.events = []
+ self.event = None
+
+ # The current indentation level and the stack of previous indents.
+ self.indents = []
+ self.indent = None
+
+ # Flow level.
+ self.flow_level = 0
+
+ # Contexts.
+ self.root_context = False
+ self.sequence_context = False
+ self.mapping_context = False
+ self.simple_key_context = False
+
+ # Characteristics of the last emitted character:
+ # - current position.
+ # - is it a whitespace?
+ # - is it an indention character
+ # (indentation space, '-', '?', or ':')?
+ self.line = 0
+ self.column = 0
+ self.whitespace = True
+ self.indention = True
+
+ # Whether the document requires an explicit document indicator
+ self.open_ended = False
+
+ # Formatting details.
+ self.canonical = canonical
+ self.allow_unicode = allow_unicode
+ self.best_indent = 2
+ if indent and 1 < indent < 10:
+ self.best_indent = indent
+ self.best_width = 80
+ if width and width > self.best_indent*2:
+ self.best_width = width
+ self.best_line_break = '\n'
+ if line_break in ['\r', '\n', '\r\n']:
+ self.best_line_break = line_break
+
+ # Tag prefixes.
+ self.tag_prefixes = None
+
+ # Prepared anchor and tag.
+ self.prepared_anchor = None
+ self.prepared_tag = None
+
+ # Scalar analysis and style.
+ self.analysis = None
+ self.style = None
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def emit(self, event):
+ self.events.append(event)
+ while not self.need_more_events():
+ self.event = self.events.pop(0)
+ self.state()
+ self.event = None
+
+ # In some cases, we wait for a few next events before emitting.
+
+ def need_more_events(self):
+ if not self.events:
+ return True
+ event = self.events[0]
+ if isinstance(event, DocumentStartEvent):
+ return self.need_events(1)
+ elif isinstance(event, SequenceStartEvent):
+ return self.need_events(2)
+ elif isinstance(event, MappingStartEvent):
+ return self.need_events(3)
+ else:
+ return False
+
+ def need_events(self, count):
+ level = 0
+ for event in self.events[1:]:
+ if isinstance(event, (DocumentStartEvent, CollectionStartEvent)):
+ level += 1
+ elif isinstance(event, (DocumentEndEvent, CollectionEndEvent)):
+ level -= 1
+ elif isinstance(event, StreamEndEvent):
+ level = -1
+ if level < 0:
+ return False
+ return (len(self.events) < count+1)
+
+ def increase_indent(self, flow=False, indentless=False):
+ self.indents.append(self.indent)
+ if self.indent is None:
+ if flow:
+ self.indent = self.best_indent
+ else:
+ self.indent = 0
+ elif not indentless:
+ self.indent += self.best_indent
+
+ # States.
+
+ # Stream handlers.
+
+ def expect_stream_start(self):
+ if isinstance(self.event, StreamStartEvent):
+ if self.event.encoding and not hasattr(self.stream, 'encoding'):
+ self.encoding = self.event.encoding
+ self.write_stream_start()
+ self.state = self.expect_first_document_start
+ else:
+ raise EmitterError("expected StreamStartEvent, but got %s"
+ % self.event)
+
+ def expect_nothing(self):
+ raise EmitterError("expected nothing, but got %s" % self.event)
+
+ # Document handlers.
+
+ def expect_first_document_start(self):
+ return self.expect_document_start(first=True)
+
+ def expect_document_start(self, first=False):
+ if isinstance(self.event, DocumentStartEvent):
+ if (self.event.version or self.event.tags) and self.open_ended:
+ self.write_indicator('...', True)
+ self.write_indent()
+ if self.event.version:
+ version_text = self.prepare_version(self.event.version)
+ self.write_version_directive(version_text)
+ self.tag_prefixes = self.DEFAULT_TAG_PREFIXES.copy()
+ if self.event.tags:
+ handles = sorted(self.event.tags.keys())
+ for handle in handles:
+ prefix = self.event.tags[handle]
+ self.tag_prefixes[prefix] = handle
+ handle_text = self.prepare_tag_handle(handle)
+ prefix_text = self.prepare_tag_prefix(prefix)
+ self.write_tag_directive(handle_text, prefix_text)
+ implicit = (first and not self.event.explicit and not self.canonical
+ and not self.event.version and not self.event.tags
+ and not self.check_empty_document())
+ if not implicit:
+ self.write_indent()
+ self.write_indicator('---', True)
+ if self.canonical:
+ self.write_indent()
+ self.state = self.expect_document_root
+ elif isinstance(self.event, StreamEndEvent):
+ if self.open_ended:
+ self.write_indicator('...', True)
+ self.write_indent()
+ self.write_stream_end()
+ self.state = self.expect_nothing
+ else:
+ raise EmitterError("expected DocumentStartEvent, but got %s"
+ % self.event)
+
+ def expect_document_end(self):
+ if isinstance(self.event, DocumentEndEvent):
+ self.write_indent()
+ if self.event.explicit:
+ self.write_indicator('...', True)
+ self.write_indent()
+ self.flush_stream()
+ self.state = self.expect_document_start
+ else:
+ raise EmitterError("expected DocumentEndEvent, but got %s"
+ % self.event)
+
+ def expect_document_root(self):
+ self.states.append(self.expect_document_end)
+ self.expect_node(root=True)
+
+ # Node handlers.
+
+ def expect_node(self, root=False, sequence=False, mapping=False,
+ simple_key=False):
+ self.root_context = root
+ self.sequence_context = sequence
+ self.mapping_context = mapping
+ self.simple_key_context = simple_key
+ if isinstance(self.event, AliasEvent):
+ self.expect_alias()
+ elif isinstance(self.event, (ScalarEvent, CollectionStartEvent)):
+ self.process_anchor('&')
+ self.process_tag()
+ if isinstance(self.event, ScalarEvent):
+ self.expect_scalar()
+ elif isinstance(self.event, SequenceStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_sequence():
+ self.expect_flow_sequence()
+ else:
+ self.expect_block_sequence()
+ elif isinstance(self.event, MappingStartEvent):
+ if self.flow_level or self.canonical or self.event.flow_style \
+ or self.check_empty_mapping():
+ self.expect_flow_mapping()
+ else:
+ self.expect_block_mapping()
+ else:
+ raise EmitterError("expected NodeEvent, but got %s" % self.event)
+
+ def expect_alias(self):
+ if self.event.anchor is None:
+ raise EmitterError("anchor is not specified for alias")
+ self.process_anchor('*')
+ self.state = self.states.pop()
+
+ def expect_scalar(self):
+ self.increase_indent(flow=True)
+ self.process_scalar()
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+
+ # Flow sequence handlers.
+
+ def expect_flow_sequence(self):
+ self.write_indicator('[', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_sequence_item
+
+ def expect_first_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator(']', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ def expect_flow_sequence_item(self):
+ if isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(',', False)
+ self.write_indent()
+ self.write_indicator(']', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.states.append(self.expect_flow_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Flow mapping handlers.
+
+ def expect_flow_mapping(self):
+ self.write_indicator('{', True, whitespace=True)
+ self.flow_level += 1
+ self.increase_indent(flow=True)
+ self.state = self.expect_first_flow_mapping_key
+
+ def expect_first_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ self.write_indicator('}', False)
+ self.state = self.states.pop()
+ else:
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_key(self):
+ if isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.flow_level -= 1
+ if self.canonical:
+ self.write_indicator(',', False)
+ self.write_indent()
+ self.write_indicator('}', False)
+ self.state = self.states.pop()
+ else:
+ self.write_indicator(',', False)
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ if not self.canonical and self.check_simple_key():
+ self.states.append(self.expect_flow_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True)
+ self.states.append(self.expect_flow_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_simple_value(self):
+ self.write_indicator(':', False)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_flow_mapping_value(self):
+ if self.canonical or self.column > self.best_width:
+ self.write_indent()
+ self.write_indicator(':', True)
+ self.states.append(self.expect_flow_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Block sequence handlers.
+
+ def expect_block_sequence(self):
+ indentless = (self.mapping_context and not self.indention)
+ self.increase_indent(flow=False, indentless=indentless)
+ self.state = self.expect_first_block_sequence_item
+
+ def expect_first_block_sequence_item(self):
+ return self.expect_block_sequence_item(first=True)
+
+ def expect_block_sequence_item(self, first=False):
+ if not first and isinstance(self.event, SequenceEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ self.write_indicator('-', True, indention=True)
+ self.states.append(self.expect_block_sequence_item)
+ self.expect_node(sequence=True)
+
+ # Block mapping handlers.
+
+ def expect_block_mapping(self):
+ self.increase_indent(flow=False)
+ self.state = self.expect_first_block_mapping_key
+
+ def expect_first_block_mapping_key(self):
+ return self.expect_block_mapping_key(first=True)
+
+ def expect_block_mapping_key(self, first=False):
+ if not first and isinstance(self.event, MappingEndEvent):
+ self.indent = self.indents.pop()
+ self.state = self.states.pop()
+ else:
+ self.write_indent()
+ if self.check_simple_key():
+ self.states.append(self.expect_block_mapping_simple_value)
+ self.expect_node(mapping=True, simple_key=True)
+ else:
+ self.write_indicator('?', True, indention=True)
+ self.states.append(self.expect_block_mapping_value)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_simple_value(self):
+ self.write_indicator(':', False)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ def expect_block_mapping_value(self):
+ self.write_indent()
+ self.write_indicator(':', True, indention=True)
+ self.states.append(self.expect_block_mapping_key)
+ self.expect_node(mapping=True)
+
+ # Checkers.
+
+ def check_empty_sequence(self):
+ return (isinstance(self.event, SequenceStartEvent) and self.events
+ and isinstance(self.events[0], SequenceEndEvent))
+
+ def check_empty_mapping(self):
+ return (isinstance(self.event, MappingStartEvent) and self.events
+ and isinstance(self.events[0], MappingEndEvent))
+
+ def check_empty_document(self):
+ if not isinstance(self.event, DocumentStartEvent) or not self.events:
+ return False
+ event = self.events[0]
+ return (isinstance(event, ScalarEvent) and event.anchor is None
+ and event.tag is None and event.implicit and event.value == '')
+
+ def check_simple_key(self):
+ length = 0
+ if isinstance(self.event, NodeEvent) and self.event.anchor is not None:
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ length += len(self.prepared_anchor)
+ if isinstance(self.event, (ScalarEvent, CollectionStartEvent)) \
+ and self.event.tag is not None:
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(self.event.tag)
+ length += len(self.prepared_tag)
+ if isinstance(self.event, ScalarEvent):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ length += len(self.analysis.scalar)
+ return (length < 128 and (isinstance(self.event, AliasEvent)
+ or (isinstance(self.event, ScalarEvent)
+ and not self.analysis.empty and not self.analysis.multiline)
+ or self.check_empty_sequence() or self.check_empty_mapping()))
+
+ # Anchor, Tag, and Scalar processors.
+
+ def process_anchor(self, indicator):
+ if self.event.anchor is None:
+ self.prepared_anchor = None
+ return
+ if self.prepared_anchor is None:
+ self.prepared_anchor = self.prepare_anchor(self.event.anchor)
+ if self.prepared_anchor:
+ self.write_indicator(indicator+self.prepared_anchor, True)
+ self.prepared_anchor = None
+
+ def process_tag(self):
+ tag = self.event.tag
+ if isinstance(self.event, ScalarEvent):
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ if ((not self.canonical or tag is None) and
+ ((self.style == '' and self.event.implicit[0])
+ or (self.style != '' and self.event.implicit[1]))):
+ self.prepared_tag = None
+ return
+ if self.event.implicit[0] and tag is None:
+ tag = '!'
+ self.prepared_tag = None
+ else:
+ if (not self.canonical or tag is None) and self.event.implicit:
+ self.prepared_tag = None
+ return
+ if tag is None:
+ raise EmitterError("tag is not specified")
+ if self.prepared_tag is None:
+ self.prepared_tag = self.prepare_tag(tag)
+ if self.prepared_tag:
+ self.write_indicator(self.prepared_tag, True)
+ self.prepared_tag = None
+
+ def choose_scalar_style(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.event.style == '"' or self.canonical:
+ return '"'
+ if not self.event.style and self.event.implicit[0]:
+ if (not (self.simple_key_context and
+ (self.analysis.empty or self.analysis.multiline))
+ and (self.flow_level and self.analysis.allow_flow_plain
+ or (not self.flow_level and self.analysis.allow_block_plain))):
+ return ''
+ if self.event.style and self.event.style in '|>':
+ if (not self.flow_level and not self.simple_key_context
+ and self.analysis.allow_block):
+ return self.event.style
+ if not self.event.style or self.event.style == '\'':
+ if (self.analysis.allow_single_quoted and
+ not (self.simple_key_context and self.analysis.multiline)):
+ return '\''
+ return '"'
+
+ def process_scalar(self):
+ if self.analysis is None:
+ self.analysis = self.analyze_scalar(self.event.value)
+ if self.style is None:
+ self.style = self.choose_scalar_style()
+ split = (not self.simple_key_context)
+ #if self.analysis.multiline and split \
+ # and (not self.style or self.style in '\'\"'):
+ # self.write_indent()
+ if self.style == '"':
+ self.write_double_quoted(self.analysis.scalar, split)
+ elif self.style == '\'':
+ self.write_single_quoted(self.analysis.scalar, split)
+ elif self.style == '>':
+ self.write_folded(self.analysis.scalar)
+ elif self.style == '|':
+ self.write_literal(self.analysis.scalar)
+ else:
+ self.write_plain(self.analysis.scalar, split)
+ self.analysis = None
+ self.style = None
+
+ # Analyzers.
+
+ def prepare_version(self, version):
+ major, minor = version
+ if major != 1:
+ raise EmitterError("unsupported YAML version: %d.%d" % (major, minor))
+ return '%d.%d' % (major, minor)
+
+ def prepare_tag_handle(self, handle):
+ if not handle:
+ raise EmitterError("tag handle must not be empty")
+ if handle[0] != '!' or handle[-1] != '!':
+ raise EmitterError("tag handle must start and end with '!': %r" % handle)
+ for ch in handle[1:-1]:
+ if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_'):
+ raise EmitterError("invalid character %r in the tag handle: %r"
+ % (ch, handle))
+ return handle
+
+ def prepare_tag_prefix(self, prefix):
+ if not prefix:
+ raise EmitterError("tag prefix must not be empty")
+ chunks = []
+ start = end = 0
+ if prefix[0] == '!':
+ end = 1
+ while end < len(prefix):
+ ch = prefix[end]
+ if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?!:@&=+$,_.~*\'()[]':
+ end += 1
+ else:
+ if start < end:
+ chunks.append(prefix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append('%%%02X' % ord(ch))
+ if start < end:
+ chunks.append(prefix[start:end])
+ return ''.join(chunks)
+
+ def prepare_tag(self, tag):
+ if not tag:
+ raise EmitterError("tag must not be empty")
+ if tag == '!':
+ return tag
+ handle = None
+ suffix = tag
+ prefixes = sorted(self.tag_prefixes.keys())
+ for prefix in prefixes:
+ if tag.startswith(prefix) \
+ and (prefix == '!' or len(prefix) < len(tag)):
+ handle = self.tag_prefixes[prefix]
+ suffix = tag[len(prefix):]
+ chunks = []
+ start = end = 0
+ while end < len(suffix):
+ ch = suffix[end]
+ if '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?:@&=+$,_.~*\'()[]' \
+ or (ch == '!' and handle != '!'):
+ end += 1
+ else:
+ if start < end:
+ chunks.append(suffix[start:end])
+ start = end = end+1
+ data = ch.encode('utf-8')
+ for ch in data:
+ chunks.append('%%%02X' % ord(ch))
+ if start < end:
+ chunks.append(suffix[start:end])
+ suffix_text = ''.join(chunks)
+ if handle:
+ return '%s%s' % (handle, suffix_text)
+ else:
+ return '!<%s>' % suffix_text
+
+ def prepare_anchor(self, anchor):
+ if not anchor:
+ raise EmitterError("anchor must not be empty")
+ for ch in anchor:
+ if not ('0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_'):
+ raise EmitterError("invalid character %r in the anchor: %r"
+ % (ch, anchor))
+ return anchor
+
+ def analyze_scalar(self, scalar):
+
+ # Empty scalar is a special case.
+ if not scalar:
+ return ScalarAnalysis(scalar=scalar, empty=True, multiline=False,
+ allow_flow_plain=False, allow_block_plain=True,
+ allow_single_quoted=True, allow_double_quoted=True,
+ allow_block=False)
+
+ # Indicators and special characters.
+ block_indicators = False
+ flow_indicators = False
+ line_breaks = False
+ special_characters = False
+
+ # Important whitespace combinations.
+ leading_space = False
+ leading_break = False
+ trailing_space = False
+ trailing_break = False
+ break_space = False
+ space_break = False
+
+ # Check document indicators.
+ if scalar.startswith('---') or scalar.startswith('...'):
+ block_indicators = True
+ flow_indicators = True
+
+ # First character or preceded by a whitespace.
+ preceeded_by_whitespace = True
+
+ # Last character or followed by a whitespace.
+ followed_by_whitespace = (len(scalar) == 1 or
+ scalar[1] in '\0 \t\r\n\x85\u2028\u2029')
+
+ # The previous character is a space.
+ previous_space = False
+
+ # The previous character is a break.
+ previous_break = False
+
+ index = 0
+ while index < len(scalar):
+ ch = scalar[index]
+
+ # Check for indicators.
+ if index == 0:
+ # Leading indicators are special characters.
+ if ch in '#,[]{}&*!|>\'\"%@`':
+ flow_indicators = True
+ block_indicators = True
+ if ch in '?:':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == '-' and followed_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+ else:
+ # Some indicators cannot appear within a scalar as well.
+ if ch in ',?[]{}':
+ flow_indicators = True
+ if ch == ':':
+ flow_indicators = True
+ if followed_by_whitespace:
+ block_indicators = True
+ if ch == '#' and preceeded_by_whitespace:
+ flow_indicators = True
+ block_indicators = True
+
+ # Check for line breaks, special, and unicode characters.
+ if ch in '\n\x85\u2028\u2029':
+ line_breaks = True
+ if not (ch == '\n' or '\x20' <= ch <= '\x7E'):
+ if (ch == '\x85' or '\xA0' <= ch <= '\uD7FF'
+ or '\uE000' <= ch <= '\uFFFD') and ch != '\uFEFF':
+ unicode_characters = True
+ if not self.allow_unicode:
+ special_characters = True
+ else:
+ special_characters = True
+
+ # Detect important whitespace combinations.
+ if ch == ' ':
+ if index == 0:
+ leading_space = True
+ if index == len(scalar)-1:
+ trailing_space = True
+ if previous_break:
+ break_space = True
+ previous_space = True
+ previous_break = False
+ elif ch in '\n\x85\u2028\u2029':
+ if index == 0:
+ leading_break = True
+ if index == len(scalar)-1:
+ trailing_break = True
+ if previous_space:
+ space_break = True
+ previous_space = False
+ previous_break = True
+ else:
+ previous_space = False
+ previous_break = False
+
+ # Prepare for the next character.
+ index += 1
+ preceeded_by_whitespace = (ch in '\0 \t\r\n\x85\u2028\u2029')
+ followed_by_whitespace = (index+1 >= len(scalar) or
+ scalar[index+1] in '\0 \t\r\n\x85\u2028\u2029')
+
+ # Let's decide what styles are allowed.
+ allow_flow_plain = True
+ allow_block_plain = True
+ allow_single_quoted = True
+ allow_double_quoted = True
+ allow_block = True
+
+ # Leading and trailing whitespaces are bad for plain scalars.
+ if (leading_space or leading_break
+ or trailing_space or trailing_break):
+ allow_flow_plain = allow_block_plain = False
+
+ # We do not permit trailing spaces for block scalars.
+ if trailing_space:
+ allow_block = False
+
+ # Spaces at the beginning of a new line are only acceptable for block
+ # scalars.
+ if break_space:
+ allow_flow_plain = allow_block_plain = allow_single_quoted = False
+
+ # Spaces followed by breaks, as well as special character are only
+ # allowed for double quoted scalars.
+ if space_break or special_characters:
+ allow_flow_plain = allow_block_plain = \
+ allow_single_quoted = allow_block = False
+
+ # Although the plain scalar writer supports breaks, we never emit
+ # multiline plain scalars.
+ if line_breaks:
+ allow_flow_plain = allow_block_plain = False
+
+ # Flow indicators are forbidden for flow plain scalars.
+ if flow_indicators:
+ allow_flow_plain = False
+
+ # Block indicators are forbidden for block plain scalars.
+ if block_indicators:
+ allow_block_plain = False
+
+ return ScalarAnalysis(scalar=scalar,
+ empty=False, multiline=line_breaks,
+ allow_flow_plain=allow_flow_plain,
+ allow_block_plain=allow_block_plain,
+ allow_single_quoted=allow_single_quoted,
+ allow_double_quoted=allow_double_quoted,
+ allow_block=allow_block)
+
+ # Writers.
+
+ def flush_stream(self):
+ if hasattr(self.stream, 'flush'):
+ self.stream.flush()
+
+ def write_stream_start(self):
+ # Write BOM if needed.
+ if self.encoding and self.encoding.startswith('utf-16'):
+ self.stream.write('\uFEFF'.encode(self.encoding))
+
+ def write_stream_end(self):
+ self.flush_stream()
+
+ def write_indicator(self, indicator, need_whitespace,
+ whitespace=False, indention=False):
+ if self.whitespace or not need_whitespace:
+ data = indicator
+ else:
+ data = ' '+indicator
+ self.whitespace = whitespace
+ self.indention = self.indention and indention
+ self.column += len(data)
+ self.open_ended = False
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_indent(self):
+ indent = self.indent or 0
+ if not self.indention or self.column > indent \
+ or (self.column == indent and not self.whitespace):
+ self.write_line_break()
+ if self.column < indent:
+ self.whitespace = True
+ data = ' '*(indent-self.column)
+ self.column = indent
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_line_break(self, data=None):
+ if data is None:
+ data = self.best_line_break
+ self.whitespace = True
+ self.indention = True
+ self.line += 1
+ self.column = 0
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+
+ def write_version_directive(self, version_text):
+ data = '%%YAML %s' % version_text
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ def write_tag_directive(self, handle_text, prefix_text):
+ data = '%%TAG %s %s' % (handle_text, prefix_text)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_line_break()
+
+ # Scalar streams.
+
+ def write_single_quoted(self, text, split=True):
+ self.write_indicator('\'', True)
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch is None or ch != ' ':
+ if start+1 == end and self.column > self.best_width and split \
+ and start != 0 and end != len(text):
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ if text[start] == '\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029' or ch == '\'':
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch == '\'':
+ data = '\'\''
+ self.column += 2
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end + 1
+ if ch is not None:
+ spaces = (ch == ' ')
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
+ self.write_indicator('\'', False)
+
+ ESCAPE_REPLACEMENTS = {
+ '\0': '0',
+ '\x07': 'a',
+ '\x08': 'b',
+ '\x09': 't',
+ '\x0A': 'n',
+ '\x0B': 'v',
+ '\x0C': 'f',
+ '\x0D': 'r',
+ '\x1B': 'e',
+ '\"': '\"',
+ '\\': '\\',
+ '\x85': 'N',
+ '\xA0': '_',
+ '\u2028': 'L',
+ '\u2029': 'P',
+ }
+
+ def write_double_quoted(self, text, split=True):
+ self.write_indicator('"', True)
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if ch is None or ch in '"\\\x85\u2028\u2029\uFEFF' \
+ or not ('\x20' <= ch <= '\x7E'
+ or (self.allow_unicode
+ and ('\xA0' <= ch <= '\uD7FF'
+ or '\uE000' <= ch <= '\uFFFD'))):
+ if start < end:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ if ch in self.ESCAPE_REPLACEMENTS:
+ data = '\\'+self.ESCAPE_REPLACEMENTS[ch]
+ elif ch <= '\xFF':
+ data = '\\x%02X' % ord(ch)
+ elif ch <= '\uFFFF':
+ data = '\\u%04X' % ord(ch)
+ else:
+ data = '\\U%08X' % ord(ch)
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end+1
+ if 0 < end < len(text)-1 and (ch == ' ' or start >= end) \
+ and self.column+(end-start) > self.best_width and split:
+ data = text[start:end]+'\\'
+ if start < end:
+ start = end
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ if text[start] == ' ':
+ data = '\\'
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ end += 1
+ self.write_indicator('"', False)
+
+ def determine_block_hints(self, text):
+ hints = ''
+ if text:
+ if text[0] in ' \n\x85\u2028\u2029':
+ hints += str(self.best_indent)
+ if text[-1] not in '\n\x85\u2028\u2029':
+ hints += '-'
+ elif len(text) == 1 or text[-2] in '\n\x85\u2028\u2029':
+ hints += '+'
+ return hints
+
+ def write_folded(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator('>'+hints, True)
+ if hints[-1:] == '+':
+ self.open_ended = True
+ self.write_line_break()
+ leading_space = True
+ spaces = False
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ if not leading_space and ch is not None and ch != ' ' \
+ and text[start] == '\n':
+ self.write_line_break()
+ leading_space = (ch == ' ')
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ elif spaces:
+ if ch != ' ':
+ if start+1 == end and self.column > self.best_width:
+ self.write_indent()
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in '\n\x85\u2028\u2029')
+ spaces = (ch == ' ')
+ end += 1
+
+ def write_literal(self, text):
+ hints = self.determine_block_hints(text)
+ self.write_indicator('|'+hints, True)
+ if hints[-1:] == '+':
+ self.open_ended = True
+ self.write_line_break()
+ breaks = True
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if breaks:
+ if ch is None or ch not in '\n\x85\u2028\u2029':
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ if ch is not None:
+ self.write_indent()
+ start = end
+ else:
+ if ch is None or ch in '\n\x85\u2028\u2029':
+ data = text[start:end]
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ if ch is None:
+ self.write_line_break()
+ start = end
+ if ch is not None:
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
+
+ def write_plain(self, text, split=True):
+ if self.root_context:
+ self.open_ended = True
+ if not text:
+ return
+ if not self.whitespace:
+ data = ' '
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ self.whitespace = False
+ self.indention = False
+ spaces = False
+ breaks = False
+ start = end = 0
+ while end <= len(text):
+ ch = None
+ if end < len(text):
+ ch = text[end]
+ if spaces:
+ if ch != ' ':
+ if start+1 == end and self.column > self.best_width and split:
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ else:
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ elif breaks:
+ if ch not in '\n\x85\u2028\u2029':
+ if text[start] == '\n':
+ self.write_line_break()
+ for br in text[start:end]:
+ if br == '\n':
+ self.write_line_break()
+ else:
+ self.write_line_break(br)
+ self.write_indent()
+ self.whitespace = False
+ self.indention = False
+ start = end
+ else:
+ if ch is None or ch in ' \n\x85\u2028\u2029':
+ data = text[start:end]
+ self.column += len(data)
+ if self.encoding:
+ data = data.encode(self.encoding)
+ self.stream.write(data)
+ start = end
+ if ch is not None:
+ spaces = (ch == ' ')
+ breaks = (ch in '\n\x85\u2028\u2029')
+ end += 1
+
diff --git a/lib/spack/external/yaml/lib3/yaml/error.py b/lib/spack/external/yaml/lib3/yaml/error.py
new file mode 100644
index 0000000000..b796b4dc51
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/error.py
@@ -0,0 +1,75 @@
+
+__all__ = ['Mark', 'YAMLError', 'MarkedYAMLError']
+
+class Mark:
+
+ def __init__(self, name, index, line, column, buffer, pointer):
+ self.name = name
+ self.index = index
+ self.line = line
+ self.column = column
+ self.buffer = buffer
+ self.pointer = pointer
+
+ def get_snippet(self, indent=4, max_length=75):
+ if self.buffer is None:
+ return None
+ head = ''
+ start = self.pointer
+ while start > 0 and self.buffer[start-1] not in '\0\r\n\x85\u2028\u2029':
+ start -= 1
+ if self.pointer-start > max_length/2-1:
+ head = ' ... '
+ start += 5
+ break
+ tail = ''
+ end = self.pointer
+ while end < len(self.buffer) and self.buffer[end] not in '\0\r\n\x85\u2028\u2029':
+ end += 1
+ if end-self.pointer > max_length/2-1:
+ tail = ' ... '
+ end -= 5
+ break
+ snippet = self.buffer[start:end]
+ return ' '*indent + head + snippet + tail + '\n' \
+ + ' '*(indent+self.pointer-start+len(head)) + '^'
+
+ def __str__(self):
+ snippet = self.get_snippet()
+ where = " in \"%s\", line %d, column %d" \
+ % (self.name, self.line+1, self.column+1)
+ if snippet is not None:
+ where += ":\n"+snippet
+ return where
+
+class YAMLError(Exception):
+ pass
+
+class MarkedYAMLError(YAMLError):
+
+ def __init__(self, context=None, context_mark=None,
+ problem=None, problem_mark=None, note=None):
+ self.context = context
+ self.context_mark = context_mark
+ self.problem = problem
+ self.problem_mark = problem_mark
+ self.note = note
+
+ def __str__(self):
+ lines = []
+ if self.context is not None:
+ lines.append(self.context)
+ if self.context_mark is not None \
+ and (self.problem is None or self.problem_mark is None
+ or self.context_mark.name != self.problem_mark.name
+ or self.context_mark.line != self.problem_mark.line
+ or self.context_mark.column != self.problem_mark.column):
+ lines.append(str(self.context_mark))
+ if self.problem is not None:
+ lines.append(self.problem)
+ if self.problem_mark is not None:
+ lines.append(str(self.problem_mark))
+ if self.note is not None:
+ lines.append(self.note)
+ return '\n'.join(lines)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/events.py b/lib/spack/external/yaml/lib3/yaml/events.py
new file mode 100644
index 0000000000..f79ad389cb
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/events.py
@@ -0,0 +1,86 @@
+
+# Abstract classes.
+
+class Event(object):
+ def __init__(self, start_mark=None, end_mark=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in ['anchor', 'tag', 'implicit', 'value']
+ if hasattr(self, key)]
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+class NodeEvent(Event):
+ def __init__(self, anchor, start_mark=None, end_mark=None):
+ self.anchor = anchor
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class CollectionStartEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, start_mark=None, end_mark=None,
+ flow_style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class CollectionEndEvent(Event):
+ pass
+
+# Implementations.
+
+class StreamStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None, encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndEvent(Event):
+ pass
+
+class DocumentStartEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None, version=None, tags=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+ self.version = version
+ self.tags = tags
+
+class DocumentEndEvent(Event):
+ def __init__(self, start_mark=None, end_mark=None,
+ explicit=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.explicit = explicit
+
+class AliasEvent(NodeEvent):
+ pass
+
+class ScalarEvent(NodeEvent):
+ def __init__(self, anchor, tag, implicit, value,
+ start_mark=None, end_mark=None, style=None):
+ self.anchor = anchor
+ self.tag = tag
+ self.implicit = implicit
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class SequenceStartEvent(CollectionStartEvent):
+ pass
+
+class SequenceEndEvent(CollectionEndEvent):
+ pass
+
+class MappingStartEvent(CollectionStartEvent):
+ pass
+
+class MappingEndEvent(CollectionEndEvent):
+ pass
+
diff --git a/lib/spack/external/yaml/lib3/yaml/loader.py b/lib/spack/external/yaml/lib3/yaml/loader.py
new file mode 100644
index 0000000000..08c8f01b34
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/loader.py
@@ -0,0 +1,40 @@
+
+__all__ = ['BaseLoader', 'SafeLoader', 'Loader']
+
+from .reader import *
+from .scanner import *
+from .parser import *
+from .composer import *
+from .constructor import *
+from .resolver import *
+
+class BaseLoader(Reader, Scanner, Parser, Composer, BaseConstructor, BaseResolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ BaseConstructor.__init__(self)
+ BaseResolver.__init__(self)
+
+class SafeLoader(Reader, Scanner, Parser, Composer, SafeConstructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ SafeConstructor.__init__(self)
+ Resolver.__init__(self)
+
+class Loader(Reader, Scanner, Parser, Composer, Constructor, Resolver):
+
+ def __init__(self, stream):
+ Reader.__init__(self, stream)
+ Scanner.__init__(self)
+ Parser.__init__(self)
+ Composer.__init__(self)
+ Constructor.__init__(self)
+ Resolver.__init__(self)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/nodes.py b/lib/spack/external/yaml/lib3/yaml/nodes.py
new file mode 100644
index 0000000000..c4f070c41e
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/nodes.py
@@ -0,0 +1,49 @@
+
+class Node(object):
+ def __init__(self, tag, value, start_mark, end_mark):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ value = self.value
+ #if isinstance(value, list):
+ # if len(value) == 0:
+ # value = '<empty>'
+ # elif len(value) == 1:
+ # value = '<1 item>'
+ # else:
+ # value = '<%d items>' % len(value)
+ #else:
+ # if len(value) > 75:
+ # value = repr(value[:70]+u' ... ')
+ # else:
+ # value = repr(value)
+ value = repr(value)
+ return '%s(tag=%r, value=%s)' % (self.__class__.__name__, self.tag, value)
+
+class ScalarNode(Node):
+ id = 'scalar'
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
+class CollectionNode(Node):
+ def __init__(self, tag, value,
+ start_mark=None, end_mark=None, flow_style=None):
+ self.tag = tag
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.flow_style = flow_style
+
+class SequenceNode(CollectionNode):
+ id = 'sequence'
+
+class MappingNode(CollectionNode):
+ id = 'mapping'
+
diff --git a/lib/spack/external/yaml/lib3/yaml/parser.py b/lib/spack/external/yaml/lib3/yaml/parser.py
new file mode 100644
index 0000000000..13a5995d29
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/parser.py
@@ -0,0 +1,589 @@
+
+# The following YAML grammar is LL(1) and is parsed by a recursive descent
+# parser.
+#
+# stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+# implicit_document ::= block_node DOCUMENT-END*
+# explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+# block_node_or_indentless_sequence ::=
+# ALIAS
+# | properties (block_content | indentless_block_sequence)?
+# | block_content
+# | indentless_block_sequence
+# block_node ::= ALIAS
+# | properties block_content?
+# | block_content
+# flow_node ::= ALIAS
+# | properties flow_content?
+# | flow_content
+# properties ::= TAG ANCHOR? | ANCHOR TAG?
+# block_content ::= block_collection | flow_collection | SCALAR
+# flow_content ::= flow_collection | SCALAR
+# block_collection ::= block_sequence | block_mapping
+# flow_collection ::= flow_sequence | flow_mapping
+# block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+# indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+# block_mapping ::= BLOCK-MAPPING_START
+# ((KEY block_node_or_indentless_sequence?)?
+# (VALUE block_node_or_indentless_sequence?)?)*
+# BLOCK-END
+# flow_sequence ::= FLOW-SEQUENCE-START
+# (flow_sequence_entry FLOW-ENTRY)*
+# flow_sequence_entry?
+# FLOW-SEQUENCE-END
+# flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+# flow_mapping ::= FLOW-MAPPING-START
+# (flow_mapping_entry FLOW-ENTRY)*
+# flow_mapping_entry?
+# FLOW-MAPPING-END
+# flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+#
+# FIRST sets:
+#
+# stream: { STREAM-START }
+# explicit_document: { DIRECTIVE DOCUMENT-START }
+# implicit_document: FIRST(block_node)
+# block_node: { ALIAS TAG ANCHOR SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_node: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_content: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# flow_content: { FLOW-SEQUENCE-START FLOW-MAPPING-START SCALAR }
+# block_collection: { BLOCK-SEQUENCE-START BLOCK-MAPPING-START }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# block_sequence: { BLOCK-SEQUENCE-START }
+# block_mapping: { BLOCK-MAPPING-START }
+# block_node_or_indentless_sequence: { ALIAS ANCHOR TAG SCALAR BLOCK-SEQUENCE-START BLOCK-MAPPING-START FLOW-SEQUENCE-START FLOW-MAPPING-START BLOCK-ENTRY }
+# indentless_sequence: { ENTRY }
+# flow_collection: { FLOW-SEQUENCE-START FLOW-MAPPING-START }
+# flow_sequence: { FLOW-SEQUENCE-START }
+# flow_mapping: { FLOW-MAPPING-START }
+# flow_sequence_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+# flow_mapping_entry: { ALIAS ANCHOR TAG SCALAR FLOW-SEQUENCE-START FLOW-MAPPING-START KEY }
+
+__all__ = ['Parser', 'ParserError']
+
+from .error import MarkedYAMLError
+from .tokens import *
+from .events import *
+from .scanner import *
+
+class ParserError(MarkedYAMLError):
+ pass
+
+class Parser:
+ # Since writing a recursive-descendant parser is a straightforward task, we
+ # do not give many comments here.
+
+ DEFAULT_TAGS = {
+ '!': '!',
+ '!!': 'tag:yaml.org,2002:',
+ }
+
+ def __init__(self):
+ self.current_event = None
+ self.yaml_version = None
+ self.tag_handles = {}
+ self.states = []
+ self.marks = []
+ self.state = self.parse_stream_start
+
+ def dispose(self):
+ # Reset the state attributes (to clear self-references)
+ self.states = []
+ self.state = None
+
+ def check_event(self, *choices):
+ # Check the type of the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ if self.current_event is not None:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.current_event, choice):
+ return True
+ return False
+
+ def peek_event(self):
+ # Get the next event.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ return self.current_event
+
+ def get_event(self):
+ # Get the next event and proceed further.
+ if self.current_event is None:
+ if self.state:
+ self.current_event = self.state()
+ value = self.current_event
+ self.current_event = None
+ return value
+
+ # stream ::= STREAM-START implicit_document? explicit_document* STREAM-END
+ # implicit_document ::= block_node DOCUMENT-END*
+ # explicit_document ::= DIRECTIVE* DOCUMENT-START block_node? DOCUMENT-END*
+
+ def parse_stream_start(self):
+
+ # Parse the stream start.
+ token = self.get_token()
+ event = StreamStartEvent(token.start_mark, token.end_mark,
+ encoding=token.encoding)
+
+ # Prepare the next state.
+ self.state = self.parse_implicit_document_start
+
+ return event
+
+ def parse_implicit_document_start(self):
+
+ # Parse an implicit document.
+ if not self.check_token(DirectiveToken, DocumentStartToken,
+ StreamEndToken):
+ self.tag_handles = self.DEFAULT_TAGS
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=False)
+
+ # Prepare the next state.
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_block_node
+
+ return event
+
+ else:
+ return self.parse_document_start()
+
+ def parse_document_start(self):
+
+ # Parse any extra document end indicators.
+ while self.check_token(DocumentEndToken):
+ self.get_token()
+
+ # Parse an explicit document.
+ if not self.check_token(StreamEndToken):
+ token = self.peek_token()
+ start_mark = token.start_mark
+ version, tags = self.process_directives()
+ if not self.check_token(DocumentStartToken):
+ raise ParserError(None, None,
+ "expected '<document start>', but found %r"
+ % self.peek_token().id,
+ self.peek_token().start_mark)
+ token = self.get_token()
+ end_mark = token.end_mark
+ event = DocumentStartEvent(start_mark, end_mark,
+ explicit=True, version=version, tags=tags)
+ self.states.append(self.parse_document_end)
+ self.state = self.parse_document_content
+ else:
+ # Parse the end of the stream.
+ token = self.get_token()
+ event = StreamEndEvent(token.start_mark, token.end_mark)
+ assert not self.states
+ assert not self.marks
+ self.state = None
+ return event
+
+ def parse_document_end(self):
+
+ # Parse the document end.
+ token = self.peek_token()
+ start_mark = end_mark = token.start_mark
+ explicit = False
+ if self.check_token(DocumentEndToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ explicit = True
+ event = DocumentEndEvent(start_mark, end_mark,
+ explicit=explicit)
+
+ # Prepare the next state.
+ self.state = self.parse_document_start
+
+ return event
+
+ def parse_document_content(self):
+ if self.check_token(DirectiveToken,
+ DocumentStartToken, DocumentEndToken, StreamEndToken):
+ event = self.process_empty_scalar(self.peek_token().start_mark)
+ self.state = self.states.pop()
+ return event
+ else:
+ return self.parse_block_node()
+
+ def process_directives(self):
+ self.yaml_version = None
+ self.tag_handles = {}
+ while self.check_token(DirectiveToken):
+ token = self.get_token()
+ if token.name == 'YAML':
+ if self.yaml_version is not None:
+ raise ParserError(None, None,
+ "found duplicate YAML directive", token.start_mark)
+ major, minor = token.value
+ if major != 1:
+ raise ParserError(None, None,
+ "found incompatible YAML document (version 1.* is required)",
+ token.start_mark)
+ self.yaml_version = token.value
+ elif token.name == 'TAG':
+ handle, prefix = token.value
+ if handle in self.tag_handles:
+ raise ParserError(None, None,
+ "duplicate tag handle %r" % handle,
+ token.start_mark)
+ self.tag_handles[handle] = prefix
+ if self.tag_handles:
+ value = self.yaml_version, self.tag_handles.copy()
+ else:
+ value = self.yaml_version, None
+ for key in self.DEFAULT_TAGS:
+ if key not in self.tag_handles:
+ self.tag_handles[key] = self.DEFAULT_TAGS[key]
+ return value
+
+ # block_node_or_indentless_sequence ::= ALIAS
+ # | properties (block_content | indentless_block_sequence)?
+ # | block_content
+ # | indentless_block_sequence
+ # block_node ::= ALIAS
+ # | properties block_content?
+ # | block_content
+ # flow_node ::= ALIAS
+ # | properties flow_content?
+ # | flow_content
+ # properties ::= TAG ANCHOR? | ANCHOR TAG?
+ # block_content ::= block_collection | flow_collection | SCALAR
+ # flow_content ::= flow_collection | SCALAR
+ # block_collection ::= block_sequence | block_mapping
+ # flow_collection ::= flow_sequence | flow_mapping
+
+ def parse_block_node(self):
+ return self.parse_node(block=True)
+
+ def parse_flow_node(self):
+ return self.parse_node()
+
+ def parse_block_node_or_indentless_sequence(self):
+ return self.parse_node(block=True, indentless_sequence=True)
+
+ def parse_node(self, block=False, indentless_sequence=False):
+ if self.check_token(AliasToken):
+ token = self.get_token()
+ event = AliasEvent(token.value, token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ else:
+ anchor = None
+ tag = None
+ start_mark = end_mark = tag_mark = None
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ start_mark = token.start_mark
+ end_mark = token.end_mark
+ anchor = token.value
+ if self.check_token(TagToken):
+ token = self.get_token()
+ tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ elif self.check_token(TagToken):
+ token = self.get_token()
+ start_mark = tag_mark = token.start_mark
+ end_mark = token.end_mark
+ tag = token.value
+ if self.check_token(AnchorToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ anchor = token.value
+ if tag is not None:
+ handle, suffix = tag
+ if handle is not None:
+ if handle not in self.tag_handles:
+ raise ParserError("while parsing a node", start_mark,
+ "found undefined tag handle %r" % handle,
+ tag_mark)
+ tag = self.tag_handles[handle]+suffix
+ else:
+ tag = suffix
+ #if tag == '!':
+ # raise ParserError("while parsing a node", start_mark,
+ # "found non-specific tag '!'", tag_mark,
+ # "Please check 'http://pyyaml.org/wiki/YAMLNonSpecificTag' and share your opinion.")
+ if start_mark is None:
+ start_mark = end_mark = self.peek_token().start_mark
+ event = None
+ implicit = (tag is None or tag == '!')
+ if indentless_sequence and self.check_token(BlockEntryToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark)
+ self.state = self.parse_indentless_sequence_entry
+ else:
+ if self.check_token(ScalarToken):
+ token = self.get_token()
+ end_mark = token.end_mark
+ if (token.plain and tag is None) or tag == '!':
+ implicit = (True, False)
+ elif tag is None:
+ implicit = (False, True)
+ else:
+ implicit = (False, False)
+ event = ScalarEvent(anchor, tag, implicit, token.value,
+ start_mark, end_mark, style=token.style)
+ self.state = self.states.pop()
+ elif self.check_token(FlowSequenceStartToken):
+ end_mark = self.peek_token().end_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_sequence_first_entry
+ elif self.check_token(FlowMappingStartToken):
+ end_mark = self.peek_token().end_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=True)
+ self.state = self.parse_flow_mapping_first_key
+ elif block and self.check_token(BlockSequenceStartToken):
+ end_mark = self.peek_token().start_mark
+ event = SequenceStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_sequence_first_entry
+ elif block and self.check_token(BlockMappingStartToken):
+ end_mark = self.peek_token().start_mark
+ event = MappingStartEvent(anchor, tag, implicit,
+ start_mark, end_mark, flow_style=False)
+ self.state = self.parse_block_mapping_first_key
+ elif anchor is not None or tag is not None:
+ # Empty scalars are allowed even if a tag or an anchor is
+ # specified.
+ event = ScalarEvent(anchor, tag, (implicit, False), '',
+ start_mark, end_mark)
+ self.state = self.states.pop()
+ else:
+ if block:
+ node = 'block'
+ else:
+ node = 'flow'
+ token = self.peek_token()
+ raise ParserError("while parsing a %s node" % node, start_mark,
+ "expected the node content, but found %r" % token.id,
+ token.start_mark)
+ return event
+
+ # block_sequence ::= BLOCK-SEQUENCE-START (BLOCK-ENTRY block_node?)* BLOCK-END
+
+ def parse_block_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_sequence_entry()
+
+ def parse_block_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken, BlockEndToken):
+ self.states.append(self.parse_block_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_block_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block collection", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ # indentless_sequence ::= (BLOCK-ENTRY block_node?)+
+
+ def parse_indentless_sequence_entry(self):
+ if self.check_token(BlockEntryToken):
+ token = self.get_token()
+ if not self.check_token(BlockEntryToken,
+ KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_indentless_sequence_entry)
+ return self.parse_block_node()
+ else:
+ self.state = self.parse_indentless_sequence_entry
+ return self.process_empty_scalar(token.end_mark)
+ token = self.peek_token()
+ event = SequenceEndEvent(token.start_mark, token.start_mark)
+ self.state = self.states.pop()
+ return event
+
+ # block_mapping ::= BLOCK-MAPPING_START
+ # ((KEY block_node_or_indentless_sequence?)?
+ # (VALUE block_node_or_indentless_sequence?)?)*
+ # BLOCK-END
+
+ def parse_block_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_block_mapping_key()
+
+ def parse_block_mapping_key(self):
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_value)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ if not self.check_token(BlockEndToken):
+ token = self.peek_token()
+ raise ParserError("while parsing a block mapping", self.marks[-1],
+ "expected <block end>, but found %r" % token.id, token.start_mark)
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_block_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(KeyToken, ValueToken, BlockEndToken):
+ self.states.append(self.parse_block_mapping_key)
+ return self.parse_block_node_or_indentless_sequence()
+ else:
+ self.state = self.parse_block_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_block_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ # flow_sequence ::= FLOW-SEQUENCE-START
+ # (flow_sequence_entry FLOW-ENTRY)*
+ # flow_sequence_entry?
+ # FLOW-SEQUENCE-END
+ # flow_sequence_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+ #
+ # Note that while production rules for both flow_sequence_entry and
+ # flow_mapping_entry are equal, their interpretations are different.
+ # For `flow_sequence_entry`, the part `KEY flow_node? (VALUE flow_node?)?`
+ # generate an inline mapping (set syntax).
+
+ def parse_flow_sequence_first_entry(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_sequence_entry(first=True)
+
+ def parse_flow_sequence_entry(self, first=False):
+ if not self.check_token(FlowSequenceEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow sequence", self.marks[-1],
+ "expected ',' or ']', but got %r" % token.id, token.start_mark)
+
+ if self.check_token(KeyToken):
+ token = self.peek_token()
+ event = MappingStartEvent(None, None, True,
+ token.start_mark, token.end_mark,
+ flow_style=True)
+ self.state = self.parse_flow_sequence_entry_mapping_key
+ return event
+ elif not self.check_token(FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = SequenceEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_sequence_entry_mapping_key(self):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+
+ def parse_flow_sequence_entry_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowSequenceEndToken):
+ self.states.append(self.parse_flow_sequence_entry_mapping_end)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_sequence_entry_mapping_end
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_sequence_entry_mapping_end(self):
+ self.state = self.parse_flow_sequence_entry
+ token = self.peek_token()
+ return MappingEndEvent(token.start_mark, token.start_mark)
+
+ # flow_mapping ::= FLOW-MAPPING-START
+ # (flow_mapping_entry FLOW-ENTRY)*
+ # flow_mapping_entry?
+ # FLOW-MAPPING-END
+ # flow_mapping_entry ::= flow_node | KEY flow_node? (VALUE flow_node?)?
+
+ def parse_flow_mapping_first_key(self):
+ token = self.get_token()
+ self.marks.append(token.start_mark)
+ return self.parse_flow_mapping_key(first=True)
+
+ def parse_flow_mapping_key(self, first=False):
+ if not self.check_token(FlowMappingEndToken):
+ if not first:
+ if self.check_token(FlowEntryToken):
+ self.get_token()
+ else:
+ token = self.peek_token()
+ raise ParserError("while parsing a flow mapping", self.marks[-1],
+ "expected ',' or '}', but got %r" % token.id, token.start_mark)
+ if self.check_token(KeyToken):
+ token = self.get_token()
+ if not self.check_token(ValueToken,
+ FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_value)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_value
+ return self.process_empty_scalar(token.end_mark)
+ elif not self.check_token(FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_empty_value)
+ return self.parse_flow_node()
+ token = self.get_token()
+ event = MappingEndEvent(token.start_mark, token.end_mark)
+ self.state = self.states.pop()
+ self.marks.pop()
+ return event
+
+ def parse_flow_mapping_value(self):
+ if self.check_token(ValueToken):
+ token = self.get_token()
+ if not self.check_token(FlowEntryToken, FlowMappingEndToken):
+ self.states.append(self.parse_flow_mapping_key)
+ return self.parse_flow_node()
+ else:
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(token.end_mark)
+ else:
+ self.state = self.parse_flow_mapping_key
+ token = self.peek_token()
+ return self.process_empty_scalar(token.start_mark)
+
+ def parse_flow_mapping_empty_value(self):
+ self.state = self.parse_flow_mapping_key
+ return self.process_empty_scalar(self.peek_token().start_mark)
+
+ def process_empty_scalar(self, mark):
+ return ScalarEvent(None, None, (True, False), '', mark, mark)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/reader.py b/lib/spack/external/yaml/lib3/yaml/reader.py
new file mode 100644
index 0000000000..f70e920f44
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/reader.py
@@ -0,0 +1,192 @@
+# This module contains abstractions for the input stream. You don't have to
+# looks further, there are no pretty code.
+#
+# We define two classes here.
+#
+# Mark(source, line, column)
+# It's just a record and its only use is producing nice error messages.
+# Parser does not use it for any other purposes.
+#
+# Reader(source, data)
+# Reader determines the encoding of `data` and converts it to unicode.
+# Reader provides the following methods and attributes:
+# reader.peek(length=1) - return the next `length` characters
+# reader.forward(length=1) - move the current position to `length` characters.
+# reader.index - the number of the current character.
+# reader.line, stream.column - the line and the column of the current character.
+
+__all__ = ['Reader', 'ReaderError']
+
+from .error import YAMLError, Mark
+
+import codecs, re
+
+class ReaderError(YAMLError):
+
+ def __init__(self, name, position, character, encoding, reason):
+ self.name = name
+ self.character = character
+ self.position = position
+ self.encoding = encoding
+ self.reason = reason
+
+ def __str__(self):
+ if isinstance(self.character, bytes):
+ return "'%s' codec can't decode byte #x%02x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.encoding, ord(self.character), self.reason,
+ self.name, self.position)
+ else:
+ return "unacceptable character #x%04x: %s\n" \
+ " in \"%s\", position %d" \
+ % (self.character, self.reason,
+ self.name, self.position)
+
+class Reader(object):
+ # Reader:
+ # - determines the data encoding and converts it to a unicode string,
+ # - checks if characters are in allowed range,
+ # - adds '\0' to the end.
+
+ # Reader accepts
+ # - a `bytes` object,
+ # - a `str` object,
+ # - a file-like object with its `read` method returning `str`,
+ # - a file-like object with its `read` method returning `unicode`.
+
+ # Yeah, it's ugly and slow.
+
+ def __init__(self, stream):
+ self.name = None
+ self.stream = None
+ self.stream_pointer = 0
+ self.eof = True
+ self.buffer = ''
+ self.pointer = 0
+ self.raw_buffer = None
+ self.raw_decode = None
+ self.encoding = None
+ self.index = 0
+ self.line = 0
+ self.column = 0
+ if isinstance(stream, str):
+ self.name = "<unicode string>"
+ self.check_printable(stream)
+ self.buffer = stream+'\0'
+ elif isinstance(stream, bytes):
+ self.name = "<byte string>"
+ self.raw_buffer = stream
+ self.determine_encoding()
+ else:
+ self.stream = stream
+ self.name = getattr(stream, 'name', "<file>")
+ self.eof = False
+ self.raw_buffer = None
+ self.determine_encoding()
+
+ def peek(self, index=0):
+ try:
+ return self.buffer[self.pointer+index]
+ except IndexError:
+ self.update(index+1)
+ return self.buffer[self.pointer+index]
+
+ def prefix(self, length=1):
+ if self.pointer+length >= len(self.buffer):
+ self.update(length)
+ return self.buffer[self.pointer:self.pointer+length]
+
+ def forward(self, length=1):
+ if self.pointer+length+1 >= len(self.buffer):
+ self.update(length+1)
+ while length:
+ ch = self.buffer[self.pointer]
+ self.pointer += 1
+ self.index += 1
+ if ch in '\n\x85\u2028\u2029' \
+ or (ch == '\r' and self.buffer[self.pointer] != '\n'):
+ self.line += 1
+ self.column = 0
+ elif ch != '\uFEFF':
+ self.column += 1
+ length -= 1
+
+ def get_mark(self):
+ if self.stream is None:
+ return Mark(self.name, self.index, self.line, self.column,
+ self.buffer, self.pointer)
+ else:
+ return Mark(self.name, self.index, self.line, self.column,
+ None, None)
+
+ def determine_encoding(self):
+ while not self.eof and (self.raw_buffer is None or len(self.raw_buffer) < 2):
+ self.update_raw()
+ if isinstance(self.raw_buffer, bytes):
+ if self.raw_buffer.startswith(codecs.BOM_UTF16_LE):
+ self.raw_decode = codecs.utf_16_le_decode
+ self.encoding = 'utf-16-le'
+ elif self.raw_buffer.startswith(codecs.BOM_UTF16_BE):
+ self.raw_decode = codecs.utf_16_be_decode
+ self.encoding = 'utf-16-be'
+ else:
+ self.raw_decode = codecs.utf_8_decode
+ self.encoding = 'utf-8'
+ self.update(1)
+
+ NON_PRINTABLE = re.compile('[^\x09\x0A\x0D\x20-\x7E\x85\xA0-\uD7FF\uE000-\uFFFD]')
+ def check_printable(self, data):
+ match = self.NON_PRINTABLE.search(data)
+ if match:
+ character = match.group()
+ position = self.index+(len(self.buffer)-self.pointer)+match.start()
+ raise ReaderError(self.name, position, ord(character),
+ 'unicode', "special characters are not allowed")
+
+ def update(self, length):
+ if self.raw_buffer is None:
+ return
+ self.buffer = self.buffer[self.pointer:]
+ self.pointer = 0
+ while len(self.buffer) < length:
+ if not self.eof:
+ self.update_raw()
+ if self.raw_decode is not None:
+ try:
+ data, converted = self.raw_decode(self.raw_buffer,
+ 'strict', self.eof)
+ except UnicodeDecodeError as exc:
+ character = self.raw_buffer[exc.start]
+ if self.stream is not None:
+ position = self.stream_pointer-len(self.raw_buffer)+exc.start
+ else:
+ position = exc.start
+ raise ReaderError(self.name, position, character,
+ exc.encoding, exc.reason)
+ else:
+ data = self.raw_buffer
+ converted = len(data)
+ self.check_printable(data)
+ self.buffer += data
+ self.raw_buffer = self.raw_buffer[converted:]
+ if self.eof:
+ self.buffer += '\0'
+ self.raw_buffer = None
+ break
+
+ def update_raw(self, size=4096):
+ data = self.stream.read(size)
+ if self.raw_buffer is None:
+ self.raw_buffer = data
+ else:
+ self.raw_buffer += data
+ self.stream_pointer += len(data)
+ if not data:
+ self.eof = True
+
+#try:
+# import psyco
+# psyco.bind(Reader)
+#except ImportError:
+# pass
+
diff --git a/lib/spack/external/yaml/lib3/yaml/representer.py b/lib/spack/external/yaml/lib3/yaml/representer.py
new file mode 100644
index 0000000000..b9e65c5109
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/representer.py
@@ -0,0 +1,387 @@
+
+__all__ = ['BaseRepresenter', 'SafeRepresenter', 'Representer',
+ 'RepresenterError']
+
+from .error import *
+from .nodes import *
+
+import datetime, sys, copyreg, types, base64, collections
+
+class RepresenterError(YAMLError):
+ pass
+
+class BaseRepresenter:
+
+ yaml_representers = {}
+ yaml_multi_representers = {}
+
+ def __init__(self, default_style=None, default_flow_style=None):
+ self.default_style = default_style
+ self.default_flow_style = default_flow_style
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def represent(self, data):
+ node = self.represent_data(data)
+ self.serialize(node)
+ self.represented_objects = {}
+ self.object_keeper = []
+ self.alias_key = None
+
+ def represent_data(self, data):
+ if self.ignore_aliases(data):
+ self.alias_key = None
+ else:
+ self.alias_key = id(data)
+ if self.alias_key is not None:
+ if self.alias_key in self.represented_objects:
+ node = self.represented_objects[self.alias_key]
+ #if node is None:
+ # raise RepresenterError("recursive objects are not allowed: %r" % data)
+ return node
+ #self.represented_objects[alias_key] = None
+ self.object_keeper.append(data)
+ data_types = type(data).__mro__
+ if data_types[0] in self.yaml_representers:
+ node = self.yaml_representers[data_types[0]](self, data)
+ else:
+ for data_type in data_types:
+ if data_type in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[data_type](self, data)
+ break
+ else:
+ if None in self.yaml_multi_representers:
+ node = self.yaml_multi_representers[None](self, data)
+ elif None in self.yaml_representers:
+ node = self.yaml_representers[None](self, data)
+ else:
+ node = ScalarNode(None, str(data))
+ #if alias_key is not None:
+ # self.represented_objects[alias_key] = node
+ return node
+
+ @classmethod
+ def add_representer(cls, data_type, representer):
+ if not 'yaml_representers' in cls.__dict__:
+ cls.yaml_representers = cls.yaml_representers.copy()
+ cls.yaml_representers[data_type] = representer
+
+ @classmethod
+ def add_multi_representer(cls, data_type, representer):
+ if not 'yaml_multi_representers' in cls.__dict__:
+ cls.yaml_multi_representers = cls.yaml_multi_representers.copy()
+ cls.yaml_multi_representers[data_type] = representer
+
+ def represent_scalar(self, tag, value, style=None):
+ if style is None:
+ style = self.default_style
+ node = ScalarNode(tag, value, style=style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ return node
+
+ def represent_sequence(self, tag, sequence, flow_style=None):
+ value = []
+ node = SequenceNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ for item in sequence:
+ node_item = self.represent_data(item)
+ if not (isinstance(node_item, ScalarNode) and not node_item.style):
+ best_style = False
+ value.append(node_item)
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def represent_mapping(self, tag, mapping, flow_style=None):
+ value = []
+ node = MappingNode(tag, value, flow_style=flow_style)
+ if self.alias_key is not None:
+ self.represented_objects[self.alias_key] = node
+ best_style = True
+ if hasattr(mapping, 'items'):
+ mapping = list(mapping.items())
+ try:
+ mapping = sorted(mapping)
+ except TypeError:
+ pass
+ for item_key, item_value in mapping:
+ node_key = self.represent_data(item_key)
+ node_value = self.represent_data(item_value)
+ if not (isinstance(node_key, ScalarNode) and not node_key.style):
+ best_style = False
+ if not (isinstance(node_value, ScalarNode) and not node_value.style):
+ best_style = False
+ value.append((node_key, node_value))
+ if flow_style is None:
+ if self.default_flow_style is not None:
+ node.flow_style = self.default_flow_style
+ else:
+ node.flow_style = best_style
+ return node
+
+ def ignore_aliases(self, data):
+ return False
+
+class SafeRepresenter(BaseRepresenter):
+
+ def ignore_aliases(self, data):
+ if data is None:
+ return True
+ if isinstance(data, tuple) and data == ():
+ return True
+ if isinstance(data, (str, bytes, bool, int, float)):
+ return True
+
+ def represent_none(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:null', 'null')
+
+ def represent_str(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:str', data)
+
+ def represent_binary(self, data):
+ if hasattr(base64, 'encodebytes'):
+ data = base64.encodebytes(data).decode('ascii')
+ else:
+ data = base64.encodestring(data).decode('ascii')
+ return self.represent_scalar('tag:yaml.org,2002:binary', data, style='|')
+
+ def represent_bool(self, data):
+ if data:
+ value = 'true'
+ else:
+ value = 'false'
+ return self.represent_scalar('tag:yaml.org,2002:bool', value)
+
+ def represent_int(self, data):
+ return self.represent_scalar('tag:yaml.org,2002:int', str(data))
+
+ inf_value = 1e300
+ while repr(inf_value) != repr(inf_value*inf_value):
+ inf_value *= inf_value
+
+ def represent_float(self, data):
+ if data != data or (data == 0.0 and data == 1.0):
+ value = '.nan'
+ elif data == self.inf_value:
+ value = '.inf'
+ elif data == -self.inf_value:
+ value = '-.inf'
+ else:
+ value = repr(data).lower()
+ # Note that in some cases `repr(data)` represents a float number
+ # without the decimal parts. For instance:
+ # >>> repr(1e17)
+ # '1e17'
+ # Unfortunately, this is not a valid float representation according
+ # to the definition of the `!!float` tag. We fix this by adding
+ # '.0' before the 'e' symbol.
+ if '.' not in value and 'e' in value:
+ value = value.replace('e', '.0e', 1)
+ return self.represent_scalar('tag:yaml.org,2002:float', value)
+
+ def represent_list(self, data):
+ #pairs = (len(data) > 0 and isinstance(data, list))
+ #if pairs:
+ # for item in data:
+ # if not isinstance(item, tuple) or len(item) != 2:
+ # pairs = False
+ # break
+ #if not pairs:
+ return self.represent_sequence('tag:yaml.org,2002:seq', data)
+ #value = []
+ #for item_key, item_value in data:
+ # value.append(self.represent_mapping(u'tag:yaml.org,2002:map',
+ # [(item_key, item_value)]))
+ #return SequenceNode(u'tag:yaml.org,2002:pairs', value)
+
+ def represent_dict(self, data):
+ return self.represent_mapping('tag:yaml.org,2002:map', data)
+
+ def represent_set(self, data):
+ value = {}
+ for key in data:
+ value[key] = None
+ return self.represent_mapping('tag:yaml.org,2002:set', value)
+
+ def represent_date(self, data):
+ value = data.isoformat()
+ return self.represent_scalar('tag:yaml.org,2002:timestamp', value)
+
+ def represent_datetime(self, data):
+ value = data.isoformat(' ')
+ return self.represent_scalar('tag:yaml.org,2002:timestamp', value)
+
+ def represent_yaml_object(self, tag, data, cls, flow_style=None):
+ if hasattr(data, '__getstate__'):
+ state = data.__getstate__()
+ else:
+ state = data.__dict__.copy()
+ return self.represent_mapping(tag, state, flow_style=flow_style)
+
+ def represent_undefined(self, data):
+ raise RepresenterError("cannot represent an object: %s" % data)
+
+SafeRepresenter.add_representer(type(None),
+ SafeRepresenter.represent_none)
+
+SafeRepresenter.add_representer(str,
+ SafeRepresenter.represent_str)
+
+SafeRepresenter.add_representer(bytes,
+ SafeRepresenter.represent_binary)
+
+SafeRepresenter.add_representer(bool,
+ SafeRepresenter.represent_bool)
+
+SafeRepresenter.add_representer(int,
+ SafeRepresenter.represent_int)
+
+SafeRepresenter.add_representer(float,
+ SafeRepresenter.represent_float)
+
+SafeRepresenter.add_representer(list,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(tuple,
+ SafeRepresenter.represent_list)
+
+SafeRepresenter.add_representer(dict,
+ SafeRepresenter.represent_dict)
+
+SafeRepresenter.add_representer(set,
+ SafeRepresenter.represent_set)
+
+SafeRepresenter.add_representer(datetime.date,
+ SafeRepresenter.represent_date)
+
+SafeRepresenter.add_representer(datetime.datetime,
+ SafeRepresenter.represent_datetime)
+
+SafeRepresenter.add_representer(None,
+ SafeRepresenter.represent_undefined)
+
+class Representer(SafeRepresenter):
+
+ def represent_complex(self, data):
+ if data.imag == 0.0:
+ data = '%r' % data.real
+ elif data.real == 0.0:
+ data = '%rj' % data.imag
+ elif data.imag > 0:
+ data = '%r+%rj' % (data.real, data.imag)
+ else:
+ data = '%r%rj' % (data.real, data.imag)
+ return self.represent_scalar('tag:yaml.org,2002:python/complex', data)
+
+ def represent_tuple(self, data):
+ return self.represent_sequence('tag:yaml.org,2002:python/tuple', data)
+
+ def represent_name(self, data):
+ name = '%s.%s' % (data.__module__, data.__name__)
+ return self.represent_scalar('tag:yaml.org,2002:python/name:'+name, '')
+
+ def represent_module(self, data):
+ return self.represent_scalar(
+ 'tag:yaml.org,2002:python/module:'+data.__name__, '')
+
+ def represent_object(self, data):
+ # We use __reduce__ API to save the data. data.__reduce__ returns
+ # a tuple of length 2-5:
+ # (function, args, state, listitems, dictitems)
+
+ # For reconstructing, we calls function(*args), then set its state,
+ # listitems, and dictitems if they are not None.
+
+ # A special case is when function.__name__ == '__newobj__'. In this
+ # case we create the object with args[0].__new__(*args).
+
+ # Another special case is when __reduce__ returns a string - we don't
+ # support it.
+
+ # We produce a !!python/object, !!python/object/new or
+ # !!python/object/apply node.
+
+ cls = type(data)
+ if cls in copyreg.dispatch_table:
+ reduce = copyreg.dispatch_table[cls](data)
+ elif hasattr(data, '__reduce_ex__'):
+ reduce = data.__reduce_ex__(2)
+ elif hasattr(data, '__reduce__'):
+ reduce = data.__reduce__()
+ else:
+ raise RepresenterError("cannot represent object: %r" % data)
+ reduce = (list(reduce)+[None]*5)[:5]
+ function, args, state, listitems, dictitems = reduce
+ args = list(args)
+ if state is None:
+ state = {}
+ if listitems is not None:
+ listitems = list(listitems)
+ if dictitems is not None:
+ dictitems = dict(dictitems)
+ if function.__name__ == '__newobj__':
+ function = args[0]
+ args = args[1:]
+ tag = 'tag:yaml.org,2002:python/object/new:'
+ newobj = True
+ else:
+ tag = 'tag:yaml.org,2002:python/object/apply:'
+ newobj = False
+ function_name = '%s.%s' % (function.__module__, function.__name__)
+ if not args and not listitems and not dictitems \
+ and isinstance(state, dict) and newobj:
+ return self.represent_mapping(
+ 'tag:yaml.org,2002:python/object:'+function_name, state)
+ if not listitems and not dictitems \
+ and isinstance(state, dict) and not state:
+ return self.represent_sequence(tag+function_name, args)
+ value = {}
+ if args:
+ value['args'] = args
+ if state or not isinstance(state, dict):
+ value['state'] = state
+ if listitems:
+ value['listitems'] = listitems
+ if dictitems:
+ value['dictitems'] = dictitems
+ return self.represent_mapping(tag+function_name, value)
+
+ def represent_ordered_dict(self, data):
+ # Provide uniform representation across different Python versions.
+ data_type = type(data)
+ tag = 'tag:yaml.org,2002:python/object/apply:%s.%s' \
+ % (data_type.__module__, data_type.__name__)
+ items = [[key, value] for key, value in data.items()]
+ return self.represent_sequence(tag, [items])
+
+Representer.add_representer(complex,
+ Representer.represent_complex)
+
+Representer.add_representer(tuple,
+ Representer.represent_tuple)
+
+Representer.add_representer(type,
+ Representer.represent_name)
+
+Representer.add_representer(collections.OrderedDict,
+ Representer.represent_ordered_dict)
+
+Representer.add_representer(types.FunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.BuiltinFunctionType,
+ Representer.represent_name)
+
+Representer.add_representer(types.ModuleType,
+ Representer.represent_module)
+
+Representer.add_multi_representer(object,
+ Representer.represent_object)
+
diff --git a/lib/spack/external/yaml/lib3/yaml/resolver.py b/lib/spack/external/yaml/lib3/yaml/resolver.py
new file mode 100644
index 0000000000..02b82e73ee
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/resolver.py
@@ -0,0 +1,227 @@
+
+__all__ = ['BaseResolver', 'Resolver']
+
+from .error import *
+from .nodes import *
+
+import re
+
+class ResolverError(YAMLError):
+ pass
+
+class BaseResolver:
+
+ DEFAULT_SCALAR_TAG = 'tag:yaml.org,2002:str'
+ DEFAULT_SEQUENCE_TAG = 'tag:yaml.org,2002:seq'
+ DEFAULT_MAPPING_TAG = 'tag:yaml.org,2002:map'
+
+ yaml_implicit_resolvers = {}
+ yaml_path_resolvers = {}
+
+ def __init__(self):
+ self.resolver_exact_paths = []
+ self.resolver_prefix_paths = []
+
+ @classmethod
+ def add_implicit_resolver(cls, tag, regexp, first):
+ if not 'yaml_implicit_resolvers' in cls.__dict__:
+ implicit_resolvers = {}
+ for key in cls.yaml_implicit_resolvers:
+ implicit_resolvers[key] = cls.yaml_implicit_resolvers[key][:]
+ cls.yaml_implicit_resolvers = implicit_resolvers
+ if first is None:
+ first = [None]
+ for ch in first:
+ cls.yaml_implicit_resolvers.setdefault(ch, []).append((tag, regexp))
+
+ @classmethod
+ def add_path_resolver(cls, tag, path, kind=None):
+ # Note: `add_path_resolver` is experimental. The API could be changed.
+ # `new_path` is a pattern that is matched against the path from the
+ # root to the node that is being considered. `node_path` elements are
+ # tuples `(node_check, index_check)`. `node_check` is a node class:
+ # `ScalarNode`, `SequenceNode`, `MappingNode` or `None`. `None`
+ # matches any kind of a node. `index_check` could be `None`, a boolean
+ # value, a string value, or a number. `None` and `False` match against
+ # any _value_ of sequence and mapping nodes. `True` matches against
+ # any _key_ of a mapping node. A string `index_check` matches against
+ # a mapping value that corresponds to a scalar key which content is
+ # equal to the `index_check` value. An integer `index_check` matches
+ # against a sequence value with the index equal to `index_check`.
+ if not 'yaml_path_resolvers' in cls.__dict__:
+ cls.yaml_path_resolvers = cls.yaml_path_resolvers.copy()
+ new_path = []
+ for element in path:
+ if isinstance(element, (list, tuple)):
+ if len(element) == 2:
+ node_check, index_check = element
+ elif len(element) == 1:
+ node_check = element[0]
+ index_check = True
+ else:
+ raise ResolverError("Invalid path element: %s" % element)
+ else:
+ node_check = None
+ index_check = element
+ if node_check is str:
+ node_check = ScalarNode
+ elif node_check is list:
+ node_check = SequenceNode
+ elif node_check is dict:
+ node_check = MappingNode
+ elif node_check not in [ScalarNode, SequenceNode, MappingNode] \
+ and not isinstance(node_check, str) \
+ and node_check is not None:
+ raise ResolverError("Invalid node checker: %s" % node_check)
+ if not isinstance(index_check, (str, int)) \
+ and index_check is not None:
+ raise ResolverError("Invalid index checker: %s" % index_check)
+ new_path.append((node_check, index_check))
+ if kind is str:
+ kind = ScalarNode
+ elif kind is list:
+ kind = SequenceNode
+ elif kind is dict:
+ kind = MappingNode
+ elif kind not in [ScalarNode, SequenceNode, MappingNode] \
+ and kind is not None:
+ raise ResolverError("Invalid node kind: %s" % kind)
+ cls.yaml_path_resolvers[tuple(new_path), kind] = tag
+
+ def descend_resolver(self, current_node, current_index):
+ if not self.yaml_path_resolvers:
+ return
+ exact_paths = {}
+ prefix_paths = []
+ if current_node:
+ depth = len(self.resolver_prefix_paths)
+ for path, kind in self.resolver_prefix_paths[-1]:
+ if self.check_resolver_prefix(depth, path, kind,
+ current_node, current_index):
+ if len(path) > depth:
+ prefix_paths.append((path, kind))
+ else:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ for path, kind in self.yaml_path_resolvers:
+ if not path:
+ exact_paths[kind] = self.yaml_path_resolvers[path, kind]
+ else:
+ prefix_paths.append((path, kind))
+ self.resolver_exact_paths.append(exact_paths)
+ self.resolver_prefix_paths.append(prefix_paths)
+
+ def ascend_resolver(self):
+ if not self.yaml_path_resolvers:
+ return
+ self.resolver_exact_paths.pop()
+ self.resolver_prefix_paths.pop()
+
+ def check_resolver_prefix(self, depth, path, kind,
+ current_node, current_index):
+ node_check, index_check = path[depth-1]
+ if isinstance(node_check, str):
+ if current_node.tag != node_check:
+ return
+ elif node_check is not None:
+ if not isinstance(current_node, node_check):
+ return
+ if index_check is True and current_index is not None:
+ return
+ if (index_check is False or index_check is None) \
+ and current_index is None:
+ return
+ if isinstance(index_check, str):
+ if not (isinstance(current_index, ScalarNode)
+ and index_check == current_index.value):
+ return
+ elif isinstance(index_check, int) and not isinstance(index_check, bool):
+ if index_check != current_index:
+ return
+ return True
+
+ def resolve(self, kind, value, implicit):
+ if kind is ScalarNode and implicit[0]:
+ if value == '':
+ resolvers = self.yaml_implicit_resolvers.get('', [])
+ else:
+ resolvers = self.yaml_implicit_resolvers.get(value[0], [])
+ resolvers += self.yaml_implicit_resolvers.get(None, [])
+ for tag, regexp in resolvers:
+ if regexp.match(value):
+ return tag
+ implicit = implicit[1]
+ if self.yaml_path_resolvers:
+ exact_paths = self.resolver_exact_paths[-1]
+ if kind in exact_paths:
+ return exact_paths[kind]
+ if None in exact_paths:
+ return exact_paths[None]
+ if kind is ScalarNode:
+ return self.DEFAULT_SCALAR_TAG
+ elif kind is SequenceNode:
+ return self.DEFAULT_SEQUENCE_TAG
+ elif kind is MappingNode:
+ return self.DEFAULT_MAPPING_TAG
+
+class Resolver(BaseResolver):
+ pass
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:bool',
+ re.compile(r'''^(?:yes|Yes|YES|no|No|NO
+ |true|True|TRUE|false|False|FALSE
+ |on|On|ON|off|Off|OFF)$''', re.X),
+ list('yYnNtTfFoO'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:float',
+ re.compile(r'''^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?
+ |\.[0-9_]+(?:[eE][-+][0-9]+)?
+ |[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*
+ |[-+]?\.(?:inf|Inf|INF)
+ |\.(?:nan|NaN|NAN))$''', re.X),
+ list('-+0123456789.'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:int',
+ re.compile(r'''^(?:[-+]?0b[0-1_]+
+ |[-+]?0[0-7_]+
+ |[-+]?(?:0|[1-9][0-9_]*)
+ |[-+]?0x[0-9a-fA-F_]+
+ |[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$''', re.X),
+ list('-+0123456789'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:merge',
+ re.compile(r'^(?:<<)$'),
+ ['<'])
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:null',
+ re.compile(r'''^(?: ~
+ |null|Null|NULL
+ | )$''', re.X),
+ ['~', 'n', 'N', ''])
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:timestamp',
+ re.compile(r'''^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
+ |[0-9][0-9][0-9][0-9] -[0-9][0-9]? -[0-9][0-9]?
+ (?:[Tt]|[ \t]+)[0-9][0-9]?
+ :[0-9][0-9] :[0-9][0-9] (?:\.[0-9]*)?
+ (?:[ \t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$''', re.X),
+ list('0123456789'))
+
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:value',
+ re.compile(r'^(?:=)$'),
+ ['='])
+
+# The following resolver is only for documentation purposes. It cannot work
+# because plain scalars cannot start with '!', '&', or '*'.
+Resolver.add_implicit_resolver(
+ 'tag:yaml.org,2002:yaml',
+ re.compile(r'^(?:!|&|\*)$'),
+ list('!&*'))
+
diff --git a/lib/spack/external/yaml/lib3/yaml/scanner.py b/lib/spack/external/yaml/lib3/yaml/scanner.py
new file mode 100644
index 0000000000..c8d127b8ec
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/scanner.py
@@ -0,0 +1,1444 @@
+
+# Scanner produces tokens of the following types:
+# STREAM-START
+# STREAM-END
+# DIRECTIVE(name, value)
+# DOCUMENT-START
+# DOCUMENT-END
+# BLOCK-SEQUENCE-START
+# BLOCK-MAPPING-START
+# BLOCK-END
+# FLOW-SEQUENCE-START
+# FLOW-MAPPING-START
+# FLOW-SEQUENCE-END
+# FLOW-MAPPING-END
+# BLOCK-ENTRY
+# FLOW-ENTRY
+# KEY
+# VALUE
+# ALIAS(value)
+# ANCHOR(value)
+# TAG(value)
+# SCALAR(value, plain, style)
+#
+# Read comments in the Scanner code for more details.
+#
+
+__all__ = ['Scanner', 'ScannerError']
+
+from .error import MarkedYAMLError
+from .tokens import *
+
+class ScannerError(MarkedYAMLError):
+ pass
+
+class SimpleKey:
+ # See below simple keys treatment.
+
+ def __init__(self, token_number, required, index, line, column, mark):
+ self.token_number = token_number
+ self.required = required
+ self.index = index
+ self.line = line
+ self.column = column
+ self.mark = mark
+
+class Scanner:
+
+ def __init__(self):
+ """Initialize the scanner."""
+ # It is assumed that Scanner and Reader will have a common descendant.
+ # Reader do the dirty work of checking for BOM and converting the
+ # input data to Unicode. It also adds NUL to the end.
+ #
+ # Reader supports the following methods
+ # self.peek(i=0) # peek the next i-th character
+ # self.prefix(l=1) # peek the next l characters
+ # self.forward(l=1) # read the next l characters and move the pointer.
+
+ # Had we reached the end of the stream?
+ self.done = False
+
+ # The number of unclosed '{' and '['. `flow_level == 0` means block
+ # context.
+ self.flow_level = 0
+
+ # List of processed tokens that are not yet emitted.
+ self.tokens = []
+
+ # Add the STREAM-START token.
+ self.fetch_stream_start()
+
+ # Number of tokens that were emitted through the `get_token` method.
+ self.tokens_taken = 0
+
+ # The current indentation level.
+ self.indent = -1
+
+ # Past indentation levels.
+ self.indents = []
+
+ # Variables related to simple keys treatment.
+
+ # A simple key is a key that is not denoted by the '?' indicator.
+ # Example of simple keys:
+ # ---
+ # block simple key: value
+ # ? not a simple key:
+ # : { flow simple key: value }
+ # We emit the KEY token before all keys, so when we find a potential
+ # simple key, we try to locate the corresponding ':' indicator.
+ # Simple keys should be limited to a single line and 1024 characters.
+
+ # Can a simple key start at the current position? A simple key may
+ # start:
+ # - at the beginning of the line, not counting indentation spaces
+ # (in block context),
+ # - after '{', '[', ',' (in the flow context),
+ # - after '?', ':', '-' (in the block context).
+ # In the block context, this flag also signifies if a block collection
+ # may start at the current position.
+ self.allow_simple_key = True
+
+ # Keep track of possible simple keys. This is a dictionary. The key
+ # is `flow_level`; there can be no more that one possible simple key
+ # for each level. The value is a SimpleKey record:
+ # (token_number, required, index, line, column, mark)
+ # A simple key may start with ALIAS, ANCHOR, TAG, SCALAR(flow),
+ # '[', or '{' tokens.
+ self.possible_simple_keys = {}
+
+ # Public methods.
+
+ def check_token(self, *choices):
+ # Check if the next token is one of the given types.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ if not choices:
+ return True
+ for choice in choices:
+ if isinstance(self.tokens[0], choice):
+ return True
+ return False
+
+ def peek_token(self):
+ # Return the next token, but do not delete if from the queue.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ return self.tokens[0]
+
+ def get_token(self):
+ # Return the next token.
+ while self.need_more_tokens():
+ self.fetch_more_tokens()
+ if self.tokens:
+ self.tokens_taken += 1
+ return self.tokens.pop(0)
+
+ # Private methods.
+
+ def need_more_tokens(self):
+ if self.done:
+ return False
+ if not self.tokens:
+ return True
+ # The current token may be a potential simple key, so we
+ # need to look further.
+ self.stale_possible_simple_keys()
+ if self.next_possible_simple_key() == self.tokens_taken:
+ return True
+
+ def fetch_more_tokens(self):
+
+ # Eat whitespaces and comments until we reach the next token.
+ self.scan_to_next_token()
+
+ # Remove obsolete possible simple keys.
+ self.stale_possible_simple_keys()
+
+ # Compare the current indentation and column. It may add some tokens
+ # and decrease the current indentation level.
+ self.unwind_indent(self.column)
+
+ # Peek the next character.
+ ch = self.peek()
+
+ # Is it the end of stream?
+ if ch == '\0':
+ return self.fetch_stream_end()
+
+ # Is it a directive?
+ if ch == '%' and self.check_directive():
+ return self.fetch_directive()
+
+ # Is it the document start?
+ if ch == '-' and self.check_document_start():
+ return self.fetch_document_start()
+
+ # Is it the document end?
+ if ch == '.' and self.check_document_end():
+ return self.fetch_document_end()
+
+ # TODO: support for BOM within a stream.
+ #if ch == '\uFEFF':
+ # return self.fetch_bom() <-- issue BOMToken
+
+ # Note: the order of the following checks is NOT significant.
+
+ # Is it the flow sequence start indicator?
+ if ch == '[':
+ return self.fetch_flow_sequence_start()
+
+ # Is it the flow mapping start indicator?
+ if ch == '{':
+ return self.fetch_flow_mapping_start()
+
+ # Is it the flow sequence end indicator?
+ if ch == ']':
+ return self.fetch_flow_sequence_end()
+
+ # Is it the flow mapping end indicator?
+ if ch == '}':
+ return self.fetch_flow_mapping_end()
+
+ # Is it the flow entry indicator?
+ if ch == ',':
+ return self.fetch_flow_entry()
+
+ # Is it the block entry indicator?
+ if ch == '-' and self.check_block_entry():
+ return self.fetch_block_entry()
+
+ # Is it the key indicator?
+ if ch == '?' and self.check_key():
+ return self.fetch_key()
+
+ # Is it the value indicator?
+ if ch == ':' and self.check_value():
+ return self.fetch_value()
+
+ # Is it an alias?
+ if ch == '*':
+ return self.fetch_alias()
+
+ # Is it an anchor?
+ if ch == '&':
+ return self.fetch_anchor()
+
+ # Is it a tag?
+ if ch == '!':
+ return self.fetch_tag()
+
+ # Is it a literal scalar?
+ if ch == '|' and not self.flow_level:
+ return self.fetch_literal()
+
+ # Is it a folded scalar?
+ if ch == '>' and not self.flow_level:
+ return self.fetch_folded()
+
+ # Is it a single quoted scalar?
+ if ch == '\'':
+ return self.fetch_single()
+
+ # Is it a double quoted scalar?
+ if ch == '\"':
+ return self.fetch_double()
+
+ # It must be a plain scalar then.
+ if self.check_plain():
+ return self.fetch_plain()
+
+ # No? It's an error. Let's produce a nice error message.
+ raise ScannerError("while scanning for the next token", None,
+ "found character %r that cannot start any token" % ch,
+ self.get_mark())
+
+ # Simple keys treatment.
+
+ def next_possible_simple_key(self):
+ # Return the number of the nearest possible simple key. Actually we
+ # don't need to loop through the whole dictionary. We may replace it
+ # with the following code:
+ # if not self.possible_simple_keys:
+ # return None
+ # return self.possible_simple_keys[
+ # min(self.possible_simple_keys.keys())].token_number
+ min_token_number = None
+ for level in self.possible_simple_keys:
+ key = self.possible_simple_keys[level]
+ if min_token_number is None or key.token_number < min_token_number:
+ min_token_number = key.token_number
+ return min_token_number
+
+ def stale_possible_simple_keys(self):
+ # Remove entries that are no longer possible simple keys. According to
+ # the YAML specification, simple keys
+ # - should be limited to a single line,
+ # - should be no longer than 1024 characters.
+ # Disabling this procedure will allow simple keys of any length and
+ # height (may cause problems if indentation is broken though).
+ for level in list(self.possible_simple_keys):
+ key = self.possible_simple_keys[level]
+ if key.line != self.line \
+ or self.index-key.index > 1024:
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+ del self.possible_simple_keys[level]
+
+ def save_possible_simple_key(self):
+ # The next token may start a simple key. We check if it's possible
+ # and save its position. This function is called for
+ # ALIAS, ANCHOR, TAG, SCALAR(flow), '[', and '{'.
+
+ # Check if a simple key is required at the current position.
+ required = not self.flow_level and self.indent == self.column
+
+ # The next token might be a simple key. Let's save it's number and
+ # position.
+ if self.allow_simple_key:
+ self.remove_possible_simple_key()
+ token_number = self.tokens_taken+len(self.tokens)
+ key = SimpleKey(token_number, required,
+ self.index, self.line, self.column, self.get_mark())
+ self.possible_simple_keys[self.flow_level] = key
+
+ def remove_possible_simple_key(self):
+ # Remove the saved possible key position at the current flow level.
+ if self.flow_level in self.possible_simple_keys:
+ key = self.possible_simple_keys[self.flow_level]
+
+ if key.required:
+ raise ScannerError("while scanning a simple key", key.mark,
+ "could not find expected ':'", self.get_mark())
+
+ del self.possible_simple_keys[self.flow_level]
+
+ # Indentation functions.
+
+ def unwind_indent(self, column):
+
+ ## In flow context, tokens should respect indentation.
+ ## Actually the condition should be `self.indent >= column` according to
+ ## the spec. But this condition will prohibit intuitively correct
+ ## constructions such as
+ ## key : {
+ ## }
+ #if self.flow_level and self.indent > column:
+ # raise ScannerError(None, None,
+ # "invalid intendation or unclosed '[' or '{'",
+ # self.get_mark())
+
+ # In the flow context, indentation is ignored. We make the scanner less
+ # restrictive then specification requires.
+ if self.flow_level:
+ return
+
+ # In block context, we may need to issue the BLOCK-END tokens.
+ while self.indent > column:
+ mark = self.get_mark()
+ self.indent = self.indents.pop()
+ self.tokens.append(BlockEndToken(mark, mark))
+
+ def add_indent(self, column):
+ # Check if we need to increase indentation.
+ if self.indent < column:
+ self.indents.append(self.indent)
+ self.indent = column
+ return True
+ return False
+
+ # Fetchers.
+
+ def fetch_stream_start(self):
+ # We always add STREAM-START as the first token and STREAM-END as the
+ # last token.
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-START.
+ self.tokens.append(StreamStartToken(mark, mark,
+ encoding=self.encoding))
+
+
+ def fetch_stream_end(self):
+
+ # Set the current intendation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+ self.possible_simple_keys = {}
+
+ # Read the token.
+ mark = self.get_mark()
+
+ # Add STREAM-END.
+ self.tokens.append(StreamEndToken(mark, mark))
+
+ # The steam is finished.
+ self.done = True
+
+ def fetch_directive(self):
+
+ # Set the current intendation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Scan and add DIRECTIVE.
+ self.tokens.append(self.scan_directive())
+
+ def fetch_document_start(self):
+ self.fetch_document_indicator(DocumentStartToken)
+
+ def fetch_document_end(self):
+ self.fetch_document_indicator(DocumentEndToken)
+
+ def fetch_document_indicator(self, TokenClass):
+
+ # Set the current intendation to -1.
+ self.unwind_indent(-1)
+
+ # Reset simple keys. Note that there could not be a block collection
+ # after '---'.
+ self.remove_possible_simple_key()
+ self.allow_simple_key = False
+
+ # Add DOCUMENT-START or DOCUMENT-END.
+ start_mark = self.get_mark()
+ self.forward(3)
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_start(self):
+ self.fetch_flow_collection_start(FlowSequenceStartToken)
+
+ def fetch_flow_mapping_start(self):
+ self.fetch_flow_collection_start(FlowMappingStartToken)
+
+ def fetch_flow_collection_start(self, TokenClass):
+
+ # '[' and '{' may start a simple key.
+ self.save_possible_simple_key()
+
+ # Increase the flow level.
+ self.flow_level += 1
+
+ # Simple keys are allowed after '[' and '{'.
+ self.allow_simple_key = True
+
+ # Add FLOW-SEQUENCE-START or FLOW-MAPPING-START.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_sequence_end(self):
+ self.fetch_flow_collection_end(FlowSequenceEndToken)
+
+ def fetch_flow_mapping_end(self):
+ self.fetch_flow_collection_end(FlowMappingEndToken)
+
+ def fetch_flow_collection_end(self, TokenClass):
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Decrease the flow level.
+ self.flow_level -= 1
+
+ # No simple keys after ']' or '}'.
+ self.allow_simple_key = False
+
+ # Add FLOW-SEQUENCE-END or FLOW-MAPPING-END.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(TokenClass(start_mark, end_mark))
+
+ def fetch_flow_entry(self):
+
+ # Simple keys are allowed after ','.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add FLOW-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(FlowEntryToken(start_mark, end_mark))
+
+ def fetch_block_entry(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a new entry?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "sequence entries are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-SEQUENCE-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockSequenceStartToken(mark, mark))
+
+ # It's an error for the block entry to occur in the flow context,
+ # but we let the parser detect this.
+ else:
+ pass
+
+ # Simple keys are allowed after '-'.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add BLOCK-ENTRY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(BlockEntryToken(start_mark, end_mark))
+
+ def fetch_key(self):
+
+ # Block context needs additional checks.
+ if not self.flow_level:
+
+ # Are we allowed to start a key (not nessesary a simple)?
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping keys are not allowed here",
+ self.get_mark())
+
+ # We may need to add BLOCK-MAPPING-START.
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after '?' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add KEY.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(KeyToken(start_mark, end_mark))
+
+ def fetch_value(self):
+
+ # Do we determine a simple key?
+ if self.flow_level in self.possible_simple_keys:
+
+ # Add KEY.
+ key = self.possible_simple_keys[self.flow_level]
+ del self.possible_simple_keys[self.flow_level]
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ KeyToken(key.mark, key.mark))
+
+ # If this key starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START.
+ if not self.flow_level:
+ if self.add_indent(key.column):
+ self.tokens.insert(key.token_number-self.tokens_taken,
+ BlockMappingStartToken(key.mark, key.mark))
+
+ # There cannot be two simple keys one after another.
+ self.allow_simple_key = False
+
+ # It must be a part of a complex key.
+ else:
+
+ # Block context needs additional checks.
+ # (Do we really need them? They will be catched by the parser
+ # anyway.)
+ if not self.flow_level:
+
+ # We are allowed to start a complex value if and only if
+ # we can start a simple key.
+ if not self.allow_simple_key:
+ raise ScannerError(None, None,
+ "mapping values are not allowed here",
+ self.get_mark())
+
+ # If this value starts a new block mapping, we need to add
+ # BLOCK-MAPPING-START. It will be detected as an error later by
+ # the parser.
+ if not self.flow_level:
+ if self.add_indent(self.column):
+ mark = self.get_mark()
+ self.tokens.append(BlockMappingStartToken(mark, mark))
+
+ # Simple keys are allowed after ':' in the block context.
+ self.allow_simple_key = not self.flow_level
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Add VALUE.
+ start_mark = self.get_mark()
+ self.forward()
+ end_mark = self.get_mark()
+ self.tokens.append(ValueToken(start_mark, end_mark))
+
+ def fetch_alias(self):
+
+ # ALIAS could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ALIAS.
+ self.allow_simple_key = False
+
+ # Scan and add ALIAS.
+ self.tokens.append(self.scan_anchor(AliasToken))
+
+ def fetch_anchor(self):
+
+ # ANCHOR could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after ANCHOR.
+ self.allow_simple_key = False
+
+ # Scan and add ANCHOR.
+ self.tokens.append(self.scan_anchor(AnchorToken))
+
+ def fetch_tag(self):
+
+ # TAG could start a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after TAG.
+ self.allow_simple_key = False
+
+ # Scan and add TAG.
+ self.tokens.append(self.scan_tag())
+
+ def fetch_literal(self):
+ self.fetch_block_scalar(style='|')
+
+ def fetch_folded(self):
+ self.fetch_block_scalar(style='>')
+
+ def fetch_block_scalar(self, style):
+
+ # A simple key may follow a block scalar.
+ self.allow_simple_key = True
+
+ # Reset possible simple key on the current level.
+ self.remove_possible_simple_key()
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_block_scalar(style))
+
+ def fetch_single(self):
+ self.fetch_flow_scalar(style='\'')
+
+ def fetch_double(self):
+ self.fetch_flow_scalar(style='"')
+
+ def fetch_flow_scalar(self, style):
+
+ # A flow scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after flow scalars.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR.
+ self.tokens.append(self.scan_flow_scalar(style))
+
+ def fetch_plain(self):
+
+ # A plain scalar could be a simple key.
+ self.save_possible_simple_key()
+
+ # No simple keys after plain scalars. But note that `scan_plain` will
+ # change this flag if the scan is finished at the beginning of the
+ # line.
+ self.allow_simple_key = False
+
+ # Scan and add SCALAR. May change `allow_simple_key`.
+ self.tokens.append(self.scan_plain())
+
+ # Checkers.
+
+ def check_directive(self):
+
+ # DIRECTIVE: ^ '%' ...
+ # The '%' indicator is already checked.
+ if self.column == 0:
+ return True
+
+ def check_document_start(self):
+
+ # DOCUMENT-START: ^ '---' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == '---' \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_document_end(self):
+
+ # DOCUMENT-END: ^ '...' (' '|'\n')
+ if self.column == 0:
+ if self.prefix(3) == '...' \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return True
+
+ def check_block_entry(self):
+
+ # BLOCK-ENTRY: '-' (' '|'\n')
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_key(self):
+
+ # KEY(flow context): '?'
+ if self.flow_level:
+ return True
+
+ # KEY(block context): '?' (' '|'\n')
+ else:
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_value(self):
+
+ # VALUE(flow context): ':'
+ if self.flow_level:
+ return True
+
+ # VALUE(block context): ':' (' '|'\n')
+ else:
+ return self.peek(1) in '\0 \t\r\n\x85\u2028\u2029'
+
+ def check_plain(self):
+
+ # A plain scalar may start with any non-space character except:
+ # '-', '?', ':', ',', '[', ']', '{', '}',
+ # '#', '&', '*', '!', '|', '>', '\'', '\"',
+ # '%', '@', '`'.
+ #
+ # It may also start with
+ # '-', '?', ':'
+ # if it is followed by a non-space character.
+ #
+ # Note that we limit the last rule to the block context (except the
+ # '-' character) because we want the flow context to be space
+ # independent.
+ ch = self.peek()
+ return ch not in '\0 \t\r\n\x85\u2028\u2029-?:,[]{}#&*!|>\'\"%@`' \
+ or (self.peek(1) not in '\0 \t\r\n\x85\u2028\u2029'
+ and (ch == '-' or (not self.flow_level and ch in '?:')))
+
+ # Scanners.
+
+ def scan_to_next_token(self):
+ # We ignore spaces, line breaks and comments.
+ # If we find a line break in the block context, we set the flag
+ # `allow_simple_key` on.
+ # The byte order mark is stripped if it's the first character in the
+ # stream. We do not yet support BOM inside the stream as the
+ # specification requires. Any such mark will be considered as a part
+ # of the document.
+ #
+ # TODO: We need to make tab handling rules more sane. A good rule is
+ # Tabs cannot precede tokens
+ # BLOCK-SEQUENCE-START, BLOCK-MAPPING-START, BLOCK-END,
+ # KEY(block), VALUE(block), BLOCK-ENTRY
+ # So the checking code is
+ # if <TAB>:
+ # self.allow_simple_keys = False
+ # We also need to add the check for `allow_simple_keys == True` to
+ # `unwind_indent` before issuing BLOCK-END.
+ # Scanners for block, flow, and plain scalars need to be modified.
+
+ if self.index == 0 and self.peek() == '\uFEFF':
+ self.forward()
+ found = False
+ while not found:
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ if self.scan_line_break():
+ if not self.flow_level:
+ self.allow_simple_key = True
+ else:
+ found = True
+
+ def scan_directive(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ self.forward()
+ name = self.scan_directive_name(start_mark)
+ value = None
+ if name == 'YAML':
+ value = self.scan_yaml_directive_value(start_mark)
+ end_mark = self.get_mark()
+ elif name == 'TAG':
+ value = self.scan_tag_directive_value(start_mark)
+ end_mark = self.get_mark()
+ else:
+ end_mark = self.get_mark()
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ self.scan_directive_ignored_line(start_mark)
+ return DirectiveToken(name, value, start_mark, end_mark)
+
+ def scan_directive_name(self, start_mark):
+ # See the specification for details.
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ return value
+
+ def scan_yaml_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ major = self.scan_yaml_directive_number(start_mark)
+ if self.peek() != '.':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or '.', but found %r" % self.peek(),
+ self.get_mark())
+ self.forward()
+ minor = self.scan_yaml_directive_number(start_mark)
+ if self.peek() not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit or ' ', but found %r" % self.peek(),
+ self.get_mark())
+ return (major, minor)
+
+ def scan_yaml_directive_number(self, start_mark):
+ # See the specification for details.
+ ch = self.peek()
+ if not ('0' <= ch <= '9'):
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a digit, but found %r" % ch, self.get_mark())
+ length = 0
+ while '0' <= self.peek(length) <= '9':
+ length += 1
+ value = int(self.prefix(length))
+ self.forward(length)
+ return value
+
+ def scan_tag_directive_value(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ handle = self.scan_tag_directive_handle(start_mark)
+ while self.peek() == ' ':
+ self.forward()
+ prefix = self.scan_tag_directive_prefix(start_mark)
+ return (handle, prefix)
+
+ def scan_tag_directive_handle(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_handle('directive', start_mark)
+ ch = self.peek()
+ if ch != ' ':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ return value
+
+ def scan_tag_directive_prefix(self, start_mark):
+ # See the specification for details.
+ value = self.scan_tag_uri('directive', start_mark)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ return value
+
+ def scan_directive_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a directive", start_mark,
+ "expected a comment or a line break, but found %r"
+ % ch, self.get_mark())
+ self.scan_line_break()
+
+ def scan_anchor(self, TokenClass):
+ # The specification does not restrict characters for anchors and
+ # aliases. This may lead to problems, for instance, the document:
+ # [ *alias, value ]
+ # can be interpteted in two ways, as
+ # [ "value" ]
+ # and
+ # [ *alias , "value" ]
+ # Therefore we restrict aliases to numbers and ASCII letters.
+ start_mark = self.get_mark()
+ indicator = self.peek()
+ if indicator == '*':
+ name = 'alias'
+ else:
+ name = 'anchor'
+ self.forward()
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if not length:
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ value = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch not in '\0 \t\r\n\x85\u2028\u2029?:,]}%@`':
+ raise ScannerError("while scanning an %s" % name, start_mark,
+ "expected alphabetic or numeric character, but found %r"
+ % ch, self.get_mark())
+ end_mark = self.get_mark()
+ return TokenClass(value, start_mark, end_mark)
+
+ def scan_tag(self):
+ # See the specification for details.
+ start_mark = self.get_mark()
+ ch = self.peek(1)
+ if ch == '<':
+ handle = None
+ self.forward(2)
+ suffix = self.scan_tag_uri('tag', start_mark)
+ if self.peek() != '>':
+ raise ScannerError("while parsing a tag", start_mark,
+ "expected '>', but found %r" % self.peek(),
+ self.get_mark())
+ self.forward()
+ elif ch in '\0 \t\r\n\x85\u2028\u2029':
+ handle = None
+ suffix = '!'
+ self.forward()
+ else:
+ length = 1
+ use_handle = False
+ while ch not in '\0 \r\n\x85\u2028\u2029':
+ if ch == '!':
+ use_handle = True
+ break
+ length += 1
+ ch = self.peek(length)
+ handle = '!'
+ if use_handle:
+ handle = self.scan_tag_handle('tag', start_mark)
+ else:
+ handle = '!'
+ self.forward()
+ suffix = self.scan_tag_uri('tag', start_mark)
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a tag", start_mark,
+ "expected ' ', but found %r" % ch, self.get_mark())
+ value = (handle, suffix)
+ end_mark = self.get_mark()
+ return TagToken(value, start_mark, end_mark)
+
+ def scan_block_scalar(self, style):
+ # See the specification for details.
+
+ if style == '>':
+ folded = True
+ else:
+ folded = False
+
+ chunks = []
+ start_mark = self.get_mark()
+
+ # Scan the header.
+ self.forward()
+ chomping, increment = self.scan_block_scalar_indicators(start_mark)
+ self.scan_block_scalar_ignored_line(start_mark)
+
+ # Determine the indentation level and go to the first non-empty line.
+ min_indent = self.indent+1
+ if min_indent < 1:
+ min_indent = 1
+ if increment is None:
+ breaks, max_indent, end_mark = self.scan_block_scalar_indentation()
+ indent = max(min_indent, max_indent)
+ else:
+ indent = min_indent+increment-1
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ line_break = ''
+
+ # Scan the inner part of the block scalar.
+ while self.column == indent and self.peek() != '\0':
+ chunks.extend(breaks)
+ leading_non_space = self.peek() not in ' \t'
+ length = 0
+ while self.peek(length) not in '\0\r\n\x85\u2028\u2029':
+ length += 1
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ line_break = self.scan_line_break()
+ breaks, end_mark = self.scan_block_scalar_breaks(indent)
+ if self.column == indent and self.peek() != '\0':
+
+ # Unfortunately, folding rules are ambiguous.
+ #
+ # This is the folding according to the specification:
+
+ if folded and line_break == '\n' \
+ and leading_non_space and self.peek() not in ' \t':
+ if not breaks:
+ chunks.append(' ')
+ else:
+ chunks.append(line_break)
+
+ # This is Clark Evans's interpretation (also in the spec
+ # examples):
+ #
+ #if folded and line_break == '\n':
+ # if not breaks:
+ # if self.peek() not in ' \t':
+ # chunks.append(' ')
+ # else:
+ # chunks.append(line_break)
+ #else:
+ # chunks.append(line_break)
+ else:
+ break
+
+ # Chomp the tail.
+ if chomping is not False:
+ chunks.append(line_break)
+ if chomping is True:
+ chunks.extend(breaks)
+
+ # We are done.
+ return ScalarToken(''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ def scan_block_scalar_indicators(self, start_mark):
+ # See the specification for details.
+ chomping = None
+ increment = None
+ ch = self.peek()
+ if ch in '+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch in '0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ elif ch in '0123456789':
+ increment = int(ch)
+ if increment == 0:
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected indentation indicator in the range 1-9, but found 0",
+ self.get_mark())
+ self.forward()
+ ch = self.peek()
+ if ch in '+-':
+ if ch == '+':
+ chomping = True
+ else:
+ chomping = False
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0 \r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected chomping or indentation indicators, but found %r"
+ % ch, self.get_mark())
+ return chomping, increment
+
+ def scan_block_scalar_ignored_line(self, start_mark):
+ # See the specification for details.
+ while self.peek() == ' ':
+ self.forward()
+ if self.peek() == '#':
+ while self.peek() not in '\0\r\n\x85\u2028\u2029':
+ self.forward()
+ ch = self.peek()
+ if ch not in '\0\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a block scalar", start_mark,
+ "expected a comment or a line break, but found %r" % ch,
+ self.get_mark())
+ self.scan_line_break()
+
+ def scan_block_scalar_indentation(self):
+ # See the specification for details.
+ chunks = []
+ max_indent = 0
+ end_mark = self.get_mark()
+ while self.peek() in ' \r\n\x85\u2028\u2029':
+ if self.peek() != ' ':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ else:
+ self.forward()
+ if self.column > max_indent:
+ max_indent = self.column
+ return chunks, max_indent, end_mark
+
+ def scan_block_scalar_breaks(self, indent):
+ # See the specification for details.
+ chunks = []
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == ' ':
+ self.forward()
+ while self.peek() in '\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ end_mark = self.get_mark()
+ while self.column < indent and self.peek() == ' ':
+ self.forward()
+ return chunks, end_mark
+
+ def scan_flow_scalar(self, style):
+ # See the specification for details.
+ # Note that we loose indentation rules for quoted scalars. Quoted
+ # scalars don't need to adhere indentation because " and ' clearly
+ # mark the beginning and the end of them. Therefore we are less
+ # restrictive then the specification requires. We only need to check
+ # that document separators are not included in scalars.
+ if style == '"':
+ double = True
+ else:
+ double = False
+ chunks = []
+ start_mark = self.get_mark()
+ quote = self.peek()
+ self.forward()
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ while self.peek() != quote:
+ chunks.extend(self.scan_flow_scalar_spaces(double, start_mark))
+ chunks.extend(self.scan_flow_scalar_non_spaces(double, start_mark))
+ self.forward()
+ end_mark = self.get_mark()
+ return ScalarToken(''.join(chunks), False, start_mark, end_mark,
+ style)
+
+ ESCAPE_REPLACEMENTS = {
+ '0': '\0',
+ 'a': '\x07',
+ 'b': '\x08',
+ 't': '\x09',
+ '\t': '\x09',
+ 'n': '\x0A',
+ 'v': '\x0B',
+ 'f': '\x0C',
+ 'r': '\x0D',
+ 'e': '\x1B',
+ ' ': '\x20',
+ '\"': '\"',
+ '\\': '\\',
+ 'N': '\x85',
+ '_': '\xA0',
+ 'L': '\u2028',
+ 'P': '\u2029',
+ }
+
+ ESCAPE_CODES = {
+ 'x': 2,
+ 'u': 4,
+ 'U': 8,
+ }
+
+ def scan_flow_scalar_non_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ length = 0
+ while self.peek(length) not in '\'\"\\\0 \t\r\n\x85\u2028\u2029':
+ length += 1
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ ch = self.peek()
+ if not double and ch == '\'' and self.peek(1) == '\'':
+ chunks.append('\'')
+ self.forward(2)
+ elif (double and ch == '\'') or (not double and ch in '\"\\'):
+ chunks.append(ch)
+ self.forward()
+ elif double and ch == '\\':
+ self.forward()
+ ch = self.peek()
+ if ch in self.ESCAPE_REPLACEMENTS:
+ chunks.append(self.ESCAPE_REPLACEMENTS[ch])
+ self.forward()
+ elif ch in self.ESCAPE_CODES:
+ length = self.ESCAPE_CODES[ch]
+ self.forward()
+ for k in range(length):
+ if self.peek(k) not in '0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "expected escape sequence of %d hexdecimal numbers, but found %r" %
+ (length, self.peek(k)), self.get_mark())
+ code = int(self.prefix(length), 16)
+ chunks.append(chr(code))
+ self.forward(length)
+ elif ch in '\r\n\x85\u2028\u2029':
+ self.scan_line_break()
+ chunks.extend(self.scan_flow_scalar_breaks(double, start_mark))
+ else:
+ raise ScannerError("while scanning a double-quoted scalar", start_mark,
+ "found unknown escape character %r" % ch, self.get_mark())
+ else:
+ return chunks
+
+ def scan_flow_scalar_spaces(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ length = 0
+ while self.peek(length) in ' \t':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch == '\0':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected end of stream", self.get_mark())
+ elif ch in '\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ breaks = self.scan_flow_scalar_breaks(double, start_mark)
+ if line_break != '\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(' ')
+ chunks.extend(breaks)
+ else:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_flow_scalar_breaks(self, double, start_mark):
+ # See the specification for details.
+ chunks = []
+ while True:
+ # Instead of checking indentation, we check for document
+ # separators.
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ raise ScannerError("while scanning a quoted scalar", start_mark,
+ "found unexpected document separator", self.get_mark())
+ while self.peek() in ' \t':
+ self.forward()
+ if self.peek() in '\r\n\x85\u2028\u2029':
+ chunks.append(self.scan_line_break())
+ else:
+ return chunks
+
+ def scan_plain(self):
+ # See the specification for details.
+ # We add an additional restriction for the flow context:
+ # plain scalars in the flow context cannot contain ',', ':' and '?'.
+ # We also keep track of the `allow_simple_key` flag here.
+ # Indentation rules are loosed for the flow context.
+ chunks = []
+ start_mark = self.get_mark()
+ end_mark = start_mark
+ indent = self.indent+1
+ # We allow zero indentation for scalars, but then we need to check for
+ # document separators at the beginning of the line.
+ #if indent == 0:
+ # indent = 1
+ spaces = []
+ while True:
+ length = 0
+ if self.peek() == '#':
+ break
+ while True:
+ ch = self.peek(length)
+ if ch in '\0 \t\r\n\x85\u2028\u2029' \
+ or (not self.flow_level and ch == ':' and
+ self.peek(length+1) in '\0 \t\r\n\x85\u2028\u2029') \
+ or (self.flow_level and ch in ',:?[]{}'):
+ break
+ length += 1
+ # It's not clear what we should do with ':' in the flow context.
+ if (self.flow_level and ch == ':'
+ and self.peek(length+1) not in '\0 \t\r\n\x85\u2028\u2029,[]{}'):
+ self.forward(length)
+ raise ScannerError("while scanning a plain scalar", start_mark,
+ "found unexpected ':'", self.get_mark(),
+ "Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.")
+ if length == 0:
+ break
+ self.allow_simple_key = False
+ chunks.extend(spaces)
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ end_mark = self.get_mark()
+ spaces = self.scan_plain_spaces(indent, start_mark)
+ if not spaces or self.peek() == '#' \
+ or (not self.flow_level and self.column < indent):
+ break
+ return ScalarToken(''.join(chunks), True, start_mark, end_mark)
+
+ def scan_plain_spaces(self, indent, start_mark):
+ # See the specification for details.
+ # The specification is really confusing about tabs in plain scalars.
+ # We just forbid them completely. Do not use tabs in YAML!
+ chunks = []
+ length = 0
+ while self.peek(length) in ' ':
+ length += 1
+ whitespaces = self.prefix(length)
+ self.forward(length)
+ ch = self.peek()
+ if ch in '\r\n\x85\u2028\u2029':
+ line_break = self.scan_line_break()
+ self.allow_simple_key = True
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return
+ breaks = []
+ while self.peek() in ' \r\n\x85\u2028\u2029':
+ if self.peek() == ' ':
+ self.forward()
+ else:
+ breaks.append(self.scan_line_break())
+ prefix = self.prefix(3)
+ if (prefix == '---' or prefix == '...') \
+ and self.peek(3) in '\0 \t\r\n\x85\u2028\u2029':
+ return
+ if line_break != '\n':
+ chunks.append(line_break)
+ elif not breaks:
+ chunks.append(' ')
+ chunks.extend(breaks)
+ elif whitespaces:
+ chunks.append(whitespaces)
+ return chunks
+
+ def scan_tag_handle(self, name, start_mark):
+ # See the specification for details.
+ # For some strange reasons, the specification does not allow '_' in
+ # tag handles. I have allowed it anyway.
+ ch = self.peek()
+ if ch != '!':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch, self.get_mark())
+ length = 1
+ ch = self.peek(length)
+ if ch != ' ':
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-_':
+ length += 1
+ ch = self.peek(length)
+ if ch != '!':
+ self.forward(length)
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected '!', but found %r" % ch, self.get_mark())
+ length += 1
+ value = self.prefix(length)
+ self.forward(length)
+ return value
+
+ def scan_tag_uri(self, name, start_mark):
+ # See the specification for details.
+ # Note: we do not check if URI is well-formed.
+ chunks = []
+ length = 0
+ ch = self.peek(length)
+ while '0' <= ch <= '9' or 'A' <= ch <= 'Z' or 'a' <= ch <= 'z' \
+ or ch in '-;/?:@&=+$,_.!~*\'()[]%':
+ if ch == '%':
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ chunks.append(self.scan_uri_escapes(name, start_mark))
+ else:
+ length += 1
+ ch = self.peek(length)
+ if length:
+ chunks.append(self.prefix(length))
+ self.forward(length)
+ length = 0
+ if not chunks:
+ raise ScannerError("while parsing a %s" % name, start_mark,
+ "expected URI, but found %r" % ch, self.get_mark())
+ return ''.join(chunks)
+
+ def scan_uri_escapes(self, name, start_mark):
+ # See the specification for details.
+ codes = []
+ mark = self.get_mark()
+ while self.peek() == '%':
+ self.forward()
+ for k in range(2):
+ if self.peek(k) not in '0123456789ABCDEFabcdef':
+ raise ScannerError("while scanning a %s" % name, start_mark,
+ "expected URI escape sequence of 2 hexdecimal numbers, but found %r"
+ % self.peek(k), self.get_mark())
+ codes.append(int(self.prefix(2), 16))
+ self.forward(2)
+ try:
+ value = bytes(codes).decode('utf-8')
+ except UnicodeDecodeError as exc:
+ raise ScannerError("while scanning a %s" % name, start_mark, str(exc), mark)
+ return value
+
+ def scan_line_break(self):
+ # Transforms:
+ # '\r\n' : '\n'
+ # '\r' : '\n'
+ # '\n' : '\n'
+ # '\x85' : '\n'
+ # '\u2028' : '\u2028'
+ # '\u2029 : '\u2029'
+ # default : ''
+ ch = self.peek()
+ if ch in '\r\n\x85':
+ if self.prefix(2) == '\r\n':
+ self.forward(2)
+ else:
+ self.forward()
+ return '\n'
+ elif ch in '\u2028\u2029':
+ self.forward()
+ return ch
+ return ''
+
+#try:
+# import psyco
+# psyco.bind(Scanner)
+#except ImportError:
+# pass
+
diff --git a/lib/spack/external/yaml/lib3/yaml/serializer.py b/lib/spack/external/yaml/lib3/yaml/serializer.py
new file mode 100644
index 0000000000..fe911e67ae
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/serializer.py
@@ -0,0 +1,111 @@
+
+__all__ = ['Serializer', 'SerializerError']
+
+from .error import YAMLError
+from .events import *
+from .nodes import *
+
+class SerializerError(YAMLError):
+ pass
+
+class Serializer:
+
+ ANCHOR_TEMPLATE = 'id%03d'
+
+ def __init__(self, encoding=None,
+ explicit_start=None, explicit_end=None, version=None, tags=None):
+ self.use_encoding = encoding
+ self.use_explicit_start = explicit_start
+ self.use_explicit_end = explicit_end
+ self.use_version = version
+ self.use_tags = tags
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+ self.closed = None
+
+ def open(self):
+ if self.closed is None:
+ self.emit(StreamStartEvent(encoding=self.use_encoding))
+ self.closed = False
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ else:
+ raise SerializerError("serializer is already opened")
+
+ def close(self):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif not self.closed:
+ self.emit(StreamEndEvent())
+ self.closed = True
+
+ #def __del__(self):
+ # self.close()
+
+ def serialize(self, node):
+ if self.closed is None:
+ raise SerializerError("serializer is not opened")
+ elif self.closed:
+ raise SerializerError("serializer is closed")
+ self.emit(DocumentStartEvent(explicit=self.use_explicit_start,
+ version=self.use_version, tags=self.use_tags))
+ self.anchor_node(node)
+ self.serialize_node(node, None, None)
+ self.emit(DocumentEndEvent(explicit=self.use_explicit_end))
+ self.serialized_nodes = {}
+ self.anchors = {}
+ self.last_anchor_id = 0
+
+ def anchor_node(self, node):
+ if node in self.anchors:
+ if self.anchors[node] is None:
+ self.anchors[node] = self.generate_anchor(node)
+ else:
+ self.anchors[node] = None
+ if isinstance(node, SequenceNode):
+ for item in node.value:
+ self.anchor_node(item)
+ elif isinstance(node, MappingNode):
+ for key, value in node.value:
+ self.anchor_node(key)
+ self.anchor_node(value)
+
+ def generate_anchor(self, node):
+ self.last_anchor_id += 1
+ return self.ANCHOR_TEMPLATE % self.last_anchor_id
+
+ def serialize_node(self, node, parent, index):
+ alias = self.anchors[node]
+ if node in self.serialized_nodes:
+ self.emit(AliasEvent(alias))
+ else:
+ self.serialized_nodes[node] = True
+ self.descend_resolver(parent, index)
+ if isinstance(node, ScalarNode):
+ detected_tag = self.resolve(ScalarNode, node.value, (True, False))
+ default_tag = self.resolve(ScalarNode, node.value, (False, True))
+ implicit = (node.tag == detected_tag), (node.tag == default_tag)
+ self.emit(ScalarEvent(alias, node.tag, implicit, node.value,
+ style=node.style))
+ elif isinstance(node, SequenceNode):
+ implicit = (node.tag
+ == self.resolve(SequenceNode, node.value, True))
+ self.emit(SequenceStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ index = 0
+ for item in node.value:
+ self.serialize_node(item, node, index)
+ index += 1
+ self.emit(SequenceEndEvent())
+ elif isinstance(node, MappingNode):
+ implicit = (node.tag
+ == self.resolve(MappingNode, node.value, True))
+ self.emit(MappingStartEvent(alias, node.tag, implicit,
+ flow_style=node.flow_style))
+ for key, value in node.value:
+ self.serialize_node(key, node, None)
+ self.serialize_node(value, node, key)
+ self.emit(MappingEndEvent())
+ self.ascend_resolver()
+
diff --git a/lib/spack/external/yaml/lib3/yaml/tokens.py b/lib/spack/external/yaml/lib3/yaml/tokens.py
new file mode 100644
index 0000000000..4d0b48a394
--- /dev/null
+++ b/lib/spack/external/yaml/lib3/yaml/tokens.py
@@ -0,0 +1,104 @@
+
+class Token(object):
+ def __init__(self, start_mark, end_mark):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ def __repr__(self):
+ attributes = [key for key in self.__dict__
+ if not key.endswith('_mark')]
+ attributes.sort()
+ arguments = ', '.join(['%s=%r' % (key, getattr(self, key))
+ for key in attributes])
+ return '%s(%s)' % (self.__class__.__name__, arguments)
+
+#class BOMToken(Token):
+# id = '<byte order mark>'
+
+class DirectiveToken(Token):
+ id = '<directive>'
+ def __init__(self, name, value, start_mark, end_mark):
+ self.name = name
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class DocumentStartToken(Token):
+ id = '<document start>'
+
+class DocumentEndToken(Token):
+ id = '<document end>'
+
+class StreamStartToken(Token):
+ id = '<stream start>'
+ def __init__(self, start_mark=None, end_mark=None,
+ encoding=None):
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.encoding = encoding
+
+class StreamEndToken(Token):
+ id = '<stream end>'
+
+class BlockSequenceStartToken(Token):
+ id = '<block sequence start>'
+
+class BlockMappingStartToken(Token):
+ id = '<block mapping start>'
+
+class BlockEndToken(Token):
+ id = '<block end>'
+
+class FlowSequenceStartToken(Token):
+ id = '['
+
+class FlowMappingStartToken(Token):
+ id = '{'
+
+class FlowSequenceEndToken(Token):
+ id = ']'
+
+class FlowMappingEndToken(Token):
+ id = '}'
+
+class KeyToken(Token):
+ id = '?'
+
+class ValueToken(Token):
+ id = ':'
+
+class BlockEntryToken(Token):
+ id = '-'
+
+class FlowEntryToken(Token):
+ id = ','
+
+class AliasToken(Token):
+ id = '<alias>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class AnchorToken(Token):
+ id = '<anchor>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class TagToken(Token):
+ id = '<tag>'
+ def __init__(self, value, start_mark, end_mark):
+ self.value = value
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+
+class ScalarToken(Token):
+ id = '<scalar>'
+ def __init__(self, value, plain, start_mark, end_mark, style=None):
+ self.value = value
+ self.plain = plain
+ self.start_mark = start_mark
+ self.end_mark = end_mark
+ self.style = style
+
diff --git a/lib/spack/llnl/__init__.py b/lib/spack/llnl/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/llnl/__init__.py
+++ b/lib/spack/llnl/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/llnl/util/__init__.py b/lib/spack/llnl/util/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/llnl/util/__init__.py
+++ b/lib/spack/llnl/util/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/llnl/util/filesystem.py b/lib/spack/llnl/util/filesystem.py
index 31e09f2fe6..36be87580c 100644
--- a/lib/spack/llnl/util/filesystem.py
+++ b/lib/spack/llnl/util/filesystem.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,7 +24,9 @@
##############################################################################
import collections
import errno
+import hashlib
import fileinput
+import fnmatch
import glob
import numbers
import os
@@ -33,23 +35,31 @@ import shutil
import stat
import subprocess
import sys
+import tempfile
from contextlib import contextmanager
-import llnl.util.tty as tty
+import six
+from llnl.util import tty
from llnl.util.lang import dedupe
__all__ = [
'FileFilter',
+ 'FileList',
+ 'HeaderList',
'LibraryList',
'ancestor',
'can_access',
'change_sed_delimiter',
'copy_mode',
'filter_file',
+ 'find',
+ 'find_headers',
'find_libraries',
+ 'find_system_libraries',
'fix_darwin_install_name',
'force_remove',
'force_symlink',
+ 'hide_files',
'install',
'install_tree',
'is_exe',
@@ -64,25 +74,32 @@ __all__ = [
'touchp',
'traverse_tree',
'unset_executable_mode',
- 'working_dir']
+ 'working_dir'
+]
def filter_file(regex, repl, *filenames, **kwargs):
- """Like sed, but uses python regular expressions.
-
- Filters every line of each file through regex and replaces the file
- with a filtered version. Preserves mode of filtered files.
-
- As with re.sub, ``repl`` can be either a string or a callable.
- If it is a callable, it is passed the match object and should
- return a suitable replacement string. If it is a string, it
- can contain ``\1``, ``\2``, etc. to represent back-substitution
- as sed would allow.
-
- Keyword Options:
- string[=False] If True, treat regex as a plain string.
- backup[=True] Make backup file(s) suffixed with ~
- ignore_absent[=False] Ignore any files that don't exist.
+ r"""Like sed, but uses python regular expressions.
+
+ Filters every line of each file through regex and replaces the file
+ with a filtered version. Preserves mode of filtered files.
+
+ As with re.sub, ``repl`` can be either a string or a callable.
+ If it is a callable, it is passed the match object and should
+ return a suitable replacement string. If it is a string, it
+ can contain ``\1``, ``\2``, etc. to represent back-substitution
+ as sed would allow.
+
+ Parameters:
+ regex (str): The regular expression to search for
+ repl (str): The string to replace matches with
+ *filenames: One or more files to search and replace
+
+ Keyword Arguments:
+ string (bool): Treat regex as a plain string. Default it False
+ backup (bool): Make backup file(s) suffixed with ``~``. Default is True
+ ignore_absent (bool): Ignore any files that don't exist.
+ Default is False
"""
string = kwargs.get('string', False)
backup = kwargs.get('backup', True)
@@ -115,18 +132,18 @@ def filter_file(regex, repl, *filenames, **kwargs):
try:
for line in fileinput.input(filename, inplace=True):
print(re.sub(regex, repl, line.rstrip('\n')))
- except:
+ except BaseException:
# clean up the original file on failure.
shutil.move(backup_filename, filename)
raise
finally:
- if not backup:
+ if not backup and os.path.exists(backup_filename):
os.remove(backup_filename)
class FileFilter(object):
- """Convenience class for calling filter_file a lot."""
+ """Convenience class for calling ``filter_file`` a lot."""
def __init__(self, *filenames):
self.filenames = filenames
@@ -137,12 +154,18 @@ class FileFilter(object):
def change_sed_delimiter(old_delim, new_delim, *filenames):
"""Find all sed search/replace commands and change the delimiter.
- e.g., if the file contains seds that look like 's///', you can
- call change_sed_delimiter('/', '@', file) to change the
- delimiter to '@'.
- NOTE that this routine will fail if the delimiter is ' or ".
- Handling those is left for future work.
+ e.g., if the file contains seds that look like ``'s///'``, you can
+ call ``change_sed_delimiter('/', '@', file)`` to change the
+ delimiter to ``'@'``.
+
+ Note that this routine will fail if the delimiter is ``'`` or ``"``.
+ Handling those is left for future work.
+
+ Parameters:
+ old_delim (str): The delimiter to search for
+ new_delim (str): The delimiter to replace with
+ *filenames: One or more files to search and replace
"""
assert(len(old_delim) == 1)
assert(len(new_delim) == 1)
@@ -173,13 +196,22 @@ def change_sed_delimiter(old_delim, new_delim, *filenames):
def set_install_permissions(path):
"""Set appropriate permissions on the installed file."""
+# If this points to a file maintained in a Spack prefix, it is assumed that
+# this function will be invoked on the target. If the file is outside a
+# Spack-maintained prefix, the permissions should not be modified.
+ if os.path.islink(path):
+ return
if os.path.isdir(path):
- os.chmod(path, 0755)
+ os.chmod(path, 0o755)
else:
- os.chmod(path, 0644)
+ os.chmod(path, 0o644)
def copy_mode(src, dest):
+ """Set the mode of dest to that of src unless it is a link.
+ """
+ if os.path.islink(dest):
+ return
src_mode = os.stat(src).st_mode
dest_mode = os.stat(dest).st_mode
if src_mode & stat.S_IXUSR:
@@ -231,13 +263,17 @@ def mkdirp(*paths):
"""Creates a directory, as well as parent directories if needed."""
for path in paths:
if not os.path.exists(path):
- os.makedirs(path)
+ try:
+ os.makedirs(path)
+ except OSError as e:
+ if e.errno != errno.EEXIST or not os.path.isdir(path):
+ raise e
elif not os.path.isdir(path):
raise OSError(errno.EEXIST, "File already exists", path)
def force_remove(*paths):
- """Remove files without printing errors. Like rm -f, does NOT
+ """Remove files without printing errors. Like ``rm -f``, does NOT
remove directories."""
for path in paths:
try:
@@ -257,14 +293,113 @@ def working_dir(dirname, **kwargs):
os.chdir(orig_dir)
+@contextmanager
+def replace_directory_transaction(directory_name, tmp_root=None):
+ """Moves a directory to a temporary space. If the operations executed
+ within the context manager don't raise an exception, the directory is
+ deleted. If there is an exception, the move is undone.
+
+ Args:
+ directory_name (path): absolute path of the directory name
+ tmp_root (path): absolute path of the parent directory where to create
+ the temporary
+
+ Returns:
+ temporary directory where ``directory_name`` has been moved
+ """
+ # Check the input is indeed a directory with absolute path.
+ # Raise before anything is done to avoid moving the wrong directory
+ assert os.path.isdir(directory_name), \
+ '"directory_name" must be a valid directory'
+ assert os.path.isabs(directory_name), \
+ '"directory_name" must contain an absolute path'
+
+ directory_basename = os.path.basename(directory_name)
+
+ if tmp_root is not None:
+ assert os.path.isabs(tmp_root)
+
+ tmp_dir = tempfile.mkdtemp(dir=tmp_root)
+ tty.debug('TEMPORARY DIRECTORY CREATED [{0}]'.format(tmp_dir))
+
+ shutil.move(src=directory_name, dst=tmp_dir)
+ tty.debug('DIRECTORY MOVED [src={0}, dest={1}]'.format(
+ directory_name, tmp_dir
+ ))
+
+ try:
+ yield tmp_dir
+ except (Exception, KeyboardInterrupt, SystemExit):
+ # Delete what was there, before copying back the original content
+ if os.path.exists(directory_name):
+ shutil.rmtree(directory_name)
+ shutil.move(
+ src=os.path.join(tmp_dir, directory_basename),
+ dst=os.path.dirname(directory_name)
+ )
+ tty.debug('DIRECTORY RECOVERED [{0}]'.format(directory_name))
+
+ msg = 'the transactional move of "{0}" failed.'
+ raise RuntimeError(msg.format(directory_name))
+ else:
+ # Otherwise delete the temporary directory
+ shutil.rmtree(tmp_dir)
+ tty.debug('TEMPORARY DIRECTORY DELETED [{0}]'.format(tmp_dir))
+
+
+@contextmanager
+def hide_files(*file_list):
+ try:
+ baks = ['%s.bak' % f for f in file_list]
+ for f, bak in zip(file_list, baks):
+ shutil.move(f, bak)
+ yield
+ finally:
+ for f, bak in zip(file_list, baks):
+ shutil.move(bak, f)
+
+
+def hash_directory(directory):
+ """Hashes recursively the content of a directory.
+
+ Args:
+ directory (path): path to a directory to be hashed
+
+ Returns:
+ hash of the directory content
+ """
+ assert os.path.isdir(directory), '"directory" must be a directory!'
+
+ md5_hash = hashlib.md5()
+
+ # Adapted from https://stackoverflow.com/a/3431835/771663
+ for root, dirs, files in os.walk(directory):
+ for name in sorted(files):
+ filename = os.path.join(root, name)
+ # TODO: if caching big files becomes an issue, convert this to
+ # TODO: read in chunks. Currently it's used only for testing
+ # TODO: purposes.
+ with open(filename, 'rb') as f:
+ md5_hash.update(f.read())
+
+ return md5_hash.hexdigest()
+
+
def touch(path):
"""Creates an empty file at the specified path."""
- with open(path, 'a'):
+ perms = (os.O_WRONLY | os.O_CREAT | os.O_NONBLOCK | os.O_NOCTTY)
+ fd = None
+ try:
+ fd = os.open(path, perms)
os.utime(path, None)
+ finally:
+ if fd is not None:
+ os.close(fd)
def touchp(path):
- """Like touch, but creates any parent directories needed for the file."""
+ """Like ``touch``, but creates any parent directories needed for the file.
+ """
mkdirp(os.path.dirname(path))
touch(path)
@@ -321,17 +456,13 @@ def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
('root/b', 'dest/b')
('root/b/file3', 'dest/b/file3')
- Optional args:
-
- order=[pre|post] -- Whether to do pre- or post-order traversal.
-
- ignore=<predicate> -- Predicate indicating which files to ignore.
-
- follow_nonexisting -- Whether to descend into directories in
- src that do not exit in dest. Default True.
-
- follow_links -- Whether to descend into symlinks in src.
-
+ Keyword Arguments:
+ order (str): Whether to do pre- or post-order traversal. Accepted
+ values are 'pre' and 'post'
+ ignore (str): Predicate indicating which files to ignore
+ follow_nonexisting (bool): Whether to descend into directories in
+ ``src`` that do not exit in ``dest``. Default is True
+ follow_links (bool): Whether to descend into symlinks in ``src``
"""
follow_nonexisting = kwargs.get('follow_nonexisting', True)
follow_links = kwargs.get('follow_link', False)
@@ -381,17 +512,21 @@ def traverse_tree(source_root, dest_root, rel_path='', **kwargs):
def set_executable(path):
- st = os.stat(path)
- os.chmod(path, st.st_mode | stat.S_IEXEC)
+ mode = os.stat(path).st_mode
+ if mode & stat.S_IRUSR:
+ mode |= stat.S_IXUSR
+ if mode & stat.S_IRGRP:
+ mode |= stat.S_IXGRP
+ if mode & stat.S_IROTH:
+ mode |= stat.S_IXOTH
+ os.chmod(path, mode)
def remove_dead_links(root):
- """
- Removes any dead link that is present in root
-
- Args:
- root: path where to search for dead links
+ """Removes any dead link that is present in root.
+ Parameters:
+ root (str): path where to search for dead links
"""
for file in os.listdir(root):
path = join_path(root, file)
@@ -399,11 +534,10 @@ def remove_dead_links(root):
def remove_if_dead_link(path):
- """
- Removes the argument if it is a dead link, does nothing otherwise
+ """Removes the argument if it is a dead link.
- Args:
- path: the potential dead link
+ Parameters:
+ path (str): The potential dead link
"""
if os.path.islink(path):
real_path = os.path.realpath(path)
@@ -412,14 +546,13 @@ def remove_if_dead_link(path):
def remove_linked_tree(path):
- """
- Removes a directory and its contents. If the directory is a
- symlink, follows the link and removes the real directory before
- removing the link.
+ """Removes a directory and its contents.
- Args:
- path: directory to be removed
+ If the directory is a symlink, follows the link and removes the real
+ directory before removing the link.
+ Parameters:
+ path (str): Directory to be removed
"""
if os.path.exists(path):
if os.path.islink(path):
@@ -430,17 +563,17 @@ def remove_linked_tree(path):
def fix_darwin_install_name(path):
- """
- Fix install name of dynamic libraries on Darwin to have full path.
+ """Fix install name of dynamic libraries on Darwin to have full path.
+
There are two parts of this task:
- (i) use install_name('-id',...) to change install name of a single lib;
- (ii) use install_name('-change',...) to change the cross linking between
- libs. The function assumes that all libraries are in one folder and
- currently won't follow subfolders.
- Args:
- path: directory in which .dylib files are located
+ 1. Use ``install_name('-id', ...)`` to change install name of a single lib
+ 2. Use ``install_name('-change', ...)`` to change the cross linking between
+ libs. The function assumes that all libraries are in one folder and
+ currently won't follow subfolders.
+ Parameters:
+ path (str): directory in which .dylib files are located
"""
libs = glob.glob(join_path(path, "*.dylib"))
for lib in libs:
@@ -455,35 +588,139 @@ def fix_darwin_install_name(path):
# fix all dependencies:
for dep in deps:
for loc in libs:
- if dep == os.path.basename(loc):
+ # We really want to check for either
+ # dep == os.path.basename(loc) or
+ # dep == join_path(builddir, os.path.basename(loc)),
+ # but we don't know builddir (nor how symbolic links look
+ # in builddir). We thus only compare the basenames.
+ if os.path.basename(dep) == os.path.basename(loc):
subprocess.Popen(
["install_name_tool", "-change", dep, loc, lib],
stdout=subprocess.PIPE).communicate()[0]
break
-# Utilities for libraries
+def find(root, files, recurse=True):
+ """Search for ``files`` starting from the ``root`` directory.
-class LibraryList(collections.Sequence):
- """Sequence of absolute paths to libraries
+ Like GNU/BSD find but written entirely in Python.
- Provides a few convenience methods to manipulate library paths and get
- commonly used compiler flags or names
+ Examples:
+
+ .. code-block:: console
+
+ $ find /usr -name python
+
+ is equivalent to:
+
+ >>> find('/usr', 'python')
+
+ .. code-block:: console
+
+ $ find /usr/local/bin -maxdepth 1 -name python
+
+ is equivalent to:
+
+ >>> find('/usr/local/bin', 'python', recurse=False)
+
+ Accepts any glob characters accepted by fnmatch:
+
+ ======= ====================================
+ Pattern Meaning
+ ======= ====================================
+ * matches everything
+ ? matches any single character
+ [seq] matches any character in ``seq``
+ [!seq] matches any character not in ``seq``
+ ======= ====================================
+
+ Parameters:
+ root (str): The root directory to start searching from
+ files (str or collections.Sequence): Library name(s) to search for
+ recurse (bool, optional): if False search only root folder,
+ if True descends top-down from the root. Defaults to True.
+
+ Returns:
+ list of strings: The files that have been found
+ """
+ if isinstance(files, six.string_types):
+ files = [files]
+
+ if recurse:
+ return _find_recursive(root, files)
+ else:
+ return _find_non_recursive(root, files)
+
+
+def _find_recursive(root, search_files):
+
+ # The variable here is **on purpose** a defaultdict. The idea is that
+ # we want to poke the filesystem as little as possible, but still maintain
+ # stability in the order of the answer. Thus we are recording each library
+ # found in a key, and reconstructing the stable order later.
+ found_files = collections.defaultdict(list)
+
+ for path, _, list_files in os.walk(root):
+ for search_file in search_files:
+ for list_file in list_files:
+ if fnmatch.fnmatch(list_file, search_file):
+ found_files[search_file].append(join_path(path, list_file))
+
+ answer = []
+ for search_file in search_files:
+ answer.extend(found_files[search_file])
+
+ return answer
+
+
+def _find_non_recursive(root, search_files):
+ # The variable here is **on purpose** a defaultdict as os.list_dir
+ # can return files in any order (does not preserve stability)
+ found_files = collections.defaultdict(list)
+
+ for list_file in os.listdir(root):
+ for search_file in search_files:
+ if fnmatch.fnmatch(list_file, search_file):
+ found_files[search_file].append(join_path(root, list_file))
+
+ answer = []
+ for search_file in search_files:
+ answer.extend(found_files[search_file])
+
+ return answer
+
+
+# Utilities for libraries and headers
+
+
+class FileList(collections.Sequence):
+ """Sequence of absolute paths to files.
+
+ Provides a few convenience methods to manipulate file paths.
"""
- def __init__(self, libraries):
- self.libraries = list(libraries)
+ def __init__(self, files):
+ if isinstance(files, six.string_types):
+ files = [files]
+
+ self.files = list(dedupe(files))
@property
def directories(self):
- """Stable de-duplication of the directories where the libraries
- reside
+ """Stable de-duplication of the directories where the files reside.
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/libc.a'])
- >>> assert l.directories == ['/dir1', '/dir2']
+ >>> l.directories
+ ['/dir1', '/dir2']
+ >>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
+ >>> h.directories
+ ['/dir1', '/dir2']
+
+ Returns:
+ list of strings: A list of directories
"""
return list(dedupe(
- os.path.dirname(x) for x in self.libraries if os.path.dirname(x)
+ os.path.dirname(x) for x in self.files if os.path.dirname(x)
))
@property
@@ -491,25 +728,247 @@ class LibraryList(collections.Sequence):
"""Stable de-duplication of the base-names in the list
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir3/liba.a'])
- >>> assert l.basenames == ['liba.a', 'libb.a']
+ >>> l.basenames
+ ['liba.a', 'libb.a']
+ >>> h = HeaderList(['/dir1/a.h', '/dir2/b.h', '/dir3/a.h'])
+ >>> h.basenames
+ ['a.h', 'b.h']
+
+ Returns:
+ list of strings: A list of base-names
"""
- return list(dedupe(os.path.basename(x) for x in self.libraries))
+ return list(dedupe(os.path.basename(x) for x in self.files))
+
+ def __getitem__(self, item):
+ cls = type(self)
+ if isinstance(item, numbers.Integral):
+ return self.files[item]
+ return cls(self.files[item])
+
+ def __add__(self, other):
+ return self.__class__(dedupe(self.files + list(other)))
+
+ def __radd__(self, other):
+ return self.__add__(other)
+
+ def __eq__(self, other):
+ return self.files == other.files
+
+ def __len__(self):
+ return len(self.files)
+
+ def joined(self, separator=' '):
+ return separator.join(self.files)
+
+ def __repr__(self):
+ return self.__class__.__name__ + '(' + repr(self.files) + ')'
+
+ def __str__(self):
+ return self.joined()
+
+
+class HeaderList(FileList):
+ """Sequence of absolute paths to headers.
+
+ Provides a few convenience methods to manipulate header paths and get
+ commonly used compiler flags or names.
+ """
+
+ def __init__(self, files):
+ super(HeaderList, self).__init__(files)
+
+ self._macro_definitions = []
+
+ @property
+ def headers(self):
+ """Stable de-duplication of the headers.
+
+ Returns:
+ list of strings: A list of header files
+ """
+ return self.files
+
+ @property
+ def names(self):
+ """Stable de-duplication of header names in the list without extensions
+
+ >>> h = HeaderList(['/dir1/a.h', '/dir2/b.h', '/dir3/a.h'])
+ >>> h.names
+ ['a', 'b']
+
+ Returns:
+ list of strings: A list of files without extensions
+ """
+ names = []
+
+ for x in self.basenames:
+ name = x
+
+ # Valid extensions include: ['.cuh', '.hpp', '.hh', '.h']
+ for ext in ['.cuh', '.hpp', '.hh', '.h']:
+ i = name.rfind(ext)
+ if i != -1:
+ names.append(name[:i])
+ break
+ else:
+ # No valid extension, should we still include it?
+ names.append(name)
+
+ return list(dedupe(names))
+
+ @property
+ def include_flags(self):
+ """Include flags
+
+ >>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
+ >>> h.include_flags
+ '-I/dir1 -I/dir2'
+
+ Returns:
+ str: A joined list of include flags
+ """
+ return ' '.join(['-I' + x for x in self.directories])
+
+ @property
+ def macro_definitions(self):
+ """Macro definitions
+
+ >>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
+ >>> h.add_macro('-DBOOST_LIB_NAME=boost_regex')
+ >>> h.add_macro('-DBOOST_DYN_LINK')
+ >>> h.macro_definitions
+ '-DBOOST_LIB_NAME=boost_regex -DBOOST_DYN_LINK'
+
+ Returns:
+ str: A joined list of macro definitions
+ """
+ return ' '.join(self._macro_definitions)
+
+ @property
+ def cpp_flags(self):
+ """Include flags + macro definitions
+
+ >>> h = HeaderList(['/dir1/a.h', '/dir1/b.h', '/dir2/c.h'])
+ >>> h.cpp_flags
+ '-I/dir1 -I/dir2'
+ >>> h.add_macro('-DBOOST_DYN_LINK')
+ >>> h.cpp_flags
+ '-I/dir1 -I/dir2 -DBOOST_DYN_LINK'
+
+ Returns:
+ str: A joined list of include flags and macro definitions
+ """
+ cpp_flags = self.include_flags
+ if self.macro_definitions:
+ cpp_flags += ' ' + self.macro_definitions
+ return cpp_flags
+
+ def add_macro(self, macro):
+ """Add a macro definition
+
+ Parameters:
+ macro (str): The macro to add
+ """
+ self._macro_definitions.append(macro)
+
+
+def find_headers(headers, root, recurse=False):
+ """Returns an iterable object containing a list of full paths to
+ headers if found.
+
+ Accepts any glob characters accepted by fnmatch:
+
+ ======= ====================================
+ Pattern Meaning
+ ======= ====================================
+ * matches everything
+ ? matches any single character
+ [seq] matches any character in ``seq``
+ [!seq] matches any character not in ``seq``
+ ======= ====================================
+
+ Parameters:
+ headers (str or list of str): Header name(s) to search for
+ root (str): The root directory to start searching from
+ recurses (bool, optional): if False search only root folder,
+ if True descends top-down from the root. Defaults to False.
+
+ Returns:
+ HeaderList: The headers that have been found
+ """
+ if isinstance(headers, six.string_types):
+ headers = [headers]
+ elif not isinstance(headers, collections.Sequence):
+ message = '{0} expects a string or sequence of strings as the '
+ message += 'first argument [got {1} instead]'
+ message = message.format(find_headers.__name__, type(headers))
+ raise TypeError(message)
+
+ # Construct the right suffix for the headers
+ suffix = 'h'
+
+ # List of headers we are searching with suffixes
+ headers = ['{0}.{1}'.format(header, suffix) for header in headers]
+
+ return HeaderList(find(root, headers, recurse))
+
+
+class LibraryList(FileList):
+ """Sequence of absolute paths to libraries
+
+ Provides a few convenience methods to manipulate library paths and get
+ commonly used compiler flags or names
+ """
+
+ @property
+ def libraries(self):
+ """Stable de-duplication of library files.
+
+ Returns:
+ list of strings: A list of library files
+ """
+ return self.files
@property
def names(self):
"""Stable de-duplication of library names in the list
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir3/liba.so'])
- >>> assert l.names == ['a', 'b']
+ >>> l.names
+ ['a', 'b']
+
+ Returns:
+ list of strings: A list of library names
"""
- return list(dedupe(x.split('.')[0][3:] for x in self.basenames))
+ names = []
+
+ for x in self.basenames:
+ name = x
+ if x.startswith('lib'):
+ name = x[3:]
+
+ # Valid extensions include: ['.dylib', '.so', '.a']
+ for ext in ['.dylib', '.so', '.a']:
+ i = name.rfind(ext)
+ if i != -1:
+ names.append(name[:i])
+ break
+ else:
+ # No valid extension, should we still include it?
+ names.append(name)
+
+ return list(dedupe(names))
@property
def search_flags(self):
"""Search flags for the libraries
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
- >>> assert l.search_flags == '-L/dir1 -L/dir2'
+ >>> l.search_flags
+ '-L/dir1 -L/dir2'
+
+ Returns:
+ str: A joined list of search flags
"""
return ' '.join(['-L' + x for x in self.directories])
@@ -518,7 +977,11 @@ class LibraryList(collections.Sequence):
"""Link flags for the libraries
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
- >>> assert l.search_flags == '-la -lb'
+ >>> l.link_flags
+ '-la -lb'
+
+ Returns:
+ str: A joined list of link flags
"""
return ' '.join(['-l' + name for name in self.names])
@@ -527,57 +990,107 @@ class LibraryList(collections.Sequence):
"""Search flags + link flags
>>> l = LibraryList(['/dir1/liba.a', '/dir2/libb.a', '/dir1/liba.so'])
- >>> assert l.search_flags == '-L/dir1 -L/dir2 -la -lb'
+ >>> l.ld_flags
+ '-L/dir1 -L/dir2 -la -lb'
+
+ Returns:
+ str: A joined list of search flags and link flags
"""
return self.search_flags + ' ' + self.link_flags
- def __getitem__(self, item):
- cls = type(self)
- if isinstance(item, numbers.Integral):
- return self.libraries[item]
- return cls(self.libraries[item])
- def __add__(self, other):
- return LibraryList(dedupe(self.libraries + list(other)))
+def find_system_libraries(libraries, shared=True):
+ """Searches the usual system library locations for ``libraries``.
- def __radd__(self, other):
- return self.__add__(other)
+ Search order is as follows:
- def __eq__(self, other):
- return self.libraries == other.libraries
+ 1. ``/lib64``
+ 2. ``/lib``
+ 3. ``/usr/lib64``
+ 4. ``/usr/lib``
+ 5. ``/usr/local/lib64``
+ 6. ``/usr/local/lib``
- def __len__(self):
- return len(self.libraries)
+ Accepts any glob characters accepted by fnmatch:
- def joined(self, separator=' '):
- return separator.join(self.libraries)
-
- def __repr__(self):
- return self.__class__.__name__ + '(' + repr(self.libraries) + ')'
-
- def __str__(self):
- return self.joined()
+ ======= ====================================
+ Pattern Meaning
+ ======= ====================================
+ * matches everything
+ ? matches any single character
+ [seq] matches any character in ``seq``
+ [!seq] matches any character not in ``seq``
+ ======= ====================================
+ Parameters:
+ libraries (str or list of str): Library name(s) to search for
+ shared (bool, optional): if True searches for shared libraries,
+ otherwise for static. Defaults to True.
-def find_libraries(args, root, shared=True, recurse=False):
- """Returns an iterable object containing a list of full paths to
- libraries if found.
-
- Args:
- args: iterable object containing a list of library names to \
- search for (e.g. 'libhdf5')
- root: root folder where to start searching
- shared: if True searches for shared libraries, otherwise for static
- recurse: if False search only root folder, if True descends top-down \
- from the root
+ Returns:
+ LibraryList: The libraries that have been found
+ """
+ if isinstance(libraries, six.string_types):
+ libraries = [libraries]
+ elif not isinstance(libraries, collections.Sequence):
+ message = '{0} expects a string or sequence of strings as the '
+ message += 'first argument [got {1} instead]'
+ message = message.format(find_system_libraries.__name__,
+ type(libraries))
+ raise TypeError(message)
+
+ libraries_found = []
+ search_locations = [
+ '/lib64',
+ '/lib',
+ '/usr/lib64',
+ '/usr/lib',
+ '/usr/local/lib64',
+ '/usr/local/lib',
+ ]
+
+ for library in libraries:
+ for root in search_locations:
+ result = find_libraries(library, root, shared, recurse=True)
+ if result:
+ libraries_found += result
+ break
+
+ return libraries_found
+
+
+def find_libraries(libraries, root, shared=True, recurse=False):
+ """Returns an iterable of full paths to libraries found in a root dir.
+
+ Accepts any glob characters accepted by fnmatch:
+
+ ======= ====================================
+ Pattern Meaning
+ ======= ====================================
+ * matches everything
+ ? matches any single character
+ [seq] matches any character in ``seq``
+ [!seq] matches any character not in ``seq``
+ ======= ====================================
+
+ Parameters:
+ libraries (str or list of str): Library name(s) to search for
+ root (str): The root directory to start searching from
+ shared (bool, optional): if True searches for shared libraries,
+ otherwise for static. Defaults to True.
+ recurse (bool, optional): if False search only root folder,
+ if True descends top-down from the root. Defaults to False.
Returns:
- list of full paths to the libraries that have been found
+ LibraryList: The libraries that have been found
"""
- if not isinstance(args, collections.Sequence) or isinstance(args, str):
- message = '{0} expects a sequence of strings as first argument'
- message += ' [got {1} instead]'
- raise TypeError(message.format(find_libraries.__name__, type(args)))
+ if isinstance(libraries, six.string_types):
+ libraries = [libraries]
+ elif not isinstance(libraries, collections.Sequence):
+ message = '{0} expects a string or sequence of strings as the '
+ message += 'first argument [got {1} instead]'
+ message = message.format(find_libraries.__name__, type(libraries))
+ raise TypeError(message)
# Construct the right suffix for the library
if shared is True:
@@ -585,38 +1098,6 @@ def find_libraries(args, root, shared=True, recurse=False):
else:
suffix = 'a'
# List of libraries we are searching with suffixes
- libraries = ['{0}.{1}'.format(lib, suffix) for lib in args]
- # Search method
- if recurse is False:
- search_method = _find_libraries_non_recursive
- else:
- search_method = _find_libraries_recursive
-
- return search_method(libraries, root)
-
-
-def _find_libraries_recursive(libraries, root):
- library_dict = collections.defaultdict(list)
- for path, _, files in os.walk(root):
- for lib in libraries:
- if lib in files:
- library_dict[lib].append(
- join_path(path, lib)
- )
- answer = []
- for lib in libraries:
- answer.extend(library_dict[lib])
- return LibraryList(answer)
-
-
-def _find_libraries_non_recursive(libraries, root):
-
- def lib_or_none(lib):
- library = join_path(root, lib)
- if not os.path.exists(library):
- return None
- return library
+ libraries = ['{0}.{1}'.format(lib, suffix) for lib in libraries]
- return LibraryList(
- [lib_or_none(lib) for lib in libraries if lib_or_none(lib) is not None]
- )
+ return LibraryList(find(root, libraries, recurse))
diff --git a/lib/spack/llnl/util/lang.py b/lib/spack/llnl/util/lang.py
index 331cf2b3c5..7189b6c0f3 100644
--- a/lib/spack/llnl/util/lang.py
+++ b/lib/spack/llnl/util/lang.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,21 +22,31 @@
# 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 __future__ import division
+
import os
import re
import functools
import collections
import inspect
+from datetime import datetime
+from six import string_types
# Ignore emacs backups when listing modules
ignore_modules = [r'^\.#', '~$']
+class classproperty(property):
+ """classproperty decorator: like property but for classmethods."""
+ def __get__(self, cls, owner):
+ return self.fget.__get__(None, owner)()
+
+
def index_by(objects, *funcs):
"""Create a hierarchy of dictionaries by splitting the supplied
set of objects on unique values of the supplied functions.
Values are used as keys. For example, suppose you have four
- objects with attributes that look like this:
+ objects with attributes that look like this::
a = Spec(name="boost", compiler="gcc", arch="bgqos_0")
b = Spec(name="mrnet", compiler="intel", arch="chaos_5_x86_64_ib")
@@ -48,15 +58,15 @@ def index_by(objects, *funcs):
lambda s: s.compiler)
index2 = index_by(list_of_specs, lambda s: s.compiler)
- ``index1'' now has two levels of dicts, with lists at the
- leaves, like this:
+ ``index1`` now has two levels of dicts, with lists at the
+ leaves, like this::
{ 'bgqos_0' : { 'gcc' : [a], 'xlc' : [c] },
'chaos_5_x86_64_ib' : { 'intel' : [b, d] }
}
- And ``index2'' is a single level dictionary of lists that looks
- like this:
+ And ``index2`` is a single level dictionary of lists that looks
+ like this::
{ 'gcc' : [a],
'intel' : [b,d],
@@ -65,12 +75,12 @@ def index_by(objects, *funcs):
If any elemnts in funcs is a string, it is treated as the name
of an attribute, and acts like getattr(object, name). So
- shorthand for the above two indexes would be:
+ shorthand for the above two indexes would be::
index1 = index_by(list_of_specs, 'arch', 'compiler')
index2 = index_by(list_of_specs, 'compiler')
- You can also index by tuples by passing tuples:
+ You can also index by tuples by passing tuples::
index1 = index_by(list_of_specs, ('arch', 'compiler'))
@@ -80,7 +90,7 @@ def index_by(objects, *funcs):
return objects
f = funcs[0]
- if isinstance(f, basestring):
+ if isinstance(f, str):
f = lambda x: getattr(x, funcs[0])
elif isinstance(f, tuple):
f = lambda x: tuple(getattr(x, p) for p in funcs[0])
@@ -96,21 +106,6 @@ def index_by(objects, *funcs):
return result
-def partition_list(elements, predicate):
- """Partition a list into two lists, the first containing elements
- for which the predicate evaluates to true, the second containing
- those for which it is false.
- """
- trues = []
- falses = []
- for elt in elements:
- if predicate(elt):
- trues.append(elt)
- else:
- falses.append(elt)
- return trues, falses
-
-
def caller_locals():
"""This will return the locals of the *parent* of the caller.
This allows a function to insert variables into its caller's
@@ -197,7 +192,7 @@ class memoized(object):
def list_modules(directory, **kwargs):
- """Lists all of the modules, excluding __init__.py, in a
+ """Lists all of the modules, excluding ``__init__.py``, in a
particular directory. Listed packages have no particular
order."""
list_directories = kwargs.setdefault('directories', True)
@@ -219,14 +214,16 @@ def list_modules(directory, **kwargs):
def key_ordering(cls):
"""Decorates a class with extra methods that implement rich comparison
- operations and __hash__. The decorator assumes that the class
- implements a function called _cmp_key(). The rich comparison operations
- will compare objects using this key, and the __hash__ function will
- return the hash of this key.
-
- If a class already has __eq__, __ne__, __lt__, __le__, __gt__, or __ge__
- defined, this decorator will overwrite them. If the class does not
- have a _cmp_key method, then this will raise a TypeError.
+ operations and ``__hash__``. The decorator assumes that the class
+ implements a function called ``_cmp_key()``. The rich comparison
+ operations will compare objects using this key, and the ``__hash__``
+ function will return the hash of this key.
+
+ If a class already has ``__eq__``, ``__ne__``, ``__lt__``, ``__le__``,
+ ``__gt__``, or ``__ge__`` defined, this decorator will overwrite them.
+
+ Raises:
+ TypeError: If the class does not have a ``_cmp_key`` method
"""
def setter(name, value):
value.__name__ = name
@@ -257,10 +254,28 @@ def key_ordering(cls):
@key_ordering
-class HashableMap(dict):
+class HashableMap(collections.MutableMapping):
"""This is a hashable, comparable dictionary. Hash is performed on
a tuple of the values in the dictionary."""
+ def __init__(self):
+ self.dict = {}
+
+ def __getitem__(self, key):
+ return self.dict[key]
+
+ def __setitem__(self, key, value):
+ self.dict[key] = value
+
+ def __iter__(self):
+ return iter(self.dict)
+
+ def __len__(self):
+ return len(self.dict)
+
+ def __delitem__(self, key):
+ del self.dict[key]
+
def _cmp_key(self):
return tuple(sorted(self.values()))
@@ -315,18 +330,18 @@ def match_predicate(*args):
"""Utility function for making string matching predicates.
Each arg can be a:
- - regex
- - list or tuple of regexes
- - predicate that takes a string.
+ * regex
+ * list or tuple of regexes
+ * predicate that takes a string.
This returns a predicate that is true if:
- - any arg regex matches
- - any regex in a list or tuple of regexes matches.
- - any predicate in args matches.
+ * any arg regex matches
+ * any regex in a list or tuple of regexes matches.
+ * any predicate in args matches.
"""
def match(string):
for arg in args:
- if isinstance(arg, basestring):
+ if isinstance(arg, string_types):
if re.search(arg, string):
return True
elif isinstance(arg, list) or isinstance(arg, tuple):
@@ -358,19 +373,90 @@ def dedupe(sequence):
seen.add(x)
+def pretty_date(time, now=None):
+ """Convert a datetime or timestamp to a pretty, relative date.
+
+ Args:
+ time (datetime or int): date to print prettily
+ now (datetime): dateimte for 'now', i.e. the date the pretty date
+ is relative to (default is datetime.now())
+
+ Returns:
+ (str): pretty string like 'an hour ago', 'Yesterday',
+ '3 months ago', 'just now', etc.
+
+ Adapted from https://stackoverflow.com/questions/1551382.
+
+ """
+ if now is None:
+ now = datetime.now()
+
+ if type(time) is int:
+ diff = now - datetime.fromtimestamp(time)
+ elif isinstance(time, datetime):
+ diff = now - time
+ else:
+ raise ValueError("pretty_date requires a timestamp or datetime")
+
+ second_diff = diff.seconds
+ day_diff = diff.days
+
+ if day_diff < 0:
+ return ''
+
+ if day_diff == 0:
+ if second_diff < 10:
+ return "just now"
+ if second_diff < 60:
+ return str(second_diff) + " seconds ago"
+ if second_diff < 120:
+ return "a minute ago"
+ if second_diff < 3600:
+ return str(second_diff // 60) + " minutes ago"
+ if second_diff < 7200:
+ return "an hour ago"
+ if second_diff < 86400:
+ return str(second_diff // 3600) + " hours ago"
+ if day_diff == 1:
+ return "yesterday"
+ if day_diff < 7:
+ return str(day_diff) + " days ago"
+ if day_diff < 28:
+ weeks = day_diff // 7
+ if weeks == 1:
+ return "a week ago"
+ else:
+ return str(day_diff // 7) + " weeks ago"
+ if day_diff < 365:
+ months = day_diff // 30
+ if months == 1:
+ return "a month ago"
+ elif months == 12:
+ months -= 1
+ return str(months) + " months ago"
+
+ diff = day_diff // 365
+ if diff == 1:
+ return "a year ago"
+ else:
+ return str(diff) + " years ago"
+
+
class RequiredAttributeError(ValueError):
def __init__(self, message):
super(RequiredAttributeError, self).__init__(message)
-def duplicate_stream(original):
- """Duplicates a stream at the os level.
-
- :param stream original: original stream to be duplicated. Must have a
- `fileno` callable attribute.
+class ObjectWrapper(object):
+ """Base class that wraps an object. Derived classes can add new behavior
+ while staying undercover.
- :return: duplicate of the original stream
- :rtype: file like object
+ This class is modeled after the stackoverflow answer:
+ * http://stackoverflow.com/a/1445289/771663
"""
- return os.fdopen(os.dup(original.fileno()))
+ def __init__(self, wrapped_object):
+ wrapped_cls = type(wrapped_object)
+ wrapped_name = wrapped_cls.__name__
+ self.__class__ = type(wrapped_name, (type(self), wrapped_cls), {})
+ self.__dict__ = wrapped_object.__dict__
diff --git a/lib/spack/llnl/util/link_tree.py b/lib/spack/llnl/util/link_tree.py
index d6547e933a..60ab5cb2b0 100644
--- a/lib/spack/llnl/util/link_tree.py
+++ b/lib/spack/llnl/util/link_tree.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,9 @@
import os
import shutil
-from llnl.util.filesystem import *
+import filecmp
+
+from llnl.util.filesystem import traverse_tree, mkdirp, touch
__all__ = ['LinkTree']
@@ -62,10 +64,16 @@ class LinkTree(object):
return dest
return None
- def merge(self, dest_root, **kwargs):
+ def merge(self, dest_root, link=os.symlink, **kwargs):
"""Link all files in src into dest, creating directories
- if necessary."""
+ if necessary.
+ If ignore_conflicts is True, do not break when the target exists but
+ rather return a list of files that could not be linked.
+ Note that files blocking directories will still cause an error.
+ """
kwargs['order'] = 'pre'
+ ignore_conflicts = kwargs.get("ignore_conflicts", False)
+ existing = []
for src, dest in traverse_tree(self._root, dest_root, **kwargs):
if os.path.isdir(src):
if not os.path.exists(dest):
@@ -81,8 +89,15 @@ class LinkTree(object):
touch(marker)
else:
- assert(not os.path.exists(dest))
- os.symlink(src, dest)
+ if os.path.exists(dest):
+ if ignore_conflicts:
+ existing.append(src)
+ else:
+ raise AssertionError("File already exists: %s" % dest)
+ else:
+ link(src, dest)
+ if ignore_conflicts:
+ return existing
def unmerge(self, dest_root, **kwargs):
"""Unlink all files in dest that exist in src.
@@ -112,4 +127,8 @@ class LinkTree(object):
elif os.path.exists(dest):
if not os.path.islink(dest):
raise ValueError("%s is not a link tree!" % dest)
- os.remove(dest)
+ # remove if dest is a hardlink/symlink to src; this will only
+ # be false if two packages are merged into a prefix and have a
+ # conflicting file
+ if filecmp.cmp(src, dest, shallow=True):
+ os.remove(dest)
diff --git a/lib/spack/llnl/util/lock.py b/lib/spack/llnl/util/lock.py
index 2e44a94798..5467838744 100644
--- a/lib/spack/llnl/util/lock.py
+++ b/lib/spack/llnl/util/lock.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,7 +45,7 @@ _sleep_time = 1e-5
class Lock(object):
"""This is an implementation of a filesystem lock using Python's lockf.
- In Python, `lockf` actually calls `fcntl`, so this should work with
+ In Python, ``lockf`` actually calls ``fcntl``, so this should work with
any filesystem implementation that supports locking through the fcntl
calls. This includes distributed filesystems like Lustre (when flock
is enabled) and recent NFS versions.
@@ -60,7 +60,7 @@ class Lock(object):
This exposes a subset of fcntl locking functionality. It does
not currently expose the ``whence`` parameter -- ``whence`` is
- always os.SEEK_SET and ``start`` is always evaluated from the
+ always ``os.SEEK_SET`` and ``start`` is always evaluated from the
beginning of the file.
"""
self.path = path
@@ -80,7 +80,7 @@ class Lock(object):
"""This takes a lock using POSIX locks (``fnctl.lockf``).
The lock is implemented as a spin lock using a nonblocking call
- to lockf().
+ to ``lockf()``.
On acquiring an exclusive lock, the lock writes this process's
pid and host to the lock file, in case the holding process needs
@@ -127,8 +127,9 @@ class Lock(object):
return
- except IOError as error:
- if error.errno == errno.EAGAIN or error.errno == errno.EACCES:
+ except IOError as e:
+ if e.errno in (errno.EAGAIN, errno.EACCES):
+ # EAGAIN and EACCES == locked by another process
pass
else:
raise
@@ -197,6 +198,8 @@ class Lock(object):
tty.debug('READ LOCK: {0.path}[{0._start}:{0._length}] [Acquiring]'
.format(self))
self._lock(fcntl.LOCK_SH, timeout=timeout) # can raise LockError.
+ tty.debug('READ LOCK: {0.path}[{0._start}:{0._length}] [Acquired]'
+ .format(self))
self._reads += 1
return True
else:
@@ -219,6 +222,8 @@ class Lock(object):
'WRITE LOCK: {0.path}[{0._start}:{0._length}] [Acquiring]'
.format(self))
self._lock(fcntl.LOCK_EX, timeout=timeout) # can raise LockError.
+ tty.debug('WRITE LOCK: {0.path}[{0._start}:{0._length}] [Acquired]'
+ .format(self))
self._writes += 1
return True
else:
@@ -276,14 +281,14 @@ class LockTransaction(object):
This class can trigger actions when the lock is acquired for the
first time and released for the last.
- If the acquire_fn returns a value, it is used as the return value for
- __enter__, allowing it to be passed as the `as` argument of a `with`
- statement.
+ If the ``acquire_fn`` returns a value, it is used as the return value for
+ ``__enter__``, allowing it to be passed as the ``as`` argument of a
+ ``with`` statement.
- If acquire_fn returns a context manager, *its* `__enter__` function will be
- called in `__enter__` after acquire_fn, and its `__exit__` funciton will be
- called before `release_fn` in `__exit__`, allowing you to nest a context
- manager to be used along with the lock.
+ If ``acquire_fn`` returns a context manager, *its* ``__enter__`` function
+ will be called in ``__enter__`` after ``acquire_fn``, and its ``__exit__``
+ funciton will be called before ``release_fn`` in ``__exit__``, allowing you
+ to nest a context manager to be used along with the lock.
Timeout for lock is customizable.
diff --git a/lib/spack/llnl/util/tty/__init__.py b/lib/spack/llnl/util/tty/__init__.py
index 1381bb2f7d..1d04787372 100644
--- a/lib/spack/llnl/util/tty/__init__.py
+++ b/lib/spack/llnl/util/tty/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,21 +22,22 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import sys
-import os
-import textwrap
import fcntl
-import termios
+import os
import struct
+import sys
+import termios
+import textwrap
import traceback
-from StringIO import StringIO
+from six import StringIO
+from six.moves import input
-from llnl.util.tty.color import *
+from llnl.util.tty.color import cprint, cwrite, cescape, clen
-_debug = False
+_debug = False
_verbose = False
_stacktrace = False
-indent = " "
+indent = " "
def is_verbose():
@@ -59,7 +60,7 @@ def set_debug(flag):
def set_verbose(flag):
global _verbose
_verbose = flag
-
+
def set_stacktrace(flag):
global _stacktrace
@@ -83,19 +84,23 @@ def process_stacktrace(countback):
return st_text
-def msg(message, *args):
+def msg(message, *args, **kwargs):
+ newline = kwargs.get('newline', True)
st_text = ""
if _stacktrace:
st_text = process_stacktrace(2)
- cprint("@*b{%s==>} %s" % (st_text, cescape(message)))
+ if newline:
+ cprint("@*b{%s==>} %s" % (st_text, cescape(message)))
+ else:
+ cwrite("@*b{%s==>} %s" % (st_text, cescape(message)))
for arg in args:
- print indent + str(arg)
+ print(indent + str(arg))
def info(message, *args, **kwargs):
format = kwargs.get('format', '*b')
stream = kwargs.get('stream', sys.stdout)
- wrap = kwargs.get('wrap', False)
+ wrap = kwargs.get('wrap', False)
break_long_words = kwargs.get('break_long_words', False)
st_countback = kwargs.get('countback', 3)
@@ -159,7 +164,8 @@ def get_number(prompt, **kwargs):
number = None
while number is None:
- ans = raw_input(prompt)
+ msg(prompt, newline=False)
+ ans = input()
if ans == str(abort):
return None
@@ -191,11 +197,12 @@ def get_yes_or_no(prompt, **kwargs):
result = None
while result is None:
- ans = raw_input(prompt).lower()
+ msg(prompt, newline=False)
+ ans = input().lower()
if not ans:
result = default_value
if result is None:
- print "Please enter yes or no."
+ print("Please enter yes or no.")
else:
if ans == 'y' or ans == 'yes':
result = True
@@ -206,11 +213,12 @@ def get_yes_or_no(prompt, **kwargs):
def hline(label=None, **kwargs):
"""Draw a labeled horizontal line.
- Options:
- char Char to draw the line with. Default '-'
- max_width Maximum width of the line. Default is 64 chars.
+
+ Keyword Arguments:
+ char (str): Char to draw the line with. Default '-'
+ max_width (int): Maximum width of the line. Default is 64 chars.
"""
- char = kwargs.pop('char', '-')
+ char = kwargs.pop('char', '-')
max_width = kwargs.pop('max_width', 64)
if kwargs:
raise TypeError(
@@ -233,7 +241,7 @@ def hline(label=None, **kwargs):
out.write(label)
out.write(suffix)
- print out.getvalue()
+ print(out.getvalue())
def terminal_size():
@@ -242,7 +250,7 @@ def terminal_size():
try:
rc = struct.unpack('hh', fcntl.ioctl(
fd, termios.TIOCGWINSZ, '1234'))
- except:
+ except BaseException:
return
return rc
rc = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
@@ -251,7 +259,7 @@ def terminal_size():
fd = os.open(os.ctermid(), os.O_RDONLY)
rc = ioctl_GWINSZ(fd)
os.close(fd)
- except:
+ except BaseException:
pass
if not rc:
rc = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
diff --git a/lib/spack/llnl/util/tty/colify.py b/lib/spack/llnl/util/tty/colify.py
index 67acdfa517..eebb102fb1 100644
--- a/lib/spack/llnl/util/tty/colify.py
+++ b/lib/spack/llnl/util/tty/colify.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,11 +23,13 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
"""
-Routines for printing columnar output. See colify() for more information.
+Routines for printing columnar output. See ``colify()`` for more information.
"""
+from __future__ import division
+
import os
import sys
-from StringIO import StringIO
+from six import StringIO
from llnl.util.tty import terminal_size
from llnl.util.tty.color import clen, cextra
@@ -64,18 +66,18 @@ def config_variable_cols(elts, console_width, padding, cols=0):
# Get a bound on the most columns we could possibly have.
# 'clen' ignores length of ansi color sequences.
lengths = [clen(e) for e in elts]
- max_cols = max(1, console_width / (min(lengths) + padding))
+ max_cols = max(1, console_width // (min(lengths) + padding))
max_cols = min(len(elts), max_cols)
# Range of column counts to try. If forced, use the supplied value.
- col_range = [cols] if cols else xrange(1, max_cols + 1)
+ col_range = [cols] if cols else range(1, max_cols + 1)
# Determine the most columns possible for the console width.
configs = [ColumnConfig(c) for c in col_range]
for i, length in enumerate(lengths):
for conf in configs:
if conf.valid:
- col = i / ((len(elts) + conf.cols - 1) / conf.cols)
+ col = i // ((len(elts) + conf.cols - 1) // conf.cols)
p = padding if col < (conf.cols - 1) else 0
if conf.widths[col] < (length + p):
@@ -107,7 +109,7 @@ def config_uniform_cols(elts, console_width, padding, cols=0):
# 'clen' ignores length of ansi color sequences.
max_len = max(clen(e) for e in elts) + padding
if cols == 0:
- cols = max(1, console_width / max_len)
+ cols = max(1, console_width // max_len)
cols = min(len(elts), cols)
config = ColumnConfig(cols)
@@ -122,26 +124,22 @@ def colify(elts, **options):
uniform-width and variable-width (tighter) columns.
If elts is not a list of strings, each element is first conveted
- using str().
-
- Keyword arguments:
-
- output=<stream> A file object to write to. Default is sys.stdout.
- indent=<int> Optionally indent all columns by some number of spaces.
- padding=<int> Spaces between columns. Default is 2.
- width=<int> Width of the output. Default is 80 if tty not detected.
-
- cols=<int> Force number of columns. Default is to size to terminal,
- or single-column if no tty
-
- tty=<bool> Whether to attempt to write to a tty. Default is to
- autodetect a tty. Set to False to force
- single-column output.
-
- method=<string> Method to use to fit columns. Options are variable or
- uniform. Variable-width columns are tighter, uniform
- columns are all the same width and fit less data on
- the screen.
+ using ``str()``.
+
+ Keyword Arguments:
+ output (stream): A file object to write to. Default is ``sys.stdout``
+ indent (int): Optionally indent all columns by some number of spaces
+ padding (int): Spaces between columns. Default is 2
+ width (int): Width of the output. Default is 80 if tty not detected
+ cols (int): Force number of columns. Default is to size to
+ terminal, or single-column if no tty
+ tty (bool): Whether to attempt to write to a tty. Default is to
+ autodetect a tty. Set to False to force single-column
+ output
+ method (str): Method to use to fit columns. Options are variable or
+ uniform. Variable-width columns are tighter, uniform
+ columns are all the same width and fit less data on
+ the screen
"""
# Get keyword arguments or set defaults
cols = options.pop("cols", 0)
@@ -169,7 +167,7 @@ def colify(elts, **options):
r, c = env_size.split('x')
console_rows, console_cols = int(r), int(c)
tty = True
- except:
+ except BaseException:
pass
# Use only one column if not a tty.
@@ -190,15 +188,15 @@ def colify(elts, **options):
elif method == "uniform":
config = config_uniform_cols(elts, console_cols, padding, cols)
else:
- raise ValueError("method must be one of: " + allowed_methods)
+ raise ValueError("method must be either 'variable' or 'uniform'")
cols = config.cols
- rows = (len(elts) + cols - 1) / cols
+ rows = (len(elts) + cols - 1) // cols
rows_last_col = len(elts) % rows
- for row in xrange(rows):
+ for row in range(rows):
output.write(" " * indent)
- for col in xrange(cols):
+ for col in range(cols):
elt = col * rows + row
width = config.widths[col] + cextra(elts[elt])
if col < cols - 1:
@@ -218,7 +216,7 @@ def colify(elts, **options):
def colify_table(table, **options):
- """Version of colify() for data expressed in rows, (list of lists).
+ """Version of ``colify()`` for data expressed in rows, (list of lists).
Same as regular colify but takes a list of lists, where each
sub-list must be the same length, and each is interpreted as a
@@ -233,7 +231,7 @@ def colify_table(table, **options):
columns = len(table[0])
def transpose():
- for i in xrange(columns):
+ for i in range(columns):
for row in table:
yield row[i]
@@ -245,7 +243,7 @@ def colify_table(table, **options):
def colified(elts, **options):
- """Invokes the colify() function but returns the result as a string
+ """Invokes the ``colify()`` function but returns the result as a string
instead of writing it to an output string."""
sio = StringIO()
options['output'] = sio
diff --git a/lib/spack/llnl/util/tty/color.py b/lib/spack/llnl/util/tty/color.py
index b0c00f1502..c1365a93a0 100644
--- a/lib/spack/llnl/util/tty/color.py
+++ b/lib/spack/llnl/util/tty/color.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,39 +23,45 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
"""
-This file implements an expression syntax, similar to printf, for adding
+This file implements an expression syntax, similar to ``printf``, for adding
ANSI colors to text.
-See colorize(), cwrite(), and cprint() for routines that can generate
-colored output.
+See ``colorize()``, ``cwrite()``, and ``cprint()`` for routines that can
+generate colored output.
-colorize will take a string and replace all color expressions with
-ANSI control codes. If the isatty keyword arg is set to False, then
+``colorize`` will take a string and replace all color expressions with
+ANSI control codes. If the ``isatty`` keyword arg is set to False, then
the color expressions will be converted to null strings, and the
returned string will have no color.
-cwrite and cprint are equivalent to write() and print() calls in
-python, but they colorize their output. If the stream argument is
-not supplied, they write to sys.stdout.
+``cwrite`` and ``cprint`` are equivalent to ``write()`` and ``print()``
+calls in python, but they colorize their output. If the ``stream`` argument is
+not supplied, they write to ``sys.stdout``.
Here are some example color expressions:
- @r Turn on red coloring
- @R Turn on bright red coloring
- @*{foo} Bold foo, but don't change text color
- @_{bar} Underline bar, but don't change text color
- @*b Turn on bold, blue text
- @_B Turn on bright blue text with an underline
- @. Revert to plain formatting
- @*g{green} Print out 'green' in bold, green text, then reset to plain.
- @*ggreen@. Print out 'green' in bold, green text, then reset to plain.
+========== ============================================================
+Expression Meaning
+========== ============================================================
+@r Turn on red coloring
+@R Turn on bright red coloring
+@*{foo} Bold foo, but don't change text color
+@_{bar} Underline bar, but don't change text color
+@*b Turn on bold, blue text
+@_B Turn on bright blue text with an underline
+@. Revert to plain formatting
+@*g{green} Print out 'green' in bold, green text, then reset to plain.
+@*ggreen@. Print out 'green' in bold, green text, then reset to plain.
+========== ============================================================
The syntax consists of:
- color-expr = '@' [style] color-code '{' text '}' | '@.' | '@@'
- style = '*' | '_'
- color-code = [krgybmcwKRGYBMCW]
- text = .*
+========== =================================================
+color-expr '@' [style] color-code '{' text '}' | '@.' | '@@'
+style '*' | '_'
+color-code [krgybmcwKRGYBMCW]
+text .*
+========== =================================================
'@' indicates the start of a color expression. It can be followed
by an optional * or _ that indicates whether the font should be bold or
@@ -74,6 +80,7 @@ To output an @, use '@@'. To output a } inside braces, use '}}'.
"""
import re
import sys
+from contextlib import contextmanager
class ColorParseError(Exception):
@@ -82,6 +89,7 @@ class ColorParseError(Exception):
def __init__(self, message):
super(ColorParseError, self).__init__(message)
+
# Text styles for ansi codes
styles = {'*': '1', # bold
'_': '4', # underline
@@ -100,15 +108,62 @@ colors = {'k': 30, 'K': 90, # black
# Regex to be used for color formatting
color_re = r'@(?:@|\.|([*_])?([a-zA-Z])?(?:{((?:[^}]|}})*)})?)'
+# Mapping from color arguments to values for tty.set_color
+color_when_values = {
+ 'always': True,
+ 'auto': None,
+ 'never': False
+}
+
+# Force color; None: Only color if stdout is a tty
+# True: Always colorize output, False: Never colorize output
+_force_color = None
+
+
+def _color_when_value(when):
+ """Raise a ValueError for an invalid color setting.
+
+ Valid values are 'always', 'never', and 'auto', or equivalently,
+ True, False, and None.
+ """
+ if when in color_when_values:
+ return color_when_values[when]
+ elif when not in color_when_values.values():
+ raise ValueError('Invalid color setting: %s' % when)
+ return when
+
+
+def get_color_when():
+ """Return whether commands should print color or not."""
+ if _force_color is not None:
+ return _force_color
+ return sys.stdout.isatty()
-# Force color even if stdout is not a tty.
-_force_color = False
+
+def set_color_when(when):
+ """Set when color should be applied. Options are:
+
+ * True or 'always': always print color
+ * False or 'never': never print color
+ * None or 'auto': only print color if sys.stdout is a tty.
+ """
+ global _force_color
+ _force_color = _color_when_value(when)
+
+
+@contextmanager
+def color_when(value):
+ """Context manager to temporarily use a particular color setting."""
+ old_value = value
+ set_color_when(value)
+ yield
+ set_color_when(old_value)
class match_to_ansi(object):
def __init__(self, color=True):
- self.color = color
+ self.color = _color_when_value(color)
def escape(self, s):
"""Returns a TTY escape sequence for a color"""
@@ -118,8 +173,8 @@ class match_to_ansi(object):
return ''
def __call__(self, match):
- """Convert a match object generated by color_re into an ansi color code
- This can be used as a handler in re.sub.
+ """Convert a match object generated by ``color_re`` into an ansi
+ color code. This can be used as a handler in ``re.sub``.
"""
style, color, text = match.groups()
m = match.group(0)
@@ -147,12 +202,19 @@ class match_to_ansi(object):
def colorize(string, **kwargs):
- """Take a string and replace all color expressions with ANSI control
- codes. Return the resulting string.
- If color=False is supplied, output will be plain text without
- control codes, for output to non-console devices.
+ """Replace all color expressions in a string with ANSI control codes.
+
+ Args:
+ string (str): The string to replace
+
+ Returns:
+ str: The filtered string
+
+ Keyword Arguments:
+ color (bool): If False, output will be plain text without control
+ codes, for output to non-console devices.
"""
- color = kwargs.get('color', True)
+ color = _color_when_value(kwargs.get('color', get_color_when()))
return re.sub(color_re, match_to_ansi(color), string)
@@ -174,7 +236,7 @@ def cwrite(string, stream=sys.stdout, color=None):
then it will be set based on stream.isatty().
"""
if color is None:
- color = stream.isatty() or _force_color
+ color = get_color_when()
stream.write(colorize(string, color=color))
@@ -203,7 +265,7 @@ class ColorStream(object):
if raw:
color = True
else:
- color = self._stream.isatty() or _force_color
+ color = get_color_when()
raw_write(colorize(string, color=color))
def writelines(self, sequence, **kwargs):
diff --git a/lib/spack/llnl/util/tty/log.py b/lib/spack/llnl/util/tty/log.py
index b1d45214ab..40edca972e 100644
--- a/lib/spack/llnl/util/tty/log.py
+++ b/lib/spack/llnl/util/tty/log.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,50 +29,77 @@ import os
import re
import select
import sys
+import traceback
+from contextlib import contextmanager
+from six import string_types
+from six import StringIO
-import llnl.util.lang as lang
import llnl.util.tty as tty
-import llnl.util.tty.color as color
# Use this to strip escape sequences
_escape = re.compile(r'\x1b[^m]*m|\x1b\[?1034h')
+# control characters for enabling/disabling echo
+#
+# We use control characters to ensure that echo enable/disable are inline
+# with the other output. We always follow these with a newline to ensure
+# one per line the following newline is ignored in output.
+xon, xoff = '\x11\n', '\x13\n'
+control = re.compile('(\x11\n|\x13\n)')
+
def _strip(line):
"""Strip color and control characters from a line."""
return _escape.sub('', line)
-class _SkipWithBlock():
- """Special exception class used to skip a with block."""
- pass
-
-
class keyboard_input(object):
- """Disable canonical input and echo on a stream within a with block.
+ """Context manager to disable line editing and echoing.
- Use this with sys.stdin for keyboard input, e.g.:
+ Use this with ``sys.stdin`` for keyboard input, e.g.::
with keyboard_input(sys.stdin):
r, w, x = select.select([sys.stdin], [], [])
# ... do something with keypresses ...
- When the with block completes, this will restore settings before
- canonical and echo were disabled.
- """
+ This disables canonical input so that keypresses are available on the
+ stream immediately. Typically standard input allows line editing,
+ which means keypresses won't be sent until the user hits return.
+ It also disables echoing, so that keys pressed aren't printed to the
+ terminal. So, the user can hit, e.g., 'v', and it's read on the
+ other end of the pipe immediately but not printed.
+
+ When the with block completes, prior TTY settings are restored.
+
+ Note: this depends on termios support. If termios isn't available,
+ or if the stream isn't a TTY, this context manager has no effect.
+ """
def __init__(self, stream):
+ """Create a context manager that will enable keyboard input on stream.
+
+ Args:
+ stream (file-like): stream on which to accept keyboard input
+
+ Note that stream can be None, in which case ``keyboard_input``
+ will do nothing.
+ """
self.stream = stream
def __enter__(self):
+ """Enable immediate keypress input on stream.
+
+ If the stream is not a TTY or the system doesn't support termios,
+ do nothing.
+ """
self.old_cfg = None
# Ignore all this if the input stream is not a tty.
- if not self.stream.isatty():
+ if not self.stream or not self.stream.isatty():
return
try:
- # import and mark whether it worked.
+ # If this fails, self.old_cfg will remain None
import termios
# save old termios settings
@@ -89,174 +116,382 @@ class keyboard_input(object):
termios.tcsetattr(fd, termios.TCSADRAIN, self.new_cfg)
except Exception:
- pass # Some OS's do not support termios, so ignore.
+ pass # some OS's do not support termios, so ignore
def __exit__(self, exc_type, exception, traceback):
- # If termios was avaialble, restore old settings after the
- # with block
+ """If termios was avaialble, restore old settings."""
if self.old_cfg:
import termios
termios.tcsetattr(
self.stream.fileno(), termios.TCSADRAIN, self.old_cfg)
+class Unbuffered(object):
+ """Wrapper for Python streams that forces them to be unbuffered.
+
+ This is implemented by forcing a flush after each write.
+ """
+ def __init__(self, stream):
+ self.stream = stream
+
+ def write(self, data):
+ self.stream.write(data)
+ self.stream.flush()
+
+ def writelines(self, datas):
+ self.stream.writelines(datas)
+ self.stream.flush()
+
+ def __getattr__(self, attr):
+ return getattr(self.stream, attr)
+
+
+def _file_descriptors_work(*streams):
+ """Whether we can get file descriptors for the streams specified.
+
+ This tries to call ``fileno()`` on all streams in the argument list,
+ and returns ``False`` if anything goes wrong.
+
+ This can happen, when, e.g., the test framework replaces stdout with
+ a ``StringIO`` object.
+
+ We have to actually try this to see whether it works, rather than
+ checking for the fileno attribute, beacuse frameworks like pytest add
+ dummy fileno methods on their dummy file objects that return
+ ``UnsupportedOperationErrors``.
+
+ """
+ # test whether we can get fds for out and error
+ try:
+ for stream in streams:
+ stream.fileno()
+ return True
+ except BaseException:
+ return False
+
+
class log_output(object):
- """Spawns a daemon that reads from a pipe and writes to a file
-
- Usage:
- # Spawns the daemon
- with log_output('logfile.txt', 'w') as log_redirection:
- # do things ... output is not redirected
- with log_redirection:
- # do things ... output will be logged
-
- or:
- with log_output('logfile.txt', echo=True) as log_redirection:
- # do things ... output is not redirected
- with log_redirection:
- # do things ... output will be logged
- # and also printed to stdout.
-
- Opens a stream in 'w' mode at daemon spawning and closes it at
- daemon joining. If echo is True, also prints the output to stdout.
+ """Context manager that logs its output to a file.
+
+ In the simplest case, the usage looks like this::
+
+ with log_output('logfile.txt'):
+ # do things ... output will be logged
+
+ Any output from the with block will be redirected to ``logfile.txt``.
+ If you also want the output to be echoed to ``stdout``, use the
+ ``echo`` parameter::
+
+ with log_output('logfile.txt', echo=True):
+ # do things ... output will be logged and printed out
+
+ And, if you just want to echo *some* stuff from the parent, use
+ ``force_echo``::
+
+ with log_output('logfile.txt', echo=False) as logger:
+ # do things ... output will be logged
+
+ with logger.force_echo():
+ # things here will be echoed *and* logged
+
+ Under the hood, we spawn a daemon and set up a pipe between this
+ process and the daemon. The daemon writes our output to both the
+ file and to stdout (if echoing). The parent process can communicate
+ with the daemon to tell it when and when not to echo; this is what
+ force_echo does. You can also enable/disable echoing by typing 'v'.
+
+ We try to use OS-level file descriptors to do the redirection, but if
+ stdout or stderr has been set to some Python-level file object, we
+ use Python-level redirection instead. This allows the redirection to
+ work within test frameworks like nose and pytest.
"""
- def __init__(
- self,
- filename,
- echo=False,
- force_color=False,
- debug=False,
- input_stream=sys.stdin
- ):
- self.filename = filename
- # Various output options
+ def __init__(self, file_like=None, echo=False, debug=False, buffer=False):
+ """Create a new output log context manager.
+
+ Args:
+ file_like (str or stream): open file object or name of file where
+ output should be logged
+ echo (bool): whether to echo output in addition to logging it
+ debug (bool): whether to enable tty debug mode during logging
+ buffer (bool): pass buffer=True to skip unbuffering output; note
+ this doesn't set up any *new* buffering
+
+ log_output can take either a file object or a filename. If a
+ filename is passed, the file will be opened and closed entirely
+ within ``__enter__`` and ``__exit__``. If a file object is passed,
+ this assumes the caller owns it and will close it.
+
+ By default, we unbuffer sys.stdout and sys.stderr because the
+ logger will include output from executed programs and from python
+ calls. If stdout and stderr are buffered, their output won't be
+ printed in the right place w.r.t. output from commands.
+
+ Logger daemon is not started until ``__enter__()``.
+
+ """
+ self.file_like = file_like
self.echo = echo
- self.force_color = force_color
self.debug = debug
+ self.buffer = buffer
- # Default is to try file-descriptor reassignment unless the system
- # out/err streams do not have an associated file descriptor
- self.directAssignment = False
- self.read, self.write = os.pipe()
+ self._active = False # used to prevent re-entry
- # Needed to un-summon the daemon
- self.parent_pipe, self.child_pipe = multiprocessing.Pipe()
- # Input stream that controls verbosity interactively
- self.input_stream = input_stream
+ def __call__(self, file_like=None, echo=None, debug=None, buffer=None):
+ """Thie behaves the same as init. It allows a logger to be reused.
+
+ Arguments are the same as for ``__init__()``. Args here take
+ precedence over those passed to ``__init__()``.
+
+ With the ``__call__`` function, you can save state between uses
+ of a single logger. This is useful if you want to remember,
+ e.g., the echo settings for a prior ``with log_output()``::
+
+ logger = log_output()
+
+ with logger('foo.txt'):
+ # log things; user can change echo settings with 'v'
+
+ with logger('bar.txt'):
+ # log things; logger remembers prior echo settings.
+
+ """
+ if file_like is not None:
+ self.file_like = file_like
+ if echo is not None:
+ self.echo = echo
+ if debug is not None:
+ self.debug = debug
+ if buffer is not None:
+ self.buffer = buffer
+ return self
def __enter__(self):
+ if self._active:
+ raise RuntimeError("Can't re-enter the same log_output!")
+
+ if self.file_like is None:
+ raise RuntimeError(
+ "file argument must be set by either __init__ or __call__")
+
+ # set up a stream for the daemon to write to
+ self.close_log_in_parent = True
+ self.write_log_in_parent = False
+ if isinstance(self.file_like, string_types):
+ self.log_file = open(self.file_like, 'w')
+
+ elif _file_descriptors_work(self.file_like):
+ self.log_file = self.file_like
+ self.close_log_in_parent = False
+
+ else:
+ self.log_file = StringIO()
+ self.write_log_in_parent = True
+
+ # record parent color settings before redirecting. We do this
+ # because color output depends on whether the *original* stdout
+ # is a TTY. New stdout won't be a TTY so we force colorization.
+ self._saved_color = tty.color._force_color
+ forced_color = tty.color.get_color_when()
+
+ # also record parent debug settings -- in case the logger is
+ # forcing debug output.
+ self._saved_debug = tty._debug
+
+ # OS-level pipe for redirecting output to logger
+ self.read_fd, self.write_fd = os.pipe()
+
+ # Multiprocessing pipe for communication back from the daemon
+ # Currently only used to save echo value between uses
+ self.parent, self.child = multiprocessing.Pipe()
+
# Sets a daemon that writes to file what it reads from a pipe
try:
- fwd_input_stream = lang.duplicate_stream(self.input_stream)
- self.p = multiprocessing.Process(
- target=self._spawn_writing_daemon,
- args=(self.read, fwd_input_stream),
- name='logger_daemon'
- )
- self.p.daemon = True
- self.p.start()
+ # need to pass this b/c multiprocessing closes stdin in child.
+ try:
+ input_stream = os.fdopen(os.dup(sys.stdin.fileno()))
+ except BaseException:
+ input_stream = None # just don't forward input if this fails
+
+ self.process = multiprocessing.Process(
+ target=self._writer_daemon, args=(input_stream,))
+ self.process.daemon = True # must set before start()
+ self.process.start()
+ os.close(self.read_fd) # close in the parent process
+
finally:
- fwd_input_stream.close()
- return log_output.OutputRedirection(self)
+ if input_stream:
+ input_stream.close()
+
+ # Flush immediately before redirecting so that anything buffered
+ # goes to the original stream
+ sys.stdout.flush()
+ sys.stderr.flush()
+
+ # Now do the actual output rediction.
+ self.use_fds = _file_descriptors_work(sys.stdout, sys.stderr)
+ if self.use_fds:
+ # We try first to use OS-level file descriptors, as this
+ # redirects output for subprocesses and system calls.
+
+ # Save old stdout and stderr file descriptors
+ self._saved_stdout = os.dup(sys.stdout.fileno())
+ self._saved_stderr = os.dup(sys.stderr.fileno())
+
+ # redirect to the pipe we created above
+ os.dup2(self.write_fd, sys.stdout.fileno())
+ os.dup2(self.write_fd, sys.stderr.fileno())
+ os.close(self.write_fd)
+
+ else:
+ # Handle I/O the Python way. This won't redirect lower-level
+ # output, but it's the best we can do, and the caller
+ # shouldn't expect any better, since *they* have apparently
+ # redirected I/O the Python way.
+
+ # Save old stdout and stderr file objects
+ self._saved_stdout = sys.stdout
+ self._saved_stderr = sys.stderr
+
+ # create a file object for the pipe; redirect to it.
+ pipe_fd_out = os.fdopen(self.write_fd, 'w')
+ sys.stdout = pipe_fd_out
+ sys.stderr = pipe_fd_out
+
+ # Unbuffer stdout and stderr at the Python level
+ if not self.buffer:
+ sys.stdout = Unbuffered(sys.stdout)
+ sys.stderr = Unbuffered(sys.stderr)
+
+ # Force color and debug settings now that we have redirected.
+ tty.color.set_color_when(forced_color)
+ tty._debug = self.debug
+
+ # track whether we're currently inside this log_output
+ self._active = True
+
+ # return this log_output object so that the user can do things
+ # like temporarily echo some ouptut.
+ return self
def __exit__(self, exc_type, exc_val, exc_tb):
- self.parent_pipe.send(True)
- self.p.join(60.0) # 1 minute to join the child
-
- def _spawn_writing_daemon(self, read, input_stream):
- # Parent: read from child, skip the with block.
- read_file = os.fdopen(read, 'r', 0)
- with open(self.filename, 'w') as log_file:
- with keyboard_input(input_stream):
+ # Flush any buffered output to the logger daemon.
+ sys.stdout.flush()
+ sys.stderr.flush()
+
+ # restore previous output settings, either the low-level way or
+ # the python way
+ if self.use_fds:
+ os.dup2(self._saved_stdout, sys.stdout.fileno())
+ os.close(self._saved_stdout)
+
+ os.dup2(self._saved_stderr, sys.stderr.fileno())
+ os.close(self._saved_stderr)
+ else:
+ sys.stdout = self._saved_stdout
+ sys.stderr = self._saved_stderr
+
+ # print log contents in parent if needed.
+ if self.write_log_in_parent:
+ string = self.parent.recv()
+ self.file_like.write(string)
+
+ if self.close_log_in_parent:
+ self.log_file.close()
+
+ # recover and store echo settings from the child before it dies
+ self.echo = self.parent.recv()
+
+ # join the daemon process. The daemon will quit automatically
+ # when the write pipe is closed; we just wait for it here.
+ self.process.join()
+
+ # restore old color and debug settings
+ tty.color._force_color = self._saved_color
+ tty._debug = self._saved_debug
+
+ self._active = False # safe to enter again
+
+ @contextmanager
+ def force_echo(self):
+ """Context manager to force local echo, even if echo is off."""
+ if not self._active:
+ raise RuntimeError(
+ "Can't call force_echo() outside log_output region!")
+
+ # This uses the xon/xoff to highlight regions to be echoed in the
+ # output. We us these control characters rather than, say, a
+ # separate pipe, because they're in-band and assured to appear
+ # exactly before and after the text we want to echo.
+ sys.stdout.write(xon)
+ sys.stdout.flush()
+ yield
+ sys.stdout.write(xoff)
+ sys.stdout.flush()
+
+ def _writer_daemon(self, stdin):
+ """Daemon that writes output to the log file and stdout."""
+ # Use line buffering (3rd param = 1) since Python 3 has a bug
+ # that prevents unbuffered text I/O.
+ in_pipe = os.fdopen(self.read_fd, 'r', 1)
+ os.close(self.write_fd)
+
+ echo = self.echo # initial echo setting, user-controllable
+ force_echo = False # parent can force echo for certain output
+
+ # list of streams to select from
+ istreams = [in_pipe, stdin] if stdin else [in_pipe]
+
+ log_file = self.log_file
+ try:
+ with keyboard_input(stdin):
while True:
- # Without the last parameter (timeout) select will wait
- # until at least one of the two streams are ready. This
- # may cause the function to hang.
- rlist, _, _ = select.select(
- [read_file, input_stream], [], [], 0
- )
+ # Without the last parameter (timeout) select will
+ # wait until at least one of the two streams are
+ # ready. This may cause the function to hang.
+ rlist, _, xlist = select.select(istreams, [], [], 0)
# Allow user to toggle echo with 'v' key.
# Currently ignores other chars.
- if input_stream in rlist:
- if input_stream.read(1) == 'v':
- self.echo = not self.echo
+ if stdin in rlist:
+ if stdin.read(1) == 'v':
+ echo = not echo
# Handle output from the with block process.
- if read_file in rlist:
- # If we arrive here it means that
- # read_file was ready for reading : it
- # should never happen that line is false-ish
- line = read_file.readline()
-
- # Echo to stdout if requested.
- if self.echo:
+ if in_pipe in rlist:
+ # If we arrive here it means that in_pipe was
+ # ready for reading : it should never happen that
+ # line is false-ish
+ line = in_pipe.readline()
+ if not line:
+ break # EOF
+
+ # find control characters and strip them.
+ controls = control.findall(line)
+ line = re.sub(control, '', line)
+
+ # Echo to stdout if requested or forced
+ if echo or force_echo:
sys.stdout.write(line)
+ sys.stdout.flush()
# Stripped output to log file.
log_file.write(_strip(line))
log_file.flush()
- if self.child_pipe.poll():
- break
-
- def __del__(self):
- """Closes the pipes"""
- os.close(self.write)
- os.close(self.read)
+ if xon in controls:
+ force_echo = True
+ if xoff in controls:
+ force_echo = False
+ except BaseException:
+ tty.error("Exception occurred in writer daemon!")
+ traceback.print_exc()
- class OutputRedirection(object):
-
- def __init__(self, other):
- self.__dict__.update(other.__dict__)
-
- def __enter__(self):
- """Redirect output from the with block to a file.
+ finally:
+ # send written data back to parent if we used a StringIO
+ if self.write_log_in_parent:
+ self.child.send(log_file.getvalue())
+ log_file.close()
- Hijacks stdout / stderr and writes to the pipe
- connected to the logger daemon
- """
- # remember these values for later.
- self._force_color = color._force_color
- self._debug = tty._debug
- # Redirect this output to a pipe
- write = self.write
- try:
- # Save old stdout and stderr
- self._stdout = os.dup(sys.stdout.fileno())
- self._stderr = os.dup(sys.stderr.fileno())
-
- # redirect to the pipe.
- os.dup2(write, sys.stdout.fileno())
- os.dup2(write, sys.stderr.fileno())
- except AttributeError:
- self.directAssignment = True
- self._stdout = sys.stdout
- self._stderr = sys.stderr
- output_redirect = os.fdopen(write, 'w')
- sys.stdout = output_redirect
- sys.stderr = output_redirect
- if self.force_color:
- color._force_color = True
- if self.debug:
- tty._debug = True
-
- def __exit__(self, exc_type, exception, traceback):
- """Plugs back the original file descriptors
- for stdout and stderr
- """
- # Flush the log to disk.
- sys.stdout.flush()
- sys.stderr.flush()
- if self.directAssignment:
- # We seem to need this only to pass test/install.py
- sys.stdout = self._stdout
- sys.stderr = self._stderr
- else:
- os.dup2(self._stdout, sys.stdout.fileno())
- os.dup2(self._stderr, sys.stderr.fileno())
-
- # restore output options.
- color._force_color = self._force_color
- tty._debug = self._debug
+ # send echo value back to the parent so it can be preserved.
+ self.child.send(echo)
diff --git a/lib/spack/spack/__init__.py b/lib/spack/spack/__init__.py
index 34a7b01616..d389b07b06 100644
--- a/lib/spack/spack/__init__.py
+++ b/lib/spack/spack/__init__.py
@@ -1,14 +1,14 @@
# flake8: noqa
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import multiprocessing
import os
import sys
import tempfile
@@ -46,6 +47,7 @@ build_env_path = join_path(lib_path, "env")
module_path = join_path(lib_path, "spack")
platform_path = join_path(module_path, 'platforms')
compilers_path = join_path(module_path, "compilers")
+build_systems_path = join_path(module_path, 'build_systems')
operating_system_path = join_path(module_path, 'operating_systems')
test_path = join_path(module_path, "test")
hooks_path = join_path(module_path, "hooks")
@@ -62,8 +64,15 @@ mock_packages_path = join_path(repos_path, "builtin.mock")
user_config_path = os.path.expanduser('~/.spack')
prefix = spack_root
-opt_path = join_path(prefix, "opt")
-etc_path = join_path(prefix, "etc")
+opt_path = join_path(prefix, "opt")
+etc_path = join_path(prefix, "etc")
+system_etc_path = '/etc'
+
+# GPG paths.
+gpg_keys_path = join_path(var_path, "gpg")
+mock_gpg_data_path = join_path(var_path, "gpg.mock", "data")
+mock_gpg_keys_path = join_path(var_path, "gpg.mock", "keys")
+gpg_path = join_path(opt_path, "spack", "gpg")
#-----------------------------------------------------------------------------
@@ -77,25 +86,24 @@ import spack.error
import spack.config
import spack.fetch_strategy
from spack.file_cache import FileCache
-from spack.package_prefs import PreferredPackages
from spack.abi import ABI
from spack.concretize import DefaultConcretizer
from spack.version import Version
from spack.util.path import canonicalize_path
-
+from spack.package_prefs import PackageTesting
#-----------------------------------------------------------------------------
# Initialize various data structures & objects at the core of Spack.
#-----------------------------------------------------------------------------
# Version information
-spack_version = Version("0.10.0")
+spack_version = Version("0.11.0")
# Set up the default packages database.
try:
repo = spack.repository.RepoPath()
sys.meta_path.append(repo)
-except spack.error.SpackError, e:
+except spack.error.SpackError as e:
tty.die('while initializing Spack RepoPath:', e.message)
@@ -126,6 +134,13 @@ misc_cache_path = canonicalize_path(
misc_cache = FileCache(misc_cache_path)
+binary_cache_retrieved_specs = set()
+
+
+#: Directories where to search for templates
+template_dirs = spack.config.get_config('config')['template_dirs']
+template_dirs = [canonicalize_path(x) for x in template_dirs]
+
# If this is enabled, tools that use SSL should not verify
# certifiates. e.g., curl should use the -k option.
insecure = not _config.get('verify_ssl', True)
@@ -141,6 +156,15 @@ do_checksum = _config.get('checksum', True)
dirty = _config.get('dirty', False)
+# The number of jobs to use when building in parallel.
+# By default, use all cores on the machine.
+build_jobs = _config.get('build_jobs', multiprocessing.cpu_count())
+
+
+# Needed for test dependencies
+package_testing = PackageTesting()
+
+
#-----------------------------------------------------------------------------
# When packages call 'from spack import *', this extra stuff is brought in.
#
@@ -155,20 +179,45 @@ dirty = _config.get('dirty', False)
#-----------------------------------------------------------------------------
__all__ = []
-from spack.package import Package
+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
+from spack.build_systems.scons import SConsPackage
+from spack.build_systems.waf import WafPackage
from spack.build_systems.python import PythonPackage
from spack.build_systems.r import RPackage
-__all__ += ['Package', 'CMakePackage', 'AutotoolsPackage', 'MakefilePackage',
- 'PythonPackage', 'RPackage']
+from spack.build_systems.perl import PerlPackage
+from spack.build_systems.intel import IntelPackage
+
+__all__ += [
+ 'run_before',
+ 'run_after',
+ 'on_package_attributes',
+ 'Package',
+ 'MakefilePackage',
+ 'AspellDictPackage',
+ 'AutotoolsPackage',
+ 'CMakePackage',
+ 'QMakePackage',
+ 'SConsPackage',
+ 'WafPackage',
+ 'PythonPackage',
+ 'RPackage',
+ 'PerlPackage',
+ 'IntelPackage',
+]
from spack.version import Version, ver
__all__ += ['Version', 'ver']
-from spack.spec import Spec, alldeps
-__all__ += ['Spec', 'alldeps']
+from spack.spec import Spec
+__all__ += ['Spec']
+
+from spack.dependency import all_deptypes
+__all__ += ['all_deptypes']
from spack.multimethod import when
__all__ += ['when']
@@ -185,8 +234,24 @@ import spack.util.executable
from spack.util.executable import *
__all__ += spack.util.executable.__all__
-# User's editor from the environment
-editor = Executable(os.environ.get("EDITOR", "vi"))
+
+# Set up the user's editor
+# $EDITOR environment variable has the highest precedence
+editor = os.environ.get('EDITOR')
+
+# if editor is not set, use some sensible defaults
+if editor is not None:
+ editor = Executable(editor)
+else:
+ editor = which('vim', 'vi', 'emacs', 'nano')
+
+# If there is no editor, only raise an error if we actually try to use it.
+if not editor:
+ def editor_not_found(*args, **kwargs):
+ raise EnvironmentError(
+ 'No text editor found! Please set the EDITOR environment variable '
+ 'to your preferred text editor.')
+ editor = editor_not_found
from spack.package import \
install_dependency_symlinks, flatten_dependencies, \
@@ -197,5 +262,5 @@ __all__ += [
# Add default values for attributes that would otherwise be modified from
# Spack main script
-debug = True
+debug = False
spack_working_dir = None
diff --git a/lib/spack/spack/abi.py b/lib/spack/spack/abi.py
index b3b1dd6d27..ad46e88e61 100644
--- a/lib/spack/spack/abi.py
+++ b/lib/spack/spack/abi.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,6 +29,7 @@ import spack.spec
from spack.build_environment import dso_suffix
from spack.spec import CompilerSpec
from spack.util.executable import Executable, ProcessError
+from spack.compilers.clang import Clang
from llnl.util.lang import memoized
@@ -44,7 +45,7 @@ class ABI(object):
@memoized
def _gcc_get_libstdcxx_version(self, version):
"""Returns gcc ABI compatibility info by getting the library version of
- a compiler's libstdc++.so or libgcc_s.so"""
+ a compiler's libstdc++ or libgcc_s"""
spec = CompilerSpec("gcc", version)
compilers = spack.compilers.compilers_for_spec(spec)
if not compilers:
@@ -62,8 +63,13 @@ class ABI(object):
else:
return None
try:
- output = rungcc("--print-file-name=%s" % libname,
- return_output=True)
+ # Some gcc's are actually clang and don't respond properly to
+ # --print-file-name (they just print the filename, not the
+ # full path). Ignore these and expect them to be handled as clang.
+ if Clang.default_version(rungcc.exe[0]) != 'unknown':
+ return None
+
+ output = rungcc("--print-file-name=%s" % libname, output=str)
except ProcessError:
return None
if not output:
diff --git a/lib/spack/spack/architecture.py b/lib/spack/spack/architecture.py
index e44e0dc109..62e2619d7f 100644
--- a/lib/spack/spack/architecture.py
+++ b/lib/spack/spack/architecture.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -254,7 +254,7 @@ class OperatingSystem(object):
def find_compilers(self, *paths):
"""
- Return a list of compilers found in the suppied paths.
+ Return a list of compilers found in the supplied paths.
This invokes the find() method for each Compiler class,
and appends the compilers detected to a list.
"""
@@ -287,7 +287,7 @@ class OperatingSystem(object):
# ensure all the version calls we made are cached in the parent
# process, as well. This speeds up Spack a lot.
- clist = reduce(lambda x, y: x + y, compiler_lists)
+ clist = [comp for cl in compiler_lists for comp in cl]
return clist
def find_compiler(self, cmp_cls, *path):
diff --git a/lib/spack/spack/binary_distribution.py b/lib/spack/spack/binary_distribution.py
new file mode 100644
index 0000000000..5a2db06424
--- /dev/null
+++ b/lib/spack/spack/binary_distribution.py
@@ -0,0 +1,527 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+import re
+import tarfile
+import yaml
+import shutil
+import platform
+
+import llnl.util.tty as tty
+from spack.util.gpg import Gpg
+from llnl.util.filesystem import mkdirp, join_path, install_tree
+from spack.util.web import spider
+import spack.cmd
+import spack
+from spack.stage import Stage
+import spack.fetch_strategy as fs
+from contextlib import closing
+import spack.util.gpg as gpg_util
+import hashlib
+from spack.util.executable import ProcessError
+import spack.relocate as relocate
+
+
+class NoOverwriteException(Exception):
+ pass
+
+
+class NoGpgException(Exception):
+ pass
+
+
+class PickKeyException(Exception):
+ pass
+
+
+class NoKeyException(Exception):
+ pass
+
+
+class NoVerifyException(Exception):
+ pass
+
+
+class NoChecksumException(Exception):
+ pass
+
+
+def has_gnupg2():
+ try:
+ gpg_util.Gpg.gpg()('--version', output=os.devnull)
+ return True
+ except ProcessError:
+ return False
+
+
+def buildinfo_file_name(prefix):
+ """
+ Filename of the binary package meta-data file
+ """
+ name = prefix + "/.spack/binary_distribution"
+ return name
+
+
+def read_buildinfo_file(prefix):
+ """
+ Read buildinfo file
+ """
+ filename = buildinfo_file_name(prefix)
+ with open(filename, 'r') as inputfile:
+ content = inputfile.read()
+ buildinfo = yaml.load(content)
+ return buildinfo
+
+
+def write_buildinfo_file(prefix, workdir, rel=False):
+ """
+ Create a cache file containing information
+ required for the relocation
+ """
+ text_to_relocate = []
+ binary_to_relocate = []
+ blacklist = (".spack", "man")
+ os_id = platform.system()
+ # Do this at during tarball creation to save time when tarball unpacked.
+ # Used by make_package_relative to determine binaries to change.
+ for root, dirs, files in os.walk(prefix, topdown=True):
+ dirs[:] = [d for d in dirs if d not in blacklist]
+ for filename in files:
+ path_name = os.path.join(root, filename)
+ filetype = relocate.get_filetype(path_name)
+ if relocate.needs_binary_relocation(filetype, os_id):
+ rel_path_name = os.path.relpath(path_name, prefix)
+ binary_to_relocate.append(rel_path_name)
+ elif relocate.needs_text_relocation(filetype):
+ rel_path_name = os.path.relpath(path_name, prefix)
+ text_to_relocate.append(rel_path_name)
+
+ # Create buildinfo data and write it to disk
+ buildinfo = {}
+ buildinfo['relative_rpaths'] = rel
+ buildinfo['buildpath'] = spack.store.layout.root
+ buildinfo['relocate_textfiles'] = text_to_relocate
+ buildinfo['relocate_binaries'] = binary_to_relocate
+ filename = buildinfo_file_name(workdir)
+ with open(filename, 'w') as outfile:
+ outfile.write(yaml.dump(buildinfo, default_flow_style=True))
+
+
+def tarball_directory_name(spec):
+ """
+ Return name of the tarball directory according to the convention
+ <os>-<architecture>/<compiler>/<package>-<version>/
+ """
+ return "%s/%s/%s-%s" % (spec.architecture,
+ str(spec.compiler).replace("@", "-"),
+ spec.name, spec.version)
+
+
+def tarball_name(spec, ext):
+ """
+ Return the name of the tarfile according to the convention
+ <os>-<architecture>-<package>-<dag_hash><ext>
+ """
+ return "%s-%s-%s-%s-%s%s" % (spec.architecture,
+ str(spec.compiler).replace("@", "-"),
+ spec.name,
+ spec.version,
+ spec.dag_hash(),
+ ext)
+
+
+def tarball_path_name(spec, ext):
+ """
+ Return the full path+name for a given spec according to the convention
+ <tarball_directory_name>/<tarball_name>
+ """
+ return os.path.join(tarball_directory_name(spec),
+ tarball_name(spec, ext))
+
+
+def checksum_tarball(file):
+ # calculate sha256 hash of tar file
+ BLOCKSIZE = 65536
+ hasher = hashlib.sha256()
+ with open(file, 'rb') as tfile:
+ buf = tfile.read(BLOCKSIZE)
+ while len(buf) > 0:
+ hasher.update(buf)
+ buf = tfile.read(BLOCKSIZE)
+ return hasher.hexdigest()
+
+
+def sign_tarball(yes_to_all, key, force, specfile_path):
+ # Sign the packages if keys available
+ if not has_gnupg2():
+ raise NoGpgException()
+ else:
+ if key is None:
+ keys = Gpg.signing_keys()
+ if len(keys) == 1:
+ key = keys[0]
+ if len(keys) > 1:
+ raise PickKeyException()
+ if len(keys) == 0:
+ raise NoKeyException()
+ if os.path.exists('%s.asc' % specfile_path):
+ if force:
+ os.remove('%s.asc' % specfile_path)
+ else:
+ raise NoOverwriteException('%s.asc' % specfile_path)
+ Gpg.sign(key, specfile_path, '%s.asc' % specfile_path)
+
+
+def generate_index(outdir, indexfile_path):
+ f = open(indexfile_path, 'w')
+ header = """<html>\n
+<head>\n</head>\n
+<list>\n"""
+ footer = "</list>\n</html>\n"
+ paths = os.listdir(outdir + '/build_cache')
+ f.write(header)
+ for path in paths:
+ rel = os.path.basename(path)
+ f.write('<li><a href="%s"> %s</a>\n' % (rel, rel))
+ f.write(footer)
+ f.close()
+
+
+def build_tarball(spec, outdir, force=False, rel=False, yes_to_all=False,
+ key=None):
+ """
+ Build a tarball from given spec and put it into the directory structure
+ used at the mirror (following <tarball_directory_name>).
+ """
+ # set up some paths
+ tarfile_name = tarball_name(spec, '.tar.gz')
+ tarfile_dir = join_path(outdir, "build_cache",
+ tarball_directory_name(spec))
+ tarfile_path = join_path(tarfile_dir, tarfile_name)
+ mkdirp(tarfile_dir)
+ spackfile_path = os.path.join(
+ outdir, "build_cache", tarball_path_name(spec, '.spack'))
+ if os.path.exists(spackfile_path):
+ if force:
+ os.remove(spackfile_path)
+ else:
+ raise NoOverwriteException(str(spackfile_path))
+ # need to copy the spec file so the build cache can be downloaded
+ # without concretizing with the current spack packages
+ # and preferences
+ spec_file = join_path(spec.prefix, ".spack", "spec.yaml")
+ specfile_name = tarball_name(spec, '.spec.yaml')
+ specfile_path = os.path.realpath(
+ join_path(outdir, "build_cache", specfile_name))
+ indexfile_path = join_path(outdir, "build_cache", "index.html")
+ if os.path.exists(specfile_path):
+ if force:
+ os.remove(specfile_path)
+ else:
+ raise NoOverwriteException(str(specfile_path))
+ # make a copy of the install directory to work with
+ workdir = join_path(outdir, os.path.basename(spec.prefix))
+ if os.path.exists(workdir):
+ shutil.rmtree(workdir)
+ install_tree(spec.prefix, workdir, symlinks=True)
+
+ # create info for later relocation and create tar
+ write_buildinfo_file(spec.prefix, workdir, rel=rel)
+
+ # optinally make the paths in the binaries relative to each other
+ # in the spack install tree before creating tarball
+ if rel:
+ make_package_relative(workdir, spec.prefix)
+ # create compressed tarball of the install prefix
+ with closing(tarfile.open(tarfile_path, 'w:gz')) as tar:
+ tar.add(name='%s' % workdir,
+ arcname='%s' % os.path.basename(workdir))
+ # remove copy of install directory
+ shutil.rmtree(workdir)
+
+ # get the sha256 checksum of the tarball
+ checksum = checksum_tarball(tarfile_path)
+
+ # add sha256 checksum to spec.yaml
+ spec_dict = {}
+ with open(spec_file, 'r') as inputfile:
+ content = inputfile.read()
+ spec_dict = yaml.load(content)
+ bchecksum = {}
+ bchecksum['hash_algorithm'] = 'sha256'
+ bchecksum['hash'] = checksum
+ spec_dict['binary_cache_checksum'] = bchecksum
+ with open(specfile_path, 'w') as outfile:
+ outfile.write(yaml.dump(spec_dict))
+ signed = False
+ if not yes_to_all:
+ # sign the tarball and spec file with gpg
+ try:
+ sign_tarball(yes_to_all, key, force, specfile_path)
+ signed = True
+ except NoGpgException:
+ raise NoGpgException()
+ except PickKeyException:
+ raise PickKeyException()
+ except NoKeyException():
+ raise NoKeyException()
+ # put tarball, spec and signature files in .spack archive
+ with closing(tarfile.open(spackfile_path, 'w')) as tar:
+ tar.add(name='%s' % tarfile_path, arcname='%s' % tarfile_name)
+ tar.add(name='%s' % specfile_path, arcname='%s' % specfile_name)
+ if signed:
+ tar.add(name='%s.asc' % specfile_path,
+ arcname='%s.asc' % specfile_name)
+
+ # cleanup file moved to archive
+ os.remove(tarfile_path)
+ if signed:
+ os.remove('%s.asc' % specfile_path)
+
+ # create an index.html for the build_cache directory so specs can be found
+ if os.path.exists(indexfile_path):
+ os.remove(indexfile_path)
+ generate_index(outdir, indexfile_path)
+ return None
+
+
+def download_tarball(spec):
+ """
+ Download binary tarball for given package into stage area
+ Return True if successful
+ """
+ mirrors = spack.config.get_config('mirrors')
+ if len(mirrors) == 0:
+ tty.die("Please add a spack mirror to allow " +
+ "download of pre-compiled packages.")
+ tarball = tarball_path_name(spec, '.spack')
+ for key in mirrors:
+ url = mirrors[key] + "/build_cache/" + tarball
+ # stage the tarball into standard place
+ stage = Stage(url, name="build_cache", keep=True)
+ try:
+ stage.fetch()
+ return stage.save_filename
+ except fs.FetchError:
+ continue
+ return None
+
+
+def make_package_relative(workdir, prefix):
+ """
+ Change paths in binaries to relative paths
+ """
+ buildinfo = read_buildinfo_file(workdir)
+ old_path = buildinfo['buildpath']
+ orig_path_names = list()
+ cur_path_names = list()
+ for filename in buildinfo['relocate_binaries']:
+ orig_path_names.append(os.path.join(prefix, filename))
+ cur_path_names.append(os.path.join(workdir, filename))
+ relocate.make_binary_relative(cur_path_names, orig_path_names,
+ old_path)
+
+
+def relocate_package(prefix):
+ """
+ Relocate the given package
+ """
+ buildinfo = read_buildinfo_file(prefix)
+ new_path = spack.store.layout.root
+ old_path = buildinfo['buildpath']
+ rel = buildinfo.get('relative_rpaths', False)
+ if new_path == old_path and not rel:
+ return
+
+ tty.msg("Relocating package from",
+ "%s to %s." % (old_path, new_path))
+ path_names = set()
+ for filename in buildinfo['relocate_textfiles']:
+ path_name = os.path.join(prefix, filename)
+ # Don't add backup files generated by filter_file during install step.
+ if not path_name.endswith('~'):
+ path_names.add(path_name)
+ relocate.relocate_text(path_names, old_path, new_path)
+ # If the binary files in the package were not edited to use
+ # relative RPATHs, then the RPATHs need to be relocated
+ if not rel:
+ path_names = set()
+ for filename in buildinfo['relocate_binaries']:
+ path_name = os.path.join(prefix, filename)
+ path_names.add(path_name)
+ relocate.relocate_binary(path_names, old_path, new_path)
+
+
+def extract_tarball(spec, filename, yes_to_all=False, force=False):
+ """
+ extract binary tarball for given package into install area
+ """
+ installpath = spec.prefix
+ if os.path.exists(installpath):
+ if force:
+ shutil.rmtree(installpath)
+ else:
+ raise NoOverwriteException(str(installpath))
+ stagepath = os.path.dirname(filename)
+ spackfile_name = tarball_name(spec, '.spack')
+ spackfile_path = os.path.join(stagepath, spackfile_name)
+ tarfile_name = tarball_name(spec, '.tar.gz')
+ tarfile_path = os.path.join(stagepath, tarfile_name)
+ specfile_name = tarball_name(spec, '.spec.yaml')
+ specfile_path = os.path.join(stagepath, specfile_name)
+
+ with closing(tarfile.open(spackfile_path, 'r')) as tar:
+ tar.extractall(stagepath)
+
+ if not yes_to_all:
+ if os.path.exists('%s.asc' % specfile_path):
+ Gpg.verify('%s.asc' % specfile_path, specfile_path)
+ os.remove(specfile_path + '.asc')
+ else:
+ raise NoVerifyException()
+
+ # get the sha256 checksum of the tarball
+ checksum = checksum_tarball(tarfile_path)
+
+ # get the sha256 checksum recorded at creation
+ spec_dict = {}
+ with open(specfile_path, 'r') as inputfile:
+ content = inputfile.read()
+ spec_dict = yaml.load(content)
+ bchecksum = spec_dict['binary_cache_checksum']
+
+ # if the checksums don't match don't install
+ if bchecksum['hash'] != checksum:
+ raise NoChecksumException()
+
+ # delay creating installpath until verification is complete
+ mkdirp(installpath)
+ with closing(tarfile.open(tarfile_path, 'r')) as tar:
+ tar.extractall(path=join_path(installpath, '..'))
+
+ os.remove(tarfile_path)
+ os.remove(specfile_path)
+ relocate_package(installpath)
+
+
+def get_specs(force=False):
+ """
+ Get spec.yaml's for build caches available on mirror
+ """
+ if spack.binary_cache_retrieved_specs:
+ tty.debug("Using previously-retrieved specs")
+ previously_retrieved = spack.binary_cache_retrieved_specs
+ return previously_retrieved
+
+ mirrors = spack.config.get_config('mirrors')
+ if len(mirrors) == 0:
+ tty.warn("No Spack mirrors are currently configured")
+ return {}
+
+ path = str(spack.architecture.sys_type())
+ urls = set()
+ for key in mirrors:
+ url = mirrors[key]
+ if url.startswith('file'):
+ mirror = url.replace('file://', '') + '/build_cache'
+ tty.msg("Finding buildcaches in %s" % mirror)
+ files = os.listdir(mirror)
+ for file in files:
+ if re.search('spec.yaml', file):
+ link = 'file://' + mirror + '/' + file
+ urls.add(link)
+ else:
+ tty.msg("Finding buildcaches on %s" % url)
+ p, links = spider(url + "/build_cache")
+ for link in links:
+ if re.search("spec.yaml", link) and re.search(path, link):
+ urls.add(link)
+
+ specs = set()
+ for link in urls:
+ with Stage(link, name="build_cache", keep=True) as stage:
+ if force and os.path.exists(stage.save_filename):
+ os.remove(stage.save_filename)
+ if not os.path.exists(stage.save_filename):
+ try:
+ stage.fetch()
+ except fs.FetchError:
+ continue
+ with open(stage.save_filename, 'r') as f:
+ # read the spec from the build cache file. All specs
+ # in build caches are concrete (as they are built) so
+ # we need to mark this spec concrete on read-in.
+ spec = spack.spec.Spec.from_yaml(f)
+ spec._mark_concrete()
+ specs.add(spec)
+
+ spack.binary_cache_retrieved_specs = specs
+ return specs
+
+
+def get_keys(install=False, yes_to_all=False, force=False):
+ """
+ Get pgp public keys available on mirror
+ """
+ mirrors = spack.config.get_config('mirrors')
+ if len(mirrors) == 0:
+ tty.die("Please add a spack mirror to allow " +
+ "download of build caches.")
+
+ keys = set()
+ for key in mirrors:
+ url = mirrors[key]
+ if url.startswith('file'):
+ mirror = url.replace('file://', '') + '/build_cache'
+ tty.msg("Finding public keys in %s" % mirror)
+ files = os.listdir(mirror)
+ for file in files:
+ if re.search('\.key', file):
+ link = 'file://' + mirror + '/' + file
+ keys.add(link)
+ else:
+ tty.msg("Finding public keys on %s" % url)
+ p, links = spider(url + "/build_cache", depth=1)
+ for link in links:
+ if re.search("\.key", link):
+ keys.add(link)
+ for link in keys:
+ with Stage(link, name="build_cache", keep=True) as stage:
+ if os.path.exists(stage.save_filename) and force:
+ os.remove(stage.save_filename)
+ if not os.path.exists(stage.save_filename):
+ try:
+ stage.fetch()
+ except fs.FetchError:
+ continue
+ tty.msg('Found key %s' % link)
+ if install:
+ if yes_to_all:
+ Gpg.trust(stage.save_filename)
+ tty.msg('Added this key to trusted keys.')
+ else:
+ tty.msg('Will not add this key to trusted keys.'
+ 'Use -y to override')
diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py
index 3e6dc12b35..f1cf0d5049 100644
--- a/lib/spack/spack/build_environment.py
+++ b/lib/spack/spack/build_environment.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -57,16 +57,21 @@ import os
import shutil
import sys
import traceback
+from six import iteritems
+from six import StringIO
-import llnl.util.lang as lang
import llnl.util.tty as tty
-from llnl.util.filesystem import *
+from llnl.util.tty.color import colorize
+from llnl.util.filesystem import join_path, mkdirp, install, install_tree
import spack
import spack.store
from spack.environment import EnvironmentModifications, validate
-from spack.util.environment import *
-from spack.util.executable import Executable, which
+from spack.util.environment import env_flag, filter_system_paths, get_path
+from spack.util.executable import Executable
+from spack.util.module_cmd import load_module, get_path_from_module
+from spack.util.log_parse import parse_log_events, make_log_context
+
#
# This can be set by the user to globally disable parallel builds.
@@ -86,6 +91,7 @@ SPACK_PREFIX = 'SPACK_PREFIX'
SPACK_INSTALL = 'SPACK_INSTALL'
SPACK_DEBUG = 'SPACK_DEBUG'
SPACK_SHORT_SPEC = 'SPACK_SHORT_SPEC'
+SPACK_DEBUG_LOG_ID = 'SPACK_DEBUG_LOG_ID'
SPACK_DEBUG_LOG_DIR = 'SPACK_DEBUG_LOG_DIR'
@@ -119,67 +125,6 @@ class MakeExecutable(Executable):
return super(MakeExecutable, self).__call__(*args, **kwargs)
-def load_module(mod):
- """Takes a module name and removes modules until it is possible to
- load that module. It then loads the provided module. Depends on the
- modulecmd implementation of modules used in cray and lmod.
- """
- # Create an executable of the module command that will output python code
- modulecmd = which('modulecmd')
- modulecmd.add_default_arg('python')
-
- # Read the module and remove any conflicting modules
- # We do this without checking that they are already installed
- # for ease of programming because unloading a module that is not
- # loaded does nothing.
- text = modulecmd('show', mod, output=str, error=str).split()
- for i, word in enumerate(text):
- if word == 'conflict':
- exec(compile(modulecmd('unload', text[i + 1], output=str,
- error=str), '<string>', 'exec'))
- # Load the module now that there are no conflicts
- load = modulecmd('load', mod, output=str, error=str)
- exec(compile(load, '<string>', 'exec'))
-
-
-def get_path_from_module(mod):
- """Inspects a TCL module for entries that indicate the absolute path
- at which the library supported by said module can be found.
- """
- # Create a modulecmd executable
- modulecmd = which('modulecmd')
- modulecmd.add_default_arg('python')
-
- # Read the module
- text = modulecmd('show', mod, output=str, error=str).split('\n')
- # If it lists its package directory, return that
- for line in text:
- if line.find(mod.upper() + '_DIR') >= 0:
- words = line.split()
- return words[2]
-
- # If it lists a -rpath instruction, use that
- for line in text:
- rpath = line.find('-rpath/')
- if rpath >= 0:
- return line[rpath + 6:line.find('/lib')]
-
- # If it lists a -L instruction, use that
- for line in text:
- L = line.find('-L/')
- if L >= 0:
- return line[L + 2:line.find('/lib')]
-
- # If it sets the LD_LIBRARY_PATH or CRAY_LD_LIBRARY_PATH, use that
- for line in text:
- if line.find('LD_LIBRARY_PATH') >= 0:
- words = line.split()
- path = words[2]
- return path[:path.find('/lib')]
- # Unable to find module path
- return None
-
-
def set_compiler_environment_variables(pkg, env):
assert(pkg.spec.concrete)
compiler = pkg.compiler
@@ -223,59 +168,58 @@ def set_compiler_environment_variables(pkg, env):
env.set('SPACK_COMPILER_SPEC', str(pkg.spec.compiler))
- for mod in compiler.modules:
- load_module(mod)
-
compiler.setup_custom_environment(pkg, env)
return env
-def set_build_environment_variables(pkg, env, dirty=False):
- """
- This ensures a clean install environment when we build packages.
-
- Arguments:
- dirty -- skip unsetting the user's environment settings.
- """
- # Add spack build environment path with compiler wrappers first in
- # the path. We add both spack.env_path, which includes default
- # wrappers (cc, c++, f77, f90), AND a subdirectory containing
- # compiler-specific symlinks. The latter ensures that builds that
- # are sensitive to the *name* of the compiler see the right name
- # when we're building with the wrappers.
- #
- # Conflicts on case-insensitive systems (like "CC" and "cc") are
- # handled by putting one in the <build_env_path>/case-insensitive
- # directory. Add that to the path too.
- env_paths = []
- compiler_specific = join_path(spack.build_env_path, pkg.compiler.name)
- for item in [spack.build_env_path, compiler_specific]:
- env_paths.append(item)
- ci = join_path(item, 'case-insensitive')
- if os.path.isdir(ci):
- env_paths.append(ci)
+def set_build_environment_variables(pkg, env, dirty):
+ """Ensure a clean install environment when we build packages.
- env_paths = filter_system_paths(env_paths)
+ This involves unsetting pesky environment variables that may
+ affect the build. It also involves setting environment variables
+ used by Spack's compiler wrappers.
- for item in reversed(env_paths):
- env.prepend_path('PATH', item)
- env.set_path(SPACK_ENV_PATH, env_paths)
+ Args:
+ pkg: The package we are building
+ env: The build environment
+ dirty (bool): Skip unsetting the user's environment settings
+ """
+ # Gather information about various types of dependencies
+ build_deps = set(pkg.spec.dependencies(deptype=('build', 'test')))
+ link_deps = set(pkg.spec.traverse(root=False, deptype=('link')))
+ build_link_deps = build_deps | link_deps
+ rpath_deps = get_rpath_deps(pkg)
+
+ build_prefixes = [dep.prefix for dep in build_deps]
+ link_prefixes = [dep.prefix for dep in link_deps]
+ build_link_prefixes = [dep.prefix for dep in build_link_deps]
+ rpath_prefixes = [dep.prefix for dep in rpath_deps]
+
+ # add run-time dependencies of direct build-time dependencies:
+ for build_dep in build_deps:
+ for run_dep in build_dep.traverse(deptype='run'):
+ build_prefixes.append(run_dep.prefix)
+
+ # Filter out system paths: ['/', '/usr', '/usr/local']
+ # These paths can be introduced into the build when an external package
+ # is added as a dependency. The problem with these paths is that they often
+ # contain hundreds of other packages installed in the same directory.
+ # If these paths come first, they can overshadow Spack installations.
+ build_prefixes = filter_system_paths(build_prefixes)
+ link_prefixes = filter_system_paths(link_prefixes)
+ build_link_prefixes = filter_system_paths(build_link_prefixes)
+ rpath_prefixes = filter_system_paths(rpath_prefixes)
# Prefixes of all of the package's dependencies go in SPACK_DEPENDENCIES
- dep_prefixes = [d.prefix for d in
- pkg.spec.traverse(root=False, deptype=('build', 'link'))]
- dep_prefixes = filter_system_paths(dep_prefixes)
- env.set_path(SPACK_DEPENDENCIES, dep_prefixes)
+ env.set_path(SPACK_DEPENDENCIES, build_link_prefixes)
# These variables control compiler wrapper behavior
- env.set_path(SPACK_RPATH_DEPS, filter_system_paths([
- d.prefix for d in get_rpath_deps(pkg)]))
- env.set_path(SPACK_LINK_DEPS, filter_system_paths([
- d.prefix for d in pkg.spec.traverse(root=False, deptype=('link'))]))
+ env.set_path(SPACK_RPATH_DEPS, rpath_prefixes)
+ env.set_path(SPACK_LINK_DEPS, link_prefixes)
# Add dependencies to CMAKE_PREFIX_PATH
- env.set_path('CMAKE_PREFIX_PATH', dep_prefixes)
+ env.set_path('CMAKE_PREFIX_PATH', build_link_prefixes)
# Install prefix
env.set(SPACK_PREFIX, pkg.prefix)
@@ -283,7 +227,7 @@ def set_build_environment_variables(pkg, env, dirty=False):
# Install root prefix
env.set(SPACK_INSTALL, spack.store.root)
- # Stuff in here sanitizes the build environemnt to eliminate
+ # Stuff in here sanitizes the build environment to eliminate
# anything the user has set that may interfere.
if not dirty:
# Remove these vars from the environment during build because they
@@ -310,7 +254,7 @@ def set_build_environment_variables(pkg, env, dirty=False):
environment = compiler.environment
if 'set' in environment:
env_to_set = environment['set']
- for key, value in env_to_set.iteritems():
+ for key, value in iteritems(env_to_set):
env.set('SPACK_ENV_SET_%s' % key, value)
env.set('%s' % key, value)
# Let shell know which variables to set
@@ -322,28 +266,48 @@ def set_build_environment_variables(pkg, env, dirty=False):
env.set('SPACK_COMPILER_EXTRA_RPATHS', extra_rpaths)
# Add bin directories from dependencies to the PATH for the build.
- bin_dirs = reversed(filter(os.path.isdir, [
- '%s/bin' % d.prefix for d in pkg.spec.dependencies(deptype='build')]))
- bin_dirs = filter_system_bin_paths(bin_dirs)
- for item in bin_dirs:
+ for prefix in build_prefixes:
+ for dirname in ['bin', 'bin64']:
+ bin_dir = os.path.join(prefix, dirname)
+ if os.path.isdir(bin_dir):
+ env.prepend_path('PATH', bin_dir)
+
+ # Add spack build environment path with compiler wrappers first in
+ # the path. We add both spack.env_path, which includes default
+ # wrappers (cc, c++, f77, f90), AND a subdirectory containing
+ # compiler-specific symlinks. The latter ensures that builds that
+ # are sensitive to the *name* of the compiler see the right name
+ # when we're building with the wrappers.
+ #
+ # Conflicts on case-insensitive systems (like "CC" and "cc") are
+ # handled by putting one in the <build_env_path>/case-insensitive
+ # directory. Add that to the path too.
+ env_paths = []
+ compiler_specific = join_path(spack.build_env_path, pkg.compiler.name)
+ for item in [spack.build_env_path, compiler_specific]:
+ env_paths.append(item)
+ ci = join_path(item, 'case-insensitive')
+ if os.path.isdir(ci):
+ env_paths.append(ci)
+
+ for item in reversed(env_paths):
env.prepend_path('PATH', item)
+ env.set_path(SPACK_ENV_PATH, env_paths)
# Working directory for the spack command itself, for debug logs.
if spack.debug:
env.set(SPACK_DEBUG, 'TRUE')
env.set(SPACK_SHORT_SPEC, pkg.spec.short_spec)
+ env.set(SPACK_DEBUG_LOG_ID, pkg.spec.format('${PACKAGE}-${HASH:7}'))
env.set(SPACK_DEBUG_LOG_DIR, spack.spack_working_dir)
# Add any pkgconfig directories to PKG_CONFIG_PATH
- for pre in dep_prefixes:
+ for prefix in build_link_prefixes:
for directory in ('lib', 'lib64', 'share'):
- pcdir = join_path(pre, directory, 'pkgconfig')
+ pcdir = join_path(prefix, directory, 'pkgconfig')
if os.path.isdir(pcdir):
env.prepend_path('PKG_CONFIG_PATH', pcdir)
- if pkg.architecture.target.module_name:
- load_module(pkg.architecture.target.module_name)
-
return env
@@ -352,7 +316,7 @@ def set_module_variables_for_package(pkg, module):
This makes things easier for package writers.
"""
# number of jobs spack will build with.
- jobs = multiprocessing.cpu_count()
+ jobs = spack.build_jobs
if not pkg.parallel:
jobs = 1
elif pkg.make_jobs:
@@ -365,6 +329,7 @@ def set_module_variables_for_package(pkg, module):
m.make = MakeExecutable('make', jobs)
m.gmake = MakeExecutable('gmake', jobs)
m.scons = MakeExecutable('scons', jobs)
+ m.ninja = MakeExecutable('ninja', jobs)
# easy shortcut to os.environ
m.env = os.environ
@@ -408,6 +373,104 @@ def set_module_variables_for_package(pkg, module):
# Platform-specific library suffix.
m.dso_suffix = dso_suffix
+ def static_to_shared_library(static_lib, shared_lib=None, **kwargs):
+ compiler_path = kwargs.get('compiler', m.spack_cc)
+ compiler = Executable(compiler_path)
+
+ return _static_to_shared_library(pkg.spec.architecture, compiler,
+ static_lib, shared_lib, **kwargs)
+
+ m.static_to_shared_library = static_to_shared_library
+
+
+def _static_to_shared_library(arch, compiler, static_lib, shared_lib=None,
+ **kwargs):
+ """
+ Converts a static library to a shared library. The static library has to
+ be built with PIC for the conversion to work.
+
+ Parameters:
+ static_lib (str): Path to the static library.
+ shared_lib (str): Path to the shared library. Default is to derive
+ from the static library's path.
+
+ Keyword arguments:
+ compiler (str): Path to the compiler. Default is spack_cc.
+ compiler_output: Where to print compiler output to.
+ arguments (str list): Additional arguments for the compiler.
+ version (str): Library version. Default is unspecified.
+ compat_version (str): Library compatibility version. Default is
+ version.
+ """
+ compiler_output = kwargs.get('compiler_output', None)
+ arguments = kwargs.get('arguments', [])
+ version = kwargs.get('version', None)
+ compat_version = kwargs.get('compat_version', version)
+
+ if not shared_lib:
+ shared_lib = '{0}.{1}'.format(os.path.splitext(static_lib)[0],
+ dso_suffix)
+
+ compiler_args = []
+
+ # TODO: Compiler arguments should not be hardcoded but provided by
+ # the different compiler classes.
+ if 'linux' in arch:
+ soname = os.path.basename(shared_lib)
+
+ if compat_version:
+ soname += '.{0}'.format(compat_version)
+
+ compiler_args = [
+ '-shared',
+ '-Wl,-soname,{0}'.format(soname),
+ '-Wl,--whole-archive',
+ static_lib,
+ '-Wl,--no-whole-archive'
+ ]
+ elif 'darwin' in arch:
+ install_name = shared_lib
+
+ if compat_version:
+ install_name += '.{0}'.format(compat_version)
+
+ compiler_args = [
+ '-dynamiclib',
+ '-install_name {0}'.format(install_name),
+ '-Wl,-force_load,{0}'.format(static_lib)
+ ]
+
+ if compat_version:
+ compiler_args.append('-compatibility_version {0}'.format(
+ compat_version))
+
+ if version:
+ compiler_args.append('-current_version {0}'.format(version))
+
+ if len(arguments) > 0:
+ compiler_args.extend(arguments)
+
+ shared_lib_base = shared_lib
+
+ if version:
+ shared_lib += '.{0}'.format(version)
+ elif compat_version:
+ shared_lib += '.{0}'.format(compat_version)
+
+ compiler_args.extend(['-o', shared_lib])
+
+ # Create symlinks for version and compat_version
+ shared_lib_link = os.path.basename(shared_lib)
+
+ if version or compat_version:
+ os.symlink(shared_lib_link, shared_lib_base)
+
+ if compat_version and compat_version != version:
+ os.symlink(shared_lib_link, '{0}.{1}'.format(shared_lib_base,
+ compat_version))
+
+ return compiler(*compiler_args, output=compiler_output)
+
def get_rpath_deps(pkg):
"""Return immediate or transitive RPATHs depending on the package."""
@@ -433,12 +496,17 @@ def get_rpaths(pkg):
def get_std_cmake_args(pkg):
- """Returns the list of standard arguments that would be used if this
- package was a CMakePackage instance.
+ """List of standard arguments used if a package is a CMakePackage.
+
+ Returns:
+ list of str: standard arguments that would be used if this
+ package were a CMakePackage instance.
- :param pkg: pkg under consideration
+ Args:
+ pkg (PackageBase): package under consideration
- :return: list of arguments for cmake
+ Returns:
+ list of str: arguments for cmake
"""
return spack.CMakePackage._std_args(pkg)
@@ -460,14 +528,20 @@ def parent_class_modules(cls):
def load_external_modules(pkg):
- """ traverse the spec list and find any specs that have external modules.
+ """Traverse a package's spec DAG and load any external modules.
+
+ Traverse a package's dependencies and load any external modules
+ associated with them.
+
+ Args:
+ pkg (PackageBase): package to load deps for
"""
for dep in list(pkg.spec.traverse()):
if dep.external_module:
load_module(dep.external_module)
-def setup_package(pkg, dirty=False):
+def setup_package(pkg, dirty):
"""Execute all environment setup routines."""
spack_env = EnvironmentModifications()
run_env = EnvironmentModifications()
@@ -482,17 +556,26 @@ def setup_package(pkg, dirty=False):
# code ensures that all packages in the DAG have pieces of the
# same spec object at build time.
#
- # This is safe for the build process, b/c the build process is a
- # throwaway environment, but it is kind of dirty.
- #
- # TODO: Think about how to avoid this fix and do something cleaner.
for s in pkg.spec.traverse():
- s.package.spec = s
+ assert s.package.spec is s
+
+ # Trap spack-tracked compiler flags as appropriate.
+ # Must be before set_compiler_environment_variables
+ # Current implementation of default flag handler relies on this being
+ # the first thing to affect the spack_env (so there is no appending), or
+ # on no other build_environment methods trying to affect these variables
+ # (CFLAGS, CXXFLAGS, etc). Currently both are true, either is sufficient.
+ for flag in spack.spec.FlagMap.valid_compiler_flags():
+ trap_func = getattr(pkg, flag + '_handler',
+ getattr(pkg, 'default_flag_handler',
+ lambda x, y: y[1]))
+ flag_val = pkg.spec.compiler_flags[flag]
+ pkg.spec.compiler_flags[flag] = trap_func(spack_env, (flag, flag_val))
set_compiler_environment_variables(pkg, spack_env)
set_build_environment_variables(pkg, spack_env, dirty)
pkg.architecture.platform.setup_platform_environment(pkg, spack_env)
- load_external_modules(pkg)
+
# traverse in postorder so package can use vars from its dependencies
spec = pkg.spec
for dspec in pkg.spec.traverse(order='post', root=False, deptype='build'):
@@ -519,42 +602,72 @@ def setup_package(pkg, dirty=False):
validate(spack_env, tty.warn)
spack_env.apply_modifications()
+ # All module loads that otherwise would belong in previous functions
+ # have to occur after the spack_env object has its modifications applied.
+ # Otherwise the environment modifications could undo module changes, such
+ # as unsetting LD_LIBRARY_PATH after a module changes it.
+ for mod in pkg.compiler.modules:
+ # Fixes issue https://github.com/spack/spack/issues/3153
+ if os.environ.get("CRAY_CPU_TARGET") == "mic-knl":
+ load_module("cce")
+ load_module(mod)
+
+ if pkg.architecture.target.module_name:
+ load_module(pkg.architecture.target.module_name)
+
+ load_external_modules(pkg)
+
-def fork(pkg, function, dirty=False):
+def fork(pkg, function, dirty, fake):
"""Fork a child process to do part of a spack build.
- :param pkg: pkg whose environemnt we should set up the forked process for.
- :param function: arg-less function to run in the child process.
- :param dirty: If True, do NOT clean the environment before building.
+ Args:
+
+ pkg (PackageBase): package whose environment we should set up the
+ forked process for.
+ function (callable): argless function to run in the child
+ process.
+ dirty (bool): If True, do NOT clean the environment before
+ building.
+ fake (bool): If True, skip package setup b/c it's not a real build
Usage::
- def child_fun():
- # do stuff
- build_env.fork(pkg, child_fun)
+ def child_fun():
+ # do stuff
+ build_env.fork(pkg, child_fun)
Forked processes are run with the build environment set up by
- spack.build_environment. This allows package authors to have
- full control over the environment, etc. without affecting
- other builds that might be executed in the same spack call.
-
- If something goes wrong, the child process is expected to print
- the error and the parent process will exit with error as
- well. If things go well, the child exits and the parent
- carries on.
+ spack.build_environment. This allows package authors to have full
+ control over the environment, etc. without affecting other builds
+ that might be executed in the same spack call.
+
+ If something goes wrong, the child process catches the error and
+ passes it to the parent wrapped in a ChildError. The parent is
+ expected to handle (or re-raise) the ChildError.
"""
- def child_execution(child_connection, input_stream):
+ def child_process(child_pipe, input_stream):
+ # We are in the child process. Python sets sys.stdin to
+ # open(os.devnull) to prevent our process and its parent from
+ # simultaneously reading from the original stdin. But, we assume
+ # that the parent process is not going to read from it till we
+ # are done with the child, so we undo Python's precaution.
+ if input_stream is not None:
+ sys.stdin = input_stream
+
try:
- setup_package(pkg, dirty=dirty)
- function(input_stream)
- child_connection.send(None)
+ if not fake:
+ setup_package(pkg, dirty=dirty)
+ return_value = function()
+ child_pipe.send(return_value)
except StopIteration as e:
# StopIteration is used to stop installations
# before the final stage, mainly for debug purposes
tty.msg(e.message)
- child_connection.send(None)
- except:
+ child_pipe.send(None)
+
+ except BaseException:
# catch ANYTHING that goes wrong in the child process
exc_type, exc, tb = sys.exc_info()
@@ -571,39 +684,63 @@ def fork(pkg, function, dirty=False):
build_log = pkg.log_path
# make a pickleable exception to send to parent.
- msg = "%s: %s" % (str(exc_type.__name__), str(exc))
+ msg = "%s: %s" % (exc_type.__name__, str(exc))
- ce = ChildError(msg, tb_string, build_log, package_context)
- child_connection.send(ce)
+ ce = ChildError(msg,
+ exc_type.__module__,
+ exc_type.__name__,
+ tb_string, build_log, package_context)
+ child_pipe.send(ce)
finally:
- child_connection.close()
+ child_pipe.close()
- parent_connection, child_connection = multiprocessing.Pipe()
+ parent_pipe, child_pipe = multiprocessing.Pipe()
+ input_stream = None
try:
- # Forward sys.stdin to be able to activate / deactivate
- # verbosity pressing a key at run-time
- input_stream = lang.duplicate_stream(sys.stdin)
+ # Forward sys.stdin when appropriate, to allow toggling verbosity
+ if sys.stdin.isatty() and hasattr(sys.stdin, 'fileno'):
+ input_stream = os.fdopen(os.dup(sys.stdin.fileno()))
+
p = multiprocessing.Process(
- target=child_execution,
- args=(child_connection, input_stream)
- )
+ target=child_process, args=(child_pipe, input_stream))
p.start()
+
+ except InstallError as e:
+ e.pkg = pkg
+ raise
+
finally:
# Close the input stream in the parent process
- input_stream.close()
- child_exc = parent_connection.recv()
+ if input_stream is not None:
+ input_stream.close()
+
+ child_result = parent_pipe.recv()
p.join()
- if child_exc is not None:
- raise child_exc
+ # let the caller know which package went wrong.
+ if isinstance(child_result, InstallError):
+ child_result.pkg = pkg
+
+ # If the child process raised an error, print its output here rather
+ # than waiting until the call to SpackError.die() in main(). This
+ # allows exception handling output to be logged from within Spack.
+ # see spack.main.SpackCommand.
+ if isinstance(child_result, ChildError):
+ child_result.print_context()
+ raise child_result
+
+ return child_result
-def get_package_context(traceback):
+def get_package_context(traceback, context=3):
"""Return some context for an error message when the build fails.
Args:
- traceback -- A traceback from some exception raised during install.
+ traceback (traceback): A traceback from some exception raised during
+ install
+ context (int): Lines of context to show before and after the line
+ where the error happened
This function inspects the stack to find where we failed in the
package file, and it adds detailed context to the long_message
@@ -639,18 +776,31 @@ def get_package_context(traceback):
# Build a message showing context in the install method.
sourcelines, start = inspect.getsourcelines(frame)
+
+ fl = frame.f_lineno - start
+ start_ctx = max(0, fl - context)
+ sourcelines = sourcelines[start_ctx:fl + context + 1]
for i, line in enumerate(sourcelines):
- mark = ">> " if start + i == frame.f_lineno else " "
- lines.append(" %s%-5d%s" % (mark, start + i, line.rstrip()))
+ is_error = start_ctx + i == fl
+ mark = ">> " if is_error else " "
+ marked = " %s%-6d%s" % (mark, start_ctx + i, line.rstrip())
+ if is_error:
+ marked = colorize('@R{%s}' % marked)
+ lines.append(marked)
return lines
class InstallError(spack.error.SpackError):
- """Raised by packages when a package fails to install"""
+ """Raised by packages when a package fails to install.
+
+ Any subclass of InstallError will be annotated by Spack wtih a
+ ``pkg`` attribute on failure, which the caller can use to get the
+ package for which the exception was raised.
+ """
-class ChildError(spack.error.SpackError):
+class ChildError(InstallError):
"""Special exception class for wrapping exceptions from child processes
in Spack's build environment.
@@ -664,40 +814,75 @@ class ChildError(spack.error.SpackError):
failure in lieu of trying to run sys.excepthook on the parent
process, so users will see the correct stack trace from a child.
- 3. They also contain package_context, which shows source code context
- in the Package implementation where the error happened. To get
- this, Spack searches the stack trace for the deepest frame where
- ``self`` is in scope and is an instance of PackageBase. This will
- generally find a useful spot in the ``package.py`` file.
+ 3. They also contain context, which shows context in the Package
+ implementation where the error happened. This helps people debug
+ Python code in their packages. To get it, Spack searches the
+ stack trace for the deepest frame where ``self`` is in scope and
+ is an instance of PackageBase. This will generally find a useful
+ spot in the ``package.py`` file.
- The long_message of a ChildError displays all this stuff to the user,
- and SpackError handles displaying the special traceback if we're in
- debug mode with spack -d.
+ The long_message of a ChildError displays one of two things:
+
+ 1. If the original error was a ProcessError, indicating a command
+ died during the build, we'll show context from the build log.
+
+ 2. If the original error was any other type of error, we'll show
+ context from the Python code.
+
+ SpackError handles displaying the special traceback if we're in debug
+ mode with spack -d.
"""
- def __init__(self, msg, traceback_string, build_log, package_context):
+ # List of errors considered "build errors", for which we'll show log
+ # context instead of Python context.
+ build_errors = [('spack.util.executable', 'ProcessError')]
+
+ def __init__(self, msg, module, classname, traceback_string, build_log,
+ context):
super(ChildError, self).__init__(msg)
+ self.module = module
+ self.name = classname
self.traceback = traceback_string
self.build_log = build_log
- self.package_context = package_context
+ self.context = context
@property
def long_message(self):
- msg = self._long_message if self._long_message else ''
-
- if self.package_context:
- if msg:
- msg += "\n\n"
- msg += '\n'.join(self.package_context)
-
- if msg:
- msg += "\n\n"
+ out = StringIO()
+ out.write(self._long_message if self._long_message else '')
+
+ if (self.module, self.name) in ChildError.build_errors:
+ # The error happened in some external executed process. Show
+ # the build log with errors highlighted.
+ if self.build_log:
+ errors, warnings = parse_log_events(self.build_log)
+ nerr = len(errors)
+ if nerr > 0:
+ if nerr == 1:
+ out.write("\n1 error found in build log:\n")
+ else:
+ out.write("\n%d errors found in build log:\n" % nerr)
+ out.write(make_log_context(errors))
+
+ else:
+ # The error happened in in the Python code, so try to show
+ # some context from the Package itself.
+ out.write('%s: %s\n\n' % (self.name, self.message))
+ if self.context:
+ out.write('\n'.join(self.context))
+ out.write('\n')
+
+ if out.getvalue():
+ out.write('\n')
if self.build_log:
- msg += "See build log for details:\n"
- msg += " %s" % self.build_log
+ out.write('See build log for details:\n')
+ out.write(' %s' % self.build_log)
+
+ return out.getvalue()
- return msg
+ def __str__(self):
+ return self.message + self.long_message + self.traceback
def __reduce__(self):
"""__reduce__ is used to serialize (pickle) ChildErrors.
@@ -707,11 +892,13 @@ class ChildError(spack.error.SpackError):
"""
return _make_child_error, (
self.message,
+ self.module,
+ self.name,
self.traceback,
self.build_log,
- self.package_context)
+ self.context)
-def _make_child_error(msg, traceback, build_log, package_context):
+def _make_child_error(msg, module, name, traceback, build_log, context):
"""Used by __reduce__ in ChildError to reconstruct pickled errors."""
- return ChildError(msg, traceback, build_log, package_context)
+ return ChildError(msg, module, name, traceback, build_log, context)
diff --git a/lib/spack/spack/build_systems/__init__.py b/lib/spack/spack/build_systems/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/build_systems/__init__.py
+++ b/lib/spack/spack/build_systems/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
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..edf9bdb5da
--- /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/spack/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/lib/spack/spack/build_systems/autotools.py b/lib/spack/spack/build_systems/autotools.py
index 78a4df5e11..8f2af3e21e 100644
--- a/lib/spack/spack/build_systems/autotools.py
+++ b/lib/spack/spack/build_systems/autotools.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,43 +27,84 @@ import inspect
import os
import os.path
import shutil
+import stat
from subprocess import PIPE
from subprocess import check_call
import llnl.util.tty as tty
-from llnl.util.filesystem import working_dir
-from spack.package import PackageBase
+from llnl.util.filesystem import working_dir, join_path, force_remove
+from spack.package import PackageBase, run_after, run_before
+from spack.util.executable import Executable
class AutotoolsPackage(PackageBase):
- """Specialized class for packages that are built using GNU Autotools
+ """Specialized class for packages built using GNU Autotools.
This class provides four phases that can be overridden:
- * autoreconf
- * configure
- * build
- * install
+ 1. :py:meth:`~.AutotoolsPackage.autoreconf`
+ 2. :py:meth:`~.AutotoolsPackage.configure`
+ 3. :py:meth:`~.AutotoolsPackage.build`
+ 4. :py:meth:`~.AutotoolsPackage.install`
They all have sensible defaults and for many packages the only thing
- necessary will be to override ``configure_args``
+ necessary will be to override the helper method
+ :py:meth:`~.AutotoolsPackage.configure_args`.
+ For a finer tuning you may also override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:attr:`~.AutotoolsPackage.build_targets` | Specify ``make`` |
+ | | targets for the |
+ | | build phase |
+ +-----------------------------------------------+--------------------+
+ | :py:attr:`~.AutotoolsPackage.install_targets` | Specify ``make`` |
+ | | targets for the |
+ | | install phase |
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.AutotoolsPackage.check` | Run build time |
+ | | tests if required |
+ +-----------------------------------------------+--------------------+
- Additionally, you may specify make targets for build and install
- phases by overriding ``build_targets`` and ``install_targets``
"""
+ #: Phases of a GNU Autotools package
phases = ['autoreconf', 'configure', 'build', 'install']
- # To be used in UI queries that require to know which
- # build-system class we are using
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
build_system_class = 'AutotoolsPackage'
+ #: Whether or not to update ``config.guess`` on old architectures
patch_config_guess = True
+ #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.build`
+ #: phase
build_targets = []
+ #: Targets for ``make`` during the :py:meth:`~.AutotoolsPackage.install`
+ #: phase
install_targets = ['install']
- def do_patch_config_guess(self):
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['installcheck']
+
+ #: Set to true to force the autoreconf step even if configure is present
+ force_autoreconf = False
+ #: Options to be passed to autoreconf when using the default implementation
+ autoreconf_extra_args = []
+
+ @run_after('autoreconf')
+ def _do_patch_config_guess(self):
"""Some packages ship with an older config.guess and need to have
- this updated when installed on a newer architecture."""
+ this updated when installed on a newer architecture. In particular,
+ config.guess fails for PPC64LE for version prior to a 2013-06-10
+ build date (automake 1.13.4)."""
+ if not self.patch_config_guess or not self.spec.satisfies(
+ 'target=ppc64le'
+ ):
+ return
my_config_guess = None
config_guess = None
if os.path.exists('config.guess'):
@@ -85,11 +126,11 @@ class AutotoolsPackage(PackageBase):
try:
check_call([my_config_guess], stdout=PIPE, stderr=PIPE)
# The package's config.guess already runs OK, so just use it
- return True
- except:
+ return
+ except Exception:
pass
else:
- return True
+ return
# Look for a spack-installed automake package
if 'automake' in self.spec:
@@ -99,16 +140,8 @@ class AutotoolsPackage(PackageBase):
path = os.path.join(automake_path, 'config.guess')
if os.path.exists(path):
config_guess = path
- if config_guess is not None:
- try:
- check_call([config_guess], stdout=PIPE, stderr=PIPE)
- shutil.copyfile(config_guess, my_config_guess)
- return True
- except:
- pass
-
# Look for the system's config.guess
- if os.path.exists('/usr/share'):
+ if config_guess is None and os.path.exists('/usr/share'):
automake_dir = [s for s in os.listdir('/usr/share') if
"automake" in s]
if automake_dir:
@@ -119,85 +152,309 @@ class AutotoolsPackage(PackageBase):
if config_guess is not None:
try:
check_call([config_guess], stdout=PIPE, stderr=PIPE)
+ mod = os.stat(my_config_guess).st_mode & 0o777 | stat.S_IWUSR
+ os.chmod(my_config_guess, mod)
shutil.copyfile(config_guess, my_config_guess)
- return True
- except:
+ return
+ except Exception:
pass
- return False
+ raise RuntimeError('Failed to find suitable config.guess')
+
+ @property
+ def configure_directory(self):
+ """Returns the directory where 'configure' resides.
+
+ :return: directory where to find configure
+ """
+ return self.stage.source_path
+ @property
+ def configure_abs_path(self):
+ # Absolute path to configure
+ configure_abs_path = join_path(
+ os.path.abspath(self.configure_directory), 'configure'
+ )
+ return configure_abs_path
+
+ @property
def build_directory(self):
"""Override to provide another place to build the package"""
- return self.stage.source_path
+ return self.configure_directory
- def patch(self):
- """Perform any required patches."""
+ def default_flag_handler(self, spack_env, flag_val):
+ # Relies on being the first thing that can affect the spack_env
+ # EnvironmentModification after it is instantiated or no other
+ # method trying to affect these variables. Currently both are true
+ # flag_val is a tuple (flag, value_list).
+ spack_env.set(flag_val[0].upper(),
+ ' '.join(flag_val[1]))
+ return []
- if self.patch_config_guess and self.spec.satisfies(
- 'arch=linux-rhel7-ppc64le'):
- if not self.do_patch_config_guess():
- raise RuntimeError('Failed to find suitable config.guess')
+ @run_before('autoreconf')
+ def delete_configure_to_force_update(self):
+ if self.force_autoreconf:
+ force_remove(self.configure_abs_path)
def autoreconf(self, spec, prefix):
"""Not needed usually, configure should be already there"""
- pass
+ # If configure exists nothing needs to be done
+ if os.path.exists(self.configure_abs_path):
+ return
+ # Else try to regenerate it
+ autotools = ['m4', 'autoconf', 'automake', 'libtool']
+ missing = [x for x in autotools if x not in spec]
+ if missing:
+ msg = 'Cannot generate configure: missing dependencies {0}'
+ raise RuntimeError(msg.format(missing))
+ tty.msg('Configure script not found: trying to generate it')
+ tty.warn('*********************************************************')
+ tty.warn('* If the default procedure fails, consider implementing *')
+ tty.warn('* a custom AUTORECONF phase in the package *')
+ tty.warn('*********************************************************')
+ with working_dir(self.configure_directory):
+ m = inspect.getmodule(self)
+ # This part should be redundant in principle, but
+ # won't hurt
+ m.libtoolize()
+ m.aclocal()
+ # This line is what is needed most of the time
+ # --install, --verbose, --force
+ autoreconf_args = ['-ivf']
+ if 'pkg-config' in spec:
+ autoreconf_args += [
+ '-I',
+ join_path(spec['pkg-config'].prefix, 'share', 'aclocal'),
+ ]
+ autoreconf_args += self.autoreconf_extra_args
+ m.autoreconf(*autoreconf_args)
- @PackageBase.sanity_check('autoreconf')
- def is_configure_or_die(self):
+ @run_after('autoreconf')
+ def set_configure_or_die(self):
"""Checks the presence of a ``configure`` file after the
- autoreconf phase"""
- with working_dir(self.build_directory()):
- if not os.path.exists('configure'):
- raise RuntimeError(
- 'configure script not found in {0}'.format(os.getcwd()))
+ autoreconf phase. If it is found sets a module attribute
+ appropriately, otherwise raises an error.
+
+ :raises RuntimeError: if a configure script is not found in
+ :py:meth:`~AutotoolsPackage.configure_directory`
+ """
+ # Check if a configure script is there. If not raise a RuntimeError.
+ if not os.path.exists(self.configure_abs_path):
+ msg = 'configure script not found in {0}'
+ raise RuntimeError(msg.format(self.configure_directory))
+
+ # Monkey-patch the configure script in the corresponding module
+ inspect.getmodule(self).configure = Executable(
+ self.configure_abs_path
+ )
def configure_args(self):
- """Method to be overridden. Should return an iterable containing
- all the arguments that must be passed to configure, except ``--prefix``
+ """Produces a list containing all the arguments that must be passed to
+ configure, except ``--prefix`` which will be pre-pended to the list.
+
+ :return: list of arguments for configure
"""
return []
def configure(self, spec, prefix):
- """Runs configure with the arguments specified in ``configure_args``
- and an appropriately set prefix
+ """Runs configure with the arguments specified in
+ :py:meth:`~.AutotoolsPackage.configure_args`
+ and an appropriately set prefix.
"""
options = ['--prefix={0}'.format(prefix)] + self.configure_args()
- with working_dir(self.build_directory()):
+ with working_dir(self.build_directory, create=True):
inspect.getmodule(self).configure(*options)
def build(self, spec, prefix):
- """Make the build targets"""
- with working_dir(self.build_directory()):
+ """Makes the build targets specified by
+ :py:attr:``~.AutotoolsPackage.build_targets``
+ """
+ with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.build_targets)
def install(self, spec, prefix):
- """Make the install targets"""
- with working_dir(self.build_directory()):
+ """Makes the install targets specified by
+ :py:attr:``~.AutotoolsPackage.install_targets``
+ """
+ with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.install_targets)
- @PackageBase.sanity_check('build')
- @PackageBase.on_package_attributes(run_tests=True)
- def _run_default_function(self):
- """This function is run after build if ``self.run_tests == True``
-
- It will search for a method named ``check`` and run it. A sensible
- default is provided in the base class.
- """
- try:
- fn = getattr(self, 'check')
- tty.msg('Trying default sanity checks [check]')
- fn()
- except AttributeError:
- tty.msg('Skipping default sanity checks [method `check` not implemented]') # NOQA: ignore=E501
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
def check(self):
- """Default test: search the Makefile for targets ``test`` and ``check``
- and run them if found.
+ """Searches the Makefile for targets ``test`` and ``check``
+ and runs them if found.
"""
- with working_dir(self.build_directory()):
+ with working_dir(self.build_directory):
self._if_make_target_execute('test')
self._if_make_target_execute('check')
+ def _activate_or_not(
+ self,
+ name,
+ activation_word,
+ deactivation_word,
+ activation_value=None
+ ):
+ """This function contains the current implementation details of
+ :py:meth:`~.AutotoolsPackage.with_or_without` and
+ :py:meth:`~.AutotoolsPackage.enable_or_disable`.
+
+ Args:
+ name (str): name of the variant that is being processed
+ activation_word (str): the default activation word ('with' in the
+ case of ``with_or_without``)
+ deactivation_word (str): the default deactivation word ('without'
+ in the case of ``with_or_without``)
+ activation_value (callable): callable that accepts a single
+ value. This value is either one of the allowed values for a
+ multi-valued variant or the name of a bool-valued variant.
+ Returns the parameter to be used when the value is activated.
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Examples:
+
+ Given a package with:
+
+ .. code-block:: python
+
+ variant('foo', values=('x', 'y'), description='')
+ variant('bar', default=True, description='')
+
+ calling this function like:
+
+ .. code-block:: python
+
+ _activate_or_not(
+ 'foo', 'with', 'without', activation_value='prefix'
+ )
+ _activate_or_not('bar', 'with', 'without')
+
+ will generate the following configuration options:
+
+ .. code-block:: console
+
+ --with-x=<prefix-to-x> --without-y --with-bar
+
+ for ``<spec-name> foo=x +bar``
+
+ Returns:
+ list of strings that corresponds to the activation/deactivation
+ of the variant that has been processed
+
+ Raises:
+ KeyError: if name is not among known variants
+ """
+ spec = self.spec
+ args = []
+
+ if activation_value == 'prefix':
+ activation_value = lambda x: spec[x].prefix
+
+ # Defensively look that the name passed as argument is among
+ # variants
+ if name not in self.variants:
+ msg = '"{0}" is not a variant of "{1}"'
+ raise KeyError(msg.format(name, self.name))
+
+ # Create a list of pairs. Each pair includes a configuration
+ # option and whether or not that option is activated
+ if set(self.variants[name].values) == set((True, False)):
+ # BoolValuedVariant carry information about a single option.
+ # Nonetheless, for uniformity of treatment we'll package them
+ # in an iterable of one element.
+ condition = '+{name}'.format(name=name)
+ options = [(name, condition in spec)]
+ else:
+ condition = '{name}={value}'
+ options = [
+ (value, condition.format(name=name, value=value) in spec)
+ for value in self.variants[name].values
+ ]
+
+ # For each allowed value in the list of values
+ for option_value, activated in options:
+ # Search for an override in the package for this value
+ override_name = '{0}_or_{1}_{2}'.format(
+ activation_word, deactivation_word, option_value
+ )
+ line_generator = getattr(self, override_name, None)
+ # If not available use a sensible default
+ if line_generator is None:
+ def _default_generator(is_activated):
+ if is_activated:
+ line = '--{0}-{1}'.format(
+ activation_word, option_value
+ )
+ if activation_value is not None and activation_value(option_value): # NOQA=ignore=E501
+ line += '={0}'.format(
+ activation_value(option_value)
+ )
+ return line
+ return '--{0}-{1}'.format(deactivation_word, option_value)
+ line_generator = _default_generator
+ args.append(line_generator(activated))
+ return args
+
+ def with_or_without(self, name, activation_value=None):
+ """Inspects a variant and returns the arguments that activate
+ or deactivate the selected feature(s) for the configure options.
+
+ This function works on all type of variants. For bool-valued variants
+ it will return by default ``--with-{name}`` or ``--without-{name}``.
+ For other kinds of variants it will cycle over the allowed values and
+ return either ``--with-{value}`` or ``--without-{value}``.
+
+ If activation_value is given, then for each possible value of the
+ variant, the option ``--with-{value}=activation_value(value)`` or
+ ``--without-{value}`` will be added depending on whether or not
+ ``variant=value`` is in the spec.
+
+ Args:
+ name (str): name of a valid multi-valued variant
+ activation_value (callable): callable that accepts a single
+ value and returns the parameter to be used leading to an entry
+ of the type ``--with-{name}={parameter}``.
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Returns:
+ list of arguments to configure
+ """
+ return self._activate_or_not(name, 'with', 'without', activation_value)
+
+ def enable_or_disable(self, name, activation_value=None):
+ """Same as :py:meth:`~.AutotoolsPackage.with_or_without` but substitute
+ ``with`` with ``enable`` and ``without`` with ``disable``.
+
+ Args:
+ name (str): name of a valid multi-valued variant
+ activation_value (callable): if present accepts a single value
+ and returns the parameter to be used leading to an entry of the
+ type ``--enable-{name}={parameter}``
+
+ The special value 'prefix' can also be assigned and will return
+ ``spec[name].prefix`` as activation parameter.
+
+ Returns:
+ list of arguments to configure
+ """
+ return self._activate_or_not(
+ name, 'enable', 'disable', activation_value
+ )
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ def installcheck(self):
+ """Searches the Makefile for an ``installcheck`` target
+ and runs it if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('installcheck')
+
# Check that self.prefix is there after installation
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/cmake.py b/lib/spack/spack/build_systems/cmake.py
index 61d45784e8..ca9ec6f803 100644
--- a/lib/spack/spack/build_systems/cmake.py
+++ b/lib/spack/spack/build_systems/cmake.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,54 +24,89 @@
##############################################################################
import inspect
+import os
import platform
-import llnl.util.tty as tty
import spack.build_environment
from llnl.util.filesystem import working_dir, join_path
-from spack.directives import depends_on
-from spack.package import PackageBase
+from spack.util.environment import filter_system_paths
+from spack.directives import depends_on, variant
+from spack.package import PackageBase, InstallError, run_after
class CMakePackage(PackageBase):
- """Specialized class for packages that are built using CMake
+ """Specialized class for packages built using CMake
+
+ For more information on the CMake build system, see:
+ https://cmake.org/cmake/help/latest/
This class provides three phases that can be overridden:
- * cmake
- * build
- * install
+ 1. :py:meth:`~.CMakePackage.cmake`
+ 2. :py:meth:`~.CMakePackage.build`
+ 3. :py:meth:`~.CMakePackage.install`
They all have sensible defaults and for many packages the only thing
- necessary will be to override ``cmake_args``
+ necessary will be to override :py:meth:`~.CMakePackage.cmake_args`.
+ For a finer tuning you may also override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:meth:`~.CMakePackage.root_cmakelists_dir` | Location of the |
+ | | root CMakeLists.txt|
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.CMakePackage.build_directory` | Directory where to |
+ | | build the package |
+ +-----------------------------------------------+--------------------+
+
- Additionally, you may specify make targets for build and install
- phases by overriding ``build_targets`` and ``install_targets``
"""
+ #: Phases of a CMake package
phases = ['cmake', 'build', 'install']
- # To be used in UI queries that require to know which
- # build-system class we are using
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
build_system_class = 'CMakePackage'
build_targets = []
install_targets = ['install']
- depends_on('cmake', type='build')
+ build_time_test_callbacks = ['check']
- def build_type(self):
- """Override to provide the correct build_type in case a complex
- logic is needed
- """
- return 'RelWithDebInfo'
+ #: The build system generator to use.
+ #:
+ #: See ``cmake --help`` for a list of valid generators.
+ #: Currently, "Unix Makefiles" and "Ninja" are the only generators
+ #: that Spack supports. Defaults to "Unix Makefiles".
+ #:
+ #: See https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html
+ #: for more information.
+ generator = 'Unix Makefiles'
+
+ # https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
+ variant('build_type', default='RelWithDebInfo',
+ description='CMake build type',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
+
+ depends_on('cmake', type='build')
+ @property
def root_cmakelists_dir(self):
- """Directory where to find the root CMakeLists.txt"""
+ """The relative path to the directory containing CMakeLists.txt
+
+ This path is relative to the root of the extracted tarball,
+ not to the ``build_directory``. Defaults to the current directory.
+
+ :return: directory containing CMakeLists.txt
+ """
return self.stage.source_path
@property
def std_cmake_args(self):
"""Standard cmake arguments provided as a property for
convenience of package writers
+
+ :return: standard cmake arguments
"""
# standard CMake arguments
return CMakePackage._std_args(self)
@@ -80,13 +115,30 @@ class CMakePackage(PackageBase):
def _std_args(pkg):
"""Computes the standard cmake arguments for a generic package"""
try:
- build_type = pkg.build_type()
+ generator = pkg.generator
except AttributeError:
+ generator = 'Unix Makefiles'
+
+ # Make sure a valid generator was chosen
+ valid_generators = ['Unix Makefiles', 'Ninja']
+ if generator not in valid_generators:
+ msg = "Invalid CMake generator: '{0}'\n".format(generator)
+ msg += "CMakePackage currently supports the following "
+ msg += "generators: '{0}'".format("', '".join(valid_generators))
+ raise InstallError(msg)
+
+ try:
+ build_type = pkg.spec.variants['build_type'].value
+ except KeyError:
build_type = 'RelWithDebInfo'
- args = ['-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(pkg.prefix),
- '-DCMAKE_BUILD_TYPE:STRING={0}'.format(build_type),
- '-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON']
+ args = [
+ '-G', generator,
+ '-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(pkg.prefix),
+ '-DCMAKE_BUILD_TYPE:STRING={0}'.format(build_type),
+ '-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON'
+ ]
+
if platform.mac_ver()[0]:
args.append('-DCMAKE_FIND_FRAMEWORK:STRING=LAST')
@@ -94,59 +146,79 @@ class CMakePackage(PackageBase):
args.append('-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=FALSE')
rpaths = ':'.join(spack.build_environment.get_rpaths(pkg))
args.append('-DCMAKE_INSTALL_RPATH:STRING={0}'.format(rpaths))
+ # CMake's find_package() looks in CMAKE_PREFIX_PATH first, help CMake
+ # to find immediate link dependencies in right places:
+ deps = [d.prefix for d in
+ pkg.spec.dependencies(deptype=('build', 'link'))]
+ deps = filter_system_paths(deps)
+ args.append('-DCMAKE_PREFIX_PATH:STRING={0}'.format(';'.join(deps)))
return args
+ @property
def build_directory(self):
- """Override to provide another place to build the package"""
+ """Returns the directory to use when building the package
+
+ :return: directory where to build the package
+ """
return join_path(self.stage.source_path, 'spack-build')
+ def default_flag_handler(self, spack_env, flag_val):
+ # Relies on being the first thing that can affect the spack_env
+ # EnvironmentModification after it is instantiated or no other
+ # method trying to affect these variables. Currently both are true
+ # flag_val is a tuple (flag, value_list)
+ spack_env.set(flag_val[0].upper(),
+ ' '.join(flag_val[1]))
+ return []
+
def cmake_args(self):
- """Method to be overridden. Should return an iterable containing
- all the arguments that must be passed to configure, except:
+ """Produces a list containing all the arguments that must be passed to
+ cmake, except:
+
+ * CMAKE_INSTALL_PREFIX
+ * CMAKE_BUILD_TYPE
- * CMAKE_INSTALL_PREFIX
- * CMAKE_BUILD_TYPE
+ which will be set automatically.
+
+ :return: list of arguments for cmake
"""
return []
def cmake(self, spec, prefix):
- """Run cmake in the build directory"""
- options = [self.root_cmakelists_dir()] + self.std_cmake_args + \
- self.cmake_args()
- with working_dir(self.build_directory(), create=True):
+ """Runs ``cmake`` in the build directory"""
+ options = [os.path.abspath(self.root_cmakelists_dir)]
+ options += self.std_cmake_args
+ options += self.cmake_args()
+ with working_dir(self.build_directory, create=True):
inspect.getmodule(self).cmake(*options)
def build(self, spec, prefix):
"""Make the build targets"""
- with working_dir(self.build_directory()):
- inspect.getmodule(self).make(*self.build_targets)
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ inspect.getmodule(self).make(*self.build_targets)
+ elif self.generator == 'Ninja':
+ inspect.getmodule(self).ninja(*self.build_targets)
def install(self, spec, prefix):
"""Make the install targets"""
- with working_dir(self.build_directory()):
- inspect.getmodule(self).make(*self.install_targets)
-
- @PackageBase.sanity_check('build')
- @PackageBase.on_package_attributes(run_tests=True)
- def _run_default_function(self):
- """This function is run after build if ``self.run_tests == True``
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ inspect.getmodule(self).make(*self.install_targets)
+ elif self.generator == 'Ninja':
+ inspect.getmodule(self).ninja(*self.install_targets)
- It will search for a method named ``check`` and run it. A sensible
- default is provided in the base class.
- """
- try:
- fn = getattr(self, 'check')
- tty.msg('Trying default build sanity checks [check]')
- fn()
- except AttributeError:
- tty.msg('Skipping default build sanity checks [method `check` not implemented]') # NOQA: ignore=E501
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
def check(self):
- """Default test: search the Makefile for the target ``test``
- and run them if found.
+ """Searches the CMake-generated Makefile for the target ``test``
+ and runs it if found.
"""
- with working_dir(self.build_directory()):
- self._if_make_target_execute('test')
+ with working_dir(self.build_directory):
+ if self.generator == 'Unix Makefiles':
+ self._if_make_target_execute('test')
+ elif self.generator == 'Ninja':
+ self._if_ninja_target_execute('test')
# Check that self.prefix is there after installation
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/intel.py b/lib/spack/spack/build_systems/intel.py
new file mode 100644
index 0000000000..d9ad0da2fa
--- /dev/null
+++ b/lib/spack/spack/build_systems/intel.py
@@ -0,0 +1,192 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+import xml.etree.ElementTree as ET
+
+from llnl.util.filesystem import install, join_path
+from spack.package import PackageBase, run_after
+from spack.util.executable import Executable
+
+
+def _valid_components():
+ """A generator that yields valid components."""
+
+ tree = ET.parse('pset/mediaconfig.xml')
+ root = tree.getroot()
+
+ components = root.findall('.//Abbr')
+ for component in components:
+ yield component.text
+
+
+class IntelPackage(PackageBase):
+ """Specialized class for licensed Intel software.
+
+ This class provides two phases that can be overridden:
+
+ 1. :py:meth:`~.IntelPackage.configure`
+ 2. :py:meth:`~.IntelPackage.install`
+
+ They both have sensible defaults and for many packages the
+ only thing necessary will be to override ``setup_environment``
+ to set the appropriate environment variables.
+ """
+ #: Phases of an Intel package
+ phases = ['configure', 'install']
+
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'IntelPackage'
+
+ #: By default, we assume that all Intel software requires a license.
+ #: This can be overridden for packages that do not require a license.
+ license_required = True
+
+ #: Comment symbol used in the ``license.lic`` file
+ license_comment = '#'
+
+ #: Location where Intel searches for a license file
+ license_files = ['Licenses/license.lic']
+
+ #: Environment variables that Intel searches for a license file
+ license_vars = ['INTEL_LICENSE_FILE']
+
+ #: URL providing information on how to acquire a license key
+ license_url = 'https://software.intel.com/en-us/articles/intel-license-manager-faq'
+
+ #: Components of the package to install.
+ #: By default, install 'ALL' components.
+ components = ['ALL']
+
+ @property
+ def _filtered_components(self):
+ """Returns a list or set of valid components that match
+ the requested components from ``components``."""
+
+ # Don't filter 'ALL'
+ if self.components == ['ALL']:
+ return self.components
+
+ # mediaconfig.xml is known to contain duplicate components.
+ # If more than one copy of the same component is used, you
+ # will get an error message about invalid components.
+ # Use a set to store components to prevent duplicates.
+ matches = set()
+
+ for valid in _valid_components():
+ for requested in self.components:
+ if valid.startswith(requested):
+ matches.add(valid)
+
+ return matches
+
+ @property
+ def global_license_file(self):
+ """Returns the path where a global license file should be stored.
+
+ All Intel software shares the same license, so we store it in a
+ common 'intel' directory."""
+ return join_path(self.global_license_dir, 'intel',
+ os.path.basename(self.license_files[0]))
+
+ def configure(self, spec, prefix):
+ """Writes the ``silent.cfg`` file used to configure the installation.
+
+ See https://software.intel.com/en-us/articles/configuration-file-format
+ """
+ # Patterns used to check silent configuration file
+ #
+ # anythingpat - any string
+ # filepat - the file location pattern (/path/to/license.lic)
+ # lspat - the license server address pattern (0123@hostname)
+ # snpat - the serial number pattern (ABCD-01234567)
+ config = {
+ # Accept EULA, valid values are: {accept, decline}
+ 'ACCEPT_EULA': 'accept',
+
+ # Optional error behavior, valid values are: {yes, no}
+ 'CONTINUE_WITH_OPTIONAL_ERROR': 'yes',
+
+ # Install location, valid values are: {/opt/intel, filepat}
+ 'PSET_INSTALL_DIR': prefix,
+
+ # Continue with overwrite of existing installation directory,
+ # valid values are: {yes, no}
+ 'CONTINUE_WITH_INSTALLDIR_OVERWRITE': 'yes',
+
+ # List of components to install,
+ # valid values are: {ALL, DEFAULTS, anythingpat}
+ 'COMPONENTS': ';'.join(self._filtered_components),
+
+ # Installation mode, valid values are: {install, repair, uninstall}
+ 'PSET_MODE': 'install',
+
+ # Directory for non-RPM database, valid values are: {filepat}
+ 'NONRPM_DB_DIR': prefix,
+
+ # Perform validation of digital signatures of RPM files,
+ # valid values are: {yes, no}
+ 'SIGNING_ENABLED': 'no',
+
+ # Select target architecture of your applications,
+ # valid values are: {IA32, INTEL64, ALL}
+ 'ARCH_SELECTED': 'ALL',
+ }
+
+ # Not all Intel software requires a license. Trying to specify
+ # one anyway will cause the installation to fail.
+ if self.license_required:
+ config.update({
+ # License file or license server,
+ # valid values are: {lspat, filepat}
+ 'ACTIVATION_LICENSE_FILE': self.global_license_file,
+
+ # Activation type, valid values are: {exist_lic,
+ # license_server, license_file, trial_lic, serial_number}
+ 'ACTIVATION_TYPE': 'license_file',
+
+ # Intel(R) Software Improvement Program opt-in,
+ # valid values are: {yes, no}
+ 'PHONEHOME_SEND_USAGE_DATA': 'no',
+ })
+
+ with open('silent.cfg', 'w') as cfg:
+ for key in config:
+ cfg.write('{0}={1}\n'.format(key, config[key]))
+
+ def install(self, spec, prefix):
+ """Runs the ``install.sh`` installation script."""
+
+ install_script = Executable('./install.sh')
+ install_script('--silent', 'silent.cfg')
+
+ @run_after('install')
+ def save_silent_cfg(self):
+ """Copies the silent.cfg configuration file to ``<prefix>/.spack``."""
+ install('silent.cfg', join_path(self.prefix, '.spack'))
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/makefile.py b/lib/spack/spack/build_systems/makefile.py
index a56f316109..286b702fc9 100644
--- a/lib/spack/spack/build_systems/makefile.py
+++ b/lib/spack/spack/build_systems/makefile.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,7 @@ import inspect
import llnl.util.tty as tty
from llnl.util.filesystem import working_dir
-from spack.package import PackageBase
+from spack.package import PackageBase, run_after
class MakefilePackage(PackageBase):
@@ -35,38 +35,95 @@ class MakefilePackage(PackageBase):
This class provides three phases that can be overridden:
- * edit
- * build
- * install
+ 1. :py:meth:`~.MakefilePackage.edit`
+ 2. :py:meth:`~.MakefilePackage.build`
+ 3. :py:meth:`~.MakefilePackage.install`
- It is necessary to override the 'edit' phase, while 'build' and 'install'
- have sensible defaults.
+ It is usually necessary to override the :py:meth:`~.MakefilePackage.edit`
+ phase, while :py:meth:`~.MakefilePackage.build` and
+ :py:meth:`~.MakefilePackage.install` have sensible defaults.
+ For a finer tuning you may override:
+
+ +-----------------------------------------------+--------------------+
+ | **Method** | **Purpose** |
+ +===============================================+====================+
+ | :py:attr:`~.MakefilePackage.build_targets` | Specify ``make`` |
+ | | targets for the |
+ | | build phase |
+ +-----------------------------------------------+--------------------+
+ | :py:attr:`~.MakefilePackage.install_targets` | Specify ``make`` |
+ | | targets for the |
+ | | install phase |
+ +-----------------------------------------------+--------------------+
+ | :py:meth:`~.MakefilePackage.build_directory` | Directory where the|
+ | | Makefile is located|
+ +-----------------------------------------------+--------------------+
"""
+ #: Phases of a package that is built with an hand-written Makefile
phases = ['edit', 'build', 'install']
- # To be used in UI queries that require to know which
- # build-system class we are using
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
build_system_class = 'MakefilePackage'
+ #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.build`
+ #: phase
build_targets = []
+ #: Targets for ``make`` during the :py:meth:`~.MakefilePackage.install`
+ #: phase
install_targets = ['install']
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['installcheck']
+
+ @property
def build_directory(self):
- """Directory where the main Makefile is located"""
+ """Returns the directory containing the main Makefile
+
+ :return: build directory
+ """
return self.stage.source_path
def edit(self, spec, prefix):
- """This phase cannot be defaulted for obvious reasons..."""
+ """Edits the Makefile before calling make. This phase cannot
+ be defaulted.
+ """
tty.msg('Using default implementation: skipping edit phase.')
def build(self, spec, prefix):
- """Make the build targets"""
- with working_dir(self.build_directory()):
+ """Calls make, passing :py:attr:`~.MakefilePackage.build_targets`
+ as targets.
+ """
+ with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.build_targets)
def install(self, spec, prefix):
- """Make the install targets"""
- with working_dir(self.build_directory()):
+ """Calls make, passing :py:attr:`~.MakefilePackage.install_targets`
+ as targets.
+ """
+ with working_dir(self.build_directory):
inspect.getmodule(self).make(*self.install_targets)
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def check(self):
+ """Searches the Makefile for targets ``test`` and ``check``
+ and runs them if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('test')
+ self._if_make_target_execute('check')
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ def installcheck(self):
+ """Searches the Makefile for an ``installcheck`` target
+ and runs it if found.
+ """
+ with working_dir(self.build_directory):
+ self._if_make_target_execute('installcheck')
+
# Check that self.prefix is there after installation
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/perl.py b/lib/spack/spack/build_systems/perl.py
new file mode 100644
index 0000000000..fe845a45db
--- /dev/null
+++ b/lib/spack/spack/build_systems/perl.py
@@ -0,0 +1,119 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import inspect
+import os
+
+from llnl.util.filesystem import join_path
+from spack.directives import depends_on, extends
+from spack.package import PackageBase, run_after
+from spack.util.executable import Executable
+
+
+class PerlPackage(PackageBase):
+ """Specialized class for packages that are built using Perl.
+
+ This class provides four phases that can be overridden if required:
+
+ 1. :py:meth:`~.PerlPackage.configure`
+ 2. :py:meth:`~.PerlPackage.build`
+ 3. :py:meth:`~.PerlPackage.check`
+ 4. :py:meth:`~.PerlPackage.install`
+
+ The default methods use, in order of preference:
+ (1) Makefile.PL,
+ (2) Build.PL.
+
+ Some packages may need to override
+ :py:meth:`~.PerlPackage.configure_args`,
+ which produces a list of arguments for
+ :py:meth:`~.PerlPackage.configure`.
+ Arguments should not include the installation base directory.
+ """
+ #: Phases of a Perl package
+ phases = ['configure', 'build', 'install']
+
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'PerlPackage'
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ extends('perl')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def configure_args(self):
+ """Produces a list containing the arguments that must be passed to
+ :py:meth:`~.PerlPackage.configure`. Arguments should not include
+ the installation base directory, which is prepended automatically.
+
+ :return: list of arguments for Makefile.PL or Build.PL
+ """
+ return []
+
+ def configure(self, spec, prefix):
+ """Runs Makefile.PL or Build.PL with arguments consisting of
+ an appropriate installation base directory followed by the
+ list returned by :py:meth:`~.PerlPackage.configure_args`.
+
+ :raise RuntimeError: if neither Makefile.PL or Build.PL exist
+ """
+ if os.path.isfile('Makefile.PL'):
+ self.build_method = 'Makefile.PL'
+ self.build_executable = inspect.getmodule(self).make
+ elif os.path.isfile('Build.PL'):
+ self.build_method = 'Build.PL'
+ self.build_executable = Executable(
+ join_path(self.stage.source_path, 'Build'))
+ else:
+ raise RuntimeError('Unknown build_method for perl package')
+
+ if self.build_method == 'Makefile.PL':
+ options = ['Makefile.PL', 'INSTALL_BASE={0}'.format(prefix)]
+ elif self.build_method == 'Build.PL':
+ options = ['Build.PL', '--install_base', prefix]
+ options += self.configure_args()
+
+ inspect.getmodule(self).perl(*options)
+
+ def build(self, spec, prefix):
+ """Builds a Perl package."""
+ self.build_executable()
+
+ # Ensure that tests run after build (if requested):
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def check(self):
+ """Runs built-in tests of a Perl package."""
+ self.build_executable('test')
+
+ def install(self, spec, prefix):
+ """Installs a Perl package."""
+ self.build_executable('install')
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/python.py b/lib/spack/spack/build_systems/python.py
index d21c291ae6..b07a196fff 100644
--- a/lib/spack/spack/build_systems/python.py
+++ b/lib/spack/spack/build_systems/python.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,9 +24,10 @@
##############################################################################
import inspect
+import os
-from spack.directives import extends
-from spack.package import PackageBase
+from spack.directives import depends_on, extends
+from spack.package import PackageBase, run_after
from llnl.util.filesystem import working_dir
@@ -74,7 +75,7 @@ class PythonPackage(PackageBase):
.. code-block:: console
- $ python --no-user-cfg setup.py <phase>
+ $ python setup.py --no-user-cfg <phase>
Each phase also has a <phase_args> function that can pass arguments to
this call. All of these functions are empty except for the ``install_args``
@@ -91,33 +92,73 @@ class PythonPackage(PackageBase):
# Default phases
phases = ['build', 'install']
+ # Name of modules that the Python package provides
+ # This is used to test whether or not the installation succeeded
+ # These names generally come from running:
+ #
+ # >>> import setuptools
+ # >>> setuptools.find_packages()
+ #
+ # in the source tarball directory
+ import_modules = []
+
# To be used in UI queries that require to know which
# build-system class we are using
build_system_class = 'PythonPackage'
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['test']
+
+ #: Callback names for install-time test
+ install_time_test_callbacks = ['import_module_test']
+
extends('python')
- def setup_file(self, spec, prefix):
+ depends_on('python', type=('build', 'run'))
+
+ def setup_file(self):
"""Returns the name of the setup file to use."""
return 'setup.py'
+ @property
def build_directory(self):
"""The directory containing the ``setup.py`` file."""
return self.stage.source_path
- def python(self, *args):
- inspect.getmodule(self).python(*args)
+ def python(self, *args, **kwargs):
+ inspect.getmodule(self).python(*args, **kwargs)
+
+ def setup_py(self, *args, **kwargs):
+ setup = self.setup_file()
+
+ with working_dir(self.build_directory):
+ self.python(setup, '--no-user-cfg', *args, **kwargs)
- def setup_py(self, *args):
- setup = self.setup_file(self.spec, self.prefix)
+ def _setup_command_available(self, command):
+ """Determines whether or not a setup.py command exists.
- with working_dir(self.build_directory()):
- self.python(setup, '--no-user-cfg', *args)
+ Args:
+ command (str): The command to look for
+
+ Returns:
+ bool: True if the command is found, else False
+ """
+ kwargs = {
+ 'output': os.devnull,
+ 'error': os.devnull,
+ 'fail_on_error': False
+ }
+
+ python = inspect.getmodule(self).python
+ setup = self.setup_file()
+
+ python(setup, '--no-user-cfg', command, '--help', **kwargs)
+ return python.returncode == 0
# The following phases and their descriptions come from:
# $ python setup.py --help-commands
- # Only standard commands are included here, but some packages
- # define extra commands as well
+
+ # Standard commands
def build(self, spec, prefix):
"""Build everything needed to install."""
@@ -183,7 +224,24 @@ class PythonPackage(PackageBase):
def install_args(self, spec, prefix):
"""Arguments to pass to install."""
- return ['--prefix={0}'.format(prefix)]
+ args = ['--prefix={0}'.format(prefix)]
+
+ # This option causes python packages (including setuptools) NOT
+ # to create eggs or easy-install.pth files. Instead, they
+ # install naturally into $prefix/pythonX.Y/site-packages.
+ #
+ # Eggs add an extra level of indirection to sys.path, slowing
+ # down large HPC runs. They are also deprecated in favor of
+ # wheels, which use a normal layout when installed.
+ #
+ # Spack manages the package directory on its own by symlinking
+ # extensions into the site-packages directory, so we don't really
+ # need the .pth files or egg directories, anyway.
+ if ('py-setuptools' == spec.name or # this is setuptools, or
+ 'py-setuptools' in spec._dependencies): # it's an immediate dep
+ args += ['--single-version-externally-managed', '--root=/']
+
+ return args
def install_lib(self, spec, prefix):
"""Install all Python modules (extensions and pure Python)."""
@@ -305,5 +363,37 @@ class PythonPackage(PackageBase):
"""Arguments to pass to check."""
return []
+ # Testing
+
+ def test(self):
+ """Run unit tests after in-place build.
+
+ These tests are only run if the package actually has a 'test' command.
+ """
+ if self._setup_command_available('test'):
+ args = self.test_args(self.spec, self.prefix)
+
+ self.setup_py('test', *args)
+
+ def test_args(self, spec, prefix):
+ """Arguments to pass to test."""
+ return []
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def import_module_test(self):
+ """Attempts to import the module that was just installed.
+
+ This test is only run if the package overrides
+ :py:attr:`import_modules` with a list of module names."""
+
+ # Make sure we are importing the installed modules,
+ # not the ones in the current directory
+ with working_dir('..'):
+ for module in self.import_modules:
+ self.python('-c', 'import {0}'.format(module))
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
# Check that self.prefix is there after installation
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/qmake.py b/lib/spack/spack/build_systems/qmake.py
new file mode 100644
index 0000000000..70b53664dc
--- /dev/null
+++ b/lib/spack/spack/build_systems/qmake.py
@@ -0,0 +1,87 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import inspect
+
+from spack.directives import depends_on
+from spack.package import PackageBase, run_after
+
+
+class QMakePackage(PackageBase):
+ """Specialized class for packages built using qmake.
+
+ For more information on the qmake build system, see:
+ http://doc.qt.io/qt-5/qmake-manual.html
+
+ This class provides three phases that can be overridden:
+
+ 1. :py:meth:`~.QMakePackage.qmake`
+ 2. :py:meth:`~.QMakePackage.build`
+ 3. :py:meth:`~.QMakePackage.install`
+
+ They all have sensible defaults and for many packages the only thing
+ necessary will be to override :py:meth:`~.QMakePackage.qmake_args`.
+ """
+ #: Phases of a qmake package
+ phases = ['qmake', 'build', 'install']
+
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
+ build_system_class = 'QMakePackage'
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['check']
+
+ depends_on('qt', type='build')
+
+ def qmake_args(self):
+ """Produces a list containing all the arguments that must be passed to
+ qmake
+ """
+ return []
+
+ def qmake(self, spec, prefix):
+ """Run ``qmake`` to configure the project and generate a Makefile."""
+ inspect.getmodule(self).qmake(*self.qmake_args())
+
+ def build(self, spec, prefix):
+ """Make the build targets"""
+ inspect.getmodule(self).make()
+
+ def install(self, spec, prefix):
+ """Make the install targets"""
+ inspect.getmodule(self).make('install')
+
+ # Tests
+
+ def check(self):
+ """Searches the Makefile for a ``check:`` target and runs it if found.
+ """
+ self._if_make_target_execute('check')
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/r.py b/lib/spack/spack/build_systems/r.py
index f642f2dfd8..05a66427ec 100644
--- a/lib/spack/spack/build_systems/r.py
+++ b/lib/spack/spack/build_systems/r.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,34 +25,64 @@
import inspect
-from spack.directives import extends
-from spack.package import PackageBase
+from spack.directives import depends_on, extends
+from spack.package import PackageBase, run_after
class RPackage(PackageBase):
- """Specialized class for packages that are built using R
+ """Specialized class for packages that are built using R.
+
+ For more information on the R build system, see:
+ https://stat.ethz.ch/R-manual/R-devel/library/utils/html/INSTALL.html
This class provides a single phase that can be overridden:
- * install
+ 1. :py:meth:`~.RPackage.install`
- It has sensible defaults and for many packages the only thing
+ It has sensible defaults, and for many packages the only thing
necessary will be to add dependencies
"""
phases = ['install']
- # To be used in UI queries that require to know which
- # build-system class we are using
+ #: This attribute is used in UI queries that need to know the build
+ #: system base class
build_system_class = 'RPackage'
extends('r')
+ depends_on('r', type=('build', 'run'))
+
+ def configure_args(self):
+ """Arguments to pass to install via ``--configure-args``."""
+ return []
+
+ def configure_vars(self):
+ """Arguments to pass to install via ``--configure-vars``."""
+ return []
+
def install(self, spec, prefix):
- """Install the R package"""
- inspect.getmodule(self).R(
- 'CMD', 'INSTALL',
+ """Installs an R package."""
+
+ config_args = self.configure_args()
+ config_vars = self.configure_vars()
+
+ args = [
+ 'CMD',
+ 'INSTALL'
+ ]
+
+ if config_args:
+ args.append('--configure-args={0}'.format(' '.join(config_args)))
+
+ if config_vars:
+ args.append('--configure-vars={0}'.format(' '.join(config_vars)))
+
+ args.extend([
'--library={0}'.format(self.module.r_lib_dir),
- self.stage.source_path)
+ self.stage.source_path
+ ])
+
+ inspect.getmodule(self).R(*args)
# Check that self.prefix is there after installation
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/scons.py b/lib/spack/spack/build_systems/scons.py
new file mode 100644
index 0000000000..0476362e17
--- /dev/null
+++ b/lib/spack/spack/build_systems/scons.py
@@ -0,0 +1,92 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import inspect
+
+from spack.directives import depends_on
+from spack.package import PackageBase, run_after
+
+
+class SConsPackage(PackageBase):
+ """Specialized class for packages built using SCons.
+
+ See http://scons.org/documentation.html for more information.
+
+ This class provides the following phases that can be overridden:
+
+ 1. :py:meth:`~.SConsPackage.build`
+ 2. :py:meth:`~.SConsPackage.install`
+
+ Packages that use SCons as a build system are less uniform than packages
+ that use other build systems. Developers can add custom subcommands or
+ variables that control the build. You will likely need to override
+ :py:meth:`~.SConsPackage.build_args` to pass the appropriate variables.
+ """
+ #: Phases of a SCons package
+ phases = ['build', 'install']
+
+ #: To be used in UI queries that require to know which
+ #: build-system class we are using
+ build_system_class = 'SConsPackage'
+
+ #: Callback names for build-time test
+ build_time_test_callbacks = ['test']
+
+ depends_on('scons', type='build')
+
+ def build_args(self, spec, prefix):
+ """Arguments to pass to build."""
+ return []
+
+ def build(self, spec, prefix):
+ """Build the package."""
+ args = self.build_args(spec, prefix)
+
+ inspect.getmodule(self).scons(*args)
+
+ def install_args(self, spec, prefix):
+ """Arguments to pass to install."""
+ return []
+
+ def install(self, spec, prefix):
+ """Install the package."""
+ args = self.install_args(spec, prefix)
+
+ inspect.getmodule(self).scons('install', *args)
+
+ # Testing
+
+ def test(self):
+ """Run unit tests after build.
+
+ By default, does nothing. Override this if you want to
+ add package-specific tests.
+ """
+ pass
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/build_systems/waf.py b/lib/spack/spack/build_systems/waf.py
new file mode 100644
index 0000000000..2097e1680f
--- /dev/null
+++ b/lib/spack/spack/build_systems/waf.py
@@ -0,0 +1,148 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import inspect
+
+from spack.directives import depends_on
+from spack.package import PackageBase, run_after
+
+from llnl.util.filesystem import working_dir
+
+
+class WafPackage(PackageBase):
+ """Specialized class for packages that are built using the
+ Waf build system. See https://waf.io/book/ for more information.
+
+ This class provides the following phases that can be overridden:
+
+ * configure
+ * build
+ * install
+
+ These are all standard Waf commands and can be found by running:
+
+ .. code-block:: console
+
+ $ python waf --help
+
+ Each phase provides a function <phase> that runs:
+
+ .. code-block:: console
+
+ $ python waf -j<jobs> <phase>
+
+ where <jobs> is the number of parallel jobs to build with. Each phase
+ also has a <phase_args> function that can pass arguments to this call.
+ All of these functions are empty except for the ``configure_args``
+ function, which passes ``--prefix=/path/to/installation/prefix``.
+ """
+ # Default phases
+ phases = ['configure', 'build', 'install']
+
+ # To be used in UI queries that require to know which
+ # build-system class we are using
+ build_system_class = 'WafPackage'
+
+ # Callback names for build-time test
+ build_time_test_callbacks = ['test']
+
+ # Callback names for install-time test
+ install_time_test_callbacks = ['installtest']
+
+ # Much like AutotoolsPackage does not require automake and autoconf
+ # to build, WafPackage does not require waf to build. It only requires
+ # python to run the waf build script.
+ depends_on('python@2.5:', type='build')
+
+ @property
+ def build_directory(self):
+ """The directory containing the ``waf`` file."""
+ return self.stage.source_path
+
+ def python(self, *args, **kwargs):
+ """The python ``Executable``."""
+ inspect.getmodule(self).python(*args, **kwargs)
+
+ def waf(self, *args, **kwargs):
+ """Runs the waf ``Executable``."""
+ jobs = inspect.getmodule(self).make_jobs
+
+ with working_dir(self.build_directory):
+ self.python('waf', '-j{0}'.format(jobs), *args, **kwargs)
+
+ def configure(self, spec, prefix):
+ """Configures the project."""
+ args = self.configure_args()
+
+ self.waf('configure', *args)
+
+ def configure_args(self):
+ """Arguments to pass to configure."""
+ return ['--prefix={0}'.format(self.prefix)]
+
+ def build(self, spec, prefix):
+ """Executes the build."""
+ args = self.build_args()
+
+ self.waf('build', *args)
+
+ def build_args(self):
+ """Arguments to pass to build."""
+ return []
+
+ def install(self, spec, prefix):
+ """Installs the targets on the system."""
+ args = self.install_args()
+
+ self.waf('install', *args)
+
+ def install_args(self):
+ """Arguments to pass to install."""
+ return []
+
+ # Testing
+
+ def test(self):
+ """Run unit tests after build.
+
+ By default, does nothing. Override this if you want to
+ add package-specific tests.
+ """
+ pass
+
+ run_after('build')(PackageBase._run_default_build_time_test_callbacks)
+
+ def installtest(self):
+ """Run unit tests after install.
+
+ By default, does nothing. Override this if you want to
+ add package-specific tests.
+ """
+ pass
+
+ run_after('install')(PackageBase._run_default_install_time_test_callbacks)
+
+ # Check that self.prefix is there after installation
+ run_after('install')(PackageBase.sanity_check_prefix)
diff --git a/lib/spack/spack/cmd/__init__.py b/lib/spack/spack/cmd/__init__.py
index 764b6fffcf..39eb4c2ae1 100644
--- a/lib/spack/spack/cmd/__init__.py
+++ b/lib/spack/spack/cmd/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,14 +22,17 @@
# 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 __future__ import print_function
+
import os
import re
import sys
import llnl.util.tty as tty
-from llnl.util.lang import *
-from llnl.util.tty.colify import *
-from llnl.util.tty.color import *
+from llnl.util.lang import attr_setdefault, index_by
+from llnl.util.tty.colify import colify
+from llnl.util.tty.color import colorize
+from llnl.util.filesystem import working_dir
import spack
import spack.config
@@ -73,7 +76,8 @@ def remove_options(parser, *options):
break
-def get_cmd_function_name(name):
+def get_python_name(name):
+ """Commands can have '-' in their names, unlike Python identifiers."""
return name.replace("-", "_")
@@ -87,7 +91,7 @@ def get_module(name):
attr_setdefault(module, SETUP_PARSER, lambda *args: None) # null-op
attr_setdefault(module, DESCRIPTION, "")
- fn_name = get_cmd_function_name(name)
+ fn_name = get_python_name(name)
if not hasattr(module, fn_name):
tty.die("Command module %s (%s) must define function '%s'." %
(module.__name__, module.__file__, fn_name))
@@ -97,7 +101,8 @@ def get_module(name):
def get_command(name):
"""Imports the command's function from a module and returns it."""
- return getattr(get_module(name), get_cmd_function_name(name))
+ python_name = get_python_name(name)
+ return getattr(get_module(python_name), python_name)
def parse_specs(args, **kwargs):
@@ -150,44 +155,78 @@ def disambiguate_spec(spec):
elif len(matching_specs) > 1:
args = ["%s matches multiple packages." % spec,
"Matching packages:"]
- color = sys.stdout.isatty()
- args += [colorize(" @K{%s} " % s.dag_hash(7), color=color) +
- s.format('$_$@$%@$=', color=color) for s in matching_specs]
+ args += [colorize(" @K{%s} " % s.dag_hash(7)) +
+ s.cformat('$_$@$%@$=') for s in matching_specs]
args += ["Use a more specific spec."]
tty.die(*args)
return matching_specs[0]
-def ask_for_confirmation(message):
- while True:
- tty.msg(message + '[y/n]')
- choice = raw_input().lower()
- if choice == 'y':
- break
- elif choice == 'n':
- raise SystemExit('Operation aborted')
- tty.warn('Please reply either "y" or "n"')
-
-
def gray_hash(spec, length):
return colorize('@K{%s}' % spec.dag_hash(length))
-def display_specs(specs, **kwargs):
- mode = kwargs.get('mode', 'short')
- hashes = kwargs.get('long', False)
- namespace = kwargs.get('namespace', False)
- flags = kwargs.get('show_flags', False)
- variants = kwargs.get('variants', False)
+def display_specs(specs, args=None, **kwargs):
+ """Display human readable specs with customizable formatting.
+
+ Prints the supplied specs to the screen, formatted according to the
+ arguments provided.
+
+ Specs are grouped by architecture and compiler, and columnized if
+ possible. There are three possible "modes":
+
+ * ``short`` (default): short specs with name and version, columnized
+ * ``paths``: Two columns: one for specs, one for paths
+ * ``deps``: Dependency-tree style, like ``spack spec``; can get long
+
+ Options can add more information to the default display. Options can
+ be provided either as keyword arguments or as an argparse namespace.
+ Keyword arguments take precedence over settings in the argparse
+ namespace.
+
+ Args:
+ specs (list of spack.spec.Spec): the specs to display
+ args (optional argparse.Namespace): namespace containing
+ formatting arguments
+
+ Keyword Args:
+ mode (str): Either 'short', 'paths', or 'deps'
+ long (bool): Display short hashes with specs
+ very_long (bool): Display full hashes with specs (supersedes ``long``)
+ namespace (bool): Print namespaces along with names
+ show_flags (bool): Show compiler flags with specs
+ variants (bool): Show variants with specs
+
+ """
+ def get_arg(name, default=None):
+ """Prefer kwargs, then args, then default."""
+ if name in kwargs:
+ return kwargs.get(name)
+ elif args is not None:
+ return getattr(args, name, default)
+ else:
+ return default
+
+ mode = get_arg('mode', 'short')
+ hashes = get_arg('long', False)
+ namespace = get_arg('namespace', False)
+ flags = get_arg('show_flags', False)
+ full_compiler = get_arg('show_full_compiler', False)
+ variants = get_arg('variants', False)
hlen = 7
- if kwargs.get('very_long', False):
+ if get_arg('very_long', False):
hashes = True
hlen = None
nfmt = '.' if namespace else '_'
- ffmt = '$%+' if flags else ''
+ ffmt = ''
+ if full_compiler or flags:
+ ffmt += '$%'
+ if full_compiler:
+ ffmt += '@'
+ ffmt += '+'
vfmt = '$+' if variants else ''
format_string = '$%s$@%s%s' % (nfmt, ffmt, vfmt)
@@ -197,7 +236,7 @@ def display_specs(specs, **kwargs):
# Traverse the index and print out each package
for i, (architecture, compiler) in enumerate(sorted(index)):
if i > 0:
- print
+ print()
header = "%s{%s} / %s{%s}" % (spack.spec.architecture_color,
architecture, spack.spec.compiler_color,
@@ -207,7 +246,7 @@ def display_specs(specs, **kwargs):
specs = index[(architecture, compiler)]
specs.sort()
- abbreviated = [s.format(format_string, color=True) for s in specs]
+ abbreviated = [s.cformat(format_string) for s in specs]
if mode == 'paths':
# Print one spec per line along with prefix path
width = max(len(s) for s in abbreviated)
@@ -216,25 +255,24 @@ def display_specs(specs, **kwargs):
for abbrv, spec in zip(abbreviated, specs):
prefix = gray_hash(spec, hlen) if hashes else ''
- print prefix + (format % (abbrv, spec.prefix))
+ print(prefix + (format % (abbrv, spec.prefix)))
elif mode == 'deps':
for spec in specs:
print(spec.tree(
format=format_string,
- color=True,
indent=4,
prefix=(lambda s: gray_hash(s, hlen)) if hashes else None))
elif mode == 'short':
# Print columns of output if not printing flags
- if not flags:
+ if not flags and not full_compiler:
def fmt(s):
string = ""
if hashes:
string += gray_hash(s, hlen) + ' '
- string += s.format('$-%s$@%s' % (nfmt, vfmt), color=True)
+ string += s.cformat('$-%s$@%s' % (nfmt, vfmt))
return string
@@ -244,9 +282,15 @@ def display_specs(specs, **kwargs):
for spec in specs:
# Print the hash if necessary
hsh = gray_hash(spec, hlen) + ' ' if hashes else ''
- print(hsh + spec.format(format_string, color=True) + '\n')
+ print(hsh + spec.cformat(format_string) + '\n')
else:
raise ValueError(
"Invalid mode for display_specs: %s. Must be one of (paths,"
"deps, short)." % mode)
+
+
+def spack_is_git_repo():
+ """Ensure that this instance of Spack is a git clone."""
+ with working_dir(spack.prefix):
+ return os.path.isdir('.git')
diff --git a/lib/spack/spack/cmd/activate.py b/lib/spack/spack/cmd/activate.py
index 797cdcb136..a5909df9fb 100644
--- a/lib/spack/spack/cmd/activate.py
+++ b/lib/spack/spack/cmd/activate.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,17 +26,23 @@ import argparse
import llnl.util.tty as tty
import spack
import spack.cmd
+from spack.directory_layout import YamlViewExtensionsLayout
-description = "Activate a package extension."
+description = "activate a package extension"
+section = "extensions"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-f', '--force', action='store_true',
- help="Activate without first activating dependencies.")
+ help="activate without first activating dependencies")
+ subparser.add_argument(
+ '-v', '--view', metavar='VIEW', type=str,
+ help="the view to operate on")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="spec of package extension to activate.")
+ help="spec of package extension to activate")
def activate(parser, args):
@@ -48,7 +54,11 @@ def activate(parser, args):
if not spec.package.is_extension:
tty.die("%s is not an extension." % spec.name)
- if spec.package.activated:
+ layout = spack.store.extensions
+ if args.view is not None:
+ layout = YamlViewExtensionsLayout(args.view, spack.store.layout)
+
+ if spec.package.is_activated(extensions_layout=layout):
tty.die("Package %s is already activated." % specs[0].short_spec)
- spec.package.do_activate()
+ spec.package.do_activate(extensions_layout=layout)
diff --git a/lib/spack/spack/cmd/arch.py b/lib/spack/spack/cmd/arch.py
index 4e29230c28..c8f844e4c1 100644
--- a/lib/spack/spack/cmd/arch.py
+++ b/lib/spack/spack/cmd/arch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,20 +22,24 @@
# 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 __future__ import print_function
+
import spack.architecture as architecture
-description = "Print architecture information about this machine."
+description = "print architecture information about this machine"
+section = "system"
+level = "short"
def setup_parser(subparser):
parts = subparser.add_mutually_exclusive_group()
parts.add_argument(
'-p', '--platform', action='store_true', default=False,
- help="Print only the platform.")
+ help="print only the platform")
def arch(parser, args):
if args.platform:
- print architecture.platform()
+ print(architecture.platform())
else:
- print architecture.sys_type()
+ print(architecture.sys_type())
diff --git a/lib/spack/spack/cmd/blame.py b/lib/spack/spack/cmd/blame.py
new file mode 100644
index 0000000000..a4f75da19a
--- /dev/null
+++ b/lib/spack/spack/cmd/blame.py
@@ -0,0 +1,131 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+import re
+
+import llnl.util.tty as tty
+from llnl.util.lang import pretty_date
+from llnl.util.filesystem import working_dir
+from llnl.util.tty.colify import colify_table
+
+import spack
+from spack.util.executable import which
+from spack.cmd import spack_is_git_repo
+
+
+description = "show contributors to packages"
+section = "developer"
+level = "long"
+
+
+def setup_parser(subparser):
+ view_group = subparser.add_mutually_exclusive_group()
+ view_group.add_argument(
+ '-t', '--time', dest='view', action='store_const', const='time',
+ default='time', help='sort by last modification date (default)')
+ view_group.add_argument(
+ '-p', '--percent', dest='view', action='store_const', const='percent',
+ help='sort by percent of code')
+ view_group.add_argument(
+ '-g', '--git', dest='view', action='store_const', const='git',
+ help='show git blame output instead of summary')
+
+ subparser.add_argument(
+ 'package_name', help='name of package to show contributions for, '
+ 'or path to a file in the spack repo')
+
+
+def blame(parser, args):
+ # make sure this is a git repo
+ if not spack_is_git_repo():
+ tty.die("This spack is not a git clone. Can't use 'spack blame'")
+ git = which('git', required=True)
+
+ # Get name of file to blame
+ blame_file = None
+ if os.path.isfile(args.package_name):
+ path = os.path.realpath(args.package_name)
+ if path.startswith(spack.prefix):
+ blame_file = path
+
+ if not blame_file:
+ pkg = spack.repo.get(args.package_name)
+ blame_file = pkg.module.__file__.rstrip('c') # .pyc -> .py
+
+ # get git blame for the package
+ with working_dir(spack.prefix):
+ if args.view == 'git':
+ git('blame', blame_file)
+ return
+ else:
+ output = git('blame', '--line-porcelain', blame_file, output=str)
+ lines = output.split('\n')
+
+ # Histogram authors
+ counts = {}
+ emails = {}
+ last_mod = {}
+ total_lines = 0
+ for line in lines:
+ match = re.match(r'^author (.*)', line)
+ if match:
+ author = match.group(1)
+
+ match = re.match(r'^author-mail (.*)', line)
+ if match:
+ email = match.group(1)
+
+ match = re.match(r'^author-time (.*)', line)
+ if match:
+ mod = int(match.group(1))
+ last_mod[author] = max(last_mod.setdefault(author, 0), mod)
+
+ # ignore comments
+ if re.match(r'^\t[^#]', line):
+ counts[author] = counts.setdefault(author, 0) + 1
+ emails.setdefault(author, email)
+ total_lines += 1
+
+ if args.view == 'time':
+ rows = sorted(
+ counts.items(), key=lambda t: last_mod[t[0]], reverse=True)
+ else: # args.view == 'percent'
+ rows = sorted(counts.items(), key=lambda t: t[1], reverse=True)
+
+ # Print a nice table with authors and emails
+ table = [['LAST_COMMIT', 'LINES', '%', 'AUTHOR', 'EMAIL']]
+ for author, nlines in rows:
+ table += [[
+ pretty_date(last_mod[author]),
+ nlines,
+ round(nlines / float(total_lines) * 100, 1),
+ author,
+ emails[author]]]
+
+ table += [[''] * 5]
+ table += [[pretty_date(max(last_mod.values())), total_lines, '100.0'] +
+ [''] * 3]
+
+ colify_table(table)
diff --git a/lib/spack/spack/cmd/bootstrap.py b/lib/spack/spack/cmd/bootstrap.py
index a79ef4aa68..b41b568fb3 100644
--- a/lib/spack/spack/cmd/bootstrap.py
+++ b/lib/spack/spack/cmd/bootstrap.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,84 +22,69 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
import llnl.util.tty as tty
-from llnl.util.filesystem import join_path, mkdirp
-
import spack
-from spack.util.executable import ProcessError, which
-
-_SPACK_UPSTREAM = 'https://github.com/llnl/spack'
+import spack.cmd
+import spack.cmd.common.arguments as arguments
-description = "Create a new installation of spack in another prefix"
+description = "Bootstrap packages needed for spack to run smoothly"
+section = "admin"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
- '-r', '--remote', action='store', dest='remote',
- help="name of the remote to bootstrap from", default='origin')
+ '-j', '--jobs', action='store', type=int,
+ help="explicitly set number of make jobs. default is #cpus")
subparser.add_argument(
- 'prefix',
- help="names of prefix where we should install spack")
-
-
-def get_origin_info(remote):
- git_dir = join_path(spack.prefix, '.git')
- git = which('git', required=True)
- try:
- branch = git('symbolic-ref', '--short', 'HEAD', output=str)
- except ProcessError:
- branch = 'develop'
- tty.warn('No branch found; using default branch: %s' % branch)
- if remote == 'origin' and \
- branch not in ('master', 'develop'):
- branch = 'develop'
- tty.warn('Unknown branch found; using default branch: %s' % branch)
- try:
- origin_url = git(
- '--git-dir=%s' % git_dir,
- 'config', '--get', 'remote.%s.url' % remote,
- output=str)
- except ProcessError:
- origin_url = _SPACK_UPSTREAM
- tty.warn('No git repository found; '
- 'using default upstream URL: %s' % origin_url)
- return (origin_url.strip(), branch.strip())
-
-
-def bootstrap(parser, args):
- origin_url, branch = get_origin_info(args.remote)
- prefix = args.prefix
-
- tty.msg("Fetching spack from '%s': %s" % (args.remote, origin_url))
-
- if os.path.isfile(prefix):
- tty.die("There is already a file at %s" % prefix)
-
- mkdirp(prefix)
-
- if os.path.exists(join_path(prefix, '.git')):
- tty.die("There already seems to be a git repository in %s" % prefix)
-
- files_in_the_way = os.listdir(prefix)
- if files_in_the_way:
- tty.die("There are already files there! "
- "Delete these files before boostrapping spack.",
- *files_in_the_way)
-
- tty.msg("Installing:",
- "%s/bin/spack" % prefix,
- "%s/lib/spack/..." % prefix)
+ '--keep-prefix', action='store_true', dest='keep_prefix',
+ help="don't remove the install prefix if installation fails")
+ subparser.add_argument(
+ '--keep-stage', action='store_true', dest='keep_stage',
+ help="don't remove the build stage if installation succeeds")
+ subparser.add_argument(
+ '-n', '--no-checksum', action='store_true', dest='no_checksum',
+ help="do not check packages against checksum")
+ subparser.add_argument(
+ '-v', '--verbose', action='store_true', dest='verbose',
+ help="display verbose build output while installing")
- os.chdir(prefix)
- git = which('git', required=True)
- git('init', '--shared', '-q')
- git('remote', 'add', 'origin', origin_url)
- git('fetch', 'origin', '%s:refs/remotes/origin/%s' % (branch, branch),
- '-n', '-q')
- git('reset', '--hard', 'origin/%s' % branch, '-q')
- git('checkout', '-B', branch, 'origin/%s' % branch, '-q')
+ cd_group = subparser.add_mutually_exclusive_group()
+ arguments.add_common_arguments(cd_group, ['clean', 'dirty'])
- tty.msg("Successfully created a new spack in %s" % prefix,
- "Run %s/bin/spack to use this installation." % prefix)
+ subparser.add_argument(
+ '--run-tests', action='store_true', dest='run_tests',
+ help="run package level tests during installation"
+ )
+
+
+def bootstrap(parser, args, **kwargs):
+ kwargs.update({
+ 'keep_prefix': args.keep_prefix,
+ 'keep_stage': args.keep_stage,
+ 'install_deps': 'dependencies',
+ 'make_jobs': args.jobs,
+ 'run_tests': args.run_tests,
+ 'verbose': args.verbose,
+ 'dirty': args.dirty
+ })
+
+ # Define requirement dictionary defining general specs which need
+ # to be satisfied, and the specs to install when the general spec
+ # isn't satisfied.
+ requirement_dict = {'environment-modules': 'environment-modules~X'}
+
+ for requirement in requirement_dict:
+ installed_specs = spack.store.db.query(requirement)
+ if(len(installed_specs) > 0):
+ tty.msg("Requirement %s is satisfied with installed "
+ "package %s" % (requirement, installed_specs[0]))
+ else:
+ # Install requirement
+ spec_to_install = spack.Spec(requirement_dict[requirement])
+ spec_to_install.concretize()
+ tty.msg("Installing %s to satisfy requirement for %s" %
+ (spec_to_install, requirement))
+ kwargs['explicit'] = True
+ package = spack.repo.get(spec_to_install)
+ package.do_install(**kwargs)
diff --git a/lib/spack/spack/cmd/build.py b/lib/spack/spack/cmd/build.py
index 6c0029794f..08fb9f1350 100644
--- a/lib/spack/spack/cmd/build.py
+++ b/lib/spack/spack/cmd/build.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,14 +24,27 @@
##############################################################################
import spack.cmd.configure as cfg
-from spack import *
+from spack.build_systems.autotools import AutotoolsPackage
+from spack.build_systems.cmake import CMakePackage
+from spack.build_systems.qmake import QMakePackage
+from spack.build_systems.scons import SConsPackage
+from spack.build_systems.waf import WafPackage
+from spack.build_systems.python import PythonPackage
+from spack.build_systems.perl import PerlPackage
+
+description = 'stops at build stage when installing a package, if possible'
+section = "build"
+level = "long"
-description = 'Stops at build stage when installing a package, if possible'
build_system_to_phase = {
- CMakePackage: 'build',
AutotoolsPackage: 'build',
- PythonPackage: 'build'
+ CMakePackage: 'build',
+ QMakePackage: 'build',
+ SConsPackage: 'build',
+ WafPackage: 'build',
+ PythonPackage: 'build',
+ PerlPackage: 'build',
}
diff --git a/lib/spack/spack/cmd/buildcache.py b/lib/spack/spack/cmd/buildcache.py
new file mode 100644
index 0000000000..653c59074a
--- /dev/null
+++ b/lib/spack/spack/cmd/buildcache.py
@@ -0,0 +1,335 @@
+##############################################################################
+# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC.
+# Produced at the Lawrence Livermore National Laboratory.
+#
+# This file is part of Spack.
+# Written by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/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 General Public License (as published by
+# the Free Software Foundation) version 2.1 dated 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 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
+##############################################################################
+import argparse
+
+import os
+import llnl.util.tty as tty
+
+import spack
+import spack.cmd
+import spack.binary_distribution as bindist
+from spack.binary_distribution import NoOverwriteException, NoGpgException
+from spack.binary_distribution import NoKeyException, PickKeyException
+from spack.binary_distribution import NoVerifyException, NoChecksumException
+
+description = "Create, download and install build cache files."
+section = "caching"
+level = "long"
+
+
+def setup_parser(subparser):
+ setup_parser.parser = subparser
+ subparsers = subparser.add_subparsers(help='buildcache sub-commands')
+
+ create = subparsers.add_parser('create')
+ create.add_argument('-r', '--rel', action='store_true',
+ help="make all rpaths relative" +
+ " before creating tarballs.")
+ create.add_argument('-f', '--force', action='store_true',
+ help="overwrite tarball if it exists.")
+ create.add_argument('-y', '--yes-to-all', action='store_true',
+ help="answer yes to all create unsigned " +
+ "buildcache questions")
+ create.add_argument('-k', '--key', metavar='key',
+ type=str, default=None,
+ help="Key for signing.")
+ create.add_argument('-d', '--directory', metavar='directory',
+ type=str, default='.',
+ help="directory in which to save the tarballs.")
+ create.add_argument(
+ 'packages', nargs=argparse.REMAINDER,
+ help="specs of packages to create buildcache for")
+ create.set_defaults(func=createtarball)
+
+ install = subparsers.add_parser('install')
+ install.add_argument('-f', '--force', action='store_true',
+ help="overwrite install directory if it exists.")
+ install.add_argument('-y', '--yes-to-all', action='store_true',
+ help="answer yes to all install unsigned " +
+ "buildcache questions")
+ install.add_argument(
+ 'packages', nargs=argparse.REMAINDER,
+ help="specs of packages to install biuldache for")
+ install.set_defaults(func=installtarball)
+
+ listcache = subparsers.add_parser('list')
+ listcache.add_argument('-f', '--force', action='store_true',
+ help="force new download of specs")
+ listcache.add_argument(
+ 'packages', nargs=argparse.REMAINDER,
+ help="specs of packages to search for")
+ listcache.set_defaults(func=listspecs)
+
+ dlkeys = subparsers.add_parser('keys')
+ dlkeys.add_argument(
+ '-i', '--install', action='store_true',
+ help="install Keys pulled from mirror")
+ dlkeys.add_argument(
+ '-y', '--yes-to-all', action='store_true',
+ help="answer yes to all trust questions")
+ dlkeys.add_argument('-f', '--force', action='store_true',
+ help="force new download of keys")
+ dlkeys.set_defaults(func=getkeys)
+
+
+def find_matching_specs(pkgs, allow_multiple_matches=False, force=False):
+ """Returns a list of specs matching the not necessarily
+ concretized specs given from cli
+
+ Args:
+ specs: list of specs to be matched against installed packages
+ allow_multiple_matches : if True multiple matches are admitted
+
+ Return:
+ list of specs
+ """
+ # List of specs that match expressions given via command line
+ specs_from_cli = []
+ has_errors = False
+ specs = spack.cmd.parse_specs(pkgs)
+ for spec in specs:
+ matching = spack.store.db.query(spec)
+ # For each spec provided, make sure it refers to only one package.
+ # Fail and ask user to be unambiguous if it doesn't
+ if not allow_multiple_matches and len(matching) > 1:
+ tty.error('%s matches multiple installed packages:' % spec)
+ for match in matching:
+ tty.msg('"%s"' % match.format())
+ has_errors = True
+
+ # No installed package matches the query
+ if len(matching) == 0 and spec is not any:
+ tty.error('{0} does not match any installed packages.'.format(
+ spec))
+ has_errors = True
+
+ specs_from_cli.extend(matching)
+ if has_errors:
+ tty.die('use one of the matching specs above')
+
+ return specs_from_cli
+
+
+def match_downloaded_specs(pkgs, allow_multiple_matches=False, force=False):
+ """Returns a list of specs matching the not necessarily
+ concretized specs given from cli
+
+ Args:
+ specs: list of specs to be matched against buildcaches on mirror
+ allow_multiple_matches : if True multiple matches are admitted
+
+ Return:
+ list of specs
+ """
+ # List of specs that match expressions given via command line
+ specs_from_cli = []
+ has_errors = False
+ specs = bindist.get_specs(force)
+ for pkg in pkgs:
+ matches = []
+ tty.msg("buildcache spec(s) matching %s \n" % pkg)
+ for spec in sorted(specs):
+ if pkg.startswith('/'):
+ pkghash = pkg.replace('/', '')
+ if spec.dag_hash().startswith(pkghash):
+ matches.append(spec)
+ else:
+ if spec.satisfies(pkg):
+ matches.append(spec)
+ # For each pkg provided, make sure it refers to only one package.
+ # Fail and ask user to be unambiguous if it doesn't
+ if not allow_multiple_matches and len(matches) > 1:
+ tty.error('%s matches multiple downloaded packages:' % pkg)
+ for match in matches:
+ tty.msg('"%s"' % match.format())
+ has_errors = True
+
+ # No downloaded package matches the query
+ if len(matches) == 0:
+ tty.error('%s does not match any downloaded packages.' % pkg)
+ has_errors = True
+
+ specs_from_cli.extend(matches)
+ if has_errors:
+ tty.die('use one of the matching specs above')
+
+ return specs_from_cli
+
+
+def createtarball(args):
+ if not args.packages:
+ tty.die("build cache file creation requires at least one" +
+ " installed package argument")
+ pkgs = set(args.packages)
+ specs = set()
+ outdir = os.getcwd()
+ if args.directory:
+ outdir = args.directory
+ signkey = None
+ if args.key:
+ signkey = args.key
+ yes_to_all = False
+ force = False
+ relative = False
+ if args.yes_to_all:
+ yes_to_all = True
+ if args.force:
+ force = True
+ if args.rel:
+ relative = True
+
+ matches = find_matching_specs(pkgs, False, False)
+ for match in matches:
+ if match.external or match.virtual:
+ tty.msg('skipping external or virtual spec %s' %
+ match.format())
+ else:
+ tty.msg('adding matching spec %s' % match.format())
+ specs.add(match)
+ tty.msg('recursing dependencies')
+ for d, node in match.traverse(order='post',
+ depth=True,
+ deptype=('link', 'run')):
+ if node.external or node.virtual:
+ tty.msg('skipping external or virtual dependency %s' %
+ node.format())
+ else:
+ tty.msg('adding dependency %s' % node.format())
+ specs.add(node)
+
+ for spec in specs:
+ tty.msg('creating binary cache file for package %s ' % spec.format())
+ try:
+ bindist.build_tarball(spec, outdir, force,
+ relative, yes_to_all, signkey)
+ except NoOverwriteException as e:
+ tty.warn("%s exists, use -f to force overwrite." % e)
+ except NoGpgException:
+ tty.die("gpg2 is not available,"
+ " use -y to create unsigned build caches")
+ except NoKeyException:
+ tty.die("no default key available for signing,"
+ " use -y to create unsigned build caches"
+ " or spack gpg init to create a default key")
+ except PickKeyException:
+ tty.die("multi keys available for signing,"
+ " use -y to create unsigned build caches"
+ " or -k <key hash> to pick a key")
+
+
+def installtarball(args):
+ if not args.packages:
+ tty.die("build cache file installation requires" +
+ " at least one package spec argument")
+ pkgs = set(args.packages)
+ yes_to_all = False
+ if args.yes_to_all:
+ yes_to_all = True
+ force = False
+ if args.force:
+ force = True
+ matches = match_downloaded_specs(pkgs, yes_to_all, force)
+
+ for match in matches:
+ install_tarball(match, args)
+
+
+def install_tarball(spec, args):
+ s = spack.spec.Spec(spec)
+ if s.external or s.virtual:
+ tty.warn("Skipping external or virtual package %s" % spec.format())
+ return
+ yes_to_all = False
+ if args.yes_to_all:
+ yes_to_all = True
+ force = False
+ if args.force:
+ force = True
+ for d in s.dependencies(deptype=('link', 'run')):
+ tty.msg("Installing buildcache for dependency spec %s" % d)
+ install_tarball(d, args)
+ package = spack.repo.get(spec)
+ if s.concrete and package.installed and not force:
+ tty.warn("Package for spec %s already installed." % spec.format(),
+ " Use -f flag to overwrite.")
+ else:
+ tarball = bindist.download_tarball(spec)
+ if tarball:
+ tty.msg('Installing buildcache for spec %s' % spec.format())
+ try:
+ bindist.extract_tarball(spec, tarball, yes_to_all, force)
+ except NoOverwriteException as e:
+ tty.warn("%s exists. use -f to force overwrite." % e.args)
+ except NoVerifyException:
+ tty.die("Package spec file failed signature verification,"
+ " use -y flag to install build cache")
+ except NoChecksumException:
+ tty.die("Package tarball failed checksum verification,"
+ " use -y flag to install build cache")
+ finally:
+ spack.store.db.reindex(spack.store.layout)
+ else:
+ tty.die('Download of binary cache file for spec %s failed.' %
+ spec.format())
+
+
+def listspecs(args):
+ specs = bindist.get_specs(args.force)
+ if args.packages:
+ pkgs = set(args.packages)
+ for pkg in pkgs:
+ tty.msg("buildcache spec(s) matching " +
+ "%s and commands to install them" % pkgs)
+ for spec in sorted(specs):
+ if spec.satisfies(pkg):
+ tty.msg('Enter\nspack buildcache install /%s\n' %
+ spec.dag_hash(7) +
+ ' to install "%s"' %
+ spec.format())
+ else:
+ tty.msg("buildcache specs and commands to install them")
+ for spec in sorted(specs):
+ tty.msg('Enter\nspack buildcache install /%s\n' %
+ spec.dag_hash(7) +
+ ' to install "%s"' %
+ spec.format())
+
+
+def getkeys(args):
+ install = False
+ if args.install:
+ install = True
+ yes_to_all = False
+ if args.yes_to_all:
+ yes_to_all = True
+ force = False
+ if args.force:
+ force = True
+ bindist.get_keys(install, yes_to_all, force)
+
+
+def buildcache(parser, args):
+ if args.func:
+ args.func(args)
diff --git a/lib/spack/spack/cmd/cd.py b/lib/spack/spack/cmd/cd.py
index cf7232258c..bf86ba573d 100644
--- a/lib/spack/spack/cmd/cd.py
+++ b/lib/spack/spack/cmd/cd.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,9 @@
import spack.cmd.location
import spack.modules
-description = "cd to spack directories in the shell."
+description = "cd to spack directories in the shell"
+section = "environment"
+level = "long"
def setup_parser(subparser):
diff --git a/lib/spack/spack/cmd/checksum.py b/lib/spack/spack/cmd/checksum.py
index 8e4de0efc3..4a930ac5d0 100644
--- a/lib/spack/spack/cmd/checksum.py
+++ b/lib/spack/spack/cmd/checksum.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,112 +25,30 @@
from __future__ import print_function
import argparse
-import hashlib
import llnl.util.tty as tty
import spack
import spack.cmd
import spack.util.crypto
-from spack.stage import Stage, FailedDownloadError
-from spack.util.naming import *
-from spack.version import *
+import spack.util.web
+from spack.util.naming import valid_fully_qualified_module_name
+from spack.version import ver, Version
-description = "Checksum available versions of a package."
+description = "checksum available versions of a package"
+section = "packaging"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'package',
- help='Package to checksum versions for')
+ help='package to checksum versions for')
subparser.add_argument(
'--keep-stage', action='store_true',
- help="Don't clean up staging area when command completes.")
+ help="don't clean up staging area when command completes")
subparser.add_argument(
'versions', nargs=argparse.REMAINDER,
- help='Versions to generate checksums for')
-
-
-def get_checksums(url_dict, name, **kwargs):
- """Fetches and checksums archives from URLs.
-
- This function is called by both ``spack checksum`` and ``spack create``.
- The ``first_stage_function`` kwarg allows ``spack create`` to determine
- things like the build system of the archive.
-
- :param dict url_dict: A dictionary of the form: version -> URL
- :param str name: The name of the package
- :param callable first_stage_function: Function to run on first staging area
- :param bool keep_stage: Don't clean up staging area when command completes
-
- :returns: A multi-line string containing versions and corresponding hashes
- :rtype: str
- """
- first_stage_function = kwargs.get('first_stage_function', None)
- keep_stage = kwargs.get('keep_stage', False)
-
- sorted_versions = sorted(url_dict.keys(), reverse=True)
-
- # Find length of longest string in the list for padding
- max_len = max(len(str(v)) for v in sorted_versions)
- num_ver = len(sorted_versions)
-
- tty.msg("Found {0} version{1} of {2}:".format(
- num_ver, '' if num_ver == 1 else 's', name),
- "",
- *spack.cmd.elide_list(
- ["{0:{1}} {2}".format(v, max_len, url_dict[v])
- for v in sorted_versions]))
- print()
-
- archives_to_fetch = tty.get_number(
- "How many would you like to checksum?", default=1, abort='q')
-
- if not archives_to_fetch:
- tty.die("Aborted.")
-
- versions = sorted_versions[:archives_to_fetch]
- urls = [url_dict[v] for v in versions]
-
- tty.msg("Downloading...")
- version_hashes = []
- i = 0
- for url, version in zip(urls, versions):
- try:
- with Stage(url, keep=keep_stage) as stage:
- # Fetch the archive
- stage.fetch()
- if i == 0 and first_stage_function:
- # Only run first_stage_function the first time,
- # no need to run it every time
- first_stage_function(stage, url)
-
- # Checksum the archive and add it to the list
- version_hashes.append((version, spack.util.crypto.checksum(
- hashlib.md5, stage.archive_file)))
- i += 1
- except FailedDownloadError:
- tty.msg("Failed to fetch {0}".format(url))
- except Exception as e:
- tty.msg("Something failed on {0}, skipping.".format(url),
- " ({0})".format(e))
-
- if not version_hashes:
- tty.die("Could not fetch any versions for {0}".format(name))
-
- # Find length of longest string in the list for padding
- max_len = max(len(str(v)) for v, h in version_hashes)
-
- # Generate the version directives to put in a package.py
- version_lines = "\n".join([
- " version('{0}', {1}'{2}')".format(
- v, ' ' * (max_len - len(str(v))), h) for v, h in version_hashes
- ])
-
- num_hash = len(version_hashes)
- tty.msg("Checksummed {0} version{1} of {2}".format(
- num_hash, '' if num_hash == 1 else 's', name))
-
- return version_lines
+ help='versions to generate checksums for')
def checksum(parser, args):
@@ -157,7 +75,7 @@ def checksum(parser, args):
if not url_dict:
tty.die("Could not find any versions for {0}".format(pkg.name))
- version_lines = get_checksums(
+ version_lines = spack.util.web.get_checksums_for_versions(
url_dict, pkg.name, keep_stage=args.keep_stage)
print()
diff --git a/lib/spack/spack/cmd/clean.py b/lib/spack/spack/cmd/clean.py
index dc62fbcaf6..62359aaa42 100644
--- a/lib/spack/spack/cmd/clean.py
+++ b/lib/spack/spack/cmd/clean.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,19 +29,60 @@ import llnl.util.tty as tty
import spack
import spack.cmd
-description = "Remove build stage and source tarball for packages."
+description = "remove temporary build files and/or downloaded archives"
+section = "build"
+level = "long"
+
+
+class AllClean(argparse.Action):
+ """Activates flags -s -d and -m simultaneously"""
+ def __call__(self, parser, namespace, values, option_string=None):
+ parser.parse_args(['-sdm'], namespace=namespace)
def setup_parser(subparser):
- subparser.add_argument('packages', nargs=argparse.REMAINDER,
- help="specs of packages to clean")
+ subparser.add_argument(
+ '-s', '--stage', action='store_true',
+ help="remove all temporary build stages (default)")
+ subparser.add_argument(
+ '-d', '--downloads', action='store_true',
+ help="remove cached downloads")
+ subparser.add_argument(
+ '-m', '--misc-cache', action='store_true',
+ help="remove long-lived caches, like the virtual package index")
+ subparser.add_argument(
+ '-a', '--all', action=AllClean, help="equivalent to -sdm", nargs=0
+ )
+ subparser.add_argument(
+ 'specs',
+ nargs=argparse.REMAINDER,
+ help="removes the build stages and tarballs for specs"
+ )
def clean(parser, args):
- if not args.packages:
- tty.die("spack clean requires at least one package spec.")
- specs = spack.cmd.parse_specs(args.packages, concretize=True)
- for spec in specs:
- package = spack.repo.get(spec)
- package.do_clean()
+ # If nothing was set, activate the default
+ if not any([args.specs, args.stage, args.downloads, args.misc_cache]):
+ args.stage = True
+
+ # Then do the cleaning falling through the cases
+ if args.specs:
+ specs = spack.cmd.parse_specs(args.specs, concretize=True)
+ for spec in specs:
+ msg = 'Cleaning build stage [{0}]'
+ tty.msg(msg.format(spec.short_spec))
+ package = spack.repo.get(spec)
+ package.do_clean()
+
+ if args.stage:
+ tty.msg('Removing all temporary build stages')
+ spack.stage.purge()
+
+ if args.downloads:
+ tty.msg('Removing cached downloads')
+ spack.fetch_cache.destroy()
+
+ if args.misc_cache:
+ tty.msg('Removing cached information on repositories')
+ spack.misc_cache.destroy()
diff --git a/lib/spack/spack/cmd/clone.py b/lib/spack/spack/cmd/clone.py
new file mode 100644
index 0000000000..1394368f0b
--- /dev/null
+++ b/lib/spack/spack/cmd/clone.py
@@ -0,0 +1,107 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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
+##############################################################################
+import os
+
+import llnl.util.tty as tty
+from llnl.util.filesystem import mkdirp, working_dir
+
+import spack
+from spack.util.executable import ProcessError, which
+
+_SPACK_UPSTREAM = 'https://github.com/spack/spack'
+
+description = "create a new installation of spack in another prefix"
+section = "admin"
+level = "long"
+
+
+def setup_parser(subparser):
+ subparser.add_argument(
+ '-r', '--remote', action='store', dest='remote',
+ help="name of the remote to clone from", default='origin')
+ subparser.add_argument(
+ 'prefix',
+ help="names of prefix where we should install spack")
+
+
+def get_origin_info(remote):
+ git_dir = os.path.join(spack.prefix, '.git')
+ git = which('git', required=True)
+ try:
+ branch = git('symbolic-ref', '--short', 'HEAD', output=str)
+ except ProcessError:
+ branch = 'develop'
+ tty.warn('No branch found; using default branch: %s' % branch)
+ if remote == 'origin' and \
+ branch not in ('master', 'develop'):
+ branch = 'develop'
+ tty.warn('Unknown branch found; using default branch: %s' % branch)
+ try:
+ origin_url = git(
+ '--git-dir=%s' % git_dir,
+ 'config', '--get', 'remote.%s.url' % remote,
+ output=str)
+ except ProcessError:
+ origin_url = _SPACK_UPSTREAM
+ tty.warn('No git repository found; '
+ 'using default upstream URL: %s' % origin_url)
+ return (origin_url.strip(), branch.strip())
+
+
+def clone(parser, args):
+ origin_url, branch = get_origin_info(args.remote)
+ prefix = args.prefix
+
+ tty.msg("Fetching spack from '%s': %s" % (args.remote, origin_url))
+
+ if os.path.isfile(prefix):
+ tty.die("There is already a file at %s" % prefix)
+
+ mkdirp(prefix)
+
+ if os.path.exists(os.path.join(prefix, '.git')):
+ tty.die("There already seems to be a git repository in %s" % prefix)
+
+ files_in_the_way = os.listdir(prefix)
+ if files_in_the_way:
+ tty.die("There are already files there! "
+ "Delete these files before boostrapping spack.",
+ *files_in_the_way)
+
+ tty.msg("Installing:",
+ "%s/bin/spack" % prefix,
+ "%s/lib/spack/..." % prefix)
+
+ with working_dir(prefix):
+ git = which('git', required=True)
+ git('init', '--shared', '-q')
+ git('remote', 'add', 'origin', origin_url)
+ git('fetch', 'origin', '%s:refs/remotes/origin/%s' % (branch, branch),
+ '-n', '-q')
+ git('reset', '--hard', 'origin/%s' % branch, '-q')
+ git('checkout', '-B', branch, 'origin/%s' % branch, '-q')
+
+ tty.msg("Successfully created a new spack in %s" % prefix,
+ "Run %s/bin/spack to use this installation." % prefix)
diff --git a/lib/spack/spack/cmd/common/__init__.py b/lib/spack/spack/cmd/common/__init__.py
index ed1ec23bca..bb4e45438e 100644
--- a/lib/spack/spack/cmd/common/__init__.py
+++ b/lib/spack/spack/cmd/common/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,3 +22,25 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+
+import spack
+from llnl.util import tty
+
+
+def print_module_placeholder_help():
+ """
+ For use by commands to tell user how to activate shell support.
+ """
+ tty.msg("This command requires spack's shell integration.", "",
+ "To initialize spack's shell commands, you must run one of",
+ "the commands below. Choose the right command for your shell.",
+ "", "For bash and zsh:",
+ " . %s/setup-env.sh" % spack.share_path, "",
+ "For csh and tcsh:", " setenv SPACK_ROOT %s" % spack.prefix,
+ " source %s/setup-env.csh" % spack.share_path, "",
+ "This exposes a 'spack' shell function, which you can use like",
+ " $ spack load package-foo", "",
+ "Running the Spack executable directly (for example, invoking",
+ "./bin/spack) will bypass the shell function and print this",
+ "placeholder message, even if you have sourced one of the above",
+ "shell integration scripts.")
diff --git a/lib/spack/spack/cmd/common/arguments.py b/lib/spack/spack/cmd/common/arguments.py
index f091b9cf75..6628ec4190 100644
--- a/lib/spack/spack/cmd/common/arguments.py
+++ b/lib/spack/spack/cmd/common/arguments.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,15 +26,23 @@
import argparse
import spack.cmd
-import spack.store
import spack.modules
+import spack.spec
+import spack.store
from spack.util.pattern import Args
+
__all__ = ['add_common_arguments']
_arguments = {}
def add_common_arguments(parser, list_of_arguments):
+ """Extend a parser with extra arguments
+
+ Args:
+ parser: parser to be extended
+ list_of_arguments: arguments to be added to the parser
+ """
for argument in list_of_arguments:
if argument not in _arguments:
message = 'Trying to add non existing argument "{0}" to a command'
@@ -64,7 +72,7 @@ class ConstraintAction(argparse.Action):
# return everything for an empty query.
if not qspecs:
- return spack.store.db.query()
+ return spack.store.db.query(**kwargs)
# Return only matching stuff otherwise.
specs = set()
@@ -74,34 +82,66 @@ class ConstraintAction(argparse.Action):
return sorted(specs)
+class CleanOrDirtyAction(argparse.Action):
+ """Sets the dirty flag in the current namespace"""
+
+ def __init__(self, *args, **kwargs):
+ kwargs['default'] = spack.dirty
+ super(CleanOrDirtyAction, self).__init__(*args, **kwargs)
+
+ def __call__(self, parser, namespace, values, option_string=None):
+ if option_string == '--clean':
+ setattr(namespace, self.dest, False)
+ elif option_string == '--dirty':
+ setattr(namespace, self.dest, True)
+ else:
+ msg = 'expected "--dirty" or "--clean" [got {0} instead]'
+ raise argparse.ArgumentError(msg.format(option_string))
+
+
_arguments['constraint'] = Args(
'constraint', nargs=argparse.REMAINDER, action=ConstraintAction,
- help='Constraint to select a subset of installed packages')
+ help='constraint to select a subset of installed packages')
_arguments['module_type'] = Args(
- '-m', '--module-type', help='Type of module files',
- default='tcl', choices=spack.modules.module_types)
+ '-m', '--module-type',
+ choices=spack.modules.module_types.keys(),
+ action='append',
+ help='type of module file. More than one choice is allowed [default: tcl]') # NOQA: ignore=E501
_arguments['yes_to_all'] = Args(
'-y', '--yes-to-all', action='store_true', dest='yes_to_all',
- help='Assume "yes" is the answer to every confirmation request.')
+ help='assume "yes" is the answer to every confirmation request')
_arguments['recurse_dependencies'] = Args(
'-r', '--dependencies', action='store_true', dest='recurse_dependencies',
- help='Recursively traverse spec dependencies')
+ help='recursively traverse spec dependencies')
_arguments['clean'] = Args(
- '--clean', action='store_false', dest='dirty',
- help='Clean environment before installing package.')
+ '--clean',
+ action=CleanOrDirtyAction,
+ dest='dirty',
+ help='sanitize the environment from variables that can affect how ' +
+ ' packages find libraries or headers',
+ nargs=0
+)
_arguments['dirty'] = Args(
- '--dirty', action='store_true', dest='dirty',
- help='Do NOT clean environment before installing.')
+ '--dirty',
+ action=CleanOrDirtyAction,
+ dest='dirty',
+ help='maintain the current environment without trying to sanitize it',
+ nargs=0
+)
_arguments['long'] = Args(
'-l', '--long', action='store_true',
- help='Show dependency hashes as well as versions.')
+ help='show dependency hashes as well as versions')
_arguments['very_long'] = Args(
'-L', '--very-long', action='store_true',
- help='Show full dependency hashes as well as versions.')
+ help='show full dependency hashes as well as versions')
+
+_arguments['tags'] = Args(
+ '-t', '--tags', action='append',
+ help='filter a package query by tags')
diff --git a/lib/spack/spack/cmd/compiler.py b/lib/spack/spack/cmd/compiler.py
index 609210f77e..e7be196b1f 100644
--- a/lib/spack/spack/cmd/compiler.py
+++ b/lib/spack/spack/cmd/compiler.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,8 +22,11 @@
# 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 __future__ import print_function
+
import argparse
import sys
+from six import iteritems
import llnl.util.tty as tty
import spack.compilers
@@ -33,9 +36,10 @@ from llnl.util.lang import index_by
from llnl.util.tty.colify import colify
from llnl.util.tty.color import colorize
from spack.spec import CompilerSpec, ArchSpec
-from spack.util.environment import get_path
-description = "Manage compilers"
+description = "manage compilers"
+section = "system"
+level = "long"
def setup_parser(subparser):
@@ -47,35 +51,35 @@ def setup_parser(subparser):
# Find
find_parser = sp.add_parser(
'find', aliases=['add'],
- help='Search the system for compilers to add to Spack configuration.')
+ help='search the system for compilers to add to Spack configuration')
find_parser.add_argument('add_paths', nargs=argparse.REMAINDER)
find_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
# Remove
remove_parser = sp.add_parser(
- 'remove', aliases=['rm'], help='Remove compiler by spec.')
+ 'remove', aliases=['rm'], help='remove compiler by spec')
remove_parser.add_argument(
'-a', '--all', action='store_true',
- help='Remove ALL compilers that match spec.')
+ help='remove ALL compilers that match spec')
remove_parser.add_argument('compiler_spec')
remove_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
# List
list_parser = sp.add_parser('list', help='list available compilers')
list_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_list_scope,
- help="Configuration scope to read from.")
+ help="configuration scope to read from")
# Info
- info_parser = sp.add_parser('info', help='Show compiler paths.')
+ info_parser = sp.add_parser('info', help='show compiler paths')
info_parser.add_argument('compiler_spec')
info_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_list_scope,
- help="Configuration scope to read from.")
+ help="configuration scope to read from")
def compiler_find(args):
@@ -84,8 +88,6 @@ def compiler_find(args):
"""
paths = args.add_paths
- if not paths:
- paths = get_path('PATH')
# Don't initialize compilers config via compilers.get_compiler_config.
# Just let compiler_find do the
@@ -95,9 +97,8 @@ def compiler_find(args):
new_compilers = []
for c in compilers:
arch_spec = ArchSpec(None, c.operating_system, c.target)
- same_specs = spack.compilers.compilers_for_spec(c.spec,
- arch_spec,
- args.scope)
+ same_specs = spack.compilers.compilers_for_spec(
+ c.spec, arch_spec, init_config=False)
if not same_specs:
new_compilers.append(c)
@@ -113,6 +114,8 @@ def compiler_find(args):
colify(reversed(sorted(c.spec for c in new_compilers)), indent=4)
else:
tty.msg("Found no new compilers")
+ tty.msg("Compilers are defined in the following files:")
+ colify(spack.compilers.compiler_config_files(), indent=4)
def compiler_remove(args):
@@ -141,38 +144,43 @@ def compiler_info(args):
tty.error("No compilers match spec %s" % cspec)
else:
for c in compilers:
- print str(c.spec) + ":"
- print "\tpaths:"
+ print(str(c.spec) + ":")
+ print("\tpaths:")
for cpath in ['cc', 'cxx', 'f77', 'fc']:
- print "\t\t%s = %s" % (cpath, getattr(c, cpath, None))
+ print("\t\t%s = %s" % (cpath, getattr(c, cpath, None)))
if c.flags:
- print "\tflags:"
- for flag, flag_value in c.flags.iteritems():
- print "\t\t%s = %s" % (flag, flag_value)
+ print("\tflags:")
+ for flag, flag_value in iteritems(c.flags):
+ print("\t\t%s = %s" % (flag, flag_value))
if len(c.environment) != 0:
if len(c.environment['set']) != 0:
- print "\tenvironment:"
- print "\t set:"
- for key, value in c.environment['set'].iteritems():
- print "\t %s = %s" % (key, value)
+ print("\tenvironment:")
+ print("\t set:")
+ for key, value in iteritems(c.environment['set']):
+ print("\t %s = %s" % (key, value))
if c.extra_rpaths:
- print "\tExtra rpaths:"
+ print("\tExtra rpaths:")
for extra_rpath in c.extra_rpaths:
- print "\t\t%s" % extra_rpath
- print "\tmodules = %s" % c.modules
- print "\toperating system = %s" % c.operating_system
+ print("\t\t%s" % extra_rpath)
+ print("\tmodules = %s" % c.modules)
+ print("\toperating system = %s" % c.operating_system)
def compiler_list(args):
tty.msg("Available compilers")
- index = index_by(spack.compilers.all_compilers(scope=args.scope), 'name')
- for i, (name, compilers) in enumerate(index.items()):
+ index = index_by(spack.compilers.all_compilers(scope=args.scope),
+ lambda c: (c.spec.name, c.operating_system, c.target))
+ ordered_sections = sorted(index.items(), key=lambda item: item[0])
+ for i, (key, compilers) in enumerate(ordered_sections):
if i >= 1:
- print
-
- cname = "%s{%s}" % (spack.spec.compiler_color, name)
+ print()
+ name, os, target = key
+ os_str = os
+ if target:
+ os_str += "-%s" % target
+ cname = "%s{%s} %s" % (spack.spec.compiler_color, name, os_str)
tty.hline(colorize(cname), char='-')
- colify(reversed(sorted(compilers)))
+ colify(reversed(sorted(c.spec for c in compilers)))
def compiler(parser, args):
diff --git a/lib/spack/spack/cmd/compilers.py b/lib/spack/spack/cmd/compilers.py
index b87f977e5a..7895d11d94 100644
--- a/lib/spack/spack/cmd/compilers.py
+++ b/lib/spack/spack/cmd/compilers.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,12 +25,14 @@
import spack
from spack.cmd.compiler import compiler_list
-description = "List available compilers. Same as 'spack compiler list'."
+description = "list available compilers"
+section = "system"
+level = "short"
def setup_parser(subparser):
subparser.add_argument('--scope', choices=spack.config.config_scopes,
- help="Configuration scope to read/modify.")
+ help="configuration scope to read/modify")
def compilers(parser, args):
diff --git a/lib/spack/spack/cmd/config.py b/lib/spack/spack/cmd/config.py
index 3288c4cb8b..f2325e73e0 100644
--- a/lib/spack/spack/cmd/config.py
+++ b/lib/spack/spack/cmd/config.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,27 +24,29 @@
##############################################################################
import spack.config
-description = "Get and set configuration options."
+description = "get and set configuration options"
+section = "config"
+level = "long"
def setup_parser(subparser):
# User can only choose one
subparser.add_argument('--scope', choices=spack.config.config_scopes,
- help="Configuration scope to read/modify.")
+ help="configuration scope to read/modify")
sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='config_command')
- get_parser = sp.add_parser('get', help='Print configuration values.')
+ get_parser = sp.add_parser('get', help='print configuration values')
get_parser.add_argument('section',
- help="Configuration section to print. "
- "Options: %(choices)s.",
+ help="configuration section to print. "
+ "options: %(choices)s",
metavar='SECTION',
choices=spack.config.section_schemas)
- edit_parser = sp.add_parser('edit', help='Edit configuration file.')
+ edit_parser = sp.add_parser('edit', help='edit configuration file')
edit_parser.add_argument('section',
- help="Configuration section to edit. "
- "Options: %(choices)s.",
+ help="configuration section to edit. "
+ "options: %(choices)s",
metavar='SECTION',
choices=spack.config.section_schemas)
@@ -55,7 +57,10 @@ def config_get(args):
def config_edit(args):
if not args.scope:
- args.scope = 'user'
+ if args.section == 'compilers':
+ args.scope = spack.cmd.default_modify_scope
+ else:
+ args.scope = 'user'
if not args.section:
args.section = None
config_file = spack.config.get_config_filename(args.scope, args.section)
diff --git a/lib/spack/spack/cmd/configure.py b/lib/spack/spack/cmd/configure.py
index 3eebe2584b..346fc71bdc 100644
--- a/lib/spack/spack/cmd/configure.py
+++ b/lib/spack/spack/cmd/configure.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,21 +22,31 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-
import argparse
import llnl.util.tty as tty
import spack.cmd
import spack.cmd.install as inst
-from spack import *
+from spack.build_systems.autotools import AutotoolsPackage
+from spack.build_systems.cmake import CMakePackage
+from spack.build_systems.qmake import QMakePackage
+from spack.build_systems.waf import WafPackage
+from spack.build_systems.perl import PerlPackage
+from spack.build_systems.intel import IntelPackage
-description = 'Stops at configuration stage when installing a package, if possible' # NOQA: ignore=E501
+description = 'stage and configure a package but do not install'
+section = "build"
+level = "long"
build_system_to_phase = {
+ AutotoolsPackage: 'configure',
CMakePackage: 'cmake',
- AutotoolsPackage: 'configure'
+ QMakePackage: 'qmake',
+ WafPackage: 'configure',
+ PerlPackage: 'configure',
+ IntelPackage: 'configure',
}
@@ -49,7 +59,7 @@ def setup_parser(subparser):
subparser.add_argument(
'-v', '--verbose',
action='store_true',
- help="Print additional output during builds"
+ help="print additional output during builds"
)
diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py
index 2575229581..2e67b7648b 100644
--- a/lib/spack/spack/cmd/create.py
+++ b/lib/spack/spack/cmd/create.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,28 +30,32 @@ import re
import llnl.util.tty as tty
import spack
import spack.cmd
-import spack.cmd.checksum
-import spack.url
import spack.util.web
from llnl.util.filesystem import mkdirp
from spack.repository import Repo
from spack.spec import Spec
-from spack.util.executable import which
-from spack.util.naming import *
+from spack.util.executable import which, ProcessError
+from spack.util.naming import mod_to_class
+from spack.util.naming import simplify_name, valid_fully_qualified_module_name
+from spack.url import UndetectableNameError, UndetectableVersionError
+from spack.url import parse_name, parse_version
+
+description = "create a new package file"
+section = "packaging"
+level = "short"
-description = "Create a new package file"
package_template = '''\
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -136,15 +140,39 @@ 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'
+
+ body = """\
+ def configure_args(self):
+ # FIXME: Add arguments other than --prefix
+ # FIXME: If not needed delete this function
+ args = []
+ 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 = """\
- # FIXME: Add dependencies if required.
+ 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
@@ -166,18 +194,39 @@ class CMakePackageTemplate(PackageTemplate):
return args"""
+class QMakePackageTemplate(PackageTemplate):
+ """Provides appropriate overrides for QMake-based packages"""
+
+ base_class_name = 'QMakePackage'
+
+ body = """\
+ def qmake_args(self):
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
+
+
class SconsPackageTemplate(PackageTemplate):
"""Provides appropriate overrides for SCons-based packages"""
- dependencies = """\
- # FIXME: Add additional dependencies if required.
- depends_on('scons', type='build')"""
+ base_class_name = 'SConsPackage'
body = """\
- def install(self, spec, prefix):
- # FIXME: Add logic to build and install here.
- scons('prefix={0}'.format(prefix))
- scons('install')"""
+ def build_args(self, spec, prefix):
+ # FIXME: Add arguments to pass to build.
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
+
+
+class WafPackageTemplate(PackageTemplate):
+ """Provides appropriate override for Waf-based packages"""
+
+ base_class_name = 'WafPackage'
+
+ body = """\
+ # FIXME: Override configure_args(), build_args(),
+ # or install_args() if necessary."""
class BazelPackageTemplate(PackageTemplate):
@@ -203,9 +252,9 @@ class PythonPackageTemplate(PackageTemplate):
# depends_on('py-foo', type=('build', 'run'))"""
body = """\
- def build_args(self):
+ def build_args(self, spec, prefix):
# FIXME: Add arguments other than --prefix
- # FIXME: If not needed delete the function
+ # FIXME: If not needed delete this function
args = []
return args"""
@@ -221,13 +270,18 @@ class PythonPackageTemplate(PackageTemplate):
class RPackageTemplate(PackageTemplate):
"""Provides appropriate overrides for R extensions"""
+ base_class_name = 'RPackage'
dependencies = """\
# FIXME: Add dependencies if required.
# depends_on('r-foo', type=('build', 'run'))"""
body = """\
- # FIXME: Override install() if necessary."""
+ def configure_args(self, spec, prefix):
+ # FIXME: Add arguments to pass to install via --configure-args
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
def __init__(self, name, *args):
# If the user provided `--name r-rcpp`, don't rename it r-r-rcpp
@@ -239,6 +293,42 @@ 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', type=('build', 'run'))"""
+
+ body = """\
+ def configure_args(self):
+ # FIXME: Add non-standard arguments
+ # FIXME: If not needed delete this function
+ args = []
+ return args"""
+
+ 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', type=('build', 'run'))"""
+
+
class OctavePackageTemplate(PackageTemplate):
"""Provides appropriate overrides for octave packages"""
@@ -268,15 +358,44 @@ class OctavePackageTemplate(PackageTemplate):
super(OctavePackageTemplate, self).__init__(name, *args)
+class MakefilePackageTemplate(PackageTemplate):
+ """Provides appropriate overrides for Makefile packages"""
+
+ base_class_name = 'MakefilePackage'
+
+ body = """\
+ def edit(self, spec, prefix):
+ # FIXME: Edit the Makefile if necessary
+ # FIXME: If not needed delete this function
+ # makefile = FileFilter('Makefile')
+ # makefile.filter('CC = .*', 'CC = cc')"""
+
+
+class IntelPackageTemplate(PackageTemplate):
+ """Provides appropriate overrides for licensed Intel software"""
+
+ base_class_name = 'IntelPackage'
+
+ body = """\
+ # FIXME: Override `setup_environment` if necessary."""
+
+
templates = {
- 'autotools': AutotoolsPackageTemplate,
- 'cmake': CMakePackageTemplate,
- 'scons': SconsPackageTemplate,
- 'bazel': BazelPackageTemplate,
- 'python': PythonPackageTemplate,
- 'r': RPackageTemplate,
- 'octave': OctavePackageTemplate,
- 'generic': PackageTemplate
+ 'autotools': AutotoolsPackageTemplate,
+ 'autoreconf': AutoreconfPackageTemplate,
+ 'cmake': CMakePackageTemplate,
+ 'qmake': QMakePackageTemplate,
+ 'scons': SconsPackageTemplate,
+ 'waf': WafPackageTemplate,
+ 'bazel': BazelPackageTemplate,
+ 'python': PythonPackageTemplate,
+ 'r': RPackageTemplate,
+ 'perlmake': PerlmakePackageTemplate,
+ 'perlbuild': PerlbuildPackageTemplate,
+ 'octave': OctavePackageTemplate,
+ 'makefile': MakefilePackageTemplate,
+ 'intel': IntelPackageTemplate,
+ 'generic': PackageTemplate,
}
@@ -286,7 +405,7 @@ def setup_parser(subparser):
help="url of package archive")
subparser.add_argument(
'--keep-stage', action='store_true',
- help="Don't clean up staging area when command completes.")
+ help="don't clean up staging area when command completes")
subparser.add_argument(
'-n', '--name',
help="name of the package to create")
@@ -295,14 +414,14 @@ def setup_parser(subparser):
help="build system template to use. options: %(choices)s")
subparser.add_argument(
'-r', '--repo',
- help="Path to a repository where the package should be created.")
+ help="path to a repository where the package should be created")
subparser.add_argument(
'-N', '--namespace',
- help="Specify a namespace for the package. Must be the namespace of "
- "a repository registered with Spack.")
+ help="specify a namespace for the package. must be the namespace of "
+ "a repository registered with Spack")
subparser.add_argument(
'-f', '--force', action='store_true',
- help="Overwrite any existing package file with the same name.")
+ help="overwrite any existing package file with the same name")
class BuildSystemGuesser:
@@ -311,6 +430,10 @@ class BuildSystemGuesser:
can take a peek at the fetched tarball and discern the build system it uses
"""
+ def __init__(self):
+ """Sets the default build system."""
+ self.build_system = 'generic'
+
def __call__(self, stage, url):
"""Try to guess the type of build system used by a project based on
the contents of its archive or the URL it was downloaded from."""
@@ -325,13 +448,22 @@ class BuildSystemGuesser:
# A list of clues that give us an idea of the build system a package
# uses. If the regular expression matches a file contained in the
# archive, the corresponding build system is assumed.
+ # NOTE: Order is important here. If a package supports multiple
+ # build systems, we choose the first match in this list.
clues = [
- (r'/configure$', 'autotools'),
- (r'/CMakeLists.txt$', 'cmake'),
- (r'/SConstruct$', 'scons'),
- (r'/setup.py$', 'python'),
- (r'/NAMESPACE$', 'r'),
- (r'/WORKSPACE$', 'bazel')
+ (r'/CMakeLists\.txt$', 'cmake'),
+ (r'/configure$', 'autotools'),
+ (r'/configure\.(in|ac)$', 'autoreconf'),
+ (r'/Makefile\.am$', 'autoreconf'),
+ (r'/SConstruct$', 'scons'),
+ (r'/waf$', 'waf'),
+ (r'/setup\.py$', 'python'),
+ (r'/NAMESPACE$', 'r'),
+ (r'/WORKSPACE$', 'bazel'),
+ (r'/Build\.PL$', 'perlbuild'),
+ (r'/Makefile\.PL$', 'perlmake'),
+ (r'/.*\.pro$', 'qmake'),
+ (r'/(GNU)?[Mm]akefile$', 'makefile'),
]
# Peek inside the compressed file.
@@ -339,25 +471,23 @@ class BuildSystemGuesser:
try:
unzip = which('unzip')
output = unzip('-lq', stage.archive_file, output=str)
- except:
+ except ProcessError:
output = ''
else:
try:
tar = which('tar')
output = tar('--exclude=*/*/*', '-tf',
stage.archive_file, output=str)
- except:
+ except ProcessError:
output = ''
lines = output.split('\n')
# Determine the build system based on the files contained
# in the archive.
- build_system = 'generic'
for pattern, bs in clues:
if any(re.search(pattern, l) for l in lines):
- build_system = bs
-
- self.build_system = build_system
+ self.build_system = bs
+ break
def get_name(args):
@@ -366,10 +496,12 @@ def get_name(args):
If a name was provided, always use that. Otherwise, if a URL was
provided, extract the name from that. Otherwise, use a default.
- :param argparse.Namespace args: The arguments given to ``spack create``
+ Args:
+ args (param argparse.Namespace): The arguments given to
+ ``spack create``
- :returns: The name of the package
- :rtype: str
+ Returns:
+ str: The name of the package
"""
# Default package name
@@ -382,13 +514,15 @@ def get_name(args):
elif args.url:
# Try to guess the package name based on the URL
try:
- name = spack.url.parse_name(args.url)
+ name = parse_name(args.url)
tty.msg("This looks like a URL for {0}".format(name))
- except spack.url.UndetectableNameError:
+ except UndetectableNameError:
tty.die("Couldn't guess a name for this package.",
" Please report this bug. In the meantime, try running:",
" `spack create --name <name> <url>`")
+ name = simplify_name(name)
+
if not valid_fully_qualified_module_name(name):
tty.die("Package name can only contain a-z, 0-9, and '-'")
@@ -400,10 +534,11 @@ def get_url(args):
Use a default URL if none is provided.
- :param argparse.Namespace args: The arguments given to ``spack create``
+ Args:
+ args (argparse.Namespace): The arguments given to ``spack create``
- :returns: The URL of the package
- :rtype: str
+ Returns:
+ str: The URL of the package
"""
# Default URL
@@ -423,11 +558,13 @@ def get_versions(args, name):
Returns default values if no URL is provided.
- :param argparse.Namespace args: The arguments given to ``spack create``
- :param str name: The name of the package
+ Args:
+ args (argparse.Namespace): The arguments given to ``spack create``
+ name (str): The name of the package
- :returns: Versions and hashes, and a BuildSystemGuesser object
- :rtype: str and BuildSystemGuesser
+ Returns:
+ str and BuildSystemGuesser: Versions and hashes, and a
+ BuildSystemGuesser object
"""
# Default version, hash, and guesser
@@ -439,14 +576,19 @@ def get_versions(args, name):
if args.url:
# Find available versions
- url_dict = spack.util.web.find_versions_of_archive(args.url)
+ try:
+ url_dict = spack.util.web.find_versions_of_archive(args.url)
+ except UndetectableVersionError:
+ # Use fake versions
+ tty.warn("Couldn't detect version in: {0}".format(args.url))
+ return versions, guesser
if not url_dict:
# If no versions were found, revert to what the user provided
- version = spack.url.parse_version(args.url)
+ version = parse_version(args.url)
url_dict = {version: args.url}
- versions = spack.cmd.checksum.get_checksums(
+ versions = spack.util.web.get_checksums_for_versions(
url_dict, name, first_stage_function=guesser,
keep_stage=args.keep_stage)
@@ -460,12 +602,13 @@ def get_build_system(args, guesser):
is provided, download the tarball and peek inside to guess what
build system it uses. Otherwise, use a generic template by default.
- :param argparse.Namespace args: The arguments given to ``spack create``
- :param BuildSystemGuesser guesser: The first_stage_function given to \
- ``spack checksum`` which records the build system it detects
+ Args:
+ args (argparse.Namespace): The arguments given to ``spack create``
+ guesser (BuildSystemGuesser): The first_stage_function given to
+ ``spack checksum`` which records the build system it detects
- :returns: The name of the build system template to use
- :rtype: str
+ Returns:
+ str: The name of the build system template to use
"""
# Default template
@@ -492,11 +635,12 @@ def get_repository(args, name):
"""Returns a Repo object that will allow us to determine the path where
the new package file should be created.
- :param argparse.Namespace args: The arguments given to ``spack create``
- :param str name: The name of the package to create
+ Args:
+ args (argparse.Namespace): The arguments given to ``spack create``
+ name (str): The name of the package to create
- :returns: A Repo object capable of determining the path to the package file
- :rtype: Repo
+ Returns:
+ Repo: A Repo object capable of determining the path to the package file
"""
spec = Spec(name)
# Figure out namespace for spec
diff --git a/lib/spack/spack/cmd/deactivate.py b/lib/spack/spack/cmd/deactivate.py
index fedd078972..ae5241dfe8 100644
--- a/lib/spack/spack/cmd/deactivate.py
+++ b/lib/spack/spack/cmd/deactivate.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,22 +28,28 @@ import llnl.util.tty as tty
import spack
import spack.cmd
import spack.store
+from spack.directory_layout import YamlViewExtensionsLayout
from spack.graph import topological_sort
-description = "Deactivate a package extension."
+description = "deactivate a package extension"
+section = "extensions"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-f', '--force', action='store_true',
- help="Run deactivation even if spec is NOT currently activated.")
+ help="run deactivation even if spec is NOT currently activated")
+ subparser.add_argument(
+ '-v', '--view', metavar='VIEW', type=str,
+ help="the view to operate on")
subparser.add_argument(
'-a', '--all', action='store_true',
- help="Deactivate all extensions of an extendable package, or "
- "deactivate an extension AND its dependencies.")
+ help="deactivate all extensions of an extendable package, or "
+ "deactivate an extension AND its dependencies")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="spec of package extension to deactivate.")
+ help="spec of package extension to deactivate")
def deactivate(parser, args):
@@ -54,18 +60,24 @@ def deactivate(parser, args):
spec = spack.cmd.disambiguate_spec(specs[0])
pkg = spec.package
+ layout = spack.store.extensions
+ if args.view is not None:
+ layout = YamlViewExtensionsLayout(args.view, spack.store.layout)
+
if args.all:
if pkg.extendable:
tty.msg("Deactivating all extensions of %s" % pkg.spec.short_spec)
- ext_pkgs = spack.store.db.installed_extensions_for(spec)
+ ext_pkgs = spack.store.db.activated_extensions_for(
+ spec, extensions_layout=layout)
for ext_pkg in ext_pkgs:
ext_pkg.spec.normalize()
- if ext_pkg.activated:
- ext_pkg.do_deactivate(force=True)
+ if ext_pkg.is_activated():
+ ext_pkg.do_deactivate(force=True, extensions_layout=layout)
elif pkg.is_extension:
- if not args.force and not spec.package.activated:
+ if not args.force and \
+ not spec.package.is_activated(extensions_layout=layout):
tty.die("%s is not activated." % pkg.spec.short_spec)
tty.msg("Deactivating %s and all dependencies." %
@@ -78,9 +90,11 @@ def deactivate(parser, args):
espec = index[name]
epkg = espec.package
if epkg.extends(pkg.extendee_spec):
- if epkg.activated or args.force:
+ if epkg.is_activated(extensions_layout=layout) or \
+ args.force:
- epkg.do_deactivate(force=args.force)
+ epkg.do_deactivate(
+ force=args.force, extensions_layout=layout)
else:
tty.die(
@@ -92,7 +106,8 @@ def deactivate(parser, args):
tty.die("spack deactivate requires an extension.",
"Did you mean 'spack deactivate --all'?")
- if not args.force and not spec.package.activated:
+ if not args.force and \
+ not spec.package.is_activated(extensions_layout=layout):
tty.die("Package %s is not activated." % specs[0].short_spec)
- spec.package.do_deactivate(force=args.force)
+ spec.package.do_deactivate(force=args.force, extensions_layout=layout)
diff --git a/lib/spack/spack/cmd/debug.py b/lib/spack/spack/cmd/debug.py
index c7e90cb210..1d3e645a29 100644
--- a/lib/spack/spack/cmd/debug.py
+++ b/lib/spack/spack/cmd/debug.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,13 +33,15 @@ from llnl.util.filesystem import working_dir
import spack
from spack.util.executable import which
-description = "Debugging commands for troubleshooting Spack."
+description = "debugging commands for troubleshooting Spack"
+section = "developer"
+level = "long"
def setup_parser(subparser):
sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='debug_command')
sp.add_parser('create-db-tarball',
- help="Create a tarball of Spack's installation metadata.")
+ help="create a tarball of Spack's installation metadata")
def _debug_tarball_suffix():
diff --git a/lib/spack/spack/cmd/dependencies.py b/lib/spack/spack/cmd/dependencies.py
new file mode 100644
index 0000000000..95183fa318
--- /dev/null
+++ b/lib/spack/spack/cmd/dependencies.py
@@ -0,0 +1,87 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import argparse
+
+import llnl.util.tty as tty
+from llnl.util.tty.colify import colify
+
+import spack
+import spack.store
+import spack.cmd
+
+description = "show dependencies of a package"
+section = "basic"
+level = "long"
+
+
+def setup_parser(subparser):
+ subparser.add_argument(
+ '-i', '--installed', action='store_true', default=False,
+ help="List installed dependencies of an installed spec, "
+ "instead of possible dependencies of a package.")
+ subparser.add_argument(
+ '-t', '--transitive', action='store_true', default=False,
+ help="Show all transitive dependencies.")
+ subparser.add_argument(
+ 'spec', nargs=argparse.REMAINDER, help="spec or package name")
+
+
+def dependencies(parser, args):
+ specs = spack.cmd.parse_specs(args.spec)
+ if len(specs) != 1:
+ tty.die("spack dependencies takes only one spec.")
+
+ if args.installed:
+ spec = spack.cmd.disambiguate_spec(specs[0])
+
+ tty.msg("Dependencies of %s" % spec.format('$_$@$%@$/', color=True))
+ deps = spack.store.db.installed_relatives(
+ spec, 'children', args.transitive)
+ if deps:
+ spack.cmd.display_specs(deps, long=True)
+ else:
+ print("No dependencies")
+
+ else:
+ spec = specs[0]
+
+ if not spec.virtual:
+ packages = [spec.package]
+ else:
+ packages = [spack.repo.get(s.name)
+ for s in spack.repo.providers_for(spec)]
+
+ dependencies = set()
+ for pkg in packages:
+ dependencies.update(
+ set(pkg.possible_dependencies(args.transitive)))
+
+ if spec.name in dependencies:
+ dependencies.remove(spec.name)
+
+ if dependencies:
+ colify(sorted(dependencies))
+ else:
+ print("No dependencies")
diff --git a/lib/spack/spack/cmd/dependents.py b/lib/spack/spack/cmd/dependents.py
index dc2ee658ac..1ad3c0a3b9 100644
--- a/lib/spack/spack/cmd/dependents.py
+++ b/lib/spack/spack/cmd/dependents.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,29 +25,98 @@
import argparse
import llnl.util.tty as tty
+from llnl.util.tty.colify import colify
import spack
import spack.store
import spack.cmd
-description = "Show installed packages that depend on another."
+description = "show packages that depend on another"
+section = "basic"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
- 'spec', nargs=argparse.REMAINDER,
- help="specs to list dependencies of.")
+ '-i', '--installed', action='store_true', default=False,
+ help="List installed dependents of an installed spec, "
+ "instead of possible dependents of a package.")
+ subparser.add_argument(
+ '-t', '--transitive', action='store_true', default=False,
+ help="Show all transitive dependents.")
+ subparser.add_argument(
+ 'spec', nargs=argparse.REMAINDER, help="spec or package name")
+
+
+def inverted_dependencies():
+ """Iterate through all packages and return a dictionary mapping package
+ names to possible dependnecies.
+
+ Virtual packages are included as sources, so that you can query
+ dependents of, e.g., `mpi`, but virtuals are not included as
+ actual dependents.
+ """
+ dag = {}
+ for pkg in spack.repo.all_packages():
+ dag.setdefault(pkg.name, set())
+ for dep in pkg.dependencies:
+ deps = [dep]
+
+ # expand virtuals if necessary
+ if spack.repo.is_virtual(dep):
+ deps += [s.name for s in spack.repo.providers_for(dep)]
+
+ for d in deps:
+ dag.setdefault(d, set()).add(pkg.name)
+ return dag
+
+
+def get_dependents(pkg_name, ideps, transitive=False, dependents=None):
+ """Get all dependents for a package.
+
+ Args:
+ pkg_name (str): name of the package whose dependents should be returned
+ ideps (dict): dictionary of dependents, from inverted_dependencies()
+ transitive (bool, optional): return transitive dependents when True
+ """
+ if dependents is None:
+ dependents = set()
+
+ if pkg_name in dependents:
+ return set()
+ dependents.add(pkg_name)
+
+ direct = ideps[pkg_name]
+ if transitive:
+ for dep_name in direct:
+ get_dependents(dep_name, ideps, transitive, dependents)
+ dependents.update(direct)
+ return dependents
def dependents(parser, args):
specs = spack.cmd.parse_specs(args.spec)
if len(specs) != 1:
tty.die("spack dependents takes only one spec.")
- spec = spack.cmd.disambiguate_spec(specs[0])
- tty.msg("Dependents of %s" % spec.format('$_$@$%@$#', color=True))
- deps = spack.store.db.installed_dependents(spec)
- if deps:
- spack.cmd.display_specs(deps)
+ if args.installed:
+ spec = spack.cmd.disambiguate_spec(specs[0])
+
+ tty.msg("Dependents of %s" % spec.cformat('$_$@$%@$/'))
+ deps = spack.store.db.installed_relatives(
+ spec, 'parents', args.transitive)
+ if deps:
+ spack.cmd.display_specs(deps, long=True)
+ else:
+ print("No dependents")
+
else:
- print "No dependents"
+ spec = specs[0]
+ ideps = inverted_dependencies()
+
+ dependents = get_dependents(spec.name, ideps, args.transitive)
+ dependents.remove(spec.name)
+ if dependents:
+ colify(sorted(dependents))
+ else:
+ print("No dependents")
diff --git a/lib/spack/spack/cmd/diy.py b/lib/spack/spack/cmd/diy.py
index dbb5a253ec..ba5c7eb954 100644
--- a/lib/spack/spack/cmd/diy.py
+++ b/lib/spack/spack/cmd/diy.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,25 +33,27 @@ import spack.cmd
import spack.cmd.common.arguments as arguments
from spack.stage import DIYStage
-description = "Do-It-Yourself: build from an existing source directory."
+description = "do-it-yourself: build from an existing source directory"
+section = "developer"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-i', '--ignore-dependencies', action='store_true', dest='ignore_deps',
- help="Do not try to install dependencies of requested packages.")
+ help="don't try to install dependencies of requested packages")
subparser.add_argument(
'--keep-prefix', action='store_true',
- help="Don't remove the install prefix if installation fails.")
+ help="do not remove the install prefix if installation fails")
subparser.add_argument(
'--skip-patch', action='store_true',
- help="Skip patching for the DIY build.")
+ help="skip patching for the DIY build")
subparser.add_argument(
'-q', '--quiet', action='store_true', dest='quiet',
- help="Do not display verbose build output while installing.")
+ help="do not display verbose build output while installing")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="specs to use for install. Must contain package AND version.")
+ help="specs to use for install. must contain package AND version")
cd_group = subparser.add_mutually_exclusive_group()
arguments.add_common_arguments(cd_group, ['clean', 'dirty'])
diff --git a/lib/spack/spack/cmd/docs.py b/lib/spack/spack/cmd/docs.py
new file mode 100644
index 0000000000..02096a0020
--- /dev/null
+++ b/lib/spack/spack/cmd/docs.py
@@ -0,0 +1,33 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import webbrowser
+
+description = 'open spack documentation in a web browser'
+section = 'help'
+level = 'short'
+
+
+def docs(parser, args):
+ webbrowser.open('https://spack.readthedocs.io')
diff --git a/lib/spack/spack/cmd/edit.py b/lib/spack/spack/cmd/edit.py
index 77f23333b6..48d423a97e 100644
--- a/lib/spack/spack/cmd/edit.py
+++ b/lib/spack/spack/cmd/edit.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,15 +32,18 @@ import spack.cmd
from spack.spec import Spec
from spack.repository import Repo
-description = "Open package files in $EDITOR"
+description = "open package files in $EDITOR"
+section = "packaging"
+level = "short"
def edit_package(name, repo_path, namespace):
"""Opens the requested package file in your favorite $EDITOR.
- :param str name: The name of the package
- :param str repo_path: The path to the repository containing this package
- :param str namespace: A valid namespace registered with Spack
+ Args:
+ name (str): The name of the package
+ repo_path (str): The path to the repository containing this package
+ namespace (str): A valid namespace registered with Spack
"""
# Find the location of the package
if repo_path:
@@ -70,25 +73,29 @@ def setup_parser(subparser):
# Various types of Spack files that can be edited
# Edits package files by default
excl_args.add_argument(
+ '-b', '--build-system', dest='path', action='store_const',
+ const=spack.build_systems_path,
+ help="Edit the build system with the supplied name.")
+ excl_args.add_argument(
'-c', '--command', dest='path', action='store_const',
const=spack.cmd.command_path,
- help="Edit the command with the supplied name.")
+ help="edit the command with the supplied name")
excl_args.add_argument(
'-t', '--test', dest='path', action='store_const',
const=spack.test_path,
- help="Edit the test with the supplied name.")
+ help="edit the test with the supplied name")
excl_args.add_argument(
'-m', '--module', dest='path', action='store_const',
const=spack.module_path,
- help="Edit the main spack module with the supplied name.")
+ help="edit the main spack module with the supplied name")
# Options for editing packages
excl_args.add_argument(
'-r', '--repo', default=None,
- help="Path to repo to edit package in.")
+ help="path to repo to edit package in")
excl_args.add_argument(
'-N', '--namespace', default=None,
- help="Namespace of package to edit.")
+ help="namespace of package to edit")
subparser.add_argument(
'name', nargs='?', default=None,
diff --git a/lib/spack/spack/cmd/env.py b/lib/spack/spack/cmd/env.py
index f3bad039d4..14432c4dd0 100644
--- a/lib/spack/spack/cmd/env.py
+++ b/lib/spack/spack/cmd/env.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,19 +22,26 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
+from __future__ import print_function
+
import argparse
+import os
+
import llnl.util.tty as tty
-import spack.cmd
import spack.build_environment as build_env
+import spack.cmd
+import spack.cmd.common.arguments as arguments
-description = "Run a command with the install environment for a spec."
+description = "show install environment for a spec, and run commands"
+section = "build"
+level = "long"
def setup_parser(subparser):
+ arguments.add_common_arguments(subparser, ['clean', 'dirty'])
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="specs of package environment to emulate.")
+ help="specs of package environment to emulate")
def env(parser, args):
@@ -49,22 +56,22 @@ def env(parser, args):
if sep in args.spec:
s = args.spec.index(sep)
spec = args.spec[:s]
- cmd = args.spec[s + 1:]
+ cmd = args.spec[s + 1:]
else:
spec = args.spec[0]
- cmd = args.spec[1:]
+ cmd = args.spec[1:]
specs = spack.cmd.parse_specs(spec, concretize=True)
if len(specs) > 1:
tty.die("spack env only takes one spec.")
spec = specs[0]
- build_env.setup_package(spec.package)
+ build_env.setup_package(spec.package, args.dirty)
if not cmd:
# If no command act like the "env" command and print out env vars.
for key, val in os.environ.items():
- print "%s=%s" % (key, val)
+ print("%s=%s" % (key, val))
else:
# Otherwise execute the command with the new environment
diff --git a/lib/spack/spack/cmd/extensions.py b/lib/spack/spack/cmd/extensions.py
index bd149044ca..6d36511691 100644
--- a/lib/spack/spack/cmd/extensions.py
+++ b/lib/spack/spack/cmd/extensions.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,31 +31,59 @@ import spack
import spack.cmd
import spack.cmd.find
import spack.store
+from spack.directory_layout import YamlViewExtensionsLayout
-description = "List extensions for package."
+description = "list extensions for package"
+section = "extensions"
+level = "long"
def setup_parser(subparser):
format_group = subparser.add_mutually_exclusive_group()
format_group.add_argument(
'-l', '--long', action='store_true', dest='long',
- help='Show dependency hashes as well as versions.')
+ help='show dependency hashes as well as versions')
format_group.add_argument(
'-p', '--paths', action='store_const', dest='mode', const='paths',
- help='Show paths to extension install directories')
+ help='show paths to extension install directories')
format_group.add_argument(
'-d', '--deps', action='store_const', dest='mode', const='deps',
- help='Show full dependency DAG of extensions')
+ help='show full dependency DAG of extensions')
+ subparser.add_argument(
+ '-s', '--show', dest='show', metavar='TYPE', type=str,
+ default='all',
+ help="one of packages, installed, activated, all")
+ subparser.add_argument(
+ '-v', '--view', metavar='VIEW', type=str,
+ help="the view to operate on")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help='Spec of package to list extensions for')
+ help='spec of package to list extensions for')
def extensions(parser, args):
if not args.spec:
tty.die("extensions requires a package spec.")
+ show_packages = False
+ show_installed = False
+ show_activated = False
+ show_all = False
+ if args.show == 'packages':
+ show_packages = True
+ elif args.show == 'installed':
+ show_installed = True
+ elif args.show == 'activated':
+ show_activated = True
+ elif args.show == 'all':
+ show_packages = True
+ show_installed = True
+ show_activated = True
+ show_all = True
+ else:
+ tty.die('unrecognized show type: %s' % args.show)
+
#
# Checks
#
@@ -74,37 +102,46 @@ def extensions(parser, args):
if not args.mode:
args.mode = 'short'
- #
- # List package names of extensions
- extensions = spack.repo.extensions_for(spec)
- if not extensions:
- tty.msg("%s has no extensions." % spec.cshort_spec)
- return
- tty.msg(spec.cshort_spec)
- tty.msg("%d extensions:" % len(extensions))
- colify(ext.name for ext in extensions)
-
- #
- # List specs of installed extensions.
- #
- installed = [s.spec
- for s in spack.store.db.installed_extensions_for(spec)]
-
- print
- if not installed:
- tty.msg("None installed.")
- return
- tty.msg("%d installed:" % len(installed))
- spack.cmd.find.display_specs(installed, mode=args.mode)
-
- #
- # List specs of activated extensions.
- #
- activated = spack.store.layout.extension_map(spec)
- print
- if not activated:
- tty.msg("None activated.")
- return
- tty.msg("%d currently activated:" % len(activated))
- spack.cmd.find.display_specs(
- activated.values(), mode=args.mode, long=args.long)
+ if show_packages:
+ #
+ # List package names of extensions
+ extensions = spack.repo.extensions_for(spec)
+ if not extensions:
+ tty.msg("%s has no extensions." % spec.cshort_spec)
+ else:
+ tty.msg(spec.cshort_spec)
+ tty.msg("%d extensions:" % len(extensions))
+ colify(ext.name for ext in extensions)
+
+ layout = spack.store.extensions
+ if args.view is not None:
+ layout = YamlViewExtensionsLayout(args.view, spack.store.layout)
+
+ if show_installed:
+ #
+ # List specs of installed extensions.
+ #
+ installed = [s.spec
+ for s in spack.store.db.installed_extensions_for(spec)]
+
+ if show_all:
+ print
+ if not installed:
+ tty.msg("None installed.")
+ else:
+ tty.msg("%d installed:" % len(installed))
+ spack.cmd.find.display_specs(installed, mode=args.mode)
+
+ if show_activated:
+ #
+ # List specs of activated extensions.
+ #
+ activated = layout.extension_map(spec)
+ if show_all:
+ print
+ if not activated:
+ tty.msg("None activated.")
+ else:
+ tty.msg("%d currently activated:" % len(activated))
+ spack.cmd.find.display_specs(
+ activated.values(), mode=args.mode, long=args.long)
diff --git a/lib/spack/spack/cmd/fetch.py b/lib/spack/spack/cmd/fetch.py
index c1ac2ed48d..e3956b125a 100644
--- a/lib/spack/spack/cmd/fetch.py
+++ b/lib/spack/spack/cmd/fetch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,22 +24,26 @@
##############################################################################
import argparse
+import llnl.util.tty as tty
+
import spack
import spack.cmd
-description = "Fetch archives for packages"
+description = "fetch archives for packages"
+section = "build"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-n', '--no-checksum', action='store_true', dest='no_checksum',
- help="Do not check packages against checksum")
+ help="do not check packages against checksum")
subparser.add_argument(
'-m', '--missing', action='store_true',
- help="Also fetch all missing dependencies")
+ help="fetch only missing (not yet installed) dependencies")
subparser.add_argument(
'-D', '--dependencies', action='store_true',
- help="Also fetch all dependencies")
+ help="also fetch all dependencies")
subparser.add_argument(
'packages', nargs=argparse.REMAINDER,
help="specs of packages to fetch")
@@ -55,10 +59,17 @@ def fetch(parser, args):
specs = spack.cmd.parse_specs(args.packages, concretize=True)
for spec in specs:
if args.missing or args.dependencies:
- for s in spec.traverse(deptype_query=spack.alldeps):
+ for s in spec.traverse():
package = spack.repo.get(s)
+
+ # Skip already-installed packages with --missing
if args.missing and package.installed:
continue
+
+ # Do not attempt to fetch externals (they're local)
+ if package.spec.external:
+ continue
+
package.do_fetch()
package = spack.repo.get(spec)
diff --git a/lib/spack/spack/cmd/find.py b/lib/spack/spack/cmd/find.py
index ecd6ae2822..71102563c3 100644
--- a/lib/spack/spack/cmd/find.py
+++ b/lib/spack/spack/cmd/find.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,13 @@
import sys
import llnl.util.tty as tty
+import spack
import spack.cmd.common.arguments as arguments
-
from spack.cmd import display_specs
-description = "Find installed spack packages"
+description = "list and search installed packages"
+section = "basic"
+level = "short"
def setup_parser(subparser):
@@ -39,56 +41,60 @@ def setup_parser(subparser):
dest='mode',
const='short',
default='short',
- help='Show only specs (default)')
+ help='show only specs (default)')
format_group.add_argument('-p', '--paths',
action='store_const',
dest='mode',
const='paths',
- help='Show paths to package install directories')
+ help='show paths to package install directories')
format_group.add_argument(
'-d', '--deps',
action='store_const',
dest='mode',
const='deps',
- help='Show full dependency DAG of installed packages')
+ help='show full dependency DAG of installed packages')
- arguments.add_common_arguments(subparser, ['long', 'very_long'])
+ arguments.add_common_arguments(subparser, ['long', 'very_long', 'tags'])
subparser.add_argument('-f', '--show-flags',
action='store_true',
dest='show_flags',
- help='Show spec compiler flags.')
+ help='show spec compiler flags')
+ subparser.add_argument('--show-full-compiler',
+ action='store_true',
+ dest='show_full_compiler',
+ help='show full compiler specs')
implicit_explicit = subparser.add_mutually_exclusive_group()
implicit_explicit.add_argument(
'-e', '--explicit',
action='store_true',
- help='Show only specs that were installed explicitly')
+ help='show only specs that were installed explicitly')
implicit_explicit.add_argument(
'-E', '--implicit',
action='store_true',
- help='Show only specs that were installed as dependencies')
+ help='show only specs that were installed as dependencies')
subparser.add_argument(
'-u', '--unknown',
action='store_true',
dest='unknown',
- help='Show only specs Spack does not have a package for.')
+ help='show only specs Spack does not have a package for')
subparser.add_argument(
'-m', '--missing',
action='store_true',
dest='missing',
- help='Show missing dependencies as well as installed specs.')
+ help='show missing dependencies as well as installed specs')
subparser.add_argument(
'-v', '--variants',
action='store_true',
dest='variants',
- help='Show variants in output (can be long)')
+ help='show variants in output (can be long)')
subparser.add_argument('-M', '--only-missing',
action='store_true',
dest='only_missing',
- help='Show only missing dependencies.')
+ help='show only missing dependencies')
subparser.add_argument('-N', '--namespace',
action='store_true',
- help='Show fully qualified package names.')
+ help='show fully qualified package names')
arguments.add_common_arguments(subparser, ['constraint'])
@@ -117,19 +123,18 @@ def find(parser, args):
# Exit early if no package matches the constraint
if not query_specs and args.constraint:
- msg = "No package matches the query: {0}".format(
- ' '.join(args.constraint))
+ msg = "No package matches the query: {0}"
+ msg = msg.format(' '.join(args.constraint))
tty.msg(msg)
return
+ # If tags have been specified on the command line, filter by tags
+ if args.tags:
+ packages_with_tags = spack.repo.packages_with_tags(*args.tags)
+ query_specs = [x for x in query_specs if x.name in packages_with_tags]
+
# Display the result
if sys.stdout.isatty():
tty.msg("%d installed packages." % len(query_specs))
- display_specs(query_specs,
- mode=args.mode,
- long=args.long,
- very_long=args.very_long,
- show_flags=args.show_flags,
- namespace=args.namespace,
- variants=args.variants)
+ display_specs(query_specs, args)
diff --git a/lib/spack/spack/cmd/flake8.py b/lib/spack/spack/cmd/flake8.py
index b8e28b0860..887348e9f6 100644
--- a/lib/spack/spack/cmd/flake8.py
+++ b/lib/spack/spack/cmd/flake8.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,6 +22,8 @@
# 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 __future__ import print_function
+
import re
import os
import sys
@@ -29,135 +31,211 @@ import shutil
import tempfile
import argparse
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir, mkdirp
import spack
-from spack.util.executable import *
+from spack.util.executable import which
+
+
+description = "runs source code style checks on Spack. requires flake8"
+section = "developer"
+level = "long"
+
-description = "Runs source code style checks on Spack. Requires flake8."
-flake8 = None
-include_untracked = True
+def is_package(f):
+ """Whether flake8 should consider a file as a core file or a package.
-"""List of directories to exclude from checks."""
+ We run flake8 with different exceptions for the core and for
+ packages, since we allow `from spack import *` and poking globals
+ into packages.
+ """
+ return f.startswith('var/spack/repos/') or 'docs/tutorial/examples' in f
+
+
+#: List of directories to exclude from checks.
exclude_directories = [spack.external_path]
-"""
-This is a dict that maps:
- filename pattern ->
- a flake8 exemption code ->
- list of patterns, for which matching lines should have codes applied.
-"""
-exemptions = {
+
+#: This is a dict that maps:
+#: filename pattern ->
+#: flake8 exemption code ->
+#: list of patterns, for which matching lines should have codes applied.
+#:
+#: For each file, if the filename pattern matches, we'll add per-line
+#: exemptions if any patterns in the sub-dict match.
+pattern_exemptions = {
# exemptions applied only to package.py files.
r'package.py$': {
+ # Allow 'from spack import *' in packages, but no other wildcards
+ 'F403': [
+ r'^from spack import \*$'
+ ],
# Exempt lines with urls and descriptions from overlong line errors.
- 501: [r'^\s*homepage\s*=',
- r'^\s*url\s*=',
- r'^\s*git\s*=',
- r'^\s*svn\s*=',
- r'^\s*hg\s*=',
- r'^\s*version\(.*\)',
- r'^\s*variant\(.*\)',
- r'^\s*depends_on\(.*\)',
- r'^\s*extends\(.*\)'],
+ 'E501': [
+ r'^\s*homepage\s*=',
+ r'^\s*url\s*=',
+ r'^\s*git\s*=',
+ r'^\s*svn\s*=',
+ r'^\s*hg\s*=',
+ r'^\s*list_url\s*=',
+ r'^\s*version\(',
+ r'^\s*variant\(',
+ r'^\s*provides\(',
+ r'^\s*extends\(',
+ r'^\s*depends_on\(',
+ r'^\s*conflicts\(',
+ r'^\s*resource\(',
+ r'^\s*patch\(',
+ ],
# Exempt '@when' decorated functions from redefinition errors.
- 811: [r'^\s*\@when\(.*\)'],
+ 'F811': [
+ r'^\s*@when\(.*\)',
+ ],
},
# exemptions applied to all files.
r'.py$': {
- # Exempt lines with URLs from overlong line errors.
- 501: [r'(https?|file)\:']
+ 'E501': [
+ r'(https?|ftp|file)\:', # URLs
+ r'([\'"])[0-9a-fA-F]{32,}\1', # long hex checksums
+ ]
},
}
# compile all regular expressions.
-exemptions = dict((re.compile(file_pattern),
- dict((code, [re.compile(p) for p in patterns])
- for code, patterns in error_dict.items()))
- for file_pattern, error_dict in exemptions.items())
+pattern_exemptions = dict(
+ (re.compile(file_pattern),
+ dict((code, [re.compile(p) for p in patterns])
+ for code, patterns in error_dict.items()))
+ for file_pattern, error_dict in pattern_exemptions.items())
-def changed_files():
+def changed_files(args):
"""Get list of changed files in the Spack repository."""
git = which('git', required=True)
+ range = "{0}...".format(args.base)
+
git_args = [
# Add changed files committed since branching off of develop
- ['diff', '--name-only', '--diff-filter=ACMR', 'develop'],
+ ['diff', '--name-only', '--diff-filter=ACMR', range],
# Add changed files that have been staged but not yet committed
['diff', '--name-only', '--diff-filter=ACMR', '--cached'],
# Add changed files that are unstaged
- ['diff', '--name-only', '--diff-filter=ACMR']]
+ ['diff', '--name-only', '--diff-filter=ACMR'],
+ ]
# Add new files that are untracked
- if include_untracked:
+ if args.untracked:
git_args.append(['ls-files', '--exclude-standard', '--other'])
+ # add everything if the user asked for it
+ if args.all:
+ git_args.append(['ls-files', '--exclude-standard'])
+
excludes = [os.path.realpath(f) for f in exclude_directories]
changed = set()
- for git_arg_list in git_args:
- arg_list = git_arg_list + ['--', '*.py']
- files = [f for f in git(*arg_list, output=str).split('\n') if f]
+ for arg_list in git_args:
+ files = git(*arg_list, output=str).split('\n')
+
for f in files:
- # don't look at files that are in the exclude locations
+ # Ignore non-Python files
+ if not f.endswith('.py'):
+ continue
+
+ # Ignore files in the exclude locations
if any(os.path.realpath(f).startswith(e) for e in excludes):
continue
+
changed.add(f)
+
return sorted(changed)
+def add_pattern_exemptions(line, codes):
+ """Add a flake8 exemption to a line."""
+ if line.startswith('#'):
+ return line
+
+ line = line.rstrip('\n')
+
+ # Line is already ignored
+ if line.endswith('# noqa'):
+ return line + '\n'
+
+ orig_len = len(line)
+ exemptions = ','.join(sorted(set(codes)))
+
+ # append exemption to line
+ if '# noqa: ' in line:
+ line += ',{0}'.format(exemptions)
+ elif line: # ignore noqa on empty lines
+ line += ' # noqa: {0}'.format(exemptions)
+
+ # if THIS made the line too long, add an exemption for that
+ if len(line) > 79 and orig_len <= 79:
+ line += ',E501'
+
+ return line + '\n'
+
+
def filter_file(source, dest, output=False):
- """Filter a single file through all the patterns in exemptions."""
+ """Filter a single file through all the patterns in pattern_exemptions."""
with open(source) as infile:
parent = os.path.dirname(dest)
mkdirp(parent)
with open(dest, 'w') as outfile:
for line in infile:
- line = line.rstrip()
+ line_errors = []
- for file_pattern, errors in exemptions.items():
+ # pattern exemptions
+ for file_pattern, errors in pattern_exemptions.items():
if not file_pattern.search(source):
continue
for code, patterns in errors.items():
for pattern in patterns:
if pattern.search(line):
- line += (" # NOQA: ignore=%d" % code)
+ line_errors.append(code)
break
- oline = line + '\n'
- outfile.write(oline)
+ if line_errors:
+ line = add_pattern_exemptions(line, line_errors)
+
+ outfile.write(line)
if output:
- sys.stdout.write(oline)
+ sys.stdout.write(line)
def setup_parser(subparser):
subparser.add_argument(
+ '-b', '--base', action='store', default='develop',
+ help="select base branch for collecting list of modified files")
+ subparser.add_argument(
'-k', '--keep-temp', action='store_true',
- help="Do not delete temporary directory where flake8 runs. "
- "Use for debugging, to see filtered files.")
+ help="do not delete temporary directory where flake8 runs. "
+ "use for debugging, to see filtered files")
+ subparser.add_argument(
+ '-a', '--all', action='store_true',
+ help="check all files, not just changed files")
subparser.add_argument(
'-o', '--output', action='store_true',
- help="Send filtered files to stdout as well as temp files.")
+ help="send filtered files to stdout as well as temp files")
subparser.add_argument(
'-r', '--root-relative', action='store_true', default=False,
help="print root-relative paths (default is cwd-relative)")
subparser.add_argument(
'-U', '--no-untracked', dest='untracked', action='store_false',
- default=True, help="Exclude untracked files from checks.")
+ default=True, help="exclude untracked files from checks")
subparser.add_argument(
'files', nargs=argparse.REMAINDER, help="specific files to check")
def flake8(parser, args):
- # Just use this to check for flake8 -- we actually execute it with Popen.
- global flake8, include_untracked
flake8 = which('flake8', required=True)
- include_untracked = args.untracked
temp = tempfile.mkdtemp()
try:
@@ -171,15 +249,14 @@ def flake8(parser, args):
with working_dir(spack.prefix):
if not file_list:
- file_list = changed_files()
- shutil.copy('.flake8', os.path.join(temp, '.flake8'))
+ file_list = changed_files(args)
- print '======================================================='
- print 'flake8: running flake8 code checks on spack.'
- print
- print 'Modified files:'
+ print('=======================================================')
+ print('flake8: running flake8 code checks on spack.')
+ print()
+ print('Modified files:')
for filename in file_list:
- print " %s" % filename.strip()
+ print(' {0}'.format(filename.strip()))
print('=======================================================')
# filter files into a temporary directory with exemptions added.
@@ -188,31 +265,47 @@ def flake8(parser, args):
dest_path = os.path.join(temp, filename)
filter_file(src_path, dest_path, args.output)
- # run flake8 on the temporary tree.
+ # run flake8 on the temporary tree, once for core, once for pkgs
+ package_file_list = [f for f in file_list if is_package(f)]
+ file_list = [f for f in file_list if not is_package(f)]
+
+ returncode = 0
with working_dir(temp):
- output = flake8('--format', 'pylint', *file_list,
- fail_on_error=False, output=str)
+ output = ''
+ if file_list:
+ output += flake8(
+ '--format', 'pylint',
+ '--config=%s' % os.path.join(spack.prefix, '.flake8'),
+ *file_list, fail_on_error=False, output=str)
+ returncode |= flake8.returncode
+ if package_file_list:
+ output += flake8(
+ '--format', 'pylint',
+ '--config=%s' % os.path.join(spack.prefix,
+ '.flake8_packages'),
+ *package_file_list, fail_on_error=False, output=str)
+ returncode |= flake8.returncode
if args.root_relative:
# print results relative to repo root.
- print output
+ print(output)
else:
# print results relative to current working directory
def cwd_relative(path):
- return '%s: [' % os.path.relpath(
- os.path.join(spack.prefix, path.group(1)), os.getcwd())
+ return '{0}: ['.format(os.path.relpath(
+ os.path.join(spack.prefix, path.group(1)), os.getcwd()))
for line in output.split('\n'):
- print re.sub(r'^(.*): \[', cwd_relative, line)
+ print(re.sub(r'^(.*): \[', cwd_relative, line))
- if flake8.returncode != 0:
- print "Flake8 found errors."
+ if returncode != 0:
+ print('Flake8 found errors.')
sys.exit(1)
else:
- print "Flake8 checks were clean."
+ print('Flake8 checks were clean.')
finally:
if args.keep_temp:
- print "temporary files are in ", temp
+ print('Temporary files are in: ', temp)
else:
shutil.rmtree(temp, ignore_errors=True)
diff --git a/lib/spack/spack/cmd/gpg.py b/lib/spack/spack/cmd/gpg.py
new file mode 100644
index 0000000000..b16df52e8f
--- /dev/null
+++ b/lib/spack/spack/cmd/gpg.py
@@ -0,0 +1,174 @@
+##############################################################################
+# 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/spack/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.util.gpg import Gpg
+import argparse
+import spack
+import os
+
+description = "handle GPG actions for spack"
+section = "developer"
+level = "long"
+
+
+def setup_parser(subparser):
+ setup_parser.parser = subparser
+ subparsers = subparser.add_subparsers(help='GPG sub-commands')
+
+ verify = subparsers.add_parser('verify')
+ verify.add_argument('package', type=str,
+ help='the package to verify')
+ verify.add_argument('signature', type=str, nargs='?',
+ help='the signature file')
+ verify.set_defaults(func=gpg_verify)
+
+ trust = subparsers.add_parser('trust')
+ trust.add_argument('keyfile', type=str,
+ help='add a key to the trust store')
+ trust.set_defaults(func=gpg_trust)
+
+ untrust = subparsers.add_parser('untrust')
+ untrust.add_argument('--signing', action='store_true',
+ help='allow untrusting signing keys')
+ untrust.add_argument('keys', nargs='+', type=str,
+ help='remove keys from the trust store')
+ untrust.set_defaults(func=gpg_untrust)
+
+ sign = subparsers.add_parser('sign')
+ sign.add_argument('--output', metavar='DEST', type=str,
+ help='the directory to place signatures')
+ sign.add_argument('--key', metavar='KEY', type=str,
+ help='the key to use for signing')
+ sign.add_argument('--clearsign', action='store_true',
+ help='if specified, create a clearsign signature')
+ sign.add_argument('package', type=str,
+ help='the package to sign')
+ sign.set_defaults(func=gpg_sign)
+
+ create = subparsers.add_parser('create')
+ create.add_argument('name', type=str,
+ help='the name to use for the new key')
+ create.add_argument('email', type=str,
+ help='the email address to use for the new key')
+ create.add_argument('--comment', metavar='COMMENT', type=str,
+ default='GPG created for Spack',
+ help='a description for the intended use of the key')
+ create.add_argument('--expires', metavar='EXPIRATION', type=str,
+ default='0', help='when the key should expire')
+ create.add_argument('--export', metavar='DEST', type=str,
+ help='export the public key to a file')
+ create.set_defaults(func=gpg_create)
+
+ list = subparsers.add_parser('list')
+ list.add_argument('--trusted', action='store_true',
+ default=True, help='list trusted keys')
+ list.add_argument('--signing', action='store_true',
+ help='list keys which may be used for signing')
+ list.set_defaults(func=gpg_list)
+
+ init = subparsers.add_parser('init')
+ init.add_argument('--from', metavar='DIR', type=str,
+ dest='import_dir', help=argparse.SUPPRESS)
+ init.set_defaults(func=gpg_init)
+
+ export = subparsers.add_parser('export')
+ export.add_argument('location', type=str,
+ help='where to export keys')
+ export.add_argument('keys', nargs='*',
+ help='the keys to export; '
+ 'all secret keys if unspecified')
+ export.set_defaults(func=gpg_export)
+
+
+def gpg_create(args):
+ if args.export:
+ old_sec_keys = Gpg.signing_keys()
+ Gpg.create(name=args.name, email=args.email,
+ comment=args.comment, expires=args.expires)
+ if args.export:
+ new_sec_keys = set(Gpg.signing_keys())
+ new_keys = new_sec_keys.difference(old_sec_keys)
+ Gpg.export_keys(args.export, *new_keys)
+
+
+def gpg_export(args):
+ keys = args.keys
+ if not keys:
+ keys = Gpg.signing_keys()
+ Gpg.export_keys(args.location, *keys)
+
+
+def gpg_list(args):
+ Gpg.list(args.trusted, args.signing)
+
+
+def gpg_sign(args):
+ key = args.key
+ if key is None:
+ keys = Gpg.signing_keys()
+ if len(keys) == 1:
+ key = keys[0]
+ elif not keys:
+ raise RuntimeError('no signing keys are available')
+ else:
+ raise RuntimeError('multiple signing keys are available; '
+ 'please choose one')
+ output = args.output
+ if not output:
+ output = args.package + '.asc'
+ # TODO: Support the package format Spack creates.
+ Gpg.sign(key, args.package, output, args.clearsign)
+
+
+def gpg_trust(args):
+ Gpg.trust(args.keyfile)
+
+
+def gpg_init(args):
+ import_dir = args.import_dir
+ if import_dir is None:
+ import_dir = spack.gpg_keys_path
+
+ for root, _, filenames in os.walk(import_dir):
+ for filename in filenames:
+ if not filename.endswith('.key'):
+ continue
+ Gpg.trust(os.path.join(root, filename))
+
+
+def gpg_untrust(args):
+ Gpg.untrust(args.signing, *args.keys)
+
+
+def gpg_verify(args):
+ # TODO: Support the package format Spack creates.
+ signature = args.signature
+ if signature is None:
+ signature = args.package + '.asc'
+ Gpg.verify(signature, args.package)
+
+
+def gpg(parser, args):
+ if args.func:
+ args.func(args)
diff --git a/lib/spack/spack/cmd/graph.py b/lib/spack/spack/cmd/graph.py
index 6a268e6961..16bd6a38a1 100644
--- a/lib/spack/spack/cmd/graph.py
+++ b/lib/spack/spack/cmd/graph.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,17 +22,20 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import argparse
+from __future__ import print_function
+import argparse
import llnl.util.tty as tty
import spack
import spack.cmd
import spack.store
-from spack.spec import *
-from spack.graph import *
+from spack.dependency import all_deptypes, canonical_deptype
+from spack.graph import graph_dot, graph_ascii
-description = "Generate graphs of package dependency relationships."
+description = "generate graphs of package dependency relationships"
+section = "basic"
+level = "long"
def setup_parser(subparser):
@@ -41,31 +44,31 @@ def setup_parser(subparser):
method = subparser.add_mutually_exclusive_group()
method.add_argument(
'-a', '--ascii', action='store_true',
- help="Draw graph as ascii to stdout (default).")
+ help="draw graph as ascii to stdout (default)")
method.add_argument(
'-d', '--dot', action='store_true',
- help="Generate graph in dot format and print to stdout.")
+ help="generate graph in dot format and print to stdout")
subparser.add_argument(
'-n', '--normalize', action='store_true',
- help="Skip concretization; only print normalized spec.")
+ help="skip concretization; only print normalized spec")
subparser.add_argument(
'-s', '--static', action='store_true',
- help="Use static information from packages, not dynamic spec info.")
+ help="use static information from packages, not dynamic spec info")
subparser.add_argument(
'-i', '--installed', action='store_true',
- help="Graph all installed specs in dot format (implies --dot).")
+ help="graph all installed specs in dot format (implies --dot)")
subparser.add_argument(
'-t', '--deptype', action='store',
- help="Comma-separated list of deptypes to traverse. default=%s."
- % ','.join(alldeps))
+ help="comma-separated list of deptypes to traverse. default=%s"
+ % ','.join(all_deptypes))
subparser.add_argument(
'specs', nargs=argparse.REMAINDER,
- help="specs of packages to graph.")
+ help="specs of packages to graph")
def graph(parser, args):
@@ -84,10 +87,11 @@ def graph(parser, args):
setup_parser.parser.print_help()
return 1
- deptype = alldeps
+ deptype = all_deptypes
if args.deptype:
deptype = tuple(args.deptype.split(','))
- validate_deptype(deptype)
+ if deptype == ('all',):
+ deptype = 'all'
deptype = canonical_deptype(deptype)
if args.dot: # Dot graph only if asked for.
@@ -96,5 +100,5 @@ def graph(parser, args):
elif specs: # ascii is default: user doesn't need to provide it explicitly
graph_ascii(specs[0], debug=spack.debug, deptype=deptype)
for spec in specs[1:]:
- print # extra line bt/w independent graphs
+ print() # extra line bt/w independent graphs
graph_ascii(spec, debug=spack.debug)
diff --git a/lib/spack/spack/cmd/help.py b/lib/spack/spack/cmd/help.py
index 5bc8fc3e74..a76ef3a083 100644
--- a/lib/spack/spack/cmd/help.py
+++ b/lib/spack/spack/cmd/help.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,16 +22,100 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-description = "Get help on spack and its commands"
+import sys
+from llnl.util.tty.color import colorize
+
+description = "get help on spack and its commands"
+section = "help"
+level = "short"
+
+#
+# These are longer guides on particular aspects of Spack. Currently there
+# is only one on spec syntax.
+#
+spec_guide = """\
+spec expression syntax:
+
+ package [constraints] [^dependency [constraints] ...]
+
+ package any package from 'spack list'
+
+ constraints:
+ versions:
+ @c{@version} single version
+ @c{@min:max} version range (inclusive)
+ @c{@min:} version <min> or higher
+ @c{@:max} up to version <max> (inclusive)
+
+ compilers:
+ @g{%compiler} build with <compiler>
+ @g{%compiler@version} build with specific compiler version
+ @g{%compiler@min:max} specific version range (see above)
+
+ variants:
+ @B{+variant} enable <variant>
+ @r{-variant} or @r{~variant} disable <variant>
+ @B{variant=value} set non-boolean <variant> to <value>
+ @B{variant=value1,value2,value3} set multi-value <variant> values
+
+ architecture variants:
+ @m{target=target} specific <target> processor
+ @m{os=operating_system} specific <operating_system>
+ @m{platform=platform} linux, darwin, cray, bgq, etc.
+ @m{arch=platform-os-target} shortcut for all three above
+
+ cross-compiling:
+ @m{os=backend} or @m{os=be} build for compute node (backend)
+ @m{os=frontend} or @m{os=fe} build for login node (frontend)
+
+ dependencies:
+ ^dependency [constraints] specify constraints on dependencies
+
+ examples:
+ hdf5 any hdf5 configuration
+ hdf5 @c{@1.10.1} hdf5 version 1.10.1
+ hdf5 @c{@1.8:} hdf5 1.8 or higher
+ hdf5 @c{@1.8:} @g{%gcc} hdf5 1.8 or higher built with gcc
+ hdf5 @B{+mpi} hdf5 with mpi enabled
+ hdf5 @r{~mpi} hdf5 with mpi disabled
+ hdf5 @B{+mpi} ^mpich hdf5 with mpi, using mpich
+ hdf5 @B{+mpi} ^openmpi@c{@1.7} hdf5 wtih mpi, using openmpi 1.7
+ boxlib @B{dim=2} boxlib built for 2 dimensions
+ libdwarf @g{%intel} ^libelf@g{%gcc}
+ libdwarf, built with intel compiler, linked to libelf built with gcc
+ mvapich2 @g{%pgi} @B{fabrics=psm,mrail,sock}
+ mvapich2, built with pgi compiler, with support for multiple fabrics
+"""
+
+
+guides = {
+ 'spec': spec_guide,
+}
def setup_parser(subparser):
- subparser.add_argument('help_command', nargs='?', default=None,
- help='command to get help on')
+ help_cmd_group = subparser.add_mutually_exclusive_group()
+ help_cmd_group.add_argument('help_command', nargs='?', default=None,
+ help='command to get help on')
+
+ help_all_group = subparser.add_mutually_exclusive_group()
+ help_all_group.add_argument(
+ '-a', '--all', action='store_const', const='long', default='short',
+ help='print all available commands')
+
+ help_spec_group = subparser.add_mutually_exclusive_group()
+ help_spec_group.add_argument(
+ '--spec', action='store_const', dest='guide', const='spec',
+ default=None, help='print all available commands')
def help(parser, args):
+ if args.guide:
+ print(colorize(guides[args.guide]))
+ return 0
+
if args.help_command:
+ parser.add_command(args.help_command)
parser.parse_args([args.help_command, '-h'])
else:
- parser.print_help()
+ sys.stdout.write(parser.format_help(level=args.all))
diff --git a/lib/spack/spack/cmd/info.py b/lib/spack/spack/cmd/info.py
index 8e7df87a02..e53d607704 100644
--- a/lib/spack/spack/cmd/info.py
+++ b/lib/spack/spack/cmd/info.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,12 +22,25 @@
# 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 __future__ import print_function
+
import textwrap
-from llnl.util.tty.colify import *
+
+from six.moves import zip_longest
+
+from llnl.util.tty.colify import colify
+
+import llnl.util.tty.color as color
import spack
import spack.fetch_strategy as fs
+import spack.spec
+
+description = 'get detailed information on a particular package'
+section = 'basic'
+level = 'short'
-description = "Get detailed information on a particular package"
+header_color = '@*b'
+plain_format = '@.'
def padder(str_list, extra=0):
@@ -43,68 +56,180 @@ def padder(str_list, extra=0):
def setup_parser(subparser):
subparser.add_argument(
- 'name', metavar="PACKAGE", help="Name of package to get info for.")
+ 'name', metavar='PACKAGE', help='name of package to get info for')
+
+
+def section_title(s):
+ return header_color + s + plain_format
+
+
+def version(s):
+ return spack.spec.version_color + s + plain_format
+
+
+def variant(s):
+ return spack.spec.enabled_variant_color + s + plain_format
+
+
+class VariantFormatter(object):
+ def __init__(self, variants, max_widths=(30, 20, 30)):
+ self.variants = variants
+ self.headers = ('Name [Default]', 'Allowed values', 'Description')
+ # Set max headers lengths
+ self.max_column_widths = max_widths
+
+ # Formats
+ fmt_name = '{0} [{1}]'
+
+ # Initialize column widths with the length of the
+ # corresponding headers, as they cannot be shorter
+ # than that
+ self.column_widths = [len(x) for x in self.headers]
+
+ # Update according to line lengths
+ for k, v in variants.items():
+ candidate_max_widths = (
+ len(fmt_name.format(k, self.default(v))), # Name [Default]
+ len(v.allowed_values), # Allowed values
+ len(v.description) # Description
+ )
+
+ self.column_widths = (
+ max(self.column_widths[0], candidate_max_widths[0]),
+ max(self.column_widths[1], candidate_max_widths[1]),
+ max(self.column_widths[2], candidate_max_widths[2])
+ )
+
+ # Reduce to at most the maximum allowed
+ self.column_widths = (
+ min(self.column_widths[0], self.max_column_widths[0]),
+ min(self.column_widths[1], self.max_column_widths[1]),
+ min(self.column_widths[2], self.max_column_widths[2])
+ )
+
+ # Compute the format
+ self.fmt = "%%-%ss%%-%ss%%s" % (
+ self.column_widths[0] + 4,
+ self.column_widths[1] + 4
+ )
+
+ def default(self, v):
+ s = 'on' if v.default is True else 'off'
+ if not isinstance(v.default, bool):
+ s = v.default
+ return s
+
+ @property
+ def lines(self):
+ if not self.variants:
+ yield ' None'
+ else:
+ yield ' ' + self.fmt % self.headers
+ yield '\n'
+ for k, v in sorted(self.variants.items()):
+ name = textwrap.wrap(
+ '{0} [{1}]'.format(k, self.default(v)),
+ width=self.column_widths[0]
+ )
+ allowed = textwrap.wrap(
+ v.allowed_values,
+ width=self.column_widths[1]
+ )
+ description = textwrap.wrap(
+ v.description,
+ width=self.column_widths[2]
+ )
+ for t in zip_longest(
+ name, allowed, description, fillvalue=''
+ ):
+ yield " " + self.fmt % t
def print_text_info(pkg):
"""Print out a plain text description of a package."""
- header = "{0}: ".format(pkg.build_system_class)
- print header, pkg.name
- whitespaces = ''.join([' '] * (len(header) - len("Homepage: ")))
- print "Homepage:", whitespaces, pkg.homepage
+ header = section_title(
+ '{0}: '
+ ).format(pkg.build_system_class) + pkg.name
+ color.cprint(header)
+
+ color.cprint('')
+ color.cprint(section_title('Description:'))
+ if pkg.__doc__:
+ color.cprint(pkg.format_doc(indent=4))
+ else:
+ color.cprint(" None")
+
+ color.cprint(section_title('Homepage: ') + pkg.homepage)
+
+ if len(pkg.maintainers) > 0:
+ mnt = " ".join(['@@' + m for m in pkg.maintainers])
+ color.cprint('')
+ color.cprint(section_title('Maintainers: ') + mnt)
+
+ color.cprint('')
+ color.cprint(section_title("Tags: "))
+ if hasattr(pkg, 'tags'):
+ tags = sorted(pkg.tags)
+ colify(tags, indent=4)
+ else:
+ color.cprint(" None")
- print
- print "Safe versions: "
+ color.cprint('')
+ color.cprint(section_title('Preferred version: '))
if not pkg.versions:
- print(" None")
+ color.cprint(version(' None'))
+ color.cprint('')
+ color.cprint(section_title('Safe versions: '))
+ color.cprint(version(' None'))
else:
pad = padder(pkg.versions, 4)
- for v in reversed(sorted(pkg.versions)):
- f = fs.for_package_version(pkg, v)
- print " %s%s" % (pad(v), str(f))
- print
- print "Variants:"
- if not pkg.variants:
- print " None"
- else:
- pad = padder(pkg.variants, 4)
+ # Here we sort first on the fact that a version is marked
+ # as preferred in the package, then on the fact that the
+ # version is not develop, then lexicographically
+ key_fn = lambda v: (pkg.versions[v].get('preferred', False),
+ not v.isdevelop(),
+ v)
+ preferred = sorted(pkg.versions, key=key_fn).pop()
- maxv = max(len(v) for v in sorted(pkg.variants))
- fmt = "%%-%ss%%-10s%%s" % (maxv + 4)
+ f = fs.for_package_version(pkg, preferred)
+ line = version(' {0}'.format(pad(preferred))) + str(f)
+ color.cprint(line)
+ color.cprint('')
+ color.cprint(section_title('Safe versions: '))
- print " " + fmt % ('Name', 'Default', 'Description')
- print
- for name in sorted(pkg.variants):
- v = pkg.variants[name]
- default = 'on' if v.default else 'off'
+ for v in reversed(sorted(pkg.versions)):
+ f = fs.for_package_version(pkg, v)
+ line = version(' {0}'.format(pad(v))) + str(f)
+ color.cprint(line)
- lines = textwrap.wrap(v.description)
- lines[1:] = [" " + (" " * maxv) + l for l in lines[1:]]
- desc = "\n".join(lines)
+ color.cprint('')
+ color.cprint(section_title('Variants:'))
- print " " + fmt % (name, default, desc)
+ formatter = VariantFormatter(pkg.variants)
+ for line in formatter.lines:
+ color.cprint(line)
- print
- print "Installation Phases:"
+ color.cprint('')
+ color.cprint(section_title('Installation Phases:'))
phase_str = ''
for phase in pkg.phases:
phase_str += " {0}".format(phase)
- print phase_str
+ color.cprint(phase_str)
for deptype in ('build', 'link', 'run'):
- print
- print "%s Dependencies:" % deptype.capitalize()
+ color.cprint('')
+ color.cprint(section_title('%s Dependencies:' % deptype.capitalize()))
deps = sorted(pkg.dependencies_of_type(deptype))
if deps:
colify(deps, indent=4)
else:
- print " None"
+ color.cprint(' None')
- print
- print "Virtual Packages: "
+ color.cprint('')
+ color.cprint(section_title('Virtual Packages: '))
if pkg.provided:
inverse_map = {}
for spec, whens in pkg.provided.items():
@@ -113,17 +238,15 @@ def print_text_info(pkg):
inverse_map[when] = set()
inverse_map[when].add(spec)
for when, specs in reversed(sorted(inverse_map.items())):
- print " %s provides %s" % (
- when, ', '.join(str(s) for s in specs))
- else:
- print " None"
+ line = " %s provides %s" % (
+ when.colorized(), ', '.join(s.colorized() for s in specs)
+ )
+ print(line)
- print
- print "Description:"
- if pkg.__doc__:
- print pkg.format_doc(indent=4)
else:
- print " None"
+ color.cprint(" None")
+
+ color.cprint('')
def info(parser, args):
diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py
index 3731fe3c81..86acd580d7 100644
--- a/lib/spack/spack/cmd/install.py
+++ b/lib/spack/spack/cmd/install.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,6 +27,8 @@ import codecs
import functools
import os
import platform
+import shutil
+import sys
import time
import xml.dom.minidom
import xml.etree.ElementTree as ET
@@ -40,7 +42,9 @@ from spack.build_environment import InstallError
from spack.fetch_strategy import FetchError
from spack.package import PackageBase
-description = "Build and install packages"
+description = "build and install packages"
+section = "build"
+level = "short"
def setup_parser(subparser):
@@ -49,29 +53,47 @@ def setup_parser(subparser):
default='package,dependencies',
dest='things_to_install',
choices=['package', 'dependencies'],
- help="""Select the mode of installation.
-The default is to install the package along with all its dependencies.
-Alternatively one can decide to install only the package or only
-the dependencies."""
+ help="""select the mode of installation.
+the default is to install the package along with all its dependencies.
+alternatively one can decide to install only the package or only
+the dependencies"""
)
subparser.add_argument(
'-j', '--jobs', action='store', type=int,
- help="Explicitly set number of make jobs. Default is #cpus.")
+ help="explicitly set number of make jobs. default is #cpus")
subparser.add_argument(
- '--keep-prefix', action='store_true', dest='keep_prefix',
- help="Don't remove the install prefix if installation fails.")
+ '--overwrite', action='store_true',
+ help="reinstall an existing spec, even if it has dependents")
subparser.add_argument(
- '--keep-stage', action='store_true', dest='keep_stage',
- help="Don't remove the build stage if installation succeeds.")
+ '--keep-prefix', action='store_true',
+ help="don't remove the install prefix if installation fails")
subparser.add_argument(
- '-n', '--no-checksum', action='store_true', dest='no_checksum',
- help="Do not check packages against checksum")
+ '--keep-stage', action='store_true',
+ help="don't remove the build stage if installation succeeds")
subparser.add_argument(
- '-v', '--verbose', action='store_true', dest='verbose',
- help="Display verbose build output while installing.")
+ '--restage', action='store_true',
+ help="if a partial install is detected, delete prior state")
subparser.add_argument(
- '--fake', action='store_true', dest='fake',
- help="Fake install. Just remove prefix and create a fake file.")
+ '--use-cache', action='store_true', dest='use_cache',
+ help="check for pre-built Spack packages in mirrors")
+ subparser.add_argument(
+ '--show-log-on-error', action='store_true',
+ help="print full build log to stderr if build fails")
+ subparser.add_argument(
+ '--source', action='store_true', dest='install_source',
+ help="install source files in prefix")
+ subparser.add_argument(
+ '-n', '--no-checksum', action='store_true',
+ help="do not check packages against checksum")
+ subparser.add_argument(
+ '-v', '--verbose', action='store_true',
+ help="display verbose build output while installing")
+ subparser.add_argument(
+ '--fake', action='store_true',
+ help="fake install for debug purposes.")
+ subparser.add_argument(
+ '-f', '--file', action='store_true',
+ help="install from file. Read specs to install from .yaml files")
cd_group = subparser.add_mutually_exclusive_group()
arguments.add_common_arguments(cd_group, ['clean', 'dirty'])
@@ -81,21 +103,31 @@ the dependencies."""
nargs=argparse.REMAINDER,
help="spec of the package to install"
)
- subparser.add_argument(
- '--run-tests', action='store_true', dest='run_tests',
- help="Run package level tests during installation."
+ testing = subparser.add_mutually_exclusive_group()
+ testing.add_argument(
+ '--test', default=None,
+ choices=['root', 'all'],
+ help="""If 'root' is chosen, run package tests during
+installation for top-level packages (but skip tests for dependencies).
+if 'all' is chosen, run package tests during installation for all
+packages. If neither are chosen, don't run tests for any packages."""
+ )
+ testing.add_argument(
+ '--run-tests', action='store_true',
+ help='run package tests during installation (same as --test=all)'
)
subparser.add_argument(
'--log-format',
default=None,
choices=['junit'],
- help="Format to be used for log files."
+ help="format to be used for log files"
)
subparser.add_argument(
'--log-file',
default=None,
- help="Filename for the log file. If not passed a default will be used."
+ help="filename for the log file. if not passed a default will be used"
)
+ arguments.add_common_arguments(subparser, ['yes_to_all'])
# Needed for test cases
@@ -261,7 +293,7 @@ def junit_output(spec, test_suite):
message='Unexpected exception thrown during install',
text=text
)
- except:
+ except BaseException:
# Anything else is also an error
duration = time.time() - start_time
test_case.set_duration(duration)
@@ -289,6 +321,61 @@ def default_log_file(spec):
return fs.join_path(dirname, basename)
+def install_spec(cli_args, kwargs, spec):
+
+ saved_do_install = PackageBase.do_install
+ decorator = lambda fn: fn
+
+ # Check if we were asked to produce some log for dashboards
+ if cli_args.log_format is not None:
+ # Compute the filename for logging
+ log_filename = cli_args.log_file
+ if not log_filename:
+ log_filename = default_log_file(spec)
+
+ # Create the test suite in which to log results
+ test_suite = TestSuite(spec)
+
+ # Temporarily decorate PackageBase.do_install to monitor
+ # recursive calls.
+ decorator = junit_output(spec, test_suite)
+
+ # Do the actual installation
+ try:
+ # decorate the install if necessary
+ PackageBase.do_install = decorator(PackageBase.do_install)
+
+ if cli_args.things_to_install == 'dependencies':
+ # Install dependencies as-if they were installed
+ # for root (explicit=False in the DB)
+ kwargs['explicit'] = False
+ for s in spec.dependencies():
+ p = spack.repo.get(s)
+ p.do_install(**kwargs)
+ else:
+ package = spack.repo.get(spec)
+ kwargs['explicit'] = True
+ package.do_install(**kwargs)
+
+ except InstallError as e:
+ if cli_args.show_log_on_error:
+ e.print_context()
+ if not os.path.exists(e.pkg.build_log_path):
+ tty.error("'spack install' created no log.")
+ else:
+ sys.stderr.write('Full build log:\n')
+ with open(e.pkg.build_log_path) as log:
+ shutil.copyfileobj(log, sys.stderr)
+ raise
+
+ finally:
+ PackageBase.do_install = saved_do_install
+
+ # Dump test output if asked to
+ if cli_args.log_format is not None:
+ test_suite.dump(log_filename)
+
+
def install(parser, args, **kwargs):
if not args.package:
tty.die("install requires at least one package argument")
@@ -305,46 +392,70 @@ def install(parser, args, **kwargs):
kwargs.update({
'keep_prefix': args.keep_prefix,
'keep_stage': args.keep_stage,
+ 'restage': args.restage,
+ 'install_source': args.install_source,
'install_deps': 'dependencies' in args.things_to_install,
'make_jobs': args.jobs,
- 'run_tests': args.run_tests,
'verbose': args.verbose,
'fake': args.fake,
- 'dirty': args.dirty
+ 'dirty': args.dirty,
+ 'use_cache': args.use_cache
})
+ if args.run_tests:
+ tty.warn("Deprecated option: --run-tests: use --test=all instead")
+
+ specs = spack.cmd.parse_specs(args.package)
+ if args.test == 'all' or args.run_tests:
+ spack.package_testing.test_all()
+ elif args.test == 'root':
+ for spec in specs:
+ spack.package_testing.test(spec.name)
+
# Spec from cli
- specs = spack.cmd.parse_specs(args.package, concretize=True)
+ specs = []
+ if args.file:
+ for file in args.package:
+ with open(file, 'r') as f:
+ specs.append(spack.spec.Spec.from_yaml(f))
+ else:
+ specs = spack.cmd.parse_specs(args.package, concretize=True)
if len(specs) == 0:
tty.error('The `spack install` command requires a spec to install.')
- for spec in specs:
- # Check if we were asked to produce some log for dashboards
- if args.log_format is not None:
- # Compute the filename for logging
- log_filename = args.log_file
- if not log_filename:
- log_filename = default_log_file(spec)
- # Create the test suite in which to log results
- test_suite = TestSuite(spec)
- # Decorate PackageBase.do_install to get installation status
- PackageBase.do_install = junit_output(
- spec, test_suite
- )(PackageBase.do_install)
-
- # Do the actual installation
- if args.things_to_install == 'dependencies':
- # Install dependencies as-if they were installed
- # for root (explicit=False in the DB)
- kwargs['explicit'] = False
- for s in spec.dependencies():
- p = spack.repo.get(s)
- p.do_install(**kwargs)
- else:
- package = spack.repo.get(spec)
- kwargs['explicit'] = True
- package.do_install(**kwargs)
+ if args.overwrite:
+ # If we asked to overwrite an existing spec we must ensure that:
+ # 1. We have only one spec
+ # 2. The spec is already installed
+ assert len(specs) == 1, \
+ "only one spec is allowed when overwriting an installation"
+
+ spec = specs[0]
+ t = spack.store.db.query(spec)
+ assert len(t) == 1, "to overwrite a spec you must install it first"
+
+ # Give the user a last chance to think about overwriting an already
+ # existing installation
+ if not args.yes_to_all:
+ tty.msg('The following package will be reinstalled:\n')
+
+ display_args = {
+ 'long': True,
+ 'show_flags': True,
+ 'variants': True
+ }
+
+ spack.cmd.display_specs(t, **display_args)
+ answer = tty.get_yes_or_no(
+ 'Do you want to proceed?', default=False
+ )
+ if not answer:
+ tty.die('Reinstallation aborted.')
+
+ with fs.replace_directory_transaction(specs[0].prefix):
+ install_spec(args, kwargs, specs[0])
+
+ else:
- # Dump log file if asked to
- if args.log_format is not None:
- test_suite.dump(log_filename)
+ for spec in specs:
+ install_spec(args, kwargs, spec)
diff --git a/lib/spack/spack/cmd/list.py b/lib/spack/spack/cmd/list.py
index e1389df69f..3549de361a 100644
--- a/lib/spack/spack/cmd/list.py
+++ b/lib/spack/spack/cmd/list.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,18 +22,26 @@
# 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 __future__ import print_function
+
import argparse
import cgi
import fnmatch
import re
import sys
-from StringIO import StringIO
+
+from six import StringIO
import llnl.util.tty as tty
-import spack
from llnl.util.tty.colify import colify
-description = "Print available spack packages to stdout in different formats"
+import spack
+import spack.cmd.common.arguments as arguments
+
+description = "list and search available packages"
+section = "basic"
+level = "short"
+
formatters = {}
@@ -47,13 +55,15 @@ def formatter(func):
def setup_parser(subparser):
subparser.add_argument(
'filter', nargs=argparse.REMAINDER,
- help='Optional case-insensitive glob patterns to filter results.')
+ help='optional case-insensitive glob patterns to filter results')
subparser.add_argument(
'-d', '--search-description', action='store_true', default=False,
- help='Filtering will also search the description for a match.')
+ help='filtering will also search the description for a match')
subparser.add_argument(
'--format', default='name_only', choices=formatters,
- help='Format to be used to print the output [default: name_only]')
+ help='format to be used to print the output [default: name_only]')
+
+ arguments.add_common_arguments(subparser, ['tags'])
def filter_by_name(pkgs, args):
@@ -109,7 +119,7 @@ def rst(pkgs):
def github_url(pkg):
"""Link to a package file on github."""
- url = 'https://github.com/LLNL/spack/blob/develop/var/spack/repos/builtin/packages/{0}/package.py'
+ url = 'https://github.com/spack/spack/blob/develop/var/spack/repos/builtin/packages/{0}/package.py'
return url.format(pkg.name)
def rst_table(elts):
@@ -123,54 +133,54 @@ def rst(pkgs):
pkgs = [spack.repo.get(name) for name in pkg_names]
print('.. _package-list:')
- print('')
+ print()
print('============')
print('Package List')
print('============')
- print('')
+ print()
print('This is a list of things you can install using Spack. It is')
print('automatically generated based on the packages in the latest Spack')
print('release.')
- print('')
+ print()
print('Spack currently has %d mainline packages:' % len(pkgs))
- print('')
+ print()
print(rst_table('`%s`_' % p for p in pkg_names))
- print('')
+ print()
# Output some text for each package.
for pkg in pkgs:
print('-----')
- print('')
+ print()
print('.. _%s:' % pkg.name)
- print('')
+ print()
# Must be at least 2 long, breaks for single letter packages like R.
print('-' * max(len(pkg.name), 2))
print(pkg.name)
print('-' * max(len(pkg.name), 2))
- print('')
+ print()
print('Homepage:')
print(' * `%s <%s>`__' % (cgi.escape(pkg.homepage), pkg.homepage))
- print('')
+ print()
print('Spack package:')
print(' * `%s/package.py <%s>`__' % (pkg.name, github_url(pkg)))
- print('')
+ print()
if pkg.versions:
print('Versions:')
print(' ' + ', '.join(str(v) for v in
reversed(sorted(pkg.versions))))
- print('')
+ print()
- for deptype in spack.alldeps:
+ for deptype in spack.all_deptypes:
deps = pkg.dependencies_of_type(deptype)
if deps:
print('%s Dependencies' % deptype.capitalize())
print(' ' + ', '.join('%s_' % d if d in pkg_names
else d for d in deps))
- print('')
+ print()
print('Description:')
print(pkg.format_doc(indent=2))
- print('')
+ print()
def list(parser, args):
@@ -178,5 +188,12 @@ def list(parser, args):
pkgs = set(spack.repo.all_package_names())
# Filter the set appropriately
sorted_packages = filter_by_name(pkgs, args)
+
+ # Filter by tags
+ if args.tags:
+ packages_with_tags = set(spack.repo.packages_with_tags(*args.tags))
+ sorted_packages = set(sorted_packages) & packages_with_tags
+ sorted_packages = sorted(sorted_packages)
+
# Print to stdout
formatters[args.format](sorted_packages)
diff --git a/lib/spack/spack/cmd/load.py b/lib/spack/spack/cmd/load.py
index 85190a5d0b..61c7003855 100644
--- a/lib/spack/spack/cmd/load.py
+++ b/lib/spack/spack/cmd/load.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import argparse
-import spack.modules
+from spack.cmd.common import print_module_placeholder_help
-description = "Add package to environment using modules."
+description = "add package to environment using `module load`"
+section = "environment"
+level = "short"
def setup_parser(subparser):
@@ -33,9 +35,9 @@ def setup_parser(subparser):
message with -h. """
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="Spec of package to load with modules. "
- "(If -, read specs from STDIN)")
+ help="spec of package to load with modules "
+ "(if -, read specs from STDIN)")
def load(parser, args):
- spack.modules.print_help()
+ print_module_placeholder_help()
diff --git a/lib/spack/spack/cmd/location.py b/lib/spack/spack/cmd/location.py
index 54f7185707..99ce4d4fc3 100644
--- a/lib/spack/spack/cmd/location.py
+++ b/lib/spack/spack/cmd/location.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,14 +22,17 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import argparse
+from __future__ import print_function
+import argparse
import llnl.util.tty as tty
import spack
import spack.cmd
-description = "Print out locations of various directories used by Spack"
+description = "print out locations of various directories used by Spack"
+section = "environment"
+level = "long"
def setup_parser(subparser):
@@ -38,48 +41,48 @@ def setup_parser(subparser):
directories.add_argument(
'-m', '--module-dir', action='store_true',
- help="Spack python module directory.")
+ help="spack python module directory")
directories.add_argument(
'-r', '--spack-root', action='store_true',
- help="Spack installation root.")
+ help="spack installation root")
directories.add_argument(
'-i', '--install-dir', action='store_true',
- help="Install prefix for spec (spec need not be installed).")
+ help="install prefix for spec (spec need not be installed)")
directories.add_argument(
'-p', '--package-dir', action='store_true',
- help="Directory enclosing a spec's package.py file.")
+ help="directory enclosing a spec's package.py file")
directories.add_argument(
'-P', '--packages', action='store_true',
- help="Top-level packages directory for Spack.")
+ help="top-level packages directory for Spack")
directories.add_argument(
'-s', '--stage-dir', action='store_true',
- help="Stage directory for a spec.")
+ help="stage directory for a spec")
directories.add_argument(
'-S', '--stages', action='store_true',
- help="Top level Stage directory.")
+ help="top level stage directory")
directories.add_argument(
'-b', '--build-dir', action='store_true',
- help="Checked out or expanded source directory for a spec "
- "(requires it to be staged first).")
+ help="checked out or expanded source directory for a spec "
+ "(requires it to be staged first)")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="spec of package to fetch directory for.")
+ help="spec of package to fetch directory for")
def location(parser, args):
if args.module_dir:
- print spack.module_path
+ print(spack.module_path)
elif args.spack_root:
- print spack.prefix
+ print(spack.prefix)
elif args.packages:
- print spack.repo.first_repo().root
+ print(spack.repo.first_repo().root)
elif args.stages:
- print spack.stage_path
+ print(spack.stage_path)
else:
specs = spack.cmd.parse_specs(args.spec)
@@ -91,14 +94,14 @@ def location(parser, args):
if args.install_dir:
# install_dir command matches against installed specs.
spec = spack.cmd.disambiguate_spec(specs[0])
- print spec.prefix
+ print(spec.prefix)
else:
spec = specs[0]
if args.package_dir:
# This one just needs the spec name.
- print spack.repo.dirname_for_package_name(spec.name)
+ print(spack.repo.dirname_for_package_name(spec.name))
else:
# These versions need concretized specs.
@@ -106,11 +109,11 @@ def location(parser, args):
pkg = spack.repo.get(spec)
if args.stage_dir:
- print pkg.stage.path
+ print(pkg.stage.path)
else: # args.build_dir is the default.
if not pkg.stage.source_path:
tty.die("Build directory does not exist yet. "
"Run this to create it:",
"spack stage " + " ".join(args.spec))
- print pkg.stage.source_path
+ print(pkg.stage.source_path)
diff --git a/lib/spack/spack/cmd/md5.py b/lib/spack/spack/cmd/md5.py
index 2ae279a41e..824e88373c 100644
--- a/lib/spack/spack/cmd/md5.py
+++ b/lib/spack/spack/cmd/md5.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,28 +25,32 @@
import argparse
import hashlib
import os
-from urlparse import urlparse
+from six.moves.urllib.parse import urlparse
import llnl.util.tty as tty
import spack.util.crypto
from spack.stage import Stage, FailedDownloadError
-description = "Calculate md5 checksums for files/urls."
+description = "calculate md5 checksums for files/urls"
+section = "packaging"
+level = "long"
def setup_parser(subparser):
setup_parser.parser = subparser
subparser.add_argument('files', nargs=argparse.REMAINDER,
- help="Files/urls to checksum.")
+ help="files/urls to checksum")
-def compute_md5_checksum(url):
+def compute_checksum(url, algo):
+ algo = getattr(hashlib, algo)
+
if not os.path.isfile(url):
with Stage(url) as stage:
stage.fetch()
- value = spack.util.crypto.checksum(hashlib.md5, stage.archive_file)
+ value = spack.util.crypto.checksum(algo, stage.archive_file)
else:
- value = spack.util.crypto.checksum(hashlib.md5, url)
+ value = spack.util.crypto.checksum(algo, url)
return value
@@ -59,7 +63,7 @@ def normalized(files):
yield value
-def md5(parser, args):
+def do_checksum(parser, args, algo):
if not args.files:
setup_parser.parser.print_help()
return 1
@@ -68,7 +72,7 @@ def md5(parser, args):
results = []
for url in urls:
try:
- checksum = compute_md5_checksum(url)
+ checksum = compute_checksum(url, algo)
results.append((checksum, url))
except FailedDownloadError as e:
tty.warn("Failed to fetch %s" % url)
@@ -77,8 +81,12 @@ def md5(parser, args):
tty.warn("Error when reading %s" % url)
tty.warn("%s" % e)
- # Dump the MD5s at last without interleaving them with downloads
+ # Dump the hashes last, without interleaving them with downloads
checksum = 'checksum' if len(results) == 1 else 'checksums'
- tty.msg("%d MD5 %s:" % (len(results), checksum))
+ tty.msg("%d %s %s:" % (len(results), algo, checksum))
for checksum, url in results:
print("{0} {1}".format(checksum, url))
+
+
+def md5(parser, args):
+ do_checksum(parser, args, 'md5')
diff --git a/lib/spack/spack/cmd/mirror.py b/lib/spack/spack/cmd/mirror.py
index 585faaf524..35d31adb2d 100644
--- a/lib/spack/spack/cmd/mirror.py
+++ b/lib/spack/spack/cmd/mirror.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,13 +37,15 @@ from spack.spec import Spec
from spack.error import SpackError
from spack.util.spack_yaml import syaml_dict
-description = "Manage mirrors."
+description = "manage mirrors"
+section = "config"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-n', '--no-checksum', action='store_true', dest='no_checksum',
- help="Do not check fetched packages against checksum")
+ help="do not check fetched packages against checksum")
sp = subparser.add_subparsers(
metavar='SUBCOMMAND', dest='mirror_command')
@@ -51,30 +53,30 @@ def setup_parser(subparser):
# Create
create_parser = sp.add_parser('create', help=mirror_create.__doc__)
create_parser.add_argument('-d', '--directory', default=None,
- help="Directory in which to create mirror.")
+ help="directory in which to create mirror")
create_parser.add_argument(
'specs', nargs=argparse.REMAINDER,
- help="Specs of packages to put in mirror")
+ help="specs of packages to put in mirror")
create_parser.add_argument(
- '-f', '--file', help="File with specs of packages to put in mirror.")
+ '-f', '--file', help="file with specs of packages to put in mirror")
create_parser.add_argument(
'-D', '--dependencies', action='store_true',
- help="Also fetch all dependencies")
+ help="also fetch all dependencies")
create_parser.add_argument(
'-o', '--one-version-per-spec', action='store_const',
const=1, default=0,
- help="Only fetch one 'preferred' version per spec, not all known.")
+ help="only fetch one 'preferred' version per spec, not all known")
scopes = spack.config.config_scopes
# Add
add_parser = sp.add_parser('add', help=mirror_add.__doc__)
- add_parser.add_argument('name', help="Mnemonic name for mirror.")
+ add_parser.add_argument('name', help="mnemonic name for mirror")
add_parser.add_argument(
- 'url', help="URL of mirror directory from 'spack mirror create'.")
+ 'url', help="url of mirror directory from 'spack mirror create'")
add_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
# Remove
remove_parser = sp.add_parser('remove', aliases=['rm'],
@@ -82,13 +84,13 @@ def setup_parser(subparser):
remove_parser.add_argument('name')
remove_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
# List
list_parser = sp.add_parser('list', help=mirror_list.__doc__)
list_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_list_scope,
- help="Configuration scope to read from.")
+ help="configuration scope to read from")
def mirror_add(args):
@@ -141,7 +143,7 @@ def mirror_list(args):
fmt = "%%-%ds%%s" % (max_len + 4)
for name in mirrors:
- print fmt % (name, mirrors[name])
+ print(fmt % (name, mirrors[name]))
def _read_specs_from_file(filename):
@@ -152,8 +154,8 @@ def _read_specs_from_file(filename):
s = Spec(string)
s.package
specs.append(s)
- except SpackError, e:
- tty.die("Parse error in %s, line %d:" % (args.file, i + 1),
+ except SpackError as e:
+ tty.die("Parse error in %s, line %d:" % (filename, i + 1),
">>> " + string, str(e))
return specs
@@ -180,7 +182,7 @@ def mirror_create(args):
new_specs = set()
for spec in specs:
spec.concretize()
- for s in spec.traverse(deptype_query=spack.alldeps):
+ for s in spec.traverse():
new_specs.add(s)
specs = list(new_specs)
@@ -211,7 +213,7 @@ def mirror_create(args):
" %-4d failed to fetch." % e)
if error:
tty.error("Failed downloads:")
- colify(s.format("$_$@") for s in error)
+ colify(s.cformat("$_$@") for s in error)
def mirror(parser, args):
diff --git a/lib/spack/spack/cmd/module.py b/lib/spack/spack/cmd/module.py
index b4ee561339..1ebead1f58 100644
--- a/lib/spack/spack/cmd/module.py
+++ b/lib/spack/spack/cmd/module.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,21 +27,23 @@ from __future__ import print_function
import collections
import os
import shutil
-import sys
+import spack.modules
-import llnl.util.filesystem as filesystem
-import llnl.util.tty as tty
import spack.cmd
-import spack.cmd.common.arguments as arguments
-from spack.modules import module_types
+from llnl.util import filesystem, tty
+from spack.cmd.common import arguments
-description = "Manipulate module files"
+description = "manipulate module files"
+section = "environment"
+level = "short"
-# Dictionary that will be populated with the list of sub-commands
-# Each sub-command must be callable and accept 3 arguments :
-# - mtype : the type of the module file
-# - specs : the list of specs to be processed
-# - args : namespace containing the parsed command line arguments
+
+#: Dictionary that will be populated with the list of sub-commands
+#: Each sub-command must be callable and accept 3 arguments:
+#:
+#: - mtype : the type of the module file
+#: - specs : the list of specs to be processed
+#: - args : namespace containing the parsed command line arguments
callbacks = {}
@@ -57,10 +59,10 @@ def setup_parser(subparser):
sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='subparser_name')
# spack module refresh
- refresh_parser = sp.add_parser('refresh', help='Regenerate module files')
+ refresh_parser = sp.add_parser('refresh', help='regenerate module files')
refresh_parser.add_argument(
'--delete-tree',
- help='Delete the module file tree before refresh',
+ help='delete the module file tree before refresh',
action='store_true'
)
arguments.add_common_arguments(
@@ -68,11 +70,11 @@ def setup_parser(subparser):
)
# spack module find
- find_parser = sp.add_parser('find', help='Find module files for packages')
+ find_parser = sp.add_parser('find', help='find module files for packages')
arguments.add_common_arguments(find_parser, ['constraint', 'module_type'])
# spack module rm
- rm_parser = sp.add_parser('rm', help='Remove module files')
+ rm_parser = sp.add_parser('rm', help='remove module files')
arguments.add_common_arguments(
rm_parser, ['constraint', 'module_type', 'yes_to_all']
)
@@ -80,36 +82,73 @@ def setup_parser(subparser):
# spack module loads
loads_parser = sp.add_parser(
'loads',
- help='Prompt the list of modules associated with a constraint'
+ help='prompt the list of modules associated with a constraint'
)
loads_parser.add_argument(
'--input-only', action='store_false', dest='shell',
- help='Generate input for module command (instead of a shell script)'
+ help='generate input for module command (instead of a shell script)'
)
loads_parser.add_argument(
'-p', '--prefix', dest='prefix', default='',
- help='Prepend to module names when issuing module load commands'
+ help='prepend to module names when issuing module load commands'
)
loads_parser.add_argument(
'-x', '--exclude', dest='exclude', action='append', default=[],
- help="Exclude package from output; may be specified multiple times"
+ help="exclude package from output; may be specified multiple times"
)
arguments.add_common_arguments(
loads_parser, ['constraint', 'module_type', 'recurse_dependencies']
)
-class MultipleMatches(Exception):
- pass
+class MultipleSpecsMatch(Exception):
+ """Raised when multiple specs match a constraint, in a context where
+ this is not allowed.
+ """
+
+
+class NoSpecMatches(Exception):
+ """Raised when no spec matches a constraint, in a context where
+ this is not allowed.
+ """
+
+class MultipleModuleTypes(Exception):
+ """Raised when multiple module types match a cli request, in a context
+ where this is not allowed.
+ """
-class NoMatch(Exception):
- pass
+
+def one_module_or_raise(module_types):
+ """Ensures exactly one module type has been selected, or raises the
+ appropriate exception.
+ """
+ # Ensure a single module type has been selected
+ if len(module_types) > 1:
+ raise MultipleModuleTypes()
+ return module_types[0]
+
+
+def one_spec_or_raise(specs):
+ """Ensures exactly one spec has been selected, or raises the appropriate
+ exception.
+ """
+ # Ensure a single spec matches the constraint
+ if len(specs) == 0:
+ raise NoSpecMatches()
+ if len(specs) > 1:
+ raise MultipleSpecsMatch()
+
+ # Get the spec and module type
+ return specs[0]
@subcommand('loads')
-def loads(mtype, specs, args):
+def loads(module_types, specs, args):
"""Prompt the list of modules associated with a list of specs"""
+
+ module_type = one_module_or_raise(module_types)
+
# Get a comprehensive list of specs
if args.recurse_dependencies:
specs_from_user_constraint = specs[:]
@@ -126,9 +165,11 @@ def loads(mtype, specs, args):
if not (item in seen or seen_add(item))]
)
- module_cls = module_types[mtype]
- modules = [(spec, module_cls(spec).use_name)
- for spec in specs if os.path.exists(module_cls(spec).file_name)]
+ module_cls = spack.modules.module_types[module_type]
+ modules = [
+ (spec, module_cls(spec).layout.use_name)
+ for spec in specs if os.path.exists(module_cls(spec).layout.filename)
+ ]
module_commands = {
'tcl': 'module load ',
@@ -137,7 +178,7 @@ def loads(mtype, specs, args):
}
d = {
- 'command': '' if not args.shell else module_commands[mtype],
+ 'command': '' if not args.shell else module_commands[module_type],
'prefix': args.prefix
}
@@ -152,98 +193,129 @@ def loads(mtype, specs, args):
@subcommand('find')
-def find(mtype, specs, args):
+def find(module_types, specs, args):
+ """Returns the module file "use" name if there's a single match. Raises
+ error messages otherwise.
"""
- Look at all installed packages and see if the spec provided
- matches any. If it does, check whether there is a module file
- of type <mtype> there, and print out the name that the user
- should type to use that package's module.
- """
- if len(specs) == 0:
- raise NoMatch()
- if len(specs) > 1:
- raise MultipleMatches()
+ spec = one_spec_or_raise(specs)
+ module_type = one_module_or_raise(module_types)
+
+ # Check if the module file is present
+ writer = spack.modules.module_types[module_type](spec)
+ if not os.path.isfile(writer.layout.filename):
+ msg = 'Even though {1} is installed, '
+ msg += 'no {0} module has been generated for it.'
+ tty.die(msg.format(module_type, spec))
- spec = specs.pop()
- mod = module_types[mtype](spec)
- if not os.path.isfile(mod.file_name):
- tty.die("No %s module is installed for %s" % (mtype, spec))
- print(mod.use_name)
+ # ... and if it is print its use name
+ print(writer.layout.use_name)
@subcommand('rm')
-def rm(mtype, specs, args):
- """Deletes module files associated with items in specs"""
- module_cls = module_types[mtype]
- specs_with_modules = [
- spec for spec in specs if os.path.exists(module_cls(spec).file_name)]
- modules = [module_cls(spec) for spec in specs_with_modules]
-
- if not modules:
- tty.msg('No module file matches your query')
- raise SystemExit(1)
-
- # Ask for confirmation
- if not args.yes_to_all:
- tty.msg(
- 'You are about to remove {0} module files the following specs:\n'
- .format(mtype))
- spack.cmd.display_specs(specs_with_modules, long=True)
- print('')
- spack.cmd.ask_for_confirmation('Do you want to proceed ? ')
+def rm(module_types, specs, args):
+ """Deletes the module files associated with every spec in specs, for every
+ module type in module types.
+ """
+ for module_type in module_types:
+
+ module_cls = spack.modules.module_types[module_type]
+ module_exist = lambda x: os.path.exists(module_cls(x).layout.filename)
+
+ specs_with_modules = [spec for spec in specs if module_exist(spec)]
+
+ modules = [module_cls(spec) for spec in specs_with_modules]
+
+ if not modules:
+ tty.die('No module file matches your query')
+
+ # Ask for confirmation
+ if not args.yes_to_all:
+ msg = 'You are about to remove {0} module files for:\n'
+ tty.msg(msg.format(module_type))
+ spack.cmd.display_specs(specs_with_modules, long=True)
+ print('')
+ answer = tty.get_yes_or_no('Do you want to proceed?')
+ if not answer:
+ tty.die('Will not remove any module files')
- # Remove the module files
- for s in modules:
- s.remove()
+ # Remove the module files
+ for s in modules:
+ s.remove()
@subcommand('refresh')
-def refresh(mtype, specs, args):
- """Regenerate module files for item in specs"""
+def refresh(module_types, specs, args):
+ """Regenerates the module files for every spec in specs and every module
+ type in module types.
+ """
+
# Prompt a message to the user about what is going to change
if not specs:
tty.msg('No package matches your query')
return
if not args.yes_to_all:
- tty.msg(
- 'You are about to regenerate {name} module files for:\n'
- .format(name=mtype))
+ msg = 'You are about to regenerate {types} module files for:\n'
+ types = ', '.join(module_types)
+ tty.msg(msg.format(types=types))
spack.cmd.display_specs(specs, long=True)
print('')
- spack.cmd.ask_for_confirmation('Do you want to proceed ? ')
-
- cls = module_types[mtype]
-
- # Detect name clashes
- writers = [cls(spec) for spec in specs
- if spack.repo.exists(spec.name)] # skip unknown packages.
- file2writer = collections.defaultdict(list)
- for item in writers:
- file2writer[item.file_name].append(item)
-
- if len(file2writer) != len(writers):
- message = 'Name clashes detected in module files:\n'
- for filename, writer_list in file2writer.items():
- if len(writer_list) > 1:
- message += '\nfile : {0}\n'.format(filename)
- for x in writer_list:
- message += 'spec : {0}\n'.format(x.spec.format(color=True))
- tty.error(message)
- tty.error('Operation aborted')
- raise SystemExit(1)
-
- # Proceed regenerating module files
- tty.msg('Regenerating {name} module files'.format(name=mtype))
- if os.path.isdir(cls.path) and args.delete_tree:
- shutil.rmtree(cls.path, ignore_errors=False)
- filesystem.mkdirp(cls.path)
- for x in writers:
- x.write(overwrite=True)
+ answer = tty.get_yes_or_no('Do you want to proceed?')
+ if not answer:
+ tty.die('Module file regeneration aborted.')
+
+ # Cycle over the module types and regenerate module files
+ for module_type in module_types:
+
+ cls = spack.modules.module_types[module_type]
+
+ writers = [
+ cls(spec) for spec in specs if spack.repo.exists(spec.name)
+ ] # skip unknown packages.
+
+ # Filter blacklisted packages early
+ writers = [x for x in writers if not x.conf.blacklisted]
+
+ # Detect name clashes in module files
+ file2writer = collections.defaultdict(list)
+ for item in writers:
+ file2writer[item.layout.filename].append(item)
+
+ if len(file2writer) != len(writers):
+ message = 'Name clashes detected in module files:\n'
+ for filename, writer_list in file2writer.items():
+ if len(writer_list) > 1:
+ message += '\nfile: {0}\n'.format(filename)
+ for x in writer_list:
+ message += 'spec: {0}\n'.format(x.spec.format())
+ tty.error(message)
+ tty.error('Operation aborted')
+ raise SystemExit(1)
+
+ if len(writers) == 0:
+ msg = 'Nothing to be done for {0} module files.'
+ tty.msg(msg.format(module_type))
+ continue
+
+ # If we arrived here we have at least one writer
+ module_type_root = writers[0].layout.dirname()
+ # Proceed regenerating module files
+ tty.msg('Regenerating {name} module files'.format(name=module_type))
+ if os.path.isdir(module_type_root) and args.delete_tree:
+ shutil.rmtree(module_type_root, ignore_errors=False)
+ filesystem.mkdirp(module_type_root)
+ for x in writers:
+ try:
+ x.write(overwrite=True)
+ except Exception as e:
+ msg = 'Could not write module file [{0}]'
+ tty.warn(msg.format(x.layout.filename))
+ tty.warn('\t--> {0} <--'.format(str(e)))
def module(parser, args):
+
# Qualifiers to be used when querying the db for specs
constraint_qualifiers = {
'refresh': {
@@ -252,19 +324,34 @@ def module(parser, args):
},
}
query_args = constraint_qualifiers.get(args.subparser_name, {})
+
+ # Get the specs that match the query from the DB
specs = args.specs(**query_args)
- module_type = args.module_type
- constraint = args.constraint
+
+ # Set the module types that have been selected
+ module_types = args.module_type
+ if module_types is None:
+ # If no selection has been made select all of them
+ module_types = ['tcl']
+
+ module_types = list(set(module_types))
+
try:
- callbacks[args.subparser_name](module_type, specs, args)
- except MultipleMatches:
- message = ('the constraint \'{query}\' matches multiple packages, '
- 'and this is not allowed in this context')
- tty.error(message.format(query=constraint))
+
+ callbacks[args.subparser_name](module_types, specs, args)
+
+ except MultipleSpecsMatch:
+ msg = "the constraint '{query}' matches multiple packages:\n"
for s in specs:
- sys.stderr.write(s.format(color=True) + '\n')
- raise SystemExit(1)
- except NoMatch:
- message = ('the constraint \'{query}\' match no package, '
- 'and this is not allowed in this context')
- tty.die(message.format(query=constraint))
+ msg += '\t' + s.cformat() + '\n'
+ tty.error(msg.format(query=args.constraint))
+ tty.die('In this context exactly **one** match is needed: please specify your constraints better.') # NOQA: ignore=E501
+
+ except NoSpecMatches:
+ msg = "the constraint '{query}' matches no package."
+ tty.error(msg.format(query=args.constraint))
+ tty.die('In this context exactly **one** match is needed: please specify your constraints better.') # NOQA: ignore=E501
+
+ except MultipleModuleTypes:
+ msg = "this command needs exactly **one** module type active."
+ tty.die(msg)
diff --git a/lib/spack/spack/cmd/patch.py b/lib/spack/spack/cmd/patch.py
index 9c72da40b5..b19acfcde4 100644
--- a/lib/spack/spack/cmd/patch.py
+++ b/lib/spack/spack/cmd/patch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,13 +29,15 @@ import spack.cmd
import spack
-description = "Patch expanded archive sources in preparation for install"
+description = "patch expanded archive sources in preparation for install"
+section = "build"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-n', '--no-checksum', action='store_true', dest='no_checksum',
- help="Do not check downloaded packages against checksum")
+ help="do not check downloaded packages against checksum")
subparser.add_argument(
'packages', nargs=argparse.REMAINDER,
help="specs of packages to stage")
diff --git a/lib/spack/spack/cmd/pkg.py b/lib/spack/spack/cmd/pkg.py
index 7791b93cf5..9591b58acd 100644
--- a/lib/spack/spack/cmd/pkg.py
+++ b/lib/spack/spack/cmd/pkg.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,16 +22,22 @@
# 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 __future__ import print_function
+
import os
import argparse
import llnl.util.tty as tty
from llnl.util.tty.colify import colify
+from llnl.util.filesystem import working_dir
import spack
-from spack.util.executable import *
+from spack.util.executable import which
+from spack.cmd import spack_is_git_repo
-description = "Query packages associated with particular git revisions."
+description = "query packages associated with particular git revisions"
+section = "developer"
+level = "long"
def setup_parser(subparser):
@@ -40,54 +46,45 @@ def setup_parser(subparser):
add_parser = sp.add_parser('add', help=pkg_add.__doc__)
add_parser.add_argument('packages', nargs=argparse.REMAINDER,
- help="Names of packages to add to git repo.")
+ help="names of packages to add to git repo")
list_parser = sp.add_parser('list', help=pkg_list.__doc__)
list_parser.add_argument('rev', default='HEAD', nargs='?',
- help="Revision to list packages for.")
+ help="revision to list packages for")
diff_parser = sp.add_parser('diff', help=pkg_diff.__doc__)
diff_parser.add_argument(
'rev1', nargs='?', default='HEAD^',
- help="Revision to compare against.")
+ help="revision to compare against")
diff_parser.add_argument(
'rev2', nargs='?', default='HEAD',
- help="Revision to compare to rev1 (default is HEAD).")
+ help="revision to compare to rev1 (default is HEAD)")
add_parser = sp.add_parser('added', help=pkg_added.__doc__)
add_parser.add_argument(
'rev1', nargs='?', default='HEAD^',
- help="Revision to compare against.")
+ help="revision to compare against")
add_parser.add_argument(
'rev2', nargs='?', default='HEAD',
- help="Revision to compare to rev1 (default is HEAD).")
+ help="revision to compare to rev1 (default is HEAD)")
rm_parser = sp.add_parser('removed', help=pkg_removed.__doc__)
rm_parser.add_argument(
'rev1', nargs='?', default='HEAD^',
- help="Revision to compare against.")
+ help="revision to compare against")
rm_parser.add_argument(
'rev2', nargs='?', default='HEAD',
- help="Revision to compare to rev1 (default is HEAD).")
-
-
-def get_git():
- # cd to spack prefix to do git operations
- os.chdir(spack.prefix)
-
- # If this is a non-git version of spack, give up.
- if not os.path.isdir('.git'):
- tty.die("No git repo in %s. Can't use 'spack pkg'" % spack.prefix)
-
- return which("git", required=True)
+ help="revision to compare to rev1 (default is HEAD)")
def list_packages(rev):
- git = get_git()
pkgpath = os.path.join(spack.packages_path, 'packages')
relpath = pkgpath[len(spack.prefix + os.path.sep):] + os.path.sep
- output = git('ls-tree', '--full-tree', '--name-only', rev, relpath,
- output=str)
+
+ git = which('git', required=True)
+ with working_dir(spack.prefix):
+ output = git('ls-tree', '--full-tree', '--name-only', rev, relpath,
+ output=str)
return sorted(line[len(relpath):] for line in output.split('\n') if line)
@@ -98,8 +95,9 @@ def pkg_add(args):
tty.die("No such package: %s. Path does not exist:" %
pkg_name, filename)
- git = get_git()
- git('-C', spack.packages_path, 'add', filename)
+ git = which('git', required=True)
+ with working_dir(spack.prefix):
+ git('-C', spack.packages_path, 'add', filename)
def pkg_list(args):
@@ -118,13 +116,13 @@ def pkg_diff(args):
u1, u2 = diff_packages(args.rev1, args.rev2)
if u1:
- print "%s:" % args.rev1
+ print("%s:" % args.rev1)
colify(sorted(u1), indent=4)
if u1:
- print
+ print()
if u2:
- print "%s:" % args.rev2
+ print("%s:" % args.rev2)
colify(sorted(u2), indent=4)
@@ -143,6 +141,9 @@ def pkg_added(args):
def pkg(parser, args):
+ if not spack_is_git_repo():
+ tty.die("This spack is not a git clone. Can't use 'spack pkg'")
+
action = {'add': pkg_add,
'diff': pkg_diff,
'list': pkg_list,
diff --git a/lib/spack/spack/cmd/providers.py b/lib/spack/spack/cmd/providers.py
index 0f4a97cc4a..de45e20ec5 100644
--- a/lib/spack/spack/cmd/providers.py
+++ b/lib/spack/spack/cmd/providers.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,13 +29,15 @@ from llnl.util.tty.colify import colify
import spack
import spack.cmd
-description = "List packages that provide a particular virtual package"
+description = "list packages that provide a particular virtual package"
+section = "basic"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'vpkg_spec', metavar='VPACKAGE_SPEC', nargs=argparse.REMAINDER,
- help='Find packages that provide this virtual package')
+ help='find packages that provide this virtual package')
def providers(parser, args):
diff --git a/lib/spack/spack/cmd/purge.py b/lib/spack/spack/cmd/purge.py
deleted file mode 100644
index 66cfc2af29..0000000000
--- a/lib/spack/spack/cmd/purge.py
+++ /dev/null
@@ -1,58 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-import spack
-import spack.stage as stage
-
-description = "Remove temporary build files and/or downloaded archives"
-
-
-def setup_parser(subparser):
- subparser.add_argument(
- '-s', '--stage', action='store_true', default=True,
- help="Remove all temporary build stages (default).")
- subparser.add_argument(
- '-d', '--downloads', action='store_true',
- help="Remove cached downloads.")
- subparser.add_argument(
- '-m', '--misc-cache', action='store_true',
- help="Remove long-lived caches, like the virtual package index.")
- subparser.add_argument(
- '-a', '--all', action='store_true',
- help="Remove all of the above.")
-
-
-def purge(parser, args):
- # Special case: no flags.
- if not any((args.stage, args.downloads, args.misc_cache, args.all)):
- stage.purge()
- return
-
- # handle other flags with fall through.
- if args.stage or args.all:
- stage.purge()
- if args.downloads or args.all:
- spack.fetch_cache.destroy()
- if args.misc_cache or args.all:
- spack.misc_cache.destroy()
diff --git a/lib/spack/spack/cmd/doc.py b/lib/spack/spack/cmd/pydoc.py
index 291b17216f..093b16f66a 100644
--- a/lib/spack/spack/cmd/doc.py
+++ b/lib/spack/spack/cmd/pydoc.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,12 +23,14 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-description = "Run pydoc from within spack."
+description = "run pydoc from within spack"
+section = "developer"
+level = "long"
def setup_parser(subparser):
- subparser.add_argument('entity', help="Run pydoc help on entity")
+ subparser.add_argument('entity', help="run pydoc help on entity")
-def doc(parser, args):
+def pydoc(parser, args):
help(args.entity)
diff --git a/lib/spack/spack/cmd/python.py b/lib/spack/spack/cmd/python.py
index 12727cb599..8bdb796efa 100644
--- a/lib/spack/spack/cmd/python.py
+++ b/lib/spack/spack/cmd/python.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,15 +31,17 @@ import platform
import spack
+description = "launch an interpreter as spack would launch a command"
+section = "developer"
+level = "long"
+
+
def setup_parser(subparser):
subparser.add_argument(
- '-c', dest='python_command', help='Command to execute.')
+ '-c', dest='python_command', help='command to execute')
subparser.add_argument(
'python_args', nargs=argparse.REMAINDER,
- help="File to run plus arguments.")
-
-
-description = "Launch an interpreter as spack would launch a command"
+ help="file to run plus arguments")
def python(parser, args):
@@ -62,6 +64,9 @@ def python(parser, args):
with open(python_args[0]) as file:
console.runsource(file.read(), python_args[0], 'exec')
else:
+ # Provides readline support, allowing user to use arrow keys
+ console.push('import readline')
+
console.interact("Spack version %s\nPython %s, %s %s"""
% (spack.spack_version, platform.python_version(),
platform.system(), platform.machine()))
diff --git a/lib/spack/spack/cmd/reindex.py b/lib/spack/spack/cmd/reindex.py
index 7dddda2ffb..6babec60d5 100644
--- a/lib/spack/spack/cmd/reindex.py
+++ b/lib/spack/spack/cmd/reindex.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,7 +24,10 @@
##############################################################################
import spack
import spack.store
-description = "Rebuild Spack's package database."
+description = "rebuild Spack's package database"
+
+section = "admin"
+level = "long"
def reindex(parser, args):
diff --git a/lib/spack/spack/cmd/repo.py b/lib/spack/spack/cmd/repo.py
index 79df63ce8d..0b5ced1642 100644
--- a/lib/spack/spack/cmd/repo.py
+++ b/lib/spack/spack/cmd/repo.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,15 +22,19 @@
# 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 __future__ import print_function
+
import os
import llnl.util.tty as tty
import spack.spec
import spack.config
-from spack.repository import *
+from spack.repository import Repo, create_repo, canonicalize_path, RepoError
-description = "Manage package source repositories."
+description = "manage package source repositories"
+section = "config"
+level = "long"
def setup_parser(subparser):
@@ -40,34 +44,34 @@ def setup_parser(subparser):
# Create
create_parser = sp.add_parser('create', help=repo_create.__doc__)
create_parser.add_argument(
- 'directory', help="Directory to create the repo in.")
+ 'directory', help="directory to create the repo in")
create_parser.add_argument(
- 'namespace', help="Namespace to identify packages in the repository. "
- "Defaults to the directory name.", nargs='?')
+ 'namespace', help="namespace to identify packages in the repository. "
+ "defaults to the directory name", nargs='?')
# List
list_parser = sp.add_parser('list', help=repo_list.__doc__)
list_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_list_scope,
- help="Configuration scope to read from.")
+ help="configuration scope to read from")
# Add
add_parser = sp.add_parser('add', help=repo_add.__doc__)
add_parser.add_argument(
- 'path', help="Path to a Spack package repository directory.")
+ 'path', help="path to a Spack package repository directory")
add_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
# Remove
remove_parser = sp.add_parser(
'remove', help=repo_remove.__doc__, aliases=['rm'])
remove_parser.add_argument(
'path_or_namespace',
- help="Path or namespace of a Spack package repository.")
+ help="path or namespace of a Spack package repository")
remove_parser.add_argument(
'--scope', choices=scopes, default=spack.cmd.default_modify_scope,
- help="Configuration scope to modify.")
+ help="configuration scope to modify")
def repo_create(args):
@@ -161,7 +165,7 @@ def repo_list(args):
max_ns_len = max(len(r.namespace) for r in repos)
for repo in repos:
fmt = "%%-%ds%%s" % (max_ns_len + 4)
- print fmt % (repo.namespace, repo.root)
+ print(fmt % (repo.namespace, repo.root))
def repo(parser, args):
diff --git a/lib/spack/spack/cmd/restage.py b/lib/spack/spack/cmd/restage.py
index 969afe09bd..992aa40951 100644
--- a/lib/spack/spack/cmd/restage.py
+++ b/lib/spack/spack/cmd/restage.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,9 @@ import llnl.util.tty as tty
import spack
import spack.cmd
-description = "Revert checked out package source code."
+description = "revert checked out package source code"
+section = "build"
+level = "long"
def setup_parser(subparser):
diff --git a/lib/spack/spack/cmd/setup.py b/lib/spack/spack/cmd/setup.py
index 5d8aaefa72..01b40dda80 100644
--- a/lib/spack/spack/cmd/setup.py
+++ b/lib/spack/spack/cmd/setup.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,19 +38,21 @@ from llnl.util.filesystem import set_executable
from spack import which
from spack.stage import DIYStage
-description = "Create a configuration script and module, but don't build."
+description = "create a configuration script and module, but don't build"
+section = "developer"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-i', '--ignore-dependencies', action='store_true', dest='ignore_deps',
- help="Do not try to install dependencies of requested packages.")
+ help="do not try to install dependencies of requested packages")
subparser.add_argument(
'-v', '--verbose', action='store_true', dest='verbose',
- help="Display verbose build output while installing.")
+ help="display verbose build output while installing")
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help="specs to use for install. Must contain package AND version.")
+ help="specs to use for install. must contain package AND version")
cd_group = subparser.add_mutually_exclusive_group()
arguments.add_common_arguments(cd_group, ['clean', 'dirty'])
@@ -63,9 +65,9 @@ def spack_transitive_include_path():
)
-def write_spconfig(package):
+def write_spconfig(package, dirty):
# Set-up the environment
- spack.build_environment.setup_package(package)
+ spack.build_environment.setup_package(package, dirty)
cmd = [str(which('cmake'))] + package.std_cmake_args + package.cmake_args()
@@ -171,7 +173,8 @@ def setup(self, args):
tty.msg(
'Generating spconfig.py [{0}]'.format(package.spec.cshort_spec)
)
- write_spconfig(package)
+ dirty = args.dirty
+ write_spconfig(package, dirty)
# Install this package to register it in the DB and permit
# module file regeneration
inst_args = copy.deepcopy(args)
diff --git a/lib/spack/spack/cmd/sha256.py b/lib/spack/spack/cmd/sha256.py
new file mode 100644
index 0000000000..9b9b962e46
--- /dev/null
+++ b/lib/spack/spack/cmd/sha256.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import argparse
+from spack.cmd.md5 import do_checksum
+
+description = "calculate sha256 checksums for files/urls"
+section = "packaging"
+level = "long"
+
+
+def setup_parser(subparser):
+ setup_parser.parser = subparser
+ subparser.add_argument('files', nargs=argparse.REMAINDER,
+ help="files/urls to checksum")
+
+
+def sha256(parser, args):
+ do_checksum(parser, args, 'sha256')
diff --git a/lib/spack/spack/cmd/spec.py b/lib/spack/spack/cmd/spec.py
index 4ecd4d6e54..722987c35e 100644
--- a/lib/spack/spack/cmd/spec.py
+++ b/lib/spack/spack/cmd/spec.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,43 +22,45 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import argparse
+from __future__ import print_function
+import argparse
import spack
import spack.cmd
import spack.cmd.common.arguments as arguments
-description = "print out abstract and concrete versions of a spec."
+description = "show what would be installed, given a spec"
+section = "build"
+level = "short"
def setup_parser(subparser):
arguments.add_common_arguments(subparser, ['long', 'very_long'])
subparser.add_argument(
'-y', '--yaml', action='store_true', default=False,
- help='Print concrete spec as YAML.')
+ help='print concrete spec as YAML')
subparser.add_argument(
'-c', '--cover', action='store',
default='nodes', choices=['nodes', 'edges', 'paths'],
- help='How extensively to traverse the DAG. (default: nodes).')
+ help='how extensively to traverse the DAG (default: nodes)')
subparser.add_argument(
'-N', '--namespaces', action='store_true', default=False,
- help='Show fully qualified package names.')
+ help='show fully qualified package names')
subparser.add_argument(
'-I', '--install-status', action='store_true', default=False,
- help='Show install status of packages. Packages can be: '
+ help='show install status of packages. packages can be: '
'installed [+], missing and needed by an installed package [-], '
- 'or not installed (no annotation).')
+ 'or not installed (no annotation)')
subparser.add_argument(
'-t', '--types', action='store_true', default=False,
- help='Show dependency types.')
+ help='show dependency types')
subparser.add_argument(
'specs', nargs=argparse.REMAINDER, help="specs of packages")
def spec(parser, args):
name_fmt = '$.' if args.namespaces else '$_'
- kwargs = {'color': True,
- 'cover': args.cover,
+ kwargs = {'cover': args.cover,
'format': name_fmt + '$@$%@+$+$=',
'hashes': args.long or args.very_long,
'hashlen': None if args.very_long else 7,
@@ -68,21 +70,22 @@ def spec(parser, args):
for spec in spack.cmd.parse_specs(args.specs):
# With -y, just print YAML to output.
if args.yaml:
- spec.concretize()
- print spec.to_yaml()
+ if spec.name in spack.repo:
+ spec.concretize()
+ print(spec.to_yaml())
continue
# Print some diagnostic info by default.
- print "Input spec"
- print "--------------------------------"
- print spec.tree(**kwargs)
+ print("Input spec")
+ print("--------------------------------")
+ print(spec.tree(**kwargs))
- print "Normalized"
- print "--------------------------------"
+ print("Normalized")
+ print("--------------------------------")
spec.normalize()
- print spec.tree(**kwargs)
+ print(spec.tree(**kwargs))
- print "Concretized"
- print "--------------------------------"
+ print("Concretized")
+ print("--------------------------------")
spec.concretize()
- print spec.tree(**kwargs)
+ print(spec.tree(**kwargs))
diff --git a/lib/spack/spack/cmd/stage.py b/lib/spack/spack/cmd/stage.py
index bfc2e5f456..3456e9290e 100644
--- a/lib/spack/spack/cmd/stage.py
+++ b/lib/spack/spack/cmd/stage.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,16 +28,18 @@ import llnl.util.tty as tty
import spack
import spack.cmd
-description = "Expand downloaded archive in preparation for install"
+description = "expand downloaded archive in preparation for install"
+section = "build"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-n', '--no-checksum', action='store_true', dest='no_checksum',
- help="Do not check downloaded packages against checksum")
+ help="do not check downloaded packages against checksum")
subparser.add_argument(
'-p', '--path', dest='path',
- help="Path to stage package, does not add to spack tree")
+ help="path to stage package, does not add to spack tree")
subparser.add_argument(
'specs', nargs=argparse.REMAINDER, help="specs of packages to stage")
diff --git a/lib/spack/spack/cmd/test.py b/lib/spack/spack/cmd/test.py
index 9d92037bb6..d25a851237 100644
--- a/lib/spack/spack/cmd/test.py
+++ b/lib/spack/spack/cmd/test.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,36 +22,40 @@
# 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 __future__ import print_function
+
import sys
import os
import re
import argparse
import pytest
-from StringIO import StringIO
+from six import StringIO
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir
from llnl.util.tty.colify import colify
import spack
-description = "A thin wrapper around the pytest command."
+description = "run spack's unit tests"
+section = "developer"
+level = "long"
def setup_parser(subparser):
subparser.add_argument(
'-H', '--pytest-help', action='store_true', default=False,
- help="print full pytest help message, showing advanced options.")
+ help="print full pytest help message, showing advanced options")
list_group = subparser.add_mutually_exclusive_group()
list_group.add_argument(
'-l', '--list', action='store_true', default=False,
- help="list basic test names.")
+ help="list basic test names")
list_group.add_argument(
'-L', '--long-list', action='store_true', default=False,
- help="list the entire hierarchy of tests.")
+ help="list the entire hierarchy of tests")
subparser.add_argument(
'tests', nargs=argparse.REMAINDER,
- help="list of tests to run (will be passed to pytest -k).")
+ help="list of tests to run (will be passed to pytest -k)")
def do_list(args, unknown_args):
@@ -79,7 +83,7 @@ def do_list(args, unknown_args):
output_lines.append(
os.path.basename(name).replace('.py', ''))
else:
- print indent + name
+ print(indent + name)
if args.list:
colify(output_lines)
@@ -92,7 +96,7 @@ def test(parser, args, unknown_args):
pytest.main(['-h'])
return
- # pytest.ini lives in the root of the sapck repository.
+ # pytest.ini lives in the root of the spack repository.
with working_dir(spack.prefix):
# --list and --long-list print the test output better.
if args.list or args.long_list:
diff --git a/lib/spack/spack/cmd/uninstall.py b/lib/spack/spack/cmd/uninstall.py
index 0fc22ce538..0cb79340eb 100644
--- a/lib/spack/spack/cmd/uninstall.py
+++ b/lib/spack/spack/cmd/uninstall.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,17 +26,20 @@ from __future__ import print_function
import argparse
-import llnl.util.tty as tty
import spack
import spack.cmd
import spack.store
import spack.repository
-description = "Remove an installed package"
+from llnl.util import tty
+
+description = "remove installed packages"
+section = "build"
+level = "short"
error_message = """You can either:
- a) Use a more specific spec, or
- b) use spack uninstall -a to uninstall ALL matching specs.
+ a) use a more specific spec, or
+ b) use `spack uninstall --all` to uninstall ALL matching specs.
"""
# Arguments for display_specs when we find ambiguity
@@ -50,24 +53,24 @@ display_args = {
def setup_parser(subparser):
subparser.add_argument(
'-f', '--force', action='store_true', dest='force',
- help="Remove regardless of whether other packages depend on this one.")
+ help="remove regardless of whether other packages depend on this one")
subparser.add_argument(
'-a', '--all', action='store_true', dest='all',
- help="USE CAREFULLY. Remove ALL installed packages that match each "
+ help="USE CAREFULLY. remove ALL installed packages that match each "
"supplied spec. i.e., if you say uninstall `libelf`,"
- " ALL versions of `libelf` are uninstalled. If no spec is "
- "supplied all installed software will be uninstalled. This "
- "is both useful and dangerous, like rm -r.")
+ " ALL versions of `libelf` are uninstalled. if no spec is "
+ "supplied all installed software will be uninstalled. this "
+ "is both useful and dangerous, like rm -r")
subparser.add_argument(
- '-d', '--dependents', action='store_true', dest='dependents',
- help='Also uninstall any packages that depend on the ones given '
- 'via command line.')
+ '-R', '--dependents', action='store_true', dest='dependents',
+ help='also uninstall any packages that depend on the ones given '
+ 'via command line')
subparser.add_argument(
'-y', '--yes-to-all', action='store_true', dest='yes_to_all',
- help='Assume "yes" is the answer to every confirmation requested')
+ help='assume "yes" is the answer to every confirmation requested')
subparser.add_argument(
'packages',
@@ -75,9 +78,9 @@ def setup_parser(subparser):
help="specs of packages to uninstall")
-def concretize_specs(specs, allow_multiple_matches=False, force=False):
- """Returns a list of specs matching the non necessarily
- concretized specs given from cli
+def find_matching_specs(specs, allow_multiple_matches=False, force=False):
+ """Returns a list of specs matching the not necessarily
+ concretized specs given from cli
Args:
specs: list of specs to be matched against installed packages
@@ -94,7 +97,7 @@ def concretize_specs(specs, allow_multiple_matches=False, force=False):
# For each spec provided, make sure it refers to only one package.
# Fail and ask user to be unambiguous if it doesn't
if not allow_multiple_matches and len(matching) > 1:
- tty.error("%s matches multiple packages:" % spec)
+ tty.error('{0} matches multiple packages:'.format(spec))
print()
spack.cmd.display_specs(matching, **display_args)
print()
@@ -102,7 +105,8 @@ def concretize_specs(specs, allow_multiple_matches=False, force=False):
# No installed package matches the query
if len(matching) == 0 and spec is not any:
- tty.error("%s does not match any installed packages." % spec)
+ tty.error('{0} does not match any installed packages.'.format(
+ spec))
has_errors = True
specs_from_cli.extend(matching)
@@ -124,8 +128,8 @@ def installed_dependents(specs):
"""
dependents = {}
for item in specs:
- lst = [x for x in spack.store.db.installed_dependents(item)
- if x not in specs]
+ installed = spack.store.db.installed_relatives(item, 'parents', True)
+ lst = [x for x in installed if x not in specs]
if lst:
lst = list(set(lst))
dependents[item] = lst
@@ -145,15 +149,17 @@ def do_uninstall(specs, force):
try:
# should work if package is known to spack
packages.append(item.package)
- except spack.repository.UnknownPackageError:
+ except spack.repository.UnknownEntityError:
# The package.py file has gone away -- but still
# want to uninstall.
- spack.Package(item).do_uninstall(force=True)
+ spack.Package.uninstall_by_spec(item, force=True)
# Sort packages to be uninstalled by the number of installed dependents
# This ensures we do things in the right order
def num_installed_deps(pkg):
- return len(spack.store.db.installed_dependents(pkg.spec))
+ dependents = spack.store.db.installed_relatives(
+ pkg.spec, 'parents', True)
+ return len(dependents)
packages.sort(key=num_installed_deps)
for item in packages:
@@ -167,7 +173,7 @@ def get_uninstall_list(args):
# Gets the list of installed specs that match the ones give via cli
# takes care of '-a' is given in the cli
- uninstall_list = concretize_specs(specs, args.all, args.force)
+ uninstall_list = find_matching_specs(specs, args.all, args.force)
# Takes care of '-d'
dependent_list = installed_dependents(uninstall_list)
@@ -176,10 +182,9 @@ def get_uninstall_list(args):
has_error = False
if dependent_list and not args.dependents and not args.force:
for spec, lst in dependent_list.items():
- tty.error("Will not uninstall %s" %
- spec.format("$_$@$%@$#", color=True))
+ tty.error("Will not uninstall %s" % spec.cformat("$_$@$%@$/"))
print('')
- print("The following packages depend on it:")
+ print('The following packages depend on it:')
spack.cmd.display_specs(lst, **display_args)
print('')
has_error = True
@@ -188,28 +193,29 @@ def get_uninstall_list(args):
uninstall_list.extend(lst)
uninstall_list = list(set(uninstall_list))
if has_error:
- tty.die('You can use spack uninstall --dependents '
- 'to uninstall these dependencies as well')
+ tty.die('Use `spack uninstall --dependents` '
+ 'to uninstall these dependencies as well.')
return uninstall_list
def uninstall(parser, args):
if not args.packages and not args.all:
- tty.die("uninstall requires at least one package argument.")
+ tty.die('uninstall requires at least one package argument.',
+ ' Use `spack uninstall --all` to uninstall ALL packages.')
uninstall_list = get_uninstall_list(args)
if not uninstall_list:
- tty.msg("There are no package to uninstall.")
+ tty.warn('There are no package to uninstall.')
return
if not args.yes_to_all:
- tty.msg("The following packages will be uninstalled : ")
- print('')
+ tty.msg('The following packages will be uninstalled:\n')
spack.cmd.display_specs(uninstall_list, **display_args)
- print('')
- spack.cmd.ask_for_confirmation('Do you want to proceed ? ')
+ answer = tty.get_yes_or_no('Do you want to proceed?', default=False)
+ if not answer:
+ tty.die('Will not uninstall any packages.')
# Uninstall everything on the list
do_uninstall(uninstall_list, args.force)
diff --git a/lib/spack/spack/cmd/unload.py b/lib/spack/spack/cmd/unload.py
index b52bedb7b4..9820ff52d3 100644
--- a/lib/spack/spack/cmd/unload.py
+++ b/lib/spack/spack/cmd/unload.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import argparse
-import spack.modules
+from spack.cmd.common import print_module_placeholder_help
-description = "Remove package from environment using module."
+description = "remove package from environment using `module unload`"
+section = "environment"
+level = "short"
def setup_parser(subparser):
@@ -33,8 +35,8 @@ def setup_parser(subparser):
message with -h. """
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help='Spec of package to unload with modules.')
+ help='spec of package to unload with modules')
def unload(parser, args):
- spack.modules.print_help()
+ print_module_placeholder_help()
diff --git a/lib/spack/spack/cmd/unuse.py b/lib/spack/spack/cmd/unuse.py
index 6403cf6162..14ca4227d2 100644
--- a/lib/spack/spack/cmd/unuse.py
+++ b/lib/spack/spack/cmd/unuse.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import argparse
-import spack.modules
+from spack.cmd.common import print_module_placeholder_help
-description = "Remove package from environment using dotkit."
+description = "remove package from environment using dotkit"
+section = "environment"
+level = "long"
def setup_parser(subparser):
@@ -33,8 +35,8 @@ def setup_parser(subparser):
message with -h. """
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help='Spec of package to unuse with dotkit.')
+ help='spec of package to unuse with dotkit')
def unuse(parser, args):
- spack.modules.print_help()
+ print_module_placeholder_help()
diff --git a/lib/spack/spack/cmd/url.py b/lib/spack/spack/cmd/url.py
new file mode 100644
index 0000000000..a445810b69
--- /dev/null
+++ b/lib/spack/spack/cmd/url.py
@@ -0,0 +1,389 @@
+##############################################################################
+# 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/spack/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 __future__ import division, print_function
+
+from collections import defaultdict
+
+import spack
+
+from llnl.util import tty
+from spack.url import parse_version_offset, parse_name_offset
+from spack.url import parse_name, parse_version, color_url
+from spack.url import substitute_version, substitution_offsets
+from spack.url import UndetectableNameError, UndetectableVersionError
+from spack.url import UrlParseError
+from spack.util.web import find_versions_of_archive
+from spack.util.naming import simplify_name
+
+description = "debugging tool for url parsing"
+section = "developer"
+level = "long"
+
+
+def setup_parser(subparser):
+ sp = subparser.add_subparsers(metavar='SUBCOMMAND', dest='subcommand')
+
+ # Parse
+ parse_parser = sp.add_parser('parse', help='attempt to parse a url')
+
+ parse_parser.add_argument(
+ 'url',
+ help='url to parse')
+ parse_parser.add_argument(
+ '-s', '--spider', action='store_true',
+ help='spider the source page for versions')
+
+ # List
+ list_parser = sp.add_parser('list', help='list urls in all packages')
+
+ list_parser.add_argument(
+ '-c', '--color', action='store_true',
+ help='color the parsed version and name in the urls shown '
+ '(versions will be cyan, name red)')
+ list_parser.add_argument(
+ '-e', '--extrapolation', action='store_true',
+ help='color the versions used for extrapolation as well '
+ '(additional versions will be green, names magenta)')
+
+ excl_args = list_parser.add_mutually_exclusive_group()
+
+ excl_args.add_argument(
+ '-n', '--incorrect-name', action='store_true',
+ help='only list urls for which the name was incorrectly parsed')
+ excl_args.add_argument(
+ '-N', '--correct-name', action='store_true',
+ help='only list urls for which the name was correctly parsed')
+ excl_args.add_argument(
+ '-v', '--incorrect-version', action='store_true',
+ help='only list urls for which the version was incorrectly parsed')
+ excl_args.add_argument(
+ '-V', '--correct-version', action='store_true',
+ help='only list urls for which the version was correctly parsed')
+
+ # Summary
+ sp.add_parser(
+ 'summary',
+ help='print a summary of how well we are parsing package urls')
+
+
+def url(parser, args):
+ action = {
+ 'parse': url_parse,
+ 'list': url_list,
+ 'summary': url_summary
+ }
+
+ action[args.subcommand](args)
+
+
+def url_parse(args):
+ url = args.url
+
+ tty.msg('Parsing URL: {0}'.format(url))
+ print()
+
+ ver, vs, vl, vi, vregex = parse_version_offset(url)
+ tty.msg('Matched version regex {0:>2}: r{1!r}'.format(vi, vregex))
+
+ name, ns, nl, ni, nregex = parse_name_offset(url, ver)
+ tty.msg('Matched name regex {0:>2}: r{1!r}'.format(ni, nregex))
+
+ print()
+ tty.msg('Detected:')
+ try:
+ print_name_and_version(url)
+ except UrlParseError as e:
+ tty.error(str(e))
+
+ print(' name: {0}'.format(name))
+ print(' version: {0}'.format(ver))
+ print()
+
+ tty.msg('Substituting version 9.9.9b:')
+ newurl = substitute_version(url, '9.9.9b')
+ print_name_and_version(newurl)
+
+ if args.spider:
+ print()
+ tty.msg('Spidering for versions:')
+ versions = find_versions_of_archive(url)
+
+ if not versions:
+ print(' Found no versions for {0}'.format(name))
+ return
+
+ max_len = max(len(str(v)) for v in versions)
+
+ for v in sorted(versions):
+ print('{0:{1}} {2}'.format(v, max_len, versions[v]))
+
+
+def url_list(args):
+ urls = set()
+
+ # Gather set of URLs from all packages
+ for pkg in spack.repo.all_packages():
+ url = getattr(pkg.__class__, 'url', None)
+ urls = url_list_parsing(args, urls, url, pkg)
+
+ for params in pkg.versions.values():
+ url = params.get('url', None)
+ urls = url_list_parsing(args, urls, url, pkg)
+
+ # Print URLs
+ for url in sorted(urls):
+ if args.color or args.extrapolation:
+ print(color_url(url, subs=args.extrapolation, errors=True))
+ else:
+ print(url)
+
+ # Return the number of URLs that were printed, only for testing purposes
+ return len(urls)
+
+
+def url_summary(args):
+ # Collect statistics on how many URLs were correctly parsed
+ total_urls = 0
+ correct_names = 0
+ correct_versions = 0
+
+ # Collect statistics on which regexes were matched and how often
+ name_regex_dict = dict()
+ name_count_dict = defaultdict(int)
+ version_regex_dict = dict()
+ version_count_dict = defaultdict(int)
+
+ tty.msg('Generating a summary of URL parsing in Spack...')
+
+ # Loop through all packages
+ for pkg in spack.repo.all_packages():
+ urls = set()
+
+ url = getattr(pkg.__class__, 'url', None)
+ if url:
+ urls.add(url)
+
+ for params in pkg.versions.values():
+ url = params.get('url', None)
+ if url:
+ urls.add(url)
+
+ # Calculate statistics
+ for url in urls:
+ total_urls += 1
+
+ # Parse versions
+ version = None
+ try:
+ version, vs, vl, vi, vregex = parse_version_offset(url)
+ version_regex_dict[vi] = vregex
+ version_count_dict[vi] += 1
+ if version_parsed_correctly(pkg, version):
+ correct_versions += 1
+ except UndetectableVersionError:
+ pass
+
+ # Parse names
+ try:
+ name, ns, nl, ni, nregex = parse_name_offset(url, version)
+ name_regex_dict[ni] = nregex
+ name_count_dict[ni] += 1
+ if name_parsed_correctly(pkg, name):
+ correct_names += 1
+ except UndetectableNameError:
+ pass
+
+ print()
+ print(' Total URLs found: {0}'.format(total_urls))
+ print(' Names correctly parsed: {0:>4}/{1:>4} ({2:>6.2%})'.format(
+ correct_names, total_urls, correct_names / total_urls))
+ print(' Versions correctly parsed: {0:>4}/{1:>4} ({2:>6.2%})'.format(
+ correct_versions, total_urls, correct_versions / total_urls))
+ print()
+
+ tty.msg('Statistics on name regular expressions:')
+
+ print()
+ print(' Index Count Regular Expression')
+ for ni in name_regex_dict:
+ print(' {0:>3}: {1:>6} r{2!r}'.format(
+ ni, name_count_dict[ni], name_regex_dict[ni]))
+ print()
+
+ tty.msg('Statistics on version regular expressions:')
+
+ print()
+ print(' Index Count Regular Expression')
+ for vi in version_regex_dict:
+ print(' {0:>3}: {1:>6} r{2!r}'.format(
+ vi, version_count_dict[vi], version_regex_dict[vi]))
+ print()
+
+ # Return statistics, only for testing purposes
+ return (total_urls, correct_names, correct_versions,
+ name_count_dict, version_count_dict)
+
+
+def print_name_and_version(url):
+ """Prints a URL. Underlines the detected name with dashes and
+ the detected version with tildes.
+
+ Args:
+ url (str): The url to parse
+ """
+ name, ns, nl, ntup, ver, vs, vl, vtup = substitution_offsets(url)
+ underlines = [' '] * max(ns + nl, vs + vl)
+ for i in range(ns, ns + nl):
+ underlines[i] = '-'
+ for i in range(vs, vs + vl):
+ underlines[i] = '~'
+
+ print(' {0}'.format(url))
+ print(' {0}'.format(''.join(underlines)))
+
+
+def url_list_parsing(args, urls, url, pkg):
+ """Helper function for :func:`url_list`.
+
+ Args:
+ args (argparse.Namespace): The arguments given to ``spack url list``
+ urls (set): List of URLs that have already been added
+ url (str or None): A URL to potentially add to ``urls`` depending on
+ ``args``
+ pkg (spack.package.PackageBase): The Spack package
+
+ Returns:
+ set: The updated set of ``urls``
+ """
+ if url:
+ if args.correct_name or args.incorrect_name:
+ # Attempt to parse the name
+ try:
+ name = parse_name(url)
+ if (args.correct_name and
+ name_parsed_correctly(pkg, name)):
+ # Add correctly parsed URLs
+ urls.add(url)
+ elif (args.incorrect_name and
+ not name_parsed_correctly(pkg, name)):
+ # Add incorrectly parsed URLs
+ urls.add(url)
+ except UndetectableNameError:
+ if args.incorrect_name:
+ # Add incorrectly parsed URLs
+ urls.add(url)
+ elif args.correct_version or args.incorrect_version:
+ # Attempt to parse the version
+ try:
+ version = parse_version(url)
+ if (args.correct_version and
+ version_parsed_correctly(pkg, version)):
+ # Add correctly parsed URLs
+ urls.add(url)
+ elif (args.incorrect_version and
+ not version_parsed_correctly(pkg, version)):
+ # Add incorrectly parsed URLs
+ urls.add(url)
+ except UndetectableVersionError:
+ if args.incorrect_version:
+ # Add incorrectly parsed URLs
+ urls.add(url)
+ else:
+ urls.add(url)
+
+ return urls
+
+
+def name_parsed_correctly(pkg, name):
+ """Determine if the name of a package was correctly parsed.
+
+ Args:
+ pkg (spack.package.PackageBase): The Spack package
+ name (str): The name that was extracted from the URL
+
+ Returns:
+ bool: True if the name was correctly parsed, else False
+ """
+ pkg_name = pkg.name
+
+ name = simplify_name(name)
+
+ # After determining a name, `spack create` determines a build system.
+ # Some build systems prepend a special string to the front of the name.
+ # Since this can't be guessed from the URL, it would be unfair to say
+ # that these names are incorrectly parsed, so we remove them.
+ if pkg_name.startswith('r-'):
+ pkg_name = pkg_name[2:]
+ elif pkg_name.startswith('py-'):
+ pkg_name = pkg_name[3:]
+ elif pkg_name.startswith('perl-'):
+ pkg_name = pkg_name[5:]
+ elif pkg_name.startswith('octave-'):
+ pkg_name = pkg_name[7:]
+
+ return name == pkg_name
+
+
+def version_parsed_correctly(pkg, version):
+ """Determine if the version of a package was correctly parsed.
+
+ Args:
+ pkg (spack.package.PackageBase): The Spack package
+ version (str): The version that was extracted from the URL
+
+ Returns:
+ bool: True if the name was correctly parsed, else False
+ """
+ version = remove_separators(version)
+
+ # If the version parsed from the URL is listed in a version()
+ # directive, we assume it was correctly parsed
+ for pkg_version in pkg.versions:
+ pkg_version = remove_separators(pkg_version)
+ if pkg_version == version:
+ return True
+ return False
+
+
+def remove_separators(version):
+ """Removes separator characters ('.', '_', and '-') from a version.
+
+ A version like 1.2.3 may be displayed as 1_2_3 in the URL.
+ Make sure 1.2.3, 1-2-3, 1_2_3, and 123 are considered equal.
+ Unfortunately, this also means that 1.23 and 12.3 are equal.
+
+ Args:
+ version (str or Version): A version
+
+ Returns:
+ str: The version with all separator characters removed
+ """
+ version = str(version)
+
+ version = version.replace('.', '')
+ version = version.replace('_', '')
+ version = version.replace('-', '')
+
+ return version
diff --git a/lib/spack/spack/cmd/url_parse.py b/lib/spack/spack/cmd/url_parse.py
deleted file mode 100644
index 2af9671459..0000000000
--- a/lib/spack/spack/cmd/url_parse.py
+++ /dev/null
@@ -1,79 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-import llnl.util.tty as tty
-
-import spack
-import spack.url
-from spack.util.web import find_versions_of_archive
-
-description = "Show parsing of a URL, optionally spider web for versions."
-
-
-def setup_parser(subparser):
- subparser.add_argument('url', help="url of a package archive")
- subparser.add_argument(
- '-s', '--spider', action='store_true',
- help="Spider the source page for versions.")
-
-
-def print_name_and_version(url):
- name, ns, nl, ntup, ver, vs, vl, vtup = spack.url.substitution_offsets(url)
- underlines = [" "] * max(ns + nl, vs + vl)
- for i in range(ns, ns + nl):
- underlines[i] = '-'
- for i in range(vs, vs + vl):
- underlines[i] = '~'
-
- print " %s" % url
- print " %s" % ''.join(underlines)
-
-
-def url_parse(parser, args):
- url = args.url
-
- ver, vs, vl = spack.url.parse_version_offset(url, debug=True)
- name, ns, nl = spack.url.parse_name_offset(url, ver, debug=True)
- print
-
- tty.msg("Detected:")
- try:
- print_name_and_version(url)
- except spack.url.UrlParseError as e:
- tty.error(str(e))
-
- print ' name: %s' % name
- print ' version: %s' % ver
-
- print
- tty.msg("Substituting version 9.9.9b:")
- newurl = spack.url.substitute_version(url, '9.9.9b')
- print_name_and_version(newurl)
-
- if args.spider:
- print
- tty.msg("Spidering for versions:")
- versions = find_versions_of_archive(url)
- for v in sorted(versions):
- print "%-20s%s" % (v, versions[v])
diff --git a/lib/spack/spack/cmd/urls.py b/lib/spack/spack/cmd/urls.py
deleted file mode 100644
index f151581d7d..0000000000
--- a/lib/spack/spack/cmd/urls.py
+++ /dev/null
@@ -1,59 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-import spack
-import spack.url
-
-description = "Inspect urls used by packages in spack."
-
-
-def setup_parser(subparser):
- subparser.add_argument(
- '-c', '--color', action='store_true',
- help="Color the parsed version and name in the urls shown. "
- "Version will be cyan, name red.")
- subparser.add_argument(
- '-e', '--extrapolation', action='store_true',
- help="Color the versions used for extrapolation as well."
- "Additional versions are green, names magenta.")
-
-
-def urls(parser, args):
- urls = set()
- for pkg in spack.repo.all_packages():
- url = getattr(pkg.__class__, 'url', None)
- if url:
- urls.add(url)
-
- for params in pkg.versions.values():
- url = params.get('url', None)
- if url:
- urls.add(url)
-
- for url in sorted(urls):
- if args.color or args.extrapolation:
- print spack.url.color_url(
- url, subs=args.extrapolation, errors=True)
- else:
- print url
diff --git a/lib/spack/spack/cmd/use.py b/lib/spack/spack/cmd/use.py
index e3612ace48..956f5c6cbc 100644
--- a/lib/spack/spack/cmd/use.py
+++ b/lib/spack/spack/cmd/use.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import argparse
-import spack.modules
+from spack.cmd.common import print_module_placeholder_help
-description = "Add package to environment using dotkit."
+description = "add package to environment using dotkit"
+section = "environment"
+level = "long"
def setup_parser(subparser):
@@ -33,8 +35,8 @@ def setup_parser(subparser):
message with -h. """
subparser.add_argument(
'spec', nargs=argparse.REMAINDER,
- help='Spec of package to use with dotkit.')
+ help='spec of package to use with dotkit')
def use(parser, args):
- spack.modules.print_help()
+ print_module_placeholder_help()
diff --git a/lib/spack/spack/cmd/versions.py b/lib/spack/spack/cmd/versions.py
index 1e95225ab8..9c6f2d1ead 100644
--- a/lib/spack/spack/cmd/versions.py
+++ b/lib/spack/spack/cmd/versions.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,16 +22,20 @@
# 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 __future__ import print_function
+
from llnl.util.tty.colify import colify
import llnl.util.tty as tty
import spack
-description = "List available versions of a package"
+description = "list available versions of a package"
+section = "packaging"
+level = "long"
def setup_parser(subparser):
subparser.add_argument('package', metavar='PACKAGE',
- help='Package to list versions for')
+ help='package to list versions for')
def versions(parser, args):
@@ -47,10 +51,10 @@ def versions(parser, args):
tty.msg("Remote versions (not yet checksummed):")
if not remote_versions:
if not fetched_versions:
- print " Found no versions for %s" % pkg.name
+ print(" Found no versions for %s" % pkg.name)
tty.debug("Check the list_url and list_depth attribute on the "
"package to help Spack find versions.")
else:
- print " Found no unckecksummed versions for %s" % pkg.name
+ print(" Found no unchecksummed versions for %s" % pkg.name)
else:
colify(sorted(remote_versions, reverse=True), indent=2)
diff --git a/lib/spack/spack/cmd/view.py b/lib/spack/spack/cmd/view.py
index 869a58f15c..13005053ff 100644
--- a/lib/spack/spack/cmd/view.py
+++ b/lib/spack/spack/cmd/view.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ Spack-installed package file hierarchies. The union is formed from:
- specs resolved from the package names given by the user (the seeds)
-- all depenencies of the seeds unless user specifies `--no-depenencies`
+- all dependencies of the seeds unless user specifies `--no-dependencies`
- less any specs with names matching the regular expressions given by
`--exclude`
@@ -48,28 +48,52 @@ The `view` can be built and tore down via a number of methods (the "actions"):
The file system view concept is imspired by Nix, implemented by
brett.viren@gmail.com ca 2016.
+All operations on views are performed via proxy objects such as
+YamlFilesystemView.
+
'''
-# Implementation notes:
-#
-# This is implemented as a visitor pattern on the set of package specs.
-#
-# The command line ACTION maps to a visitor_*() function which takes
-# the set of package specs and any args which may be specific to the
-# ACTION.
-#
-# To add a new view:
-# 1. add a new cmd line args sub parser ACTION
-# 2. add any action-specific options/arguments, most likely a list of specs.
-# 3. add a visitor_MYACTION() function
-# 4. add any visitor_MYALIAS assignments to match any command line aliases
import os
-import re
import spack
import spack.cmd
+import spack.store
+from spack.filesystem_view import YamlFilesystemView
import llnl.util.tty as tty
-description = "Produce a single-rooted directory view of a spec."
+description = "produce a single-rooted directory view of packages"
+section = "environment"
+level = "short"
+
+actions_link = ["symlink", "add", "soft", "hardlink", "hard"]
+actions_remove = ["remove", "rm"]
+actions_status = ["statlink", "status", "check"]
+
+
+def relaxed_disambiguate(specs, view):
+ """
+ When dealing with querying actions (remove/status) the name of the spec
+ is sufficient even though more versions of that name might be in the
+ database.
+ """
+ name_to_spec = dict((s.name, s) for s in view.get_all_specs())
+
+ def squash(matching_specs):
+ if not matching_specs:
+ tty.die("Spec matches no installed packages.")
+
+ elif len(matching_specs) == 1:
+ return matching_specs[0]
+
+ elif matching_specs[0].name in name_to_spec:
+ return name_to_spec[matching_specs[0].name]
+
+ else:
+ # we just return the first matching spec, the error about the
+ # missing spec will be printed later on
+ return matching_specs[0]
+
+ # make function always return a list to keep consistency between py2/3
+ return list(map(squash, map(spack.store.db.query, specs)))
def setup_parser(sp):
@@ -77,227 +101,123 @@ def setup_parser(sp):
sp.add_argument(
'-v', '--verbose', action='store_true', default=False,
- help="Display verbose output.")
+ help="If not verbose only warnings/errors will be printed.")
sp.add_argument(
'-e', '--exclude', action='append', default=[],
- help="Exclude packages with names matching the given regex pattern.")
+ help="exclude packages with names matching the given regex pattern")
sp.add_argument(
'-d', '--dependencies', choices=['true', 'false', 'yes', 'no'],
default='true',
- help="Follow dependencies.")
+ help="Link/remove/list dependencies.")
ssp = sp.add_subparsers(metavar='ACTION', dest='action')
- specs_opts = dict(metavar='spec', nargs='+',
- help="Seed specs of the packages to view.")
+ specs_opts = dict(metavar='spec', action='store',
+ help="seed specs of the packages to view")
# The action parameterizes the command but in keeping with Spack
# patterns we make it a subcommand.
- file_system_view_actions = [
- ssp.add_parser(
+ file_system_view_actions = {
+ "symlink": ssp.add_parser(
'symlink', aliases=['add', 'soft'],
- help='Add package files to a filesystem view via symbolic links.'),
- ssp.add_parser(
+ help='add package files to a filesystem view via symbolic links'),
+ "hardlink": ssp.add_parser(
'hardlink', aliases=['hard'],
- help='Add packages files to a filesystem via via hard links.'),
- ssp.add_parser(
+ help='add packages files to a filesystem via via hard links'),
+ "remove": ssp.add_parser(
'remove', aliases=['rm'],
- help='Remove packages from a filesystem view.'),
- ssp.add_parser(
+ help='remove packages from a filesystem view'),
+ "statlink": ssp.add_parser(
'statlink', aliases=['status', 'check'],
- help='Check status of packages in a filesystem view.')
- ]
+ help='check status of packages in a filesystem view')
+ }
+
# All these options and arguments are common to every action.
- for act in file_system_view_actions:
+ for cmd, act in file_system_view_actions.items():
act.add_argument('path', nargs=1,
- help="Path to file system view directory.")
- act.add_argument('specs', **specs_opts)
+ help="path to file system view directory")
+
+ if cmd == "remove":
+ grp = act.add_mutually_exclusive_group(required=True)
+ act.add_argument(
+ '--no-remove-dependents', action="store_true",
+ help="Do not remove dependents of specified specs.")
+
+ # with all option, spec is an optional argument
+ so = specs_opts.copy()
+ so["nargs"] = "*"
+ so["default"] = []
+ grp.add_argument('specs', **so)
+ grp.add_argument("-a", "--all", action='store_true',
+ help="act on all specs in view")
+
+ elif cmd == "statlink":
+ so = specs_opts.copy()
+ so["nargs"] = "*"
+ act.add_argument('specs', **so)
+
+ else:
+ # without all option, spec is required
+ so = specs_opts.copy()
+ so["nargs"] = "+"
+ act.add_argument('specs', **so)
+
+ for cmd in ["symlink", "hardlink"]:
+ act = file_system_view_actions[cmd]
+ act.add_argument("-i", "--ignore-conflicts", action='store_true')
return
-def assuredir(path):
- 'Assure path exists as a directory'
- if not os.path.exists(path):
- os.makedirs(path)
-
-
-def relative_to(prefix, path):
- 'Return end of `path` relative to `prefix`'
- assert 0 == path.find(prefix)
- reldir = path[len(prefix):]
- if reldir.startswith('/'):
- reldir = reldir[1:]
- return reldir
-
-
-def transform_path(spec, path, prefix=None):
- 'Return the a relative path corresponding to given path spec.prefix'
- if os.path.isabs(path):
- path = relative_to(spec.prefix, path)
- subdirs = path.split(os.path.sep)
- if subdirs[0] == '.spack':
- lst = ['.spack', spec.name] + subdirs[1:]
- path = os.path.join(*lst)
- if prefix:
- path = os.path.join(prefix, path)
- return path
-
-
-def purge_empty_directories(path):
- '''Ascend up from the leaves accessible from `path`
- and remove empty directories.'''
- for dirpath, subdirs, files in os.walk(path, topdown=False):
- for sd in subdirs:
- sdp = os.path.join(dirpath, sd)
- try:
- os.rmdir(sdp)
- except OSError:
- pass
-
-
-def filter_exclude(specs, exclude):
- 'Filter specs given sequence of exclude regex'
- to_exclude = [re.compile(e) for e in exclude]
-
- def exclude(spec):
- for e in to_exclude:
- if e.match(spec.name):
- return True
- return False
- return [s for s in specs if not exclude(s)]
-
-
-def flatten(seeds, descend=True):
- 'Normalize and flattend seed specs and descend hiearchy'
- flat = set()
- for spec in seeds:
- if not descend:
- flat.add(spec)
- continue
- flat.update(spec.normalized().traverse())
- return flat
-
-
-def check_one(spec, path, verbose=False):
- 'Check status of view in path against spec'
- dotspack = os.path.join(path, '.spack', spec.name)
- if os.path.exists(os.path.join(dotspack)):
- tty.info('Package in view: "%s"' % spec.name)
- return
- tty.info('Package not in view: "%s"' % spec.name)
- return
-
-
-def remove_one(spec, path, verbose=False):
- 'Remove any files found in `spec` from `path` and purge empty directories.'
-
- if not os.path.exists(path):
- return # done, short circuit
-
- dotspack = transform_path(spec, '.spack', path)
- if not os.path.exists(dotspack):
- if verbose:
- tty.info('Skipping nonexistent package: "%s"' % spec.name)
- return
-
- if verbose:
- tty.info('Removing package: "%s"' % spec.name)
- for dirpath, dirnames, filenames in os.walk(spec.prefix):
- if not filenames:
- continue
- targdir = transform_path(spec, dirpath, path)
- for fname in filenames:
- dst = os.path.join(targdir, fname)
- if not os.path.exists(dst):
- continue
- os.unlink(dst)
-
-
-def link_one(spec, path, link=os.symlink, verbose=False):
- 'Link all files in `spec` into directory `path`.'
-
- dotspack = transform_path(spec, '.spack', path)
- if os.path.exists(dotspack):
- tty.warn('Skipping existing package: "%s"' % spec.name)
- return
-
- if verbose:
- tty.info('Linking package: "%s"' % spec.name)
- for dirpath, dirnames, filenames in os.walk(spec.prefix):
- if not filenames:
- continue # avoid explicitly making empty dirs
-
- targdir = transform_path(spec, dirpath, path)
- assuredir(targdir)
-
- for fname in filenames:
- src = os.path.join(dirpath, fname)
- dst = os.path.join(targdir, fname)
- if os.path.exists(dst):
- if '.spack' in dst.split(os.path.sep):
- continue # silence these
- tty.warn("Skipping existing file: %s" % dst)
- continue
- link(src, dst)
-
-
-def visitor_symlink(specs, args):
- 'Symlink all files found in specs'
- path = args.path[0]
- assuredir(path)
- for spec in specs:
- link_one(spec, path, verbose=args.verbose)
-
-
-visitor_add = visitor_symlink
-visitor_soft = visitor_symlink
-
-
-def visitor_hardlink(specs, args):
- 'Hardlink all files found in specs'
- path = args.path[0]
- assuredir(path)
- for spec in specs:
- link_one(spec, path, os.link, verbose=args.verbose)
-
-
-visitor_hard = visitor_hardlink
-
-
-def visitor_remove(specs, args):
- 'Remove all files and directories found in specs from args.path'
- path = args.path[0]
- for spec in specs:
- remove_one(spec, path, verbose=args.verbose)
- purge_empty_directories(path)
-
-
-visitor_rm = visitor_remove
-
-
-def visitor_statlink(specs, args):
- 'Give status of view in args.path relative to specs'
- path = args.path[0]
- for spec in specs:
- check_one(spec, path, verbose=args.verbose)
-
-
-visitor_status = visitor_statlink
-visitor_check = visitor_statlink
-
-
def view(parser, args):
'Produce a view of a set of packages.'
- # Process common args
- seeds = [spack.cmd.disambiguate_spec(s) for s in args.specs]
- specs = flatten(seeds, args.dependencies.lower() in ['yes', 'true'])
- specs = filter_exclude(specs, args.exclude)
+ path = args.path[0]
- # Execute the visitation.
- try:
- visitor = globals()['visitor_' + args.action]
- except KeyError:
+ view = YamlFilesystemView(
+ path, spack.store.layout,
+ ignore_conflicts=getattr(args, "ignore_conflicts", False),
+ link=os.link if args.action in ["hardlink", "hard"]
+ else os.symlink,
+ verbose=args.verbose)
+
+ # Process common args and specs
+ if getattr(args, "all", False):
+ specs = view.get_all_specs()
+ if len(specs) == 0:
+ tty.warn("Found no specs in %s" % path)
+
+ elif args.action in actions_link:
+ # only link commands need to disambiguate specs
+ specs = [spack.cmd.disambiguate_spec(s) for s in args.specs]
+
+ elif args.action in actions_status:
+ # no specs implies all
+ if len(args.specs) == 0:
+ specs = view.get_all_specs()
+ else:
+ specs = relaxed_disambiguate(args.specs, view)
+
+ else:
+ # status and remove can map the name to packages in view
+ specs = relaxed_disambiguate(args.specs, view)
+
+ with_dependencies = args.dependencies.lower() in ['true', 'yes']
+
+ # Map action to corresponding functionality
+ if args.action in actions_link:
+ view.add_specs(*specs,
+ with_dependencies=with_dependencies,
+ exclude=args.exclude)
+
+ elif args.action in actions_remove:
+ view.remove_specs(*specs,
+ with_dependencies=with_dependencies,
+ exclude=args.exclude,
+ with_dependents=not args.no_remove_dependents)
+
+ elif args.action in actions_status:
+ view.print_status(*specs, with_dependencies=with_dependencies)
+
+ else:
tty.error('Unknown action: "%s"' % args.action)
- visitor(specs, args)
diff --git a/lib/spack/spack/compiler.py b/lib/spack/spack/compiler.py
index 9e9c7cbcb4..e19601116f 100644
--- a/lib/spack/spack/compiler.py
+++ b/lib/spack/spack/compiler.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ import spack.error
import spack.spec
import spack.architecture
from spack.util.multiproc import parmap
-from spack.util.executable import *
+from spack.util.executable import Executable, ProcessError
from spack.util.environment import get_path
__all__ = ['Compiler', 'get_compiler_version']
@@ -49,14 +49,15 @@ _version_cache = {}
def get_compiler_version(compiler_path, version_arg, regex='(.*)'):
- if compiler_path not in _version_cache:
+ key = (compiler_path, version_arg, regex)
+ if key not in _version_cache:
compiler = Executable(compiler_path)
output = compiler(version_arg, output=str, error=str)
match = re.search(regex, output)
- _version_cache[compiler_path] = match.group(1) if match else 'unknown'
+ _version_cache[key] = match.group(1) if match else 'unknown'
- return _version_cache[compiler_path]
+ return _version_cache[key]
def dumpversion(compiler_path):
@@ -64,6 +65,27 @@ def dumpversion(compiler_path):
return get_compiler_version(compiler_path, '-dumpversion')
+def tokenize_flags(flags_str):
+ """Given a compiler flag specification as a string, this returns a list
+ where the entries are the flags. For compiler options which set values
+ using the syntax "-flag value", this function groups flags and their
+ values together. Any token not preceded by a "-" is considered the
+ value of a prior flag."""
+ tokens = flags_str.split()
+ if not tokens:
+ return []
+ flag = tokens[0]
+ flags = []
+ for token in tokens[1:]:
+ if not token.startswith('-'):
+ flag += ' ' + token
+ else:
+ flags.append(flag)
+ flag = token
+ flags.append(flag)
+ return flags
+
+
class Compiler(object):
"""This class encapsulates a Spack "compiler", which includes C,
C++, and Fortran compilers. Subclasses should implement
@@ -124,7 +146,6 @@ class Compiler(object):
def check(exe):
if exe is None:
return None
- exe = self._find_full_path(exe)
_verify_executables(exe)
return exe
@@ -147,7 +168,7 @@ class Compiler(object):
for flag in spack.spec.FlagMap.valid_compiler_flags():
value = kwargs.get(flag, None)
if value is not None:
- self.flags[flag] = value.split()
+ self.flags[flag] = tokenize_flags(value)
@property
def version(self):
@@ -265,11 +286,11 @@ class Compiler(object):
full_path, prefix, suffix = key
version = detect_version(full_path)
return (version, prefix, suffix, full_path)
- except ProcessError, e:
+ except ProcessError as e:
tty.debug(
"Couldn't get version for compiler %s" % full_path, e)
return None
- except Exception, e:
+ except Exception as e:
# Catching "Exception" here is fine because it just
# means something went wrong running a candidate executable.
tty.debug("Error while executing candidate compiler %s"
@@ -285,17 +306,6 @@ class Compiler(object):
successful.reverse()
return dict(((v, p, s), path) for v, p, s, path in successful)
- def _find_full_path(self, path):
- """Return the actual path for a tool.
-
- Some toolchains use forwarding executables (particularly Xcode-based
- toolchains) which can be manipulated by external environment variables.
- This method should be used to extract the actual path used for a tool
- by finding out the end executable the forwarding executables end up
- running.
- """
- return path
-
def setup_custom_environment(self, pkg, env):
"""Set any environment variables necessary to use the compiler."""
pass
diff --git a/lib/spack/spack/compilers/__init__.py b/lib/spack/spack/compilers/__init__.py
index 6e65f50269..f251889f83 100644
--- a/lib/spack/spack/compilers/__init__.py
+++ b/lib/spack/spack/compilers/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,10 +40,14 @@ from spack.util.naming import mod_to_class
_imported_compilers_module = 'spack.compilers'
_path_instance_vars = ['cc', 'cxx', 'f77', 'fc']
+_flags_instance_vars = ['cflags', 'cppflags', 'cxxflags', 'fflags']
_other_instance_vars = ['modules', 'operating_system', 'environment',
'extra_rpaths']
_cache_config_file = []
+#: cache of compilers constructed from config data, keyed by config entry id.
+_compiler_cache = {}
+
def _auto_compiler_spec(function):
def converter(cspec_like, *args, **kwargs):
@@ -60,6 +64,9 @@ def _to_dict(compiler):
d['paths'] = dict((attr, getattr(compiler, attr, None))
for attr in _path_instance_vars)
d['flags'] = dict((fname, fvals) for fname, fvals in compiler.flags)
+ d['flags'].update(dict((attr, getattr(compiler, attr, None))
+ for attr in _flags_instance_vars
+ if hasattr(compiler, attr)))
d['operating_system'] = str(compiler.operating_system)
d['target'] = str(compiler.target)
d['modules'] = compiler.modules if compiler.modules else []
@@ -96,7 +103,8 @@ def get_compiler_config(scope=None, init_config=True):
# Check the site config and update the user config if
# nothing is configured at the site level.
site_config = spack.config.get_config('compilers', scope='site')
- if not site_config:
+ sys_config = spack.config.get_config('compilers', scope='system')
+ if not site_config and not sys_config:
init_compiler_config()
config = spack.config.get_config('compilers', scope=scope)
return config
@@ -106,6 +114,16 @@ def get_compiler_config(scope=None, init_config=True):
return [] # Return empty list which we will later append to.
+def compiler_config_files():
+ config_files = list()
+ for scope in spack.config.config_scopes:
+ config = spack.config.get_config('compilers', scope=scope)
+ if config:
+ config_files.append(spack.config.config_scopes[scope]
+ .get_section_filename('compilers'))
+ return config_files
+
+
def add_compilers_to_config(compilers, scope=None, init_config=True):
"""Add compilers to the config for the specified architecture.
@@ -160,14 +178,14 @@ def all_compilers_config(scope=None, init_config=True):
return _cache_config_file
-def all_compilers(scope=None, init_config=True):
+def all_compiler_specs(scope=None, init_config=True):
# Return compiler specs from the merged config.
return [spack.spec.CompilerSpec(s['compiler']['spec'])
for s in all_compilers_config(scope, init_config)]
def find_compilers(*paths):
- """Return a list of compilers found in the suppied paths.
+ """Return a list of compilers found in the supplied paths.
This invokes the find_compilers() method for each operating
system associated with the host platform, and appends
the compilers detected to a list.
@@ -196,75 +214,109 @@ def supported(compiler_spec):
@_auto_compiler_spec
-def find(compiler_spec, scope=None):
+def find(compiler_spec, scope=None, init_config=True):
"""Return specs of available compilers that match the supplied
compiler spec. Return an empty list if nothing found."""
- return [c for c in all_compilers(scope) if c.satisfies(compiler_spec)]
+ return [c for c in all_compiler_specs(scope, init_config)
+ if c.satisfies(compiler_spec)]
+
+
+def all_compilers(scope=None):
+ config = get_compiler_config(scope)
+ compilers = list()
+ for items in config:
+ items = items['compiler']
+ compilers.append(compiler_from_config_entry(items))
+ return compilers
@_auto_compiler_spec
-def compilers_for_spec(compiler_spec, arch_spec=None, scope=None):
+def compilers_for_spec(compiler_spec, arch_spec=None, scope=None,
+ use_cache=True, init_config=True):
"""This gets all compilers that satisfy the supplied CompilerSpec.
Returns an empty list if none are found.
"""
- config = all_compilers_config(scope)
+ if use_cache:
+ config = all_compilers_config(scope, init_config)
+ else:
+ config = get_compiler_config(scope, init_config)
- def get_compilers(cspec):
- compilers = []
-
- for items in config:
- items = items['compiler']
- if items['spec'] != str(cspec):
- continue
-
- # If an arch spec is given, confirm that this compiler
- # is for the given operating system
- os = items.get('operating_system', None)
- if arch_spec and os != arch_spec.platform_os:
- continue
-
- # If an arch spec is given, confirm that this compiler
- # is for the given target. If the target is 'any', match
- # any given arch spec. If the compiler has no assigned
- # target this is an old compiler config file, skip this logic.
- target = items.get('target', None)
- if arch_spec and target and (target != arch_spec.target and
- target != 'any'):
- continue
-
- if not ('paths' in items and
- all(n in items['paths'] for n in _path_instance_vars)):
- raise InvalidCompilerConfigurationError(cspec)
-
- cls = class_for_compiler_name(cspec.name)
-
- compiler_paths = []
- for c in _path_instance_vars:
- compiler_path = items['paths'][c]
- if compiler_path != 'None':
- compiler_paths.append(compiler_path)
- else:
- compiler_paths.append(None)
-
- mods = items.get('modules')
- if mods == 'None':
- mods = []
-
- alias = items.get('alias', None)
- compiler_flags = items.get('flags', {})
- environment = items.get('environment', {})
- extra_rpaths = items.get('extra_rpaths', [])
-
- compilers.append(
- cls(cspec, os, target, compiler_paths, mods, alias,
- environment, extra_rpaths, **compiler_flags))
-
- return compilers
-
- matches = set(find(compiler_spec, scope))
+ matches = set(find(compiler_spec, scope, init_config))
compilers = []
for cspec in matches:
- compilers.extend(get_compilers(cspec))
+ compilers.extend(get_compilers(config, cspec, arch_spec))
+ return compilers
+
+
+def compilers_for_arch(arch_spec, scope=None):
+ config = all_compilers_config(scope)
+ return list(get_compilers(config, arch_spec=arch_spec))
+
+
+def compiler_from_config_entry(items):
+ config_id = id(items)
+ compiler = _compiler_cache.get(config_id, None)
+
+ if compiler is None:
+ cspec = spack.spec.CompilerSpec(items['spec'])
+ os = items.get('operating_system', None)
+ target = items.get('target', None)
+
+ if not ('paths' in items and
+ all(n in items['paths'] for n in _path_instance_vars)):
+ raise InvalidCompilerConfigurationError(cspec)
+
+ cls = class_for_compiler_name(cspec.name)
+
+ compiler_paths = []
+ for c in _path_instance_vars:
+ compiler_path = items['paths'][c]
+ if compiler_path != 'None':
+ compiler_paths.append(compiler_path)
+ else:
+ compiler_paths.append(None)
+
+ mods = items.get('modules')
+ if mods == 'None':
+ mods = []
+
+ alias = items.get('alias', None)
+ compiler_flags = items.get('flags', {})
+ environment = items.get('environment', {})
+ extra_rpaths = items.get('extra_rpaths', [])
+
+ compiler = cls(cspec, os, target, compiler_paths, mods, alias,
+ environment, extra_rpaths, **compiler_flags)
+ _compiler_cache[id(items)] = compiler
+
+ return compiler
+
+
+def get_compilers(config, cspec=None, arch_spec=None):
+ compilers = []
+
+ for items in config:
+ items = items['compiler']
+ if cspec and items['spec'] != str(cspec):
+ continue
+
+ # If an arch spec is given, confirm that this compiler
+ # is for the given operating system
+ os = items.get('operating_system', None)
+ if arch_spec and os != arch_spec.platform_os:
+ continue
+
+ # If an arch spec is given, confirm that this compiler
+ # is for the given target. If the target is 'any', match
+ # any given arch spec. If the compiler has no assigned
+ # target this is an old compiler config file, skip this logic.
+ target = items.get('target', None)
+ if arch_spec and target and (target != arch_spec.target and
+ target != 'any'):
+ continue
+
+ compilers.append(compiler_from_config_entry(items))
+
return compilers
@@ -279,10 +331,28 @@ def compiler_for_spec(compiler_spec, arch_spec):
if len(compilers) < 1:
raise NoCompilerForSpecError(compiler_spec, arch_spec.platform_os)
if len(compilers) > 1:
- raise CompilerSpecInsufficientlySpecificError(compiler_spec)
+ raise CompilerDuplicateError(compiler_spec, arch_spec)
return compilers[0]
+@_auto_compiler_spec
+def get_compiler_duplicates(compiler_spec, arch_spec):
+ config_scopes = spack.config.config_scopes
+ scope_to_compilers = dict()
+ for scope in config_scopes:
+ compilers = compilers_for_spec(compiler_spec, arch_spec=arch_spec,
+ scope=scope, use_cache=False)
+ if compilers:
+ scope_to_compilers[scope] = compilers
+
+ cfg_file_to_duplicates = dict()
+ for scope, compilers in scope_to_compilers.items():
+ config_file = config_scopes[scope].get_section_filename('compilers')
+ cfg_file_to_duplicates[config_file] = compilers
+
+ return cfg_file_to_duplicates
+
+
def class_for_compiler_name(compiler_name):
"""Given a compiler module name, get the corresponding Compiler class."""
assert(supported(compiler_name))
@@ -337,6 +407,24 @@ class NoCompilerForSpecError(spack.error.SpackError):
% (target, compiler_spec))
+class CompilerDuplicateError(spack.error.SpackError):
+ def __init__(self, compiler_spec, arch_spec):
+ config_file_to_duplicates = get_compiler_duplicates(
+ compiler_spec, arch_spec)
+ duplicate_table = list(
+ (x, len(y)) for x, y in config_file_to_duplicates.items())
+ descriptor = lambda num: 'time' if num == 1 else 'times'
+ duplicate_msg = (
+ lambda cfgfile, count: "{0}: {1} {2}".format(
+ cfgfile, str(count), descriptor(count)))
+ msg = (
+ "Compiler configuration contains entries with duplicate" +
+ " specification ({0}, {1})".format(compiler_spec, arch_spec) +
+ " in the following files:\n\t" +
+ '\n\t'.join(duplicate_msg(x, y) for x, y in duplicate_table))
+ super(CompilerDuplicateError, self).__init__(msg)
+
+
class CompilerSpecInsufficientlySpecificError(spack.error.SpackError):
def __init__(self, compiler_spec):
super(CompilerSpecInsufficientlySpecificError, self).__init__(
diff --git a/lib/spack/spack/compilers/cce.py b/lib/spack/spack/compilers/cce.py
index 43d000dd69..7bb95492ad 100644
--- a/lib/spack/spack/compilers/cce.py
+++ b/lib/spack/spack/compilers/cce.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,7 +22,7 @@
# 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.compiler import *
+from spack.compiler import Compiler, get_compiler_version
class Cce(Compiler):
@@ -52,4 +52,16 @@ class Cce(Compiler):
@classmethod
def default_version(cls, comp):
- return get_compiler_version(comp, '-V', r'[Vv]ersion.*(\d+(\.\d+)+)')
+ return get_compiler_version(comp, '-V', r'[Vv]ersion.*?(\d+(\.\d+)+)')
+
+ @property
+ def openmp_flag(self):
+ return "-h omp"
+
+ @property
+ def cxx11_flag(self):
+ return "-h std=c++11"
+
+ @property
+ def pic_flag(self):
+ return "-h PIC"
diff --git a/lib/spack/spack/compilers/clang.py b/lib/spack/spack/compilers/clang.py
index 3d68a37c44..6acb2f785c 100644
--- a/lib/spack/spack/compilers/clang.py
+++ b/lib/spack/spack/compilers/clang.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,14 @@
import re
import os
import sys
-import spack
-import spack.compiler as cpr
-from spack.compiler import *
-from spack.util.executable import *
+from shutil import copytree, ignore_patterns
+
import llnl.util.tty as tty
+
+import spack
+from spack.compiler import Compiler, _version_cache
+from spack.util.executable import Executable
from spack.version import ver
-from shutil import copytree, ignore_patterns
class Clang(Compiler):
@@ -42,18 +43,23 @@ class Clang(Compiler):
cxx_names = ['clang++']
# Subclasses use possible names of Fortran 77 compiler
- f77_names = ['gfortran']
+ f77_names = ['flang', 'gfortran']
# Subclasses use possible names of Fortran 90 compiler
- fc_names = ['gfortran']
+ fc_names = ['flang', 'gfortran']
# Named wrapper links within spack.build_env_path
link_paths = {'cc': 'clang/clang',
- 'cxx': 'clang/clang++',
- # Use default wrappers for fortran, in case provided in
- # compilers.yaml
- 'f77': 'clang/gfortran',
- 'fc': 'clang/gfortran'}
+ 'cxx': 'clang/clang++'}
+
+ if sys.platform == 'darwin':
+ # Use default wrappers for fortran, in case provided in
+ # compilers.yaml
+ link_paths['f77'] = 'clang/gfortran'
+ link_paths['fc'] = 'clang/gfortran'
+ else:
+ link_paths['f77'] = 'clang/flang'
+ link_paths['fc'] = 'clang/flang'
@property
def is_apple(self):
@@ -133,7 +139,7 @@ class Clang(Compiler):
Target: x86_64-apple-darwin15.2.0
Thread model: posix
"""
- if comp not in cpr._version_cache:
+ if comp not in _version_cache:
compiler = Executable(comp)
output = compiler('--version', output=str, error=str)
@@ -148,37 +154,18 @@ class Clang(Compiler):
if match:
ver = match.group(1)
- cpr._version_cache[comp] = ver
-
- return cpr._version_cache[comp]
-
- def _find_full_path(self, path):
- basename = os.path.basename(path)
+ _version_cache[comp] = ver
- if not self.is_apple or basename not in ('clang', 'clang++'):
- return super(Clang, self)._find_full_path(path)
-
- xcrun = Executable('xcrun')
- full_path = xcrun('-f', basename, output=str)
- return full_path.strip()
+ return _version_cache[comp]
@classmethod
def fc_version(cls, fc):
- version = get_compiler_version(
- fc, '-dumpversion',
- # older gfortran versions don't have simple dumpversion output.
- r'(?:GNU Fortran \(GCC\))?(\d+\.\d+(?:\.\d+)?)')
- # This is horribly ad hoc, we need to map from gcc/gfortran version
- # to clang version, but there could be multiple clang
- # versions that work for a single gcc/gfortran version
+ # We could map from gcc/gfortran version to clang version, but on macOS
+ # we normally mix any version of gfortran with any version of clang.
if sys.platform == 'darwin':
- clangversionfromgcc = {'6.2.0': '8.0.0-apple'}
+ return cls.default_version('clang')
else:
- clangversionfromgcc = {}
- if version in clangversionfromgcc:
- return clangversionfromgcc[version]
- else:
- return 'unknown'
+ return cls.default_version(fc)
@classmethod
def f77_version(cls, f77):
@@ -205,8 +192,41 @@ class Clang(Compiler):
# consequently render MPI non-functional outside of Spack.
return
+ # Use special XCode versions of compiler wrappers when using XCode
+ # Overwrites build_environment's setting of SPACK_CC and SPACK_CXX
+ xcrun = Executable('xcrun')
+ xcode_clang = xcrun('-f', 'clang', output=str).strip()
+ xcode_clangpp = xcrun('-f', 'clang++', output=str).strip()
+ env.set('SPACK_CC', xcode_clang, force=True)
+ env.set('SPACK_CXX', xcode_clangpp, force=True)
+
xcode_select = Executable('xcode-select')
+
+ # Get the path of the active developer directory
real_root = xcode_select('--print-path', output=str).strip()
+
+ # The path name can be used to determine whether the full Xcode suite
+ # or just the command-line tools are installed
+ if real_root.endswith('Developer'):
+ # The full Xcode suite is installed
+ pass
+ else:
+ if real_root.endswith('CommandLineTools'):
+ # Only the command-line tools are installed
+ msg = 'It appears that you have the Xcode command-line tools '
+ msg += 'but not the full Xcode suite installed.\n'
+
+ else:
+ # Xcode is not installed
+ msg = 'It appears that you do not have Xcode installed.\n'
+
+ msg += 'In order to use Spack to build the requested application, '
+ msg += 'you need the full Xcode suite. It can be installed '
+ msg += 'through the App Store. Make sure you launch the '
+ msg += 'application and accept the license agreement.\n'
+
+ raise OSError(msg)
+
real_root = os.path.dirname(os.path.dirname(real_root))
developer_root = os.path.join(spack.stage_path,
'xcode-select',
diff --git a/lib/spack/spack/compilers/gcc.py b/lib/spack/spack/compilers/gcc.py
index 304f82a492..dacc95e8d4 100644
--- a/lib/spack/spack/compilers/gcc.py
+++ b/lib/spack/spack/compilers/gcc.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,9 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import llnl.util.tty as tty
-from spack.compiler import *
+
+import spack
+from spack.compiler import Compiler, get_compiler_version
from spack.version import ver
@@ -88,6 +90,19 @@ class Gcc(Compiler):
return "-fPIC"
@classmethod
+ def default_version(cls, cc):
+ # Skip any gcc versions that are actually clang, like Apple's gcc.
+ # Returning "unknown" makes them not detected by default.
+ # Users can add these manually to compilers.yaml at their own risk.
+ if spack.compilers.clang.Clang.default_version(cc) != 'unknown':
+ return 'unknown'
+
+ version = super(Gcc, cls).default_version(cc)
+ if version in ['7']:
+ version = get_compiler_version(cc, '-dumpfullversion')
+ return version
+
+ @classmethod
def fc_version(cls, fc):
return get_compiler_version(
fc, '-dumpversion',
diff --git a/lib/spack/spack/compilers/intel.py b/lib/spack/spack/compilers/intel.py
index 8461753962..1601cf03d4 100644
--- a/lib/spack/spack/compilers/intel.py
+++ b/lib/spack/spack/compilers/intel.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,8 +22,9 @@
# 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.compiler import *
import llnl.util.tty as tty
+
+from spack.compiler import Compiler, get_compiler_version
from spack.version import ver
diff --git a/lib/spack/spack/compilers/nag.py b/lib/spack/spack/compilers/nag.py
index c1da95a6c3..d84e4d6f85 100644
--- a/lib/spack/spack/compilers/nag.py
+++ b/lib/spack/spack/compilers/nag.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,7 +22,7 @@
# 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.compiler import *
+from spack.compiler import Compiler, get_compiler_version
class Nag(Compiler):
diff --git a/lib/spack/spack/compilers/pgi.py b/lib/spack/spack/compilers/pgi.py
index 146c153041..0a90c4202d 100644
--- a/lib/spack/spack/compilers/pgi.py
+++ b/lib/spack/spack/compilers/pgi.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,7 +22,7 @@
# 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.compiler import *
+from spack.compiler import Compiler, get_compiler_version
class Pgi(Compiler):
@@ -61,12 +61,20 @@ class Pgi(Compiler):
@classmethod
def default_version(cls, comp):
- """The '-V' option works for all the PGI compilers.
+ """The ``-V`` option works for all the PGI compilers.
Output looks like this::
pgcc 15.10-0 64-bit target on x86-64 Linux -tp sandybridge
The Portland Group - PGI Compilers and Tools
Copyright (c) 2015, NVIDIA CORPORATION. All rights reserved.
+
+ on x86-64, and::
+
+ pgcc 17.4-0 linuxpower target on Linuxpower
+ PGI Compilers and Tools
+ Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved.
+
+ on PowerPC.
"""
return get_compiler_version(
- comp, '-V', r'pg[^ ]* ([^ ]+) \d\d\d?-bit target')
+ comp, '-V', r'pg[^ ]* ([0-9.]+)-[0-9]+ [^ ]+ target on ')
diff --git a/lib/spack/spack/compilers/xl.py b/lib/spack/spack/compilers/xl.py
index f4b7c4237d..827ffeba1b 100644
--- a/lib/spack/spack/compilers/xl.py
+++ b/lib/spack/spack/compilers/xl.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,24 +22,24 @@
# 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.compiler import *
import llnl.util.tty as tty
+
+from spack.compiler import Compiler, get_compiler_version
from spack.version import ver
class Xl(Compiler):
# Subclasses use possible names of C compiler
- cc_names = ['xlc', 'xlc_r']
+ cc_names = ['xlc']
# Subclasses use possible names of C++ compiler
- cxx_names = ['xlC', 'xlC_r', 'xlc++', 'xlc++_r']
+ cxx_names = ['xlC', 'xlc++']
# Subclasses use possible names of Fortran 77 compiler
- f77_names = ['xlf', 'xlf_r']
+ f77_names = ['xlf']
# Subclasses use possible names of Fortran 90 compiler
- fc_names = ['xlf90', 'xlf90_r', 'xlf95', 'xlf95_r',
- 'xlf2003', 'xlf2003_r', 'xlf2008', 'xlf2008_r']
+ fc_names = ['xlf90', 'xlf95', 'xlf2003', 'xlf2008']
# Named wrapper links within spack.build_env_path
link_paths = {'cc': 'xl/xlc',
@@ -62,6 +62,14 @@ class Xl(Compiler):
def pic_flag(self):
return "-qpic"
+ @property
+ def fflags(self):
+ # The -qzerosize flag is effective only for the Fortran 77
+ # compilers and allows the use of zero size objects.
+ # For Fortran 90 and beyond, it is set by default and has not impact.
+ # Its use has no negative side effects.
+ return "-qzerosize"
+
@classmethod
def default_version(cls, comp):
"""The '-qversion' is the standard option fo XL compilers.
diff --git a/lib/spack/spack/compilers/xl_r.py b/lib/spack/spack/compilers/xl_r.py
new file mode 100644
index 0000000000..1afaa45e63
--- /dev/null
+++ b/lib/spack/spack/compilers/xl_r.py
@@ -0,0 +1,123 @@
+##############################################################################
+# Copyright (c) 2016, International Business Machines Corporation
+#
+# This file is part of Spack.
+# Created by Serban Maerean, serban@us.ibm.com based on a similar file,
+# spack/lib/spack/spack/compilers/xl.py, produced by Todd Gamblin,
+# tgamblin@llnl.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/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
+##############################################################################
+import llnl.util.tty as tty
+
+from spack.compiler import Compiler, get_compiler_version
+from spack.version import ver
+
+
+class XlR(Compiler):
+ # Subclasses use possible names of C compiler
+ cc_names = ['xlc_r']
+
+ # Subclasses use possible names of C++ compiler
+ cxx_names = ['xlC_r', 'xlc++_r']
+
+ # Subclasses use possible names of Fortran 77 compiler
+ f77_names = ['xlf_r']
+
+ # Subclasses use possible names of Fortran 90 compiler
+ fc_names = ['xlf90_r', 'xlf95_r', 'xlf2003_r', 'xlf2008_r']
+
+ # Named wrapper links within spack.build_env_path
+ link_paths = {'cc': 'xl_r/xlc_r',
+ 'cxx': 'xl_r/xlc++_r',
+ 'f77': 'xl_r/xlf_r',
+ 'fc': 'xl_r/xlf90_r'}
+
+ @property
+ def openmp_flag(self):
+ return "-qsmp=omp"
+
+ @property
+ def cxx11_flag(self):
+ if self.version < ver('13.1'):
+ tty.die("Only xlC 13.1 and above have some c++11 support.")
+ else:
+ return "-qlanglvl=extended0x"
+
+ @property
+ def pic_flag(self):
+ return("-qpic")
+
+ @property
+ def fflags(self):
+ # The -qzerosize flag is effective only for the Fortran 77
+ # compilers and allows the use of zero size objects.
+ # For Fortran 90 and beyond, it is set by default and has not impact.
+ # Its use has no negative side effects.
+ return "-qzerosize"
+
+ @classmethod
+ def default_version(self, comp):
+ """The '-qversion' is the standard option fo XL compilers.
+ Output looks like this::
+
+ IBM XL C/C++ for Linux, V11.1 (5724-X14)
+ Version: 11.01.0000.0000
+
+ or::
+
+ IBM XL Fortran for Linux, V13.1 (5724-X16)
+ Version: 13.01.0000.0000
+
+ or::
+
+ IBM XL C/C++ for AIX, V11.1 (5724-X13)
+ Version: 11.01.0000.0009
+
+ or::
+
+ IBM XL C/C++ Advanced Edition for Blue Gene/P, V9.0
+ Version: 09.00.0000.0017
+ """
+
+ return get_compiler_version(
+ comp, '-qversion', r'([0-9]?[0-9]\.[0-9])')
+
+ @classmethod
+ def fc_version(cls, fc):
+ """The fortran and C/C++ versions of the XL compiler are always
+ two units apart. By this we mean that the fortran release that
+ goes with XL C/C++ 11.1 is 13.1. Having such a difference in
+ version number is confusing spack quite a lot. Most notably
+ if you keep the versions as is the default xl compiler will
+ only have fortran and no C/C++. So we associate the Fortran
+ compiler with the version associated to the C/C++ compiler.
+ One last stumble. Version numbers over 10 have at least a .1
+ those under 10 a .0. There is no xlf 9.x or under currently
+ available. BG/P and BG/L can such a compiler mix and possibly
+ older version of AIX and linux on power.
+ """
+ fver = get_compiler_version(fc, '-qversion', r'([0-9]?[0-9]\.[0-9])')
+ cver = float(fver) - 2
+ if cver < 10:
+ cver = cver - 0.1
+ return str(cver)
+
+ @classmethod
+ def f77_version(cls, f77):
+ return cls.fc_version(f77)
diff --git a/lib/spack/spack/concretize.py b/lib/spack/spack/concretize.py
index 36e8b30196..3b1e83cb5b 100644
--- a/lib/spack/spack/concretize.py
+++ b/lib/spack/spack/concretize.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,43 +34,48 @@ TODO: make this customizable and allow users to configure
concretization policies.
"""
from __future__ import print_function
+from itertools import chain
+from functools_backport import reverse_order
+from six import iteritems
+
import spack
import spack.spec
import spack.compilers
import spack.architecture
import spack.error
-from spack.version import *
-from functools import partial
-from itertools import chain
-from spack.package_prefs import *
+from spack.version import ver, Version, VersionList, VersionRange
+from spack.package_prefs import PackagePrefs, spec_externals, is_spec_buildable
class DefaultConcretizer(object):
-
"""This class doesn't have any state, it just provides some methods for
concretization. You can subclass it to override just some of the
default concretization strategies, or you can override all of them.
"""
-
def _valid_virtuals_and_externals(self, spec):
"""Returns a list of candidate virtual dep providers and external
- packages that coiuld be used to concretize a spec."""
+ packages that coiuld be used to concretize a spec.
+
+ Preferred specs come first in the list.
+ """
# First construct a list of concrete candidates to replace spec with.
candidates = [spec]
+ pref_key = lambda spec: 0 # no-op pref key
+
if spec.virtual:
- providers = spack.repo.providers_for(spec)
- if not providers:
- raise UnsatisfiableProviderSpecError(providers[0], spec)
- spec_w_preferred_providers = find_spec(
- spec,
- lambda x: pkgsort().spec_has_preferred_provider(
- x.name, spec.name))
- if not spec_w_preferred_providers:
- spec_w_preferred_providers = spec
- provider_cmp = partial(pkgsort().provider_compare,
- spec_w_preferred_providers.name,
- spec.name)
- candidates = sorted(providers, cmp=provider_cmp)
+ candidates = spack.repo.providers_for(spec)
+ if not candidates:
+ raise spack.spec.UnsatisfiableProviderSpecError(
+ candidates[0], spec)
+
+ # Find nearest spec in the DAG (up then down) that has prefs.
+ spec_w_prefs = find_spec(
+ spec, lambda p: PackagePrefs.has_preferred_providers(
+ p.name, spec.name),
+ spec) # default to spec itself.
+
+ # Create a key to sort candidates by the prefs we found
+ pref_key = PackagePrefs(spec_w_prefs.name, 'providers', spec.name)
# For each candidate package, if it has externals, add those
# to the usable list. if it's not buildable, then *only* add
@@ -79,6 +84,7 @@ class DefaultConcretizer(object):
for cspec in candidates:
if is_spec_buildable(cspec):
usable.append(cspec)
+
externals = spec_externals(cspec)
for ext in externals:
if ext.satisfies(spec):
@@ -89,31 +95,15 @@ class DefaultConcretizer(object):
if not usable:
raise NoBuildError(spec)
- def cmp_externals(a, b):
- if a.name != b.name and (not a.external or a.external_module and
- not b.external and b.external_module):
- # We're choosing between different providers, so
- # maintain order from provider sort
- index_of_a = next(i for i in range(0, len(candidates))
- if a.satisfies(candidates[i]))
- index_of_b = next(i for i in range(0, len(candidates))
- if b.satisfies(candidates[i]))
- return index_of_a - index_of_b
-
- result = cmp_specs(a, b)
- if result != 0:
- return result
-
- # prefer external packages to internal packages.
- if a.external is None or b.external is None:
- return -cmp(a.external, b.external)
- else:
- return cmp(a.external, b.external)
-
- usable.sort(cmp=cmp_externals)
- return usable
+ # Use a sort key to order the results
+ return sorted(usable, key=lambda spec: (
+ not spec.external, # prefer externals
+ pref_key(spec), # respect prefs
+ spec.name, # group by name
+ reverse_order(spec.versions), # latest version
+ spec # natural order
+ ))
- # XXX(deptypes): Look here.
def choose_virtual_or_external(self, spec):
"""Given a list of candidate virtual and external packages, try to
find one that is most ABI compatible.
@@ -125,24 +115,17 @@ class DefaultConcretizer(object):
# Find the nearest spec in the dag that has a compiler. We'll
# use that spec to calibrate compiler compatibility.
abi_exemplar = find_spec(spec, lambda x: x.compiler)
- if not abi_exemplar:
+ if abi_exemplar is None:
abi_exemplar = spec.root
- # Make a list including ABI compatibility of specs with the exemplar.
- strict = [spack.abi.compatible(c, abi_exemplar) for c in candidates]
- loose = [spack.abi.compatible(c, abi_exemplar, loose=True)
- for c in candidates]
- keys = zip(strict, loose, candidates)
-
# Sort candidates from most to least compatibility.
- # Note:
- # 1. We reverse because True > False.
- # 2. Sort is stable, so c's keep their order.
- keys.sort(key=lambda k: k[:2], reverse=True)
-
- # Pull the candidates back out and return them in order
- candidates = [c for s, l, c in keys]
- return candidates
+ # We reverse because True > False.
+ # Sort is stable, so candidates keep their order.
+ return sorted(candidates,
+ reverse=True,
+ key=lambda spec: (
+ spack.abi.compatible(spec, abi_exemplar, loose=True),
+ spack.abi.compatible(spec, abi_exemplar)))
def concretize_version(self, spec):
"""If the spec is already concrete, return. Otherwise take
@@ -162,26 +145,12 @@ class DefaultConcretizer(object):
if spec.versions.concrete:
return False
- # If there are known available versions, return the most recent
- # version that satisfies the spec
- pkg = spec.package
-
- # ---------- Produce prioritized list of versions
- # Get list of preferences from packages.yaml
- preferred = pkgsort()
- # NOTE: pkgsort() == spack.package_prefs.PreferredPackages()
-
- yaml_specs = [
- x[0] for x in
- preferred._spec_for_pkgname(spec.name, 'version', None)]
- n = len(yaml_specs)
- yaml_index = dict(
- [(spc, n - index) for index, spc in enumerate(yaml_specs)])
-
# List of versions we could consider, in sorted order
- unsorted_versions = [
- v for v in pkg.versions
- if any(v.satisfies(sv) for sv in spec.versions)]
+ pkg_versions = spec.package_class.versions
+ usable = [v for v in pkg_versions
+ if any(v.satisfies(sv) for sv in spec.versions)]
+
+ yaml_prefs = PackagePrefs(spec.name, 'version')
# The keys below show the order of precedence of factors used
# to select a version when concretizing. The item with
@@ -189,15 +158,14 @@ class DefaultConcretizer(object):
#
# NOTE: When COMPARING VERSIONS, the '@develop' version is always
# larger than other versions. BUT when CONCRETIZING,
- # the largest NON-develop version is selected by
- # default.
- keys = [(
+ # the largest NON-develop version is selected by default.
+ keyfn = lambda v: (
# ------- Special direction from the user
# Respect order listed in packages.yaml
- yaml_index.get(v, -1),
+ -yaml_prefs(v),
# The preferred=True flag (packages or packages.yaml or both?)
- pkg.versions.get(Version(v)).get('preferred', False),
+ pkg_versions.get(Version(v)).get('preferred', False),
# ------- Regular case: use latest non-develop version by default.
# Avoid @develop version, which would otherwise be the "largest"
@@ -209,15 +177,11 @@ class DefaultConcretizer(object):
# a) develop > everything (disabled by "not v.isdevelop() above)
# b) numeric > non-numeric
# c) Numeric or string comparison
- v) for v in unsorted_versions]
- keys.sort(reverse=True)
+ v)
+ usable.sort(key=keyfn, reverse=True)
- # List of versions in complete sorted order
- valid_versions = [x[-1] for x in keys]
- # --------------------------
-
- if valid_versions:
- spec.versions = ver([valid_versions[0]])
+ if usable:
+ spec.versions = ver([usable[0]])
else:
# We don't know of any SAFE versions that match the given
# spec. Grab the spec's versions and grab the highest
@@ -241,7 +205,7 @@ class DefaultConcretizer(object):
def concretize_architecture(self, spec):
"""If the spec is empty provide the defaults of the platform. If the
- architecture is not a basestring, then check if either the platform,
+ architecture is not a string type, then check if either the platform,
target or operating system are concretized. If any of the fields are
changed then return True. If everything is concretized (i.e the
architecture attribute is a namedtuple of classes) then return False.
@@ -258,16 +222,20 @@ class DefaultConcretizer(object):
spec.architecture = spack.spec.ArchSpec(sys_arch)
spec_changed = True
- default_archs = [root_arch, sys_arch]
- while not spec.architecture.concrete and default_archs:
- arch = default_archs.pop(0)
+ default_archs = list(x for x in [root_arch, sys_arch] if x)
+ for arch in default_archs:
+ if spec.architecture.concrete:
+ break
- replacement_fields = [k for k, v in arch.to_cmp_dict().iteritems()
+ replacement_fields = [k for k, v in iteritems(arch.to_cmp_dict())
if v and not getattr(spec.architecture, k)]
for field in replacement_fields:
setattr(spec.architecture, field, getattr(arch, field))
spec_changed = True
+ if not spec.architecture.concrete:
+ raise InsufficientArchitectureInfoError(spec, default_archs)
+
return spec_changed
def concretize_variants(self, spec):
@@ -276,16 +244,16 @@ class DefaultConcretizer(object):
the package specification.
"""
changed = False
- preferred_variants = pkgsort().spec_preferred_variants(
- spec.package_class.name)
- for name, variant in spec.package_class.variants.items():
+ preferred_variants = PackagePrefs.preferred_variants(spec.name)
+ pkg_cls = spec.package_class
+ for name, variant in pkg_cls.variants.items():
if name not in spec.variants:
changed = True
if name in preferred_variants:
spec.variants[name] = preferred_variants.get(name)
else:
- spec.variants[name] = \
- spack.spec.VariantSpec(name, variant.default)
+ spec.variants[name] = variant.make_default()
+
return changed
def concretize_compiler(self, spec):
@@ -315,39 +283,45 @@ class DefaultConcretizer(object):
def _proper_compiler_style(cspec, aspec):
return spack.compilers.compilers_for_spec(cspec, arch_spec=aspec)
- all_compilers = spack.compilers.all_compilers()
+ all_compiler_specs = spack.compilers.all_compiler_specs()
+ if not all_compiler_specs:
+ raise spack.compilers.NoCompilersError()
if (spec.compiler and
spec.compiler.concrete and
- spec.compiler in all_compilers):
+ spec.compiler in all_compiler_specs):
+ if not _proper_compiler_style(spec.compiler, spec.architecture):
+ _compiler_concretization_failure(
+ spec.compiler, spec.architecture)
return False
- # Find the another spec that has a compiler, or the root if none do
+ # Find another spec that has a compiler, or the root if none do
other_spec = spec if spec.compiler else find_spec(
- spec, lambda x: x.compiler)
-
- if not other_spec:
- other_spec = spec.root
+ spec, lambda x: x.compiler, spec.root)
other_compiler = other_spec.compiler
assert(other_spec)
# Check if the compiler is already fully specified
- if other_compiler in all_compilers:
+ if other_compiler in all_compiler_specs:
spec.compiler = other_compiler.copy()
+ if not _proper_compiler_style(spec.compiler, spec.architecture):
+ _compiler_concretization_failure(
+ spec.compiler, spec.architecture)
return True
# Filter the compilers into a sorted list based on the compiler_order
# from spackconfig
- compiler_list = all_compilers if not other_compiler else \
+ compiler_list = all_compiler_specs if not other_compiler else \
spack.compilers.find(other_compiler)
- cmp_compilers = partial(
- pkgsort().compiler_compare, other_spec.name)
- matches = sorted(compiler_list, cmp=cmp_compilers)
- if not matches:
- arch = spec.architecture
- raise UnavailableCompilerVersionError(other_compiler,
- arch.platform_os,
- arch.target)
+ if not compiler_list:
+ # No compiler with a satisfactory spec was found
+ raise UnavailableCompilerVersionError(other_compiler)
+
+ # By default, prefer later versions of compilers
+ compiler_list = sorted(
+ compiler_list, key=lambda x: (x.name, x.version), reverse=True)
+ ppk = PackagePrefs(other_spec.name, 'compiler')
+ matches = sorted(compiler_list, key=ppk)
# copy concrete version into other_compiler
try:
@@ -355,10 +329,9 @@ class DefaultConcretizer(object):
c for c in matches
if _proper_compiler_style(c, spec.architecture)).copy()
except StopIteration:
- raise UnavailableCompilerVersionError(
- spec.compiler, spec.architecture.platform_os,
- spec.architecture.target
- )
+ # No compiler with a satisfactory spec has a suitable arch
+ _compiler_concretization_failure(
+ other_compiler, spec.architecture)
assert(spec.compiler.concrete)
return True # things changed.
@@ -377,41 +350,29 @@ class DefaultConcretizer(object):
# running.
return True
+ compiler_match = lambda other: (
+ spec.compiler == other.compiler and
+ spec.architecture == other.architecture)
+
ret = False
for flag in spack.spec.FlagMap.valid_compiler_flags():
+ if flag not in spec.compiler_flags:
+ spec.compiler_flags[flag] = list()
try:
nearest = next(p for p in spec.traverse(direction='parents')
- if ((p.compiler == spec.compiler and
- p is not spec) and
+ if (compiler_match(p) and
+ (p is not spec) and
flag in p.compiler_flags))
- if flag not in spec.compiler_flags or \
- not (sorted(spec.compiler_flags[flag]) >=
- sorted(nearest.compiler_flags[flag])):
- if flag in spec.compiler_flags:
- spec.compiler_flags[flag] = list(
- set(spec.compiler_flags[flag]) |
- set(nearest.compiler_flags[flag]))
- else:
- spec.compiler_flags[
- flag] = nearest.compiler_flags[flag]
+ nearest_flags = set(nearest.compiler_flags.get(flag, []))
+ flags = set(spec.compiler_flags.get(flag, []))
+ if (nearest_flags - flags):
+ # TODO: these set operations may reorder the flags, which
+ # for some orders of flags can be invalid. See:
+ # https://github.com/spack/spack/issues/6154#issuecomment-342365573
+ spec.compiler_flags[flag] = list(nearest_flags | flags)
ret = True
-
except StopIteration:
- if (flag in spec.root.compiler_flags and
- ((flag not in spec.compiler_flags) or
- sorted(spec.compiler_flags[flag]) !=
- sorted(spec.root.compiler_flags[flag]))):
- if flag in spec.compiler_flags:
- spec.compiler_flags[flag] = list(
- set(spec.compiler_flags[flag]) |
- set(spec.root.compiler_flags[flag]))
- else:
- spec.compiler_flags[
- flag] = spec.root.compiler_flags[flag]
- ret = True
- else:
- if flag not in spec.compiler_flags:
- spec.compiler_flags[flag] = []
+ pass
# Include the compiler flag defaults from the config files
# This ensures that spack will detect conflicts that stem from a change
@@ -419,24 +380,16 @@ class DefaultConcretizer(object):
compiler = spack.compilers.compiler_for_spec(
spec.compiler, spec.architecture)
for flag in compiler.flags:
- if flag not in spec.compiler_flags:
- spec.compiler_flags[flag] = compiler.flags[flag]
- if compiler.flags[flag] != []:
- ret = True
- else:
- if ((sorted(spec.compiler_flags[flag]) !=
- sorted(compiler.flags[flag])) and
- (not set(spec.compiler_flags[flag]) >=
- set(compiler.flags[flag]))):
- ret = True
- spec.compiler_flags[flag] = list(
- set(spec.compiler_flags[flag]) |
- set(compiler.flags[flag]))
+ config_flags = set(compiler.flags.get(flag, []))
+ flags = set(spec.compiler_flags.get(flag, []))
+ spec.compiler_flags[flag] = list(config_flags | flags)
+ if (config_flags - flags):
+ ret = True
return ret
-def find_spec(spec, condition):
+def find_spec(spec, condition, default=None):
"""Searches the dag from spec in an intelligent order and looks
for a spec that matches a condition"""
# First search parents, then search children
@@ -451,7 +404,7 @@ def find_spec(spec, condition):
visited.add(id(relative))
# Then search all other relatives in the DAG *except* spec
- for relative in spec.root.traverse(deptypes=spack.alldeps):
+ for relative in spec.root.traverse(deptypes=all):
if relative is spec:
continue
if id(relative) in visited:
@@ -463,24 +416,59 @@ def find_spec(spec, condition):
if condition(spec):
return spec
- return None # Nothing matched the condition.
+ return default # Nothing matched the condition; return default.
-class UnavailableCompilerVersionError(spack.error.SpackError):
+def _compiler_concretization_failure(compiler_spec, arch):
+ # Distinguish between the case that there are compilers for
+ # the arch but not with the given compiler spec and the case that
+ # there are no compilers for the arch at all
+ if not spack.compilers.compilers_for_arch(arch):
+ available_os_targets = set(
+ (c.operating_system, c.target) for c in
+ spack.compilers.all_compilers())
+ raise NoCompilersForArchError(arch, available_os_targets)
+ else:
+ raise UnavailableCompilerVersionError(compiler_spec, arch)
+
+class NoCompilersForArchError(spack.error.SpackError):
+ def __init__(self, arch, available_os_targets):
+ err_msg = ("No compilers found"
+ " for operating system %s and target %s."
+ "\nIf previous installations have succeeded, the"
+ " operating system may have been updated." %
+ (arch.platform_os, arch.target))
+
+ available_os_target_strs = list()
+ for os, t in available_os_targets:
+ os_target_str = "%s-%s" % (os, t) if t else os
+ available_os_target_strs.append(os_target_str)
+ err_msg += (
+ "\nCompilers are defined for the following"
+ " operating systems and targets:\n\t" +
+ "\n\t".join(available_os_target_strs))
+
+ super(NoCompilersForArchError, self).__init__(
+ err_msg, "Run 'spack compiler find' to add compilers.")
+
+
+class UnavailableCompilerVersionError(spack.error.SpackError):
"""Raised when there is no available compiler that satisfies a
compiler spec."""
- def __init__(self, compiler_spec, operating_system, target):
+ def __init__(self, compiler_spec, arch=None):
+ err_msg = "No compilers with spec {0} found".format(compiler_spec)
+ if arch:
+ err_msg += " for operating system {0} and target {1}.".format(
+ arch.platform_os, arch.target
+ )
+
super(UnavailableCompilerVersionError, self).__init__(
- "No available compiler version matches '%s' on operating_system %s"
- "for target %s"
- % (compiler_spec, operating_system, target),
- "Run 'spack compilers' to see available compiler Options.")
+ err_msg, "Run 'spack compiler find' to add compilers.")
class NoValidVersionError(spack.error.SpackError):
-
"""Raised when there is no way to have a concrete version for a
particular spec."""
@@ -490,6 +478,17 @@ class NoValidVersionError(spack.error.SpackError):
% (spec.name, spec.versions))
+class InsufficientArchitectureInfoError(spack.error.SpackError):
+
+ """Raised when details on architecture cannot be collected from the
+ system"""
+
+ def __init__(self, spec, archs):
+ super(InsufficientArchitectureInfoError, self).__init__(
+ "Cannot determine necessary architecture information for '%s': %s"
+ % (spec.name, str(archs)))
+
+
class NoBuildError(spack.error.SpackError):
"""Raised when a package is configured with the buildable option False, but
no satisfactory external versions can be found"""
diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py
index 56c6421457..4be407fd68 100644
--- a/lib/spack/spack/config.py
+++ b/lib/spack/spack/config.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,7 @@ documentation on :ref:`configuration-scopes` for details on how Spack's
configuration system behaves. The scopes are:
#. ``default``
+ #. ``system``
#. ``site``
#. ``user``
@@ -52,6 +53,8 @@ import copy
import os
import re
import sys
+from six import string_types
+from six import iteritems
import yaml
import jsonschema
@@ -108,7 +111,7 @@ def extend_with_default(validator_class):
"patternProperties"]
def set_defaults(validator, properties, instance, schema):
- for property, subschema in properties.iteritems():
+ for property, subschema in iteritems(properties):
if "default" in subschema:
instance.setdefault(property, subschema["default"])
for err in validate_properties(
@@ -116,10 +119,10 @@ def extend_with_default(validator_class):
yield err
def set_pp_defaults(validator, properties, instance, schema):
- for property, subschema in properties.iteritems():
+ for property, subschema in iteritems(properties):
if "default" in subschema:
if isinstance(instance, dict):
- for key, val in instance.iteritems():
+ for key, val in iteritems(instance):
if re.match(property, key) and val is None:
instance[key] = subschema["default"]
@@ -159,7 +162,7 @@ class ConfigScope(object):
def __init__(self, name, path):
self.name = name # scope name.
self.path = path # path to directory containing configs.
- self.sections = {} # sections read from config files.
+ self.sections = syaml.syaml_dict() # sections read from config files.
# Register in a dict of all ConfigScopes
# TODO: make this cleaner. Mocking up for testing is brittle.
@@ -194,7 +197,7 @@ class ConfigScope(object):
def clear(self):
"""Empty cached config information."""
- self.sections = {}
+ self.sections = syaml.syaml_dict()
def __repr__(self):
return '<ConfigScope: %s: %s>' % (self.name, self.path)
@@ -209,11 +212,17 @@ class ConfigScope(object):
_platform = spack.architecture.platform().name
"""Default configuration scope is the lowest-level scope. These are
- versioned with Spack and can be overridden by sites or users."""
+ versioned with Spack and can be overridden by systems, sites or users."""
_defaults_path = os.path.join(spack.etc_path, 'spack', 'defaults')
ConfigScope('defaults', _defaults_path)
ConfigScope('defaults/%s' % _platform, os.path.join(_defaults_path, _platform))
+"""System configuration is per machine.
+ No system-level configs should be checked into spack by default"""
+_system_path = os.path.join(spack.system_etc_path, 'spack')
+ConfigScope('system', _system_path)
+ConfigScope('system/%s' % _platform, os.path.join(_system_path, _platform))
+
"""Site configuration is per spack instance, for sites or projects.
No site-level configs should be checked into spack by default."""
_site_path = os.path.join(spack.etc_path, 'spack')
@@ -305,9 +314,9 @@ def _mark_overrides(data):
return [_mark_overrides(elt) for elt in data]
elif isinstance(data, dict):
- marked = {}
- for key, val in data.iteritems():
- if isinstance(key, basestring) and key.endswith(':'):
+ marked = syaml.syaml_dict()
+ for key, val in iteritems(data):
+ if isinstance(key, string_types) and key.endswith(':'):
key = syaml.syaml_str(key[:-1])
key.override = True
marked[key] = _mark_overrides(val)
@@ -348,7 +357,7 @@ def _merge_yaml(dest, source):
# Source dict is merged into dest.
elif they_are(dict):
- for sk, sv in source.iteritems():
+ for sk, sv in iteritems(source):
if override(sk) or sk not in dest:
# if sk ended with ::, or if it's new, completely override
dest[sk] = copy.copy(sv)
@@ -396,6 +405,7 @@ def get_config(section, scope=None):
for scope in scopes:
# read potentially cached data from the scope.
+
data = scope.get_section(section)
# Skip empty configs
diff --git a/lib/spack/spack/database.py b/lib/spack/spack/database.py
index ff55223351..fd4aae00cd 100644
--- a/lib/spack/spack/database.py
+++ b/lib/spack/spack/database.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,31 +40,36 @@ filesystem.
"""
import os
+import sys
import socket
+import contextlib
+from six import string_types
+from six import iteritems
from yaml.error import MarkedYAMLError, YAMLError
import llnl.util.tty as tty
-from llnl.util.filesystem import *
-from llnl.util.lock import *
+from llnl.util.filesystem import join_path, mkdirp
+from llnl.util.lock import Lock, WriteTransaction, ReadTransaction
import spack.store
import spack.repository
-from spack.directory_layout import DirectoryLayoutError
-from spack.version import Version
import spack.spec
-from spack.error import SpackError
import spack.util.spack_yaml as syaml
import spack.util.spack_json as sjson
+from spack.util.crypto import bit_length
+from spack.directory_layout import DirectoryLayoutError
+from spack.error import SpackError
+from spack.version import Version
# DB goes in this directory underneath the root
_db_dirname = '.spack-db'
# DB version. This is stuck in the DB file to track changes in format.
-_db_version = Version('0.9.2')
+_db_version = Version('0.9.3')
-# Default timeout for spack database locks is 5 min.
+# Timeout for spack database locks in seconds
_db_lock_timeout = 60
# Types of dependencies tracked by the database
@@ -125,6 +130,9 @@ class InstallRecord(object):
class Database(object):
+ """Per-process lock objects for each install prefix."""
+ _prefix_locks = {}
+
def __init__(self, root, db_dir=None):
"""Create a Database for Spack installations under ``root``.
@@ -183,6 +191,47 @@ class Database(object):
"""Get a read lock context manager for use in a `with` block."""
return ReadTransaction(self.lock, self._read, timeout=timeout)
+ def prefix_lock(self, spec):
+ """Get a lock on a particular spec's installation directory.
+
+ NOTE: The installation directory **does not** need to exist.
+
+ Prefix lock is a byte range lock on the nth byte of a file.
+
+ The lock file is ``spack.store.db.prefix_lock`` -- the DB
+ tells us what to call it and it lives alongside the install DB.
+
+ n is the sys.maxsize-bit prefix of the DAG hash. This makes
+ likelihood of collision is very low AND it gives us
+ readers-writer lock semantics with just a single lockfile, so no
+ cleanup required.
+ """
+ prefix = spec.prefix
+ if prefix not in self._prefix_locks:
+ self._prefix_locks[prefix] = Lock(
+ self.prefix_lock_path,
+ spec.dag_hash_bit_prefix(bit_length(sys.maxsize)), 1)
+
+ return self._prefix_locks[prefix]
+
+ @contextlib.contextmanager
+ def prefix_read_lock(self, spec):
+ prefix_lock = self.prefix_lock(spec)
+ try:
+ prefix_lock.acquire_read(60)
+ yield self
+ finally:
+ prefix_lock.release_read()
+
+ @contextlib.contextmanager
+ def prefix_write_lock(self, spec):
+ prefix_lock = self.prefix_lock(spec)
+ try:
+ prefix_lock.acquire_write(60)
+ yield self
+ finally:
+ prefix_lock.release_write()
+
def _write_to_file(self, stream):
"""Write out the databsae to a JSON file.
@@ -239,7 +288,7 @@ class Database(object):
if dhash not in data:
tty.warn("Missing dependency not in database: ",
"%s needs %s-%s" % (
- spec.format('$_$#'), dname, dhash[:7]))
+ spec.cformat('$_$/'), dname, dhash[:7]))
continue
child = data[dhash].spec
@@ -260,7 +309,7 @@ class Database(object):
raise ValueError("Invalid database format: %s" % format)
try:
- if isinstance(stream, basestring):
+ if isinstance(stream, string_types):
with open(stream, 'r') as f:
fdata = load(f)
else:
@@ -360,24 +409,39 @@ class Database(object):
self._data = {}
transaction = WriteTransaction(
- self.lock, _read_suppress_error, self._write, _db_lock_timeout)
+ self.lock, _read_suppress_error, self._write, _db_lock_timeout
+ )
with transaction:
if self._error:
tty.warn(
"Spack database was corrupt. Will rebuild. Error was:",
- str(self._error))
+ str(self._error)
+ )
self._error = None
+ # Read first the `spec.yaml` files in the prefixes. They should be
+ # considered authoritative with respect to DB reindexing, as
+ # entries in the DB may be corrupted in a way that still makes
+ # them readable. If we considered DB entries authoritative
+ # instead, we would perpetuate errors over a reindex.
+
old_data = self._data
try:
+ # Initialize data in the reconstructed DB
self._data = {}
- # Ask the directory layout to traverse the filesystem.
+ # Start inspecting the installed prefixes
+ processed_specs = set()
+
for spec in directory_layout.all_specs():
# Try to recover explicit value from old DB, but
- # default it to False if DB was corrupt.
- explicit = False
+ # default it to True if DB was corrupt. This is
+ # just to be conservative in case a command like
+ # "autoremove" is run by the user after a reindex.
+ tty.debug(
+ 'RECONSTRUCTING FROM SPEC.YAML: {0}'.format(spec))
+ explicit = True
if old_data is not None:
old_info = old_data.get(spec.dag_hash())
if old_info is not None:
@@ -385,9 +449,49 @@ class Database(object):
self._add(spec, directory_layout, explicit=explicit)
+ processed_specs.add(spec)
+
+ for key, entry in old_data.items():
+ # We already took care of this spec using
+ # `spec.yaml` from its prefix.
+ if entry.spec in processed_specs:
+ msg = 'SKIPPING RECONSTRUCTION FROM OLD DB: {0}'
+ msg += ' [already reconstructed from spec.yaml]'
+ tty.debug(msg.format(entry.spec))
+ continue
+
+ # If we arrived here it very likely means that
+ # we have external specs that are not dependencies
+ # of other specs. This may be the case for externally
+ # installed compilers or externally installed
+ # applications.
+ tty.debug(
+ 'RECONSTRUCTING FROM OLD DB: {0}'.format(entry.spec))
+ try:
+ layout = spack.store.layout
+ if entry.spec.external:
+ layout = None
+ install_check = True
+ else:
+ install_check = layout.check_installed(entry.spec)
+
+ if install_check:
+ kwargs = {
+ 'spec': entry.spec,
+ 'directory_layout': layout,
+ 'explicit': entry.explicit
+ }
+ self._add(**kwargs)
+ processed_specs.add(entry.spec)
+ except Exception as e:
+ # Something went wrong, so the spec was not restored
+ # from old data
+ tty.debug(e.message)
+ pass
+
self._check_ref_counts()
- except:
+ except BaseException:
# If anything explodes, restore old data, skip write.
self._data = old_data
raise
@@ -440,7 +544,7 @@ class Database(object):
with open(temp_file, 'w') as f:
self._write_to_file(f)
os.rename(temp_file, self._index_path)
- except:
+ except BaseException:
# Clean up temp file if something goes wrong.
if os.path.exists(temp_file):
os.remove(temp_file)
@@ -471,6 +575,8 @@ class Database(object):
else:
# The file doesn't exist, try to traverse the directory.
# reindex() takes its own write lock, so no lock here.
+ with WriteTransaction(self.lock, timeout=_db_lock_timeout):
+ self._write(None, None, None)
self.reindex(spack.store.layout)
def _add(self, spec, directory_layout=None, explicit=False):
@@ -493,7 +599,7 @@ class Database(object):
key = spec.dag_hash()
if key not in self._data:
- installed = False
+ installed = bool(spec.external)
path = None
if not spec.external and directory_layout:
path = directory_layout.path_for_spec(spec)
@@ -511,7 +617,7 @@ class Database(object):
new_spec, path, installed, ref_count=0, explicit=explicit)
# Connect dependencies from the DB to the new copy.
- for name, dep in spec.dependencies_dict(_tracked_deps).iteritems():
+ for name, dep in iteritems(spec.dependencies_dict(_tracked_deps)):
dkey = dep.spec.dag_hash()
new_spec._add_dependency(self._data[dkey].spec, dep.deptypes)
self._data[dkey].ref_count += 1
@@ -605,13 +711,34 @@ class Database(object):
return self._remove(spec)
@_autospec
- def installed_dependents(self, spec):
- """List the installed specs that depend on this one."""
- dependents = set()
+ def installed_relatives(self, spec, direction='children', transitive=True):
+ """Return installed specs related to this one."""
+ if direction not in ('parents', 'children'):
+ raise ValueError("Invalid direction: %s" % direction)
+
+ relatives = set()
for spec in self.query(spec):
- for dependent in spec.traverse(direction='parents', root=False):
- dependents.add(dependent)
- return dependents
+ if transitive:
+ to_add = spec.traverse(direction=direction, root=False)
+ elif direction == 'parents':
+ to_add = spec.dependents()
+ else: # direction == 'children'
+ to_add = spec.dependencies()
+
+ for relative in to_add:
+ hash_key = relative.dag_hash()
+ if hash_key not in self._data:
+ reltype = ('Dependent' if direction == 'parents'
+ else 'Dependency')
+ tty.warn("Inconsistent state! %s %s of %s not in DB"
+ % (reltype, hash_key, spec.dag_hash()))
+ continue
+
+ if not self._data[hash_key].installed:
+ continue
+
+ relatives.add(relative)
+ return relatives
@_autospec
def installed_extensions_for(self, extendee_spec):
@@ -619,13 +746,24 @@ class Database(object):
Return the specs of all packages that extend
the given spec
"""
- for s in self.query():
+ for spec in self.query():
+ if spec.package.extends(extendee_spec):
+ yield spec.package
+
+ @_autospec
+ def activated_extensions_for(self, extendee_spec, extensions_layout=None):
+ """
+ Return the specs of all packages that extend
+ the given spec
+ """
+ if extensions_layout is None:
+ extensions_layout = spack.store.extensions
+ for spec in self.query():
try:
- if s.package.extends(extendee_spec):
- yield s.package
- except spack.repository.UnknownPackageError:
+ extensions_layout.check_activated(extendee_spec, spec)
+ yield spec.package
+ except spack.directory_layout.NoSuchExtensionError:
continue
- # skips unknown packages
# TODO: conditional way to do this instead of catching exceptions
def query(self, query_spec=any, known=any, installed=True, explicit=any):
diff --git a/lib/spack/spack/dependency.py b/lib/spack/spack/dependency.py
new file mode 100644
index 0000000000..99a16c9d45
--- /dev/null
+++ b/lib/spack/spack/dependency.py
@@ -0,0 +1,132 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""Data structures that represent Spack's dependency relationships.
+"""
+from six import string_types
+
+import spack
+
+
+#: The types of dependency relationships that Spack understands.
+all_deptypes = ('build', 'link', 'run', 'test')
+
+#: Default dependency type if none is specified
+default_deptype = ('build', 'link')
+
+
+def canonical_deptype(deptype):
+ """Convert deptype to a canonical sorted tuple, or raise ValueError.
+
+ Args:
+ deptype (str or list or tuple): string representing dependency
+ type, or a list/tuple of such strings. Can also be the
+ builtin function ``all`` or the string 'all', which result in
+ a tuple of all dependency types known to Spack.
+ """
+ if deptype in ('all', all):
+ return all_deptypes
+
+ elif isinstance(deptype, string_types):
+ if deptype not in all_deptypes:
+ raise ValueError('Invalid dependency type: %s' % deptype)
+ return (deptype,)
+
+ elif isinstance(deptype, (tuple, list)):
+ bad = [d for d in deptype if d not in all_deptypes]
+ if bad:
+ raise ValueError(
+ 'Invalid dependency types: %s' % ','.join(str(t) for t in bad))
+ return tuple(sorted(deptype))
+
+ elif deptype is None:
+ raise ValueError('Invalid dependency type: None')
+
+ return deptype
+
+
+class Dependency(object):
+ """Class representing metadata for a dependency on a package.
+
+ This class differs from ``spack.spec.DependencySpec`` because it
+ represents metadata at the ``Package`` level.
+ ``spack.spec.DependencySpec`` is a descriptor for an actual package
+ confiuguration, while ``Dependency`` is a descriptor for a package's
+ dependency *requirements*.
+
+ A dependency is a requirement for a configuration of another package
+ that satisfies a particular spec. The dependency can have *types*,
+ which determine *how* that package configuration is required,
+ e.g. whether it is required for building the package, whether it
+ needs to be linked to, or whether it is needed at runtime so that
+ Spack can call commands from it.
+
+ A package can also depend on another package with *patches*. This is
+ for cases where the maintainers of one package also maintain special
+ patches for their dependencies. If one package depends on another
+ with patches, a special version of that dependency with patches
+ applied will be built for use by the dependent package. The patches
+ are included in the new version's spec hash to differentiate it from
+ unpatched versions of the same package, so that unpatched versions of
+ the dependency package can coexist with the patched version.
+
+ """
+ def __init__(self, pkg, spec, type=default_deptype):
+ """Create a new Dependency.
+
+ Args:
+ pkg (type): Package that has this dependency
+ spec (Spec): Spec indicating dependency requirements
+ type (sequence): strings describing dependency relationship
+ """
+ assert isinstance(spec, spack.spec.Spec)
+
+ self.pkg = pkg
+ self.spec = spec.copy()
+
+ # This dict maps condition specs to lists of Patch objects, just
+ # as the patches dict on packages does.
+ self.patches = {}
+
+ if type is None:
+ self.type = set(default_deptype)
+ else:
+ self.type = set(type)
+
+ @property
+ def name(self):
+ """Get the name of the dependency package."""
+ return self.spec.name
+
+ def merge(self, other):
+ """Merge constraints, deptypes, and patches of other into self."""
+ self.spec.constrain(other.spec)
+ self.type |= other.type
+
+ # concatenate patch lists, or just copy them in
+ for cond, p in other.patches.items():
+ if cond in self.patches:
+ self.patches[cond].extend(other.patches[cond])
+ else:
+ self.patches[cond] = other.patches[cond]
diff --git a/lib/spack/spack/directives.py b/lib/spack/spack/directives.py
index 58eabb9e3b..7255875541 100644
--- a/lib/spack/spack/directives.py
+++ b/lib/spack/spack/directives.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -51,13 +51,16 @@ import functools
import inspect
import os.path
import re
+from six import string_types
import llnl.util.lang
+from llnl.util.filesystem import join_path
+
import spack
import spack.error
import spack.spec
import spack.url
-from llnl.util.filesystem import join_path
+from spack.dependency import Dependency, default_deptype, canonical_deptype
from spack.fetch_strategy import from_kwargs
from spack.patch import Patch
from spack.resource import Resource
@@ -67,6 +70,9 @@ from spack.version import Version
__all__ = []
+#: These are variant names used by Spack internally; packages can't use them
+reserved_names = ['patches']
+
class DirectiveMetaMixin(type):
"""Flushes the directives that were temporarily stored in the staging
@@ -88,30 +94,26 @@ class DirectiveMetaMixin(type):
try:
directive_from_base = base._directives_to_be_executed
attr_dict['_directives_to_be_executed'].extend(
- directive_from_base
- )
+ directive_from_base)
except AttributeError:
# The base class didn't have the required attribute.
# Continue searching
pass
+
# De-duplicates directives from base classes
attr_dict['_directives_to_be_executed'] = [
x for x in llnl.util.lang.dedupe(
- attr_dict['_directives_to_be_executed']
- )
- ]
+ attr_dict['_directives_to_be_executed'])]
# Move things to be executed from module scope (where they
# are collected first) to class scope
if DirectiveMetaMixin._directives_to_be_executed:
attr_dict['_directives_to_be_executed'].extend(
- DirectiveMetaMixin._directives_to_be_executed
- )
+ DirectiveMetaMixin._directives_to_be_executed)
DirectiveMetaMixin._directives_to_be_executed = []
return super(DirectiveMetaMixin, mcs).__new__(
- mcs, name, bases, attr_dict
- )
+ mcs, name, bases, attr_dict)
def __init__(cls, name, bases, attr_dict):
# The class is being created: if it is a package we must ensure
@@ -122,13 +124,19 @@ class DirectiveMetaMixin(type):
# from llnl.util.lang.get_calling_module_name
pkg_name = module.__name__.split('.')[-1]
setattr(cls, 'name', pkg_name)
+
# Ensure the presence of the dictionaries associated
# with the directives
for d in DirectiveMetaMixin._directive_names:
setattr(cls, d, {})
- # Lazy execution of directives
- for command in cls._directives_to_be_executed:
- command(cls)
+
+ # Lazily execute directives
+ for directive in cls._directives_to_be_executed:
+ directive(cls)
+
+ # Ignore any directives executed *within* top-level
+ # directives by clearing out the queue they're appended to
+ DirectiveMetaMixin._directives_to_be_executed = []
super(DirectiveMetaMixin, cls).__init__(name, bases, attr_dict)
@@ -174,7 +182,7 @@ class DirectiveMetaMixin(type):
"""
global __all__
- if isinstance(dicts, basestring):
+ if isinstance(dicts, string_types):
dicts = (dicts, )
if not isinstance(dicts, collections.Sequence):
message = "dicts arg must be list, tuple, or string. Found {0}"
@@ -188,15 +196,44 @@ class DirectiveMetaMixin(type):
@functools.wraps(decorated_function)
def _wrapper(*args, **kwargs):
+ # If any of the arguments are executors returned by a
+ # directive passed as an argument, don't execute them
+ # lazily. Instead, let the called directive handle them.
+ # This allows nested directive calls in packages. The
+ # caller can return the directive if it should be queued.
+ def remove_directives(arg):
+ directives = DirectiveMetaMixin._directives_to_be_executed
+ if isinstance(arg, (list, tuple)):
+ # Descend into args that are lists or tuples
+ for a in arg:
+ remove_directives(a)
+ else:
+ # Remove directives args from the exec queue
+ remove = next(
+ (d for d in directives if d is arg), None)
+ if remove is not None:
+ directives.remove(remove)
+
+ # Nasty, but it's the best way I can think of to avoid
+ # side effects if directive results are passed as args
+ remove_directives(args)
+ remove_directives(kwargs.values())
+
# A directive returns either something that is callable on a
# package or a sequence of them
- values = decorated_function(*args, **kwargs)
+ result = decorated_function(*args, **kwargs)
# ...so if it is not a sequence make it so
+ values = result
if not isinstance(values, collections.Sequence):
values = (values, )
DirectiveMetaMixin._directives_to_be_executed.extend(values)
+
+ # wrapped function returns same result as original so
+ # that we can nest directives
+ return result
+
return _wrapper
return _decorator
@@ -212,7 +249,7 @@ def version(ver, checksum=None, **kwargs):
dictionary. Package must turn it into a valid fetch strategy
later.
"""
- def _execute(pkg):
+ def _execute_version(pkg):
# TODO: checksum vs md5 distinction is confusing -- fix this.
# special case checksum for backward compatibility
if checksum:
@@ -220,10 +257,10 @@ def version(ver, checksum=None, **kwargs):
# Store kwargs for the package to later with a fetch_strategy.
pkg.versions[Version(ver)] = kwargs
- return _execute
+ return _execute_version
-def _depends_on(pkg, spec, when=None, type=None):
+def _depends_on(pkg, spec, when=None, type=default_deptype, patches=None):
# If when is False do nothing
if when is False:
return
@@ -232,48 +269,98 @@ def _depends_on(pkg, spec, when=None, type=None):
when = pkg.name
when_spec = parse_anonymous_spec(when, pkg.name)
- if type is None:
- # The default deptype is build and link because the common case is to
- # build against a library which then turns into a runtime dependency
- # due to the linker.
- # XXX(deptype): Add 'run' to this? It's an uncommon dependency type,
- # but is most backwards-compatible.
- type = ('build', 'link')
-
- if isinstance(type, str):
- type = spack.spec.special_types.get(type, (type,))
-
- for deptype in type:
- if deptype not in spack.spec.alldeps:
- raise UnknownDependencyTypeError('depends_on', pkg.name, deptype)
-
dep_spec = Spec(spec)
if pkg.name == dep_spec.name:
- raise CircularReferenceError('depends_on', pkg.name)
-
- pkg_deptypes = pkg.dependency_types.setdefault(dep_spec.name, set())
- for deptype in type:
- pkg_deptypes.add(deptype)
+ raise CircularReferenceError(
+ "Package '%s' cannot depend on itself." % pkg.name)
+ type = canonical_deptype(type)
conditions = pkg.dependencies.setdefault(dep_spec.name, {})
- if when_spec in conditions:
- conditions[when_spec].constrain(dep_spec, deps=False)
+
+ # call this patches here for clarity -- we want patch to be a list,
+ # but the caller doesn't have to make it one.
+ if patches and dep_spec.virtual:
+ raise DependencyPatchError("Cannot patch a virtual dependency.")
+
+ # ensure patches is a list
+ if patches is None:
+ patches = []
+ elif not isinstance(patches, (list, tuple)):
+ patches = [patches]
+
+ # auto-call patch() directive on any strings in patch list
+ patches = [patch(p) if isinstance(p, string_types)
+ else p for p in patches]
+ assert all(callable(p) for p in patches)
+
+ # this is where we actually add the dependency to this package
+ if when_spec not in conditions:
+ dependency = Dependency(pkg, dep_spec, type=type)
+ conditions[when_spec] = dependency
else:
- conditions[when_spec] = dep_spec
+ dependency = conditions[when_spec]
+ dependency.spec.constrain(dep_spec, deps=False)
+ dependency.type |= set(type)
+
+ # apply patches to the dependency
+ for execute_patch in patches:
+ execute_patch(dependency)
+
+
+@directive('conflicts')
+def conflicts(conflict_spec, when=None, msg=None):
+ """Allows a package to define a conflict.
+
+ Currently, a "conflict" is a concretized configuration that is known
+ to be non-valid. For example, a package that is known not to be
+ buildable with intel compilers can declare::
+
+ conflicts('%intel')
+ To express the same constraint only when the 'foo' variant is
+ activated::
-@directive(('dependencies', 'dependency_types'))
-def depends_on(spec, when=None, type=None):
+ conflicts('%intel', when='+foo')
+
+ Args:
+ conflict_spec (Spec): constraint defining the known conflict
+ when (Spec): optional constraint that triggers the conflict
+ msg (str): optional user defined message
+ """
+ def _execute_conflicts(pkg):
+ # If when is not specified the conflict always holds
+ condition = pkg.name if when is None else when
+ when_spec = parse_anonymous_spec(condition, pkg.name)
+
+ # Save in a list the conflicts and the associated custom messages
+ when_spec_list = pkg.conflicts.setdefault(conflict_spec, [])
+ when_spec_list.append((when_spec, msg))
+ return _execute_conflicts
+
+
+@directive(('dependencies'))
+def depends_on(spec, when=None, type=default_deptype, patches=None):
"""Creates a dict of deps with specs defining when they apply.
+
+ Args:
+ spec (Spec or str): the package and constraints depended on
+ when (Spec or str): when the dependent satisfies this, it has
+ the dependency represented by ``spec``
+ type (str or tuple of str): str or tuple of legal Spack deptypes
+ patches (obj or list): single result of ``patch()`` directive, a
+ ``str`` to be passed to ``patch``, or a list of these
+
This directive is to be used inside a Package definition to declare
that the package requires other packages to be built first.
- @see The section "Dependency specs" in the Spack Packaging Guide."""
- def _execute(pkg):
- _depends_on(pkg, spec, when=when, type=type)
- return _execute
+ @see The section "Dependency specs" in the Spack Packaging Guide.
+
+ """
+ def _execute_depends_on(pkg):
+ _depends_on(pkg, spec, when=when, type=type, patches=patches)
+ return _execute_depends_on
-@directive(('extendees', 'dependencies', 'dependency_types'))
+@directive(('extendees', 'dependencies'))
def extends(spec, **kwargs):
"""Same as depends_on, but dependency is symlinked into parent prefix.
@@ -288,7 +375,7 @@ def extends(spec, **kwargs):
mechanism.
"""
- def _execute(pkg):
+ def _execute_extends(pkg):
# if pkg.extendees:
# directive = 'extends'
# msg = 'Packages can extend at most one other package.'
@@ -297,7 +384,7 @@ def extends(spec, **kwargs):
when = kwargs.pop('when', pkg.name)
_depends_on(pkg, spec, when=when)
pkg.extendees[spec] = (Spec(spec), kwargs)
- return _execute
+ return _execute_extends
@directive('provided')
@@ -306,51 +393,109 @@ def provides(*specs, **kwargs):
'mpi', other packages can declare that they depend on "mpi", and spack
can use the providing package to satisfy the dependency.
"""
- def _execute(pkg):
+ def _execute_provides(pkg):
spec_string = kwargs.get('when', pkg.name)
provider_spec = parse_anonymous_spec(spec_string, pkg.name)
for string in specs:
for provided_spec in spack.spec.parse(string):
if pkg.name == provided_spec.name:
- raise CircularReferenceError('depends_on', pkg.name)
+ raise CircularReferenceError(
+ "Package '%s' cannot provide itself.")
+
if provided_spec not in pkg.provided:
pkg.provided[provided_spec] = set()
pkg.provided[provided_spec].add(provider_spec)
- return _execute
+ return _execute_provides
@directive('patches')
-def patch(url_or_filename, level=1, when=None, **kwargs):
+def patch(url_or_filename, level=1, when=None, working_dir=".", **kwargs):
"""Packages can declare patches to apply to source. You can
optionally provide a when spec to indicate that a particular
patch should only be applied when the package's spec meets
certain conditions (e.g. a particular version).
+
+ Args:
+ url_or_filename (str): url or filename of the patch
+ level (int): patch level (as in the patch shell command)
+ when (Spec): optional anonymous spec that specifies when to apply
+ the patch
+ working_dir (str): dir to change to before applying
+
+ Keyword Args:
+ sha256 (str): sha256 sum of the patch, used to verify the patch
+ (only required for URL patches)
+ archive_sha256 (str): sha256 sum of the *archive*, if the patch
+ is compressed (only required for compressed URL patches)
+
"""
- def _execute(pkg):
- constraint = pkg.name if when is None else when
- when_spec = parse_anonymous_spec(constraint, pkg.name)
- cur_patches = pkg.patches.setdefault(when_spec, [])
+ def _execute_patch(pkg_or_dep):
+ constraint = pkg_or_dep.name if when is None else when
+ when_spec = parse_anonymous_spec(constraint, pkg_or_dep.name)
+
# if this spec is identical to some other, then append this
# patch to the existing list.
- cur_patches.append(Patch.create(pkg, url_or_filename, level, **kwargs))
- return _execute
+ cur_patches = pkg_or_dep.patches.setdefault(when_spec, [])
+ cur_patches.append(
+ Patch.create(pkg_or_dep, url_or_filename, level,
+ working_dir, **kwargs))
+
+ return _execute_patch
@directive('variants')
-def variant(name, default=False, description=""):
+def variant(
+ name,
+ default=None,
+ description='',
+ values=None,
+ multi=False,
+ validator=None):
"""Define a variant for the package. Packager can specify a default
- value (on or off) as well as a text description."""
+ value as well as a text description.
+
+ Args:
+ name (str): name of the variant
+ default (str or bool): default value for the variant, if not
+ specified otherwise the default will be False for a boolean
+ variant and 'nothing' for a multi-valued variant
+ description (str): description of the purpose of the variant
+ values (tuple or callable): either a tuple of strings containing the
+ allowed values, or a callable accepting one value and returning
+ True if it is valid
+ multi (bool): if False only one value per spec is allowed for
+ this variant
+ validator (callable): optional group validator to enforce additional
+ logic. It receives a tuple of values and should raise an instance
+ of SpackError if the group doesn't meet the additional constraints
+ """
+ if name in reserved_names:
+ raise ValueError("The variant name '%s' is reserved by Spack" % name)
+
+ if values is None:
+ if default in (True, False) or (type(default) is str and
+ default.upper() in ('TRUE', 'FALSE')):
+ values = (True, False)
+ else:
+ values = lambda x: True
+
+ if default is None:
+ default = False if values == (True, False) else ''
+
+ default = default
description = str(description).strip()
- def _execute(pkg):
+ def _execute_variant(pkg):
if not re.match(spack.spec.identifier_re, name):
directive = 'variant'
msg = "Invalid variant name in {0}: '{1}'"
raise DirectiveError(directive, msg.format(pkg.name, name))
- pkg.variants[name] = Variant(default, description)
- return _execute
+ pkg.variants[name] = Variant(
+ name, default, description, values, multi, validator
+ )
+ return _execute_variant
@directive('resources')
@@ -370,7 +515,7 @@ def resource(**kwargs):
* 'placement' : (optional) gives the possibility to fine tune how the
resource is moved into the main package stage area.
"""
- def _execute(pkg):
+ def _execute_resource(pkg):
when = kwargs.get('when', pkg.name)
destination = kwargs.get('destination', "")
placement = kwargs.get('placement', None)
@@ -399,33 +544,16 @@ def resource(**kwargs):
name = kwargs.get('name')
fetcher = from_kwargs(**kwargs)
resources.append(Resource(name, fetcher, destination, placement))
- return _execute
+ return _execute_resource
class DirectiveError(spack.error.SpackError):
"""This is raised when something is wrong with a package directive."""
- def __init__(self, directive, message):
- super(DirectiveError, self).__init__(message)
- self.directive = directive
-
class CircularReferenceError(DirectiveError):
"""This is raised when something depends on itself."""
- def __init__(self, directive, package):
- super(CircularReferenceError, self).__init__(
- directive,
- "Package '%s' cannot pass itself to %s" % (package, directive))
- self.package = package
-
-
-class UnknownDependencyTypeError(DirectiveError):
- """This is raised when a dependency is of an unknown type."""
- def __init__(self, directive, package, deptype):
- super(UnknownDependencyTypeError, self).__init__(
- directive,
- "Package '%s' cannot depend on a package via %s."
- % (package, deptype))
- self.package = package
+class DependencyPatchError(DirectiveError):
+ """Raised for errors with patching dependencies."""
diff --git a/lib/spack/spack/directory_layout.py b/lib/spack/spack/directory_layout.py
index 28e6584fb2..e07db0ede4 100644
--- a/lib/spack/spack/directory_layout.py
+++ b/lib/spack/spack/directory_layout.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,11 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
-import exceptions
import shutil
import glob
import tempfile
import yaml
+import re
from llnl.util.filesystem import join_path, mkdirp
@@ -88,37 +88,6 @@ class DirectoryLayout(object):
"""
raise NotImplementedError()
- def extension_map(self, spec):
- """Get a dict of currently installed extension packages for a spec.
-
- Dict maps { name : extension_spec }
- Modifying dict does not affect internals of this layout.
- """
- raise NotImplementedError()
-
- def check_extension_conflict(self, spec, ext_spec):
- """Ensure that ext_spec can be activated in spec.
-
- If not, raise ExtensionAlreadyInstalledError or
- ExtensionConflictError.
- """
- raise NotImplementedError()
-
- def check_activated(self, spec, ext_spec):
- """Ensure that ext_spec can be removed from spec.
-
- If not, raise NoSuchExtensionError.
- """
- raise NotImplementedError()
-
- def add_extension(self, spec, ext_spec):
- """Add to the list of currently installed extensions."""
- raise NotImplementedError()
-
- def remove_extension(self, spec, ext_spec):
- """Remove from the list of currently installed extensions."""
- raise NotImplementedError()
-
def path_for_spec(self, spec):
"""Return absolute path from the root to a directory for the spec."""
_check_concrete(spec)
@@ -137,7 +106,7 @@ class DirectoryLayout(object):
if os.path.exists(path):
try:
shutil.rmtree(path)
- except exceptions.OSError as e:
+ except OSError as e:
raise RemoveFailedError(spec, path, e)
path = os.path.dirname(path)
@@ -149,25 +118,83 @@ class DirectoryLayout(object):
path = os.path.dirname(path)
+class ExtensionsLayout(object):
+ """A directory layout is used to associate unique paths with specs for
+ package extensions.
+ Keeps track of which extensions are activated for what package.
+ Depending on the use case, this can mean globally activated extensions
+ directly in the installation folder - or extensions activated in
+ filesystem views.
+ """
+ def __init__(self, root, **kwargs):
+ self.root = root
+ self.link = kwargs.get("link", os.symlink)
+
+ def add_extension(self, spec, ext_spec):
+ """Add to the list of currently installed extensions."""
+ raise NotImplementedError()
+
+ def check_activated(self, spec, ext_spec):
+ """Ensure that ext_spec can be removed from spec.
+
+ If not, raise NoSuchExtensionError.
+ """
+ raise NotImplementedError()
+
+ def check_extension_conflict(self, spec, ext_spec):
+ """Ensure that ext_spec can be activated in spec.
+
+ If not, raise ExtensionAlreadyInstalledError or
+ ExtensionConflictError.
+ """
+ raise NotImplementedError()
+
+ def extension_map(self, spec):
+ """Get a dict of currently installed extension packages for a spec.
+
+ Dict maps { name : extension_spec }
+ Modifying dict does not affect internals of this layout.
+ """
+ raise NotImplementedError()
+
+ def extendee_target_directory(self, extendee):
+ """Specify to which full path extendee should link all files
+ from extensions."""
+ raise NotImplementedError
+
+ def remove_extension(self, spec, ext_spec):
+ """Remove from the list of currently installed extensions."""
+ raise NotImplementedError()
+
+
class YamlDirectoryLayout(DirectoryLayout):
- """Lays out installation directories like this::
+ """By default lays out installation directories like this::
<install root>/
<platform-os-target>/
<compiler>-<compiler version>/
- <name>-<version>-<variants>-<hash>
+ <name>-<version>-<hash>
The hash here is a SHA-1 hash for the full DAG plus the build
spec. TODO: implement the build spec.
- To avoid special characters (like ~) in the directory name,
- only enabled variants are included in the install path.
- Disabled variants are omitted.
+ The installation directory scheme can be modified with the
+ arguments hash_len and path_scheme.
"""
def __init__(self, root, **kwargs):
super(YamlDirectoryLayout, self).__init__(root)
self.metadata_dir = kwargs.get('metadata_dir', '.spack')
- self.hash_len = kwargs.get('hash_len', None)
+ self.hash_len = kwargs.get('hash_len')
+ self.path_scheme = kwargs.get('path_scheme') or (
+ "${ARCHITECTURE}/"
+ "${COMPILERNAME}-${COMPILERVER}/"
+ "${PACKAGE}-${VERSION}-${HASH}")
+ if self.hash_len is not None:
+ if re.search('\${HASH:\d+}', self.path_scheme):
+ raise InvalidDirectoryLayoutParametersError(
+ "Conflicting options for installation layout hash length")
+ self.path_scheme = self.path_scheme.replace(
+ "${HASH}", "${HASH:%d}" % self.hash_len)
self.spec_file_name = 'spec.yaml'
self.extension_file_name = 'extensions.yaml'
@@ -175,9 +202,6 @@ class YamlDirectoryLayout(DirectoryLayout):
self.build_env_name = 'build.env' # build environment
self.packages_dir = 'repos' # archive of package.py files
- # Cache of already written/read extension maps.
- self._extension_maps = {}
-
@property
def hidden_file_paths(self):
return (self.metadata_dir,)
@@ -186,18 +210,9 @@ class YamlDirectoryLayout(DirectoryLayout):
_check_concrete(spec)
if spec.external:
- return spec.external
-
- dir_name = "%s-%s-%s" % (
- spec.name,
- spec.version,
- spec.dag_hash(self.hash_len))
-
- path = join_path(
- spec.architecture,
- "%s-%s" % (spec.compiler.name, spec.compiler.version),
- dir_name)
+ return spec.external_path
+ path = spec.format(self.path_scheme)
return path
def write_spec(self, spec, path):
@@ -285,8 +300,9 @@ class YamlDirectoryLayout(DirectoryLayout):
if not os.path.isdir(self.root):
return []
- pattern = join_path(
- self.root, '*', '*', '*', self.metadata_dir, self.spec_file_name)
+ path_elems = ["*"] * len(self.path_scheme.split(os.sep))
+ path_elems += [self.metadata_dir, self.spec_file_name]
+ pattern = join_path(self.root, *path_elems)
spec_files = glob.glob(pattern)
return [self.read_spec(s) for s in spec_files]
@@ -296,31 +312,72 @@ class YamlDirectoryLayout(DirectoryLayout):
by_hash[spec.dag_hash()] = spec
return by_hash
+
+class YamlExtensionsLayout(ExtensionsLayout):
+ """Implements globally activated extensions within a YamlDirectoryLayout.
+ """
+ def __init__(self, root, layout):
+ """layout is the corresponding YamlDirectoryLayout object for which
+ we implement extensions.
+ """
+ super(YamlExtensionsLayout, self).__init__(root)
+ self.layout = layout
+ self.extension_file_name = 'extensions.yaml'
+
+ # Cache of already written/read extension maps.
+ self._extension_maps = {}
+
+ def add_extension(self, spec, ext_spec):
+ _check_concrete(spec)
+ _check_concrete(ext_spec)
+
+ # Check whether it's already installed or if it's a conflict.
+ exts = self._extension_map(spec)
+ self.check_extension_conflict(spec, ext_spec)
+
+ # do the actual adding.
+ exts[ext_spec.name] = ext_spec
+ self._write_extensions(spec, exts)
+
+ def check_extension_conflict(self, spec, ext_spec):
+ exts = self._extension_map(spec)
+ if ext_spec.name in exts:
+ installed_spec = exts[ext_spec.name]
+ if ext_spec == installed_spec:
+ raise ExtensionAlreadyInstalledError(spec, ext_spec)
+ else:
+ raise ExtensionConflictError(spec, ext_spec, installed_spec)
+
+ def check_activated(self, spec, ext_spec):
+ exts = self._extension_map(spec)
+ if (ext_spec.name not in exts) or (ext_spec != exts[ext_spec.name]):
+ raise NoSuchExtensionError(spec, ext_spec)
+
def extension_file_path(self, spec):
"""Gets full path to an installed package's extension file"""
_check_concrete(spec)
- return join_path(self.metadata_path(spec), self.extension_file_name)
+ return join_path(self.layout.metadata_path(spec),
+ self.extension_file_name)
- def _write_extensions(self, spec, extensions):
- path = self.extension_file_path(spec)
+ def extension_map(self, spec):
+ """Defensive copying version of _extension_map() for external API."""
+ _check_concrete(spec)
+ return self._extension_map(spec).copy()
- # Create a temp file in the same directory as the actual file.
- dirname, basename = os.path.split(path)
- tmp = tempfile.NamedTemporaryFile(
- prefix=basename, dir=dirname, delete=False)
+ def extendee_target_directory(self, extendee):
+ return extendee.prefix
- # write tmp file
- with tmp:
- yaml.dump({
- 'extensions': [
- {ext.name: {
- 'hash': ext.dag_hash(),
- 'path': str(ext.prefix)
- }} for ext in sorted(extensions.values())]
- }, tmp, default_flow_style=False)
+ def remove_extension(self, spec, ext_spec):
+ _check_concrete(spec)
+ _check_concrete(ext_spec)
- # Atomic update by moving tmpfile on top of old one.
- os.rename(tmp.name, path)
+ # Make sure it's installed before removing.
+ exts = self._extension_map(spec)
+ self.check_activated(spec, ext_spec)
+
+ # do the actual removing.
+ del exts[ext_spec.name]
+ self._write_extensions(spec, exts)
def _extension_map(self, spec):
"""Get a dict<name -> spec> for all extensions currently
@@ -333,7 +390,7 @@ class YamlDirectoryLayout(DirectoryLayout):
self._extension_maps[spec] = {}
else:
- by_hash = self.specs_by_hash()
+ by_hash = self.layout.specs_by_hash()
exts = {}
with open(path) as ext_file:
yaml_file = yaml.load(ext_file)
@@ -357,48 +414,43 @@ class YamlDirectoryLayout(DirectoryLayout):
return self._extension_maps[spec]
- def extension_map(self, spec):
- """Defensive copying version of _extension_map() for external API."""
- _check_concrete(spec)
- return self._extension_map(spec).copy()
+ def _write_extensions(self, spec, extensions):
+ path = self.extension_file_path(spec)
- def check_extension_conflict(self, spec, ext_spec):
- exts = self._extension_map(spec)
- if ext_spec.name in exts:
- installed_spec = exts[ext_spec.name]
- if ext_spec == installed_spec:
- raise ExtensionAlreadyInstalledError(spec, ext_spec)
- else:
- raise ExtensionConflictError(spec, ext_spec, installed_spec)
+ # Create a temp file in the same directory as the actual file.
+ dirname, basename = os.path.split(path)
+ tmp = tempfile.NamedTemporaryFile(
+ prefix=basename, dir=dirname, delete=False)
- def check_activated(self, spec, ext_spec):
- exts = self._extension_map(spec)
- if (ext_spec.name not in exts) or (ext_spec != exts[ext_spec.name]):
- raise NoSuchExtensionError(spec, ext_spec)
+ # write tmp file
+ with tmp:
+ yaml.dump({
+ 'extensions': [
+ {ext.name: {
+ 'hash': ext.dag_hash(),
+ 'path': str(ext.prefix)
+ }} for ext in sorted(extensions.values())]
+ }, tmp, default_flow_style=False, encoding='utf-8')
- def add_extension(self, spec, ext_spec):
- _check_concrete(spec)
- _check_concrete(ext_spec)
+ # Atomic update by moving tmpfile on top of old one.
+ os.rename(tmp.name, path)
- # Check whether it's already installed or if it's a conflict.
- exts = self._extension_map(spec)
- self.check_extension_conflict(spec, ext_spec)
- # do the actual adding.
- exts[ext_spec.name] = ext_spec
- self._write_extensions(spec, exts)
+class YamlViewExtensionsLayout(YamlExtensionsLayout):
+ """Governs the directory layout present when creating filesystem views in a
+ certain root folder.
- def remove_extension(self, spec, ext_spec):
- _check_concrete(spec)
- _check_concrete(ext_spec)
+ Meant to replace YamlDirectoryLayout when working with filesystem views.
+ """
- # Make sure it's installed before removing.
- exts = self._extension_map(spec)
- self.check_activated(spec, ext_spec)
+ def extension_file_path(self, spec):
+ """Gets the full path to an installed package's extension file."""
+ _check_concrete(spec)
+ return join_path(self.root, self.layout.metadata_dir, spec.name,
+ self.extension_file_name)
- # do the actual removing.
- del exts[ext_spec.name]
- self._write_extensions(spec, exts)
+ def extendee_target_directory(self, extendee):
+ return self.root
class DirectoryLayoutError(SpackError):
@@ -447,6 +499,14 @@ class SpecReadError(DirectoryLayoutError):
"""Raised when directory layout can't read a spec."""
+class InvalidDirectoryLayoutParametersError(DirectoryLayoutError):
+ """Raised when a invalid directory layout parameters are supplied"""
+
+ def __init__(self, message, long_msg=None):
+ super(InvalidDirectoryLayoutParametersError, self).__init__(
+ message, long_msg)
+
+
class InvalidExtensionSpecError(DirectoryLayoutError):
"""Raised when an extension file has a bad spec in it."""
diff --git a/lib/spack/spack/environment.py b/lib/spack/spack/environment.py
index de30a9c7be..d85c67d7fc 100644
--- a/lib/spack/spack/environment.py
+++ b/lib/spack/spack/environment.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,6 +26,7 @@ import collections
import inspect
import json
import os
+import sys
import os.path
import subprocess
@@ -62,6 +63,15 @@ class SetEnv(NameValueModifier):
os.environ[self.name] = str(self.value)
+class AppendFlagsEnv(NameValueModifier):
+
+ def execute(self):
+ if self.name in os.environ and os.environ[self.name]:
+ os.environ[self.name] += self.separator + str(self.value)
+ else:
+ os.environ[self.name] = str(self.value)
+
+
class UnsetEnv(NameModifier):
def execute(self):
@@ -108,23 +118,23 @@ class RemovePath(NameValueModifier):
class EnvironmentModifications(object):
-
- """
- Keeps track of requests to modify the current environment.
+ """Keeps track of requests to modify the current environment.
Each call to a method to modify the environment stores the extra
information on the caller in the request:
- - 'filename' : filename of the module where the caller is defined
- - 'lineno': line number where the request occurred
- - 'context' : line of code that issued the request that failed
+
+ * 'filename' : filename of the module where the caller is defined
+ * 'lineno': line number where the request occurred
+ * 'context' : line of code that issued the request that failed
"""
def __init__(self, other=None):
- """
- Initializes a new instance, copying commands from other if not None
+ """Initializes a new instance, copying commands from 'other'
+ if it is not None.
Args:
- other: another instance of EnvironmentModifications (optional)
+ other (EnvironmentModifications): list of environment modifications
+ to be extended (optional)
"""
self.env_modifications = []
if other is not None:
@@ -159,8 +169,7 @@ class EnvironmentModifications(object):
return args
def set(self, name, value, **kwargs):
- """
- Stores in the current object a request to set an environment variable
+ """Stores a request to set an environment variable.
Args:
name: name of the environment variable to be set
@@ -170,9 +179,22 @@ class EnvironmentModifications(object):
item = SetEnv(name, value, **kwargs)
self.env_modifications.append(item)
- def unset(self, name, **kwargs):
+ def append_flags(self, name, value, sep=' ', **kwargs):
"""
- Stores in the current object a request to unset an environment variable
+ Stores in the current object a request to append to an env variable
+
+ Args:
+ name: name of the environment variable to be appended to
+ value: value to append to the environment variable
+ Appends with spaces separating different additions to the variable
+ """
+ kwargs.update(self._get_outside_caller_attributes())
+ kwargs.update({'separator': sep})
+ item = AppendFlagsEnv(name, value, **kwargs)
+ self.env_modifications.append(item)
+
+ def unset(self, name, **kwargs):
+ """Stores a request to unset an environment variable.
Args:
name: name of the environment variable to be set
@@ -181,21 +203,19 @@ class EnvironmentModifications(object):
item = UnsetEnv(name, **kwargs)
self.env_modifications.append(item)
- def set_path(self, name, elts, **kwargs):
- """
- Stores a request to set a path generated from a list.
+ def set_path(self, name, elements, **kwargs):
+ """Stores a request to set a path generated from a list.
Args:
name: name o the environment variable to be set.
- elts: elements of the path to set.
+ elements: elements of the path to set.
"""
kwargs.update(self._get_outside_caller_attributes())
- item = SetPath(name, elts, **kwargs)
+ item = SetPath(name, elements, **kwargs)
self.env_modifications.append(item)
def append_path(self, name, path, **kwargs):
- """
- Stores in the current object a request to append a path to a path list
+ """Stores a request to append a path to a path list.
Args:
name: name of the path list in the environment
@@ -206,8 +226,7 @@ class EnvironmentModifications(object):
self.env_modifications.append(item)
def prepend_path(self, name, path, **kwargs):
- """
- Same as `append_path`, but the path is pre-pended
+ """Same as `append_path`, but the path is pre-pended.
Args:
name: name of the path list in the environment
@@ -218,9 +237,7 @@ class EnvironmentModifications(object):
self.env_modifications.append(item)
def remove_path(self, name, path, **kwargs):
- """
- Stores in the current object a request to remove a path from a path
- list
+ """Stores a request to remove a path from a path list.
Args:
name: name of the path list in the environment
@@ -231,8 +248,7 @@ class EnvironmentModifications(object):
self.env_modifications.append(item)
def group_by_name(self):
- """
- Returns a dict of the modifications grouped by variable name
+ """Returns a dict of the modifications grouped by variable name.
Returns:
dict mapping the environment variable name to the modifications to
@@ -250,9 +266,7 @@ class EnvironmentModifications(object):
self.env_modifications.clear()
def apply_modifications(self):
- """
- Applies the modifications and clears the list
- """
+ """Applies the modifications and clears the list."""
modifications = self.group_by_name()
# Apply modifications one variable at a time
for name, actions in sorted(modifications.items()):
@@ -260,119 +274,157 @@ class EnvironmentModifications(object):
x.execute()
@staticmethod
- def from_sourcing_files(*args, **kwargs):
- """Creates an instance of EnvironmentModifications that, if executed,
- has the same effect on the environment as sourcing the files passed as
- parameters
+ def from_sourcing_file(filename, *args, **kwargs):
+ """Returns modifications that would be made by sourcing a file.
+
+ Parameters:
+ filename (str): The file to source
+ *args (list of str): Arguments to pass on the command line
+
+ Keyword Arguments:
+ shell (str): The shell to use (default: ``bash``)
+ shell_options (str): Options passed to the shell (default: ``-c``)
+ source_command (str): The command to run (default: ``source``)
+ suppress_output (str): Redirect used to suppress output of command
+ (default: ``&> /dev/null``)
+ concatenate_on_success (str): Operator used to execute a command
+ only when the previous command succeeds (default: ``&&``)
- :param \*args: list of files to be sourced
- :rtype: instance of EnvironmentModifications
+ Returns:
+ EnvironmentModifications: an object that, if executed, has
+ the same effect on the environment as sourcing the file
"""
+ # Check if the file actually exists
+ if not os.path.isfile(filename):
+ msg = 'Trying to source non-existing file: {0}'.format(filename)
+ raise RuntimeError(msg)
- env = EnvironmentModifications()
- # Check if the files are actually there
- files = [line.split(' ')[0] for line in args]
- non_existing = [file for file in files if not os.path.isfile(file)]
- if non_existing:
- message = 'trying to source non-existing files\n'
- message += '\n'.join(non_existing)
- raise RuntimeError(message)
- # Relevant kwd parameters and formats
- info = dict(kwargs)
- info.setdefault('shell', '/bin/bash')
- info.setdefault('shell_options', '-c')
- info.setdefault('source_command', 'source')
- info.setdefault('suppress_output', '&> /dev/null')
- info.setdefault('concatenate_on_success', '&&')
-
- shell = '{shell}'.format(**info)
- shell_options = '{shell_options}'.format(**info)
- source_file = '{source_command} {file} {concatenate_on_success}'
-
- dump_cmd = "import os, json; print json.dumps(dict(os.environ))"
- dump_environment = 'python -c "%s"' % dump_cmd
+ # Kwargs parsing and default values
+ shell = kwargs.get('shell', '/bin/bash')
+ shell_options = kwargs.get('shell_options', '-c')
+ source_command = kwargs.get('source_command', 'source')
+ suppress_output = kwargs.get('suppress_output', '&> /dev/null')
+ concatenate_on_success = kwargs.get('concatenate_on_success', '&&')
+
+ source_file = [source_command, filename]
+ source_file.extend(args)
+ source_file = ' '.join(source_file)
+
+ dump_cmd = 'import os, json; print(json.dumps(dict(os.environ)))'
+ dump_environment = 'python -c "{0}"'.format(dump_cmd)
# Construct the command that will be executed
- command = [source_file.format(file=file, **info) for file in args]
- command.append(dump_environment)
- command = ' '.join(command)
command = [
shell,
shell_options,
- command
+ ' '.join([
+ source_file, suppress_output,
+ concatenate_on_success, dump_environment,
+ ]),
]
- # Try to source all the files,
+ # Try to source the file
proc = subprocess.Popen(
command, stdout=subprocess.PIPE, env=os.environ)
proc.wait()
+
if proc.returncode != 0:
- raise RuntimeError('sourcing files returned a non-zero exit code')
- output = ''.join([line for line in proc.stdout])
- # Construct a dictionary with all the variables in the new environment
- after_source_env = dict(json.loads(output))
- this_environment = dict(os.environ)
+ msg = 'Sourcing file {0} returned a non-zero exit code'.format(
+ filename)
+ raise RuntimeError(msg)
+
+ output = ''.join([line.decode('utf-8') for line in proc.stdout])
+
+ # Construct dictionaries of the environment before and after
+ # sourcing the file, so that we can diff them.
+ env_before = dict(os.environ)
+ env_after = json.loads(output)
+
+ # If we're in python2, convert to str objects instead of unicode
+ # like json gives us. We can't put unicode in os.environ anyway.
+ if sys.version_info[0] < 3:
+ env_after = dict((k.encode('utf-8'), v.encode('utf-8'))
+ for k, v in env_after.items())
# Filter variables that are not related to sourcing a file
- to_be_filtered = 'SHLVL', '_', 'PWD', 'OLDPWD'
- for d in after_source_env, this_environment:
+ to_be_filtered = 'SHLVL', '_', 'PWD', 'OLDPWD', 'PS2'
+ for d in env_after, env_before:
for name in to_be_filtered:
d.pop(name, None)
# Fill the EnvironmentModifications instance
+ env = EnvironmentModifications()
# New variables
- new_variables = set(after_source_env) - set(this_environment)
- for x in new_variables:
- env.set(x, after_source_env[x])
+ new_variables = set(env_after) - set(env_before)
# Variables that have been unset
- unset_variables = set(this_environment) - set(after_source_env)
- for x in unset_variables:
- env.unset(x)
+ unset_variables = set(env_before) - set(env_after)
# Variables that have been modified
common_variables = set(
- this_environment).intersection(set(after_source_env))
+ env_before).intersection(set(env_after))
modified_variables = [x for x in common_variables
- if this_environment[x] != after_source_env[x]]
+ if env_before[x] != env_after[x]]
- def return_separator_if_any(first_value, second_value):
+ def return_separator_if_any(*args):
separators = ':', ';'
for separator in separators:
- if separator in first_value and separator in second_value:
- return separator
+ for arg in args:
+ if separator in arg:
+ return separator
return None
- for x in modified_variables:
- current = this_environment[x]
- modified = after_source_env[x]
- sep = return_separator_if_any(current, modified)
- if sep is None:
- # We just need to set the variable to the new value
- env.set(x, after_source_env[x])
+ # Add variables to env.
+ # Assume that variables with 'PATH' in the name or that contain
+ # separators like ':' or ';' are more likely to be paths
+ for x in new_variables:
+ sep = return_separator_if_any(env_after[x])
+ if sep:
+ env.prepend_path(x, env_after[x], separator=sep)
+ elif 'PATH' in x:
+ env.prepend_path(x, env_after[x])
else:
- current_list = current.split(sep)
- modified_list = modified.split(sep)
+ # We just need to set the variable to the new value
+ env.set(x, env_after[x])
+
+ for x in unset_variables:
+ env.unset(x)
+
+ for x in modified_variables:
+ before = env_before[x]
+ after = env_after[x]
+ sep = return_separator_if_any(before, after)
+ if sep:
+ before_list = before.split(sep)
+ after_list = after.split(sep)
+
+ # Filter out empty strings
+ before_list = list(filter(None, before_list))
+ after_list = list(filter(None, after_list))
+
# Paths that have been removed
remove_list = [
- ii for ii in current_list if ii not in modified_list]
- # Check that nothing has been added in the middle of vurrent
- # list
+ ii for ii in before_list if ii not in after_list]
+ # Check that nothing has been added in the middle of
+ # before_list
remaining_list = [
- ii for ii in current_list if ii in modified_list]
- start = modified_list.index(remaining_list[0])
- end = modified_list.index(remaining_list[-1])
- search = sep.join(modified_list[start:end + 1])
- if search not in current:
+ ii for ii in before_list if ii in after_list]
+ try:
+ start = after_list.index(remaining_list[0])
+ end = after_list.index(remaining_list[-1])
+ search = sep.join(after_list[start:end + 1])
+ except IndexError:
+ env.prepend_path(x, env_after[x])
+
+ if search not in before:
# We just need to set the variable to the new value
- env.set(x, after_source_env[x])
- break
+ env.prepend_path(x, env_after[x])
else:
try:
- prepend_list = modified_list[:start]
+ prepend_list = after_list[:start]
except KeyError:
prepend_list = []
try:
- append_list = modified_list[end + 1:]
+ append_list = after_list[end + 1:]
except KeyError:
append_list = []
@@ -382,14 +434,16 @@ class EnvironmentModifications(object):
env.append_path(x, item)
for item in prepend_list:
env.prepend_path(x, item)
+ else:
+ # We just need to set the variable to the new value
+ env.set(x, env_after[x])
return env
def concatenate_paths(paths, separator=':'):
- """
- Concatenates an iterable of paths into a string of paths separated by
- separator, defaulting to colon
+ """Concatenates an iterable of paths into a string of paths separated by
+ separator, defaulting to colon.
Args:
paths: iterable of paths
@@ -402,12 +456,13 @@ def concatenate_paths(paths, separator=':'):
def set_or_unset_not_first(variable, changes, errstream):
- """
- Check if we are going to set or unset something after other modifications
- have already been requested
+ """Check if we are going to set or unset something after other
+ modifications have already been requested.
"""
indexes = [ii for ii, item in enumerate(changes)
- if ii != 0 and type(item) in [SetEnv, UnsetEnv]]
+ if ii != 0 and
+ not item.args.get('force', False) and
+ type(item) in [SetEnv, UnsetEnv]]
if indexes:
good = '\t \t{context} at {filename}:{lineno}'
nogood = '\t--->\t{context} at {filename}:{lineno}'
@@ -419,9 +474,8 @@ def set_or_unset_not_first(variable, changes, errstream):
def validate(env, errstream):
- """
- Validates the environment modifications to check for the presence of
- suspicious patterns. Prompts a warning for everything that was found
+ """Validates the environment modifications to check for the presence of
+ suspicious patterns. Prompts a warning for everything that was found.
Current checks:
- set or unset variables after other changes on the same variable
@@ -435,17 +489,71 @@ def validate(env, errstream):
def filter_environment_blacklist(env, variables):
- """
- Generator that filters out any change to environment variables present in
- the input list
+ """Generator that filters out any change to environment variables present in
+ the input list.
Args:
env: list of environment modifications
variables: list of variable names to be filtered
- Yields:
+ Returns:
items in env if they are not in variables
"""
for item in env:
if item.name not in variables:
yield item
+
+
+def inspect_path(root, inspections, exclude=None):
+ """Inspects ``root`` to search for the subdirectories in ``inspections``.
+ Adds every path found to a list of prepend-path commands and returns it.
+
+ Args:
+ root (str): absolute path where to search for subdirectories
+
+ inspections (dict): maps relative paths to a list of environment
+ variables that will be modified if the path exists. The
+ modifications are not performed immediately, but stored in a
+ command object that is returned to client
+
+ exclude (callable): optional callable. If present it must accept an
+ absolute path and return True if it should be excluded from the
+ inspection
+
+ Examples:
+
+ The following lines execute an inspection in ``/usr`` to search for
+ ``/usr/include`` and ``/usr/lib64``. If found we want to prepend
+ ``/usr/include`` to ``CPATH`` and ``/usr/lib64`` to ``MY_LIB64_PATH``.
+
+ .. code-block:: python
+
+ # Set up the dictionary containing the inspection
+ inspections = {
+ 'include': ['CPATH'],
+ 'lib64': ['MY_LIB64_PATH']
+ }
+
+ # Get back the list of command needed to modify the environment
+ env = inspect_path('/usr', inspections)
+
+ # Eventually execute the commands
+ env.apply_modifications()
+
+ Returns:
+ instance of EnvironmentModifications containing the requested
+ modifications
+ """
+ if exclude is None:
+ exclude = lambda x: False
+
+ env = EnvironmentModifications()
+ # Inspect the prefix to check for the existence of common directories
+ for relative_path, variables in inspections.items():
+ expected = os.path.join(root, relative_path)
+
+ if os.path.isdir(expected) and not exclude(expected):
+ for variable in variables:
+ env.prepend_path(variable, expected)
+
+ return env
diff --git a/lib/spack/spack/error.py b/lib/spack/spack/error.py
index b6261a05f4..4a1278b6fe 100644
--- a/lib/spack/spack/error.py
+++ b/lib/spack/spack/error.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,8 +22,10 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
+from __future__ import print_function
+
import sys
+
import llnl.util.tty as tty
import spack
import inspect
@@ -43,15 +45,32 @@ class SpackError(Exception):
# traceback as a string and print it in the parent.
self.traceback = None
+ # we allow exceptions to print debug info via print_context()
+ # before they are caught at the top level. If they *haven't*
+ # printed context early, we do it by default when die() is
+ # called, so we need to remember whether it's been called.
+ self.printed = False
+
@property
def long_message(self):
return self._long_message
- def die(self):
+ def print_context(self):
+ """Print extended debug information about this exception.
+
+ This is usually printed when the top-level Spack error handler
+ calls ``die()``, but it acn be called separately beforehand if a
+ lower-level error handler needs to print error context and
+ continue without raising the exception to the top level.
+ """
+ if self.printed:
+ return
+
# basic debug message
tty.error(self.message)
if self.long_message:
- print(self.long_message)
+ sys.stderr.write(self.long_message)
+ sys.stderr.write('\n')
# stack trace, etc. in debug mode.
if spack.debug:
@@ -63,7 +82,12 @@ class SpackError(Exception):
# run parent exception hook.
sys.excepthook(*sys.exc_info())
- os._exit(1)
+ sys.stderr.flush()
+ self.printed = True
+
+ def die(self):
+ self.print_context()
+ sys.exit(1)
def __str__(self):
msg = self.message
@@ -89,11 +113,16 @@ class UnsupportedPlatformError(SpackError):
super(UnsupportedPlatformError, self).__init__(message)
-class NoNetworkConnectionError(SpackError):
- """Raised when an operation needs an internet connection."""
+class SpecError(SpackError):
+ """Superclass for all errors that occur while constructing specs."""
+
- def __init__(self, message, url):
- super(NoNetworkConnectionError, self).__init__(
- "No network connection: " + str(message),
- "URL was: " + str(url))
- self.url = url
+class UnsatisfiableSpecError(SpecError):
+ """Raised when a spec conflicts with package constraints.
+ Provide the requirement that was violated when raising."""
+ def __init__(self, provided, required, constraint_type):
+ super(UnsatisfiableSpecError, self).__init__(
+ "%s does not satisfy %s" % (provided, required))
+ self.provided = provided
+ self.required = required
+ self.constraint_type = constraint_type
diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py
index 23f3b9a41e..30e6823207 100644
--- a/lib/spack/spack/fetch_strategy.py
+++ b/lib/spack/spack/fetch_strategy.py
@@ -1,13 +1,13 @@
#
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -46,18 +46,22 @@ import re
import shutil
import copy
from functools import wraps
+from six import string_types, with_metaclass
+
import llnl.util.tty as tty
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir, mkdirp, join_path
+
import spack
import spack.error
import spack.util.crypto as crypto
-from spack.util.executable import *
-from spack.util.string import *
+import spack.util.pattern as pattern
+from spack.util.executable import which
+from spack.util.string import comma_or
from spack.version import Version, ver
from spack.util.compression import decompressor_for, extension
-import spack.util.pattern as pattern
-"""List of all fetch strategies, created by FetchStrategy metaclass."""
+
+#: List of all fetch strategies, created by FetchStrategy metaclass.
all_strategies = []
@@ -74,21 +78,19 @@ def _needs_stage(fun):
return wrapper
-class FetchStrategy(object):
+class FSMeta(type):
+ """This metaclass registers all fetch strategies in a list."""
+ def __init__(cls, name, bases, dict):
+ type.__init__(cls, name, bases, dict)
+ if cls.enabled:
+ all_strategies.append(cls)
+
+class FetchStrategy(with_metaclass(FSMeta, object)):
"""Superclass of all fetch strategies."""
enabled = False # Non-abstract subclasses should be enabled.
required_attributes = None # Attributes required in version() args.
- class __metaclass__(type):
-
- """This metaclass registers all fetch strategies in a list."""
-
- def __init__(cls, name, bases, dict):
- type.__init__(cls, name, bases, dict)
- if cls.enabled:
- all_strategies.append(cls)
-
def __init__(self):
# The stage is initialized late, so that fetch strategies can be
# constructed at package construction time. This is where things
@@ -102,27 +104,42 @@ class FetchStrategy(object):
# Subclasses need to implement these methods
def fetch(self):
- pass # Return True on success, False on fail.
+ """Fetch source code archive or repo.
+
+ Returns:
+ bool: True on success, False on failure.
+ """
def check(self):
- pass # Do checksum.
+ """Checksum the archive fetched by this FetchStrategy."""
def expand(self):
- pass # Expand archive.
+ """Expand the downloaded archive."""
def reset(self):
- pass # Revert to freshly downloaded state.
+ """Revert to freshly downloaded state.
+
+ For archive files, this may just re-expand the archive.
+ """
def archive(self, destination):
- pass # Used to create tarball for mirror.
+ """Create an archive of the downloaded data for a mirror.
+
+ For downloaded files, this should preserve the checksum of the
+ original file. For repositories, it should just create an
+ expandable tarball out of the downloaded repository.
+ """
@property
def cachable(self):
- """Return whether the fetcher is capable of caching the
- resource it retrieves. This generally is determined by
- whether the resource is identifiably associated with a
- specific package version."""
- pass
+ """Whether fetcher is capable of caching the resource it retrieves.
+
+ This generally is determined by whether the resource is
+ identifiably associated with a specific package version.
+
+ Returns:
+ bool: True if can cache, False otherwise.
+ """
def __str__(self): # Should be human readable URL.
return "FetchStrategy.__str___"
@@ -136,16 +153,15 @@ class FetchStrategy(object):
@pattern.composite(interface=FetchStrategy)
class FetchStrategyComposite(object):
+ """Composite for a FetchStrategy object.
- """
- Composite for a FetchStrategy object. Implements the GoF composite pattern.
+ Implements the GoF composite pattern.
"""
matches = FetchStrategy.matches
set_stage = FetchStrategy.set_stage
class URLFetchStrategy(FetchStrategy):
-
"""FetchStrategy that pulls source code from a URL for an archive,
checks the archive against a checksum,and decompresses the archive.
"""
@@ -161,7 +177,8 @@ class URLFetchStrategy(FetchStrategy):
if not self.url:
self.url = url
- self.digest = kwargs.get('md5', None)
+ self.digest = next((kwargs[h] for h in crypto.hashes if h in kwargs),
+ None)
if not self.digest:
self.digest = digest
@@ -182,8 +199,6 @@ class URLFetchStrategy(FetchStrategy):
@_needs_stage
def fetch(self):
- self.stage.chdir()
-
if self.archive_file:
tty.msg("Already downloaded %s" % self.archive_file)
return
@@ -224,7 +239,8 @@ class URLFetchStrategy(FetchStrategy):
# Run curl but grab the mime type from the http headers
curl = self.curl
- headers = curl(*curl_args, output=str, fail_on_error=False)
+ with working_dir(self.stage.path):
+ headers = curl(*curl_args, output=str, fail_on_error=False)
if curl.returncode != 0:
# clean up archive on failure.
@@ -292,7 +308,6 @@ class URLFetchStrategy(FetchStrategy):
tty.msg("Staging archive: %s" % self.archive_file)
- self.stage.chdir()
if not self.archive_file:
raise NoArchiveFileError(
"Couldn't find archive file",
@@ -300,15 +315,17 @@ class URLFetchStrategy(FetchStrategy):
if not self.extension:
self.extension = extension(self.archive_file)
+
decompress = decompressor_for(self.archive_file, self.extension)
# Expand all tarballs in their own directory to contain
# exploding tarballs.
tarball_container = os.path.join(self.stage.path,
"spack-expanded-archive")
+
mkdirp(tarball_container)
- os.chdir(tarball_container)
- decompress(self.archive_file)
+ with working_dir(tarball_container):
+ decompress(self.archive_file)
# Check for an exploding tarball, i.e. one that doesn't expand
# to a single directory. If the tarball *didn't* explode,
@@ -319,7 +336,7 @@ class URLFetchStrategy(FetchStrategy):
# top-level directory. We ignore hidden files to accomodate
# these "semi-exploding" tarballs.
files = os.listdir(tarball_container)
- non_hidden = filter(lambda f: not f.startswith('.'), files)
+ non_hidden = [f for f in files if not f.startswith('.')]
if len(non_hidden) == 1:
expanded_dir = os.path.join(tarball_container, non_hidden[0])
if os.path.isdir(expanded_dir):
@@ -327,10 +344,9 @@ class URLFetchStrategy(FetchStrategy):
shutil.move(os.path.join(tarball_container, f),
os.path.join(self.stage.path, f))
os.rmdir(tarball_container)
+
if not files:
os.rmdir(tarball_container)
- # Set the wd back to the stage when done.
- self.stage.chdir()
def archive(self, destination):
"""Just moves this archive to the destination."""
@@ -398,8 +414,6 @@ class CacheURLFetchStrategy(URLFetchStrategy):
if not os.path.isfile(path):
raise NoCacheError('No cache of %s' % path)
- self.stage.chdir()
-
# remove old symlink if one is there.
filename = self.stage.save_filename
if os.path.exists(filename):
@@ -435,7 +449,7 @@ class VCSFetchStrategy(FetchStrategy):
# Ensure that there's only one of the rev_types
if sum(k in kwargs for k in rev_types) > 1:
- raise FetchStrategyError(
+ raise ValueError(
"Supply only one of %s to fetch with %s" % (
comma_or(rev_types), name
))
@@ -461,13 +475,13 @@ class VCSFetchStrategy(FetchStrategy):
patterns = kwargs.get('exclude', None)
if patterns is not None:
- if isinstance(patterns, basestring):
+ if isinstance(patterns, string_types):
patterns = [patterns]
for p in patterns:
tar.add_default_arg('--exclude=%s' % p)
- self.stage.chdir()
- tar('-czf', destination, os.path.basename(self.stage.source_path))
+ with working_dir(self.stage.path):
+ tar('-czf', destination, os.path.basename(self.stage.source_path))
def __str__(self):
return "VCS: %s" % self.url
@@ -477,9 +491,8 @@ class VCSFetchStrategy(FetchStrategy):
class GoFetchStrategy(VCSFetchStrategy):
+ """Fetch strategy that employs the `go get` infrastructure.
- """
- Fetch strategy that employs the `go get` infrastructure
Use like this in a package:
version('name',
@@ -512,25 +525,24 @@ class GoFetchStrategy(VCSFetchStrategy):
@_needs_stage
def fetch(self):
- self.stage.chdir()
-
tty.msg("Trying to get go resource:", self.url)
- try:
- os.mkdir('go')
- except OSError:
- pass
- env = dict(os.environ)
- env['GOPATH'] = os.path.join(os.getcwd(), 'go')
- self.go('get', '-v', '-d', self.url, env=env)
+ with working_dir(self.stage.path):
+ try:
+ os.mkdir('go')
+ except OSError:
+ pass
+ env = dict(os.environ)
+ env['GOPATH'] = os.path.join(os.getcwd(), 'go')
+ self.go('get', '-v', '-d', self.url, env=env)
def archive(self, destination):
super(GoFetchStrategy, self).archive(destination, exclude='.git')
@_needs_stage
def reset(self):
- self.stage.chdir_to_source()
- self.go('clean')
+ with working_dir(self.stage.source_path):
+ self.go('clean')
def __str__(self):
return "[go] %s" % self.url
@@ -589,33 +601,42 @@ class GitFetchStrategy(VCSFetchStrategy):
def cachable(self):
return bool(self.commit or self.tag)
- @_needs_stage
def fetch(self):
- self.stage.chdir()
-
if self.stage.source_path:
tty.msg("Already fetched %s" % self.stage.source_path)
return
- args = []
+ args = ''
if self.commit:
- args.append('at commit %s' % self.commit)
+ args = 'at commit %s' % self.commit
elif self.tag:
- args.append('at tag %s' % self.tag)
+ args = 'at tag %s' % self.tag
elif self.branch:
- args.append('on branch %s' % self.branch)
- tty.msg("Trying to clone git repository:", self.url, *args)
+ args = 'on branch %s' % self.branch
+
+ tty.msg("Trying to clone git repository: %s %s" % (self.url, args))
+ git = self.git
if self.commit:
# Need to do a regular clone and check out everything if
# they asked for a particular commit.
- self.git('clone', self.url)
- self.stage.chdir_to_source()
- self.git('checkout', self.commit)
+ with working_dir(self.stage.path):
+ if spack.debug:
+ git('clone', self.url)
+ else:
+ git('clone', '--quiet', self.url)
+
+ with working_dir(self.stage.source_path):
+ if spack.debug:
+ git('checkout', self.commit)
+ else:
+ git('checkout', '--quiet', self.commit)
else:
# Can be more efficient if not checking out a specific commit.
args = ['clone']
+ if not spack.debug:
+ args.append('--quiet')
# If we want a particular branch ask for it.
if self.branch:
@@ -628,45 +649,58 @@ class GitFetchStrategy(VCSFetchStrategy):
if self.git_version > ver('1.7.10'):
args.append('--single-branch')
- cloned = False
- # Yet more efficiency, only download a 1-commit deep tree
- if self.git_version >= ver('1.7.1'):
- try:
- self.git(*(args + ['--depth', '1', self.url]))
- cloned = True
- except spack.error.SpackError:
- # This will fail with the dumb HTTP transport
- # continue and try without depth, cleanup first
- pass
-
- if not cloned:
- args.append(self.url)
- self.git(*args)
-
- self.stage.chdir_to_source()
-
- # For tags, be conservative and check them out AFTER
- # cloning. Later git versions can do this with clone
- # --branch, but older ones fail.
- if self.tag and self.git_version < ver('1.8.5.2'):
- # pull --tags returns a "special" error code of 1 in
- # older versions that we have to ignore.
- # see: https://github.com/git/git/commit/19d122b
- self.git('pull', '--tags', ignore_errors=1)
- self.git('checkout', self.tag)
-
- # Init submodules if the user asked for them.
- if self.submodules:
- self.git('submodule', 'update', '--init')
+ with working_dir(self.stage.path):
+ cloned = False
+ # Yet more efficiency, only download a 1-commit deep tree
+ if self.git_version >= ver('1.7.1'):
+ try:
+ git(*(args + ['--depth', '1', self.url]))
+ cloned = True
+ except spack.error.SpackError:
+ # This will fail with the dumb HTTP transport
+ # continue and try without depth, cleanup first
+ pass
+
+ if not cloned:
+ args.append(self.url)
+ git(*args)
+
+ with working_dir(self.stage.source_path):
+ # For tags, be conservative and check them out AFTER
+ # cloning. Later git versions can do this with clone
+ # --branch, but older ones fail.
+ if self.tag and self.git_version < ver('1.8.5.2'):
+ # pull --tags returns a "special" error code of 1 in
+ # older versions that we have to ignore.
+ # see: https://github.com/git/git/commit/19d122b
+ if spack.debug:
+ git('pull', '--tags', ignore_errors=1)
+ git('checkout', self.tag)
+ else:
+ git('pull', '--quiet', '--tags', ignore_errors=1)
+ git('checkout', '--quiet', self.tag)
+
+ with working_dir(self.stage.source_path):
+ # Init submodules if the user asked for them.
+ if self.submodules:
+ if spack.debug:
+ git('submodule', 'update', '--init', '--recursive')
+ else:
+ git('submodule', '--quiet', 'update', '--init',
+ '--recursive')
def archive(self, destination):
super(GitFetchStrategy, self).archive(destination, exclude='.git')
@_needs_stage
def reset(self):
- self.stage.chdir_to_source()
- self.git('checkout', '.')
- self.git('clean', '-f')
+ with working_dir(self.stage.source_path):
+ if spack.debug:
+ self.git('checkout', '.')
+ self.git('clean', '-f')
+ else:
+ self.git('checkout', '--quiet', '.')
+ self.git('clean', '--quiet', '-f')
def __str__(self):
return "[git] %s" % self.url
@@ -711,43 +745,42 @@ class SvnFetchStrategy(VCSFetchStrategy):
@_needs_stage
def fetch(self):
- self.stage.chdir()
-
if self.stage.source_path:
tty.msg("Already fetched %s" % self.stage.source_path)
return
tty.msg("Trying to check out svn repository: %s" % self.url)
- args = ['checkout', '--force']
+ args = ['checkout', '--force', '--quiet']
if self.revision:
args += ['-r', self.revision]
args.append(self.url)
- self.svn(*args)
- self.stage.chdir_to_source()
+ with working_dir(self.stage.path):
+ self.svn(*args)
def _remove_untracked_files(self):
"""Removes untracked files in an svn repository."""
- status = self.svn('status', '--no-ignore', output=str)
- self.svn('status', '--no-ignore')
- for line in status.split('\n'):
- if not re.match('^[I?]', line):
- continue
- path = line[8:].strip()
- if os.path.isfile(path):
- os.unlink(path)
- elif os.path.isdir(path):
- shutil.rmtree(path, ignore_errors=True)
+ with working_dir(self.stage.source_path):
+ status = self.svn('status', '--no-ignore', output=str)
+ self.svn('status', '--no-ignore')
+ for line in status.split('\n'):
+ if not re.match('^[I?]', line):
+ continue
+ path = line[8:].strip()
+ if os.path.isfile(path):
+ os.unlink(path)
+ elif os.path.isdir(path):
+ shutil.rmtree(path, ignore_errors=True)
def archive(self, destination):
super(SvnFetchStrategy, self).archive(destination, exclude='.svn')
@_needs_stage
def reset(self):
- self.stage.chdir_to_source()
self._remove_untracked_files()
- self.svn('revert', '.', '-R')
+ with working_dir(self.stage.source_path):
+ self.svn('revert', '.', '-R')
def __str__(self):
return "[svn] %s" % self.url
@@ -788,8 +821,17 @@ class HgFetchStrategy(VCSFetchStrategy):
@property
def hg(self):
+ """:returns: The hg executable
+ :rtype: Executable
+ """
if not self._hg:
self._hg = which('hg', required=True)
+
+ # When building PythonPackages, Spack automatically sets
+ # PYTHONPATH. This can interfere with hg, which is a Python
+ # script. Unset PYTHONPATH while running hg.
+ self._hg.add_default_env('PYTHONPATH', '')
+
return self._hg
@property
@@ -798,8 +840,6 @@ class HgFetchStrategy(VCSFetchStrategy):
@_needs_stage
def fetch(self):
- self.stage.chdir()
-
if self.stage.source_path:
tty.msg("Already fetched %s" % self.stage.source_path)
return
@@ -809,31 +849,36 @@ class HgFetchStrategy(VCSFetchStrategy):
args.append('at revision %s' % self.revision)
tty.msg("Trying to clone Mercurial repository:", self.url, *args)
- args = ['clone', self.url]
+ args = ['clone']
+
+ if spack.insecure:
+ args.append('--insecure')
+
+ args.append(self.url)
+
if self.revision:
- args += ['-r', self.revision]
+ args.extend(['-r', self.revision])
- self.hg(*args)
+ with working_dir(self.stage.path):
+ self.hg(*args)
def archive(self, destination):
super(HgFetchStrategy, self).archive(destination, exclude='.hg')
@_needs_stage
def reset(self):
- self.stage.chdir()
-
- source_path = self.stage.source_path
- scrubbed = "scrubbed-source-tmp"
+ with working_dir(self.stage.path):
+ source_path = self.stage.source_path
+ scrubbed = "scrubbed-source-tmp"
- args = ['clone']
- if self.revision:
- args += ['-r', self.revision]
- args += [source_path, scrubbed]
- self.hg(*args)
+ args = ['clone']
+ if self.revision:
+ args += ['-r', self.revision]
+ args += [source_path, scrubbed]
+ self.hg(*args)
- shutil.rmtree(source_path, ignore_errors=True)
- shutil.move(scrubbed, source_path)
- self.stage.chdir_to_source()
+ shutil.rmtree(source_path, ignore_errors=True)
+ shutil.move(scrubbed, source_path)
def __str__(self):
return "[hg] %s" % self.url
@@ -850,11 +895,18 @@ def from_url(url):
def from_kwargs(**kwargs):
- """
- Construct the appropriate FetchStrategy from the given keyword arguments.
+ """Construct an appropriate FetchStrategy from the given keyword arguments.
+
+ Args:
+ **kwargs: dictionary of keyword arguments, e.g. from a
+ ``version()`` directive in a package.
+
+ Returns:
+ fetch_strategy: The fetch strategy that matches the args, based
+ on attribute names (e.g., ``git``, ``hg``, etc.)
- :param kwargs: dictionary of keyword arguments
- :return: fetcher or raise a FetchError exception
+ Raises:
+ FetchError: If no ``fetch_strategy`` matches the args.
"""
for fetcher in all_strategies:
if fetcher.matches(kwargs):
@@ -917,8 +969,8 @@ def from_list_url(pkg):
return URLFetchStrategy(url=url_from_list, digest=digest)
except KeyError:
tty.msg("Can not find version %s in url_list" %
- self.version)
- except:
+ pkg.version)
+ except BaseException:
tty.msg("Could not determine url from list_url.")
diff --git a/lib/spack/spack/file_cache.py b/lib/spack/spack/file_cache.py
index e37f77d68d..688f32a4ad 100644
--- a/lib/spack/spack/file_cache.py
+++ b/lib/spack/spack/file_cache.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,8 +25,8 @@
import os
import shutil
-from llnl.util.filesystem import *
-from llnl.util.lock import *
+from llnl.util.filesystem import mkdirp, join_path
+from llnl.util.lock import Lock, ReadTransaction, WriteTransaction
from spack.error import SpackError
@@ -35,7 +35,7 @@ class FileCache(object):
"""This class manages cached data in the filesystem.
- Cache files are fetched and stored by unique keys. Keys can be relative
- paths, so that thre can be some hierarchy in the cache.
+ paths, so that there can be some hierarchy in the cache.
- The FileCache handles locking cache files for reading and writing, so
client code need not manage locks for cache entries.
@@ -149,7 +149,7 @@ class FileCache(object):
if value:
# remove tmp on exception & raise it
shutil.rmtree(cm.tmp_filename, True)
- raise value
+
else:
os.rename(cm.tmp_filename, cm.orig_filename)
diff --git a/lib/spack/spack/filesystem_view.py b/lib/spack/spack/filesystem_view.py
new file mode 100644
index 0000000000..9be55e381b
--- /dev/null
+++ b/lib/spack/spack/filesystem_view.py
@@ -0,0 +1,547 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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
+##############################################################################
+import functools as ft
+import os
+import re
+import shutil
+import sys
+
+from llnl.util.filesystem import join_path
+from llnl.util.link_tree import LinkTree
+from llnl.util import tty
+
+import spack
+import spack.spec
+import spack.store
+from spack.directory_layout import ExtensionAlreadyInstalledError
+from spack.directory_layout import YamlViewExtensionsLayout
+
+# compatability
+if sys.version_info < (3, 0):
+ from itertools import imap as map
+ from itertools import ifilter as filter
+ from itertools import izip as zip
+
+__all__ = ["FilesystemView", "YamlFilesystemView"]
+
+
+class FilesystemView(object):
+ """
+ Governs a filesystem view that is located at certain root-directory.
+
+ Packages are linked from their install directories into a common file
+ hierachy.
+
+ In distributed filesystems, loading each installed package seperately
+ can lead to slow-downs due to too many directories being traversed.
+ This can be circumvented by loading all needed modules into a common
+ directory structure.
+ """
+
+ def __init__(self, root, layout, **kwargs):
+ """
+ Initialize a filesystem view under the given `root` directory with
+ corresponding directory `layout`.
+
+ Files are linked by method `link` (os.symlink by default).
+ """
+ self.root = root
+ self.layout = layout
+
+ self.ignore_conflicts = kwargs.get("ignore_conflicts", False)
+ self.link = kwargs.get("link", os.symlink)
+ self.verbose = kwargs.get("verbose", False)
+
+ def add_specs(self, *specs, **kwargs):
+ """
+ Add given specs to view.
+
+ The supplied specs might be standalone packages or extensions of
+ other packages.
+
+ Should accept `with_dependencies` as keyword argument (default
+ True) to indicate wether or not dependencies should be activated as
+ well.
+
+ Should except an `exclude` keyword argument containing a list of
+ regexps that filter out matching spec names.
+
+ This method should make use of `activate_{extension,standalone}`.
+ """
+ raise NotImplementedError
+
+ def add_extension(self, spec):
+ """
+ Add (link) an extension in this view.
+ """
+ raise NotImplementedError
+
+ def add_standalone(self, spec):
+ """
+ Add (link) a standalone package into this view.
+ """
+ raise NotImplementedError
+
+ def check_added(self, spec):
+ """
+ Check if the given concrete spec is active in this view.
+ """
+ raise NotImplementedError
+
+ def remove_specs(self, *specs, **kwargs):
+ """
+ Removes given specs from view.
+
+ The supplied spec might be a standalone package or an extension of
+ another package.
+
+ Should accept `with_dependencies` as keyword argument (default
+ True) to indicate wether or not dependencies should be deactivated
+ as well.
+
+ Should accept `with_dependents` as keyword argument (default True)
+ to indicate wether or not dependents on the deactivated specs
+ should be removed as well.
+
+ Should except an `exclude` keyword argument containing a list of
+ regexps that filter out matching spec names.
+
+ This method should make use of `deactivate_{extension,standalone}`.
+ """
+ raise NotImplementedError
+
+ def remove_extension(self, spec):
+ """
+ Remove (unlink) an extension from this view.
+ """
+ raise NotImplementedError
+
+ def remove_standalone(self, spec):
+ """
+ Remove (unlink) a standalone package from this view.
+ """
+ raise NotImplementedError
+
+ def get_all_specs(self):
+ """
+ Get all specs currently active in this view.
+ """
+ raise NotImplementedError
+
+ def get_spec(self, spec):
+ """
+ Return the actual spec linked in this view (i.e. do not look it up
+ in the database by name).
+
+ `spec` can be a name or a spec from which the name is extracted.
+
+ As there can only be a single version active for any spec the name
+ is enough to identify the spec in the view.
+
+ If no spec is present, returns None.
+ """
+ raise NotImplementedError
+
+ def print_status(self, *specs, **kwargs):
+ """
+ Print a short summary about the given specs, detailing whether..
+ * ..they are active in the view.
+ * ..they are active but the activated version differs.
+ * ..they are not activte in the view.
+
+ Takes `with_dependencies` keyword argument so that the status of
+ dependencies is printed as well.
+ """
+ raise NotImplementedError
+
+
+class YamlFilesystemView(FilesystemView):
+ """
+ Filesystem view to work with a yaml based directory layout.
+ """
+
+ def __init__(self, root, layout, **kwargs):
+ super(YamlFilesystemView, self).__init__(root, layout, **kwargs)
+
+ self.extensions_layout = YamlViewExtensionsLayout(root, layout)
+
+ self._croot = colorize_root(self.root) + " "
+
+ def add_specs(self, *specs, **kwargs):
+ assert all((s.concrete for s in specs))
+ specs = set(specs)
+
+ if kwargs.get("with_dependencies", True):
+ specs.update(get_dependencies(specs))
+
+ if kwargs.get("exclude", None):
+ specs = set(filter_exclude(specs, kwargs["exclude"]))
+
+ conflicts = self.get_conflicts(*specs)
+
+ if conflicts:
+ for s, v in conflicts:
+ self.print_conflict(v, s)
+ return
+
+ extensions = set(filter(lambda s: s.package.is_extension, specs))
+ standalones = specs - extensions
+
+ set(map(self._check_no_ext_conflicts, extensions))
+ # fail on first error, otherwise link extensions as well
+ if all(map(self.add_standalone, standalones)):
+ all(map(self.add_extension, extensions))
+
+ def add_extension(self, spec):
+ if not spec.package.is_extension:
+ tty.error(self._croot + 'Package %s is not an extension.'
+ % spec.name)
+ return False
+
+ if spec.external:
+ tty.warn(self._croot + 'Skipping external package: %s'
+ % colorize_spec(spec))
+ return True
+
+ try:
+ if not spec.package.is_activated(self.extensions_layout):
+ spec.package.do_activate(
+ verbose=self.verbose,
+ extensions_layout=self.extensions_layout)
+
+ except ExtensionAlreadyInstalledError:
+ # As we use sets in add_specs(), the order in which packages get
+ # activated is essentially random. So this spec might have already
+ # been activated as dependency of another package -> fail silently
+ pass
+
+ # make sure the meta folder is linked as well (this is not done by the
+ # extension-activation mechnism)
+ if not self.check_added(spec):
+ self.link_meta_folder(spec)
+
+ return True
+
+ def add_standalone(self, spec):
+ if spec.package.is_extension:
+ tty.error(self._croot + 'Package %s is an extension.'
+ % spec.name)
+ return False
+
+ if spec.external:
+ tty.warn(self._croot + 'Skipping external package: %s'
+ % colorize_spec(spec))
+ return True
+
+ if self.check_added(spec):
+ tty.warn(self._croot + 'Skipping already linked package: %s'
+ % colorize_spec(spec))
+ return True
+
+ if spec.package.extendable:
+ # Check for globally activated extensions in the extendee that
+ # we're looking at.
+ activated = [p.spec for p in
+ spack.store.db.activated_extensions_for(spec)]
+ if activated:
+ tty.error("Globally activated extensions cannot be used in "
+ "conjunction with filesystem views. "
+ "Please deactivate the following specs: ")
+ spack.cmd.display_specs(activated, flags=True, variants=True,
+ long=False)
+ return False
+
+ tree = LinkTree(spec.prefix)
+
+ if not self.ignore_conflicts:
+ conflict = tree.find_conflict(self.root)
+ if conflict is not None:
+ tty.error(self._croot +
+ "Cannot link package %s, file already exists: %s"
+ % (spec.name, conflict))
+ return False
+
+ conflicts = tree.merge(self.root, link=self.link,
+ ignore=ignore_metadata_dir,
+ ignore_conflicts=self.ignore_conflicts)
+ self.link_meta_folder(spec)
+
+ if self.ignore_conflicts:
+ for c in conflicts:
+ tty.warn(self._croot + "Could not link: %s" % c)
+
+ if self.verbose:
+ tty.info(self._croot + 'Linked package: %s' % colorize_spec(spec))
+ return True
+
+ def check_added(self, spec):
+ assert spec.concrete
+ return spec == self.get_spec(spec)
+
+ def remove_specs(self, *specs, **kwargs):
+ assert all((s.concrete for s in specs))
+ with_dependents = kwargs.get("with_dependents", True)
+ with_dependencies = kwargs.get("with_dependencies", False)
+
+ specs = set(specs)
+
+ if with_dependencies:
+ specs = get_dependencies(specs)
+
+ if kwargs.get("exclude", None):
+ specs = set(filter_exclude(specs, kwargs["exclude"]))
+
+ all_specs = set(self.get_all_specs())
+
+ to_deactivate = specs
+ to_keep = all_specs - to_deactivate
+
+ dependents = find_dependents(to_keep, to_deactivate)
+
+ if with_dependents:
+ # remove all packages depending on the ones to remove
+ if len(dependents) > 0:
+ tty.warn(self._croot +
+ "The following dependents will be removed: %s"
+ % ", ".join((s.name for s in dependents)))
+ to_deactivate.update(dependents)
+ elif len(dependents) > 0:
+ tty.warn(self._croot +
+ "The following packages will be unusable: %s"
+ % ", ".join((s.name for s in dependents)))
+
+ extensions = set(filter(lambda s: s.package.is_extension,
+ to_deactivate))
+ standalones = to_deactivate - extensions
+
+ # Please note that a traversal of the DAG in post-order and then
+ # forcibly removing each package should remove the need to specify
+ # with_dependents for deactivating extensions/allow removal without
+ # additional checks (force=True). If removal performance becomes
+ # unbearable for whatever reason, this should be the first point of
+ # attack.
+ #
+ # see: https://github.com/spack/spack/pull/3227#discussion_r117147475
+ remove_extension = ft.partial(self.remove_extension,
+ with_dependents=with_dependents)
+
+ set(map(remove_extension, extensions))
+ set(map(self.remove_standalone, standalones))
+
+ self.purge_empty_directories()
+
+ def remove_extension(self, spec, with_dependents=True):
+ """
+ Remove (unlink) an extension from this view.
+ """
+ if not self.check_added(spec):
+ tty.warn(self._croot +
+ 'Skipping package not linked in view: %s' % spec.name)
+ return
+
+ # The spec might have been deactivated as depdency of another package
+ # already
+ if spec.package.is_activated(self.extensions_layout):
+ spec.package.do_deactivate(
+ verbose=self.verbose,
+ remove_dependents=with_dependents,
+ extensions_layout=self.extensions_layout)
+ self.unlink_meta_folder(spec)
+
+ def remove_standalone(self, spec):
+ """
+ Remove (unlink) a standalone package from this view.
+ """
+ if not self.check_added(spec):
+ tty.warn(self._croot +
+ 'Skipping package not linked in view: %s' % spec.name)
+ return
+
+ tree = LinkTree(spec.prefix)
+ tree.unmerge(self.root, ignore=ignore_metadata_dir)
+ self.unlink_meta_folder(spec)
+
+ if self.verbose:
+ tty.info(self._croot + 'Removed package: %s' % colorize_spec(spec))
+
+ def get_all_specs(self):
+ dotspack = join_path(self.root, spack.store.layout.metadata_dir)
+ if os.path.exists(dotspack):
+ return list(filter(None, map(self.get_spec, os.listdir(dotspack))))
+ else:
+ return []
+
+ def get_conflicts(self, *specs):
+ """
+ Return list of tuples (<spec>, <spec in view>) where the spec
+ active in the view differs from the one to be activated.
+ """
+ in_view = map(self.get_spec, specs)
+ return [(s, v) for s, v in zip(specs, in_view)
+ if v is not None and s != v]
+
+ def get_path_meta_folder(self, spec):
+ "Get path to meta folder for either spec or spec name."
+ return join_path(self.root, spack.store.layout.metadata_dir,
+ getattr(spec, "name", spec))
+
+ def get_spec(self, spec):
+ dotspack = self.get_path_meta_folder(spec)
+ filename = join_path(dotspack, spack.store.layout.spec_file_name)
+
+ try:
+ with open(filename, "r") as f:
+ return spack.spec.Spec.from_yaml(f)
+ except IOError:
+ return None
+
+ def link_meta_folder(self, spec):
+ src = spack.store.layout.metadata_path(spec)
+ tgt = self.get_path_meta_folder(spec)
+
+ tree = LinkTree(src)
+ # there should be no conflicts when linking the meta folder
+ tree.merge(tgt, link=self.link)
+
+ def print_conflict(self, spec_active, spec_specified, level="error"):
+ "Singular print function for spec conflicts."
+ cprint = getattr(tty, level)
+ color = sys.stdout.isatty()
+ linked = tty.color.colorize(" (@gLinked@.)", color=color)
+ specified = tty.color.colorize("(@rSpecified@.)", color=color)
+ cprint(self._croot + "Package conflict detected:\n"
+ "%s %s\n" % (linked, colorize_spec(spec_active)) +
+ "%s %s" % (specified, colorize_spec(spec_specified)))
+
+ def print_status(self, *specs, **kwargs):
+ if kwargs.get("with_dependencies", False):
+ specs = set(get_dependencies(specs))
+
+ specs = sorted(specs, key=lambda s: s.name)
+ in_view = list(map(self.get_spec, specs))
+
+ for s, v in zip(specs, in_view):
+ if not v:
+ tty.error(self._croot +
+ 'Package not linked: %s' % s.name)
+ elif s != v:
+ self.print_conflict(v, s, level="warn")
+
+ in_view = list(filter(None, in_view))
+
+ if len(specs) > 0:
+ tty.msg("Packages linked in %s:" % self._croot[:-1])
+
+ # avoid circular dependency
+ import spack.cmd
+ spack.cmd.display_specs(in_view, flags=True, variants=True,
+ long=self.verbose)
+ else:
+ tty.warn(self._croot + "No packages found.")
+
+ def purge_empty_directories(self):
+ """
+ Ascend up from the leaves accessible from `path`
+ and remove empty directories.
+ """
+ for dirpath, subdirs, files in os.walk(self.root, topdown=False):
+ for sd in subdirs:
+ sdp = os.path.join(dirpath, sd)
+ try:
+ os.rmdir(sdp)
+ except OSError:
+ pass
+
+ def unlink_meta_folder(self, spec):
+ path = self.get_path_meta_folder(spec)
+ assert os.path.exists(path)
+ shutil.rmtree(path)
+
+ def _check_no_ext_conflicts(self, spec):
+ """
+ Check that there is no extension conflict for specs.
+ """
+ extendee = spec.package.extendee_spec
+ try:
+ self.extensions_layout.check_extension_conflict(extendee, spec)
+ except ExtensionAlreadyInstalledError:
+ # we print the warning here because later on the order in which
+ # packages get activated is not clear (set-sorting)
+ tty.warn(self._croot +
+ 'Skipping already activated package: %s' % spec.name)
+
+
+#####################
+# utility functions #
+#####################
+
+def colorize_root(root):
+ colorize = ft.partial(tty.color.colorize, color=sys.stdout.isatty())
+ pre, post = map(colorize, "@M[@. @M]@.".split())
+ return "".join([pre, root, post])
+
+
+def colorize_spec(spec):
+ "Colorize spec output if in TTY."
+ if sys.stdout.isatty():
+ return spec.cshort_spec
+ else:
+ return spec.short_spec
+
+
+def find_dependents(all_specs, providers, deptype='run'):
+ """
+ Return a set containing all those specs from all_specs that depend on
+ providers at the given dependency type.
+ """
+ dependents = set()
+ for s in all_specs:
+ for dep in s.traverse(deptype=deptype):
+ if dep in providers:
+ dependents.add(s)
+ return dependents
+
+
+def filter_exclude(specs, exclude):
+ "Filter specs given sequence of exclude regex"
+ to_exclude = [re.compile(e) for e in exclude]
+
+ def keep(spec):
+ for e in to_exclude:
+ if e.match(spec.name):
+ return False
+ return True
+ return filter(keep, specs)
+
+
+def get_dependencies(specs):
+ "Get set of dependencies (includes specs)"
+ retval = set()
+ set(map(retval.update, (set(s.traverse()) for s in specs)))
+ return retval
+
+
+def ignore_metadata_dir(f):
+ return f in spack.store.layout.hidden_file_paths
diff --git a/lib/spack/spack/graph.py b/lib/spack/spack/graph.py
index 1f0390dae9..896bf15e36 100644
--- a/lib/spack/spack/graph.py
+++ b/lib/spack/spack/graph.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -61,18 +61,21 @@ Note that ``graph_ascii`` assumes a single spec while ``graph_dot``
can take a number of specs as input.
"""
+import sys
-from heapq import *
+from heapq import heapify, heappop, heappush
+from six import iteritems
-from llnl.util.lang import *
-from llnl.util.tty.color import *
+from llnl.util.tty.color import ColorStream
+
+from spack.spec import Spec
+from spack.dependency import all_deptypes, canonical_deptype
-from spack.spec import *
__all__ = ['topological_sort', 'graph_ascii', 'AsciiGraph', 'graph_dot']
-def topological_sort(spec, reverse=False, deptype=None):
+def topological_sort(spec, reverse=False, deptype='all'):
"""Topological sort for specs.
Return a list of dependency specs sorted topologically. The spec
@@ -138,10 +141,10 @@ class AsciiGraph(object):
def __init__(self):
# These can be set after initialization or after a call to
# graph() to change behavior.
- self.node_character = '*'
+ self.node_character = 'o'
self.debug = False
self.indent = 0
- self.deptype = alldeps
+ self.deptype = all_deptypes
# These are colors in the order they'll be used for edges.
# See llnl.util.tty.color for details on color characters.
@@ -364,7 +367,7 @@ class AsciiGraph(object):
self._set_state(EXPAND_RIGHT, index)
self._out.write("\n")
- def write(self, spec, **kwargs):
+ def write(self, spec, color=None, out=None):
"""Write out an ascii graph of the provided spec.
Arguments:
@@ -378,14 +381,13 @@ class AsciiGraph(object):
based on output file.
"""
- out = kwargs.get('out', None)
- if not out:
+ if out is None:
out = sys.stdout
- color = kwargs.get('color', None)
- if not color:
+ if color is None:
color = out.isatty()
- self._out = ColorStream(sys.stdout, color=color)
+
+ self._out = ColorStream(out, color=color)
# We'll traverse the spec in topo order as we graph it.
topo_order = topological_sort(spec, reverse=True, deptype=self.deptype)
@@ -494,7 +496,7 @@ class AsciiGraph(object):
def graph_ascii(spec, node='o', out=None, debug=False,
- indent=0, color=None, deptype=None):
+ indent=0, color=None, deptype='all'):
graph = AsciiGraph()
graph.debug = debug
graph.indent = indent
@@ -505,7 +507,7 @@ def graph_ascii(spec, node='o', out=None, debug=False,
graph.write(spec, color=color, out=out)
-def graph_dot(specs, deptype=None, static=False, out=None):
+def graph_dot(specs, deptype='all', static=False, out=None):
"""Generate a graph in dot format of all provided specs.
Print out a dot formatted graph of all the dependencies between
@@ -516,9 +518,7 @@ def graph_dot(specs, deptype=None, static=False, out=None):
"""
if out is None:
out = sys.stdout
-
- if deptype is None:
- deptype = alldeps
+ deptype = canonical_deptype(deptype)
out.write('digraph G {\n')
out.write(' labelloc = "b"\n')
@@ -563,7 +563,7 @@ def graph_dot(specs, deptype=None, static=False, out=None):
continue
# Add edges for each depends_on in the package.
- for dep_name, dep in spec.package.dependencies.iteritems():
+ for dep_name, dep in iteritems(spec.package.dependencies):
deps.add((spec.name, dep_name))
# If the package provides something, add an edge for that.
@@ -572,7 +572,7 @@ def graph_dot(specs, deptype=None, static=False, out=None):
else:
def key_label(s):
- return s.dag_hash(), "%s-%s" % (s.name, s.dag_hash(7))
+ return s.dag_hash(), "%s/%s" % (s.name, s.dag_hash(7))
for s in spec.traverse(deptype=deptype):
skey, slabel = key_label(s)
diff --git a/lib/spack/spack/hooks/__init__.py b/lib/spack/spack/hooks/__init__.py
index 6454a865b6..5bf4110608 100644
--- a/lib/spack/spack/hooks/__init__.py
+++ b/lib/spack/spack/hooks/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,10 +31,11 @@
Currently the following hooks are supported:
- * pre_install()
- * post_install()
- * pre_uninstall()
- * post_uninstall()
+ * pre_run()
+ * pre_install(spec)
+ * post_install(spec)
+ * pre_uninstall(spec)
+ * post_uninstall(spec)
This can be used to implement support for things like module
systems (e.g. modules, dotkit, etc.) or to add other custom
diff --git a/lib/spack/spack/hooks/case_consistency.py b/lib/spack/spack/hooks/case_consistency.py
index faf38f7ae3..54139cb039 100644
--- a/lib/spack/spack/hooks/case_consistency.py
+++ b/lib/spack/spack/hooks/case_consistency.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,21 +23,27 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from __future__ import absolute_import
+
import os
import re
import platform
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir
import spack
-from spack.util.executable import *
+from spack.cmd import spack_is_git_repo
+from spack.util.executable import which, ProcessError
def pre_run():
if platform.system() != "Darwin":
return
- git_case_consistency_check(spack.repo.get_repo('builtin').packages_path)
+ try:
+ repo = spack.repo.get_repo('builtin')
+ git_case_consistency_check(repo.packages_path)
+ except spack.repository.UnknownNamespaceError:
+ pass
def git_case_consistency_check(path):
@@ -58,12 +64,15 @@ def git_case_consistency_check(path):
TODO: lowercase for a long while.
"""
- with working_dir(path):
- # Don't bother fixing case if Spack isn't in a git repository
- git = which('git')
- if not git:
- return
+ # Don't bother fixing case if Spack isn't in a git repository
+ if not spack_is_git_repo():
+ return
+ git = which('git', required=False)
+ if not git:
+ return
+
+ with working_dir(path):
try:
git_filenames = git('ls-tree', '--name-only', 'HEAD', output=str)
git_filenames = set(re.split(r'\s+', git_filenames.strip()))
diff --git a/lib/spack/spack/hooks/extensions.py b/lib/spack/spack/hooks/extensions.py
index 070b309a43..7865c34dc0 100644
--- a/lib/spack/spack/hooks/extensions.py
+++ b/lib/spack/spack/hooks/extensions.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,9 +24,11 @@
##############################################################################
-def pre_uninstall(pkg):
- assert(pkg.spec.concrete)
+def pre_uninstall(spec):
+ pkg = spec.package
+ assert spec.concrete
if pkg.is_extension:
- if pkg.activated:
+ if pkg.is_activated():
+ # deactivate globally
pkg.do_deactivate(force=True)
diff --git a/lib/spack/spack/hooks/licensing.py b/lib/spack/spack/hooks/licensing.py
index a99099749c..9b5a2728ed 100644
--- a/lib/spack/spack/hooks/licensing.py
+++ b/lib/spack/spack/hooks/licensing.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,10 @@ import llnl.util.tty as tty
from llnl.util.filesystem import join_path, mkdirp
-def pre_install(pkg):
+def pre_install(spec):
"""This hook handles global license setup for licensed software."""
- if pkg.license_required:
+ pkg = spec.package
+ if pkg.license_required and not pkg.spec.external:
set_up_license(pkg)
@@ -142,10 +143,12 @@ def write_license_file(pkg, license_path):
license.close()
-def post_install(pkg):
+def post_install(spec):
"""This hook symlinks local licenses to the global license for
- licensed software."""
- if pkg.license_required:
+ licensed software.
+ """
+ pkg = spec.package
+ if pkg.license_required and not pkg.spec.external:
symlink_license(pkg)
diff --git a/lib/spack/spack/hooks/module_file_generation.py b/lib/spack/spack/hooks/module_file_generation.py
index 445cea4e91..6858b0874e 100644
--- a/lib/spack/spack/hooks/module_file_generation.py
+++ b/lib/spack/spack/hooks/module_file_generation.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,15 +23,27 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import spack.modules
+import spack.modules.common
+import llnl.util.tty as tty
+try:
+ enabled = spack.modules.common.configuration['enable']
+except KeyError:
+ tty.debug('NO MODULE WRITTEN: list of enabled module files is empty')
+ enabled = []
-def post_install(pkg):
- for item, cls in spack.modules.module_types.iteritems():
- generator = cls(pkg.spec)
- generator.write()
+def _for_each_enabled(spec, method_name):
+ """Calls a method for each enabled module"""
+ for name in enabled:
+ generator = spack.modules.module_types[name](spec)
+ try:
+ getattr(generator, method_name)()
+ except RuntimeError as e:
+ msg = 'cannot perform the requested {0} operation on module files'
+ msg += ' [{1}]'
+ tty.warn(msg.format(method_name, str(e)))
-def post_uninstall(pkg):
- for item, cls in spack.modules.module_types.iteritems():
- generator = cls(pkg.spec)
- generator.remove()
+
+post_install = lambda spec: _for_each_enabled(spec, 'write')
+post_uninstall = lambda spec: _for_each_enabled(spec, 'remove')
diff --git a/lib/spack/spack/hooks/sbang.py b/lib/spack/spack/hooks/sbang.py
index 6f9736a018..887dfdc5b9 100644
--- a/lib/spack/spack/hooks/sbang.py
+++ b/lib/spack/spack/hooks/sbang.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,9 +38,12 @@ shebang_limit = 127
def shebang_too_long(path):
"""Detects whether a file has a shebang line that is too long."""
- with open(path, 'r') as script:
+ if not os.path.isfile(path):
+ return False
+
+ with open(path, 'rb') as script:
bytes = script.read(2)
- if bytes != '#!':
+ if bytes != b'#!':
return False
line = bytes + script.readline()
@@ -59,10 +62,17 @@ def filter_shebang(path):
if original.startswith(new_sbang_line):
return
+ # In the following, newlines have to be excluded in the regular expression
+ # else any mention of "lua" in the document will lead to spurious matches.
+
# Use --! instead of #! on second line for lua.
- if re.search(r'^#!(/[^/]*)*lua\b', original):
+ if re.search(r'^#!(/[^/\n]*)*lua\b', original):
original = re.sub(r'^#', '--', original)
+ # Use //! instead of #! on second line for node.js.
+ if re.search(r'^#!(/[^/\n]*)*node\b', original):
+ original = re.sub(r'^#', '//', original)
+
# Change non-writable files to be writable if needed.
saved_mode = None
if not os.access(path, os.W_OK):
@@ -102,10 +112,14 @@ def filter_shebangs_in_directory(directory, filenames=None):
filter_shebang(path)
-def post_install(pkg):
+def post_install(spec):
"""This hook edits scripts so that they call /bin/bash
- $spack_prefix/bin/sbang instead of something longer than the
- shebang limit."""
+ $spack_prefix/bin/sbang instead of something longer than the
+ shebang limit.
+ """
+ if spec.external:
+ tty.debug('SKIP: shebang filtering [external package]')
+ return
- for directory, _, filenames in os.walk(pkg.prefix):
+ for directory, _, filenames in os.walk(spec.prefix):
filter_shebangs_in_directory(directory, filenames)
diff --git a/lib/spack/spack/hooks/yaml_version_check.py b/lib/spack/spack/hooks/yaml_version_check.py
index a4b38198bc..338d2e51e7 100644
--- a/lib/spack/spack/hooks/yaml_version_check.py
+++ b/lib/spack/spack/hooks/yaml_version_check.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/main.py b/lib/spack/spack/main.py
new file mode 100644
index 0000000000..c3e1ea4506
--- /dev/null
+++ b/lib/spack/spack/main.py
@@ -0,0 +1,554 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""This is the implementation of the Spack command line executable.
+
+In a normal Spack installation, this is invoked from the bin/spack script
+after the system path is set up.
+"""
+from __future__ import print_function
+
+import sys
+import os
+import inspect
+import pstats
+import argparse
+from six import StringIO
+
+import llnl.util.tty as tty
+from llnl.util.tty.log import log_output
+
+import spack
+import spack.cmd
+from spack.error import SpackError
+
+
+# names of profile statistics
+stat_names = pstats.Stats.sort_arg_dict_default
+
+# help levels in order of detail (i.e., number of commands shown)
+levels = ['short', 'long']
+
+# intro text for help at different levels
+intro_by_level = {
+ 'short': 'These are common spack commands:',
+ 'long': 'Complete list of spack commands:',
+}
+
+# control top-level spack options shown in basic vs. advanced help
+options_by_level = {
+ 'short': ['h', 'k', 'V', 'color'],
+ 'long': 'all'
+}
+
+# Longer text for each section, to show in help
+section_descriptions = {
+ 'admin': 'administration',
+ 'basic': 'query packages',
+ 'build': 'build packages',
+ 'config': 'configuration',
+ 'developer': 'developer',
+ 'environment': 'environment',
+ 'extensions': 'extensions',
+ 'help': 'more help',
+ 'packaging': 'create packages',
+ 'system': 'system',
+}
+
+# preferential command order for some sections (e.g., build pipeline is
+# in execution order, not alphabetical)
+section_order = {
+ 'basic': ['list', 'info', 'find'],
+ 'build': ['fetch', 'stage', 'patch', 'configure', 'build', 'restage',
+ 'install', 'uninstall', 'clean']
+}
+
+# Properties that commands are required to set.
+required_command_properties = ['level', 'section', 'description']
+
+
+def set_working_dir():
+ """Change the working directory to getcwd, or spack prefix if no cwd."""
+ try:
+ spack.spack_working_dir = os.getcwd()
+ except OSError:
+ os.chdir(spack.spack_prefix)
+ spack.spack_working_dir = spack.spack_prefix
+
+
+def add_all_commands(parser):
+ """Add all spack subcommands to the parser."""
+ for cmd in spack.cmd.commands:
+ parser.add_command(cmd)
+
+
+def index_commands():
+ """create an index of commands by section for this help level"""
+ index = {}
+ for command in spack.cmd.commands:
+ cmd_module = spack.cmd.get_module(command)
+
+ # make sure command modules have required properties
+ for p in required_command_properties:
+ prop = getattr(cmd_module, p, None)
+ if not prop:
+ tty.die("Command doesn't define a property '%s': %s"
+ % (p, command))
+
+ # add commands to lists for their level and higher levels
+ for level in reversed(levels):
+ level_sections = index.setdefault(level, {})
+ commands = level_sections.setdefault(cmd_module.section, [])
+ commands.append(command)
+ if level == cmd_module.level:
+ break
+
+ return index
+
+
+class SpackArgumentParser(argparse.ArgumentParser):
+ def format_help_sections(self, level):
+ """Format help on sections for a particular verbosity level.
+
+ Args:
+ level (str): 'short' or 'long' (more commands shown for long)
+ """
+ if level not in levels:
+ raise ValueError("level must be one of: %s" % levels)
+
+ # lazily add all commands to the parser when needed.
+ add_all_commands(self)
+
+ """Print help on subcommands in neatly formatted sections."""
+ formatter = self._get_formatter()
+
+ # Create a list of subcommand actions. Argparse internals are nasty!
+ # Note: you can only call _get_subactions() once. Even nastier!
+ if not hasattr(self, 'actions'):
+ self.actions = self._subparsers._actions[-1]._get_subactions()
+
+ # make a set of commands not yet added.
+ remaining = set(spack.cmd.commands)
+
+ def add_group(group):
+ formatter.start_section(group.title)
+ formatter.add_text(group.description)
+ formatter.add_arguments(group._group_actions)
+ formatter.end_section()
+
+ def add_subcommand_group(title, commands):
+ """Add informational help group for a specific subcommand set."""
+ cmd_set = set(commands)
+
+ # make a dict of commands of interest
+ cmds = dict((action.metavar, action) for action in self.actions
+ if action.metavar in cmd_set)
+
+ # add commands to a group in order, and add the group
+ group = argparse._ArgumentGroup(self, title=title)
+ for name in commands:
+ group._add_action(cmds[name])
+ if name in remaining:
+ remaining.remove(name)
+ add_group(group)
+
+ # select only the options for the particular level we're showing.
+ show_options = options_by_level[level]
+ if show_options != 'all':
+ opts = dict((opt.option_strings[0].strip('-'), opt)
+ for opt in self._optionals._group_actions)
+
+ new_actions = [opts[letter] for letter in show_options]
+ self._optionals._group_actions = new_actions
+
+ options = ''.join(opt.option_strings[0].strip('-')
+ for opt in self._optionals._group_actions)
+
+ index = index_commands()
+
+ # usage
+ formatter.add_text(
+ "usage: %s [-%s] <command> [...]" % (self.prog, options))
+
+ # description
+ formatter.add_text(self.description)
+
+ # start subcommands
+ formatter.add_text(intro_by_level[level])
+
+ # add argument groups based on metadata in commands
+ sections = index[level]
+ for section in sorted(sections):
+ if section == 'help':
+ continue # Cover help in the epilog.
+
+ group_description = section_descriptions.get(section, section)
+
+ to_display = sections[section]
+ commands = []
+
+ # add commands whose order we care about first.
+ if section in section_order:
+ commands.extend(cmd for cmd in section_order[section]
+ if cmd in to_display)
+
+ # add rest in alphabetical order.
+ commands.extend(cmd for cmd in sorted(sections[section])
+ if cmd not in commands)
+
+ # add the group to the parser
+ add_subcommand_group(group_description, commands)
+
+ # optionals
+ add_group(self._optionals)
+
+ # epilog
+ formatter.add_text("""\
+{help}:
+ spack help -a list all available commands
+ spack help <command> help on a specific command
+ spack help --spec help on the spec syntax
+ spack docs open http://spack.rtfd.io/ in a browser"""
+.format(help=section_descriptions['help']))
+
+ # determine help from format above
+ return formatter.format_help()
+
+ def add_command(self, name):
+ """Add one subcommand to this parser."""
+ # convert CLI command name to python module name
+ name = spack.cmd.get_python_name(name)
+
+ # lazily initialize any subparsers
+ if not hasattr(self, 'subparsers'):
+ # remove the dummy "command" argument.
+ if self._actions[-1].dest == 'command':
+ self._remove_action(self._actions[-1])
+ self.subparsers = self.add_subparsers(metavar='COMMAND',
+ dest="command")
+
+ # each command module implements a parser() function, to which we
+ # pass its subparser for setup.
+ module = spack.cmd.get_module(name)
+ cmd_name = name.replace('_', '-')
+ subparser = self.subparsers.add_parser(
+ cmd_name, help=module.description, description=module.description)
+ module.setup_parser(subparser)
+ return module
+
+ def format_help(self, level='short'):
+ if self.prog == 'spack':
+ # use format_help_sections for the main spack parser, but not
+ # for subparsers
+ return self.format_help_sections(level)
+ else:
+ # in subparsers, self.prog is, e.g., 'spack install'
+ return super(SpackArgumentParser, self).format_help()
+
+
+def make_argument_parser():
+ """Create an basic argument parser without any subcommands added."""
+ parser = SpackArgumentParser(
+ formatter_class=argparse.RawTextHelpFormatter, add_help=False,
+ description=(
+ "A flexible package manager that supports multiple versions,\n"
+ "configurations, platforms, and compilers."))
+
+ # stat names in groups of 7, for nice wrapping.
+ stat_lines = list(zip(*(iter(stat_names),) * 7))
+
+ parser.add_argument('-h', '--help', action='store_true',
+ help="show this help message and exit")
+ parser.add_argument('--color', action='store', default='auto',
+ choices=('always', 'never', 'auto'),
+ help="when to colorize output; default is auto")
+ parser.add_argument('-d', '--debug', action='store_true',
+ help="write out debug logs during compile")
+ parser.add_argument('-D', '--pdb', action='store_true',
+ help="run spack under the pdb debugger")
+ parser.add_argument('-k', '--insecure', action='store_true',
+ help="do not check ssl certificates when downloading")
+ parser.add_argument('-m', '--mock', action='store_true',
+ help="use mock packages instead of real ones")
+ parser.add_argument('-p', '--profile', action='store_true',
+ help="profile execution using cProfile")
+ parser.add_argument('-P', '--sorted-profile', default=None, metavar="STAT",
+ help="profile and sort by one or more of:\n[%s]" %
+ ',\n '.join([', '.join(line) for line in stat_lines]))
+ parser.add_argument('--lines', default=20, action='store',
+ help="lines of profile output; default 20; or 'all'")
+ parser.add_argument('-v', '--verbose', action='store_true',
+ help="print additional output during builds")
+ parser.add_argument('-s', '--stacktrace', action='store_true',
+ help="add stacktraces to all printed statements")
+ parser.add_argument('-V', '--version', action='store_true',
+ help='show version number and exit')
+ return parser
+
+
+def setup_main_options(args):
+ """Configure spack globals based on the basic options."""
+ # Set up environment based on args.
+ tty.set_verbose(args.verbose)
+ tty.set_debug(args.debug)
+ tty.set_stacktrace(args.stacktrace)
+ spack.debug = args.debug
+
+ if spack.debug:
+ import spack.util.debug as debug
+ debug.register_interrupt_handler()
+
+ if args.mock:
+ from spack.repository import RepoPath
+ spack.repo.swap(RepoPath(spack.mock_packages_path))
+
+ # If the user asked for it, don't check ssl certs.
+ if args.insecure:
+ tty.warn("You asked for --insecure. Will NOT check SSL certificates.")
+ spack.insecure = True
+
+ # when to use color (takes always, auto, or never)
+ tty.color.set_color_when(args.color)
+
+
+def allows_unknown_args(command):
+ """Implements really simple argument injection for unknown arguments.
+
+ Commands may add an optional argument called "unknown args" to
+ indicate they can handle unknonwn args, and we'll pass the unknown
+ args in.
+ """
+ info = dict(inspect.getmembers(command))
+ varnames = info['__code__'].co_varnames
+ argcount = info['__code__'].co_argcount
+ return (argcount == 3 and varnames[2] == 'unknown_args')
+
+
+def _invoke_spack_command(command, parser, args, unknown_args):
+ """Run a spack command *without* setting spack global options."""
+ if allows_unknown_args(command):
+ return_val = command(parser, args, unknown_args)
+ else:
+ if unknown_args:
+ tty.die('unrecognized arguments: %s' % ' '.join(unknown_args))
+ return_val = command(parser, args)
+
+ # Allow commands to return and error code if they want
+ return 0 if return_val is None else return_val
+
+
+class SpackCommand(object):
+ """Callable object that invokes a spack command (for testing).
+
+ Example usage::
+
+ install = SpackCommand('install')
+ install('-v', 'mpich')
+
+ Use this to invoke Spack commands directly from Python and check
+ their output.
+ """
+ def __init__(self, command):
+ """Create a new SpackCommand that invokes ``command`` when called."""
+ self.parser = make_argument_parser()
+ self.parser.add_command(command)
+ self.command_name = command
+ self.command = spack.cmd.get_command(command)
+
+ def __call__(self, *argv, **kwargs):
+ """Invoke this SpackCommand.
+
+ Args:
+ argv (list of str): command line arguments.
+
+ Keyword Args:
+ fail_on_error (optional bool): Don't raise an exception on error
+
+ Returns:
+ (str): combined output and error as a string
+
+ On return, if ``fail_on_error`` is False, return value of comman
+ is set in ``returncode`` property, and the error is set in the
+ ``error`` property. Otherwise, raise an error.
+ """
+ # set these before every call to clear them out
+ self.returncode = None
+ self.error = None
+
+ args, unknown = self.parser.parse_known_args(
+ [self.command_name] + list(argv))
+
+ fail_on_error = kwargs.get('fail_on_error', True)
+
+ out = StringIO()
+ try:
+ with log_output(out):
+ self.returncode = _invoke_spack_command(
+ self.command, self.parser, args, unknown)
+
+ except SystemExit as e:
+ self.returncode = e.code
+
+ except BaseException as e:
+ self.error = e
+ if fail_on_error:
+ raise
+
+ if fail_on_error and self.returncode not in (None, 0):
+ raise SpackCommandError(
+ "Command exited with code %d: %s(%s)" % (
+ self.returncode, self.command_name,
+ ', '.join("'%s'" % a for a in argv)))
+
+ return out.getvalue()
+
+
+def _main(command, parser, args, unknown_args):
+ """Run a spack command *and* set spack globaloptions."""
+ # many operations will fail without a working directory.
+ set_working_dir()
+
+ # only setup main options in here, after the real parse (we'll get it
+ # wrong if we do it after the initial, partial parse)
+ setup_main_options(args)
+ spack.hooks.pre_run()
+
+ # Now actually execute the command
+ try:
+ return _invoke_spack_command(command, parser, args, unknown_args)
+ except SpackError as e:
+ e.die() # gracefully die on any SpackErrors
+ except Exception as e:
+ if spack.debug:
+ raise
+ tty.die(str(e))
+ except KeyboardInterrupt:
+ sys.stderr.write('\n')
+ tty.die("Keyboard interrupt.")
+
+
+def _profile_wrapper(command, parser, args, unknown_args):
+ import cProfile
+
+ try:
+ nlines = int(args.lines)
+ except ValueError:
+ if args.lines != 'all':
+ tty.die('Invalid number for --lines: %s' % args.lines)
+ nlines = -1
+
+ # allow comma-separated list of fields
+ sortby = ['time']
+ if args.sorted_profile:
+ sortby = args.sorted_profile.split(',')
+ for stat in sortby:
+ if stat not in stat_names:
+ tty.die("Invalid sort field: %s" % stat)
+
+ try:
+ # make a profiler and run the code.
+ pr = cProfile.Profile()
+ pr.enable()
+ return _main(command, parser, args, unknown_args)
+
+ finally:
+ pr.disable()
+
+ # print out profile stats.
+ stats = pstats.Stats(pr)
+ stats.sort_stats(*sortby)
+ stats.print_stats(nlines)
+
+
+def main(argv=None):
+ """This is the entry point for the Spack command.
+
+ Args:
+ argv (list of str or None): command line arguments, NOT including
+ the executable name. If None, parses from sys.argv.
+ """
+ # Create a parser with a simple positional argument first. We'll
+ # lazily load the subcommand(s) we need later. This allows us to
+ # avoid loading all the modules from spack.cmd when we don't need
+ # them, which reduces startup latency.
+ parser = make_argument_parser()
+ parser.add_argument('command', nargs=argparse.REMAINDER)
+ args, unknown = parser.parse_known_args(argv)
+
+ # Just print help and exit if run with no arguments at all
+ no_args = (len(sys.argv) == 1) if argv is None else (len(argv) == 0)
+ if no_args:
+ parser.print_help()
+ return 1
+
+ # -h and -V are special as they do not require a command, but all the
+ # other options do nothing without a command.
+ if not args.command:
+ if args.version:
+ print(spack.spack_version)
+ return 0
+ else:
+ parser.print_help()
+ return 0 if args.help else 1
+
+ # Try to load the particular command the caller asked for. If there
+ # is no module for it, just die.
+ command_name = spack.cmd.get_python_name(args.command[0])
+ try:
+ parser.add_command(command_name)
+ except ImportError:
+ if spack.debug:
+ raise
+ tty.die("Unknown command: %s" % args.command[0])
+
+ # Re-parse with the proper sub-parser added.
+ args, unknown = parser.parse_known_args()
+
+ # we now know whether options go with spack or the command
+ if args.version:
+ print(spack.spack_version)
+ return 0
+ elif args.help:
+ parser.print_help()
+ return 0
+
+ # now we can actually execute the command.
+ command = spack.cmd.get_command(command_name)
+ try:
+ if args.profile or args.sorted_profile:
+ _profile_wrapper(command, parser, args, unknown)
+ elif args.pdb:
+ import pdb
+ pdb.runctx('_main(command, parser, args, unknown)',
+ globals(), locals())
+ return 0
+ else:
+ return _main(command, parser, args, unknown)
+
+ except SystemExit as e:
+ return e.code
+
+
+class SpackCommandError(Exception):
+ """Raised when SpackCommand execution fails."""
diff --git a/lib/spack/spack/mirror.py b/lib/spack/spack/mirror.py
index aef5e2e8ee..f8cedc38b4 100644
--- a/lib/spack/spack/mirror.py
+++ b/lib/spack/spack/mirror.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,14 +33,14 @@ to download packages directly from a mirror (e.g., on an intranet).
import sys
import os
import llnl.util.tty as tty
-from llnl.util.filesystem import *
+from llnl.util.filesystem import mkdirp, join_path
import spack
import spack.error
import spack.url as url
import spack.fetch_strategy as fs
from spack.spec import Spec
-from spack.version import *
+from spack.version import VersionList
from spack.util.compression import allowed_archive
@@ -53,13 +53,33 @@ def mirror_archive_filename(spec, fetcher, resourceId=None):
if fetcher.expand_archive:
# If we fetch with a URLFetchStrategy, use URL's archive type
ext = url.determine_url_file_extension(fetcher.url)
- ext = ext or spec.package.versions[spec.package.version].get(
- 'extension', None)
- ext = ext.lstrip('.')
+
+ # If the filename does not end with a normal suffix,
+ # see if the package explicitly declares the extension
+ if not ext:
+ ext = spec.package.versions[spec.package.version].get(
+ 'extension', None)
+
+ if ext:
+ # Remove any leading dots
+ ext = ext.lstrip('.')
+
if not ext:
- raise MirrorError(
- "%s version does not specify an extension" % spec.name +
- " and could not parse extension from %s" % fetcher.url)
+ msg = """\
+Unable to parse extension from {0}.
+
+If this URL is for a tarball but does not include the file extension
+in the name, you can explicitly declare it with the following syntax:
+
+ version('1.2.3', 'hash', extension='tar.gz')
+
+If this URL is for a download like a .jar or .whl that does not need
+to be expanded, or an uncompressed installation script, you can tell
+Spack not to expand it with the following syntax:
+
+ version('1.2.3', 'hash', expand=False)
+"""
+ raise MirrorError(msg.format(fetcher.url))
else:
# If the archive shouldn't be expanded, don't check extension.
ext = None
@@ -117,13 +137,10 @@ def get_matching_versions(specs, **kwargs):
def suggest_archive_basename(resource):
- """
- Return a tentative basename for an archive.
-
- Raises an exception if the name is not an allowed archive type.
+ """Return a tentative basename for an archive.
- :param fetcher:
- :return:
+ Raises:
+ RuntimeError: if the name is not an allowed archive type.
"""
basename = os.path.basename(resource.fetcher.url)
if not allowed_archive(basename):
@@ -207,14 +224,14 @@ def add_single_spec(spec, mirror_root, categories, **kwargs):
# create a subdirectory for the current package@version
archive_path = os.path.abspath(join_path(
mirror_root, mirror_archive_path(spec, fetcher)))
- name = spec.format("$_$@")
+ name = spec.cformat("$_$@")
else:
resource = stage.resource
archive_path = os.path.abspath(join_path(
mirror_root,
mirror_archive_path(spec, fetcher, resource.name)))
name = "{resource} ({pkg}).".format(
- resource=resource.name, pkg=spec.format("$_$@"))
+ resource=resource.name, pkg=spec.cformat("$_$@"))
subdir = os.path.dirname(archive_path)
mkdirp(subdir)
@@ -241,8 +258,8 @@ def add_single_spec(spec, mirror_root, categories, **kwargs):
if spack.debug:
sys.excepthook(*sys.exc_info())
else:
- tty.warn("Error while fetching %s"
- % spec.format('$_$@'), e.message)
+ tty.warn(
+ "Error while fetching %s" % spec.cformat('$_$@'), e.message)
categories['error'].append(spec)
diff --git a/lib/spack/spack/modules.py b/lib/spack/spack/modules.py
deleted file mode 100644
index 5e2a840e14..0000000000
--- a/lib/spack/spack/modules.py
+++ /dev/null
@@ -1,874 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-"""
-This module contains code for creating environment modules, which can include
-dotkits, tcl modules, lmod, and others.
-
-The various types of modules are installed by post-install hooks and removed
-after an uninstall by post-uninstall hooks. This class consolidates the logic
-for creating an abstract description of the information that module systems
-need.
-
-This module also includes logic for coming up with unique names for the module
-files so that they can be found by the various shell-support files in
-$SPACK/share/spack/setup-env.*.
-
-Each hook in hooks/ implements the logic for writing its specific type of
-module file.
-"""
-import copy
-import datetime
-import itertools
-import os
-import os.path
-import re
-import string
-import textwrap
-
-import llnl.util.tty as tty
-from llnl.util.filesystem import join_path, mkdirp
-
-import spack
-import spack.compilers # Needed by LmodModules
-import spack.config
-from spack.util.path import canonicalize_path
-from spack.build_environment import parent_class_modules
-from spack.build_environment import set_module_variables_for_package
-from spack.environment import *
-
-__all__ = ['EnvModule', 'Dotkit', 'TclModule']
-
-"""Registry of all types of modules. Entries created by EnvModule's
- metaclass."""
-module_types = {}
-
-"""Module install roots are in config.yaml."""
-_roots = spack.config.get_config('config').get('module_roots', {})
-
-"""Specifics about modules are in modules.yaml"""
-_module_config = spack.config.get_config('modules')
-
-
-def print_help():
- """
- For use by commands to tell user how to activate shell support.
- """
- tty.msg("This command requires spack's shell integration.", "",
- "To initialize spack's shell commands, you must run one of",
- "the commands below. Choose the right command for your shell.",
- "", "For bash and zsh:",
- " . %s/setup-env.sh" % spack.share_path, "",
- "For csh and tcsh:", " setenv SPACK_ROOT %s" % spack.prefix,
- " source %s/setup-env.csh" % spack.share_path, "")
-
-
-def inspect_path(prefix):
- """
- Inspects the prefix of an installation to search for common layouts. Issues
- a request to modify the environment accordingly when an item is found.
-
- Args:
- prefix: prefix of the installation
-
- Returns:
- instance of EnvironmentModifications containing the requested
- modifications
- """
- env = EnvironmentModifications()
- # Inspect the prefix to check for the existence of common directories
- prefix_inspections = _module_config.get('prefix_inspections', {})
- for relative_path, variables in prefix_inspections.items():
- expected = join_path(prefix, relative_path)
- if os.path.isdir(expected):
- for variable in variables:
- env.prepend_path(variable, expected)
- return env
-
-
-def dependencies(spec, request='all'):
- """
- Returns the list of dependent specs for a given spec, according to the
- given request
-
- Args:
- spec: target spec
- request: either 'none', 'direct' or 'all'
-
- Returns:
- empty list if 'none', direct dependency list if 'direct', all
- dependencies if 'all'
- """
- if request not in ('none', 'direct', 'all'):
- message = "Wrong value for argument 'request' : "
- message += "should be one of ('none', 'direct', 'all')"
- raise tty.error(message + " [current value is '%s']" % request)
-
- if request == 'none':
- return []
-
- if request == 'direct':
- return spec.dependencies(deptype=('link', 'run'))
-
- # FIXME : during module file creation nodes seem to be visited multiple
- # FIXME : times even if cover='nodes' is given. This work around permits
- # FIXME : to get a unique list of spec anyhow. Do we miss a merge
- # FIXME : step among nodes that refer to the same package?
- seen = set()
- seen_add = seen.add
- l = sorted(
- spec.traverse(order='post',
- cover='nodes',
- deptype=('link', 'run'),
- root=False),
- reverse=True)
- return [x for x in l if not (x in seen or seen_add(x))]
-
-
-def update_dictionary_extending_lists(target, update):
- for key in update:
- value = target.get(key, None)
- if isinstance(value, list):
- target[key].extend(update[key])
- elif isinstance(value, dict):
- update_dictionary_extending_lists(target[key], update[key])
- else:
- target[key] = update[key]
-
-
-def parse_config_options(module_generator):
- """
- Parse the configuration file and returns a bunch of items that will be
- needed during module file generation
-
- Args:
- module_generator: module generator for a given spec
-
- Returns:
- autoloads: list of specs to be autoloaded
- prerequisites: list of specs to be marked as prerequisite
- filters: list of environment variables whose modification is
- blacklisted in module files
- env: list of custom environment modifications to be applied in the
- module file
- """
- # Get the configuration for this kind of generator
- module_configuration = copy.deepcopy(_module_config.get(
- module_generator.name, {}))
-
- #####
- # Merge all the rules
- #####
- module_file_actions = module_configuration.pop('all', {})
- for spec, conf in module_configuration.items():
- override = False
- if spec.endswith(':'):
- spec = spec.strip(':')
- override = True
- if module_generator.spec.satisfies(spec):
- if override:
- module_file_actions = {}
- update_dictionary_extending_lists(module_file_actions, conf)
-
- #####
- # Process the common rules
- #####
-
- # Automatic loading loads
- module_file_actions['hash_length'] = module_configuration.get(
- 'hash_length', 7)
- module_file_actions['autoload'] = dependencies(
- module_generator.spec, module_file_actions.get('autoload', 'none'))
- # Prerequisites
- module_file_actions['prerequisites'] = dependencies(
- module_generator.spec, module_file_actions.get('prerequisites',
- 'none'))
- # Environment modifications
- environment_actions = module_file_actions.pop('environment', {})
- env = EnvironmentModifications()
-
- def process_arglist(arglist):
- if method == 'unset':
- for x in arglist:
- yield (x, )
- else:
- for x in arglist.iteritems():
- yield x
-
- for method, arglist in environment_actions.items():
- for args in process_arglist(arglist):
- getattr(env, method)(*args)
-
- return module_file_actions, env
-
-
-def filter_blacklisted(specs, module_name):
- """
- Given a sequence of specs, filters the ones that are blacklisted in the
- module configuration file.
-
- Args:
- specs: sequence of spec instances
- module_name: type of module file objects
-
- Yields:
- non blacklisted specs
- """
- for x in specs:
- if module_types[module_name](x).blacklisted:
- tty.debug('\tFILTER : %s' % x)
- continue
- yield x
-
-
-def format_env_var_name(name):
- return name.replace('-', '_').upper()
-
-
-class EnvModule(object):
- name = 'env_module'
- formats = {}
-
- class __metaclass__(type):
-
- def __init__(cls, name, bases, dict):
- type.__init__(cls, name, bases, dict)
- if cls.name != 'env_module' and cls.name in _module_config[
- 'enable']:
- module_types[cls.name] = cls
-
- def __init__(self, spec=None):
- self.spec = spec
- self.pkg = spec.package # Just stored for convenience
-
- # short description default is just the package + version
- # packages can provide this optional attribute
- self.short_description = spec.format("$_ $@")
- if hasattr(self.pkg, 'short_description'):
- self.short_description = self.pkg.short_description
-
- # long description is the docstring with reduced whitespace.
- self.long_description = None
- if self.spec.package.__doc__:
- self.long_description = re.sub(r'\s+', ' ',
- self.spec.package.__doc__)
-
- @property
- def naming_scheme(self):
- try:
- naming_scheme = _module_config[self.name]['naming_scheme']
- except KeyError:
- naming_scheme = self.default_naming_format
- return naming_scheme
-
- @property
- def use_name(self):
- """
- Subclasses should implement this to return the name the module command
- uses to refer to the package.
- """
- name = self.spec.format(self.naming_scheme)
- # Not everybody is working on linux...
- parts = name.split('/')
- name = join_path(*parts)
- # Add optional suffixes based on constraints
- path_elements = [name] + self._get_suffixes()
- return '-'.join(path_elements)
-
- def _get_suffixes(self):
- configuration, _ = parse_config_options(self)
- suffixes = []
- for constraint, suffix in configuration.get('suffixes', {}).items():
- if constraint in self.spec:
- suffixes.append(suffix)
- hash_length = configuration.get('hash_length', 7)
- if hash_length != 0:
- suffixes.append(self.spec.dag_hash(length=hash_length))
- return suffixes
-
- @property
- def category(self):
- # Anything defined at the package level takes precedence
- if hasattr(self.pkg, 'category'):
- return self.pkg.category
- # Extensions
- for extendee in self.pkg.extendees:
- return '{extendee}_extension'.format(extendee=extendee)
- # Not very descriptive fallback
- return 'spack'
-
- @property
- def blacklisted(self):
- configuration = _module_config.get(self.name, {})
- whitelist_matches = [x
- for x in configuration.get('whitelist', [])
- if self.spec.satisfies(x)]
- blacklist_matches = [x
- for x in configuration.get('blacklist', [])
- if self.spec.satisfies(x)]
- if whitelist_matches:
- message = '\tWHITELIST : %s [matches : ' % self.spec.cshort_spec
- for rule in whitelist_matches:
- message += '%s ' % rule
- message += ' ]'
- tty.debug(message)
-
- if blacklist_matches:
- message = '\tBLACKLIST : %s [matches : ' % self.spec.cshort_spec
- for rule in blacklist_matches:
- message += '%s ' % rule
- message += ' ]'
- tty.debug(message)
-
- if not whitelist_matches and blacklist_matches:
- return True
-
- return False
-
- def write(self, overwrite=False):
- """
- Writes out a module file for this object.
-
- This method employs a template pattern and expects derived classes to:
- - override the header property
- - provide formats for autoload, prerequisites and environment changes
- """
- if self.blacklisted:
- return
- tty.debug("\tWRITE : %s [%s]" %
- (self.spec.cshort_spec, self.file_name))
-
- module_dir = os.path.dirname(self.file_name)
- if not os.path.exists(module_dir):
- mkdirp(module_dir)
-
- # Environment modifications guessed by inspecting the
- # installation prefix
- env = inspect_path(self.spec.prefix)
-
- # Let the extendee/dependency modify their extensions/dependencies
- # before asking for package-specific modifications
- spack_env = EnvironmentModifications()
- # TODO : the code down below is quite similar to
- # TODO : build_environment.setup_package and needs to be factored out
- # TODO : to a single place
- for item in dependencies(self.spec, 'all'):
- package = self.spec[item.name].package
- modules = parent_class_modules(package.__class__)
- for mod in modules:
- set_module_variables_for_package(package, mod)
- set_module_variables_for_package(package, package.module)
- package.setup_environment(spack_env, env)
- package.setup_dependent_package(self.pkg.module, self.spec)
- package.setup_dependent_environment(spack_env, env, self.spec)
-
- # Package-specific environment modifications
- set_module_variables_for_package(self.pkg, self.pkg.module)
- self.spec.package.setup_environment(spack_env, env)
-
- # Parse configuration file
- module_configuration, conf_env = parse_config_options(self)
- env.extend(conf_env)
- filters = module_configuration.get('filter', {}).get(
- 'environment_blacklist', {})
- # Build up the module file content
- module_file_content = self.header
- for x in filter_blacklisted(
- module_configuration.pop('autoload', []), self.name):
- module_file_content += self.autoload(x)
- for x in module_configuration.pop('load', []):
- module_file_content += self.autoload(x)
- for x in filter_blacklisted(
- module_configuration.pop('prerequisites', []), self.name):
- module_file_content += self.prerequisite(x)
- for line in self.process_environment_command(
- filter_environment_blacklist(env, filters)):
- module_file_content += line
- for line in self.module_specific_content(module_configuration):
- module_file_content += line
-
- # Print a warning in case I am accidentally overwriting
- # a module file that is already there (name clash)
- if not overwrite and os.path.exists(self.file_name):
- message = 'Module file already exists : skipping creation\n'
- message += 'file : {0.file_name}\n'
- message += 'spec : {0.spec}'
- tty.warn(message.format(self))
- return
-
- # Dump to file
- with open(self.file_name, 'w') as f:
- f.write(module_file_content)
-
- @property
- def header(self):
- raise NotImplementedError()
-
- def module_specific_content(self, configuration):
- return tuple()
-
- def autoload(self, spec):
- if not isinstance(spec, str):
- m = type(self)(spec)
- module_file = m.use_name
- else:
- module_file = spec
- return self.autoload_format.format(module_file=module_file)
-
- def prerequisite(self, spec):
- m = type(self)(spec)
- return self.prerequisite_format.format(module_file=m.use_name)
-
- def process_environment_command(self, env):
- for command in env:
- # Token expansion from configuration file
- name = format_env_var_name(
- self.spec.format(command.args.get('name', '')))
- value = self.spec.format(str(command.args.get('value', '')))
- command.update_args(name=name, value=value)
- # Format the line int the module file
- try:
- yield self.environment_modifications_formats[type(
- command)].format(**command.args)
- except KeyError:
- message = ('Cannot handle command of type {command}: '
- 'skipping request')
- details = '{context} at {filename}:{lineno}'
- tty.warn(message.format(command=type(command)))
- tty.warn(details.format(**command.args))
-
- @property
- def file_name(self):
- """Subclasses should implement this to return the name of the file
- where this module lives."""
- raise NotImplementedError()
-
- def remove(self):
- mod_file = self.file_name
- if os.path.exists(mod_file):
- try:
- os.remove(mod_file) # Remove the module file
- os.removedirs(
- os.path.dirname(mod_file)
- ) # Remove all the empty directories from the leaf up
- except OSError:
- # removedirs throws OSError on first non-empty directory found
- pass
-
-
-class Dotkit(EnvModule):
- name = 'dotkit'
- path = canonicalize_path(
- _roots.get(name, join_path(spack.share_path, name)))
-
- environment_modifications_formats = {
- PrependPath: 'dk_alter {name} {value}\n',
- RemovePath: 'dk_unalter {name} {value}\n',
- SetEnv: 'dk_setenv {name} {value}\n'
- }
-
- autoload_format = 'dk_op {module_file}\n'
-
- default_naming_format = \
- '${PACKAGE}-${VERSION}-${COMPILERNAME}-${COMPILERVER}'
-
- @property
- def file_name(self):
- return join_path(self.path, self.spec.architecture,
- '%s.dk' % self.use_name)
-
- @property
- def header(self):
- # Category
- header = ''
- if self.category:
- header += '#c %s\n' % self.category
-
- # Short description
- if self.short_description:
- header += '#d %s\n' % self.short_description
-
- # Long description
- if self.long_description:
- for line in textwrap.wrap(self.long_description, 72):
- header += '#h %s\n' % line
- return header
-
- def prerequisite(self, spec):
- tty.warn('prerequisites: not supported by dotkit module files')
- tty.warn('\tYou may want to check %s/modules.yaml'
- % spack.user_config_path)
- return ''
-
-
-class TclModule(EnvModule):
- name = 'tcl'
- path = canonicalize_path(
- _roots.get(name, join_path(spack.share_path, 'modules')))
-
- autoload_format = ('if ![ is-loaded {module_file} ] {{\n'
- ' puts stderr "Autoloading {module_file}"\n'
- ' module load {module_file}\n'
- '}}\n\n')
-
- prerequisite_format = 'prereq {module_file}\n'
-
- default_naming_format = \
- '${PACKAGE}-${VERSION}-${COMPILERNAME}-${COMPILERVER}'
-
- @property
- def file_name(self):
- return join_path(self.path, self.spec.architecture, self.use_name)
-
- @property
- def header(self):
- timestamp = datetime.datetime.now()
- # TCL Modulefile header
- header = """\
-#%%Module1.0
-## Module file created by spack (https://github.com/LLNL/spack) on %s
-##
-## %s
-##
-""" % (timestamp, self.spec.short_spec)
-
- # TODO : category ?
- # Short description
- if self.short_description:
- header += 'module-whatis \"%s\"\n\n' % self.short_description
-
- # Long description
- if self.long_description:
- header += 'proc ModulesHelp { } {\n'
- for line in textwrap.wrap(self.long_description, 72):
- header += 'puts stderr "%s"\n' % line
- header += '}\n\n'
- return header
-
- def process_environment_command(self, env):
- environment_modifications_formats_colon = {
- PrependPath: 'prepend-path {name} \"{value}\"\n',
- AppendPath: 'append-path {name} \"{value}\"\n',
- RemovePath: 'remove-path {name} \"{value}\"\n',
- SetEnv: 'setenv {name} \"{value}\"\n',
- UnsetEnv: 'unsetenv {name}\n'
- }
- environment_modifications_formats_general = {
- PrependPath:
- 'prepend-path --delim "{separator}" {name} \"{value}\"\n',
- AppendPath:
- 'append-path --delim "{separator}" {name} \"{value}\"\n',
- RemovePath:
- 'remove-path --delim "{separator}" {name} \"{value}\"\n',
- SetEnv: 'setenv {name} \"{value}\"\n',
- UnsetEnv: 'unsetenv {name}\n'
- }
- for command in env:
- # Token expansion from configuration file
- name = format_env_var_name(
- self.spec.format(command.args.get('name', '')))
- value = self.spec.format(str(command.args.get('value', '')))
- command.update_args(name=name, value=value)
- # Format the line int the module file
- try:
- if command.args.get('separator', ':') == ':':
- yield environment_modifications_formats_colon[type(
- command)].format(**command.args)
- else:
- yield environment_modifications_formats_general[type(
- command)].format(**command.args)
- except KeyError:
- message = ('Cannot handle command of type {command}: '
- 'skipping request')
- details = '{context} at {filename}:{lineno}'
- tty.warn(message.format(command=type(command)))
- tty.warn(details.format(**command.args))
-
- def module_specific_content(self, configuration):
- # Conflict
- conflict_format = configuration.get('conflict', [])
- f = string.Formatter()
- for item in conflict_format:
- line = 'conflict ' + item + '\n'
- if len([x for x in f.parse(line)
- ]) > 1: # We do have placeholder to substitute
- for naming_dir, conflict_dir in zip(
- self.naming_scheme.split('/'), item.split('/')):
- if naming_dir != conflict_dir:
- message = 'conflict scheme does not match naming '
- message += 'scheme [{spec}]\n\n'
- message += 'naming scheme : "{nformat}"\n'
- message += 'conflict scheme : "{cformat}"\n\n'
- message += '** You may want to check your '
- message += '`modules.yaml` configuration file **\n'
- tty.error(message.format(spec=self.spec,
- nformat=self.naming_scheme,
- cformat=item))
- raise SystemExit('Module generation aborted.')
- line = self.spec.format(line)
- yield line
-
-# To construct an arbitrary hierarchy of module files:
-# 1. Parse the configuration file and check that all the items in
-# hierarchical_scheme are indeed virtual packages
-# This needs to be done only once at start-up
-# 2. Order the stack as `hierarchical_scheme + ['mpi, 'compiler']
-# 3. Check which of the services are provided by the package
-# -> may be more than one
-# 4. Check which of the services are needed by the package
-# -> this determines where to write the module file
-# 5. For each combination of services in which we have at least one provider
-# here add the appropriate conditional MODULEPATH modifications
-
-
-class LmodModule(EnvModule):
- name = 'lmod'
- path = canonicalize_path(
- _roots.get(name, join_path(spack.share_path, name)))
-
- environment_modifications_formats = {
- PrependPath: 'prepend_path("{name}", "{value}")\n',
- AppendPath: 'append_path("{name}", "{value}")\n',
- RemovePath: 'remove_path("{name}", "{value}")\n',
- SetEnv: 'setenv("{name}", "{value}")\n',
- UnsetEnv: 'unsetenv("{name}")\n'
- }
-
- autoload_format = ('if not isloaded("{module_file}") then\n'
- ' LmodMessage("Autoloading {module_file}")\n'
- ' load("{module_file}")\n'
- 'end\n\n')
-
- prerequisite_format = 'prereq("{module_file}")\n'
-
- family_format = 'family("{family}")\n'
-
- path_part_without_hash = join_path('{token.name}', '{token.version}')
-
- # TODO : Check that extra tokens specified in configuration file
- # TODO : are actually virtual dependencies
- configuration = _module_config.get('lmod', {})
- hierarchy_tokens = configuration.get('hierarchical_scheme', [])
- hierarchy_tokens = hierarchy_tokens + ['mpi', 'compiler']
-
- def __init__(self, spec=None):
- super(LmodModule, self).__init__(spec)
-
- self.configuration = _module_config.get('lmod', {})
- hierarchy_tokens = self.configuration.get('hierarchical_scheme', [])
- # TODO : Check that the extra hierarchy tokens specified in the
- # TODO : configuration file are actually virtual dependencies
- self.hierarchy_tokens = hierarchy_tokens + ['mpi', 'compiler']
-
- # Sets the root directory for this architecture
- self.modules_root = join_path(LmodModule.path, self.spec.architecture)
-
- # Retrieve core compilers
- self.core_compilers = self.configuration.get('core_compilers', [])
- # Keep track of the requirements that this package has in terms
- # of virtual packages that participate in the hierarchical structure
- self.requires = {'compiler': self.spec.compiler}
- # For each virtual dependency in the hierarchy
- for x in self.hierarchy_tokens:
- if x in self.spec and not self.spec.package.provides(
- x): # if I depend on it
- self.requires[x] = self.spec[x] # record the actual provider
- # Check what are the services I need (this will determine where the
- # module file will be written)
- self.substitutions = {}
- self.substitutions.update(self.requires)
- # TODO : complete substitutions
- # Check what service I provide to others
- self.provides = {}
- # If it is in the list of supported compilers family -> compiler
- if self.spec.name in spack.compilers.supported_compilers():
- self.provides['compiler'] = spack.spec.CompilerSpec(str(self.spec))
- # Special case for llvm
- if self.spec.name == 'llvm':
- self.provides['compiler'] = spack.spec.CompilerSpec(str(self.spec))
- self.provides['compiler'].name = 'clang'
-
- for x in self.hierarchy_tokens:
- if self.spec.package.provides(x):
- self.provides[x] = self.spec[x]
-
- def _hierarchy_token_combinations(self):
- """
- Yields all the relevant combinations that could appear in the hierarchy
- """
- for ii in range(len(self.hierarchy_tokens) + 1):
- for item in itertools.combinations(self.hierarchy_tokens, ii):
- if 'compiler' in item:
- yield item
-
- def _hierarchy_to_be_provided(self):
- """
- Filters a list of hierarchy tokens and yields only the one that we
- need to provide
- """
- for item in self._hierarchy_token_combinations():
- if any(x in self.provides for x in item):
- yield item
-
- def token_to_path(self, name, value):
- # If we are dealing with a core compiler, return 'Core'
- if name == 'compiler' and str(value) in self.core_compilers:
- return 'Core'
- # CompilerSpec does not have an hash
- if name == 'compiler':
- return self.path_part_without_hash.format(token=value)
- # In this case the hierarchy token refers to a virtual provider
- path = self.path_part_without_hash.format(token=value)
- path = '-'.join([path, value.dag_hash(length=7)])
- return path
-
- @property
- def file_name(self):
- parts = [self.token_to_path(x, self.requires[x])
- for x in self.hierarchy_tokens if x in self.requires]
- hierarchy_name = join_path(*parts)
- fullname = join_path(self.modules_root, hierarchy_name,
- self.use_name + '.lua')
- return fullname
-
- @property
- def use_name(self):
- path_elements = [self.spec.format("${PACKAGE}/${VERSION}")]
- # The remaining elements are filename suffixes
- path_elements.extend(self._get_suffixes())
- return '-'.join(path_elements)
-
- def modulepath_modifications(self):
- # What is available is what we require plus what we provide
- entry = ''
- available = {}
- available.update(self.requires)
- available.update(self.provides)
- available_parts = [self.token_to_path(x, available[x])
- for x in self.hierarchy_tokens if x in available]
- # Missing parts
- missing = [x for x in self.hierarchy_tokens if x not in available]
- # Direct path we provide on top of compilers
- modulepath = join_path(self.modules_root, *available_parts)
- env = EnvironmentModifications()
- env.prepend_path('MODULEPATH', modulepath)
- for line in self.process_environment_command(env):
- entry += line
-
- def local_variable(x):
- lower, upper = x.lower(), x.upper()
- fmt = 'local {lower}_name = os.getenv("LMOD_{upper}_NAME")\n'
- fmt += 'local {lower}_version = os.getenv("LMOD_{upper}_VERSION")\n' # NOQA: ignore=501
- return fmt.format(lower=lower, upper=upper)
-
- def set_variables_for_service(env, x):
- upper = x.upper()
- s = self.provides[x]
- name, version = os.path.split(self.token_to_path(x, s))
-
- env.set('LMOD_{upper}_NAME'.format(upper=upper), name)
- env.set('LMOD_{upper}_VERSION'.format(upper=upper), version)
-
- def conditional_modulepath_modifications(item):
- entry = 'if '
- needed = []
- for x in self.hierarchy_tokens:
- if x in missing:
- needed.append('{x}_name '.format(x=x))
- entry += 'and '.join(needed) + 'then\n'
- entry += ' local t = pathJoin("{root}"'.format(
- root=self.modules_root)
- for x in item:
- if x in missing:
- entry += ', {lower}_name, {lower}_version'.format(
- lower=x.lower())
- else:
- entry += ', "{x}"'.format(
- x=self.token_to_path(x, available[x]))
- entry += ')\n'
- entry += ' prepend_path("MODULEPATH", t)\n'
- entry += 'end\n\n'
- return entry
-
- if 'compiler' not in self.provides:
- # Retrieve variables
- entry += '\n'
- for x in missing:
- entry += local_variable(x)
- entry += '\n'
- # Conditional modifications
- conditionals = [x
- for x in self._hierarchy_to_be_provided()
- if any(t in missing for t in x)]
- for item in conditionals:
- entry += conditional_modulepath_modifications(item)
-
- # Set environment variables for the services we provide
- env = EnvironmentModifications()
- for x in self.provides:
- set_variables_for_service(env, x)
- for line in self.process_environment_command(env):
- entry += line
-
- return entry
-
- @property
- def header(self):
- timestamp = datetime.datetime.now()
- # Header as in
- # https://www.tacc.utexas.edu/research-development/tacc-projects/lmod/advanced-user-guide/more-about-writing-module-files
- header = "-- -*- lua -*-\n"
- header += '-- Module file created by spack (https://github.com/LLNL/spack) on %s\n' % timestamp # NOQA: ignore=E501
- header += '--\n'
- header += '-- %s\n' % self.spec.short_spec
- header += '--\n'
-
- # Short description -> whatis()
- if self.short_description:
- header += "whatis([[Name : {name}]])\n".format(name=self.spec.name)
- header += "whatis([[Version : {version}]])\n".format(
- version=self.spec.version)
-
- # Long description -> help()
- if self.long_description:
- doc = re.sub(r'"', '\"', self.long_description)
- header += "help([[{documentation}]])\n".format(documentation=doc)
-
- # Certain things need to be done only if we provide a service
- if self.provides:
- # Add family directives
- header += '\n'
- for x in self.provides:
- header += self.family_format.format(family=x)
- header += '\n'
- header += '-- MODULEPATH modifications\n'
- header += '\n'
- # Modify MODULEPATH
- header += self.modulepath_modifications()
- # Set environment variables for services we provide
- header += '\n'
- header += '-- END MODULEPATH modifications\n'
- header += '\n'
-
- return header
diff --git a/lib/spack/spack/modules/__init__.py b/lib/spack/spack/modules/__init__.py
new file mode 100644
index 0000000000..47802092a5
--- /dev/null
+++ b/lib/spack/spack/modules/__init__.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""This package contains code for creating environment modules, which can
+include dotkits, TCL non-hierarchical modules, LUA hierarchical modules, and
+others.
+"""
+
+from __future__ import absolute_import
+
+from .dotkit import DotkitModulefileWriter
+from .tcl import TclModulefileWriter
+from .lmod import LmodModulefileWriter
+
+__all__ = [
+ 'DotkitModulefileWriter',
+ 'TclModulefileWriter',
+ 'LmodModulefileWriter'
+]
+
+module_types = {
+ 'dotkit': DotkitModulefileWriter,
+ 'tcl': TclModulefileWriter,
+ 'lmod': LmodModulefileWriter
+}
diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py
new file mode 100644
index 0000000000..6feed2938c
--- /dev/null
+++ b/lib/spack/spack/modules/common.py
@@ -0,0 +1,740 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""Here we consolidate the logic for creating an abstract description
+of the information that module systems need.
+
+This information maps **a single spec** to:
+
+ * a unique module filename
+ * the module file content
+
+and is divided among four classes:
+
+ * a configuration class that provides a convenient interface to query
+ details about the configuration for the spec under consideration.
+
+ * a layout class that provides the information associated with module
+ file names and directories
+
+ * a context class that provides the dictionary used by the template engine
+ to generate the module file
+
+ * a writer that collects and uses the information above to either write
+ or remove the module file
+
+Each of the four classes needs to be sub-classed when implementing a new
+module type.
+"""
+import copy
+import datetime
+import inspect
+import os.path
+import re
+
+import six
+import llnl.util.filesystem
+import llnl.util.tty as tty
+import spack
+import spack.build_environment as build_environment
+import spack.environment
+import spack.tengine as tengine
+import spack.util.path
+import spack.util.environment
+import spack.error
+
+#: Root folders where the various module files should be written
+roots = spack.config.get_config('config').get('module_roots', {})
+
+#: Merged modules.yaml as a dictionary
+configuration = spack.config.get_config('modules')
+
+#: Inspections that needs to be done on spec prefixes
+prefix_inspections = configuration.get('prefix_inspections', {})
+
+#: Valid tokens for naming scheme and env variable names
+_valid_tokens = (
+ 'PACKAGE',
+ 'VERSION',
+ 'COMPILER',
+ 'COMPILERNAME',
+ 'COMPILERVER',
+ 'ARCHITECTURE'
+)
+
+
+def _check_tokens_are_valid(format_string, message):
+ """Checks that the tokens used in the format string are valid in
+ the context of module file and environment variable naming.
+
+ Args:
+ format_string (str): string containing the format to be checked. This
+ is supposed to be a 'template' for ``Spec.format``
+
+ message (str): first sentence of the error message in case invalid
+ tokens are found
+
+ """
+ named_tokens = re.findall(r'\${(\w*)}', format_string)
+ invalid_tokens = [x for x in named_tokens if x not in _valid_tokens]
+ if invalid_tokens:
+ msg = message
+ msg += ' [{0}]. '.format(', '.join(invalid_tokens))
+ msg += 'Did you check your "modules.yaml" configuration?'
+ raise RuntimeError(msg)
+
+
+def update_dictionary_extending_lists(target, update):
+ """Updates a dictionary, but extends lists instead of overriding them.
+
+ Args:
+ target: dictionary to be updated
+ update: update to be applied
+ """
+ for key in update:
+ value = target.get(key, None)
+ if isinstance(value, list):
+ target[key].extend(update[key])
+ elif isinstance(value, dict):
+ update_dictionary_extending_lists(target[key], update[key])
+ else:
+ target[key] = update[key]
+
+
+def dependencies(spec, request='all'):
+ """Returns the list of dependent specs for a given spec, according to the
+ request passed as parameter.
+
+ Args:
+ spec: spec to be analyzed
+ request: either 'none', 'direct' or 'all'
+
+ Returns:
+ list of dependencies
+
+ The return list will be empty if request is 'none', will contain
+ the direct dependencies if request is 'direct', or the entire DAG
+ if request is 'all'.
+ """
+ if request not in ('none', 'direct', 'all'):
+ message = "Wrong value for argument 'request' : "
+ message += "should be one of ('none', 'direct', 'all')"
+ raise tty.error(message + " [current value is '%s']" % request)
+
+ if request == 'none':
+ return []
+
+ if request == 'direct':
+ return spec.dependencies(deptype=('link', 'run'))
+
+ # FIXME : during module file creation nodes seem to be visited multiple
+ # FIXME : times even if cover='nodes' is given. This work around permits
+ # FIXME : to get a unique list of spec anyhow. Do we miss a merge
+ # FIXME : step among nodes that refer to the same package?
+ seen = set()
+ seen_add = seen.add
+ deps = sorted(
+ spec.traverse(order='post',
+ cover='nodes',
+ deptype=('link', 'run'),
+ root=False),
+ reverse=True)
+ return [d for d in deps if not (d in seen or seen_add(d))]
+
+
+def merge_config_rules(configuration, spec):
+ """Parses the module specific part of a configuration and returns a
+ dictionary containing the actions to be performed on the spec passed as
+ an argument.
+
+ Args:
+ configuration: module specific configuration (e.g. entries under
+ the top-level 'tcl' key)
+ spec: spec for which we need to generate a module file
+
+ Returns:
+ dict: actions to be taken on the spec passed as an argument
+ """
+
+ # Get the top-level configuration for the module type we are using
+ module_specific_configuration = copy.deepcopy(configuration)
+
+ # Construct a dictionary with the actions we need to perform on the spec
+ # passed as a parameter
+
+ # The keyword 'all' is always evaluated first, all the others are
+ # evaluated in order of appearance in the module file
+ spec_configuration = module_specific_configuration.pop('all', {})
+ for constraint, action in module_specific_configuration.items():
+ override = False
+ if constraint.endswith(':'):
+ constraint = constraint.strip(':')
+ override = True
+ if spec.satisfies(constraint):
+ if override:
+ spec_configuration = {}
+ update_dictionary_extending_lists(spec_configuration, action)
+
+ # Transform keywords for dependencies or prerequisites into a list of spec
+
+ # Which modulefiles we want to autoload
+ autoload_strategy = spec_configuration.get('autoload', 'none')
+ spec_configuration['autoload'] = dependencies(spec, autoload_strategy)
+
+ # Which instead we want to mark as prerequisites
+ prerequisite_strategy = spec_configuration.get('prerequisites', 'none')
+ spec_configuration['prerequisites'] = dependencies(
+ spec, prerequisite_strategy)
+
+ # Attach options that are spec-independent to the spec-specific
+ # configuration
+
+ # Hash length in module files
+ hash_length = module_specific_configuration.get('hash_length', 7)
+ spec_configuration['hash_length'] = hash_length
+
+ verbose = module_specific_configuration.get('verbose', False)
+ spec_configuration['verbose'] = verbose
+
+ return spec_configuration
+
+
+def root_path(name):
+ """Returns the root folder for module file installation.
+
+ Args:
+ name: name of the module system t be used (e.g. 'tcl')
+
+ Returns:
+ root folder for module file installation
+ """
+ path = roots.get(name, os.path.join(spack.share_path, name))
+ return spack.util.path.canonicalize_path(path)
+
+
+class BaseConfiguration(object):
+ """Manipulates the information needed to generate a module file to make
+ querying easier. It needs to be sub-classed for specific module types.
+ """
+
+ def __init__(self, spec):
+ # Module where type(self) is defined
+ self.module = inspect.getmodule(self)
+ # Spec for which we want to generate a module file
+ self.spec = spec
+ # Dictionary of configuration options that should be applied
+ # to the spec
+ self.conf = merge_config_rules(self.module.configuration, self.spec)
+
+ @property
+ def naming_scheme(self):
+ """Naming scheme suitable for non-hierarchical layouts"""
+ scheme = self.module.configuration.get(
+ 'naming_scheme',
+ '${PACKAGE}-${VERSION}-${COMPILERNAME}-${COMPILERVER}'
+ )
+
+ # Ensure the named tokens we are expanding are allowed, see
+ # issue #2884 for reference
+ msg = 'some tokens cannot be part of the module naming scheme'
+ _check_tokens_are_valid(scheme, message=msg)
+
+ return scheme
+
+ @property
+ def template(self):
+ """Returns the name of the template to use for the module file
+ or None if not specified in the configuration.
+ """
+ return self.conf.get('template', None)
+
+ @property
+ def env(self):
+ """List of environment modifications that should be done in the
+ module.
+ """
+ env_mods = spack.environment.EnvironmentModifications()
+ actions = self.conf.get('environment', {})
+
+ def process_arglist(arglist):
+ if method == 'unset':
+ for x in arglist:
+ yield (x,)
+ else:
+ for x in six.iteritems(arglist):
+ yield x
+
+ for method, arglist in actions.items():
+ for args in process_arglist(arglist):
+ getattr(env_mods, method)(*args)
+
+ return env_mods
+
+ @property
+ def suffixes(self):
+ """List of suffixes that should be appended to the module
+ file name.
+ """
+ suffixes = []
+ for constraint, suffix in self.conf.get('suffixes', {}).items():
+ if constraint in self.spec:
+ suffixes.append(suffix)
+ if self.hash:
+ suffixes.append(self.hash)
+ return suffixes
+
+ @property
+ def hash(self):
+ """Hash tag for the module or None"""
+ hash_length = self.conf.get('hash_length', 7)
+ if hash_length != 0:
+ return self.spec.dag_hash(length=hash_length)
+ return None
+
+ @property
+ def blacklisted(self):
+ """Returns True if the module has been blacklisted,
+ False otherwise.
+ """
+ # A few variables for convenience of writing the method
+ spec = self.spec
+ conf = self.module.configuration
+
+ # Compute the list of whitelist rules that match
+ wlrules = conf.get('whitelist', [])
+ whitelist_matches = [x for x in wlrules if spec.satisfies(x)]
+
+ # Compute the list of blacklist rules that match
+ blrules = conf.get('blacklist', [])
+ blacklist_matches = [x for x in blrules if spec.satisfies(x)]
+
+ # Should I blacklist the module because it's implicit?
+ blacklist_implicits = conf.get('blacklist_implicits')
+ installed_implicitly = not spec._installed_explicitly()
+ blacklisted_as_implicit = blacklist_implicits and installed_implicitly
+
+ def debug_info(line_header, match_list):
+ if match_list:
+ msg = '\t{0} : {1}'.format(line_header, spec.cshort_spec)
+ tty.debug(msg)
+ for rule in match_list:
+ tty.debug('\t\tmatches rule: {0}'.format(rule))
+
+ debug_info('WHITELIST', whitelist_matches)
+ debug_info('BLACKLIST', blacklist_matches)
+
+ if blacklisted_as_implicit:
+ msg = '\tBLACKLISTED_AS_IMPLICIT : {0}'.format(spec.cshort_spec)
+ tty.debug(msg)
+
+ is_blacklisted = blacklist_matches or blacklisted_as_implicit
+ if not whitelist_matches and is_blacklisted:
+ return True
+
+ return False
+
+ @property
+ def context(self):
+ return self.conf.get('context', {})
+
+ @property
+ def specs_to_load(self):
+ """List of specs that should be loaded in the module file."""
+ return self._create_list_for('autoload')
+
+ @property
+ def literals_to_load(self):
+ """List of literal modules to be loaded."""
+ return self.conf.get('load', [])
+
+ @property
+ def specs_to_prereq(self):
+ """List of specs that should be prerequisite of the module file."""
+ return self._create_list_for('prerequisites')
+
+ @property
+ def environment_blacklist(self):
+ """List of variables that should be left unmodified."""
+ return self.conf.get('filter', {}).get('environment_blacklist', {})
+
+ def _create_list_for(self, what):
+ whitelist = []
+ for item in self.conf[what]:
+ conf = type(self)(item)
+ if not conf.blacklisted:
+ whitelist.append(item)
+ return whitelist
+
+ @property
+ def verbose(self):
+ """Returns True if the module file needs to be verbose, False
+ otherwise
+ """
+ return self.conf.get('verbose')
+
+
+class BaseFileLayout(object):
+ """Provides information on the layout of module files. Needs to be
+ sub-classed for specific module types.
+ """
+
+ #: This needs to be redefined
+ extension = None
+
+ def __init__(self, configuration):
+ self.conf = configuration
+
+ @property
+ def spec(self):
+ """Spec under consideration"""
+ return self.conf.spec
+
+ @classmethod
+ def dirname(cls):
+ """Root folder for module files of this type."""
+ module_system = str(inspect.getmodule(cls).__name__).split('.')[-1]
+ return root_path(module_system)
+
+ @property
+ def use_name(self):
+ """Returns the 'use' name of the module i.e. the name you have to type
+ to console to use it. This implementation fits the needs of most
+ non-hierarchical layouts.
+ """
+ name = self.spec.format(self.conf.naming_scheme)
+ # Not everybody is working on linux...
+ parts = name.split('/')
+ name = os.path.join(*parts)
+ # Add optional suffixes based on constraints
+ path_elements = [name] + self.conf.suffixes
+ return '-'.join(path_elements)
+
+ @property
+ def filename(self):
+ """Name of the module file for the current spec."""
+ # Just the name of the file
+ filename = self.use_name
+ if self.extension:
+ filename = '{0}.{1}'.format(self.use_name, self.extension)
+ # Architecture sub-folder
+ arch_folder = str(self.spec.architecture)
+ # Return the absolute path
+ return os.path.join(self.dirname(), arch_folder, filename)
+
+
+class BaseContext(tengine.Context):
+ """Provides the base context needed for template rendering.
+
+ This class needs to be sub-classed for specific module types. The
+ following attributes need to be implemented:
+
+ - fields
+
+ """
+
+ def __init__(self, configuration):
+ self.conf = configuration
+
+ @tengine.context_property
+ def spec(self):
+ return self.conf.spec
+
+ @tengine.context_property
+ def timestamp(self):
+ return datetime.datetime.now()
+
+ @tengine.context_property
+ def category(self):
+ return getattr(self.spec, 'category', 'spack')
+
+ @tengine.context_property
+ def short_description(self):
+ # If we have a valid docstring return the first paragraph.
+ docstring = type(self.spec.package).__doc__
+ if docstring:
+ value = docstring.split('\n\n')[0]
+ # Transform tabs and friends into spaces
+ value = re.sub(r'\s+', ' ', value)
+ # Turn double quotes into single quotes (double quotes are needed
+ # to start and end strings)
+ value = re.sub(r'"', "'", value)
+ return value
+ # Otherwise the short description is just the package + version
+ return self.spec.format("$_ $@")
+
+ @tengine.context_property
+ def long_description(self):
+ # long description is the docstring with reduced whitespace.
+ if self.spec.package.__doc__:
+ return re.sub(r'\s+', ' ', self.spec.package.__doc__)
+ return None
+
+ @tengine.context_property
+ def configure_options(self):
+ pkg = self.spec.package
+
+ # If the spec is external Spack doesn't know its configure options
+ if self.spec.external:
+ msg = 'unknown, software installed outside of Spack'
+ return msg
+
+ # This is quite simple right now, but contains information on how
+ # to call different build system classes.
+ for attr in ('configure_args', 'cmake_args'):
+ try:
+ configure_args = getattr(pkg, attr)()
+ return ' '.join(configure_args)
+ except (AttributeError, IOError, KeyError):
+ # The method doesn't exist in the current spec,
+ # or it's not usable
+ pass
+
+ # Returning a false-like value makes the default templates skip
+ # the configure option section
+ return None
+
+ @tengine.context_property
+ def environment_modifications(self):
+ """List of environment modifications to be processed."""
+ # Modifications guessed inspecting the spec prefix
+ env = spack.environment.inspect_path(
+ self.spec.prefix,
+ prefix_inspections,
+ exclude=spack.util.environment.is_system_path
+ )
+
+ # Modifications that are coded at package level
+ _ = spack.environment.EnvironmentModifications()
+ # TODO : the code down below is quite similar to
+ # TODO : build_environment.setup_package and needs to be factored out
+ # TODO : to a single place
+ # Let the extendee/dependency modify their extensions/dependencies
+ # before asking for package-specific modifications
+ for item in dependencies(self.spec, 'all'):
+ package = self.spec[item.name].package
+ modules = build_environment.parent_class_modules(package.__class__)
+ for mod in modules:
+ build_environment.set_module_variables_for_package(
+ package, mod
+ )
+ build_environment.set_module_variables_for_package(
+ package, package.module
+ )
+ package.setup_dependent_package(
+ self.spec.package.module, self.spec
+ )
+ package.setup_dependent_environment(_, env, self.spec)
+ # Package specific modifications
+ build_environment.set_module_variables_for_package(
+ self.spec.package, self.spec.package.module
+ )
+ self.spec.package.setup_environment(_, env)
+
+ # Modifications required from modules.yaml
+ env.extend(self.conf.env)
+
+ # List of variables that are blacklisted in modules.yaml
+ blacklist = self.conf.environment_blacklist
+
+ # We may have tokens to substitute in environment commands
+
+ # Prepare a suitable transformation dictionary for the names
+ # of the environment variables. This means turn the valid
+ # tokens uppercase.
+ transform = {}
+ for token in _valid_tokens:
+ transform[token] = str.upper
+
+ for x in env:
+ # Ensure all the tokens are valid in this context
+ msg = 'some tokens cannot be expanded in an environment variable name' # noqa: E501
+ _check_tokens_are_valid(x.name, message=msg)
+ # Transform them
+ x.name = self.spec.format(x.name, transform=transform)
+ try:
+ # Not every command has a value
+ x.value = self.spec.format(x.value)
+ except AttributeError:
+ pass
+ x.name = str(x.name).replace('-', '_')
+
+ return [(type(x).__name__, x) for x in env if x.name not in blacklist]
+
+ @tengine.context_property
+ def autoload(self):
+ """List of modules that needs to be loaded automatically."""
+ # From 'autoload' configuration option
+ specs = self._create_module_list_of('specs_to_load')
+ # From 'load' configuration option
+ literals = self.conf.literals_to_load
+ return specs + literals
+
+ def _create_module_list_of(self, what):
+ m = self.conf.module
+ return [m.make_layout(x).use_name
+ for x in getattr(self.conf, what)]
+
+ @tengine.context_property
+ def verbose(self):
+ """Verbosity level."""
+ return self.conf.verbose
+
+
+class BaseModuleFileWriter(object):
+ def __init__(self, spec):
+ self.spec = spec
+
+ # This class is meant to be derived. Get the module of the
+ # actual writer.
+ self.module = inspect.getmodule(self)
+ m = self.module
+
+ # Create the triplet of configuration/layout/context
+ self.conf = m.make_configuration(spec)
+ self.layout = m.make_layout(spec)
+ self.context = m.make_context(spec)
+
+ # Check if a default template has been defined,
+ # throw if not found
+ try:
+ self.default_template
+ except AttributeError:
+ msg = '\'{0}\' object has no attribute \'default_template\'\n'
+ msg += 'Did you forget to define it in the class?'
+ name = type(self).__name__
+ raise DefaultTemplateNotDefined(msg.format(name))
+
+ def _get_template(self):
+ """Gets the template that will be rendered for this spec."""
+ # Get templates and put them in the order of importance:
+ # 1. template specified in "modules.yaml"
+ # 2. template specified in a package directly
+ # 3. default template (must be defined, check in __init__)
+ module_system_name = str(self.module.__name__).split('.')[-1]
+ package_attribute = '{0}_template'.format(module_system_name)
+ choices = [
+ self.conf.template,
+ getattr(self.spec.package, package_attribute, None),
+ self.default_template # This is always defined at this point
+ ]
+ # Filter out false-ish values
+ choices = list(filter(lambda x: bool(x), choices))
+ # ... and return the first match
+ return choices.pop(0)
+
+ def write(self, overwrite=False):
+ """Writes the module file.
+
+ Args:
+ overwrite (bool): if True it is fine to overwrite an already
+ existing file. If False the operation is skipped an we print
+ a warning to the user.
+ """
+ # Return immediately if the module is blacklisted
+ if self.conf.blacklisted:
+ msg = '\tNOT WRITING: {0} [BLACKLISTED]'
+ tty.debug(msg.format(self.spec.cshort_spec))
+ return
+
+ # Print a warning in case I am accidentally overwriting
+ # a module file that is already there (name clash)
+ if not overwrite and os.path.exists(self.layout.filename):
+ message = 'Module file already exists : skipping creation\n'
+ message += 'file : {0.filename}\n'
+ message += 'spec : {0.spec}'
+ tty.warn(message.format(self.layout))
+ return
+
+ # If we are here it means it's ok to write the module file
+ msg = '\tWRITE: {0} [{1}]'
+ tty.debug(msg.format(self.spec.cshort_spec, self.layout.filename))
+
+ # If the directory where the module should reside does not exist
+ # create it
+ module_dir = os.path.dirname(self.layout.filename)
+ if not os.path.exists(module_dir):
+ llnl.util.filesystem.mkdirp(module_dir)
+
+ # Get the template for the module
+ template_name = self._get_template()
+ try:
+ env = tengine.make_environment()
+ template = env.get_template(template_name)
+ except tengine.TemplateNotFound:
+ # If the template was not found raise an exception with a little
+ # more information
+ msg = 'template \'{0}\' was not found for \'{1}\''
+ name = type(self).__name__
+ msg = msg.format(template_name, name)
+ raise ModulesTemplateNotFoundError(msg)
+
+ # Construct the context following the usual hierarchy of updates:
+ # 1. start with the default context from the module writer class
+ # 2. update with package specific context
+ # 3. update with 'modules.yaml' specific context
+
+ context = self.context.to_dict()
+
+ # Attribute from package
+ module_name = str(self.module.__name__).split('.')[-1]
+ attr_name = '{0}_context'.format(module_name)
+ pkg_update = getattr(self.spec.package, attr_name, {})
+ context.update(pkg_update)
+
+ # Context key in modules.yaml
+ conf_update = self.conf.context
+ context.update(conf_update)
+
+ # Render the template
+ text = template.render(context)
+ # Write it to file
+ with open(self.layout.filename, 'w') as f:
+ f.write(text)
+
+ def remove(self):
+ """Deletes the module file."""
+ mod_file = self.layout.filename
+ if os.path.exists(mod_file):
+ try:
+ os.remove(mod_file) # Remove the module file
+ os.removedirs(
+ os.path.dirname(mod_file)
+ ) # Remove all the empty directories from the leaf up
+ except OSError:
+ # removedirs throws OSError on first non-empty directory found
+ pass
+
+
+class ModulesError(spack.error.SpackError):
+ """Base error for modules."""
+
+
+class DefaultTemplateNotDefined(AttributeError, ModulesError):
+ """Raised if the attribute 'default_template' has not been specified
+ in the derived classes.
+ """
+
+
+class ModulesTemplateNotFoundError(ModulesError, RuntimeError):
+ """Raised if the template for a module file was not found."""
diff --git a/lib/spack/spack/modules/dotkit.py b/lib/spack/spack/modules/dotkit.py
new file mode 100644
index 0000000000..e1374292d6
--- /dev/null
+++ b/lib/spack/spack/modules/dotkit.py
@@ -0,0 +1,78 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""This module implements the classes necessary to generate dotkit modules."""
+import os.path
+
+from .common import BaseConfiguration, BaseFileLayout
+from .common import BaseContext, BaseModuleFileWriter, configuration
+
+#: Dotkit specific part of the configuration
+configuration = configuration.get('dotkit', {})
+
+#: Caches the configuration {spec_hash: configuration}
+configuration_registry = {}
+
+
+def make_configuration(spec):
+ """Returns the dotkit configuration for spec"""
+ key = spec.dag_hash()
+ try:
+ return configuration_registry[key]
+ except KeyError:
+ return configuration_registry.setdefault(
+ key, DotkitConfiguration(spec)
+ )
+
+
+def make_layout(spec):
+ """Returns the layout information for spec """
+ conf = make_configuration(spec)
+ return DotkitFileLayout(conf)
+
+
+def make_context(spec):
+ """Returns the context information for spec"""
+ conf = make_configuration(spec)
+ return DotkitContext(conf)
+
+
+class DotkitConfiguration(BaseConfiguration):
+ """Configuration class for dotkit module files."""
+
+
+class DotkitFileLayout(BaseFileLayout):
+ """File layout for dotkit module files."""
+
+ #: file extension of dotkit module files
+ extension = 'dk'
+
+
+class DotkitContext(BaseContext):
+ """Context class for dotkit module files."""
+
+
+class DotkitModulefileWriter(BaseModuleFileWriter):
+ """Writer class for dotkit module files."""
+ default_template = os.path.join('modules', 'modulefile.dk')
diff --git a/lib/spack/spack/modules/lmod.py b/lib/spack/spack/modules/lmod.py
new file mode 100644
index 0000000000..db221b8da3
--- /dev/null
+++ b/lib/spack/spack/modules/lmod.py
@@ -0,0 +1,418 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os.path
+import llnl.util.lang as lang
+import spack.compilers
+import spack.spec
+import spack.error
+import itertools
+import collections
+import spack.tengine as tengine
+
+from .common import BaseConfiguration, BaseFileLayout
+from .common import BaseContext, BaseModuleFileWriter, configuration
+
+#: LMOD specific part of the configuration
+configuration = configuration.get('lmod', {})
+
+#: Caches the configuration {spec_hash: configuration}
+configuration_registry = {}
+
+
+def make_configuration(spec):
+ """Returns the lmod configuration for spec"""
+ key = spec.dag_hash()
+ try:
+ return configuration_registry[key]
+ except KeyError:
+ return configuration_registry.setdefault(key, LmodConfiguration(spec))
+
+
+def make_layout(spec):
+ """Returns the layout information for spec """
+ conf = make_configuration(spec)
+ return LmodFileLayout(conf)
+
+
+def make_context(spec):
+ """Returns the context information for spec"""
+ conf = make_configuration(spec)
+ return LmodContext(conf)
+
+
+class LmodConfiguration(BaseConfiguration):
+ """Configuration class for lmod module files."""
+
+ @property
+ def core_compilers(self):
+ """Returns the list of "Core" compilers
+
+ Raises:
+ CoreCompilersNotFoundError: if the key was not
+ specified in the configuration file or the sequence
+ is empty
+ """
+ value = configuration.get('core_compilers')
+ if value is None:
+ msg = "'core_compilers' key not found in configuration file"
+ raise CoreCompilersNotFoundError(msg)
+ if not value:
+ msg = "'core_compilers' list cannot be empty"
+ raise CoreCompilersNotFoundError(msg)
+ return value
+
+ @property
+ def hierarchy_tokens(self):
+ """Returns the list of tokens that are part of the modulefile
+ hierarchy. 'compiler' is always present.
+ """
+ tokens = configuration.get('hierarchy', [])
+
+ # Check if all the tokens in the hierarchy are virtual specs.
+ # If not warn the user and raise an error.
+ not_virtual = [t for t in tokens if not spack.spec.Spec.is_virtual(t)]
+ if not_virtual:
+ msg = "Non-virtual specs in 'hierarchy' list for lmod: {0}\n"
+ msg += "Please check the 'modules.yaml' configuration files"
+ msg.format(', '.join(not_virtual))
+ raise NonVirtualInHierarchyError(msg)
+
+ # Append 'compiler' which is always implied
+ tokens.append('compiler')
+
+ # Deduplicate tokens in case duplicates have been coded
+ tokens = list(lang.dedupe(tokens))
+
+ return tokens
+
+ @property
+ def requires(self):
+ """Returns a dictionary mapping all the requirements of this spec
+ to the actual provider. 'compiler' is always present among the
+ requirements.
+ """
+ # Keep track of the requirements that this package has in terms
+ # of virtual packages that participate in the hierarchical structure
+ requirements = {'compiler': self.spec.compiler}
+ # For each virtual dependency in the hierarchy
+ for x in self.hierarchy_tokens:
+ # If I depend on it
+ if x in self.spec and not self.spec.package.provides(x):
+ requirements[x] = self.spec[x] # record the actual provider
+ return requirements
+
+ @property
+ def provides(self):
+ """Returns a dictionary mapping all the services provided by this
+ spec to the spec itself.
+ """
+ provides = {}
+
+ # Treat the 'compiler' case in a special way, as compilers are not
+ # virtual dependencies in spack
+
+ # If it is in the list of supported compilers family -> compiler
+ if self.spec.name in spack.compilers.supported_compilers():
+ provides['compiler'] = spack.spec.CompilerSpec(str(self.spec))
+ # Special case for llvm
+ if self.spec.name == 'llvm':
+ provides['compiler'] = spack.spec.CompilerSpec(str(self.spec))
+ provides['compiler'].name = 'clang'
+
+ # All the other tokens in the hierarchy must be virtual dependencies
+ for x in self.hierarchy_tokens:
+ if self.spec.package.provides(x):
+ provides[x] = self.spec[x]
+ return provides
+
+ @property
+ def available(self):
+ """Returns a dictionary of the services that are currently
+ available.
+ """
+ available = {}
+ # What is available is what I require plus what I provide.
+ # 'compiler' is the only key that may be overridden.
+ available.update(self.requires)
+ available.update(self.provides)
+ return available
+
+ @property
+ def missing(self):
+ """Returns the list of tokens that are not available."""
+ return [x for x in self.hierarchy_tokens if x not in self.available]
+
+
+class LmodFileLayout(BaseFileLayout):
+ """File layout for lmod module files."""
+
+ #: file extension of lua module files
+ extension = 'lua'
+
+ @property
+ def arch_dirname(self):
+ """Returns the root folder for THIS architecture"""
+ arch_folder = str(self.spec.architecture)
+ return os.path.join(
+ self.dirname(), # root for lmod module files
+ arch_folder, # architecture relative path
+ )
+
+ @property
+ def filename(self):
+ """Returns the filename for the current module file"""
+
+ # Get the list of requirements and build an **ordered**
+ # list of the path parts
+ requires = self.conf.requires
+ hierarchy = self.conf.hierarchy_tokens
+ path_parts = lambda x: self.token_to_path(x, requires[x])
+ parts = [path_parts(x) for x in hierarchy if x in requires]
+
+ # My relative path if just a join of all the parts
+ hierarchy_name = os.path.join(*parts)
+
+ # Compute the absolute path
+ fullname = os.path.join(
+ self.arch_dirname, # root for lmod files on this architecture
+ hierarchy_name, # relative path
+ '.'.join([self.use_name, self.extension]) # file name
+ )
+ return fullname
+
+ @property
+ def use_name(self):
+ """Returns the 'use' name of the module i.e. the name you have to type
+ to console to use it.
+ """
+ # Package name and version
+ base = os.path.join("${PACKAGE}", "${VERSION}")
+ name_parts = [self.spec.format(base)]
+ # The remaining elements are filename suffixes
+ name_parts.extend(self.conf.suffixes)
+ return '-'.join(name_parts)
+
+ def token_to_path(self, name, value):
+ """Transforms a hierarchy token into the corresponding path part.
+
+ Args:
+ name (str): name of the service in the hierarchy
+ value: actual provider of the service
+
+ Returns:
+ str: part of the path associated with the service
+ """
+ # General format for the path part
+ path_part_fmt = os.path.join('{token.name}', '{token.version}')
+
+ # If we are dealing with a core compiler, return 'Core'
+ core_compilers = self.conf.core_compilers
+ if name == 'compiler' and str(value) in core_compilers:
+ return 'Core'
+
+ # CompilerSpec does not have an hash, as we are not allowed to
+ # use different flavors of the same compiler
+ if name == 'compiler':
+ return path_part_fmt.format(token=value)
+
+ # In case the hierarchy token refers to a virtual provider
+ # we need to append an hash to the version to distinguish
+ # among flavors of the same library (e.g. openblas~openmp vs.
+ # openblas+openmp)
+ path = path_part_fmt.format(token=value)
+ path = '-'.join([path, value.dag_hash(length=7)])
+ return path
+
+ @property
+ def available_path_parts(self):
+ """List of path parts that are currently available. Needed to
+ construct the file name.
+ """
+ # List of available services
+ available = self.conf.available
+ # List of services that are part of the hierarchy
+ hierarchy = self.conf.hierarchy_tokens
+ # Tokenize each part that is both in the hierarchy and available
+ parts = [self.token_to_path(x, available[x])
+ for x in hierarchy if x in available]
+ return parts
+
+ @property
+ def unlocked_paths(self):
+ """Returns a dictionary mapping conditions to a list of unlocked
+ paths.
+
+ The paths that are unconditionally unlocked are under the
+ key 'None'. The other keys represent the list of services you need
+ loaded to unlock the corresponding paths.
+ """
+
+ unlocked = collections.defaultdict(list)
+
+ # Get the list of services we require and we provide
+ requires_key = list(self.conf.requires)
+ provides_key = list(self.conf.provides)
+
+ # A compiler is always required. To avoid duplication pop the
+ # 'compiler' item from required if we also **provide** one
+ if 'compiler' in provides_key:
+ requires_key.remove('compiler')
+
+ # Compute the unique combinations of the services we provide
+ combinations = []
+ for ii in range(len(provides_key)):
+ combinations += itertools.combinations(provides_key, ii + 1)
+
+ # Attach the services required to each combination
+ to_be_processed = [x + tuple(requires_key) for x in combinations]
+
+ # Compute the paths that are unconditionally added
+ # and append them to the dictionary (key = None)
+ available_combination = []
+ for item in to_be_processed:
+ hierarchy = self.conf.hierarchy_tokens
+ available = self.conf.available
+ ac = [x for x in hierarchy if x in item]
+ available_combination.append(tuple(ac))
+ parts = [self.token_to_path(x, available[x]) for x in ac]
+ unlocked[None].append(tuple([self.arch_dirname] + parts))
+
+ # Deduplicate the list
+ unlocked[None] = list(lang.dedupe(unlocked[None]))
+
+ # Compute the combination of missing requirements: this will lead to
+ # paths that are unlocked conditionally
+ missing = self.conf.missing
+
+ missing_combinations = []
+ for ii in range(len(missing)):
+ missing_combinations += itertools.combinations(missing, ii + 1)
+
+ # Attach the services required to each combination
+ for m in missing_combinations:
+ to_be_processed = [m + x for x in available_combination]
+ for item in to_be_processed:
+ hierarchy = self.conf.hierarchy_tokens
+ available = self.conf.available
+ token2path = lambda x: self.token_to_path(x, available[x])
+ parts = []
+ for x in hierarchy:
+ if x not in item:
+ continue
+ value = token2path(x) if x in available else x
+ parts.append(value)
+ unlocked[m].append(tuple([self.arch_dirname] + parts))
+ # Deduplicate the list
+ unlocked[m] = list(lang.dedupe(unlocked[m]))
+ return unlocked
+
+
+class LmodContext(BaseContext):
+ """Context class for lmod module files."""
+
+ @tengine.context_property
+ def has_modulepath_modifications(self):
+ """True if this module modifies MODULEPATH, False otherwise."""
+ return bool(self.conf.provides)
+
+ @tengine.context_property
+ def has_conditional_modifications(self):
+ """True if this module modifies MODULEPATH conditionally to the
+ presence of other services in the environment, False otherwise.
+ """
+ # In general we have conditional modifications if we have modifications
+ # and we are not providing **only** a compiler
+ provides = self.conf.provides
+ provide_compiler_only = 'compiler' in provides and len(provides) == 1
+ has_modifications = self.has_modulepath_modifications
+ return has_modifications and not provide_compiler_only
+
+ @tengine.context_property
+ def name_part(self):
+ """Name of this provider."""
+ return self.spec.name
+
+ @tengine.context_property
+ def version_part(self):
+ """Version of this provider."""
+ s = self.spec
+ return '-'.join([str(s.version), s.dag_hash(length=7)])
+
+ @tengine.context_property
+ def provides(self):
+ """Returns the dictionary of provided services."""
+ return self.conf.provides
+
+ @tengine.context_property
+ def missing(self):
+ """Returns a list of missing services."""
+ return self.conf.missing
+
+ @tengine.context_property
+ def unlocked_paths(self):
+ """Returns the list of paths that are unlocked unconditionally."""
+ layout = make_layout(self.spec)
+ return [os.path.join(*parts) for parts in layout.unlocked_paths[None]]
+
+ @tengine.context_property
+ def conditionally_unlocked_paths(self):
+ """Returns the list of paths that are unlocked conditionally.
+ Each item in the list is a tuple with the structure (condition, path).
+ """
+ layout = make_layout(self.spec)
+ value = []
+ conditional_paths = layout.unlocked_paths
+ conditional_paths.pop(None)
+ for services_needed, list_of_path_parts in conditional_paths.items():
+ condition = ' and '.join([x + '_name' for x in services_needed])
+ for parts in list_of_path_parts:
+
+ def manipulate_path(token):
+ if token in self.conf.hierarchy_tokens:
+ return '{0}_name, {0}_version'.format(token)
+ return '"' + token + '"'
+
+ path = ', '.join([manipulate_path(x) for x in parts])
+
+ value.append((condition, path))
+ return value
+
+
+class LmodModulefileWriter(BaseModuleFileWriter):
+ """Writer class for lmod module files."""
+ default_template = os.path.join('modules', 'modulefile.lua')
+
+
+class CoreCompilersNotFoundError(spack.error.SpackError, KeyError):
+ """Error raised if the key 'core_compilers' has not been specified
+ in the configuration file.
+ """
+
+
+class NonVirtualInHierarchyError(spack.error.SpackError, TypeError):
+ """Error raised if non-virtual specs are used as hierarchy tokens in
+ the lmod section of 'modules.yaml'.
+ """
diff --git a/lib/spack/spack/modules/tcl.py b/lib/spack/spack/modules/tcl.py
new file mode 100644
index 0000000000..e3085f5d79
--- /dev/null
+++ b/lib/spack/spack/modules/tcl.py
@@ -0,0 +1,116 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""This module implements the classes necessary to generate TCL
+non-hierarchical modules.
+"""
+import os.path
+import string
+import spack.tengine as tengine
+
+import llnl.util.tty as tty
+
+from .common import BaseConfiguration, BaseFileLayout
+from .common import BaseContext, BaseModuleFileWriter, configuration
+
+#: TCL specific part of the configuration
+configuration = configuration.get('tcl', {})
+
+#: Caches the configuration {spec_hash: configuration}
+configuration_registry = {}
+
+
+def make_configuration(spec):
+ """Returns the tcl configuration for spec"""
+ key = spec.dag_hash()
+ try:
+ return configuration_registry[key]
+ except KeyError:
+ return configuration_registry.setdefault(key, TclConfiguration(spec))
+
+
+def make_layout(spec):
+ """Returns the layout information for spec """
+ conf = make_configuration(spec)
+ return TclFileLayout(conf)
+
+
+def make_context(spec):
+ """Returns the context information for spec"""
+ conf = make_configuration(spec)
+ return TclContext(conf)
+
+
+class TclConfiguration(BaseConfiguration):
+ """Configuration class for tcl module files."""
+
+ @property
+ def conflicts(self):
+ """Conflicts for this module file"""
+ return self.conf.get('conflict', [])
+
+
+class TclFileLayout(BaseFileLayout):
+ """File layout for tcl module files."""
+
+
+class TclContext(BaseContext):
+ """Context class for tcl module files."""
+
+ @tengine.context_property
+ def prerequisites(self):
+ """List of modules that needs to be loaded automatically."""
+ return self._create_module_list_of('specs_to_prereq')
+
+ @tengine.context_property
+ def conflicts(self):
+ """List of conflicts for the tcl module file."""
+ fmts = []
+ naming_scheme = self.conf.naming_scheme
+ f = string.Formatter()
+ for item in self.conf.conflicts:
+ if len([x for x in f.parse(item)]) > 1:
+ for naming_dir, conflict_dir in zip(
+ naming_scheme.split('/'), item.split('/')
+ ):
+ if naming_dir != conflict_dir:
+ message = 'conflict scheme does not match naming '
+ message += 'scheme [{spec}]\n\n'
+ message += 'naming scheme : "{nformat}"\n'
+ message += 'conflict scheme : "{cformat}"\n\n'
+ message += '** You may want to check your '
+ message += '`modules.yaml` configuration file **\n'
+ tty.error(message.format(spec=self.spec,
+ nformat=naming_scheme,
+ cformat=item))
+ raise SystemExit('Module generation aborted.')
+ item = self.spec.format(item)
+ fmts.append(item)
+ # Substitute spec tokens if present
+ return [self.spec.format(x) for x in fmts]
+
+
+class TclModulefileWriter(BaseModuleFileWriter):
+ """Writer class for tcl module files."""
+ default_template = os.path.join('modules', 'modulefile.tcl')
diff --git a/lib/spack/spack/multimethod.py b/lib/spack/spack/multimethod.py
index 4e2fb3bdaa..78d547a69a 100644
--- a/lib/spack/spack/multimethod.py
+++ b/lib/spack/spack/multimethod.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,7 +45,7 @@ so package authors should use their judgement.
"""
import functools
-from llnl.util.lang import *
+from llnl.util.lang import caller_locals, get_calling_module_name
import spack.architecture
import spack.error
@@ -128,10 +128,16 @@ class SpecMultiMethod(object):
if self.default:
return self.default(package_self, *args, **kwargs)
+
else:
- raise NoSuchMethodError(
- type(package_self), self.__name__, spec,
- [m[0] for m in self.method_list])
+ superclass = super(package_self.__class__, package_self)
+ superclass_fn = getattr(superclass, self.__name__, None)
+ if callable(superclass_fn):
+ return superclass_fn(*args, **kwargs)
+ else:
+ raise NoSuchMethodError(
+ type(package_self), self.__name__, spec,
+ [m[0] for m in self.method_list])
def __str__(self):
return "SpecMultiMethod {\n\tdefault: %s,\n\tspecs: %s\n}" % (
diff --git a/lib/spack/spack/operating_systems/__init__.py b/lib/spack/spack/operating_systems/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/operating_systems/__init__.py
+++ b/lib/spack/spack/operating_systems/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/operating_systems/cnk.py b/lib/spack/spack/operating_systems/cnk.py
index 7e02fdd5b2..008e5fc33b 100644
--- a/lib/spack/spack/operating_systems/cnk.py
+++ b/lib/spack/spack/operating_systems/cnk.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/operating_systems/cnl.py b/lib/spack/spack/operating_systems/cnl.py
index 7acab1cbcb..d64e4d06dc 100644
--- a/lib/spack/spack/operating_systems/cnl.py
+++ b/lib/spack/spack/operating_systems/cnl.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,11 +24,13 @@
##############################################################################
import re
-from spack.architecture import OperatingSystem
-from spack.util.executable import *
+import llnl.util.tty as tty
+
import spack.spec
-from spack.util.multiproc import parmap
import spack.compilers
+from spack.architecture import OperatingSystem
+from spack.util.multiproc import parmap
+from spack.util.module_cmd import get_module_cmd
class Cnl(OperatingSystem):
@@ -54,7 +56,7 @@ class Cnl(OperatingSystem):
# ensure all the version calls we made are cached in the parent
# process, as well. This speeds up Spack a lot.
- clist = reduce(lambda x, y: x + y, compiler_lists)
+ clist = [comp for cl in compiler_lists for comp in cl]
return clist
def find_compiler(self, cmp_cls, *paths):
@@ -63,8 +65,7 @@ class Cnl(OperatingSystem):
if not cmp_cls.PrgEnv_compiler:
tty.die('Must supply PrgEnv_compiler with PrgEnv')
- modulecmd = which('modulecmd')
- modulecmd.add_default_arg('python')
+ modulecmd = get_module_cmd()
output = modulecmd(
'avail', cmp_cls.PrgEnv_compiler, output=str, error=str)
diff --git a/lib/spack/spack/operating_systems/cray_frontend.py b/lib/spack/spack/operating_systems/cray_frontend.py
new file mode 100644
index 0000000000..d761a758ef
--- /dev/null
+++ b/lib/spack/spack/operating_systems/cray_frontend.py
@@ -0,0 +1,76 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+from spack.operating_systems.linux_distro import LinuxDistro
+from spack.util.module_cmd import get_module_cmd
+
+
+class CrayFrontend(LinuxDistro):
+ """Represents OS that runs on login and service nodes of the Cray platform.
+ It acts as a regular Linux without Cray-specific modules and compiler
+ wrappers."""
+
+ def find_compilers(self, *paths):
+ """Calls the overridden method but prevents it from detecting Cray
+ compiler wrappers to avoid possible false detections. The detected
+ compilers come into play only if a user decides to work with the Cray's
+ frontend OS as if it was a regular Linux environment."""
+
+ env_bu = None
+
+ # We rely on the fact that the PrgEnv-* modules set the PE_ENV
+ # environment variable.
+ if 'PE_ENV' in os.environ:
+ # Copy environment variables to restore them after the compiler
+ # detection. We expect that the only thing PrgEnv-* modules do is
+ # the environment variables modifications.
+ env_bu = os.environ.copy()
+
+ # Get the name of the module from the environment variable.
+ prg_env = 'PrgEnv-' + os.environ['PE_ENV'].lower()
+
+ # Unload the PrgEnv-* module. By doing this we intentionally
+ # provoke errors when the Cray's compiler wrappers are executed
+ # (Error: A PrgEnv-* modulefile must be loaded.) so they will not
+ # be detected as valid compilers by the overridden method. We also
+ # expect that the modules that add the actual compilers' binaries
+ # into the PATH environment variable (i.e. the following modules:
+ # 'intel', 'cce', 'gcc', etc.) will also be unloaded since they are
+ # specified as prerequisites in the PrgEnv-* modulefiles.
+ modulecmd = get_module_cmd()
+ exec (compile(
+ modulecmd('unload', prg_env, output=str, error=os.devnull),
+ '<string>', 'exec'))
+
+ # Call the overridden method.
+ clist = super(CrayFrontend, self).find_compilers(*paths)
+
+ # Restore the environment.
+ if env_bu is not None:
+ os.environ.clear()
+ os.environ.update(env_bu)
+
+ return clist
diff --git a/lib/spack/spack/operating_systems/linux_distro.py b/lib/spack/spack/operating_systems/linux_distro.py
index fb2797fd36..723b4d5447 100644
--- a/lib/spack/spack/operating_systems/linux_distro.py
+++ b/lib/spack/spack/operating_systems/linux_distro.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,6 +48,11 @@ class LinuxDistro(OperatingSystem):
# grab the first legal identifier in the version field. On
# debian you get things like 'wheezy/sid'; sid means unstable.
# We just record 'wheezy' and don't get quite so detailed.
- version = re.split(r'[^\w-]', version)[0]
+ version = re.split(r'[^\w-]', version)
+
+ if 'ubuntu' in distname:
+ version = '.'.join(version[0:2])
+ else:
+ version = version[0]
super(LinuxDistro, self).__init__(distname, version)
diff --git a/lib/spack/spack/operating_systems/mac_os.py b/lib/spack/spack/operating_systems/mac_os.py
index a75ce8a946..a5577fa39d 100644
--- a/lib/spack/spack/operating_systems/mac_os.py
+++ b/lib/spack/spack/operating_systems/mac_os.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,16 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import platform as py_platform
+
from spack.architecture import OperatingSystem
+from spack.version import Version
+
+
+# FIXME: store versions inside OperatingSystem as a Version instead of string
+def macOS_version():
+ """temporary workaround to return a macOS version as a Version object
+ """
+ return Version('.'.join(py_platform.mac_ver()[0].split('.')[:2]))
class MacOs(OperatingSystem):
@@ -44,7 +53,8 @@ class MacOs(OperatingSystem):
"10.9": "mavericks",
"10.10": "yosemite",
"10.11": "elcapitan",
- "10.12": "sierra"}
+ "10.12": "sierra",
+ "10.13": "highsierra"}
mac_ver = '.'.join(py_platform.mac_ver()[0].split('.')[:2])
name = mac_releases.get(mac_ver, "macos")
diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py
index f9bc1fafbc..712f252494 100644
--- a/lib/spack/spack/package.py
+++ b/lib/spack/spack/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -39,12 +39,14 @@ import functools
import inspect
import os
import re
+import shutil
import sys
import textwrap
import time
-from StringIO import StringIO
+from six import StringIO
+from six import string_types
+from six import with_metaclass
-import llnl.util.lock
import llnl.util.tty as tty
import spack
import spack.store
@@ -57,34 +59,40 @@ import spack.mirror
import spack.repository
import spack.url
import spack.util.web
-from llnl.util.filesystem import *
-from llnl.util.lang import *
+import spack.multimethod
+import spack.binary_distribution as binary_distribution
+
+from llnl.util.filesystem import mkdirp, join_path, touch, ancestor
+from llnl.util.filesystem import working_dir, install_tree, install
+from llnl.util.lang import memoized
from llnl.util.link_tree import LinkTree
from llnl.util.tty.log import log_output
+from llnl.util.tty.color import colorize
from spack import directory_layout
+from spack.util.executable import which
from spack.stage import Stage, ResourceStage, StageComposite
-from spack.util.crypto import bit_length
from spack.util.environment import dump_environment
-from spack.version import *
+from spack.version import Version
"""Allowed URL schemes for spack packages."""
_ALLOWED_URL_SCHEMES = ["http", "https", "ftp", "file", "git"]
class InstallPhase(object):
- """Manages a single phase of the installation
+ """Manages a single phase of the installation.
This descriptor stores at creation time the name of the method it should
search for execution. The method is retrieved at __get__ time, so that
it can be overridden by subclasses of whatever class declared the phases.
- It also provides hooks to execute prerequisite and sanity checks.
+ It also provides hooks to execute arbitrary callbacks before and after
+ the phase.
"""
def __init__(self, name):
self.name = name
- self.preconditions = []
- self.sanity_checks = []
+ self.run_before = []
+ self.run_after = []
def __get__(self, instance, owner):
# The caller is a class that is trying to customize
@@ -101,14 +109,13 @@ class InstallPhase(object):
self._on_phase_start(instance)
# Execute phase pre-conditions,
# and give them the chance to fail
- for check in self.preconditions:
- # Do something sensible at some point
- check(instance)
+ for callback in self.run_before:
+ callback(instance)
phase(spec, prefix)
# Execute phase sanity_checks,
# and give them the chance to fail
- for check in self.sanity_checks:
- check(instance)
+ for callback in self.run_after:
+ callback(instance)
# Check instance attributes at the end of a phase
self._on_phase_exit(instance)
return phase_wrapper
@@ -129,8 +136,8 @@ class InstallPhase(object):
# This bug-fix was not back-ported in Python 2.6
# http://bugs.python.org/issue1515
other = InstallPhase(self.name)
- other.preconditions.extend(self.preconditions)
- other.sanity_checks.extend(self.sanity_checks)
+ other.run_before.extend(self.run_before)
+ other.run_after.extend(self.run_after)
return other
@@ -142,22 +149,23 @@ class PackageMeta(spack.directives.DirectiveMetaMixin):
"""
phase_fmt = '_InstallPhase_{0}'
- _InstallPhase_sanity_checks = {}
- _InstallPhase_preconditions = {}
+ _InstallPhase_run_before = {}
+ _InstallPhase_run_after = {}
+
+ def __new__(mcs, name, bases, attr_dict):
- def __new__(meta, name, bases, attr_dict):
- # Check if phases is in attr dict, then set
- # install phases wrappers
if 'phases' in attr_dict:
+ # Turn the strings in 'phases' into InstallPhase instances
+ # and add them as private attributes
_InstallPhase_phases = [PackageMeta.phase_fmt.format(x) for x in attr_dict['phases']] # NOQA: ignore=E501
for phase_name, callback_name in zip(_InstallPhase_phases, attr_dict['phases']): # NOQA: ignore=E501
attr_dict[phase_name] = InstallPhase(callback_name)
attr_dict['_InstallPhase_phases'] = _InstallPhase_phases
- def _append_checks(check_name):
+ def _flush_callbacks(check_name):
# Name of the attribute I am going to check it exists
attr_name = PackageMeta.phase_fmt.format(check_name)
- checks = getattr(meta, attr_name)
+ checks = getattr(mcs, attr_name)
if checks:
for phase_name, funcs in checks.items():
try:
@@ -180,60 +188,66 @@ class PackageMeta(spack.directives.DirectiveMetaMixin):
PackageMeta.phase_fmt.format(phase_name)]
getattr(phase, check_name).extend(funcs)
# Clear the attribute for the next class
- setattr(meta, attr_name, {})
-
- @classmethod
- def _register_checks(cls, check_type, *args):
- def _register_sanity_checks(func):
- attr_name = PackageMeta.phase_fmt.format(check_type)
- check_list = getattr(meta, attr_name)
- for item in args:
- checks = check_list.setdefault(item, [])
- checks.append(func)
- setattr(meta, attr_name, check_list)
- return func
- return _register_sanity_checks
-
- @staticmethod
- def on_package_attributes(**attrs):
- def _execute_under_condition(func):
- @functools.wraps(func)
- def _wrapper(instance):
- # If all the attributes have the value we require, then
- # execute
- if all([getattr(instance, key, None) == value for key, value in attrs.items()]): # NOQA: ignore=E501
- func(instance)
- return _wrapper
- return _execute_under_condition
-
- @classmethod
- def precondition(cls, *args):
- return cls._register_checks('preconditions', *args)
-
- @classmethod
- def sanity_check(cls, *args):
- return cls._register_checks('sanity_checks', *args)
-
- if all([not hasattr(x, '_register_checks') for x in bases]):
- attr_dict['_register_checks'] = _register_checks
-
- if all([not hasattr(x, 'sanity_check') for x in bases]):
- attr_dict['sanity_check'] = sanity_check
-
- if all([not hasattr(x, 'precondition') for x in bases]):
- attr_dict['precondition'] = precondition
-
- if all([not hasattr(x, 'on_package_attributes') for x in bases]):
- attr_dict['on_package_attributes'] = on_package_attributes
-
- # Preconditions
- _append_checks('preconditions')
- # Sanity checks
- _append_checks('sanity_checks')
- return super(PackageMeta, meta).__new__(meta, name, bases, attr_dict)
-
-
-class PackageBase(object):
+ setattr(mcs, attr_name, {})
+
+ _flush_callbacks('run_before')
+ _flush_callbacks('run_after')
+
+ return super(PackageMeta, mcs).__new__(mcs, name, bases, attr_dict)
+
+ @staticmethod
+ def register_callback(check_type, *phases):
+ def _decorator(func):
+ attr_name = PackageMeta.phase_fmt.format(check_type)
+ check_list = getattr(PackageMeta, attr_name)
+ for item in phases:
+ checks = check_list.setdefault(item, [])
+ checks.append(func)
+ setattr(PackageMeta, attr_name, check_list)
+ return func
+ return _decorator
+
+
+def run_before(*phases):
+ """Registers a method of a package to be run before a given phase"""
+ return PackageMeta.register_callback('run_before', *phases)
+
+
+def run_after(*phases):
+ """Registers a method of a package to be run after a given phase"""
+ return PackageMeta.register_callback('run_after', *phases)
+
+
+def on_package_attributes(**attr_dict):
+ """Decorator: executes instance function only if object has attr valuses.
+
+ Executes the decorated method only if at the moment of calling the
+ instance has attributes that are equal to certain values.
+
+ Args:
+ attr_dict (dict): dictionary mapping attribute names to their
+ required values
+ """
+ def _execute_under_condition(func):
+
+ @functools.wraps(func)
+ def _wrapper(instance, *args, **kwargs):
+ # If all the attributes have the value we require, then execute
+ has_all_attributes = all(
+ [hasattr(instance, key) for key in attr_dict]
+ )
+ if has_all_attributes:
+ has_the_right_values = all(
+ [getattr(instance, key) == value for key, value in attr_dict.items()] # NOQA: ignore=E501
+ )
+ if has_the_right_values:
+ func(instance, *args, **kwargs)
+ return _wrapper
+
+ return _execute_under_condition
+
+
+class PackageBase(with_metaclass(PackageMeta, object)):
"""This is the superclass for all spack packages.
***The Package class***
@@ -470,52 +484,82 @@ class PackageBase(object):
Package creators override functions like install() (all of them do this),
clean() (some of them do this), and others to provide custom behavior.
"""
- __metaclass__ = PackageMeta
#
# These are default values for instance variables.
#
- """By default we build in parallel. Subclasses can override this."""
+
+ #: By default we build in parallel. Subclasses can override this.
parallel = True
- """# jobs to use for parallel make. If set, overrides default of ncpus."""
- make_jobs = None
+ #: # jobs to use for parallel make. If set, overrides default of ncpus.
+ make_jobs = spack.build_jobs
- """By default do not run tests within package's install()"""
+ #: By default do not run tests within package's install()
run_tests = False
# FIXME: this is a bad object-oriented design, should be moved to Clang.
- """By default do not setup mockup XCode on macOS with Clang"""
+ #: By default do not setup mockup XCode on macOS with Clang
use_xcode = False
- """Most packages are NOT extendable. Set to True if you want extensions."""
+ #: Most packages are NOT extendable. Set to True if you want extensions.
extendable = False
- """When True, add RPATHs for the entire DAG. When False, add RPATHs only
- for immediate dependencies."""
+ #: When True, add RPATHs for the entire DAG. When False, add RPATHs only
+ #: for immediate dependencies.
transitive_rpaths = True
- """List of prefix-relative file paths (or a single path). If these do
- not exist after install, or if they exist but are not files,
- sanity checks fail.
- """
+ #: List of prefix-relative file paths (or a single path). If these do
+ #: not exist after install, or if they exist but are not files,
+ #: sanity checks fail.
sanity_check_is_file = []
- """List of prefix-relative directory paths (or a single path). If
- these do not exist after install, or if they exist but are not
- directories, sanity checks will fail.
- """
+ #: List of prefix-relative directory paths (or a single path). If
+ #: these do not exist after install, or if they exist but are not
+ #: directories, sanity checks will fail.
sanity_check_is_dir = []
- """Per-process lock objects for each install prefix."""
- prefix_locks = {}
+ #
+ # Set default licensing information
+ #
+
+ #: Boolean. If set to ``True``, this software requires a license.
+ #: If set to ``False``, all of the ``license_*`` attributes will
+ #: be ignored. Defaults to ``False``.
+ license_required = False
+
+ #: String. Contains the symbol used by the license manager to denote
+ #: a comment. Defaults to ``#``.
+ license_comment = '#'
+
+ #: List of strings. These are files that the software searches for when
+ #: looking for a license. All file paths must be relative to the
+ #: installation directory. More complex packages like Intel may require
+ #: multiple licenses for individual components. Defaults to the empty list.
+ license_files = []
+
+ #: List of strings. Environment variables that can be set to tell the
+ #: software where to look for a license if it is not in the usual location.
+ #: Defaults to the empty list.
+ license_vars = []
+
+ #: String. A URL pointing to license setup instructions for the software.
+ #: Defaults to the empty string.
+ license_url = ''
+
+ #: Verbosity level, preserved across installs.
+ _verbose = None
+
+ #: index of patches by sha256 sum, built lazily
+ _patches_by_hash = None
+
+ #: List of strings which contains GitHub usernames of package maintainers.
+ #: Do not include @ here in order not to unnecessarily ping the users.
+ maintainers = []
def __init__(self, spec):
# this determines how the package should be built.
self.spec = spec
- # Lock on the prefix shared resource. Will be set in prefix property
- self._prefix_lock = None
-
# Name of package is the name of its module, without the
# containing module names.
self.name = self.module.__name__
@@ -563,23 +607,7 @@ class PackageBase(object):
self.list_url = None
if not hasattr(self, 'list_depth'):
- self.list_depth = 1
-
- # Set default licensing information
- if not hasattr(self, 'license_required'):
- self.license_required = False
-
- if not hasattr(self, 'license_comment'):
- self.license_comment = '#'
-
- if not hasattr(self, 'license_files'):
- self.license_files = []
-
- if not hasattr(self, 'license_vars'):
- self.license_vars = []
-
- if not hasattr(self, 'license_url'):
- self.license_url = None
+ self.list_depth = 0
# Set up some internal variables for timing.
self._fetch_time = 0.0
@@ -590,24 +618,38 @@ class PackageBase(object):
self.extra_args = {}
- def possible_dependencies(self, visited=None):
- """Return set of possible transitive dependencies of this package."""
+ def possible_dependencies(self, transitive=True, visited=None):
+ """Return set of possible transitive dependencies of this package.
+
+ Args:
+ transitive (bool): include all transitive dependencies if True,
+ only direct dependencies if False.
+ """
if visited is None:
visited = set()
visited.add(self.name)
for name in self.dependencies:
- if name not in visited and not spack.spec.Spec(name).virtual:
- pkg = spack.repo.get(name)
- for name in pkg.possible_dependencies(visited):
- visited.add(name)
+ spec = spack.spec.Spec(name)
+
+ if not spec.virtual:
+ visited.add(name)
+ if transitive:
+ pkg = spack.repo.get(name)
+ pkg.possible_dependencies(transitive, visited)
+ else:
+ for provider in spack.repo.providers_for(spec):
+ visited.add(provider.name)
+ if transitive:
+ pkg = spack.repo.get(provider.name)
+ pkg.possible_dependencies(transitive, visited)
return visited
@property
def package_dir(self):
"""Return the directory where the package.py file lives."""
- return os.path.dirname(self.module.__file__)
+ return os.path.abspath(os.path.dirname(self.module.__file__))
@property
def global_license_dir(self):
@@ -729,14 +771,16 @@ class PackageBase(object):
# Append the item to the composite
composite_stage.append(stage)
- # Create stage on first access. Needed because fetch, stage,
- # patch, and install can be called independently of each
- # other, so `with self.stage:` in do_install isn't sufficient.
- composite_stage.create()
return composite_stage
@property
def stage(self):
+ """Get the build staging area for this package.
+
+ This automatically instantiates a ``Stage`` object if the package
+ doesn't have one yet, but it does not create the Stage directory
+ on the filesystem.
+ """
if not self.spec.concrete:
raise ValueError("Can only get a stage for a concrete package.")
if self._stage is None:
@@ -748,6 +792,14 @@ class PackageBase(object):
"""Allow a stage object to be set to override the default."""
self._stage = stage
+ @property
+ def env_path(self):
+ return os.path.join(self.stage.source_path, 'spack-build.env')
+
+ @property
+ def log_path(self):
+ return os.path.join(self.stage.source_path, 'spack-build.out')
+
def _make_fetcher(self):
# Construct a composite fetcher that always contains at least
# one element (the root package). In case there are resources
@@ -775,9 +827,18 @@ class PackageBase(object):
self._fetcher = f
def dependencies_of_type(self, *deptypes):
- """Get subset of the dependencies with certain types."""
- return dict((name, conds) for name, conds in self.dependencies.items()
- if any(d in self.dependency_types[name] for d in deptypes))
+ """Get dependencies that can possibly have these deptypes.
+
+ This analyzes the package and determines which dependencies *can*
+ be a certain kind of dependency. Note that they may not *always*
+ be this kind of dependency, since dependencies can be optional,
+ so something may be a build dependency in one configuration and a
+ run dependency in another.
+ """
+ return dict(
+ (name, conds) for name, conds in self.dependencies.items()
+ if any(dt in self.dependencies[name][cond].type
+ for cond in conds for dt in deptypes))
@property
def extendee_spec(self):
@@ -828,17 +889,28 @@ class PackageBase(object):
return bool(self.extendees)
def extends(self, spec):
+ '''
+ Returns True if this package extends the given spec.
+
+ If ``self.spec`` is concrete, this returns whether this package extends
+ the given spec.
+
+ If ``self.spec`` is not concrete, this returns whether this package may
+ extend the given spec.
+ '''
if spec.name not in self.extendees:
return False
s = self.extendee_spec
- return s and s.satisfies(spec)
+ return s and spec.satisfies(s)
- @property
- def activated(self):
+ def is_activated(self, extensions_layout=None):
+ """Return True if package is activated."""
if not self.is_extension:
raise ValueError(
"is_extension called on package that is not an extension.")
- exts = spack.store.layout.extension_map(self.extendee_spec)
+ if extensions_layout is None:
+ extensions_layout = spack.store.extensions
+ exts = extensions_layout.extension_map(self.extendee_spec)
return (self.name in exts) and (exts[self.name] == self.spec)
def provides(self, vpkg_name):
@@ -852,29 +924,6 @@ class PackageBase(object):
return os.path.isdir(self.prefix)
@property
- def prefix_lock(self):
- """Prefix lock is a byte range lock on the nth byte of a file.
-
- The lock file is ``spack.store.db.prefix_lock`` -- the DB
- tells us what to call it and it lives alongside the install DB.
-
- n is the sys.maxsize-bit prefix of the DAG hash. This makes
- likelihood of collision is very low AND it gives us
- readers-writer lock semantics with just a single lockfile, so no
- cleanup required.
- """
- if self._prefix_lock is None:
- prefix = self.spec.prefix
- if prefix not in Package.prefix_locks:
- Package.prefix_locks[prefix] = llnl.util.lock.Lock(
- spack.store.db.prefix_lock_path,
- self.spec.dag_hash_bit_prefix(bit_length(sys.maxsize)), 1)
-
- self._prefix_lock = Package.prefix_locks[prefix]
-
- return self._prefix_lock
-
- @property
def prefix(self):
"""Get the prefix into which this package should be installed."""
return self.spec.prefix
@@ -924,7 +973,7 @@ class PackageBase(object):
start_time = time.time()
if spack.do_checksum and self.version not in self.versions:
tty.warn("There is no checksum on file to fetch %s safely." %
- self.spec.format('$_$@'))
+ self.spec.cformat('$_$@'))
# Ask the user whether to skip the checksum if we're
# interactive, but just fail if non-interactive.
@@ -940,8 +989,8 @@ class PackageBase(object):
raise FetchError("Will not fetch %s" %
self.spec.format('$_$@'), ck_msg)
+ self.stage.create()
self.stage.fetch(mirror_only)
-
self._fetch_time = time.time() - start_time
if spack.do_checksum and self.version in self.versions:
@@ -950,29 +999,66 @@ class PackageBase(object):
self.stage.cache_local()
def do_stage(self, mirror_only=False):
- """Unpacks the fetched tarball, then changes into the expanded tarball
- directory."""
+ """Unpacks and expands the fetched tarball."""
if not self.spec.concrete:
raise ValueError("Can only stage concrete packages.")
- self.do_fetch(mirror_only)
+ self.do_fetch(mirror_only) # this will create the stage
self.stage.expand_archive()
- self.stage.chdir_to_source()
+
+ if not os.listdir(self.stage.path):
+ raise FetchError("Archive was empty for %s" % self.name)
+
+ @classmethod
+ def lookup_patch(cls, sha256):
+ """Look up a patch associated with this package by its sha256 sum.
+
+ Args:
+ sha256 (str): sha256 sum of the patch to look up
+
+ Returns:
+ (Patch): ``Patch`` object with the given hash, or ``None`` if
+ not found.
+
+ To do the lookup, we build an index lazily. This allows us to
+ avoid computing a sha256 for *every* patch and on every package
+ load. With lazy hashing, we only compute hashes on lookup, which
+ usually happens at build time.
+
+ """
+ if cls._patches_by_hash is None:
+ cls._patches_by_hash = {}
+
+ # Add patches from the class
+ for cond, patch_list in cls.patches.items():
+ for patch in patch_list:
+ cls._patches_by_hash[patch.sha256] = patch
+
+ # and patches on dependencies
+ for name, conditions in cls.dependencies.items():
+ for cond, dependency in conditions.items():
+ for pcond, patch_list in dependency.patches.items():
+ for patch in patch_list:
+ cls._patches_by_hash[patch.sha256] = patch
+
+ return cls._patches_by_hash.get(sha256, None)
def do_patch(self):
- """Calls do_stage(), then applied patches to the expanded tarball if they
- haven't been applied already."""
+ """Applies patches if they haven't been applied already."""
if not self.spec.concrete:
raise ValueError("Can only patch concrete packages.")
- # Kick off the stage first.
+ # Kick off the stage first. This creates the stage.
self.do_stage()
# Package can add its own patch function.
has_patch_fun = hasattr(self, 'patch') and callable(self.patch)
+ # Get the patches from the spec (this is a shortcut for the MV-variant)
+ patches = self.spec.patches
+
# If there are no patches, note it.
- if not self.patches and not has_patch_fun:
+ if not patches and not has_patch_fun:
tty.msg("No patches needed for %s" % self.name)
return
@@ -989,8 +1075,6 @@ class PackageBase(object):
tty.msg("Patching failed last time. Restaging.")
self.stage.restage()
- self.stage.chdir_to_source()
-
# If this file exists, then we already applied all the patches.
if os.path.isfile(good_file):
tty.msg("Already patched %s" % self.name)
@@ -1001,25 +1085,34 @@ class PackageBase(object):
# Apply all the patches for specs that match this one
patched = False
- for spec, patch_list in self.patches.items():
- if self.spec.satisfies(spec):
- for patch in patch_list:
- try:
- patch.apply(self.stage)
- tty.msg('Applied patch %s' % patch.path_or_url)
- patched = True
- except:
- # Touch bad file if anything goes wrong.
- tty.msg('Patch %s failed.' % patch.path_or_url)
- touch(bad_file)
- raise
+ for patch in patches:
+ try:
+ with working_dir(self.stage.source_path):
+ patch.apply(self.stage)
+ tty.msg('Applied patch %s' % patch.path_or_url)
+ patched = True
+ except spack.error.SpackError:
+ # Touch bad file if anything goes wrong.
+ tty.msg('Patch %s failed.' % patch.path_or_url)
+ touch(bad_file)
+ raise
if has_patch_fun:
try:
- self.patch()
+ with working_dir(self.stage.source_path):
+ self.patch()
tty.msg("Ran patch() for %s" % self.name)
patched = True
- except:
+ except spack.multimethod.NoSuchMethodError:
+ # We are running a multimethod without a default case.
+ # If there's no default it means we don't need to patch.
+ if not patched:
+ # if we didn't apply a patch from a patch()
+ # directive, AND the patch function didn't apply, say
+ # no patches are needed. Otherwise, we already
+ # printed a message for each patch.
+ tty.msg("No patches needed for %s" % self.name)
+ except spack.error.SpackError:
tty.msg("patch() function failed for %s" % self.name)
touch(bad_file)
raise
@@ -1042,13 +1135,29 @@ class PackageBase(object):
return namespace
def do_fake_install(self):
- """Make a fake install directory containing a 'fake' file in bin."""
- # FIXME : Make this part of the 'install' behavior ?
+ """Make a fake install directory containing fake executables,
+ headers, and libraries."""
+
+ name = self.name
+ library_name = 'lib' + self.name
+ dso_suffix = '.dylib' if sys.platform == 'darwin' else '.so'
+ chmod = which('chmod')
+
mkdirp(self.prefix.bin)
- touch(join_path(self.prefix.bin, 'fake'))
+ touch(join_path(self.prefix.bin, name))
+ chmod('+x', join_path(self.prefix.bin, name))
+
mkdirp(self.prefix.include)
+ touch(join_path(self.prefix.include, name + '.h'))
+
mkdirp(self.prefix.lib)
- mkdirp(self.prefix.man1)
+ touch(join_path(self.prefix.lib, library_name + dso_suffix))
+ touch(join_path(self.prefix.lib, library_name + '.a'))
+
+ mkdirp(self.prefix.man.man1)
+
+ packages_dir = spack.store.layout.build_packages_path(self.spec)
+ dump_packages(self.spec, packages_dir)
def _if_make_target_execute(self, target):
try:
@@ -1065,12 +1174,30 @@ class PackageBase(object):
matches = [line for line in f.readlines() if regex.match(line)]
if not matches:
- tty.msg('Target \'' + target + ':\' not found in Makefile')
+ tty.msg("Target '" + target + ":' not found in Makefile")
return
# Execute target
inspect.getmodule(self).make(target)
+ def _if_ninja_target_execute(self, target):
+ # Check if we have a ninja build script
+ if not os.path.exists('build.ninja'):
+ tty.msg('No ninja build script found in the build directory')
+ return
+
+ # Check if 'target' is in the ninja build script
+ regex = re.compile('^build ' + target + ':')
+ with open('build.ninja', 'r') as f:
+ matches = [line for line in f.readlines() if regex.match(line)]
+
+ if not matches:
+ tty.msg("Target 'build " + target + ":' not found in build.ninja")
+ return
+
+ # Execute target
+ inspect.getmodule(self).ninja(target)
+
def _get_needed_resources(self):
resources = []
# Select the resources that are needed for this build
@@ -1089,29 +1216,81 @@ class PackageBase(object):
return resource_stage_folder
@contextlib.contextmanager
- def _prefix_read_lock(self):
- try:
- self.prefix_lock.acquire_read(60)
- yield self
- finally:
- self.prefix_lock.release_read()
+ def _stage_and_write_lock(self):
+ """Prefix lock nested in a stage."""
+ with self.stage:
+ with spack.store.db.prefix_write_lock(self.spec):
+ yield
- @contextlib.contextmanager
- def _prefix_write_lock(self):
+ def _process_external_package(self, explicit):
+ """Helper function to process external packages.
+
+ Runs post install hooks and registers the package in the DB.
+
+ Args:
+ explicit (bool): if the package was requested explicitly by
+ the user, False if it was pulled in as a dependency of an
+ explicit package.
+ """
+ if self.spec.external_module:
+ message = '{s.name}@{s.version} : has external module in {module}'
+ tty.msg(message.format(s=self, module=self.spec.external_module))
+ message = '{s.name}@{s.version} : is actually installed in {path}'
+ tty.msg(message.format(s=self, path=self.spec.external_path))
+ else:
+ message = '{s.name}@{s.version} : externally installed in {path}'
+ tty.msg(message.format(s=self, path=self.spec.external_path))
try:
- self.prefix_lock.acquire_write(60)
- yield self
- finally:
- self.prefix_lock.release_write()
+ # Check if the package was already registered in the DB
+ # If this is the case, then just exit
+ rec = spack.store.db.get_record(self.spec)
+ message = '{s.name}@{s.version} : already registered in DB'
+ tty.msg(message.format(s=self))
+ # Update the value of rec.explicit if it is necessary
+ self._update_explicit_entry_in_db(rec, explicit)
+
+ except KeyError:
+ # If not register it and generate the module file
+ # For external packages we just need to run
+ # post-install hooks to generate module files
+ message = '{s.name}@{s.version} : generating module file'
+ tty.msg(message.format(s=self))
+ spack.hooks.post_install(self.spec)
+ # Add to the DB
+ message = '{s.name}@{s.version} : registering into DB'
+ tty.msg(message.format(s=self))
+ spack.store.db.add(self.spec, None, explicit=explicit)
+
+ def _update_explicit_entry_in_db(self, rec, explicit):
+ if explicit and not rec.explicit:
+ with spack.store.db.write_transaction():
+ rec = spack.store.db.get_record(self.spec)
+ rec.explicit = True
+ message = '{s.name}@{s.version} : marking the package explicit'
+ tty.msg(message.format(s=self))
+
+ def try_install_from_binary_cache(self, explicit):
+ tty.msg('Searching for binary cache of %s' % self.name)
+ specs = binary_distribution.get_specs()
+ binary_spec = spack.spec.Spec.from_dict(self.spec.to_dict())
+ binary_spec._mark_concrete()
+ if binary_spec not in specs:
+ return False
+ tty.msg('Installing %s from binary cache' % self.name)
+ tarball = binary_distribution.download_tarball(binary_spec)
+ binary_distribution.extract_tarball(
+ binary_spec, tarball, yes_to_all=False, force=False)
+ spack.store.db.add(self.spec, spack.store.layout, explicit=explicit)
+ return True
def do_install(self,
keep_prefix=False,
keep_stage=False,
+ install_source=False,
install_deps=True,
skip_patch=False,
verbose=False,
make_jobs=None,
- run_tests=False,
fake=False,
explicit=False,
dirty=None,
@@ -1121,93 +1300,98 @@ class PackageBase(object):
Package implementations should override install() to describe
their build process.
- :param keep_prefix: Keep install prefix on failure. By default, \
- destroys it.
- :param keep_stage: By default, stage is destroyed only if there are \
- no exceptions during build. Set to True to keep the stage
- even with exceptions.
- :param install_deps: Install dependencies before installing this \
- package
- :param fake: Don't really build; install fake stub files instead.
- :param skip_patch: Skip patch stage of build if True.
- :param verbose: Display verbose build output (by default, suppresses \
- it)
- :param dirty: Don't clean the build environment before installing.
- :param make_jobs: Number of make jobs to use for install. Default is \
- ncpus
- :param force: Install again, even if already installed.
- :param run_tests: Run tests within the package's install()
+ Args:
+ keep_prefix (bool): Keep install prefix on failure. By default,
+ destroys it.
+ keep_stage (bool): By default, stage is destroyed only if there
+ are no exceptions during build. Set to True to keep the stage
+ even with exceptions.
+ install_source (bool): By default, source is not installed, but
+ for debugging it might be useful to keep it around.
+ install_deps (bool): Install dependencies before installing this
+ package
+ skip_patch (bool): Skip patch stage of build if True.
+ verbose (bool): Display verbose build output (by default,
+ suppresses it)
+ make_jobs (int): Number of make jobs to use for install. Default
+ is ncpus
+ fake (bool): Don't really build; install fake stub files instead.
+ explicit (bool): True if package was explicitly installed, False
+ if package was implicitly installed (as a dependency).
+ dirty (bool): Don't clean the build environment before installing.
+ force (bool): Install again, even if already installed.
"""
if not self.spec.concrete:
raise ValueError("Can only install concrete packages: %s."
% self.spec.name)
- # No installation needed if package is external
+ # For external packages the workflow is simplified, and basically
+ # consists in module file generation and registration in the DB
if self.spec.external:
- tty.msg("%s is externally installed in %s" %
- (self.name, self.spec.external))
- return
+ return self._process_external_package(explicit)
+
+ restage = kwargs.get('restage', False)
+ partial = self.check_for_unfinished_installation(keep_prefix, restage)
# Ensure package is not already installed
layout = spack.store.layout
- with self._prefix_read_lock():
- if layout.check_installed(self.spec):
+ with spack.store.db.prefix_read_lock(self.spec):
+ if partial:
tty.msg(
- "%s is already installed in %s" % (self.name, self.prefix))
+ "Continuing from partial install of %s" % self.name)
+ elif layout.check_installed(self.spec):
+ msg = '{0.name} is already installed in {0.prefix}'
+ tty.msg(msg.format(self))
rec = spack.store.db.get_record(self.spec)
- if (not rec.explicit) and explicit:
- with spack.store.db.write_transaction():
- rec = spack.store.db.get_record(self.spec)
- rec.explicit = True
- return
-
- # Dirty argument takes precedence over dirty config setting.
- if dirty is None:
- dirty = spack.dirty
+ return self._update_explicit_entry_in_db(rec, explicit)
self._do_install_pop_kwargs(kwargs)
- tty.msg("Installing %s" % self.name)
-
# First, install dependencies recursively.
if install_deps:
- for dep in self.spec.dependencies():
+ tty.debug('Installing {0} dependencies'.format(self.name))
+ for dep in self.spec.traverse(order='post', root=False):
dep.package.do_install(
+ install_deps=False,
+ explicit=False,
keep_prefix=keep_prefix,
keep_stage=keep_stage,
- install_deps=install_deps,
+ install_source=install_source,
fake=fake,
skip_patch=skip_patch,
verbose=verbose,
make_jobs=make_jobs,
- run_tests=run_tests,
dirty=dirty,
- **kwargs
- )
+ **kwargs)
+
+ tty.msg(colorize('@*{Installing} @*g{%s}' % self.name))
+
+ if kwargs.get('use_cache', False):
+ if self.try_install_from_binary_cache(explicit):
+ tty.msg('Successfully installed %s from binary cache'
+ % self.name)
+ print_pkg(self.prefix)
+ spack.hooks.post_install(self.spec)
+ return
+
+ tty.msg('No binary for %s found: installing from source'
+ % self.name)
# Set run_tests flag before starting build.
- self.run_tests = run_tests
+ self.run_tests = spack.package_testing.check(self.name)
# Set parallelism before starting build.
self.make_jobs = make_jobs
# Then install the package itself.
- def build_process(input_stream):
- """Forked for each build. Has its own process and python
- module space set up by build_environment.fork()."""
-
- # We are in the child process. This means that our sys.stdin is
- # equal to open(os.devnull). Python did this to prevent our process
- # and the parent process from possible simultaneous reading from
- # the original standard input. But we assume that the parent
- # process is not going to read from it till we are done here,
- # otherwise it should not have passed us the copy of the stream.
- # Thus, we are free to work with the the copy (input_stream)
- # however we want. For example, we might want to call functions
- # (e.g. raw_input()) that implicitly read from whatever stream is
- # assigned to sys.stdin. Since we want them to work with the
- # original input stream, we are making the following assignment:
- sys.stdin = input_stream
+ def build_process():
+ """This implements the process forked for each build.
+
+ Has its own process and python module space set up by
+ build_environment.fork().
+
+ This function's return value is returned to the parent process.
+ """
start_time = time.time()
if not fake:
@@ -1220,51 +1404,50 @@ class PackageBase(object):
'Building {0} [{1}]'.format(self.name, self.build_system_class)
)
- self.stage.keep = keep_stage
+ # get verbosity from do_install() parameter or saved value
+ echo = verbose
+ if PackageBase._verbose is not None:
+ echo = PackageBase._verbose
- with contextlib.nested(self.stage, self._prefix_write_lock()):
+ self.stage.keep = keep_stage
+ with self._stage_and_write_lock():
# Run the pre-install hook in the child process after
# the directory is created.
- spack.hooks.pre_install(self)
+ spack.hooks.pre_install(self.spec)
if fake:
self.do_fake_install()
else:
+ source_path = self.stage.source_path
+ if install_source and os.path.isdir(source_path):
+ src_target = join_path(
+ self.spec.prefix, 'share', self.name, 'src')
+ tty.msg('Copying source to {0}'.format(src_target))
+ install_tree(self.stage.source_path, src_target)
+
# Do the real install in the source directory.
- self.stage.chdir_to_source()
-
- # Save the build environment in a file before building.
- env_path = join_path(os.getcwd(), 'spack-build.env')
-
- # Redirect I/O to a build log (and optionally to
- # the terminal)
- log_path = join_path(os.getcwd(), 'spack-build.out')
-
- # FIXME : refactor this assignment
- self.log_path = log_path
- self.env_path = env_path
- dump_environment(env_path)
-
- # Spawn a daemon that reads from a pipe and redirects
- # everything to log_path
- redirection_context = log_output(
- log_path,
- echo=verbose,
- force_color=sys.stdout.isatty(),
- debug=True,
- input_stream=input_stream
- )
- with redirection_context as log_redirection:
- for phase_name, phase in zip(self.phases, self._InstallPhase_phases): # NOQA: ignore=E501
- tty.msg(
- 'Executing phase : \'{0}\''.format(phase_name) # NOQA: ignore=E501
- )
- # Redirect stdout and stderr to daemon pipe
- with log_redirection:
- getattr(self, phase)(
- self.spec, self.prefix)
+ with working_dir(self.stage.source_path):
+ # Save the build environment in a file before building.
+ dump_environment(self.env_path)
+
+ # Spawn a daemon that reads from a pipe and redirects
+ # everything to log_path
+ with log_output(self.log_path, echo, True) as logger:
+ for phase_name, phase_attr in zip(
+ self.phases, self._InstallPhase_phases):
+
+ with logger.force_echo():
+ tty.msg(
+ "Executing phase: '%s'" % phase_name)
+
+ # Redirect stdout and stderr to daemon pipe
+ phase = getattr(self, phase_attr)
+ phase(self.spec, self.prefix)
+
+ echo = logger.echo
self.log()
+
# Run post install hooks before build stage is removed.
- spack.hooks.post_install(self)
+ spack.hooks.post_install(self.spec)
# Stop timer.
self._total_time = time.time() - start_time
@@ -1276,13 +1459,21 @@ class PackageBase(object):
_hms(self._total_time)))
print_pkg(self.prefix)
+ # preserve verbosity across runs
+ return echo
+
try:
# Create the install prefix and fork the build process.
- spack.store.layout.create_install_directory(self.spec)
+ if not os.path.exists(self.prefix):
+ spack.store.layout.create_install_directory(self.spec)
+
# Fork a child to do the actual installation
- spack.build_environment.fork(self, build_process, dirty=dirty)
+ # we preserve verbosity settings across installs.
+ PackageBase._verbose = spack.build_environment.fork(
+ self, build_process, dirty=dirty, fake=fake)
+
# If we installed then we should keep the prefix
- keep_prefix = True if self.last_phase is None else keep_prefix
+ keep_prefix = self.last_phase is None or keep_prefix
# note: PARENT of the build process adds the new package to
# the database, so that we don't need to re-read from file.
spack.store.db.add(
@@ -1305,6 +1496,46 @@ class PackageBase(object):
if not keep_prefix:
self.remove_prefix()
+ # The subprocess *may* have removed the build stage. Mark it
+ # not created so that the next time self.stage is invoked, we
+ # check the filesystem for it.
+ self.stage.created = False
+
+ def check_for_unfinished_installation(
+ self, keep_prefix=False, restage=False):
+ """Check for leftover files from partially-completed prior install to
+ prepare for a new install attempt. Options control whether these
+ files are reused (vs. destroyed). This function considers a package
+ fully-installed if there is a DB entry for it (in that way, it is
+ more strict than Package.installed). The return value is used to
+ indicate when the prefix exists but the install is not complete.
+ """
+ if self.spec.external:
+ raise ExternalPackageError("Attempted to repair external spec %s" %
+ self.spec.name)
+
+ with spack.store.db.prefix_write_lock(self.spec):
+ try:
+ record = spack.store.db.get_record(self.spec)
+ installed_in_db = record.installed if record else False
+ except KeyError:
+ installed_in_db = False
+
+ partial = False
+ if not installed_in_db and os.path.isdir(self.prefix):
+ if not keep_prefix:
+ self.remove_prefix()
+ else:
+ partial = True
+
+ stage_is_managed_in_spack = self.stage.path.startswith(
+ spack.stage_path)
+ if restage and stage_is_managed_in_spack:
+ self.stage.destroy()
+ self.stage.create()
+
+ return partial
+
def _do_install_pop_kwargs(self, kwargs):
"""Pops kwargs from do_install before starting the installation
@@ -1320,12 +1551,9 @@ class PackageBase(object):
def log(self):
# Copy provenance into the install directory on success
- log_install_path = spack.store.layout.build_log_path(
- self.spec)
- env_install_path = spack.store.layout.build_env_path(
- self.spec)
- packages_dir = spack.store.layout.build_packages_path(
- self.spec)
+ log_install_path = spack.store.layout.build_log_path(self.spec)
+ env_install_path = spack.store.layout.build_env_path(self.spec)
+ packages_dir = spack.store.layout.build_packages_path(self.spec)
# Remove first if we're overwriting another build
# (can happen with spack setup)
@@ -1344,7 +1572,7 @@ class PackageBase(object):
"""This function checks whether install succeeded."""
def check_paths(path_list, filetype, predicate):
- if isinstance(path_list, basestring):
+ if isinstance(path_list, string_types):
path_list = [path_list]
for path in path_list:
@@ -1382,32 +1610,30 @@ class PackageBase(object):
def setup_environment(self, spack_env, run_env):
"""Set up the compile and runtime environments for a package.
- `spack_env` and `run_env` are `EnvironmentModifications`
- objects. Package authors can call methods on them to alter
+ ``spack_env`` and ``run_env`` are ``EnvironmentModifications``
+ objects. Package authors can call methods on them to alter
the environment within Spack and at runtime.
- Both `spack_env` and `run_env` are applied within the build
- process, before this package's `install()` method is called.
+ Both ``spack_env`` and ``run_env`` are applied within the build
+ process, before this package's ``install()`` method is called.
- Modifications in `run_env` will *also* be added to the
+ Modifications in ``run_env`` will *also* be added to the
generated environment modules for this package.
Default implementation does nothing, but this can be
overridden if the package needs a particular environment.
- Examples:
+ Example:
- 1. Qt extensions need `QTDIR` set.
+ 1. Qt extensions need ``QTDIR`` set.
Args:
- spack_env (EnvironmentModifications): list of
+ spack_env (EnvironmentModifications): List of environment
modifications to be applied when this package is built
within Spack.
-
- run_env (EnvironmentModifications): list of environment
- changes to be applied when this package is run outside
- of Spack.
-
+ run_env (EnvironmentModifications): List of environment
+ modifications to be applied when this package is run outside
+ of Spack. These are added to the resulting module file.
"""
pass
@@ -1420,34 +1646,29 @@ class PackageBase(object):
others that follow the extension model a way to implement
common environment or compile-time settings for dependencies.
- By default, this delegates to ``self.setup_environment()``
+ This is useful if there are some common steps to installing
+ all extensions for a certain package.
Example:
- 1. Installing python modules generally requires
- `PYTHONPATH` to point to the lib/pythonX.Y/site-packages
- directory in the module's install prefix. This could
- set that variable.
+ 1. Installing python modules generally requires ``PYTHONPATH`` to point
+ to the ``lib/pythonX.Y/site-packages`` directory in the module's
+ install prefix. This method could be used to set that variable.
Args:
-
- spack_env (EnvironmentModifications): list of
- modifications to be applied when the dependent package
- is bulit within Spack.
-
- run_env (EnvironmentModifications): list of environment
- changes to be applied when the dependent package is
- run outside of Spack.
-
+ spack_env (EnvironmentModifications): List of environment
+ modifications to be applied when the dependent package is
+ built within Spack.
+ run_env (EnvironmentModifications): List of environment
+ modifications to be applied when the dependent package is
+ run outside of Spack. These are added to the resulting
+ module file.
dependent_spec (Spec): The spec of the dependent package
- about to be built. This allows the extendee (self) to
- query the dependent's state. Note that *this*
- package's spec is available as `self.spec`.
-
- This is useful if there are some common steps to installing
- all extensions for a certain package.
+ about to be built. This allows the extendee (self) to query
+ the dependent's state. Note that *this* package's spec is
+ available as ``self.spec``.
"""
- self.setup_environment(spack_env, run_env)
+ pass
def setup_dependent_package(self, module, dependent_spec):
"""Set up Python module-scope variables for dependent packages.
@@ -1459,68 +1680,83 @@ class PackageBase(object):
its extensions. This is useful if there are some common steps
to installing all extensions for a certain package.
- Example :
+ Examples:
- 1. Extensions often need to invoke the `python`
- interpreter from the Python installation being
- extended. This routine can put a 'python' Executable
- object in the module scope for the extension package to
- simplify extension installs.
+ 1. Extensions often need to invoke the ``python`` interpreter
+ from the Python installation being extended. This routine
+ can put a ``python()`` Executable object in the module scope
+ for the extension package to simplify extension installs.
- 2. MPI compilers could set some variables in the
- dependent's scope that point to `mpicc`, `mpicxx`,
- etc., allowing them to be called by common names
- regardless of which MPI is used.
+ 2. MPI compilers could set some variables in the dependent's
+ scope that point to ``mpicc``, ``mpicxx``, etc., allowing
+ them to be called by common name regardless of which MPI is used.
- 3. BLAS/LAPACK implementations can set some variables
- indicating the path to their libraries, since these
- paths differ by BLAS/LAPACK implementation.
+ 3. BLAS/LAPACK implementations can set some variables
+ indicating the path to their libraries, since these
+ paths differ by BLAS/LAPACK implementation.
Args:
-
- module (module): The Python `module` object of the
- dependent package. Packages can use this to set
+ module (spack.package.PackageBase.module): The Python ``module``
+ object of the dependent package. Packages can use this to set
module-scope variables for the dependent to use.
dependent_spec (Spec): The spec of the dependent package
about to be built. This allows the extendee (self) to
query the dependent's state. Note that *this*
- package's spec is available as `self.spec`.
-
- This is useful if there are some common steps to installing
- all extensions for a certain package.
-
+ package's spec is available as ``self.spec``.
"""
pass
- def do_uninstall(self, force=False):
- if not self.installed:
+ @staticmethod
+ def uninstall_by_spec(spec, force=False):
+ if not os.path.isdir(spec.prefix):
# prefix may not exist, but DB may be inconsistent. Try to fix by
# removing, but omit hooks.
- specs = spack.store.db.query(self.spec, installed=True)
+ specs = spack.store.db.query(spec, installed=True)
if specs:
spack.store.db.remove(specs[0])
- tty.msg("Removed stale DB entry for %s" % self.spec.short_spec)
+ tty.msg("Removed stale DB entry for %s" % spec.short_spec)
return
else:
- raise InstallError(str(self.spec) + " is not installed.")
+ raise InstallError(str(spec) + " is not installed.")
if not force:
- dependents = spack.store.db.installed_dependents(self.spec)
+ dependents = spack.store.db.installed_relatives(
+ spec, 'parents', True)
if dependents:
- raise PackageStillNeededError(self.spec, dependents)
+ raise PackageStillNeededError(spec, dependents)
+
+ # Try to get the pcakage for the spec
+ try:
+ pkg = spec.package
+ except spack.repository.UnknownEntityError:
+ pkg = None
# Pre-uninstall hook runs first.
- with self._prefix_write_lock():
- spack.hooks.pre_uninstall(self)
+ with spack.store.db.prefix_write_lock(spec):
+
+ if pkg is not None:
+ spack.hooks.pre_uninstall(spec)
+
# Uninstalling in Spack only requires removing the prefix.
- self.remove_prefix()
- #
- spack.store.db.remove(self.spec)
- tty.msg("Successfully uninstalled %s" % self.spec.short_spec)
+ if not spec.external:
+ msg = 'Deleting package prefix [{0}]'
+ tty.debug(msg.format(spec.short_spec))
+ spack.store.layout.remove_install_directory(spec)
+ # Delete DB entry
+ msg = 'Deleting DB entry [{0}]'
+ tty.debug(msg.format(spec.short_spec))
+ spack.store.db.remove(spec)
- # Once everything else is done, run post install hooks
- spack.hooks.post_uninstall(self)
+ if pkg is not None:
+ spack.hooks.post_uninstall(spec)
+
+ tty.msg("Successfully uninstalled %s" % spec.short_spec)
+
+ def do_uninstall(self, force=False):
+ """Uninstall this package by spec."""
+ # delegate to instance-less method.
+ Package.uninstall_by_spec(self.spec, force)
def _check_extendable(self):
if not self.extendable:
@@ -1542,7 +1778,7 @@ class PackageBase(object):
raise ActivationError("%s does not extend %s!" %
(self.name, self.extendee.name))
- def do_activate(self, force=False):
+ def do_activate(self, force=False, verbose=True, extensions_layout=None):
"""Called on an extension to invoke the extendee's activate method.
Commands should call this routine, and should not call
@@ -1550,24 +1786,40 @@ class PackageBase(object):
"""
self._sanity_check_extension()
- spack.store.layout.check_extension_conflict(
+ if extensions_layout is None:
+ extensions_layout = spack.store.extensions
+
+ extensions_layout.check_extension_conflict(
self.extendee_spec, self.spec)
# Activate any package dependencies that are also extensions.
if not force:
- for spec in self.spec.traverse(root=False, deptype='run'):
- if spec.package.extends(self.extendee_spec):
- if not spec.package.activated:
- spec.package.do_activate(force=force)
+ for spec in self.dependency_activations():
+ if not spec.package.is_activated(
+ extensions_layout=extensions_layout):
+ spec.package.do_activate(
+ force=force, verbose=verbose,
+ extensions_layout=extensions_layout)
+
+ self.extendee_spec.package.activate(
+ self, extensions_layout=extensions_layout, **self.extendee_args)
+
+ extensions_layout.add_extension(self.extendee_spec, self.spec)
- self.extendee_spec.package.activate(self, **self.extendee_args)
+ if verbose:
+ tty.msg(
+ "Activated extension %s for %s" %
+ (self.spec.short_spec,
+ self.extendee_spec.cformat("$_$@$+$%@")))
- spack.store.layout.add_extension(self.extendee_spec, self.spec)
- tty.msg("Activated extension %s for %s" %
- (self.spec.short_spec, self.extendee_spec.format("$_$@$+$%@")))
+ def dependency_activations(self):
+ return (spec for spec in self.spec.traverse(root=False, deptype='run')
+ if spec.package.extends(self.extendee_spec))
def activate(self, extension, **kwargs):
- """Symlinks all files from the extension into extendee's install dir.
+ """Make extension package usable by linking all its files to a target
+ provided by the directory layout (depending if the user wants to
+ activate globally or in a specified file system view).
Package authors can override this method to support other
extension mechanisms. Spack internals (commands, hooks, etc.)
@@ -1575,54 +1827,76 @@ class PackageBase(object):
always executed.
"""
+ extensions_layout = kwargs.get("extensions_layout",
+ spack.store.extensions)
+ target = extensions_layout.extendee_target_directory(self)
def ignore(filename):
return (filename in spack.store.layout.hidden_file_paths or
kwargs.get('ignore', lambda f: False)(filename))
tree = LinkTree(extension.prefix)
- conflict = tree.find_conflict(self.prefix, ignore=ignore)
+ conflict = tree.find_conflict(target, ignore=ignore)
if conflict:
raise ExtensionConflictError(conflict)
- tree.merge(self.prefix, ignore=ignore)
+ tree.merge(target, ignore=ignore, link=extensions_layout.link)
def do_deactivate(self, **kwargs):
- """Called on the extension to invoke extendee's deactivate() method."""
+ """Called on the extension to invoke extendee's deactivate() method.
+
+ `remove_dependents=True` deactivates extensions depending on this
+ package instead of raising an error.
+ """
self._sanity_check_extension()
force = kwargs.get('force', False)
+ verbose = kwargs.get("verbose", True)
+ remove_dependents = kwargs.get("remove_dependents", False)
+ extensions_layout = kwargs.get("extensions_layout",
+ spack.store.extensions)
# Allow a force deactivate to happen. This can unlink
# spurious files if something was corrupted.
if not force:
- spack.store.layout.check_activated(
+ extensions_layout.check_activated(
self.extendee_spec, self.spec)
- activated = spack.store.layout.extension_map(
+ activated = extensions_layout.extension_map(
self.extendee_spec)
for name, aspec in activated.items():
if aspec == self.spec:
continue
for dep in aspec.traverse(deptype='run'):
if self.spec == dep:
- msg = ("Cannot deactivate %s because %s is activated "
- "and depends on it.")
- raise ActivationError(
- msg % (self.spec.short_spec, aspec.short_spec))
-
- self.extendee_spec.package.deactivate(self, **self.extendee_args)
+ if remove_dependents:
+ aspec.package.do_deactivate(**kwargs)
+ else:
+ msg = ("Cannot deactivate %s because %s is "
+ "activated and depends on it.")
+ raise ActivationError(
+ msg % (self.spec.cshort_spec,
+ aspec.cshort_spec))
+
+ self.extendee_spec.package.deactivate(
+ self,
+ extensions_layout=extensions_layout,
+ **self.extendee_args)
# redundant activation check -- makes SURE the spec is not
# still activated even if something was wrong above.
- if self.activated:
- spack.store.layout.remove_extension(
+ if self.is_activated(extensions_layout):
+ extensions_layout.remove_extension(
self.extendee_spec, self.spec)
- tty.msg("Deactivated extension %s for %s" %
- (self.spec.short_spec, self.extendee_spec.format("$_$@$+$%@")))
+ if verbose:
+ tty.msg(
+ "Deactivated extension %s for %s" %
+ (self.spec.short_spec,
+ self.extendee_spec.cformat("$_$@$+$%@")))
def deactivate(self, extension, **kwargs):
- """Unlinks all files from extension out of this package's install dir.
+ """Unlinks all files from extension out of this package's install dir
+ or the corresponding filesystem view.
Package authors can override this method to support other
extension mechanisms. Spack internals (commands, hooks, etc.)
@@ -1630,13 +1904,16 @@ class PackageBase(object):
always executed.
"""
+ extensions_layout = kwargs.get("extensions_layout",
+ spack.store.extensions)
+ target = extensions_layout.extendee_target_directory(self)
def ignore(filename):
return (filename in spack.store.layout.hidden_file_paths or
kwargs.get('ignore', lambda f: False)(filename))
tree = LinkTree(extension.prefix)
- tree.unmerge(self.prefix, ignore=ignore)
+ tree.unmerge(target, ignore=ignore)
def do_restage(self):
"""Reverts expanded/checked out source to a pristine state."""
@@ -1675,14 +1952,12 @@ class PackageBase(object):
"""Try to find remote versions of this package using the
list_url and any other URLs described in the package file."""
if not self.all_urls:
- raise VersionFetchError(self.__class__)
+ raise spack.util.web.VersionFetchError(self.__class__)
try:
return spack.util.web.find_versions_of_archive(
- *self.all_urls,
- list_url=self.list_url,
- list_depth=self.list_depth)
- except spack.error.NoNetworkConnectionError as e:
+ self.all_urls, self.list_url, self.list_depth)
+ except spack.util.web.NoNetworkConnectionError as e:
tty.die("Package.fetch_versions couldn't connect to:", e.url,
e.message)
@@ -1704,15 +1979,61 @@ class PackageBase(object):
"""
return " ".join("-Wl,-rpath,%s" % p for p in self.rpath)
+ build_time_test_callbacks = None
+
+ @on_package_attributes(run_tests=True)
+ def _run_default_build_time_test_callbacks(self):
+ """Tries to call all the methods that are listed in the attribute
+ ``build_time_test_callbacks`` if ``self.run_tests is True``.
+
+ If ``build_time_test_callbacks is None`` returns immediately.
+ """
+ if self.build_time_test_callbacks is None:
+ return
+
+ for name in self.build_time_test_callbacks:
+ try:
+ fn = getattr(self, name)
+ tty.msg('RUN-TESTS: build-time tests [{0}]'.format(name))
+ fn()
+ except AttributeError:
+ msg = 'RUN-TESTS: method not implemented [{0}]'
+ tty.warn(msg.format(name))
+
+ install_time_test_callbacks = None
+
+ @on_package_attributes(run_tests=True)
+ def _run_default_install_time_test_callbacks(self):
+ """Tries to call all the methods that are listed in the attribute
+ ``install_time_test_callbacks`` if ``self.run_tests is True``.
+
+ If ``install_time_test_callbacks is None`` returns immediately.
+ """
+ if self.install_time_test_callbacks is None:
+ return
+
+ for name in self.install_time_test_callbacks:
+ try:
+ fn = getattr(self, name)
+ tty.msg('RUN-TESTS: install-time tests [{0}]'.format(name))
+ fn()
+ except AttributeError:
+ msg = 'RUN-TESTS: method not implemented [{0}]'
+ tty.warn(msg.format(name))
+
class Package(PackageBase):
+ """General purpose class with a single ``install``
+ phase that needs to be coded by packagers.
+ """
+ #: The one and only phase
phases = ['install']
- # To be used in UI queries that require to know which
- # build-system class we are using
+ #: This attribute is used in UI queries that require to know which
+ #: build-system class we are using
build_system_class = 'Package'
# This will be used as a registration decorator in user
# packages, if need be
- PackageBase.sanity_check('install')(PackageBase.sanity_check_prefix)
+ run_after('install')(PackageBase.sanity_check_prefix)
def install_dependency_symlinks(pkg, spec, prefix):
@@ -1758,7 +2079,7 @@ def dump_packages(spec, path):
# Note that we copy them in as they are in the *install* directory
# NOT as they are in the repository, because we want a snapshot of
# how *this* particular build was done.
- for node in spec.traverse():
+ for node in spec.traverse(deptype=all):
if node is not spec:
# Locate the dependency package in the install tree and find
# its provenance information.
@@ -1775,7 +2096,7 @@ def dump_packages(spec, path):
source_repo = spack.repository.Repo(source_repo_root)
source_pkg_dir = source_repo.dirname_for_package_name(
node.name)
- except RepoError:
+ except spack.repository.RepoError:
tty.warn("Warning: Couldn't copy in provenance for %s" %
node.name)
@@ -1859,15 +2180,6 @@ class PackageVersionError(PackageError):
"Please provide a url for this version in the package.py file.")
-class VersionFetchError(PackageError):
- """Raised when a version URL cannot automatically be determined."""
-
- def __init__(self, cls):
- super(VersionFetchError, self).__init__(
- "Cannot fetch versions for package %s " % cls.__name__ +
- "because it does not define any URLs to fetch.")
-
-
class NoURLError(PackageError):
"""Raised when someone tries to build a URL for a package with no URLs."""
diff --git a/lib/spack/spack/package_prefs.py b/lib/spack/spack/package_prefs.py
index 190647bb81..489e87b9b0 100644
--- a/lib/spack/spack/package_prefs.py
+++ b/lib/spack/spack/package_prefs.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,24 @@
# 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 six import string_types
+from six import iteritems
+
+from llnl.util.lang import classproperty
import spack
import spack.error
-from spack.version import *
+from spack.util.path import canonicalize_path
+from spack.version import VersionList
+
+
+_lesser_spec_types = {'compiler': spack.spec.CompilerSpec,
+ 'version': VersionList}
+
+
+def _spec_type(component):
+ """Map from component name to spec type for package prefs."""
+ return _lesser_spec_types.get(component, spack.spec.Spec)
def get_packages_config():
@@ -43,185 +57,177 @@ def get_packages_config():
if virtuals:
errors = ["%s: %s" % (line_info, name) for name, line_info in virtuals]
raise VirtualInPackagesYAMLError(
- "packages.yaml entries cannot be virtual packages:", *errors)
+ "packages.yaml entries cannot be virtual packages:",
+ '\n'.join(errors))
return config
-class PreferredPackages(object):
- def __init__(self):
- self.preferred = get_packages_config()
- self._spec_for_pkgname_cache = {}
-
- # Given a package name, sort component (e.g, version, compiler, ...), and
- # a second_key (used by providers), return the list
- def _order_for_package(self, pkgname, component, second_key,
- test_all=True):
+class PackagePrefs(object):
+ """Defines the sort order for a set of specs.
+
+ Spack's package preference implementation uses PackagePrefss to
+ define sort order. The PackagePrefs class looks at Spack's
+ packages.yaml configuration and, when called on a spec, returns a key
+ that can be used to sort that spec in order of the user's
+ preferences.
+
+ You can use it like this:
+
+ # key function sorts CompilerSpecs for `mpich` in order of preference
+ kf = PackagePrefs('mpich', 'compiler')
+ compiler_list.sort(key=kf)
+
+ Or like this:
+
+ # key function to sort VersionLists for OpenMPI in order of preference.
+ kf = PackagePrefs('openmpi', 'version')
+ version_list.sort(key=kf)
+
+ Optionally, you can sort in order of preferred virtual dependency
+ providers. To do that, provide 'providers' and a third argument
+ denoting the virtual package (e.g., ``mpi``):
+
+ kf = PackagePrefs('trilinos', 'providers', 'mpi')
+ provider_spec_list.sort(key=kf)
+
+ """
+ _packages_config_cache = None
+ _spec_cache = {}
+
+ def __init__(self, pkgname, component, vpkg=None):
+ self.pkgname = pkgname
+ self.component = component
+ self.vpkg = vpkg
+
+ def __call__(self, spec):
+ """Return a key object (an index) that can be used to sort spec.
+
+ Sort is done in package order. We don't cache the result of
+ this function as Python's sort functions already ensure that the
+ key function is called at most once per sorted element.
+ """
+ spec_order = self._specs_for_pkg(
+ self.pkgname, self.component, self.vpkg)
+
+ # integer is the index of the first spec in order that satisfies
+ # spec, or it's a number larger than any position in the order.
+ match_index = next(
+ (i for i, s in enumerate(spec_order) if spec.satisfies(s)),
+ len(spec_order))
+ if match_index < len(spec_order) and spec_order[match_index] == spec:
+ # If this is called with multiple specs that all satisfy the same
+ # minimum index in spec_order, the one which matches that element
+ # of spec_order exactly is considered slightly better. Note
+ # that because this decreases the value by less than 1, it is not
+ # better than a match which occurs at an earlier index.
+ match_index -= 0.5
+ return match_index
+
+ @classproperty
+ @classmethod
+ def _packages_config(cls):
+ if cls._packages_config_cache is None:
+ cls._packages_config_cache = get_packages_config()
+ return cls._packages_config_cache
+
+ @classmethod
+ def _order_for_package(cls, pkgname, component, vpkg=None, all=True):
+ """Given a package name, sort component (e.g, version, compiler, ...),
+ and an optional vpkg, return the list from the packages config.
+ """
pkglist = [pkgname]
- if test_all:
+ if all:
pkglist.append('all')
+
for pkg in pkglist:
- order = self.preferred.get(pkg, {}).get(component, {})
- if isinstance(order, dict) and second_key:
- order = order.get(second_key, {})
+ pkg_entry = cls._packages_config.get(pkg)
+ if not pkg_entry:
+ continue
+
+ order = pkg_entry.get(component)
if not order:
continue
- return [str(s).strip() for s in order]
+
+ # vpkg is one more level
+ if vpkg is not None:
+ order = order.get(vpkg)
+
+ if order:
+ return [str(s).strip() for s in order]
+
return []
- # A generic sorting function. Given a package name and sort
- # component, return less-than-0, 0, or greater-than-0 if
- # a is respectively less-than, equal to, or greater than b.
- def _component_compare(self, pkgname, component, a, b,
- reverse_natural_compare, second_key):
- if a is None:
- return -1
- if b is None:
- return 1
- orderlist = self._order_for_package(pkgname, component, second_key)
- a_in_list = str(a) in orderlist
- b_in_list = str(b) in orderlist
- if a_in_list and not b_in_list:
- return -1
- elif b_in_list and not a_in_list:
- return 1
-
- cmp_a = None
- cmp_b = None
- reverse = None
- if not a_in_list and not b_in_list:
- cmp_a = a
- cmp_b = b
- reverse = -1 if reverse_natural_compare else 1
- else:
- cmp_a = orderlist.index(str(a))
- cmp_b = orderlist.index(str(b))
- reverse = 1
-
- if cmp_a < cmp_b:
- return -1 * reverse
- elif cmp_a > cmp_b:
- return 1 * reverse
- else:
- return 0
-
- # A sorting function for specs. Similar to component_compare, but
- # a and b are considered to match entries in the sorting list if they
- # satisfy the list component.
- def _spec_compare(self, pkgname, component, a, b,
- reverse_natural_compare, second_key):
- if not a or (not a.concrete and not second_key):
- return -1
- if not b or (not b.concrete and not second_key):
- return 1
- specs = self._spec_for_pkgname(pkgname, component, second_key)
- a_index = None
- b_index = None
- reverse = -1 if reverse_natural_compare else 1
- for i, cspec in enumerate(specs):
- if a_index is None and (cspec.satisfies(a) or a.satisfies(cspec)):
- a_index = i
- if b_index:
- break
- if b_index is None and (cspec.satisfies(b) or b.satisfies(cspec)):
- b_index = i
- if a_index:
- break
-
- if a_index is not None and b_index is None:
- return -1
- elif a_index is None and b_index is not None:
- return 1
- elif a_index is not None and b_index == a_index:
- return -1 * cmp(a, b)
- elif (a_index is not None and b_index is not None and
- a_index != b_index):
- return cmp(a_index, b_index)
- else:
- return cmp(a, b) * reverse
-
- # Given a sort order specified by the pkgname/component/second_key, return
- # a list of CompilerSpecs, VersionLists, or Specs for that sorting list.
- def _spec_for_pkgname(self, pkgname, component, second_key):
- key = (pkgname, component, second_key)
- if key not in self._spec_for_pkgname_cache:
- pkglist = self._order_for_package(pkgname, component, second_key)
- if component == 'compiler':
- self._spec_for_pkgname_cache[key] = \
- [spack.spec.CompilerSpec(s) for s in pkglist]
- elif component == 'version':
- self._spec_for_pkgname_cache[key] = \
- [VersionList(s) for s in pkglist]
- else:
- self._spec_for_pkgname_cache[key] = \
- [spack.spec.Spec(s) for s in pkglist]
- return self._spec_for_pkgname_cache[key]
-
- def provider_compare(self, pkgname, provider_str, a, b):
- """Return less-than-0, 0, or greater than 0 if a is respecively
- less-than, equal-to, or greater-than b. A and b are possible
- implementations of provider_str. One provider is less-than another
- if it is preferred over the other. For example,
- provider_compare('scorep', 'mpi', 'mvapich', 'openmpi') would
- return -1 if mvapich should be preferred over openmpi for scorep."""
- return self._spec_compare(pkgname, 'providers', a, b, False,
- provider_str)
-
- def spec_has_preferred_provider(self, pkgname, provider_str):
- """Return True iff the named package has a list of preferred
- providers"""
- return bool(self._order_for_package(pkgname, 'providers',
- provider_str, False))
-
- def spec_preferred_variants(self, pkgname):
- """Return a VariantMap of preferred variants and their values"""
- for pkg in (pkgname, 'all'):
- variants = self.preferred.get(pkg, {}).get('variants', '')
+ @classmethod
+ def _specs_for_pkg(cls, pkgname, component, vpkg=None):
+ """Given a sort order specified by the pkgname/component/second_key,
+ return a list of CompilerSpecs, VersionLists, or Specs for
+ that sorting list.
+ """
+ key = (pkgname, component, vpkg)
+
+ specs = cls._spec_cache.get(key)
+ if specs is None:
+ pkglist = cls._order_for_package(pkgname, component, vpkg)
+ spec_type = _spec_type(component)
+ specs = [spec_type(s) for s in pkglist]
+ cls._spec_cache[key] = specs
+
+ return specs
+
+ @classmethod
+ def clear_caches(cls):
+ cls._packages_config_cache = None
+ cls._spec_cache = {}
+
+ @classmethod
+ def has_preferred_providers(cls, pkgname, vpkg):
+ """Whether specific package has a preferred vpkg providers."""
+ return bool(cls._order_for_package(pkgname, 'providers', vpkg, False))
+
+ @classmethod
+ def preferred_variants(cls, pkg_name):
+ """Return a VariantMap of preferred variants/values for a spec."""
+ for pkg in (pkg_name, 'all'):
+ variants = cls._packages_config.get(pkg, {}).get('variants', '')
if variants:
break
- if not isinstance(variants, basestring):
+
+ # allow variants to be list or string
+ if not isinstance(variants, string_types):
variants = " ".join(variants)
- pkg = spack.repo.get(pkgname)
- spec = spack.spec.Spec("%s %s" % (pkgname, variants))
+
# Only return variants that are actually supported by the package
+ pkg = spack.repo.get(pkg_name)
+ spec = spack.spec.Spec("%s %s" % (pkg_name, variants))
return dict((name, variant) for name, variant in spec.variants.items()
if name in pkg.variants)
- def version_compare(self, pkgname, a, b):
- """Return less-than-0, 0, or greater than 0 if version a of pkgname is
- respectively less-than, equal-to, or greater-than version b of
- pkgname. One version is less-than another if it is preferred over
- the other."""
- return self._spec_compare(pkgname, 'version', a, b, True, None)
-
- def variant_compare(self, pkgname, a, b):
- """Return less-than-0, 0, or greater than 0 if variant a of pkgname is
- respectively less-than, equal-to, or greater-than variant b of
- pkgname. One variant is less-than another if it is preferred over
- the other."""
- return self._component_compare(pkgname, 'variant', a, b, False, None)
-
- def architecture_compare(self, pkgname, a, b):
- """Return less-than-0, 0, or greater than 0 if architecture a of pkgname
- is respectively less-than, equal-to, or greater-than architecture b
- of pkgname. One architecture is less-than another if it is preferred
- over the other."""
- return self._component_compare(pkgname, 'architecture', a, b,
- False, None)
-
- def compiler_compare(self, pkgname, a, b):
- """Return less-than-0, 0, or greater than 0 if compiler a of pkgname is
- respecively less-than, equal-to, or greater-than compiler b of
- pkgname. One compiler is less-than another if it is preferred over
- the other."""
- return self._spec_compare(pkgname, 'compiler', a, b, False, None)
+
+class PackageTesting(object):
+ def __init__(self):
+ self.packages_to_test = set()
+ self._test_all = False
+
+ def test(self, package_name):
+ self.packages_to_test.add(package_name)
+
+ def test_all(self):
+ self._test_all = True
+
+ def clear(self):
+ self._test_all = False
+ self.packages_to_test.clear()
+
+ def check(self, package_name):
+ return self._test_all or (package_name in self.packages_to_test)
def spec_externals(spec):
- """Return a list of external specs (with external directory path filled in),
+ """Return a list of external specs (w/external directory path filled in),
one for each known external installation."""
# break circular import.
- from spack.build_environment import get_path_from_module
+ from spack.util.module_cmd import get_path_from_module # NOQA: ignore=F401
allpkgs = get_packages_config()
name = spec.name
@@ -232,27 +238,27 @@ def spec_externals(spec):
if (not pkg_paths) and (not pkg_modules):
return []
- for external_spec, path in pkg_paths.iteritems():
+ for external_spec, path in iteritems(pkg_paths):
if not path:
# skip entries without paths (avoid creating extra Specs)
continue
- external_spec = spack.spec.Spec(external_spec, external=path)
+ external_spec = spack.spec.Spec(external_spec,
+ external_path=canonicalize_path(path))
if external_spec.satisfies(spec):
external_specs.append(external_spec)
- for external_spec, module in pkg_modules.iteritems():
+ for external_spec, module in iteritems(pkg_modules):
if not module:
continue
- path = get_path_from_module(module)
-
external_spec = spack.spec.Spec(
- external_spec, external=path, external_module=module)
+ external_spec, external_module=module)
if external_spec.satisfies(spec):
external_specs.append(external_spec)
- return external_specs
+ # defensively copy returned specs
+ return [s.copy() for s in external_specs]
def is_spec_buildable(spec):
@@ -265,50 +271,5 @@ def is_spec_buildable(spec):
return allpkgs[spec.name]['buildable']
-def cmp_specs(lhs, rhs):
- # Package name sort order is not configurable, always goes alphabetical
- if lhs.name != rhs.name:
- return cmp(lhs.name, rhs.name)
-
- # Package version is second in compare order
- pkgname = lhs.name
- if lhs.versions != rhs.versions:
- return pkgsort().version_compare(
- pkgname, lhs.versions, rhs.versions)
-
- # Compiler is third
- if lhs.compiler != rhs.compiler:
- return pkgsort().compiler_compare(
- pkgname, lhs.compiler, rhs.compiler)
-
- # Variants
- if lhs.variants != rhs.variants:
- return pkgsort().variant_compare(
- pkgname, lhs.variants, rhs.variants)
-
- # Architecture
- if lhs.architecture != rhs.architecture:
- return pkgsort().architecture_compare(
- pkgname, lhs.architecture, rhs.architecture)
-
- # Dependency is not configurable
- lhash, rhash = hash(lhs), hash(rhs)
- if lhash != rhash:
- return -1 if lhash < rhash else 1
-
- # Equal specs
- return 0
-
-
-_pkgsort = None
-
-
-def pkgsort():
- global _pkgsort
- if _pkgsort is None:
- _pkgsort = PreferredPackages()
- return _pkgsort
-
-
class VirtualInPackagesYAMLError(spack.error.SpackError):
"""Raised when a disallowed virtual is found in packages.yaml"""
diff --git a/lib/spack/spack/package_test.py b/lib/spack/spack/package_test.py
index e366b5f0e5..e3f2e82d03 100644
--- a/lib/spack/spack/package_test.py
+++ b/lib/spack/spack/package_test.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,8 +22,8 @@
# 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 *
import os
+from spack.util.executable import which, Executable
def compile_c_and_execute(source_file, include_flags, link_flags):
@@ -39,21 +39,21 @@ def compile_c_and_execute(source_file, include_flags, link_flags):
*link_flags)
check = Executable('./check')
- return check(return_output=True)
+ return check(output=str)
def compare_output(current_output, blessed_output):
"""Compare blessed and current output of executables."""
if not (current_output == blessed_output):
- print "Produced output does not match expected output."
- print "Expected output:"
- print '-' * 80
- print blessed_output
- print '-' * 80
- print "Produced output:"
- print '-' * 80
- print current_output
- print '-' * 80
+ print("Produced output does not match expected output.")
+ print("Expected output:")
+ print('-' * 80)
+ print(blessed_output)
+ print('-' * 80)
+ print("Produced output:")
+ print('-' * 80)
+ print(current_output)
+ print('-' * 80)
raise RuntimeError("Ouput check failed.",
"See spack_output.log for details")
diff --git a/lib/spack/spack/parse.py b/lib/spack/spack/parse.py
index e116175823..1bdefde7a4 100644
--- a/lib/spack/spack/parse.py
+++ b/lib/spack/spack/parse.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,7 +24,10 @@
##############################################################################
import re
import shlex
+import sys
import itertools
+from six import string_types
+
import spack.error
@@ -46,9 +49,8 @@ class Token:
def is_a(self, type):
return self.type == type
- def __cmp__(self, other):
- return cmp((self.type, self.value),
- (other.type, other.value))
+ def __eq__(self, other):
+ return (self.type == other.type) and (self.value == other.value)
class Lexer(object):
@@ -118,7 +120,7 @@ class Parser(object):
def gettok(self):
"""Puts the next token in the input stream into self.next."""
try:
- self.next = self.tokens.next()
+ self.next = next(self.tokens)
except StopIteration:
self.next = None
@@ -159,7 +161,7 @@ class Parser(object):
sys.exit(1)
def setup(self, text):
- if isinstance(text, basestring):
+ if isinstance(text, string_types):
text = shlex.split(text)
self.text = text
self.push_tokens(self.lexer.lex(text))
diff --git a/lib/spack/spack/patch.py b/lib/spack/spack/patch.py
index ee83748319..2fea1d9aff 100644
--- a/lib/spack/spack/patch.py
+++ b/lib/spack/spack/patch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,14 +23,31 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import os
+import os.path
+import inspect
+import hashlib
import spack
import spack.error
-import spack.stage
import spack.fetch_strategy as fs
-
-from llnl.util.filesystem import join_path
+import spack.stage
+from spack.util.crypto import checksum, Checker
+from llnl.util.filesystem import working_dir
from spack.util.executable import which
+from spack.util.compression import allowed_archive
+
+
+def absolute_path_for_package(pkg):
+ """Returns the absolute path to the ``package.py`` file implementing
+ the recipe for the package passed as argument.
+
+ Args:
+ pkg: a valid package object, or a Dependency object.
+ """
+ if isinstance(pkg, spack.dependency.Dependency):
+ pkg = pkg.pkg
+ m = inspect.getmodule(pkg)
+ return os.path.abspath(m.__file__)
class Patch(object):
@@ -39,7 +56,7 @@ class Patch(object):
"""
@staticmethod
- def create(pkg, path_or_url, level, **kwargs):
+ def create(pkg, path_or_url, level=1, working_dir=".", **kwargs):
"""
Factory method that creates an instance of some class derived from
Patch
@@ -47,24 +64,26 @@ class Patch(object):
Args:
pkg: package that needs to be patched
path_or_url: path or url where the patch is found
- level: patch level
+ level: patch level (default 1)
+ working_dir (str): dir to change to before applying (default '.')
Returns:
instance of some Patch class
"""
# Check if we are dealing with a URL
if '://' in path_or_url:
- return UrlPatch(pkg, path_or_url, level, **kwargs)
+ return UrlPatch(path_or_url, level, working_dir, **kwargs)
# Assume patches are stored in the repository
- return FilePatch(pkg, path_or_url, level)
+ return FilePatch(pkg, path_or_url, level, working_dir)
- def __init__(self, pkg, path_or_url, level):
+ def __init__(self, path_or_url, level, working_dir):
# Check on level (must be an integer > 0)
if not isinstance(level, int) or not level >= 0:
raise ValueError("Patch level needs to be a non-negative integer.")
# Attributes shared by all patch subclasses
self.path_or_url = path_or_url
self.level = level
+ self.working_dir = working_dir
# self.path needs to be computed by derived classes
# before a call to apply
self.path = None
@@ -79,29 +98,49 @@ class Patch(object):
Args:
stage: stage for the package that needs to be patched
"""
- stage.chdir_to_source()
- # Use -N to allow the same patches to be applied multiple times.
- _patch = which("patch", required=True)
- _patch('-s', '-p', str(self.level), '-i', self.path)
+ patch = which("patch", required=True)
+ with working_dir(stage.source_path):
+ # Use -N to allow the same patches to be applied multiple times.
+ patch('-s', '-p', str(self.level), '-i', self.path,
+ "-d", self.working_dir)
class FilePatch(Patch):
"""Describes a patch that is retrieved from a file in the repository"""
- def __init__(self, pkg, path_or_url, level):
- super(FilePatch, self).__init__(pkg, path_or_url, level)
+ def __init__(self, pkg, path_or_url, level, working_dir):
+ super(FilePatch, self).__init__(path_or_url, level, working_dir)
- pkg_dir = spack.repo.dirname_for_package_name(pkg.name)
- self.path = join_path(pkg_dir, path_or_url)
+ pkg_dir = os.path.dirname(absolute_path_for_package(pkg))
+ self.path = os.path.join(pkg_dir, path_or_url)
if not os.path.isfile(self.path):
- raise NoSuchPatchFileError(pkg.name, self.path)
+ raise NoSuchPatchError(
+ "No such patch for package %s: %s" % (pkg.name, self.path))
+ self._sha256 = None
+
+ @property
+ def sha256(self):
+ if self._sha256 is None:
+ self._sha256 = checksum(hashlib.sha256, self.path)
+ return self._sha256
class UrlPatch(Patch):
"""Describes a patch that is retrieved from a URL"""
- def __init__(self, pkg, path_or_url, level, **kwargs):
- super(UrlPatch, self).__init__(pkg, path_or_url, level)
+ def __init__(self, path_or_url, level, working_dir, **kwargs):
+ super(UrlPatch, self).__init__(path_or_url, level, working_dir)
self.url = path_or_url
- self.md5 = kwargs.get('md5')
+
+ self.archive_sha256 = None
+ if allowed_archive(self.url):
+ if 'archive_sha256' not in kwargs:
+ raise PatchDirectiveError(
+ "Compressed patches require 'archive_sha256' "
+ "and patch 'sha256' attributes: %s" % self.url)
+ self.archive_sha256 = kwargs.get('archive_sha256')
+
+ if 'sha256' not in kwargs:
+ raise PatchDirectiveError("URL patches require a sha256 checksum")
+ self.sha256 = kwargs.get('sha256')
def apply(self, stage):
"""Retrieve the patch in a temporary stage, computes
@@ -110,27 +149,56 @@ class UrlPatch(Patch):
Args:
stage: stage for the package that needs to be patched
"""
- fetcher = fs.URLFetchStrategy(self.url, digest=self.md5)
- mirror = join_path(
+ # use archive digest for compressed archives
+ fetch_digest = self.sha256
+ if self.archive_sha256:
+ fetch_digest = self.archive_sha256
+
+ fetcher = fs.URLFetchStrategy(self.url, digest=fetch_digest)
+ mirror = os.path.join(
os.path.dirname(stage.mirror_path),
- os.path.basename(self.url)
- )
+ os.path.basename(self.url))
+
with spack.stage.Stage(fetcher, mirror_path=mirror) as patch_stage:
patch_stage.fetch()
patch_stage.check()
patch_stage.cache_local()
- patch_stage.expand_archive()
- self.path = os.path.abspath(
- os.listdir(patch_stage.path).pop()
- )
+
+ root = patch_stage.path
+ if self.archive_sha256:
+ patch_stage.expand_archive()
+ root = patch_stage.source_path
+
+ files = os.listdir(root)
+ if not files:
+ if self.archive_sha256:
+ raise NoSuchPatchError(
+ "Archive was empty: %s" % self.url)
+ else:
+ raise NoSuchPatchError(
+ "Patch failed to download: %s" % self.url)
+
+ self.path = os.path.join(root, files.pop())
+
+ if not os.path.isfile(self.path):
+ raise NoSuchPatchError(
+ "Archive %s contains no patch file!" % self.url)
+
+ # for a compressed archive, Need to check the patch sha256 again
+ # and the patch is in a directory, not in the same place
+ if self.archive_sha256:
+ checker = Checker(self.sha256)
+ if not checker.check(self.path):
+ raise fs.ChecksumError(
+ "sha256 checksum failed for %s" % self.path,
+ "Expected %s but got %s" % (self.sha256, checker.sum))
+
super(UrlPatch, self).apply(stage)
-class NoSuchPatchFileError(spack.error.SpackError):
- """Raised when user specifies a patch file that doesn't exist."""
+class NoSuchPatchError(spack.error.SpackError):
+ """Raised when a patch file doesn't exist."""
+
- def __init__(self, package, path):
- super(NoSuchPatchFileError, self).__init__(
- "No such patch file for package %s: %s" % (package, path))
- self.package = package
- self.path = path
+class PatchDirectiveError(spack.error.SpackError):
+ """Raised when the wrong arguments are suppled to the patch directive."""
diff --git a/lib/spack/spack/platforms/__init__.py b/lib/spack/spack/platforms/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/platforms/__init__.py
+++ b/lib/spack/spack/platforms/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/platforms/bgq.py b/lib/spack/spack/platforms/bgq.py
index 8ff33dd418..f0dfe1dd14 100644
--- a/lib/spack/spack/platforms/bgq.py
+++ b/lib/spack/spack/platforms/bgq.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/platforms/cray.py b/lib/spack/spack/platforms/cray.py
index 1cd08e5565..095a426b22 100644
--- a/lib/spack/spack/platforms/cray.py
+++ b/lib/spack/spack/platforms/cray.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,9 +28,10 @@ import llnl.util.tty as tty
from spack import build_env_path
from spack.util.executable import which
from spack.architecture import Platform, Target, NoPlatformError
-from spack.operating_systems.linux_distro import LinuxDistro
+from spack.operating_systems.cray_frontend import CrayFrontend
from spack.operating_systems.cnl import Cnl
from llnl.util.filesystem import join_path
+from spack.util.module_cmd import get_module_cmd
def _get_modules_in_modulecmd_output(output):
@@ -87,7 +88,7 @@ class Cray(Platform):
else:
raise NoPlatformError()
- front_distro = LinuxDistro()
+ front_distro = CrayFrontend()
back_distro = Cnl()
self.default_os = str(back_distro)
@@ -142,8 +143,7 @@ class Cray(Platform):
def _avail_targets(self):
'''Return a list of available CrayPE CPU targets.'''
if getattr(self, '_craype_targets', None) is None:
- module = which('modulecmd', required=True)
- module.add_default_arg('python')
+ module = get_module_cmd()
output = module('avail', '-t', 'craype-', output=str, error=str)
craype_modules = _get_modules_in_modulecmd_output(output)
self._craype_targets = targets = []
diff --git a/lib/spack/spack/platforms/darwin.py b/lib/spack/spack/platforms/darwin.py
index 3f6dc77655..be2a1e7e41 100644
--- a/lib/spack/spack/platforms/darwin.py
+++ b/lib/spack/spack/platforms/darwin.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/platforms/linux.py b/lib/spack/spack/platforms/linux.py
index d7cdd643c0..4913be4ed2 100644
--- a/lib/spack/spack/platforms/linux.py
+++ b/lib/spack/spack/platforms/linux.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/platforms/test.py b/lib/spack/spack/platforms/test.py
index a40e1f3b44..3a4d2c00ad 100644
--- a/lib/spack/spack/platforms/test.py
+++ b/lib/spack/spack/platforms/test.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/provider_index.py b/lib/spack/spack/provider_index.py
index 0e771c6255..21bde7ce5c 100644
--- a/lib/spack/spack/provider_index.py
+++ b/lib/spack/spack/provider_index.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,6 +26,7 @@
The ``virtual`` module contains utility classes for virtual dependencies.
"""
from itertools import product as iproduct
+from six import iteritems
from pprint import pformat
import spack.util.spack_yaml as syaml
@@ -96,8 +97,8 @@ class ProviderIndex(object):
assert(not spec.virtual)
- pkg = spec.package
- for provided_spec, provider_specs in pkg.provided.iteritems():
+ pkg_provided = spec.package_class.provided
+ for provided_spec, provider_specs in iteritems(pkg_provided):
for provider_spec in provider_specs:
# TODO: fix this comment.
# We want satisfaction other than flags
@@ -145,8 +146,8 @@ class ProviderIndex(object):
if p_spec.satisfies(vspec, deps=False):
providers.update(spec_set)
- # Return providers in order
- return sorted(providers)
+ # Return providers in order. Defensively copy.
+ return sorted(s.copy() for s in providers)
# TODO: this is pretty darned nasty, and inefficient, but there
# are not that many vdeps in most specs.
@@ -201,7 +202,7 @@ class ProviderIndex(object):
def from_yaml(stream):
try:
yfile = syaml.load(stream)
- except MarkedYAMLError, e:
+ except MarkedYAMLError as e:
raise spack.spec.SpackYAMLError(
"error parsing YAML ProviderIndex cache:", str(e))
@@ -288,7 +289,7 @@ def _transform(providers, transform_fun, out_mapping_type=dict):
"""
def mapiter(mappings):
if isinstance(mappings, dict):
- return mappings.iteritems()
+ return iteritems(mappings)
else:
return iter(mappings)
diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py
new file mode 100644
index 0000000000..1f62c70231
--- /dev/null
+++ b/lib/spack/spack/relocate.py
@@ -0,0 +1,304 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+import platform
+import re
+import spack
+import spack.cmd
+from spack.util.executable import Executable
+from llnl.util.filesystem import filter_file
+import llnl.util.tty as tty
+
+
+def get_patchelf():
+ """
+ Builds and installs spack patchelf package on linux platforms
+ using the first concretized spec.
+ Returns the full patchelf binary path.
+ """
+ # as we may need patchelf, find out where it is
+ if platform.system() == 'Darwin':
+ return None
+ patchelf_spec = spack.cmd.parse_specs("patchelf", concretize=True)[0]
+ patchelf = spack.repo.get(patchelf_spec)
+ if not patchelf.installed:
+ patchelf.do_install()
+ patchelf_executable = os.path.join(patchelf.prefix.bin, "patchelf")
+ return patchelf_executable
+
+
+def get_existing_elf_rpaths(path_name):
+ """
+ Return the RPATHS returned by patchelf --print-rpath path_name
+ as a list of strings.
+ """
+ if platform.system() == 'Linux':
+ command = Executable(get_patchelf())
+ output = command('--print-rpath', '%s' %
+ path_name, output=str, err=str)
+ return output.rstrip('\n').split(':')
+ else:
+ tty.die('relocation not supported for this platform')
+ return
+
+
+def get_relative_rpaths(path_name, orig_dir, orig_rpaths):
+ """
+ Replaces orig_dir with relative path from dirname(path_name) if an rpath
+ in orig_rpaths contains orig_path. Prefixes $ORIGIN
+ to relative paths and returns replacement rpaths.
+ """
+ rel_rpaths = []
+ for rpath in orig_rpaths:
+ if re.match(orig_dir, rpath):
+ rel = os.path.relpath(rpath, start=os.path.dirname(path_name))
+ rel_rpaths.append('$ORIGIN/%s' % rel)
+ else:
+ rel_rpaths.append(rpath)
+ return rel_rpaths
+
+
+def macho_get_paths(path_name):
+ """
+ Examines the output of otool -l path_name for these three fields:
+ LC_ID_DYLIB, LC_LOAD_DYLIB, LC_RPATH and parses out the rpaths,
+ dependiencies and library id.
+ Returns these values.
+ """
+ otool = Executable('otool')
+ output = otool("-l", path_name, output=str, err=str)
+ last_cmd = None
+ idpath = None
+ rpaths = []
+ deps = []
+ for line in output.split('\n'):
+ match = re.search('( *[a-zA-Z]+ )(.*)', line)
+ if match:
+ lhs = match.group(1).lstrip().rstrip()
+ rhs = match.group(2)
+ match2 = re.search('(.*) \(.*\)', rhs)
+ if match2:
+ rhs = match2.group(1)
+ if lhs == 'cmd':
+ last_cmd = rhs
+ if lhs == 'path' and last_cmd == 'LC_RPATH':
+ rpaths.append(rhs)
+ if lhs == 'name' and last_cmd == 'LC_ID_DYLIB':
+ idpath = rhs
+ if lhs == 'name' and last_cmd == 'LC_LOAD_DYLIB':
+ deps.append(rhs)
+ return rpaths, deps, idpath
+
+
+def macho_make_paths_relative(path_name, old_dir, rpaths, deps, idpath):
+ """
+ Replace old_dir with relative path from dirname(path_name)
+ in rpaths and deps; idpaths are replaced with @rpath/basebane(path_name);
+ replacement are returned.
+ """
+ new_idpath = None
+ if idpath:
+ new_idpath = '@rpath/%s' % os.path.basename(idpath)
+ new_rpaths = list()
+ new_deps = list()
+ for rpath in rpaths:
+ if re.match(old_dir, rpath):
+ rel = os.path.relpath(rpath, start=os.path.dirname(path_name))
+ new_rpaths.append('@loader_path/%s' % rel)
+ else:
+ new_rpaths.append(rpath)
+ for dep in deps:
+ if re.match(old_dir, dep):
+ rel = os.path.relpath(dep, start=os.path.dirname(path_name))
+ new_deps.append('@loader_path/%s' % rel)
+ else:
+ new_deps.append(dep)
+ return (new_rpaths, new_deps, new_idpath)
+
+
+def macho_replace_paths(old_dir, new_dir, rpaths, deps, idpath):
+ """
+ Replace old_dir with new_dir in rpaths, deps and idpath
+ and return replacements
+ """
+ new_idpath = None
+ if idpath:
+ new_idpath = idpath.replace(old_dir, new_dir)
+ new_rpaths = list()
+ new_deps = list()
+ for rpath in rpaths:
+ new_rpath = rpath.replace(old_dir, new_dir)
+ new_rpaths.append(new_rpath)
+ for dep in deps:
+ new_dep = dep.replace(old_dir, new_dir)
+ new_deps.append(new_dep)
+ return new_rpaths, new_deps, new_idpath
+
+
+def modify_macho_object(cur_path, rpaths, deps, idpath,
+ new_rpaths, new_deps, new_idpath):
+ """
+ Modify MachO binary path_name by replacing old_dir with new_dir
+ or the relative path to spack install root.
+ The old install dir in LC_ID_DYLIB is replaced with the new install dir
+ using install_name_tool -id newid binary
+ The old install dir in LC_LOAD_DYLIB is replaced with the new install dir
+ using install_name_tool -change old new binary
+ The old install dir in LC_RPATH is replaced with the new install dir using
+ install_name_tool -rpath old new binary
+ """
+ # avoid error message for libgcc_s
+ if 'libgcc_' in cur_path:
+ return
+ install_name_tool = Executable('install_name_tool')
+ if new_idpath:
+ install_name_tool('-id', new_idpath, str(cur_path),
+ output=str, err=str)
+
+ for orig, new in zip(deps, new_deps):
+ install_name_tool('-change', orig, new, str(cur_path))
+
+ for orig, new in zip(rpaths, new_rpaths):
+ install_name_tool('-rpath', orig, new, str(cur_path))
+ return
+
+
+def get_filetype(path_name):
+ """
+ Return the output of file path_name as a string to identify file type.
+ """
+ file = Executable('file')
+ file.add_default_env('LC_ALL', 'C')
+ output = file('-b', '-h', '%s' % path_name,
+ output=str, err=str)
+ return output.strip()
+
+
+def modify_elf_object(path_name, orig_rpath, new_rpath):
+ """
+ Replace orig_rpath with new_rpath in RPATH of elf object path_name
+ """
+ if platform.system() == 'Linux':
+ new_joined = ':'.join(new_rpath)
+ patchelf = Executable(get_patchelf())
+ patchelf('--force-rpath', '--set-rpath', '%s' % new_joined,
+ '%s' % path_name, output=str, cmd=str)
+ else:
+ tty.die('relocation not supported for this platform')
+
+
+def needs_binary_relocation(filetype, os_id=None):
+ """
+ Check whether the given filetype is a binary that may need relocation.
+ """
+ retval = False
+ if "relocatable" in filetype:
+ return False
+ if "link to" in filetype:
+ return False
+ if os_id == 'Darwin':
+ return ("Mach-O" in filetype)
+ elif os_id == 'Linux':
+ return ("ELF" in filetype)
+ else:
+ tty.die("Relocation not implemented for %s" % os_id)
+ return retval
+
+
+def needs_text_relocation(filetype):
+ """
+ Check whether the given filetype is text that may need relocation.
+ """
+ if "link to" in filetype:
+ return False
+ return ("text" in filetype)
+
+
+def relocate_binary(path_names, old_dir, new_dir):
+ """
+ Change old_dir to new_dir in RPATHs of elf or mach-o files
+ """
+ if platform.system() == 'Darwin':
+ for path_name in path_names:
+ rpaths, deps, idpath = macho_get_paths(path_name)
+ new_rpaths, new_deps, new_idpath = macho_replace_paths(old_dir,
+ new_dir,
+ rpaths,
+ deps,
+ idpath)
+ modify_macho_object(path_name,
+ rpaths, deps, idpath,
+ new_rpaths, new_deps, new_idpath)
+ elif platform.system() == 'Linux':
+ for path_name in path_names:
+ orig_rpaths = get_existing_elf_rpaths(path_name)
+ new_rpaths = substitute_rpath(orig_rpaths, old_dir, new_dir)
+ modify_elf_object(path_name, orig_rpaths, new_rpaths)
+ else:
+ tty.die("Relocation not implemented for %s" % platform.system())
+
+
+def make_binary_relative(cur_path_names, orig_path_names, old_dir):
+ """
+ Make RPATHs relative to old_dir in given elf or mach-o files
+ """
+ if platform.system() == 'Darwin':
+ for cur_path, orig_path in zip(cur_path_names, orig_path_names):
+ rpaths, deps, idpath = macho_get_paths(cur_path)
+ (new_rpaths,
+ new_deps,
+ new_idpath) = macho_make_paths_relative(orig_path, old_dir,
+ rpaths, deps, idpath)
+ modify_macho_object(cur_path,
+ rpaths, deps, idpath,
+ new_rpaths, new_deps, new_idpath)
+ elif platform.system() == 'Linux':
+ for cur_path, orig_path in zip(cur_path_names, orig_path_names):
+ orig_rpaths = get_existing_elf_rpaths(cur_path)
+ new_rpaths = get_relative_rpaths(orig_path, old_dir,
+ orig_rpaths)
+ modify_elf_object(cur_path, orig_rpaths, new_rpaths)
+ else:
+ tty.die("Prelocation not implemented for %s" % platform.system())
+
+
+def relocate_text(path_names, old_dir, new_dir):
+ """
+ Replace old path with new path in text file path_name
+ """
+ filter_file('%s' % old_dir, '%s' % new_dir,
+ *path_names, backup=False)
+
+
+def substitute_rpath(orig_rpath, topdir, new_root_path):
+ """
+ Replace topdir with new_root_path RPATH list orig_rpath
+ """
+ new_rpaths = []
+ for path in orig_rpath:
+ new_rpath = path.replace(topdir, new_root_path)
+ new_rpaths.append(new_rpath)
+ return new_rpaths
diff --git a/lib/spack/spack/repository.py b/lib/spack/spack/repository.py
index 1536ecb0e6..e38af165f9 100644
--- a/lib/spack/spack/repository.py
+++ b/lib/spack/spack/repository.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,30 +22,38 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import collections
import os
import stat
import shutil
import errno
-import exceptions
import sys
import inspect
import imp
import re
import traceback
-from bisect import bisect_left
+import json
+
+try:
+ from collections.abc import Mapping
+except ImportError:
+ from collections import Mapping
+
from types import ModuleType
import yaml
+import llnl.util.lang
import llnl.util.tty as tty
-from llnl.util.filesystem import *
+from llnl.util.filesystem import mkdirp, join_path, install
import spack
import spack.error
import spack.spec
from spack.provider_index import ProviderIndex
from spack.util.path import canonicalize_path
-from spack.util.naming import *
+from spack.util.naming import NamespaceTrie, valid_module_name
+from spack.util.naming import mod_to_class, possible_spack_module_names
#
# Super-namespace for all packages.
@@ -94,6 +102,242 @@ class SpackNamespace(ModuleType):
return getattr(self, name)
+class FastPackageChecker(Mapping):
+ """Cache that maps package names to the stats obtained on the
+ 'package.py' files associated with them.
+
+ For each repository a cache is maintained at class level, and shared among
+ all instances referring to it. Update of the global cache is done lazily
+ during instance initialization.
+ """
+ #: Global cache, reused by every instance
+ _paths_cache = {}
+
+ def __init__(self, packages_path):
+
+ #: The path of the repository managed by this instance
+ self.packages_path = packages_path
+
+ # If the cache we need is not there yet, then build it appropriately
+ if packages_path not in self._paths_cache:
+ self._paths_cache[packages_path] = self._create_new_cache()
+
+ #: Reference to the appropriate entry in the global cache
+ self._packages_to_stats = self._paths_cache[packages_path]
+
+ def _create_new_cache(self):
+ """Create a new cache for packages in a repo.
+
+ The implementation here should try to minimize filesystem
+ calls. At the moment, it is O(number of packages) and makes
+ about one stat call per package. This is reasonably fast, and
+ avoids actually importing packages in Spack, which is slow.
+ """
+ # Create a dictionary that will store the mapping between a
+ # package name and its stat info
+ cache = {}
+ for pkg_name in os.listdir(self.packages_path):
+ # Skip non-directories in the package root.
+ pkg_dir = join_path(self.packages_path, pkg_name)
+
+ # Warn about invalid names that look like packages.
+ if not valid_module_name(pkg_name):
+ msg = 'Skipping package at {0}. '
+ msg += '"{1}" is not a valid Spack module name.'
+ tty.warn(msg.format(pkg_dir, pkg_name))
+ continue
+
+ # Construct the file name from the directory
+ pkg_file = os.path.join(
+ self.packages_path, pkg_name, package_file_name
+ )
+
+ # Use stat here to avoid lots of calls to the filesystem.
+ try:
+ sinfo = os.stat(pkg_file)
+ except OSError as e:
+ if e.errno == errno.ENOENT:
+ # No package.py file here.
+ continue
+ elif e.errno == errno.EACCES:
+ tty.warn("Can't read package file %s." % pkg_file)
+ continue
+ raise e
+
+ # If it's not a file, skip it.
+ if stat.S_ISDIR(sinfo.st_mode):
+ continue
+
+ # If it is a file, then save the stats under the
+ # appropriate key
+ cache[pkg_name] = sinfo
+
+ return cache
+
+ def __getitem__(self, item):
+ return self._packages_to_stats[item]
+
+ def __iter__(self):
+ return iter(self._packages_to_stats)
+
+ def __len__(self):
+ return len(self._packages_to_stats)
+
+
+class TagIndex(Mapping):
+ """Maps tags to list of packages."""
+
+ def __init__(self):
+ self._tag_dict = collections.defaultdict(list)
+
+ def to_json(self, stream):
+ json.dump({'tags': self._tag_dict}, stream)
+
+ @staticmethod
+ def from_json(stream):
+ d = json.load(stream)
+
+ r = TagIndex()
+
+ for tag, list in d['tags'].items():
+ r[tag].extend(list)
+
+ return r
+
+ def __getitem__(self, item):
+ return self._tag_dict[item]
+
+ def __iter__(self):
+ return iter(self._tag_dict)
+
+ def __len__(self):
+ return len(self._tag_dict)
+
+ def update_package(self, pkg_name):
+ """Updates a package in the tag index.
+
+ Args:
+ pkg_name (str): name of the package to be removed from the index
+
+ """
+
+ package = spack.repo.get(pkg_name)
+
+ # Remove the package from the list of packages, if present
+ for pkg_list in self._tag_dict.values():
+ if pkg_name in pkg_list:
+ pkg_list.remove(pkg_name)
+
+ # Add it again under the appropriate tags
+ for tag in getattr(package, 'tags', []):
+ self._tag_dict[tag].append(package.name)
+
+
+@llnl.util.lang.memoized
+def make_provider_index_cache(packages_path, namespace):
+ """Lazily updates the provider index cache associated with a repository,
+ if need be, then returns it. Caches results for later look-ups.
+
+ Args:
+ packages_path: path of the repository
+ namespace: namespace of the repository
+
+ Returns:
+ instance of ProviderIndex
+ """
+ # Map that goes from package names to stat info
+ fast_package_checker = FastPackageChecker(packages_path)
+
+ # Filename of the provider index cache
+ cache_filename = 'providers/{0}-index.yaml'.format(namespace)
+
+ # Compute which packages needs to be updated in the cache
+ index_mtime = spack.misc_cache.mtime(cache_filename)
+
+ needs_update = [
+ x for x, sinfo in fast_package_checker.items()
+ if sinfo.st_mtime > index_mtime
+ ]
+
+ # Read the old ProviderIndex, or make a new one.
+ index_existed = spack.misc_cache.init_entry(cache_filename)
+
+ if index_existed and not needs_update:
+
+ # If the provider index exists and doesn't need an update
+ # just read from it
+ with spack.misc_cache.read_transaction(cache_filename) as f:
+ index = ProviderIndex.from_yaml(f)
+
+ else:
+
+ # Otherwise we need a write transaction to update it
+ with spack.misc_cache.write_transaction(cache_filename) as (old, new):
+
+ index = ProviderIndex.from_yaml(old) if old else ProviderIndex()
+
+ for pkg_name in needs_update:
+ namespaced_name = '{0}.{1}'.format(namespace, pkg_name)
+ index.remove_provider(namespaced_name)
+ index.update(namespaced_name)
+
+ index.to_yaml(new)
+
+ return index
+
+
+@llnl.util.lang.memoized
+def make_tag_index_cache(packages_path, namespace):
+ """Lazily updates the tag index cache associated with a repository,
+ if need be, then returns it. Caches results for later look-ups.
+
+ Args:
+ packages_path: path of the repository
+ namespace: namespace of the repository
+
+ Returns:
+ instance of TagIndex
+ """
+ # Map that goes from package names to stat info
+ fast_package_checker = FastPackageChecker(packages_path)
+
+ # Filename of the provider index cache
+ cache_filename = 'tags/{0}-index.json'.format(namespace)
+
+ # Compute which packages needs to be updated in the cache
+ index_mtime = spack.misc_cache.mtime(cache_filename)
+
+ needs_update = [
+ x for x, sinfo in fast_package_checker.items()
+ if sinfo.st_mtime > index_mtime
+ ]
+
+ # Read the old ProviderIndex, or make a new one.
+ index_existed = spack.misc_cache.init_entry(cache_filename)
+
+ if index_existed and not needs_update:
+
+ # If the provider index exists and doesn't need an update
+ # just read from it
+ with spack.misc_cache.read_transaction(cache_filename) as f:
+ index = TagIndex.from_json(f)
+
+ else:
+
+ # Otherwise we need a write transaction to update it
+ with spack.misc_cache.write_transaction(cache_filename) as (old, new):
+
+ index = TagIndex.from_json(old) if old else TagIndex()
+
+ for pkg_name in needs_update:
+ namespaced_name = '{0}.{1}'.format(namespace, pkg_name)
+ index.update_package(namespaced_name)
+
+ index.to_json(new)
+
+ return index
+
+
class RepoPath(object):
"""A RepoPath is a list of repos that function as one.
@@ -221,6 +465,12 @@ class RepoPath(object):
self._all_package_names = sorted(all_pkgs, key=lambda n: n.lower())
return self._all_package_names
+ def packages_with_tags(self, *tags):
+ r = set()
+ for repo in self.repos:
+ r |= set(repo.packages_with_tags(*tags))
+ return sorted(r)
+
def all_packages(self):
for name in self.all_package_names():
yield self.get(name)
@@ -288,20 +538,29 @@ class RepoPath(object):
sys.modules[fullname] = module
return module
- @_autospec
def repo_for_pkg(self, spec):
"""Given a spec, get the repository for its package."""
+ # We don't @_autospec this function b/c it's called very frequently
+ # and we want to avoid parsing str's into Specs unnecessarily.
+ namespace = None
+ if isinstance(spec, spack.spec.Spec):
+ namespace = spec.namespace
+ name = spec.name
+ else:
+ # handle strings directly for speed instead of @_autospec'ing
+ namespace, _, name = spec.rpartition('.')
+
# If the spec already has a namespace, then return the
# corresponding repo if we know about it.
- if spec.namespace:
- fullspace = '%s.%s' % (self.super_namespace, spec.namespace)
+ if namespace:
+ fullspace = '%s.%s' % (self.super_namespace, namespace)
if fullspace not in self.by_namespace:
raise UnknownNamespaceError(spec.namespace)
return self.by_namespace[fullspace]
# If there's no namespace, search in the RepoPath.
for repo in self.repos:
- if spec.name in repo:
+ if name in repo:
return repo
# If the package isn't in any repo, return the one with
@@ -423,21 +682,18 @@ class Repo(object):
self._classes = {}
self._instances = {}
- # list of packages that are newer than the index.
- self._needs_update = []
+ # Maps that goes from package name to corresponding file stat
+ self._fast_package_checker = FastPackageChecker(self.packages_path)
- # Index of virtual dependencies
+ # Index of virtual dependencies, computed lazily
self._provider_index = None
- # Cached list of package names.
- self._all_package_names = None
+ # Index of tags, computed lazily
+ self._tag_index = None
# make sure the namespace for packages in this repo exists.
self._create_namespace()
- # Unique filename for cache of virtual dependency providers
- self._cache_file = 'providers/%s-index.yaml' % self.namespace
-
def _create_namespace(self):
"""Create this repo's namespace module and insert it into sys.modules.
@@ -558,13 +814,13 @@ class Repo(object):
return yaml_data['repo']
- except exceptions.IOError:
+ except IOError:
tty.die("Error reading %s when opening %s"
% (self.config_file, self.root))
@_autospec
def get(self, spec, new=False):
- if spec.virtual:
+ if not self.exists(spec.name):
raise UnknownPackageError(spec.name)
if spec.namespace and spec.namespace != self.namespace:
@@ -618,41 +874,28 @@ class Repo(object):
"""Clear entire package instance cache."""
self._instances.clear()
- def _update_provider_index(self):
- # Check modification dates of all packages
- self._fast_package_check()
-
- def read():
- with open(self.index_file) as f:
- self._provider_index = ProviderIndex.from_yaml(f)
-
- # Read the old ProviderIndex, or make a new one.
- key = self._cache_file
- index_existed = spack.misc_cache.init_entry(key)
- if index_existed and not self._needs_update:
- with spack.misc_cache.read_transaction(key) as f:
- self._provider_index = ProviderIndex.from_yaml(f)
- else:
- with spack.misc_cache.write_transaction(key) as (old, new):
- if old:
- self._provider_index = ProviderIndex.from_yaml(old)
- else:
- self._provider_index = ProviderIndex()
-
- for pkg_name in self._needs_update:
- namespaced_name = '%s.%s' % (self.namespace, pkg_name)
- self._provider_index.remove_provider(namespaced_name)
- self._provider_index.update(namespaced_name)
-
- self._provider_index.to_yaml(new)
-
@property
def provider_index(self):
"""A provider index with names *specific* to this repo."""
+
if self._provider_index is None:
- self._update_provider_index()
+ self._provider_index = make_provider_index_cache(
+ self.packages_path, self.namespace
+ )
+
return self._provider_index
+ @property
+ def tag_index(self):
+ """A provider index with names *specific* to this repo."""
+
+ if self._tag_index is None:
+ self._tag_index = make_tag_index_cache(
+ self.packages_path, self.namespace
+ )
+
+ return self._tag_index
+
@_autospec
def providers_for(self, vpkg_spec):
providers = self.provider_index.providers_for(vpkg_spec)
@@ -690,73 +933,18 @@ class Repo(object):
pkg_dir = self.dirname_for_package_name(spec.name)
return join_path(pkg_dir, package_file_name)
- def _fast_package_check(self):
- """List packages in the repo and check whether index is up to date.
-
- Both of these opreations require checking all `package.py`
- files so we do them at the same time. We list the repo
- directory and look at package.py files, and we compare the
- index modification date with the ost recently modified package
- file, storing the result.
-
- The implementation here should try to minimize filesystem
- calls. At the moment, it is O(number of packages) and makes
- about one stat call per package. This is resonably fast, and
- avoids actually importing packages in Spack, which is slow.
-
- """
- if self._all_package_names is None:
- self._all_package_names = []
-
- # Get index modification time.
- index_mtime = spack.misc_cache.mtime(self._cache_file)
-
- for pkg_name in os.listdir(self.packages_path):
- # Skip non-directories in the package root.
- pkg_dir = join_path(self.packages_path, pkg_name)
-
- # Warn about invalid names that look like packages.
- if not valid_module_name(pkg_name):
- msg = ("Skipping package at %s. "
- "'%s' is not a valid Spack module name.")
- tty.warn(msg % (pkg_dir, pkg_name))
- continue
-
- # construct the file name from the directory
- pkg_file = join_path(
- self.packages_path, pkg_name, package_file_name)
-
- # Use stat here to avoid lots of calls to the filesystem.
- try:
- sinfo = os.stat(pkg_file)
- except OSError as e:
- if e.errno == errno.ENOENT:
- # No package.py file here.
- continue
- elif e.errno == errno.EACCES:
- tty.warn("Can't read package file %s." % pkg_file)
- continue
- raise e
-
- # if it's not a file, skip it.
- if stat.S_ISDIR(sinfo.st_mode):
- continue
-
- # All checks passed. Add it to the list.
- self._all_package_names.append(pkg_name)
-
- # record the package if it is newer than the index.
- if sinfo.st_mtime > index_mtime:
- self._needs_update.append(pkg_name)
+ def all_package_names(self):
+ """Returns a sorted list of all package names in the Repo."""
+ return sorted(self._fast_package_checker.keys())
- self._all_package_names.sort()
+ def packages_with_tags(self, *tags):
+ v = set(self.all_package_names())
+ index = self.tag_index
- return self._all_package_names
+ for t in tags:
+ v &= set(index[t])
- def all_package_names(self):
- """Returns a sorted list of all package names in the Repo."""
- self._fast_package_check()
- return self._all_package_names
+ return sorted(v)
def all_packages(self):
"""Iterator over all packages in the repository.
@@ -769,16 +957,7 @@ class Repo(object):
def exists(self, pkg_name):
"""Whether a package with the supplied name exists."""
- if self._all_package_names:
- # This does a binary search in the sorted list.
- idx = bisect_left(self.all_package_names(), pkg_name)
- return (idx < len(self._all_package_names) and
- self._all_package_names[idx] == pkg_name)
-
- # If we haven't generated the full package list, don't.
- # Just check whether the file exists.
- filename = self.filename_for_package_name(pkg_name)
- return os.path.exists(filename)
+ return pkg_name in self._fast_package_checker
def is_virtual(self, pkg_name):
"""True if the package with this name is virtual, False otherwise."""
@@ -925,11 +1104,11 @@ class DuplicateRepoError(RepoError):
"""Raised when duplicate repos are added to a RepoPath."""
-class PackageLoadError(spack.error.SpackError):
- """Superclass for errors related to loading packages."""
+class UnknownEntityError(RepoError):
+ """Raised when we encounter a package spack doesn't have."""
-class UnknownPackageError(PackageLoadError):
+class UnknownPackageError(UnknownEntityError):
"""Raised when we encounter a package spack doesn't have."""
def __init__(self, name, repo=None):
@@ -942,7 +1121,7 @@ class UnknownPackageError(PackageLoadError):
self.name = name
-class UnknownNamespaceError(PackageLoadError):
+class UnknownNamespaceError(UnknownEntityError):
"""Raised when we encounter an unknown namespace"""
def __init__(self, namespace):
@@ -950,7 +1129,7 @@ class UnknownNamespaceError(PackageLoadError):
"Unknown namespace: %s" % namespace)
-class FailedConstructorError(PackageLoadError):
+class FailedConstructorError(RepoError):
"""Raised when a package's class constructor fails."""
def __init__(self, name, exc_type, exc_obj, exc_tb):
diff --git a/lib/spack/spack/resource.py b/lib/spack/spack/resource.py
index 1d4d448298..35ae0170e6 100644
--- a/lib/spack/spack/resource.py
+++ b/lib/spack/spack/resource.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/schema/__init__.py b/lib/spack/spack/schema/__init__.py
index de45ea921f..764dbd23bc 100644
--- a/lib/spack/spack/schema/__init__.py
+++ b/lib/spack/spack/schema/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/schema/compilers.py b/lib/spack/spack/schema/compilers.py
index 282eddf91b..caa0d27662 100644
--- a/lib/spack/spack/schema/compilers.py
+++ b/lib/spack/spack/schema/compilers.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/schema/config.py b/lib/spack/spack/schema/config.py
index e51fa69afe..57a1c075b1 100644
--- a/lib/spack/spack/schema/config.py
+++ b/lib/spack/spack/schema/config.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,15 +38,20 @@ schema = {
'config': {
'type': 'object',
'default': {},
- 'additionalProperties': False,
'properties': {
'install_tree': {'type': 'string'},
+ 'install_hash_length': {'type': 'integer', 'minimum': 1},
+ 'install_path_scheme': {'type': 'string'},
'build_stage': {
'oneOf': [
{'type': 'string'},
{'type': 'array',
'items': {'type': 'string'}}],
},
+ 'template_dirs': {
+ 'type': 'array',
+ 'items': {'type': 'string'}
+ },
'module_roots': {
'type': 'object',
'additionalProperties': False,
@@ -61,6 +66,7 @@ schema = {
'verify_ssl': {'type': 'boolean'},
'checksum': {'type': 'boolean'},
'dirty': {'type': 'boolean'},
+ 'build_jobs': {'type': 'integer', 'minimum': 1},
}
},
},
diff --git a/lib/spack/spack/schema/mirrors.py b/lib/spack/spack/schema/mirrors.py
index 60b865bb42..b826bc251c 100644
--- a/lib/spack/spack/schema/mirrors.py
+++ b/lib/spack/spack/schema/mirrors.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/schema/modules.py b/lib/spack/spack/schema/modules.py
index 2059e14fa6..08380f0789 100644
--- a/lib/spack/spack/schema/modules.py
+++ b/lib/spack/spack/schema/modules.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -73,6 +73,9 @@ schema = {
}
}
},
+ 'template': {
+ 'type': 'string'
+ },
'autoload': {
'$ref': '#/definitions/dependency_selection'},
'prerequisites': {
@@ -105,6 +108,10 @@ schema = {
'default': {},
'anyOf': [
{'properties': {
+ 'verbose': {
+ 'type': 'boolean',
+ 'default': False
+ },
'hash_length': {
'type': 'integer',
'minimum': 0,
diff --git a/lib/spack/spack/schema/packages.py b/lib/spack/spack/schema/packages.py
index bf5648b1b7..70773c8aef 100644
--- a/lib/spack/spack/schema/packages.py
+++ b/lib/spack/spack/schema/packages.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/schema/repos.py b/lib/spack/spack/schema/repos.py
index c7a3495ae1..bdd1dfc5cf 100644
--- a/lib/spack/spack/schema/repos.py
+++ b/lib/spack/spack/schema/repos.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py
index e34f2b799d..e29c1bed3c 100644
--- a/lib/spack/spack/spec.py
+++ b/lib/spack/spack/spec.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -96,38 +96,52 @@ specs to avoid ambiguity. Both are provided because ~ can cause shell
expansion when it is the first character in an id typed on the command line.
"""
import base64
-import hashlib
+import sys
+import collections
import ctypes
-from StringIO import StringIO
-from operator import attrgetter
+import hashlib
+import itertools
+import os
+import re
-from yaml.error import MarkedYAMLError
+from operator import attrgetter
+from six import StringIO
+from six import string_types
+from six import iteritems
-import llnl.util.tty as tty
-from llnl.util.lang import *
-from llnl.util.tty.color import *
+from llnl.util.filesystem import find_headers, find_libraries, is_exe
+from llnl.util.lang import key_ordering, HashableMap, ObjectWrapper, dedupe
+from llnl.util.lang import check_kwargs
+from llnl.util.tty.color import cwrite, colorize, cescape, get_color_when
import spack
import spack.architecture
-import spack.store
import spack.compilers as compilers
import spack.error
import spack.parse
-from spack.build_environment import get_path_from_module, load_module
-from spack.util.prefix import Prefix
-from spack.util.string import *
-import spack.util.spack_yaml as syaml
+import spack.store
import spack.util.spack_json as sjson
-from spack.util.spack_yaml import syaml_dict
-from spack.util.crypto import prefix_bits
-from spack.version import *
+import spack.util.spack_yaml as syaml
+
+from spack.dependency import Dependency, all_deptypes, canonical_deptype
+from spack.util.module_cmd import get_path_from_module, load_module
+from spack.error import SpecError, UnsatisfiableSpecError
from spack.provider_index import ProviderIndex
+from spack.util.crypto import prefix_bits
+from spack.util.executable import Executable
+from spack.util.prefix import Prefix
+from spack.util.spack_yaml import syaml_dict
+from spack.util.string import comma_or
+from spack.variant import MultiValuedVariant, AbstractVariant
+from spack.variant import BoolValuedVariant, substitute_abstract_variants
+from spack.variant import VariantMap, UnknownVariantError
+from spack.variant import DuplicateVariantError
+from spack.variant import UnsatisfiableVariantSpecError
+from spack.version import VersionList, VersionRange, Version, ver
+from yaml.error import MarkedYAMLError
__all__ = [
'Spec',
- 'alldeps',
- 'canonical_deptype',
- 'validate_deptype',
'parse',
'parse_anonymous_spec',
'SpecError',
@@ -140,7 +154,6 @@ __all__ = [
'DuplicateArchitectureError',
'InconsistentSpecError',
'InvalidDependencyError',
- 'InvalidDependencyTypeError',
'NoProviderError',
'MultipleProviderError',
'UnsatisfiableSpecError',
@@ -152,23 +165,25 @@ __all__ = [
'UnsatisfiableArchitectureSpecError',
'UnsatisfiableProviderSpecError',
'UnsatisfiableDependencySpecError',
- 'AmbiguousHashError']
+ 'AmbiguousHashError',
+ 'InvalidHashError',
+ 'NoSuchHashError',
+ 'RedundantSpecError']
-# Valid pattern for an identifier in Spack
+#: Valid pattern for an identifier in Spack
identifier_re = r'\w[\w-]*'
-# Convenient names for color formats so that other things can use them
-compiler_color = '@g'
-version_color = '@c'
-architecture_color = '@m'
-enabled_variant_color = '@B'
-disabled_variant_color = '@r'
-dependency_color = '@.'
-hash_color = '@K'
-
-"""This map determines the coloring of specs when using color output.
- We make the fields different colors to enhance readability.
- See spack.color for descriptions of the color codes. """
+compiler_color = '@g' #: color for highlighting compilers
+version_color = '@c' #: color for highlighting versions
+architecture_color = '@m' #: color for highlighting architectures
+enabled_variant_color = '@B' #: color for highlighting enabled variants
+disabled_variant_color = '@r' #: color for highlighting disabled varaints
+dependency_color = '@.' #: color for highlighting dependencies
+hash_color = '@K' #: color for highlighting package hashes
+
+#: This map determines the coloring of specs when using color output.
+#: We make the fields different colors to enhance readability.
+#: See spack.color for descriptions of the color codes.
color_formats = {'%': compiler_color,
'@': version_color,
'=': architecture_color,
@@ -177,55 +192,19 @@ color_formats = {'%': compiler_color,
'^': dependency_color,
'#': hash_color}
-"""Regex used for splitting by spec field separators."""
-_separators = '[%s]' % ''.join(color_formats.keys())
+#: Regex used for splitting by spec field separators.
+#: These need to be escaped to avoid metacharacters in
+#: ``color_formats.keys()``.
+_separators = '[\\%s]' % '\\'.join(color_formats.keys())
-"""Versionlist constant so we don't have to build a list
- every time we call str()"""
+#: Versionlist constant so we don't have to build a list
+#: every time we call str()
_any_version = VersionList([':'])
-# Special types of dependencies.
-alldeps = ('build', 'link', 'run')
-norun = ('link', 'build')
-special_types = {
- 'alldeps': alldeps,
- 'all': alldeps, # allow "all" as string but not symbol.
- 'norun': norun,
-}
-
-legal_deps = tuple(special_types) + alldeps
-
-"""Max integer helps avoid passing too large a value to cyaml."""
+#: Max integer helps avoid passing too large a value to cyaml.
maxint = 2 ** (ctypes.sizeof(ctypes.c_int) * 8 - 1) - 1
-def validate_deptype(deptype):
- if isinstance(deptype, str):
- if deptype not in legal_deps:
- raise InvalidDependencyTypeError(
- "Invalid dependency type: %s" % deptype)
-
- elif isinstance(deptype, (list, tuple)):
- for t in deptype:
- validate_deptype(t)
-
- elif deptype is None:
- raise InvalidDependencyTypeError("deptype cannot be None!")
-
-
-def canonical_deptype(deptype):
- if deptype is None:
- return alldeps
-
- elif isinstance(deptype, str):
- return special_types.get(deptype, (deptype,))
-
- elif isinstance(deptype, (tuple, list)):
- return (sum((canonical_deptype(d) for d in deptype), ()))
-
- return deptype
-
-
def colorize_spec(spec):
"""Returns a spec colorized according to the colors specified in
color_formats."""
@@ -265,7 +244,7 @@ class ArchSpec(object):
spec_like = args[0]
if isinstance(spec_like, ArchSpec):
self._dup(spec_like)
- elif isinstance(spec_like, basestring):
+ elif isinstance(spec_like, string_types):
spec_fields = spec_like.split("-")
if len(spec_fields) == 3:
@@ -386,7 +365,7 @@ class ArchSpec(object):
raise UnsatisfiableArchitectureSpecError(self, other)
constrained = False
- for attr, svalue in self.to_cmp_dict().iteritems():
+ for attr, svalue in iteritems(self.to_cmp_dict()):
ovalue = getattr(other, attr)
if svalue is None and ovalue is not None:
setattr(self, attr, ovalue)
@@ -401,7 +380,7 @@ class ArchSpec(object):
@property
def concrete(self):
- return all(v for k, v in self.to_cmp_dict().iteritems())
+ return all(v for k, v in iteritems(self.to_cmp_dict()))
def to_cmp_dict(self):
"""Returns a dictionary that can be used for field comparison."""
@@ -459,7 +438,7 @@ class CompilerSpec(object):
arg = args[0]
# If there is one argument, it's either another CompilerSpec
# to copy or a string to parse
- if isinstance(arg, basestring):
+ if isinstance(arg, string_types):
c = SpecParser().parse_compiler(arg)
self.name = c.name
self.versions = c.versions
@@ -574,8 +553,11 @@ class DependencySpec(object):
self.deptypes = tuple(sorted(set(deptypes)))
def update_deptypes(self, deptypes):
- deptypes = tuple(sorted(set(deptypes)))
+ deptypes = set(deptypes)
+ deptypes.update(self.deptypes)
+ deptypes = tuple(sorted(deptypes))
changed = self.deptypes != deptypes
+
self.deptypes = deptypes
return changed
@@ -593,81 +575,6 @@ class DependencySpec(object):
self.spec.name if self.spec else None)
-@key_ordering
-class VariantSpec(object):
- """Variants are named, build-time options for a package. Names depend
- on the particular package being built, and each named variant can
- be enabled or disabled.
- """
-
- def __init__(self, name, value):
- self.name = name
- self.value = value
-
- def _cmp_key(self):
- return (self.name, self.value)
-
- def copy(self):
- return VariantSpec(self.name, self.value)
-
- def __str__(self):
- if type(self.value) == bool:
- return '{0}{1}'.format('+' if self.value else '~', self.name)
- else:
- return ' {0}={1} '.format(self.name, self.value)
-
-
-class VariantMap(HashableMap):
-
- def __init__(self, spec):
- super(VariantMap, self).__init__()
- self.spec = spec
-
- def satisfies(self, other, strict=False):
- if strict or self.spec._concrete:
- return all(k in self and self[k].value == other[k].value
- for k in other)
- else:
- return all(self[k].value == other[k].value
- for k in other if k in self)
-
- def constrain(self, other):
- """Add all variants in other that aren't in self to self.
-
- Raises an error if any common variants don't match.
- Return whether the spec changed.
- """
- if other.spec._concrete:
- for k in self:
- if k not in other:
- raise UnsatisfiableVariantSpecError(self[k], '<absent>')
-
- changed = False
- for k in other:
- if k in self:
- if self[k].value != other[k].value:
- raise UnsatisfiableVariantSpecError(self[k], other[k])
- else:
- self[k] = other[k].copy()
- changed = True
- return changed
-
- @property
- def concrete(self):
- return self.spec._concrete or all(
- v in self for v in self.spec.package_class.variants)
-
- def copy(self):
- clone = VariantMap(None)
- for name, variant in self.items():
- clone[name] = variant.copy()
- return clone
-
- def __str__(self):
- sorted_keys = sorted(self.keys())
- return ''.join(str(self[key]) for key in sorted_keys)
-
-
_valid_compiler_flags = [
'cflags', 'cxxflags', 'fflags', 'ldflags', 'ldlibs', 'cppflags']
@@ -712,10 +619,6 @@ class FlagMap(HashableMap):
def valid_compiler_flags():
return _valid_compiler_flags
- @property
- def concrete(self):
- return all(flag in self for flag in _valid_compiler_flags)
-
def copy(self):
clone = FlagMap(None)
for name, value in self.items():
@@ -723,11 +626,10 @@ class FlagMap(HashableMap):
return clone
def _cmp_key(self):
- return tuple((k, tuple(v)) for k, v in sorted(self.iteritems()))
+ return tuple((k, tuple(v)) for k, v in sorted(iteritems(self)))
def __str__(self):
- sorted_keys = filter(
- lambda flag: self[flag] != [], sorted(self.keys()))
+ sorted_keys = [k for k in sorted(self.keys()) if self[k] != []]
cond_symbol = ' ' if len(sorted_keys) > 0 else ''
return cond_symbol + ' '.join(
str(key) + '=\"' + ' '.join(
@@ -736,56 +638,421 @@ class FlagMap(HashableMap):
class DependencyMap(HashableMap):
-
"""Each spec has a DependencyMap containing specs for its dependencies.
The DependencyMap is keyed by name. """
- @property
- def concrete(self):
- return all((d.spec.concrete and d.deptypes)
- for d in self.values())
def __str__(self):
return "{deps: %s}" % ', '.join(str(d) for d in sorted(self.values()))
+def _command_default_handler(descriptor, spec, cls):
+ """Default handler when looking for the 'command' attribute.
+
+ Tries to search for ``spec.name`` in the ``spec.prefix.bin`` directory.
+
+ Parameters:
+ descriptor (ForwardQueryToPackage): descriptor that triggered the call
+ spec (Spec): spec that is being queried
+ cls (type(spec)): type of spec, to match the signature of the
+ descriptor ``__get__`` method
+
+ Returns:
+ Executable: An executable of the command
+
+ Raises:
+ RuntimeError: If the command is not found
+ """
+ path = os.path.join(spec.prefix.bin, spec.name)
+
+ if is_exe(path):
+ return Executable(path)
+ else:
+ msg = 'Unable to locate {0} command in {1}'
+ raise RuntimeError(msg.format(spec.name, spec.prefix.bin))
+
+
+def _headers_default_handler(descriptor, spec, cls):
+ """Default handler when looking for the 'headers' attribute.
+
+ Tries to search for ``*.h`` files recursively starting from
+ ``spec.prefix.include``.
+
+ Parameters:
+ descriptor (ForwardQueryToPackage): descriptor that triggered the call
+ spec (Spec): spec that is being queried
+ cls (type(spec)): type of spec, to match the signature of the
+ descriptor ``__get__`` method
+
+ Returns:
+ HeaderList: The headers in ``prefix.include``
+
+ Raises:
+ RuntimeError: If no headers are found
+ """
+ headers = find_headers('*', root=spec.prefix.include, recurse=True)
+
+ if headers:
+ return headers
+ else:
+ msg = 'Unable to locate {0} headers in {1}'
+ raise RuntimeError(msg.format(spec.name, spec.prefix.include))
+
+
+def _libs_default_handler(descriptor, spec, cls):
+ """Default handler when looking for the 'libs' attribute.
+
+ Tries to search for ``lib{spec.name}`` recursively starting from
+ ``spec.prefix``.
+
+ Parameters:
+ descriptor (ForwardQueryToPackage): descriptor that triggered the call
+ spec (Spec): spec that is being queried
+ cls (type(spec)): type of spec, to match the signature of the
+ descriptor ``__get__`` method
+
+ Returns:
+ LibraryList: The libraries found
+
+ Raises:
+ RuntimeError: If no libraries are found
+ """
+
+ # Variable 'name' is passed to function 'find_libraries', which supports
+ # glob characters. For example, we have a package with a name 'abc-abc'.
+ # Now, we don't know if the original name of the package is 'abc_abc'
+ # (and it generates a library 'libabc_abc.so') or 'abc-abc' (and it
+ # generates a library 'libabc-abc.so'). So, we tell the function
+ # 'find_libraries' to give us anything that matches 'libabc?abc' and it
+ # gives us either 'libabc-abc.so' or 'libabc_abc.so' (or an error)
+ # depending on which one exists (there is a possibility, of course, to
+ # get something like 'libabcXabc.so, but for now we consider this
+ # unlikely).
+ name = 'lib' + spec.name.replace('-', '?')
+
+ if '+shared' in spec:
+ libs = find_libraries(
+ name, root=spec.prefix, shared=True, recurse=True
+ )
+ elif '~shared' in spec:
+ libs = find_libraries(
+ name, root=spec.prefix, shared=False, recurse=True
+ )
+ else:
+ # Prefer shared
+ libs = find_libraries(
+ name, root=spec.prefix, shared=True, recurse=True
+ )
+ if libs:
+ return libs
+
+ libs = find_libraries(
+ name, root=spec.prefix, shared=False, recurse=True
+ )
+
+ if libs:
+ return libs
+ else:
+ msg = 'Unable to recursively locate {0} libraries in {1}'
+ raise RuntimeError(msg.format(spec.name, spec.prefix))
+
+
+class ForwardQueryToPackage(object):
+ """Descriptor used to forward queries from Spec to Package"""
+
+ def __init__(self, attribute_name, default_handler=None):
+ """Create a new descriptor.
+
+ Parameters:
+ attribute_name (str): name of the attribute to be
+ searched for in the Package instance
+ default_handler (callable, optional): default function to be
+ called if the attribute was not found in the Package
+ instance
+ """
+ self.attribute_name = attribute_name
+ # Turn the default handler into a function with the right
+ # signature that always returns None
+ if default_handler is None:
+ default_handler = lambda descriptor, spec, cls: None
+ self.default = default_handler
+
+ def __get__(self, instance, cls):
+ """Retrieves the property from Package using a well defined chain
+ of responsibility.
+
+ The order of call is:
+
+ 1. if the query was through the name of a virtual package try to
+ search for the attribute `{virtual_name}_{attribute_name}`
+ in Package
+
+ 2. try to search for attribute `{attribute_name}` in Package
+
+ 3. try to call the default handler
+
+ The first call that produces a value will stop the chain.
+
+ If no call can handle the request or a None value is produced,
+ then AttributeError is raised.
+ """
+ pkg = instance.package
+ try:
+ query = instance.last_query
+ except AttributeError:
+ # There has been no query yet: this means
+ # a spec is trying to access its own attributes
+ _ = instance[instance.name] # NOQA: ignore=F841
+ query = instance.last_query
+
+ callbacks_chain = []
+ # First in the chain : specialized attribute for virtual packages
+ if query.isvirtual:
+ specialized_name = '{0}_{1}'.format(
+ query.name, self.attribute_name
+ )
+ callbacks_chain.append(lambda: getattr(pkg, specialized_name))
+ # Try to get the generic method from Package
+ callbacks_chain.append(lambda: getattr(pkg, self.attribute_name))
+ # Final resort : default callback
+ callbacks_chain.append(lambda: self.default(self, instance, cls))
+
+ # Trigger the callbacks in order, the first one producing a
+ # value wins
+ value = None
+ for f in callbacks_chain:
+ try:
+ value = f()
+ break
+ except AttributeError:
+ pass
+ # 'None' value raises AttributeError : this permits to 'disable'
+ # the call in a particular package by returning None from the
+ # queried attribute, or will trigger an exception if things
+ # searched for were not found
+ if value is None:
+ fmt = '\'{name}\' package has no relevant attribute \'{query}\'\n' # NOQA: ignore=E501
+ fmt += '\tspec : \'{spec}\'\n'
+ fmt += '\tqueried as : \'{spec.last_query.name}\'\n'
+ fmt += '\textra parameters : \'{spec.last_query.extra_parameters}\'\n' # NOQA: ignore=E501
+ message = fmt.format(
+ name=pkg.name,
+ query=self.attribute_name,
+ spec=instance
+ )
+ raise AttributeError(message)
+
+ return value
+
+ def __set__(self, instance, value):
+ cls_name = type(instance).__name__
+ msg = "'{0}' object attribute '{1}' is read-only"
+ raise AttributeError(msg.format(cls_name, self.attribute_name))
+
+
+class SpecBuildInterface(ObjectWrapper):
+ command = ForwardQueryToPackage(
+ 'command',
+ default_handler=_command_default_handler
+ )
+
+ headers = ForwardQueryToPackage(
+ 'headers',
+ default_handler=_headers_default_handler
+ )
+
+ libs = ForwardQueryToPackage(
+ 'libs',
+ default_handler=_libs_default_handler
+ )
+
+ def __init__(self, spec, name, query_parameters):
+ super(SpecBuildInterface, self).__init__(spec)
+
+ # Represents a query state in a BuildInterface object
+ QueryState = collections.namedtuple(
+ 'QueryState', ['name', 'extra_parameters', 'isvirtual']
+ )
+
+ is_virtual = Spec.is_virtual(name)
+ self.last_query = QueryState(
+ name=name,
+ extra_parameters=query_parameters,
+ isvirtual=is_virtual
+ )
+
+
@key_ordering
class Spec(object):
- def __init__(self, spec_like, *dep_like, **kwargs):
+ @staticmethod
+ def from_literal(spec_dict, normal=True):
+ """Builds a Spec from a dictionary containing the spec literal.
+
+ The dictionary must have a single top level key, representing the root,
+ and as many secondary level keys as needed in the spec.
+
+ The keys can be either a string or a Spec or a tuple containing the
+ Spec and the dependency types.
+
+ Args:
+ spec_dict (dict): the dictionary containing the spec literal
+ normal (bool): if True the same key appearing at different levels
+ of the ``spec_dict`` will map to the same object in memory.
+
+ Examples:
+ A simple spec ``foo`` with no dependencies:
+
+ .. code-block:: python
+
+ {'foo': None}
+
+ A spec ``foo`` with a ``(build, link)`` dependency ``bar``:
+
+ .. code-block:: python
+
+ {'foo':
+ {'bar:build,link': None}}
+
+ A spec with a diamond dependency and various build types:
+
+ .. code-block:: python
+
+ {'dt-diamond': {
+ 'dt-diamond-left:build,link': {
+ 'dt-diamond-bottom:build': None
+ },
+ 'dt-diamond-right:build,link': {
+ 'dt-diamond-bottom:build,link,run': None
+ }
+ }}
+
+ The same spec with a double copy of ``dt-diamond-bottom`` and
+ no diamond structure:
+
+ .. code-block:: python
+
+ {'dt-diamond': {
+ 'dt-diamond-left:build,link': {
+ 'dt-diamond-bottom:build': None
+ },
+ 'dt-diamond-right:build,link': {
+ 'dt-diamond-bottom:build,link,run': None
+ }
+ }, normal=False}
+
+ Constructing a spec using a Spec object as key:
+
+ .. code-block:: python
+
+ mpich = Spec('mpich')
+ libelf = Spec('libelf@1.8.11')
+ expected_normalized = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {libelf: None},
+ libelf: None
+ },
+ mpich: None
+ },
+ mpich: None
+ },
+ })
+
+ """
+
+ # Maps a literal to a Spec, to be sure we are reusing the same object
+ spec_cache = LazySpecCache()
+
+ def spec_builder(d):
+ # The invariant is that the top level dictionary must have
+ # only one key
+ assert len(d) == 1
+
+ # Construct the top-level spec
+ spec_like, dep_like = next(iter(d.items()))
+
+ # If the requirements was for unique nodes (default)
+ # then re-use keys from the local cache. Otherwise build
+ # a new node every time.
+ if not isinstance(spec_like, Spec):
+ spec = spec_cache[spec_like] if normal else Spec(spec_like)
+ else:
+ spec = spec_like
+
+ if dep_like is None:
+ return spec
+
+ def name_and_dependency_types(s):
+ """Given a key in the dictionary containing the literal,
+ extracts the name of the spec and its dependency types.
+
+ Args:
+ s (str): key in the dictionary containing the literal
+
+ """
+ t = s.split(':')
+
+ if len(t) > 2:
+ msg = 'more than one ":" separator in key "{0}"'
+ raise KeyError(msg.format(s))
+
+ n = t[0]
+ if len(t) == 2:
+ dtypes = tuple(dt.strip() for dt in t[1].split(','))
+ else:
+ dtypes = ()
+
+ return n, dtypes
+
+ def spec_and_dependency_types(s):
+ """Given a non-string key in the literal, extracts the spec
+ and its dependency types.
+
+ Args:
+ s (spec or tuple): either a Spec object or a tuple
+ composed of a Spec object and a string with the
+ dependency types
+
+ """
+ if isinstance(s, Spec):
+ return s, ()
+
+ spec_obj, dtypes = s
+ return spec_obj, tuple(dt.strip() for dt in dtypes.split(','))
+
+ # Recurse on dependencies
+ for s, s_dependencies in dep_like.items():
+
+ if isinstance(s, string_types):
+ dag_node, dependency_types = name_and_dependency_types(s)
+ else:
+ dag_node, dependency_types = spec_and_dependency_types(s)
+
+ dependency_spec = spec_builder({dag_node: s_dependencies})
+ spec._add_dependency(dependency_spec, dependency_types)
+
+ return spec
+
+ return spec_builder(spec_dict)
+
+ def __init__(self, spec_like, **kwargs):
# Copy if spec_like is a Spec.
if isinstance(spec_like, Spec):
self._dup(spec_like)
return
# Parse if the spec_like is a string.
- if not isinstance(spec_like, basestring):
+ if not isinstance(spec_like, string_types):
raise TypeError("Can't make spec out of %s" % type(spec_like))
- spec_list = SpecParser().parse(spec_like)
+ # parse string types *into* this spec
+ spec_list = SpecParser(self).parse(spec_like)
if len(spec_list) > 1:
raise ValueError("More than one spec in string: " + spec_like)
if len(spec_list) < 1:
raise ValueError("String contains no specs: " + spec_like)
- # Take all the attributes from the first parsed spec without copying.
- # This is safe b/c we throw out the parsed spec. It's a bit nasty,
- # but it's nastier to implement the constructor so that the parser
- # writes directly into this Spec object.
- other = spec_list[0]
- self.name = other.name
- self.versions = other.versions
- self.architecture = other.architecture
- self.compiler = other.compiler
- self.compiler_flags = other.compiler_flags
- self.compiler_flags.spec = self
- self._dependencies = other._dependencies
- self._dependents = other._dependents
- self.variants = other.variants
- self.variants.spec = self
- self.namespace = other.namespace
- self._hash = other._hash
- self._cmp_key_cache = other._cmp_key_cache
-
# Specs are by default not assumed to be normal, but in some
# cases we've read them from a file want to assume normal.
# This allows us to manipulate specs that Spack doesn't have
@@ -794,35 +1061,12 @@ class Spec(object):
self._concrete = kwargs.get('concrete', False)
# Allow a spec to be constructed with an external path.
- self.external = kwargs.get('external', None)
+ self.external_path = kwargs.get('external_path', None)
self.external_module = kwargs.get('external_module', None)
- # This allows users to construct a spec DAG with literals.
- # Note that given two specs a and b, Spec(a) copies a, but
- # Spec(a, b) will copy a but just add b as a dep.
- deptypes = ()
- for dep in dep_like:
- if isinstance(dep, Spec):
- spec = dep
- elif isinstance(dep, (list, tuple)):
- # Literals can be deptypes -- if there are tuples in the
- # list, they will be used as deptypes for the following Spec.
- deptypes = tuple(dep)
- continue
- else:
- spec = Spec(dep)
-
- spec = dep if isinstance(dep, Spec) else Spec(dep)
- self._add_dependency(spec, deptypes)
- deptypes = ()
-
- def __getattr__(self, item):
- """Delegate to self.package if the attribute is not in the spec"""
- # This line is to avoid infinite recursion in case package is
- # not present among self attributes
- if item.endswith('libs'):
- return getattr(self.package, item)
- raise AttributeError(item)
+ @property
+ def external(self):
+ return bool(self.external_path) or bool(self.external_module)
def get_dependency(self, name):
dep = self._dependencies.get(name)
@@ -838,19 +1082,19 @@ class Spec(object):
if deptype and (not dep.deptypes or
any(d in deptype for d in dep.deptypes))]
- def dependencies(self, deptype=None):
+ def dependencies(self, deptype='all'):
return [d.spec
for d in self._find_deps(self._dependencies, deptype)]
- def dependents(self, deptype=None):
+ def dependents(self, deptype='all'):
return [d.parent
for d in self._find_deps(self._dependents, deptype)]
- def dependencies_dict(self, deptype=None):
+ def dependencies_dict(self, deptype='all'):
return dict((d.spec.name, d)
for d in self._find_deps(self._dependencies, deptype))
- def dependents_dict(self, deptype=None):
+ def dependents_dict(self, deptype='all'):
return dict((d.parent.name, d)
for d in self._find_deps(self._dependents, deptype))
@@ -861,17 +1105,6 @@ class Spec(object):
"""Called by the parser to add an allowable version."""
self.versions.add(version)
- def _add_variant(self, name, value):
- """Called by the parser to add a variant."""
- if name in self.variants:
- raise DuplicateVariantError(
- "Cannot specify variant '%s' twice" % name)
- if isinstance(value, basestring) and value.upper() == 'TRUE':
- value = True
- elif isinstance(value, basestring) and value.upper() == 'FALSE':
- value = False
- self.variants[name] = VariantSpec(name, value)
-
def _add_flag(self, name, value):
"""Called by the parser to add a known flag.
Known flags currently include "arch"
@@ -889,9 +1122,16 @@ class Spec(object):
self._set_architecture(target=value)
elif name in valid_flags:
assert(self.compiler_flags is not None)
- self.compiler_flags[name] = value.split()
+ self.compiler_flags[name] = spack.compiler.tokenize_flags(value)
else:
- self._add_variant(name, value)
+ # FIXME:
+ # All other flags represent variants. 'foo=true' and 'foo=false'
+ # map to '+foo' and '~foo' respectively. As such they need a
+ # BoolValuedVariant instance.
+ if str(value).upper() == 'TRUE' or str(value).upper() == 'FALSE':
+ self.variants[name] = BoolValuedVariant(name, value)
+ else:
+ self.variants[name] = AbstractVariant(name, value)
def _set_architecture(self, **kwargs):
"""Called by the parser to set the architecture."""
@@ -904,7 +1144,7 @@ class Spec(object):
new_vals = tuple(kwargs.get(arg, None) for arg in arch_attrs)
self.architecture = ArchSpec(*new_vals)
else:
- new_attrvals = [(a, v) for a, v in kwargs.iteritems()
+ new_attrvals = [(a, v) for a, v in iteritems(kwargs)
if a in arch_attrs]
for new_attr, new_value in new_attrvals:
if getattr(self.architecture, new_attr):
@@ -944,20 +1184,13 @@ class Spec(object):
@property
def root(self):
"""Follow dependent links and find the root of this spec's DAG.
- In spack specs, there should be a single root (the package being
- installed). This will throw an assertion error if that is not
- the case.
+
+ Spack specs have a single root (the package being installed).
"""
if not self._dependents:
return self
- # If the spec has multiple dependents, ensure that they all
- # lead to the same place. Spack shouldn't deal with any DAGs
- # with multiple roots, so something's wrong if we find one.
- depiter = iter(self._dependents.values())
- first_root = next(depiter).parent.root
- assert(all(first_root is d.parent.root for d in depiter))
- return first_root
+ return next(iter(self._dependents.values())).parent.root
@property
def package(self):
@@ -988,22 +1221,16 @@ class Spec(object):
@property
def concrete(self):
- """A spec is concrete if it can describe only ONE build of a package.
- If any of the name, version, architecture, compiler,
- variants, or depdenencies are ambiguous,then it is not concrete.
- """
- if self._concrete:
- return True
+ """A spec is concrete if it describes a single build of a package.
+
+ More formally, a spec is concrete if concretize() has been called
+ on it and it has been marked `_concrete`.
- self._concrete = bool(not self.virtual and
- self.namespace is not None and
- self.versions.concrete and
- self.variants.concrete and
- self.architecture and
- self.architecture.concrete and
- self.compiler and self.compiler.concrete and
- self.compiler_flags.concrete and
- self._dependencies.concrete)
+ Concrete specs either can be or have been built. All constraints
+ have been resolved, optional dependencies have been added or
+ removed, a compiler has been chosen, and all variants have
+ values.
+ """
return self._concrete
def traverse(self, **kwargs):
@@ -1021,8 +1248,8 @@ class Spec(object):
for dspec in self.traverse_edges(**kwargs):
yield get_spec(dspec)
- def traverse_edges(self, visited=None, d=0, deptype=None,
- deptype_query=None, dep_spec=None, **kwargs):
+ def traverse_edges(self, visited=None, d=0, deptype='all',
+ dep_spec=None, **kwargs):
"""Generic traversal of the DAG represented by this spec.
This will yield each node in the spec. Options:
@@ -1067,16 +1294,13 @@ class Spec(object):
# get initial values for kwargs
depth = kwargs.get('depth', False)
key_fun = kwargs.get('key', id)
- if isinstance(key_fun, basestring):
+ if isinstance(key_fun, string_types):
key_fun = attrgetter(key_fun)
yield_root = kwargs.get('root', True)
cover = kwargs.get('cover', 'nodes')
direction = kwargs.get('direction', 'children')
order = kwargs.get('order', 'pre')
-
deptype = canonical_deptype(deptype)
- if deptype_query is None:
- deptype_query = ('link', 'run')
# Make sure kwargs have legal values; raise ValueError if not.
def validate(name, val, allowed_values):
@@ -1112,28 +1336,26 @@ class Spec(object):
# Edge traversal yields but skips children of visited nodes
if not (key in visited and cover == 'edges'):
+ visited.add(key)
+
# This code determines direction and yields the children/parents
if direction == 'children':
- successors = self.dependencies_dict(deptype)
- succ = lambda s: s.spec
+ where = self._dependencies
+ succ = lambda dspec: dspec.spec
elif direction == 'parents':
- successors = self.dependents_dict(deptype)
- succ = lambda s: s.parent
+ where = self._dependents
+ succ = lambda dspec: dspec.parent
else:
raise ValueError('Invalid traversal direction: %s' % direction)
- visited.add(key)
- for name, dspec in sorted(successors.items()):
- child = successors[name]
- children = succ(child).traverse_edges(
- visited,
- d=(d + 1),
- deptype=deptype,
- deptype_query=deptype_query,
- dep_spec=dspec,
- **kwargs)
- for elt in children:
- yield elt
+ for name, dspec in sorted(where.items()):
+ dt = dspec.deptypes
+ if dt and not any(d in deptype for d in dt):
+ continue
+
+ for child in succ(dspec).traverse_edges(
+ visited, d + 1, deptype, dspec, **kwargs):
+ yield child
# Postorder traversal yields after successors
if yield_me and order == 'post':
@@ -1143,18 +1365,22 @@ class Spec(object):
def short_spec(self):
"""Returns a version of the spec with the dependencies hashed
instead of completely enumerated."""
- return self.format('$_$@$%@$+$=$#')
+ return self.format('$_$@$%@$+$=$/')
@property
def cshort_spec(self):
- """Returns a version of the spec with the dependencies hashed
- instead of completely enumerated."""
- return self.format('$_$@$%@$+$=$#', color=True)
+ """Returns an auto-colorized version of ``self.short_spec``."""
+ return self.cformat('$_$@$%@$+$=$/')
@property
def prefix(self):
+ if hasattr(self, 'test_prefix'):
+ return Prefix(self.test_prefix)
return Prefix(spack.store.layout.path_for_spec(self))
+ def _set_test_prefix(self, val):
+ self.test_prefix = val
+
def dag_hash(self, length=None):
"""Return a hash of the entire spec DAG, including connectivity."""
if self._hash:
@@ -1162,8 +1388,12 @@ class Spec(object):
else:
yaml_text = syaml.dump(
self.to_node_dict(), default_flow_style=True, width=maxint)
- sha = hashlib.sha1(yaml_text)
+ sha = hashlib.sha1(yaml_text.encode('utf-8'))
+
b32_hash = base64.b32encode(sha.digest()).lower()
+ if sys.version_info[0] >= 3:
+ b32_hash = b32_hash.decode('utf-8')
+
if self.concrete:
self._hash = b32_hash
return b32_hash[:length]
@@ -1187,12 +1417,21 @@ class Spec(object):
if self.namespace:
d['namespace'] = self.namespace
- params = syaml_dict(sorted(
- (name, v.value) for name, v in self.variants.items()))
+ params = syaml_dict(
+ sorted(
+ v.yaml_entry() for _, v in self.variants.items()
+ )
+ )
params.update(sorted(self.compiler_flags.items()))
if params:
d['parameters'] = params
+ if self.external:
+ d['external'] = {
+ 'path': self.external_path,
+ 'module': bool(self.external_module)
+ }
+
# TODO: restore build dependencies here once we have less picky
# TODO: concretization.
deps = self.dependencies_dict(deptype=('link', 'run'))
@@ -1248,14 +1487,32 @@ class Spec(object):
if name in _valid_compiler_flags:
spec.compiler_flags[name] = value
else:
- spec.variants[name] = VariantSpec(name, value)
-
+ spec.variants[name] = MultiValuedVariant.from_node_dict(
+ name, value)
elif 'variants' in node:
for name, value in node['variants'].items():
- spec.variants[name] = VariantSpec(name, value)
+ spec.variants[name] = MultiValuedVariant.from_node_dict(
+ name, value
+ )
for name in FlagMap.valid_compiler_flags():
spec.compiler_flags[name] = []
+ if 'external' in node:
+ spec.external_path = None
+ spec.external_module = None
+ # This conditional is needed because sometimes this function is
+ # called with a node already constructed that contains a 'versions'
+ # and 'external' field. Related to virtual packages provider
+ # indexes.
+ if node['external']:
+ spec.external_path = node['external']['path']
+ spec.external_module = node['external']['module']
+ if spec.external_module is False:
+ spec.external_module = None
+ else:
+ spec.external_path = None
+ spec.external_module = None
+
# Don't read dependencies here; from_node_dict() is used by
# from_yaml() to read the root *and* each dependency spec.
@@ -1269,7 +1526,7 @@ class Spec(object):
formats so that reindex will work on old specs/databases.
"""
for dep_name, elt in dependency_dict.items():
- if isinstance(elt, basestring):
+ if isinstance(elt, string_types):
# original format, elt is just the dependency hash.
dag_hash, deptypes = elt, ['build', 'link']
elif isinstance(elt, tuple):
@@ -1355,6 +1612,10 @@ class Spec(object):
if self.name in visited:
return False
+ if self.concrete:
+ visited.add(self.name)
+ return False
+
changed = False
# Concretize deps first -- this is a bottom-up process.
@@ -1388,8 +1649,9 @@ class Spec(object):
dependent = dep_spec.parent
deptypes = dep_spec.deptypes
- # remove self from all dependents.
- del dependent._dependencies[self.name]
+ # remove self from all dependents, unless it is already removed
+ if self.name in dependent._dependencies:
+ del dependent._dependencies[self.name]
# add the replacement, unless it is already a dep of dependent.
if concrete.name not in dependent._dependencies:
@@ -1413,16 +1675,16 @@ class Spec(object):
a problem.
"""
# Make an index of stuff this spec already provides
- # XXX(deptype): 'link' and 'run'?
self_index = ProviderIndex(self.traverse(), restrict=True)
changed = False
done = False
while not done:
done = True
- # XXX(deptype): 'link' and 'run'?
for spec in list(self.traverse()):
replacement = None
+ if spec.external:
+ continue
if spec.virtual:
replacement = self._find_provider(spec, self_index)
if replacement:
@@ -1446,7 +1708,7 @@ class Spec(object):
# Replace spec with the candidate and normalize
copy = self.copy()
- copy[spec.name]._dup(replacement.copy(deps=False))
+ copy[spec.name]._dup(replacement, deps=False)
try:
# If there are duplicate providers or duplicate
@@ -1459,7 +1721,7 @@ class Spec(object):
continue
# If replacement is external then trim the dependencies
- if replacement.external or replacement.external_module:
+ if replacement.external:
if (spec._dependencies):
changed = True
spec._dependencies = DependencyMap()
@@ -1477,7 +1739,8 @@ class Spec(object):
feq(replacement.architecture, spec.architecture) and
feq(replacement._dependencies, spec._dependencies) and
feq(replacement.variants, spec.variants) and
- feq(replacement.external, spec.external) and
+ feq(replacement.external_path,
+ spec.external_path) and
feq(replacement.external_module,
spec.external_module)):
continue
@@ -1490,6 +1753,7 @@ class Spec(object):
if spec._dup(replacement, deps=False, cleardeps=False):
changed = True
+ spec._dependencies.owner = spec
self_index.update(spec)
done = False
break
@@ -1498,15 +1762,24 @@ class Spec(object):
def concretize(self):
"""A spec is concrete if it describes one build of a package uniquely.
- This will ensure that this spec is concrete.
+ This will ensure that this spec is concrete.
+
+ If this spec could describe more than one version, variant, or build
+ of a package, this will add constraints to make it concrete.
+
+ Some rigorous validation and checks are also performed on the spec.
+ Concretizing ensures that it is self-consistent and that it's
+ consistent with requirements of its pacakges. See flatten() and
+ normalize() for more details on this.
+
+ It also ensures that:
+
+ .. code-block:: python
- If this spec could describe more than one version, variant, or build
- of a package, this will add constraints to make it concrete.
+ for x in self.traverse():
+ assert x.package.spec == x
- Some rigorous validation and checks are also performed on the spec.
- Concretizing ensures that it is self-consistent and that it's
- consistent with requirements of its pacakges. See flatten() and
- normalize() for more details on this.
+ which may not be true *during* the concretization step.
"""
if not self.name:
raise SpecError("Attempting to concretize anonymous spec")
@@ -1524,7 +1797,7 @@ class Spec(object):
changed = any(changes)
force = True
- for s in self.traverse(deptype_query=alldeps):
+ for s in self.traverse():
# After concretizing, assign namespaces to anything left.
# Note that this doesn't count as a "change". The repository
# configuration is constant throughout a spack run, and
@@ -1536,25 +1809,87 @@ class Spec(object):
if s.namespace is None:
s.namespace = spack.repo.repo_for_pkg(s.name).namespace
- for s in self.traverse(root=False):
+ if s.concrete:
+ continue
+
+ # Add any patches from the package to the spec.
+ patches = []
+ for cond, patch_list in s.package_class.patches.items():
+ if s.satisfies(cond):
+ for patch in patch_list:
+ patches.append(patch.sha256)
+ if patches:
+ mvar = s.variants.setdefault(
+ 'patches', MultiValuedVariant('patches', ())
+ )
+ mvar.value = patches
+ # FIXME: Monkey patches mvar to store patches order
+ mvar._patches_in_order_of_appearance = patches
+
+ # Apply patches required on dependencies by depends_on(..., patch=...)
+ for dspec in self.traverse_edges(deptype=all,
+ cover='edges', root=False):
+ pkg_deps = dspec.parent.package_class.dependencies
+ if dspec.spec.name not in pkg_deps:
+ continue
+
+ if dspec.spec.concrete:
+ continue
+
+ patches = []
+ for cond, dependency in pkg_deps[dspec.spec.name].items():
+ if dspec.parent.satisfies(cond):
+ for pcond, patch_list in dependency.patches.items():
+ if dspec.spec.satisfies(pcond):
+ for patch in patch_list:
+ patches.append(patch.sha256)
+ if patches:
+ mvar = dspec.spec.variants.setdefault(
+ 'patches', MultiValuedVariant('patches', ())
+ )
+ mvar.value = mvar.value + tuple(patches)
+ # FIXME: Monkey patches mvar to store patches order
+ p = getattr(mvar, '_patches_in_order_of_appearance', [])
+ mvar._patches_in_order_of_appearance = dedupe(p + patches)
+
+ for s in self.traverse():
if s.external_module:
compiler = spack.compilers.compiler_for_spec(
s.compiler, s.architecture)
for mod in compiler.modules:
load_module(mod)
- s.external = get_path_from_module(s.external_module)
+ s.external_path = get_path_from_module(s.external_module)
# Mark everything in the spec as concrete, as well.
self._mark_concrete()
+ # Now that the spec is concrete we should check if
+ # there are declared conflicts
+ matches = []
+ for x in self.traverse():
+ for conflict_spec, when_list in x.package.conflicts.items():
+ if x.satisfies(conflict_spec):
+ for when_spec, msg in when_list:
+ if x.satisfies(when_spec):
+ matches.append((x, conflict_spec, when_spec, msg))
+ if matches:
+ raise ConflictsInSpecError(self, matches)
+
+ # At this point the spec-package mutual references should
+ # be self-consistent
+ for x in self.traverse():
+ x.package.spec = x
+
def _mark_concrete(self, value=True):
"""Mark this spec and its dependencies as concrete.
Only for internal use -- client code should use "concretize"
unless there is a need to force a spec to be concrete.
"""
- for s in self.traverse(deptype_query=alldeps):
+ for s in self.traverse():
+ if (not value) and s.concrete and s.package.installed:
+ continue
s._normal = value
s._concrete = value
@@ -1577,11 +1912,10 @@ class Spec(object):
returns them.
"""
copy = kwargs.get('copy', True)
- deptype_query = kwargs.get('deptype_query')
flat_deps = {}
try:
- deptree = self.traverse(root=False, deptype_query=deptype_query)
+ deptree = self.traverse(root=False)
for spec in deptree:
if spec.name not in flat_deps:
@@ -1606,7 +1940,7 @@ class Spec(object):
# parser doesn't allow it. Spack must be broken!
raise InconsistentSpecError("Invalid Spec DAG: %s" % e.message)
- def index(self, deptype=None):
+ def index(self, deptype='all'):
"""Return DependencyMap that points to all the dependencies in this
spec."""
dm = DependencyMap()
@@ -1617,26 +1951,36 @@ class Spec(object):
def _evaluate_dependency_conditions(self, name):
"""Evaluate all the conditions on a dependency with this name.
- If the package depends on <name> in this configuration, return
- the dependency. If no conditions are True (and we don't
- depend on it), return None.
+ Args:
+ name (str): name of dependency to evaluate conditions on.
+
+ Returns:
+ (Dependency): new Dependency object combining all constraints.
+
+ If the package depends on <name> in the current spec
+ configuration, return the constrained dependency and
+ corresponding dependency types.
+
+ If no conditions are True (and we don't depend on it), return
+ ``(None, None)``.
"""
pkg = spack.repo.get(self.fullname)
conditions = pkg.dependencies[name]
+ substitute_abstract_variants(self)
# evaluate when specs to figure out constraints on the dependency.
dep = None
- for when_spec, dep_spec in conditions.items():
- sat = self.satisfies(when_spec, strict=True)
- if sat:
+ for when_spec, dependency in conditions.items():
+ if self.satisfies(when_spec, strict=True):
if dep is None:
- dep = Spec(name)
+ dep = Dependency(self.name, Spec(name), type=())
try:
- dep.constrain(dep_spec)
+ dep.merge(dependency)
except UnsatisfiableSpecError as e:
e.message = ("Conflicting conditional dependencies on"
"package %s for spec %s" % (self.name, self))
raise e
+
return dep
def _find_provider(self, vdep, provider_index):
@@ -1645,6 +1989,8 @@ class Spec(object):
dependency already in this spec.
"""
assert(vdep.virtual)
+
+ # note that this defensively copies.
providers = provider_index.providers_for(vdep)
# If there is a provider for the vpkg, then use that instead of
@@ -1670,11 +2016,26 @@ class Spec(object):
elif required:
raise UnsatisfiableProviderSpecError(required[0], vdep)
- def _merge_dependency(self, dep, deptypes, visited, spec_deps,
- provider_index):
- """Merge the dependency into this spec.
+ def _merge_dependency(
+ self, dependency, visited, spec_deps, provider_index):
+ """Merge dependency information from a Package into this Spec.
+
+ Args:
+ dependency (Dependency): dependency metadata from a package;
+ this is typically the result of merging *all* matching
+ dependency constraints from the package.
+ visited (set): set of dependency nodes already visited by
+ ``normalize()``.
+ spec_deps (dict): ``dict`` of all dependencies from the spec
+ being normalized.
+ provider_index (dict): ``provider_index`` of virtual dep
+ providers in the ``Spec`` as normalized so far.
- This is the core of normalize(). There are some basic steps:
+ NOTE: Caller should assume that this routine owns the
+ ``dependency`` parameter, i.e., it needs to be a copy of any
+ internal structures.
+
+ This is the core of ``normalize()``. There are some basic steps:
* If dep is virtual, evaluate whether it corresponds to an
existing concrete dependency, and merge if so.
@@ -1686,8 +2047,10 @@ class Spec(object):
constraints into this spec.
This method returns True if the spec was changed, False otherwise.
+
"""
changed = False
+ dep = dependency.spec
# If it's a virtual dependency, try to find an existing
# provider in the spec, and merge that.
@@ -1698,7 +2061,11 @@ class Spec(object):
dep = provider
else:
index = ProviderIndex([dep], restrict=True)
- for vspec in (v for v in spec_deps.values() if v.virtual):
+ items = list(spec_deps.items())
+ for name, vspec in items:
+ if not vspec.virtual:
+ continue
+
if index.providers_for(vspec):
vspec._replace_with(dep)
del spec_deps[vspec.name]
@@ -1709,36 +2076,43 @@ class Spec(object):
raise UnsatisfiableProviderSpecError(required[0], dep)
provider_index.update(dep)
- # If the spec isn't already in the set of dependencies, clone
- # it from the package description.
+ # If the spec isn't already in the set of dependencies, add it.
+ # Note: dep is always owned by this method. If it's from the
+ # caller, it's a copy from _evaluate_dependency_conditions. If it
+ # comes from a vdep, it's a defensive copy from _find_provider.
if dep.name not in spec_deps:
- spec_deps[dep.name] = dep.copy()
+ if self.concrete:
+ return False
+
+ spec_deps[dep.name] = dep
changed = True
else:
- dspec = spec_deps[dep.name]
- if self.name not in dspec._dependents:
- self._add_dependency(dspec, deptypes)
- else:
- dependent = dspec._dependents[self.name]
- changed = dependent.update_deptypes(deptypes)
-
- # Constrain package information with spec info
- try:
- changed |= spec_deps[dep.name].constrain(dep)
-
- except UnsatisfiableSpecError as e:
- e.message = "Invalid spec: '%s'. "
- e.message += "Package %s requires %s %s, but spec asked for %s"
- e.message %= (spec_deps[dep.name], dep.name,
- e.constraint_type, e.required, e.provided)
- raise e
+ # merge package/vdep information into spec
+ try:
+ changed |= spec_deps[dep.name].constrain(dep)
+ except UnsatisfiableSpecError as e:
+ fmt = 'An unsatisfiable {0}'.format(e.constraint_type)
+ fmt += ' constraint has been detected for spec:'
+ fmt += '\n\n{0}\n\n'.format(spec_deps[dep.name].tree(indent=4))
+ fmt += 'while trying to concretize the partial spec:'
+ fmt += '\n\n{0}\n\n'.format(self.tree(indent=4))
+ fmt += '{0} requires {1} {2} {3}, but spec asked for {4}'
+
+ e.message = fmt.format(
+ self.name,
+ dep.name,
+ e.constraint_type,
+ e.required,
+ e.provided)
+
+ raise
# Add merged spec to my deps and recurse
- dependency = spec_deps[dep.name]
+ spec_dependency = spec_deps[dep.name]
if dep.name not in self._dependencies:
- self._add_dependency(dependency, deptypes)
+ self._add_dependency(spec_dependency, dependency.type)
- changed |= dependency._normalize_helper(
+ changed |= spec_dependency._normalize_helper(
visited, spec_deps, provider_index)
return changed
@@ -1750,7 +2124,7 @@ class Spec(object):
# if we descend into a virtual spec, there's nothing more
# to normalize. Concretize will finish resolving it later.
- if self.virtual or self.external or self.external_module:
+ if self.virtual or self.external:
return False
# Combine constraints from package deps with constraints from
@@ -1763,12 +2137,12 @@ class Spec(object):
changed = False
for dep_name in pkg.dependencies:
# Do we depend on dep_name? If so pkg_dep is not None.
- pkg_dep = self._evaluate_dependency_conditions(dep_name)
- deptypes = pkg.dependency_types[dep_name]
- # If pkg_dep is a dependency, merge it.
- if pkg_dep:
+ dep = self._evaluate_dependency_conditions(dep_name)
+ # If dep is a needed dependency, merge it.
+ if dep and (spack.package_testing.check(self.name) or
+ set(dep.type) - set(['test'])):
changed |= self._merge_dependency(
- pkg_dep, deptypes, visited, spec_deps, provider_index)
+ dep, visited, spec_deps, provider_index)
any_change |= changed
return any_change
@@ -1793,17 +2167,17 @@ class Spec(object):
if not self.name:
raise SpecError("Attempting to normalize anonymous spec")
- if self._normal and not force:
- return False
-
- # avoid any assumptions about concreteness when forced
+ # Set _normal and _concrete to False when forced
if force:
self._mark_concrete(False)
+ if self._normal:
+ return False
+
# Ensure first that all packages & compilers in the DAG exist.
- self.validate_names()
+ self.validate_or_raise()
# Get all the dependencies into one DependencyMap
- spec_deps = self.flat_dependencies(copy=False, deptype_query=alldeps)
+ spec_deps = self.flat_dependencies(copy=False)
# Initialize index of virtual dependency providers if
# concretize didn't pass us one already
@@ -1835,11 +2209,13 @@ class Spec(object):
clone.normalize()
return clone
- def validate_names(self):
- """This checks that names of packages and compilers in this spec are real.
- If they're not, it will raise either UnknownPackageError or
- UnsupportedCompilerError.
+ def validate_or_raise(self):
+ """Checks that names and values in this spec are real. If they're not,
+ it will raise an appropriate exception.
"""
+ # FIXME: this function should be lazy, and collect all the errors
+ # FIXME: before raising the exceptions, instead of being greedy and
+ # FIXME: raise just the first one encountered
for spec in self.traverse():
# raise an UnknownPackageError if the spec's package isn't real.
if (not spec.virtual) and spec.name:
@@ -1850,16 +2226,35 @@ class Spec(object):
if not compilers.supported(spec.compiler):
raise UnsupportedCompilerError(spec.compiler.name)
- # Ensure that variants all exist.
- for vname, variant in spec.variants.items():
- if vname not in spec.package_class.variants:
- raise UnknownVariantError(spec.name, vname)
+ # Ensure correctness of variants (if the spec is not virtual)
+ if not spec.virtual:
+ pkg_cls = spec.package_class
+ pkg_variants = pkg_cls.variants
+ # reserved names are variants that may be set on any package
+ # but are not necessarily recorded by the package's class
+ not_existing = set(spec.variants) - (
+ set(pkg_variants) | set(spack.directives.reserved_names))
+ if not_existing:
+ raise UnknownVariantError(spec.name, not_existing)
+
+ substitute_abstract_variants(spec)
def constrain(self, other, deps=True):
"""Merge the constraints of other with self.
Returns True if the spec changed as a result, False if not.
"""
+ # If we are trying to constrain a concrete spec, either the spec
+ # already satisfies the constraint (and the method returns False)
+ # or it raises an exception
+ if self.concrete:
+ if self.satisfies(other):
+ return False
+ else:
+ raise UnsatisfiableSpecError(
+ self, other, 'constrain a concrete spec'
+ )
+
other = self._autospec(other)
if not (self.name == other.name or
@@ -1875,11 +2270,11 @@ class Spec(object):
if not self.versions.overlaps(other.versions):
raise UnsatisfiableVersionSpecError(self.versions, other.versions)
- for v in other.variants:
- if (v in self.variants and
- self.variants[v].value != other.variants[v].value):
- raise UnsatisfiableVariantSpecError(self.variants[v],
- other.variants[v])
+ for v in [x for x in other.variants if x in self.variants]:
+ if not self.variants[v].compatible(other.variants[v]):
+ raise UnsatisfiableVariantSpecError(
+ self.variants[v], other.variants[v]
+ )
# TODO: Check out the logic here
sarch, oarch = self.architecture, other.architecture
@@ -1941,6 +2336,9 @@ class Spec(object):
changed = False
for name in self.common_dependencies(other):
changed |= self[name].constrain(other[name], deps=False)
+ if name in self._dependencies:
+ changed |= self._dependencies[name].update_deptypes(
+ other._dependencies[name].deptypes)
# Update with additional constraints from other spec
for name in other.dep_difference(self):
@@ -1954,7 +2352,6 @@ class Spec(object):
def common_dependencies(self, other):
"""Return names of dependencies that self an other have in common."""
- # XXX(deptype): handle deptypes via deptype kwarg.
common = set(
s.name for s in self.traverse(root=False))
common.intersection_update(
@@ -1992,7 +2389,7 @@ class Spec(object):
except SpecError:
return parse_anonymous_spec(spec_like, self.name)
- def satisfies(self, other, deps=True, strict=False):
+ def satisfies(self, other, deps=True, strict=False, strict_deps=False):
"""Determine if this spec satisfies all constraints of another.
There are two senses for satisfies:
@@ -2008,12 +2405,18 @@ class Spec(object):
other = self._autospec(other)
# The only way to satisfy a concrete spec is to match its hash exactly.
- if other._concrete:
- return self._concrete and self.dag_hash() == other.dag_hash()
+ if other.concrete:
+ return self.concrete and self.dag_hash() == other.dag_hash()
# A concrete provider can satisfy a virtual dependency.
if not self.virtual and other.virtual:
- pkg = spack.repo.get(self.fullname)
+ try:
+ pkg = spack.repo.get(self.fullname)
+ except spack.repository.UnknownEntityError:
+ # If we can't get package info on this spec, don't treat
+ # it as a provider of this vdep.
+ return False
+
if pkg.provides(other.name):
for provided, when_specs in pkg.provided.items():
if any(self.satisfies(when_spec, deps=False, strict=strict)
@@ -2066,7 +2469,8 @@ class Spec(object):
# If we need to descend into dependencies, do it, otherwise we're done.
if deps:
deps_strict = strict
- if not (self.name and other.name):
+ if self._concrete and not other.name:
+ # We're dealing with existing specs
deps_strict = True
return self.satisfies_dependencies(other, strict=deps_strict)
else:
@@ -2078,18 +2482,24 @@ class Spec(object):
"""
other = self._autospec(other)
+ # If there are no constraints to satisfy, we're done.
+ if not other._dependencies:
+ return True
+
if strict:
- if other._dependencies and not self._dependencies:
+ # if we have no dependencies, we can't satisfy any constraints.
+ if not self._dependencies:
return False
- alldeps = set(d.name for d in self.traverse(root=False))
- if not all(dep.name in alldeps
- for dep in other.traverse(root=False)):
+ selfdeps = self.traverse(root=False)
+ otherdeps = other.traverse(root=False)
+ if not all(any(d.satisfies(dep) for d in selfdeps)
+ for dep in otherdeps):
return False
- elif not self._dependencies or not other._dependencies:
- # if either spec doesn't restrict dependencies then both are
- # compatible.
+ elif not self._dependencies:
+ # if not strict, this spec *could* eventually satisfy the
+ # constraints on other.
return True
# Handle first-order constraints directly
@@ -2123,17 +2533,64 @@ class Spec(object):
"""Return list of any virtual deps in this spec."""
return [spec for spec in self.traverse() if spec.virtual]
- def _dup(self, other, deps=True, cleardeps=True):
- """Copy the spec other into self. This is an overwriting
- copy. It does not copy any dependents (parents), but by default
- copies dependencies.
+ @property
+ def patches(self):
+ """Return patch objects for any patch sha256 sums on this Spec.
+
+ This is for use after concretization to iterate over any patches
+ associated with this spec.
+
+ TODO: this only checks in the package; it doesn't resurrect old
+ patches from install directories, but it probably should.
+ """
+ if 'patches' not in self.variants:
+ return []
+
+ patches = []
+
+ # FIXME: The private attribute below is attached after
+ # FIXME: concretization to store the order of patches somewhere.
+ # FIXME: Needs to be refactored in a cleaner way.
+ for sha256 in self.variants['patches']._patches_in_order_of_appearance:
+ patch = self.package.lookup_patch(sha256)
+ if patch:
+ patches.append(patch)
+ continue
+
+ # if not found in this package, check immediate dependents
+ # for dependency patches
+ for dep_spec in self._dependents.values():
+ patch = dep_spec.parent.package.lookup_patch(sha256)
- To duplicate an entire DAG, call _dup() on the root of the DAG.
+ if patch:
+ patches.append(patch)
+
+ return patches
+
+ def _dup(self, other, deps=True, cleardeps=True, caches=None):
+ """Copy the spec other into self. This is an overwriting
+ copy. It does not copy any dependents (parents), but by default
+ copies dependencies.
+
+ To duplicate an entire DAG, call _dup() on the root of the DAG.
+
+ Args:
+ other (Spec): spec to be copied onto ``self``
+ deps (bool or Sequence): if True copies all the dependencies. If
+ False copies None. If a sequence of dependency types copy
+ only those types.
+ cleardeps (bool): if True clears the dependencies of ``self``,
+ before possibly copying the dependencies of ``other`` onto
+ ``self``
+ caches (bool or None): preserve cached fields such as
+ ``_normal``, ``_concrete``, and ``_cmp_key_cache``. By
+ default this is ``False`` if DAG structure would be
+ changed by the copy, ``True`` if it's an exact copy.
+
+ Returns:
+ True if ``self`` changed because of the copy operation,
+ False otherwise.
- Options:
- dependencies[=True]
- Whether deps should be copied too. Set to False to copy a
- spec but not its dependencies.
"""
# We don't count dependencies as changes here
changed = True
@@ -2145,7 +2602,7 @@ class Spec(object):
self.variants != other.variants and
self._normal != other._normal and
self.concrete != other.concrete and
- self.external != other.external and
+ self.external_path != other.external_path and
self.external_module != other.external_module and
self.compiler_flags != other.compiler_flags)
@@ -2159,29 +2616,29 @@ class Spec(object):
self._dependents = DependencyMap()
self._dependencies = DependencyMap()
self.compiler_flags = other.compiler_flags.copy()
+ self.compiler_flags.spec = self
self.variants = other.variants.copy()
self.variants.spec = self
- self.external = other.external
+ self.external_path = other.external_path
self.external_module = other.external_module
self.namespace = other.namespace
- self.external = other.external
- self.external_module = other.external_module
+ # Cached fields are results of expensive operations.
+ # If we preserved the original structure, we can copy them
+ # safely. If not, they need to be recomputed.
+ if caches is None:
+ caches = (deps is True or deps == all_deptypes)
# If we copy dependencies, preserve DAG structure in the new spec
if deps:
- deptypes = alldeps # by default copy all deptypes
-
- # if caller restricted deptypes to be copied, adjust that here.
+ # If caller restricted deptypes to be copied, adjust that here.
+ # By default, just copy all deptypes
+ deptypes = all_deptypes
if isinstance(deps, (tuple, list)):
deptypes = deps
+ self._dup_deps(other, deptypes, caches)
- self._dup_deps(other, deptypes)
-
- # These fields are all cached results of expensive operations.
- # If we preserved the original structure, we can copy them
- # safely. If not, they need to be recomputed.
- if deps is True or deps == alldeps:
+ if caches:
self._hash = other._hash
self._cmp_key_cache = other._cmp_key_cache
self._normal = other._normal
@@ -2194,37 +2651,54 @@ class Spec(object):
return changed
- def _dup_deps(self, other, deptypes):
+ def _dup_deps(self, other, deptypes, caches):
new_specs = {self.name: self}
- for dspec in other.traverse_edges(cover='edges', root=False):
+ for dspec in other.traverse_edges(cover='edges',
+ root=False):
if (dspec.deptypes and
not any(d in deptypes for d in dspec.deptypes)):
continue
if dspec.parent.name not in new_specs:
- new_specs[dspec.parent.name] = dspec.parent.copy(deps=False)
+ new_specs[dspec.parent.name] = dspec.parent.copy(
+ deps=False, caches=caches)
if dspec.spec.name not in new_specs:
- new_specs[dspec.spec.name] = dspec.spec.copy(deps=False)
+ new_specs[dspec.spec.name] = dspec.spec.copy(
+ deps=False, caches=caches)
new_specs[dspec.parent.name]._add_dependency(
new_specs[dspec.spec.name], dspec.deptypes)
- def copy(self, deps=True):
- """Return a copy of this spec.
+ def copy(self, deps=True, **kwargs):
+ """Make a copy of this spec.
+
+ Args:
+ deps (bool or tuple): Defaults to True. If boolean, controls
+ whether dependencies are copied (copied if True). If a
+ tuple is provided, *only* dependencies of types matching
+ those in the tuple are copied.
+ kwargs: additional arguments for internal use (passed to ``_dup``).
+
+ Returns:
+ A copy of this spec.
+
+ Examples:
+ Deep copy with dependnecies::
+
+ spec.copy()
+ spec.copy(deps=True)
- By default, returns a deep copy. To control how dependencies are
- copied, supply:
+ Shallow copy (no dependencies)::
- deps=True: deep copy
+ spec.copy(deps=False)
- deps=False: shallow copy (no dependencies)
+ Only build and run dependencies::
- deps=('link', 'build'):
- only build and link dependencies. Similar for other deptypes.
+ deps=('build', 'run'):
"""
clone = Spec.__new__(Spec)
- clone._dup(self, deps=deps)
+ clone._dup(self, deps=deps, **kwargs)
return clone
@property
@@ -2234,22 +2708,43 @@ class Spec(object):
return self.versions[0]
def __getitem__(self, name):
- """Get a dependency from the spec by its name."""
- for spec in self.traverse():
- if spec.name == name:
- return spec
+ """Get a dependency from the spec by its name. This call implicitly
+ sets a query state in the package being retrieved. The behavior of
+ packages may be influenced by additional query parameters that are
+ passed after a colon symbol.
- if Spec.is_virtual(name):
- # TODO: this is a kind of kludgy way to find providers
- # TODO: should we just keep virtual deps in the DAG instead of
- # TODO: removing them on concretize?
- for spec in self.traverse():
- if spec.virtual:
- continue
- if spec.package.provides(name):
- return spec
+ Note that if a virtual package is queried a copy of the Spec is
+ returned while for non-virtual a reference is returned.
+ """
+ query_parameters = name.split(':')
+ if len(query_parameters) > 2:
+ msg = 'key has more than one \':\' symbol.'
+ msg += ' At most one is admitted.'
+ raise KeyError(msg)
+
+ name, query_parameters = query_parameters[0], query_parameters[1:]
+ if query_parameters:
+ # We have extra query parameters, which are comma separated
+ # values
+ csv = query_parameters.pop().strip()
+ query_parameters = re.split(r'\s*,\s*', csv)
- raise KeyError("No spec with name %s in %s" % (name, self))
+ try:
+ value = next(
+ itertools.chain(
+ # Regular specs
+ (x for x in self.traverse() if x.name == name),
+ (x for x in self.traverse()
+ if (not x.virtual) and x.package.provides(name))
+ )
+ )
+ except StopIteration:
+ raise KeyError("No spec with name %s in %s" % (name, self))
+
+ if self._concrete:
+ return SpecBuildInterface(value, name, query_parameters)
+
+ return value
def __contains__(self, spec):
"""True if this spec satisfies the provided spec, or if any dependency
@@ -2355,9 +2850,10 @@ class Spec(object):
return colorize_spec(self)
def format(self, format_string='$_$@$%@+$+$=', **kwargs):
- """
- Prints out particular pieces of a spec, depending on what is
- in the format string. The format strings you can provide are::
+ """Prints out particular pieces of a spec, depending on what is
+ in the format string.
+
+ The format strings you can provide are::
$_ Package name
$. Full package name (with namespace)
@@ -2369,7 +2865,7 @@ class Spec(object):
prefixes as above
$+ Options
$= Architecture prefixed by 'arch='
- $# 7-char prefix of DAG hash with '-' prefix
+ $/ 7-char prefix of DAG hash with '-' prefix
$$ $
You can also use full-string versions, which elide the prefixes::
@@ -2399,24 +2895,44 @@ class Spec(object):
Anything else is copied verbatim into the output stream.
- *Example:* ``$_$@$+`` translates to the name, version, and options
- of the package, but no dependencies, arch, or compiler.
+ Args:
+ format_string (str): string containing the format to be expanded
+
+ **kwargs (dict): the following list of keywords is supported
+
+ - color (bool): True if returned string is colored
+
+ - transform (dict): maps full-string formats to a callable \
+ that accepts a string and returns another one
+
+ Examples:
+
+ The following line:
+
+ .. code-block:: python
+
+ s = spec.format('$_$@$+')
+
+ translates to the name, version, and options of the package, but no
+ dependencies, arch, or compiler.
TODO: allow, e.g., ``$6#`` to customize short hash length
- TODO: allow, e.g., ``$##`` for full hash.
+ TODO: allow, e.g., ``$//`` for full hash.
"""
color = kwargs.get('color', False)
+
+ # Dictionary of transformations for named tokens
+ token_transforms = {}
+ token_transforms.update(kwargs.get('transform', {}))
+
length = len(format_string)
out = StringIO()
named = escape = compiler = False
named_str = fmt = ''
def write(s, c):
- if color:
- f = color_formats[c] + cescape(s) + '@.'
- cwrite(f, stream=out, color=color)
- else:
- out.write(s)
+ f = color_formats[c] + cescape(s) + '@.'
+ cwrite(f, stream=out, color=color)
iterator = enumerate(format_string)
for i, c in iterator:
@@ -2450,8 +2966,8 @@ class Spec(object):
if self.architecture and str(self.architecture):
a_str = ' arch' + c + str(self.architecture) + ' '
write(fmt % (a_str), c)
- elif c == '#':
- out.write('-' + fmt % (self.dag_hash(7)))
+ elif c == '/':
+ out.write('/' + fmt % (self.dag_hash(7)))
elif c == '$':
if fmt != '%s':
raise ValueError("Can't use format width with $$.")
@@ -2485,39 +3001,55 @@ class Spec(object):
named_str += c
continue
named_str = named_str.upper()
+
+ # Retrieve the token transformation from the dictionary.
+ #
+ # The default behavior is to leave the string unchanged
+ # (`lambda x: x` is the identity function)
+ token_transform = token_transforms.get(named_str, lambda x: x)
+
if named_str == 'PACKAGE':
name = self.name if self.name else ''
- write(fmt % self.name, '@')
+ write(fmt % token_transform(name), '@')
if named_str == 'VERSION':
if self.versions and self.versions != _any_version:
- write(fmt % str(self.versions), '@')
+ write(fmt % token_transform(str(self.versions)), '@')
elif named_str == 'COMPILER':
if self.compiler:
- write(fmt % self.compiler, '%')
+ write(fmt % token_transform(self.compiler), '%')
elif named_str == 'COMPILERNAME':
if self.compiler:
- write(fmt % self.compiler.name, '%')
+ write(fmt % token_transform(self.compiler.name), '%')
elif named_str in ['COMPILERVER', 'COMPILERVERSION']:
if self.compiler:
- write(fmt % self.compiler.versions, '%')
+ write(
+ fmt % token_transform(self.compiler.versions),
+ '%'
+ )
elif named_str == 'COMPILERFLAGS':
if self.compiler:
- write(fmt % str(self.compiler_flags), '%')
+ write(
+ fmt % token_transform(str(self.compiler_flags)),
+ '%'
+ )
elif named_str == 'OPTIONS':
if self.variants:
- write(fmt % str(self.variants), '+')
+ write(fmt % token_transform(str(self.variants)), '+')
elif named_str == 'ARCHITECTURE':
if self.architecture and str(self.architecture):
- write(fmt % str(self.architecture) + ' ', ' arch=')
+ write(
+ fmt % token_transform(str(self.architecture)),
+ '='
+ )
elif named_str == 'SHA1':
if self.dependencies:
- out.write(fmt % str(self.dag_hash(7)))
+ out.write(fmt % token_transform(str(self.dag_hash(7))))
elif named_str == 'SPACK_ROOT':
- out.write(fmt % spack.prefix)
+ out.write(fmt % token_transform(spack.prefix))
elif named_str == 'SPACK_INSTALL':
- out.write(fmt % spack.store.root)
+ out.write(fmt % token_transform(spack.store.root))
elif named_str == 'PREFIX':
- out.write(fmt % self.prefix)
+ out.write(fmt % token_transform(self.prefix))
elif named_str.startswith('HASH'):
if named_str.startswith('HASH:'):
_, hashlen = named_str.split(':')
@@ -2539,44 +3071,15 @@ class Spec(object):
result = out.getvalue()
return result
+ def cformat(self, *args, **kwargs):
+ """Same as format, but color defaults to auto instead of False."""
+ kwargs = kwargs.copy()
+ kwargs.setdefault('color', None)
+ return self.format(*args, **kwargs)
+
def dep_string(self):
return ''.join("^" + dep.format() for dep in self.sorted_deps())
- def __cmp__(self, other):
- from package_prefs import pkgsort
-
- # Package name sort order is not configurable, always goes alphabetical
- if self.name != other.name:
- return cmp(self.name, other.name)
-
- # Package version is second in compare order
- pkgname = self.name
- if self.versions != other.versions:
- return pkgsort().version_compare(
- pkgname, self.versions, other.versions)
-
- # Compiler is third
- if self.compiler != other.compiler:
- return pkgsort().compiler_compare(
- pkgname, self.compiler, other.compiler)
-
- # Variants
- if self.variants != other.variants:
- return pkgsort().variant_compare(
- pkgname, self.variants, other.variants)
-
- # Target
- if self.architecture != other.architecture:
- return pkgsort().architecture_compare(
- pkgname, self.architecture, other.architecture)
-
- # Dependency is not configurable
- if self._dependencies != other._dependencies:
- return -1 if self._dependencies < other._dependencies else 1
-
- # Equal specs
- return 0
-
def __str__(self):
ret = self.format() + self.dep_string()
return ret.strip()
@@ -2591,10 +3094,20 @@ class Spec(object):
except KeyError:
return None
+ def _installed_explicitly(self):
+ """Helper for tree to print DB install status."""
+ if not self.concrete:
+ return None
+ try:
+ record = spack.store.db.get_record(self)
+ return record.explicit
+ except KeyError:
+ return None
+
def tree(self, **kwargs):
"""Prints out this spec and its dependencies, tree-formatted
with indentation."""
- color = kwargs.pop('color', False)
+ color = kwargs.pop('color', get_color_when())
depth = kwargs.pop('depth', False)
hashes = kwargs.pop('hashes', False)
hlen = kwargs.pop('hashlen', None)
@@ -2634,10 +3147,10 @@ class Spec(object):
if show_types:
out += '['
if dep_spec.deptypes:
- for t in alldeps:
+ for t in all_deptypes:
out += ''.join(t[0] if t in dep_spec.deptypes else ' ')
else:
- out += ' ' * len(alldeps)
+ out += ' ' * len(all_deptypes)
out += '] '
out += (" " * d)
@@ -2650,6 +3163,19 @@ class Spec(object):
return str(self)
+class LazySpecCache(collections.defaultdict):
+ """Cache for Specs that uses a spec_like as key, and computes lazily
+ the corresponding value ``Spec(spec_like``.
+ """
+ def __init__(self):
+ super(LazySpecCache, self).__init__(Spec)
+
+ def __missing__(self, key):
+ value = self.default_factory(key)
+ self[key] = value
+ return value
+
+
#
# These are possible token types in the spec grammar.
#
@@ -2688,38 +3214,51 @@ _lexer = SpecLexer()
class SpecParser(spack.parse.Parser):
- def __init__(self):
+ def __init__(self, initial_spec=None):
+ """Construct a new SpecParser.
+
+ Args:
+ initial_spec (Spec, optional): provide a Spec that we'll parse
+ directly into. This is used to avoid construction of a
+ superfluous Spec object in the Spec constructor.
+ """
super(SpecParser, self).__init__(_lexer)
self.previous = None
+ self._initial = initial_spec
def do_parse(self):
specs = []
try:
- while self.next or self.previous:
+ while self.next:
# TODO: clean this parsing up a bit
- if self.previous:
- # We picked up the name of this spec while finishing the
- # previous spec
- specs.append(self.spec(self.previous.value))
- self.previous = None
- elif self.accept(ID):
+ if self.accept(ID):
self.previous = self.token
if self.accept(EQ):
- # We're either parsing an anonymous spec beginning
- # with a key-value pair or adding a key-value pair
- # to the last spec
+ # We're parsing an anonymous spec beginning with a
+ # key-value pair.
if not specs:
+ self.push_tokens([self.previous, self.token])
+ self.previous = None
specs.append(self.spec(None))
- self.expect(VAL)
- specs[-1]._add_flag(
- self.previous.value, self.token.value)
- self.previous = None
+ else:
+ if specs[-1].concrete:
+ # Trying to add k-v pair to spec from hash
+ raise RedundantSpecError(specs[-1],
+ 'key-value pair')
+ # We should never end up here.
+ # This requires starting a new spec with ID, EQ
+ # After another spec that is not concrete
+ # If the previous spec is not concrete, this is
+ # handled in the spec parsing loop
+ # If it is concrete, see the if statement above
+ # If there is no previous spec, we don't land in
+ # this else case.
+ self.unexpected_token()
else:
# We're parsing a new spec by name
- value = self.previous.value
self.previous = None
- specs.append(self.spec(value))
+ specs.append(self.spec(self.token.value))
elif self.accept(HASH):
# We're finding a spec by hash
specs.append(self.spec_by_hash())
@@ -2727,27 +3266,38 @@ class SpecParser(spack.parse.Parser):
elif self.accept(DEP):
if not specs:
# We're parsing an anonymous spec beginning with a
- # dependency
- self.previous = self.token
+ # dependency. Push the token to recover after creating
+ # anonymous spec
+ self.push_tokens([self.token])
specs.append(self.spec(None))
- self.previous = None
- if self.accept(HASH):
- # We're finding a dependency by hash for an anonymous
- # spec
- dep = self.spec_by_hash()
else:
- # We're adding a dependency to the last spec
- self.expect(ID)
- dep = self.spec(self.token.value)
-
- # command line deps get empty deptypes now.
- # Real deptypes are assigned later per packages.
- specs[-1]._add_dependency(dep, ())
+ if self.accept(HASH):
+ # We're finding a dependency by hash for an
+ # anonymous spec
+ dep = self.spec_by_hash()
+ else:
+ # We're adding a dependency to the last spec
+ self.expect(ID)
+ dep = self.spec(self.token.value)
+
+ # Raise an error if the previous spec is already
+ # concrete (assigned by hash)
+ if specs[-1]._hash:
+ raise RedundantSpecError(specs[-1], 'dependency')
+ # command line deps get empty deptypes now.
+ # Real deptypes are assigned later per packages.
+ specs[-1]._add_dependency(dep, ())
else:
# If the next token can be part of a valid anonymous spec,
# create the anonymous spec
if self.next.type in (AT, ON, OFF, PCT):
+ # Raise an error if the previous spec is already
+ # concrete (assigned by hash)
+ if specs and specs[-1]._hash:
+ raise RedundantSpecError(specs[-1],
+ 'compiler, version, '
+ 'or variant')
specs.append(self.spec(None))
else:
self.unexpected_token()
@@ -2777,18 +3327,17 @@ class SpecParser(spack.parse.Parser):
spec.dag_hash()[:len(self.token.value)] == self.token.value]
if not matches:
- tty.die("%s does not match any installed packages." %
- self.token.value)
+ raise NoSuchHashError(self.token.value)
if len(matches) != 1:
raise AmbiguousHashError(
- "Multiple packages specify hash %s." % self.token.value,
- *matches)
+ "Multiple packages specify hash beginning '%s'."
+ % self.token.value, *matches)
return matches[0]
def spec(self, name):
- """Parse a spec out of the input. If a spec is supplied, then initialize
+ """Parse a spec out of the input. If a spec is supplied, initialize
and return it instead of creating a new one."""
if name:
spec_namespace, dot, spec_name = name.rpartition('.')
@@ -2799,14 +3348,20 @@ class SpecParser(spack.parse.Parser):
spec_namespace = None
spec_name = None
- # This will init the spec without calling __init__.
- spec = Spec.__new__(Spec)
+ if self._initial is None:
+ # This will init the spec without calling Spec.__init__
+ spec = Spec.__new__(Spec)
+ else:
+ # this is used by Spec.__init__
+ spec = self._initial
+ self._initial = None
+
spec.name = spec_name
spec.versions = VersionList()
spec.variants = VariantMap(spec)
spec.architecture = None
spec.compiler = None
- spec.external = None
+ spec.external_path = None
spec.external_module = None
spec.compiler_flags = FlagMap(spec)
spec._dependents = DependencyMap()
@@ -2822,16 +3377,6 @@ class SpecParser(spack.parse.Parser):
# unspecified or not.
added_version = False
- if self.previous and self.previous.value == DEP:
- if self.accept(HASH):
- spec.add_dependency(self.spec_by_hash())
- else:
- self.expect(ID)
- if self.accept(EQ):
- raise SpecParseError(spack.parse.ParseError(
- "", "", "Expected dependency received anonymous spec"))
- spec.add_dependency(self.spec(self.token.value))
-
while self.next:
if self.accept(AT):
vlist = self.version_list()
@@ -2840,10 +3385,12 @@ class SpecParser(spack.parse.Parser):
added_version = True
elif self.accept(ON):
- spec._add_variant(self.variant(), True)
+ name = self.variant()
+ spec.variants[name] = BoolValuedVariant(name, True)
elif self.accept(OFF):
- spec._add_variant(self.variant(), False)
+ name = self.variant()
+ spec.variants[name] = BoolValuedVariant(name, False)
elif self.accept(PCT):
spec._set_compiler(self.compiler())
@@ -2857,19 +3404,30 @@ class SpecParser(spack.parse.Parser):
self.previous = None
else:
# We've found the start of a new spec. Go back to do_parse
+ # and read this token again.
+ self.push_tokens([self.token])
+ self.previous = None
break
+ elif self.accept(HASH):
+ # Get spec by hash and confirm it matches what we already have
+ hash_spec = self.spec_by_hash()
+ if hash_spec.satisfies(spec):
+ spec._dup(hash_spec)
+ break
+ else:
+ raise InvalidHashError(spec, hash_spec.dag_hash())
+
else:
break
# If there was no version in the spec, consier it an open range
- if not added_version:
+ if not added_version and not spec._hash:
spec.versions = VersionList(':')
return spec
def variant(self, name=None):
- # TODO: Make generalized variants possible
if name:
return name
else:
@@ -2885,7 +3443,11 @@ class SpecParser(spack.parse.Parser):
if self.accept(COLON):
if self.accept(ID):
- end = self.token.value
+ if self.next and self.next.type is EQ:
+ # This is a start: range followed by a key=value pair
+ self.push_tokens([self.token])
+ else:
+ end = self.token.value
elif start:
# No colon, but there was a version.
return Version(start)
@@ -2929,7 +3491,8 @@ class SpecParser(spack.parse.Parser):
if not id:
id = self.token.value
if '.' in id:
- self.last_token_error("Identifier cannot contain '.'")
+ self.last_token_error(
+ "{0}: Identifier cannot contain '.'".format(id))
def parse(string):
@@ -2984,10 +3547,6 @@ def base32_prefix_bits(hash_string, bits):
return prefix_bits(hash_bytes, bits)
-class SpecError(spack.error.SpackError):
- """Superclass for all errors that occur while constructing specs."""
-
-
class SpecParseError(SpecError):
"""Wrapper for ParseError for when we're parsing specs."""
def __init__(self, parse_error):
@@ -3000,10 +3559,6 @@ class DuplicateDependencyError(SpecError):
"""Raised when the same dependency occurs in a spec twice."""
-class DuplicateVariantError(SpecError):
- """Raised when the same variant occurs in a spec twice."""
-
-
class DuplicateCompilerSpecError(SpecError):
"""Raised when the same compiler occurs in a spec twice."""
@@ -3015,13 +3570,6 @@ class UnsupportedCompilerError(SpecError):
"The '%s' compiler is not yet supported." % compiler_name)
-class UnknownVariantError(SpecError):
- """Raised when the same variant occurs in a spec twice."""
- def __init__(self, pkg, variant):
- super(UnknownVariantError, self).__init__(
- "Package %s has no variant %s!" % (pkg, variant))
-
-
class DuplicateArchitectureError(SpecError):
"""Raised when the same architecture occurs in a spec twice."""
@@ -3036,10 +3584,6 @@ class InvalidDependencyError(SpecError):
of the package."""
-class InvalidDependencyTypeError(SpecError):
- """Raised when a dependency type is not a legal Spack dep type."""
-
-
class NoProviderError(SpecError):
"""Raised when there is no package that provides a particular
virtual dependency.
@@ -3063,17 +3607,6 @@ class MultipleProviderError(SpecError):
self.providers = providers
-class UnsatisfiableSpecError(SpecError):
- """Raised when a spec conflicts with package constraints.
- Provide the requirement that was violated when raising."""
- def __init__(self, provided, required, constraint_type):
- super(UnsatisfiableSpecError, self).__init__(
- "%s does not satisfy %s" % (provided, required))
- self.provided = provided
- self.required = required
- self.constraint_type = constraint_type
-
-
class UnsatisfiableSpecNameError(UnsatisfiableSpecError):
"""Raised when two specs aren't even for the same package."""
def __init__(self, provided, required):
@@ -3095,13 +3628,6 @@ class UnsatisfiableCompilerSpecError(UnsatisfiableSpecError):
provided, required, "compiler")
-class UnsatisfiableVariantSpecError(UnsatisfiableSpecError):
- """Raised when a spec variant conflicts with package constraints."""
- def __init__(self, provided, required):
- super(UnsatisfiableVariantSpecError, self).__init__(
- provided, required, "variant")
-
-
class UnsatisfiableCompilerFlagSpecError(UnsatisfiableSpecError):
"""Raised when a spec variant conflicts with package constraints."""
def __init__(self, provided, required):
@@ -3135,6 +3661,56 @@ class UnsatisfiableDependencySpecError(UnsatisfiableSpecError):
class AmbiguousHashError(SpecError):
def __init__(self, msg, *specs):
- super(AmbiguousHashError, self).__init__(msg)
- for spec in specs:
- print(' ', spec.format('$.$@$%@+$+$=$#'))
+ specs_str = '\n ' + '\n '.join(spec.format('$.$@$%@+$+$=$/')
+ for spec in specs)
+ super(AmbiguousHashError, self).__init__(msg + specs_str)
+
+
+class InvalidHashError(SpecError):
+ def __init__(self, spec, hash):
+ super(InvalidHashError, self).__init__(
+ "The spec specified by %s does not match provided spec %s"
+ % (hash, spec))
+
+
+class NoSuchHashError(SpecError):
+ def __init__(self, hash):
+ super(NoSuchHashError, self).__init__(
+ "No installed spec matches the hash: '%s'"
+ % hash)
+
+
+class RedundantSpecError(SpecError):
+ def __init__(self, spec, addition):
+ super(RedundantSpecError, self).__init__(
+ "Attempting to add %s to spec %s which is already concrete."
+ " This is likely the result of adding to a spec specified by hash."
+ % (addition, spec))
+
+
+class ConflictsInSpecError(SpecError, RuntimeError):
+ def __init__(self, spec, matches):
+ message = 'Conflicts in concretized spec "{0}"\n'.format(
+ spec.short_spec
+ )
+
+ visited = set()
+
+ long_message = ''
+
+ match_fmt_default = '{0}. "{1}" conflicts with "{2}"\n'
+ match_fmt_custom = '{0}. "{1}" conflicts with "{2}" [{3}]\n'
+
+ for idx, (s, c, w, msg) in enumerate(matches):
+
+ if s not in visited:
+ visited.add(s)
+ long_message += 'List of matching conflicts for spec:\n\n'
+ long_message += s.tree(indent=4) + '\n'
+
+ if msg is None:
+ long_message += match_fmt_default.format(idx + 1, c, w)
+ else:
+ long_message += match_fmt_custom.format(idx + 1, c, w, msg)
+
+ super(ConflictsInSpecError, self).__init__(message, long_message)
diff --git a/lib/spack/spack/stage.py b/lib/spack/spack/stage.py
index 91f77839d8..19eca53d1d 100644
--- a/lib/spack/spack/stage.py
+++ b/lib/spack/spack/stage.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,19 +29,20 @@ import hashlib
import shutil
import tempfile
import getpass
-from urlparse import urljoin
+from six import string_types
+from six import iteritems
+from six.moves.urllib.parse import urljoin
import llnl.util.tty as tty
import llnl.util.lock
-from llnl.util.filesystem import *
-
-import spack.util.pattern as pattern
+from llnl.util.filesystem import mkdirp, join_path, can_access
+from llnl.util.filesystem import remove_if_dead_link, remove_linked_tree
import spack
import spack.config
-import spack.fetch_strategy as fs
import spack.error
-from spack.version import *
+import spack.fetch_strategy as fs
+import spack.util.pattern as pattern
from spack.util.path import canonicalize_path
from spack.util.crypto import prefix_bits, bit_length
@@ -84,7 +85,7 @@ def get_tmp_root():
if _tmp_root is None:
config = spack.config.get_config('config')
candidates = config['build_stage']
- if isinstance(candidates, basestring):
+ if isinstance(candidates, string_types):
candidates = [candidates]
path = _first_accessible_path(candidates)
@@ -188,7 +189,7 @@ class Stage(object):
"""
# TODO: fetch/stage coupling needs to be reworked -- the logic
# TODO: here is convoluted and not modular enough.
- if isinstance(url_or_fetch_strategy, basestring):
+ if isinstance(url_or_fetch_strategy, string_types):
self.fetcher = fs.from_url(url_or_fetch_strategy)
elif isinstance(url_or_fetch_strategy, fs.FetchStrategy):
self.fetcher = url_or_fetch_strategy
@@ -221,11 +222,12 @@ class Stage(object):
self.keep = keep
# File lock for the stage directory. We use one file for all
- # stage locks. See Spec.prefix_lock for details on this approach.
+ # stage locks. See spack.database.Database.prefix_lock for
+ # details on this approach.
self._lock = None
if lock:
if self.name not in Stage.stage_locks:
- sha1 = hashlib.sha1(self.name).digest()
+ sha1 = hashlib.sha1(self.name.encode('utf-8')).digest()
lock_id = prefix_bits(sha1, bit_length(sys.maxsize))
stage_lock_path = join_path(spack.stage_path, '.lock')
@@ -234,6 +236,10 @@ class Stage(object):
self._lock = Stage.stage_locks[self.name]
+ # When stages are reused, we need to know whether to re-create
+ # it. This marks whether it has been created/destroyed.
+ self.created = False
+
def __enter__(self):
"""
Entering a stage context will create the stage directory
@@ -360,18 +366,8 @@ class Stage(object):
return p
return None
- def chdir(self):
- """Changes directory to the stage path. Or dies if it is not set
- up."""
- if os.path.isdir(self.path):
- os.chdir(self.path)
- else:
- raise ChdirError("Setup failed: no such directory: " + self.path)
-
def fetch(self, mirror_only=False):
"""Downloads an archive or checks out code from a repository."""
- self.chdir()
-
fetchers = []
if not mirror_only:
fetchers.append(self.default_fetcher)
@@ -454,7 +450,7 @@ class Stage(object):
"control system, but it has been archived on a spack "
"mirror. This means we cannot know a checksum for the "
"tarball in advance. Be sure that your connection to "
- "this mirror is secure!.")
+ "this mirror is secure!")
else:
self.fetcher.check()
@@ -472,18 +468,6 @@ class Stage(object):
else:
tty.msg("Already staged %s in %s" % (self.name, self.path))
- def chdir_to_source(self):
- """Changes directory to the expanded archive directory.
- Dies with an error if there was no expanded archive.
- """
- path = self.source_path
- if not path:
- raise StageError("Attempt to chdir before expanding archive.")
- else:
- os.chdir(path)
- if not os.listdir(path):
- raise StageError("Archive was empty for %s" % self.name)
-
def restage(self):
"""Removes the expanded archive path if it exists, then re-expands
the archive.
@@ -519,6 +503,7 @@ class Stage(object):
mkdirp(self.path)
# Make sure we can actually do something with the stage we made.
ensure_access(self.path)
+ self.created = True
def destroy(self):
"""Removes this stage directory."""
@@ -530,6 +515,9 @@ class Stage(object):
except OSError:
os.chdir(os.path.dirname(self.path))
+ # mark as destroyed
+ self.created = False
+
class ResourceStage(Stage):
@@ -538,8 +526,18 @@ class ResourceStage(Stage):
self.root_stage = root
self.resource = resource
+ def restage(self):
+ super(ResourceStage, self).restage()
+ self._add_to_root_stage()
+
def expand_archive(self):
super(ResourceStage, self).expand_archive()
+ self._add_to_root_stage()
+
+ def _add_to_root_stage(self):
+ """
+ Move the extracted resource to the root stage (according to placement).
+ """
root_stage = self.root_stage
resource = self.resource
placement = os.path.basename(self.source_path) \
@@ -547,23 +545,23 @@ class ResourceStage(Stage):
else resource.placement
if not isinstance(placement, dict):
placement = {'': placement}
- # Make the paths in the dictionary absolute and link
- for key, value in placement.iteritems():
- target_path = join_path(
- root_stage.source_path, resource.destination)
+
+ target_path = join_path(
+ root_stage.source_path, resource.destination)
+
+ try:
+ os.makedirs(target_path)
+ except OSError as err:
+ if err.errno == errno.EEXIST and os.path.isdir(target_path):
+ pass
+ else:
+ raise
+
+ for key, value in iteritems(placement):
destination_path = join_path(target_path, value)
source_path = join_path(self.source_path, key)
- try:
- os.makedirs(target_path)
- except OSError as err:
- if err.errno == errno.EEXIST and os.path.isdir(target_path):
- pass
- else:
- raise
-
if not os.path.exists(destination_path):
- # Create a symlink
tty.info('Moving resource stage\n\tsource : '
'{stage}\n\tdestination : {destination}'.format(
stage=source_path, destination=destination_path
@@ -571,8 +569,9 @@ class ResourceStage(Stage):
shutil.move(source_path, destination_path)
-@pattern.composite(method_list=['fetch', 'create', 'check', 'expand_archive',
- 'restage', 'destroy', 'cache_local'])
+@pattern.composite(method_list=[
+ 'fetch', 'create', 'created', 'check', 'expand_archive', 'restage',
+ 'destroy', 'cache_local'])
class StageComposite:
"""Composite for Stage type objects. The first item in this composite is
considered to be the root package, and operations that return a value are
@@ -602,9 +601,6 @@ class StageComposite:
def path(self):
return self[0].path
- def chdir_to_source(self):
- return self[0].chdir_to_source()
-
@property
def archive_file(self):
return self[0].archive_file
@@ -621,12 +617,7 @@ class DIYStage(object):
self.archive_file = None
self.path = path
self.source_path = path
-
- def chdir(self):
- if os.path.isdir(self.path):
- os.chdir(self.path)
- else:
- raise ChdirError("Setup failed: no such directory: " + self.path)
+ self.created = True
# DIY stages do nothing as context managers.
def __enter__(self):
@@ -635,9 +626,6 @@ class DIYStage(object):
def __exit__(self, exc_type, exc_val, exc_tb):
pass
- def chdir_to_source(self):
- self.chdir()
-
def fetch(self, *args, **kwargs):
tty.msg("No need to fetch for DIY.")
@@ -650,6 +638,9 @@ class DIYStage(object):
def restage(self):
tty.die("Cannot restage DIY stage.")
+ def create(self):
+ self.created = True
+
def destroy(self):
# No need to destroy DIY stage.
pass
@@ -661,7 +652,7 @@ class DIYStage(object):
def _get_mirrors():
"""Get mirrors from spack configuration."""
config = spack.config.get_config('mirrors')
- return [val for name, val in config.iteritems()]
+ return [val for name, val in iteritems(config)]
def ensure_access(file=spack.stage_path):
@@ -686,8 +677,5 @@ class RestageError(StageError):
""""Error encountered during restaging."""
-class ChdirError(StageError):
- """Raised when Spack can't change directories."""
-
# Keep this in namespace for convenience
FailedDownloadError = fs.FailedDownloadError
diff --git a/lib/spack/spack/store.py b/lib/spack/spack/store.py
index 3f559315d2..a9a607150f 100644
--- a/lib/spack/spack/store.py
+++ b/lib/spack/spack/store.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,9 +48,10 @@ import spack.config
from spack.util.path import canonicalize_path
from spack.database import Database
from spack.directory_layout import YamlDirectoryLayout
+from spack.directory_layout import YamlExtensionsLayout
__author__ = "Benedikt Hegner (CERN)"
-__all__ = ['db', 'layout', 'root']
+__all__ = ['db', 'extensions', 'layout', 'root']
#
# Read in the config
@@ -72,4 +73,8 @@ db = Database(root)
# This controls how spack lays out install prefixes and
# stage directories.
#
-layout = YamlDirectoryLayout(root)
+layout = YamlDirectoryLayout(root,
+ hash_len=config.get('install_hash_length'),
+ path_scheme=config.get('install_path_scheme'))
+
+extensions = YamlExtensionsLayout(root, layout)
diff --git a/lib/spack/spack/tengine.py b/lib/spack/spack/tengine.py
new file mode 100644
index 0000000000..44c62521b1
--- /dev/null
+++ b/lib/spack/spack/tengine.py
@@ -0,0 +1,120 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import textwrap
+
+import jinja2
+import llnl.util.lang
+import six
+import spack
+
+
+TemplateNotFound = jinja2.TemplateNotFound
+
+
+class ContextMeta(type):
+ """Meta class for Context. It helps reducing the boilerplate in
+ client code.
+ """
+ #: Keeps track of the context properties that have been added
+ #: by the class that is being defined
+ _new_context_properties = []
+
+ def __new__(mcs, name, bases, attr_dict):
+ # Merge all the context properties that are coming from base classes
+ # into a list without duplicates.
+ context_properties = list(mcs._new_context_properties)
+ for x in bases:
+ try:
+ context_properties.extend(x.context_properties)
+ except AttributeError:
+ pass
+ context_properties = list(llnl.util.lang.dedupe(context_properties))
+
+ # Flush the list
+ mcs._new_context_properties = []
+
+ # Attach the list to the class being created
+ attr_dict['context_properties'] = context_properties
+
+ return super(ContextMeta, mcs).__new__(mcs, name, bases, attr_dict)
+
+ @classmethod
+ def context_property(mcs, func):
+ """Decorator that adds a function name to the list of new context
+ properties, and then returns a property.
+ """
+ name = func.__name__
+ mcs._new_context_properties.append(name)
+ return property(func)
+
+
+#: A saner way to use the decorator
+context_property = ContextMeta.context_property
+
+
+class Context(six.with_metaclass(ContextMeta, object)):
+ """Base class for context classes that are used with the template
+ engine.
+ """
+
+ def to_dict(self):
+ """Returns a dictionary containing all the context properties."""
+ d = [(name, getattr(self, name)) for name in self.context_properties]
+ return dict(d)
+
+
+def make_environment(dirs=None):
+ """Returns an configured environment for template rendering."""
+ if dirs is None:
+ # Default directories where to search for templates
+ dirs = spack.template_dirs
+ # Loader for the templates
+ loader = jinja2.FileSystemLoader(dirs)
+ # Environment of the template engine
+ env = jinja2.Environment(loader=loader, trim_blocks=True)
+ # Custom filters
+ _set_filters(env)
+ return env
+
+
+# Extra filters for template engine environment
+
+def prepend_to_line(text, token):
+ """Prepends a token to each line in text"""
+ return [token + line for line in text]
+
+
+def quote(text):
+ """Quotes each line in text"""
+ return ['"{0}"'.format(line) for line in text]
+
+
+def _set_filters(env):
+ """Sets custom filters to the template engine environment"""
+ env.filters['textwrap'] = textwrap.wrap
+ env.filters['prepend_to_line'] = prepend_to_line
+ env.filters['join'] = '\n'.join
+ env.filters['quote'] = quote
diff --git a/lib/spack/spack/test/__init__.py b/lib/spack/spack/test/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/test/__init__.py
+++ b/lib/spack/spack/test/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/test/architecture.py b/lib/spack/spack/test/architecture.py
index fb4113361c..18bf7d66c5 100644
--- a/lib/spack/spack/test/architecture.py
+++ b/lib/spack/spack/test/architecture.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -58,7 +58,7 @@ def test_dict_functions_for_architecture():
def test_platform():
output_platform_class = spack.architecture.real_platform()
- if os.path.exists('/opt/cray/craype'):
+ if os.environ.get('CRAYPE_VERSION') is not None:
my_platform_class = Cray()
elif os.path.exists('/bgsys'):
my_platform_class = Bgq()
@@ -138,8 +138,8 @@ def test_user_defaults(config):
def test_user_input_combination(config):
platform = spack.architecture.platform()
- os_list = platform.operating_sys.keys()
- target_list = platform.targets.keys()
+ os_list = list(platform.operating_sys.keys())
+ target_list = list(platform.targets.keys())
additional = ["fe", "be", "frontend", "backend"]
os_list.extend(additional)
diff --git a/lib/spack/spack/test/build_environment.py b/lib/spack/spack/test/build_environment.py
new file mode 100644
index 0000000000..37664aa35e
--- /dev/null
+++ b/lib/spack/spack/test/build_environment.py
@@ -0,0 +1,99 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+import pytest
+
+import spack
+from llnl.util.filesystem import join_path
+from spack.build_environment import dso_suffix, _static_to_shared_library
+from spack.util.executable import Executable
+
+
+@pytest.fixture
+def build_environment():
+ cc = Executable(join_path(spack.build_env_path, "cc"))
+ cxx = Executable(join_path(spack.build_env_path, "c++"))
+ fc = Executable(join_path(spack.build_env_path, "fc"))
+
+ realcc = "/bin/mycc"
+ prefix = "/spack-test-prefix"
+
+ os.environ['SPACK_CC'] = realcc
+ os.environ['SPACK_CXX'] = realcc
+ os.environ['SPACK_FC'] = realcc
+
+ os.environ['SPACK_PREFIX'] = prefix
+ os.environ['SPACK_ENV_PATH'] = "test"
+ os.environ['SPACK_DEBUG_LOG_DIR'] = "."
+ os.environ['SPACK_DEBUG_LOG_ID'] = "foo-hashabc"
+ os.environ['SPACK_COMPILER_SPEC'] = "gcc@4.4.7"
+ os.environ['SPACK_SHORT_SPEC'] = (
+ "foo@1.2 arch=linux-rhel6-x86_64 /hashabc")
+
+ os.environ['SPACK_CC_RPATH_ARG'] = "-Wl,-rpath,"
+ os.environ['SPACK_CXX_RPATH_ARG'] = "-Wl,-rpath,"
+ os.environ['SPACK_F77_RPATH_ARG'] = "-Wl,-rpath,"
+ os.environ['SPACK_FC_RPATH_ARG'] = "-Wl,-rpath,"
+
+ if 'SPACK_DEPENDENCIES' in os.environ:
+ del os.environ['SPACK_DEPENDENCIES']
+
+ yield {'cc': cc, 'cxx': cxx, 'fc': fc}
+
+ for name in ('SPACK_CC', 'SPACK_CXX', 'SPACK_FC', 'SPACK_PREFIX',
+ 'SPACK_ENV_PATH', 'SPACK_DEBUG_LOG_DIR',
+ 'SPACK_COMPILER_SPEC', 'SPACK_SHORT_SPEC',
+ 'SPACK_CC_RPATH_ARG', 'SPACK_CXX_RPATH_ARG',
+ 'SPACK_F77_RPATH_ARG', 'SPACK_FC_RPATH_ARG'):
+ del os.environ[name]
+
+
+def test_static_to_shared_library(build_environment):
+ os.environ['SPACK_TEST_COMMAND'] = 'dump-args'
+
+ expected = {
+ 'linux': ('/bin/mycc -Wl,-rpath,/spack-test-prefix/lib'
+ ' -Wl,-rpath,/spack-test-prefix/lib64 -shared'
+ ' -Wl,-soname,{2} -Wl,--whole-archive {0}'
+ ' -Wl,--no-whole-archive -o {1}'),
+ 'darwin': ('/bin/mycc -Wl,-rpath,/spack-test-prefix/lib'
+ ' -Wl,-rpath,/spack-test-prefix/lib64 -dynamiclib'
+ ' -install_name {1} -Wl,-force_load,{0} -o {1}')
+ }
+
+ static_lib = '/spack/libfoo.a'
+
+ for arch in ('linux', 'darwin'):
+ for shared_lib in (None, '/spack/libbar.so'):
+ output = _static_to_shared_library(arch, build_environment['cc'],
+ static_lib, shared_lib,
+ compiler_output=str).strip()
+
+ if not shared_lib:
+ shared_lib = '{0}.{1}'.format(
+ os.path.splitext(static_lib)[0], dso_suffix)
+
+ assert output == expected[arch].format(
+ static_lib, shared_lib, os.path.basename(shared_lib))
diff --git a/lib/spack/spack/test/build_system_guess.py b/lib/spack/spack/test/build_system_guess.py
index 82bf1964b2..b23b66a846 100644
--- a/lib/spack/spack/test/build_system_guess.py
+++ b/lib/spack/spack/test/build_system_guess.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,10 +34,17 @@ import spack.stage
params=[
('configure', 'autotools'),
('CMakeLists.txt', 'cmake'),
+ ('project.pro', 'qmake'),
('SConstruct', 'scons'),
+ ('waf', 'waf'),
('setup.py', 'python'),
('NAMESPACE', 'r'),
('WORKSPACE', 'bazel'),
+ ('Makefile.PL', 'perlmake'),
+ ('Build.PL', 'perlbuild'),
+ ('GNUmakefile', 'makefile'),
+ ('makefile', 'makefile'),
+ ('Makefile', 'makefile'),
('foobar', 'generic')
]
)
diff --git a/lib/spack/spack/test/build_systems.py b/lib/spack/spack/test/build_systems.py
index 2cafba0333..72b88f3f26 100644
--- a/lib/spack/spack/test/build_systems.py
+++ b/lib/spack/spack/test/build_systems.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,6 +24,8 @@
##############################################################################
import spack
+import pytest
+
from spack.build_environment import get_std_cmake_args
from spack.spec import Spec
@@ -40,3 +42,34 @@ def test_cmake_std_args(config, builtin_mock):
s.concretize()
pkg = spack.repo.get(s)
assert get_std_cmake_args(pkg)
+
+
+@pytest.mark.usefixtures('config', 'builtin_mock')
+class TestAutotoolsPackage(object):
+
+ def test_with_or_without(self):
+ s = Spec('a')
+ s.concretize()
+ pkg = spack.repo.get(s)
+
+ # Called without parameters
+ options = pkg.with_or_without('foo')
+ assert '--with-bar' in options
+ assert '--without-baz' in options
+ assert '--no-fee' in options
+
+ def activate(value):
+ return 'something'
+
+ options = pkg.with_or_without('foo', activation_value=activate)
+ assert '--with-bar=something' in options
+ assert '--without-baz' in options
+ assert '--no-fee' in options
+
+ options = pkg.enable_or_disable('foo')
+ assert '--enable-bar' in options
+ assert '--disable-baz' in options
+ assert '--disable-fee' in options
+
+ options = pkg.with_or_without('bvv')
+ assert '--with-bvv' in options
diff --git a/lib/spack/spack/test/cc.py b/lib/spack/spack/test/cc.py
index 74b6b31654..a50af94ac2 100644
--- a/lib/spack/spack/test/cc.py
+++ b/lib/spack/spack/test/cc.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,9 +31,9 @@ import unittest
import tempfile
import shutil
-from llnl.util.filesystem import *
import spack
-from spack.util.executable import *
+from llnl.util.filesystem import mkdirp, join_path
+from spack.util.executable import Executable
# Complicated compiler test command
test_command = [
@@ -70,8 +70,10 @@ class CompilerWrapperTest(unittest.TestCase):
os.environ['SPACK_PREFIX'] = self.prefix
os.environ['SPACK_ENV_PATH'] = "test"
os.environ['SPACK_DEBUG_LOG_DIR'] = "."
+ os.environ['SPACK_DEBUG_LOG_ID'] = "foo-hashabc"
os.environ['SPACK_COMPILER_SPEC'] = "gcc@4.4.7"
- os.environ['SPACK_SHORT_SPEC'] = "foo@1.2"
+ os.environ['SPACK_SHORT_SPEC'] = (
+ "foo@1.2 arch=linux-rhel6-x86_64 /hashabc")
os.environ['SPACK_CC_RPATH_ARG'] = "-Wl,-rpath,"
os.environ['SPACK_CXX_RPATH_ARG'] = "-Wl,-rpath,"
diff --git a/lib/spack/spack/test/cmd/__init__.py b/lib/spack/spack/test/cmd/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/test/cmd/__init__.py
+++ b/lib/spack/spack/test/cmd/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/test/cmd/blame.py b/lib/spack/spack/test/cmd/blame.py
new file mode 100644
index 0000000000..1f7d9e81a8
--- /dev/null
+++ b/lib/spack/spack/test/cmd/blame.py
@@ -0,0 +1,71 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+
+from llnl.util.filesystem import working_dir
+
+import spack
+import spack.cmd
+from spack.main import SpackCommand
+from spack.util.executable import which
+
+pytestmark = pytest.mark.skipif(
+ not which('git') or not spack.cmd.spack_is_git_repo(),
+ reason="needs git")
+
+blame = SpackCommand('blame')
+
+
+def test_blame_by_modtime(builtin_mock):
+ """Sanity check the blame command to make sure it works."""
+ out = blame('--time', 'mpich')
+ assert 'LAST_COMMIT' in out
+ assert 'AUTHOR' in out
+ assert 'EMAIL' in out
+
+
+def test_blame_by_percent(builtin_mock):
+ """Sanity check the blame command to make sure it works."""
+ out = blame('--percent', 'mpich')
+ assert 'LAST_COMMIT' in out
+ assert 'AUTHOR' in out
+ assert 'EMAIL' in out
+
+
+def test_blame_file(builtin_mock):
+ """Sanity check the blame command to make sure it works."""
+ with working_dir(spack.prefix):
+ out = blame('bin/spack')
+ assert 'LAST_COMMIT' in out
+ assert 'AUTHOR' in out
+ assert 'EMAIL' in out
+
+
+def test_blame_by_git(builtin_mock, capfd):
+ """Sanity check the blame command to make sure it works."""
+ with capfd.disabled():
+ out = blame('--git', 'mpich')
+ assert 'class Mpich' in out
+ assert ' homepage = "http://www.mpich.org"' in out
diff --git a/lib/spack/spack/test/cmd/clean.py b/lib/spack/spack/test/cmd/clean.py
new file mode 100644
index 0000000000..3cb5044949
--- /dev/null
+++ b/lib/spack/spack/test/cmd/clean.py
@@ -0,0 +1,68 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+import spack
+import spack.main
+import spack.package
+
+clean = spack.main.SpackCommand('clean')
+
+
+@pytest.fixture()
+def mock_calls_for_clean(monkeypatch):
+
+ class Counter(object):
+ def __init__(self):
+ self.call_count = 0
+
+ def __call__(self, *args, **kwargs):
+ self.call_count += 1
+
+ monkeypatch.setattr(spack.package.PackageBase, 'do_clean', Counter())
+ monkeypatch.setattr(spack.stage, 'purge', Counter())
+ monkeypatch.setattr(spack.fetch_cache, 'destroy', Counter(), raising=False)
+ monkeypatch.setattr(spack.misc_cache, 'destroy', Counter())
+
+
+@pytest.mark.usefixtures(
+ 'builtin_mock', 'config', 'mock_calls_for_clean'
+)
+@pytest.mark.parametrize('command_line,counters', [
+ ('mpileaks', [1, 0, 0, 0]),
+ ('-s', [0, 1, 0, 0]),
+ ('-sd', [0, 1, 1, 0]),
+ ('-a', [0, 1, 1, 1]),
+])
+def test_function_calls(command_line, counters):
+
+ # Call the command with the supplied command line
+ clean(command_line)
+
+ # Assert that we called the expected functions the correct
+ # number of times
+ assert spack.package.PackageBase.do_clean.call_count == counters[0]
+ assert spack.stage.purge.call_count == counters[1]
+ assert spack.fetch_cache.destroy.call_count == counters[2]
+ assert spack.misc_cache.destroy.call_count == counters[3]
diff --git a/lib/spack/spack/test/cmd/dependencies.py b/lib/spack/spack/test/cmd/dependencies.py
new file mode 100644
index 0000000000..737a74caae
--- /dev/null
+++ b/lib/spack/spack/test/cmd/dependencies.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import re
+
+from llnl.util.tty.color import color_when
+
+import spack
+from spack.main import SpackCommand
+
+dependencies = SpackCommand('dependencies')
+
+mpis = ['mpich', 'mpich2', 'multi-provider-mpi', 'zmpi']
+mpi_deps = ['fake']
+
+
+def test_immediate_dependencies(builtin_mock):
+ out = dependencies('mpileaks')
+ actual = set(re.split(r'\s+', out.strip()))
+ expected = set(['callpath'] + mpis)
+ assert expected == actual
+
+
+def test_transitive_dependencies(builtin_mock):
+ out = dependencies('--transitive', 'mpileaks')
+ actual = set(re.split(r'\s+', out.strip()))
+ expected = set(
+ ['callpath', 'dyninst', 'libdwarf', 'libelf'] + mpis + mpi_deps)
+ assert expected == actual
+
+
+def test_immediate_installed_dependencies(builtin_mock, database):
+ with color_when(False):
+ out = dependencies('--installed', 'mpileaks^mpich')
+
+ lines = [l for l in out.strip().split('\n') if not l.startswith('--')]
+ hashes = set([re.split(r'\s+', l)[0] for l in lines])
+
+ expected = set([spack.store.db.query_one(s).dag_hash(7)
+ for s in ['mpich', 'callpath^mpich']])
+
+ assert expected == hashes
+
+
+def test_transitive_installed_dependencies(builtin_mock, database):
+ with color_when(False):
+ out = dependencies('--installed', '--transitive', 'mpileaks^zmpi')
+
+ lines = [l for l in out.strip().split('\n') if not l.startswith('--')]
+ hashes = set([re.split(r'\s+', l)[0] for l in lines])
+
+ expected = set([spack.store.db.query_one(s).dag_hash(7)
+ for s in ['zmpi', 'callpath^zmpi', 'fake',
+ 'dyninst', 'libdwarf', 'libelf']])
+
+ assert expected == hashes
diff --git a/lib/spack/spack/test/cmd/dependents.py b/lib/spack/spack/test/cmd/dependents.py
new file mode 100644
index 0000000000..acd64ec3d4
--- /dev/null
+++ b/lib/spack/spack/test/cmd/dependents.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import re
+
+from llnl.util.tty.color import color_when
+
+import spack
+from spack.main import SpackCommand
+
+dependents = SpackCommand('dependents')
+
+
+def test_immediate_dependents(builtin_mock):
+ out = dependents('libelf')
+ actual = set(re.split(r'\s+', out.strip()))
+ assert actual == set(['dyninst', 'libdwarf',
+ 'patch-a-dependency', 'patch-several-dependencies'])
+
+
+def test_transitive_dependents(builtin_mock):
+ out = dependents('--transitive', 'libelf')
+ actual = set(re.split(r'\s+', out.strip()))
+ assert actual == set(
+ ['callpath', 'dyninst', 'libdwarf', 'mpileaks', 'multivalue_variant',
+ 'singlevalue-variant-dependent',
+ 'patch-a-dependency', 'patch-several-dependencies'])
+
+
+def test_immediate_installed_dependents(builtin_mock, database):
+ with color_when(False):
+ out = dependents('--installed', 'libelf')
+
+ lines = [l for l in out.strip().split('\n') if not l.startswith('--')]
+ hashes = set([re.split(r'\s+', l)[0] for l in lines])
+
+ expected = set([spack.store.db.query_one(s).dag_hash(7)
+ for s in ['dyninst', 'libdwarf']])
+
+ libelf = spack.store.db.query_one('libelf')
+ expected = set([d.dag_hash(7) for d in libelf.dependents()])
+
+ assert expected == hashes
+
+
+def test_transitive_installed_dependents(builtin_mock, database):
+ with color_when(False):
+ out = dependents('--installed', '--transitive', 'fake')
+
+ lines = [l for l in out.strip().split('\n') if not l.startswith('--')]
+ hashes = set([re.split(r'\s+', l)[0] for l in lines])
+
+ expected = set([spack.store.db.query_one(s).dag_hash(7)
+ for s in ['zmpi', 'callpath^zmpi', 'mpileaks^zmpi']])
+
+ assert expected == hashes
diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py
new file mode 100644
index 0000000000..18d64b454b
--- /dev/null
+++ b/lib/spack/spack/test/cmd/env.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+
+from spack.main import SpackCommand, SpackCommandError
+
+info = SpackCommand('env')
+
+
+@pytest.mark.parametrize('pkg', [
+ ('zlib',),
+ ('zlib', '--')
+])
+@pytest.mark.usefixtures('config')
+def test_it_just_runs(pkg):
+ info(*pkg)
+
+
+@pytest.mark.parametrize('pkg,error_cls', [
+ ('zlib libszip', SpackCommandError),
+ ('', IndexError)
+])
+@pytest.mark.usefixtures('config')
+def test_it_just_fails(pkg, error_cls):
+ with pytest.raises(error_cls):
+ info(pkg)
diff --git a/lib/spack/spack/test/cmd/find.py b/lib/spack/spack/test/cmd/find.py
index dcd123d46e..69973e715b 100644
--- a/lib/spack/spack/test/cmd/find.py
+++ b/lib/spack/spack/test/cmd/find.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,12 +22,40 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import argparse
+
+import pytest
import spack.cmd.find
from spack.util.pattern import Bunch
+@pytest.fixture(scope='module')
+def parser():
+ """Returns the parser for the module command"""
+ prs = argparse.ArgumentParser()
+ spack.cmd.find.setup_parser(prs)
+ return prs
+
+
+@pytest.fixture()
+def specs():
+ s = []
+ return s
+
+
+@pytest.fixture()
+def mock_display(monkeypatch, specs):
+ """Monkeypatches the display function to return its first argument"""
+
+ def display(x, *args, **kwargs):
+ specs.extend(x)
+
+ monkeypatch.setattr(spack.cmd.find, 'display_specs', display)
+
+
def test_query_arguments():
query_arguments = spack.cmd.find.query_arguments
+
# Default arguments
args = Bunch(
only_missing=False,
@@ -36,6 +64,7 @@ def test_query_arguments():
explicit=False,
implicit=False
)
+
q_args = query_arguments(args)
assert 'installed' in q_args
assert 'known' in q_args
@@ -43,11 +72,39 @@ def test_query_arguments():
assert q_args['installed'] is True
assert q_args['known'] is any
assert q_args['explicit'] is any
+
# Check that explicit works correctly
args.explicit = True
q_args = query_arguments(args)
assert q_args['explicit'] is True
+
args.explicit = False
args.implicit = True
q_args = query_arguments(args)
assert q_args['explicit'] is False
+
+
+@pytest.mark.usefixtures('database', 'mock_display')
+class TestFindWithTags(object):
+
+ def test_tag1(self, parser, specs):
+
+ args = parser.parse_args(['--tags', 'tag1'])
+ spack.cmd.find.find(parser, args)
+
+ assert len(specs) == 2
+ assert 'mpich' in [x.name for x in specs]
+ assert 'mpich2' in [x.name for x in specs]
+
+ def test_tag2(self, parser, specs):
+ args = parser.parse_args(['--tags', 'tag2'])
+ spack.cmd.find.find(parser, args)
+
+ assert len(specs) == 1
+ assert 'mpich' in [x.name for x in specs]
+
+ def test_tag2_tag3(self, parser, specs):
+ args = parser.parse_args(['--tags', 'tag2', '--tags', 'tag3'])
+ spack.cmd.find.find(parser, args)
+
+ assert len(specs) == 0
diff --git a/lib/spack/spack/test/cmd/flake8.py b/lib/spack/spack/test/cmd/flake8.py
new file mode 100644
index 0000000000..632351601d
--- /dev/null
+++ b/lib/spack/spack/test/cmd/flake8.py
@@ -0,0 +1,94 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import argparse
+import os
+import pytest
+import sys
+
+from llnl.util.filesystem import FileFilter
+
+import spack
+from spack.cmd.flake8 import flake8, setup_parser, changed_files
+from spack.repository import Repo
+from spack.util.executable import which
+
+
+@pytest.fixture(scope='module')
+def parser():
+ """Returns the parser for the ``flake8`` command"""
+ parser = argparse.ArgumentParser()
+ setup_parser(parser)
+ return parser
+
+
+@pytest.fixture(scope='module')
+def flake8_package():
+ """Flake8 only checks files that have been modified.
+ This fixture makes a small change to the ``flake8``
+ mock package, yields the filename, then undoes the
+ change on cleanup.
+ """
+ repo = Repo(spack.mock_packages_path)
+ filename = repo.filename_for_package_name('flake8')
+ package = FileFilter(filename)
+
+ # Make the change
+ package.filter("state = 'unmodified'", "state = 'modified'", string=True)
+
+ yield filename
+
+ # Undo the change
+ package.filter("state = 'modified'", "state = 'unmodified'", string=True)
+
+
+def test_changed_files(parser, flake8_package):
+ args = parser.parse_args()
+
+ # changed_files returns file paths relative to the root
+ # directory of Spack. Convert to absolute file paths.
+ files = changed_files(args)
+ files = [os.path.join(spack.spack_root, path) for path in files]
+
+ # There will likely be other files that have changed
+ # when these tests are run
+ assert flake8_package in files
+
+
+# As of flake8 3.0.0, Python 2.6 and 3.3 are no longer supported
+# http://flake8.pycqa.org/en/latest/release-notes/3.0.0.html
+@pytest.mark.skipif(
+ sys.version_info[:2] <= (2, 6) or
+ (3, 0) <= sys.version_info[:2] <= (3, 3),
+ reason='flake8 no longer supports Python 2.6 or 3.3 and older')
+@pytest.mark.skipif(not which('flake8'), reason='flake8 is not installed.')
+def test_flake8(parser, flake8_package):
+ # Only test the flake8_package that we modified
+ # Otherwise, the unit tests would fail every time
+ # the flake8 tests fail
+ args = parser.parse_args([flake8_package])
+ flake8(parser, args)
+ # Get even more coverage
+ args = parser.parse_args(['--output', '--root-relative', flake8_package])
+ flake8(parser, args)
diff --git a/lib/spack/spack/test/cmd/gpg.py b/lib/spack/spack/test/cmd/gpg.py
new file mode 100644
index 0000000000..ef2f64211a
--- /dev/null
+++ b/lib/spack/spack/test/cmd/gpg.py
@@ -0,0 +1,154 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+import pytest
+import spack
+import spack.util.gpg as gpg_util
+from spack.main import SpackCommand
+from spack.util.executable import ProcessError
+
+
+@pytest.fixture(scope='function')
+def testing_gpg_directory(tmpdir):
+ old_gpg_path = gpg_util.GNUPGHOME
+ gpg_util.GNUPGHOME = str(tmpdir.join('gpg'))
+ yield
+ gpg_util.GNUPGHOME = old_gpg_path
+
+
+@pytest.fixture(scope='function')
+def gpg():
+ return SpackCommand('gpg')
+
+
+def has_gnupg2():
+ try:
+ gpg_util.Gpg.gpg()('--version', output=os.devnull)
+ return True
+ except Exception:
+ return False
+
+
+@pytest.mark.skipif(not has_gnupg2(),
+ reason='These tests require gnupg2')
+def test_gpg(gpg, tmpdir, testing_gpg_directory):
+ # Verify a file with an empty keyring.
+ with pytest.raises(ProcessError):
+ gpg('verify', os.path.join(spack.mock_gpg_data_path, 'content.txt'))
+
+ # Import the default key.
+ gpg('init', '--from', spack.mock_gpg_keys_path)
+
+ # List the keys.
+ # TODO: Test the output here.
+ gpg('list', '--trusted')
+ gpg('list', '--signing')
+
+ # Verify the file now that the key has been trusted.
+ gpg('verify', os.path.join(spack.mock_gpg_data_path, 'content.txt'))
+
+ # Untrust the default key.
+ gpg('untrust', 'Spack testing')
+
+ # Now that the key is untrusted, verification should fail.
+ with pytest.raises(ProcessError):
+ gpg('verify', os.path.join(spack.mock_gpg_data_path, 'content.txt'))
+
+ # Create a file to test signing.
+ test_path = tmpdir.join('to-sign.txt')
+ with open(str(test_path), 'w+') as fout:
+ fout.write('Test content for signing.\n')
+
+ # Signing without a private key should fail.
+ with pytest.raises(RuntimeError) as exc_info:
+ gpg('sign', str(test_path))
+ assert exc_info.value.args[0] == 'no signing keys are available'
+
+ # Create a key for use in the tests.
+ keypath = tmpdir.join('testing-1.key')
+ gpg('create',
+ '--comment', 'Spack testing key',
+ '--export', str(keypath),
+ 'Spack testing 1',
+ 'spack@googlegroups.com')
+ keyfp = gpg_util.Gpg.signing_keys()[0]
+
+ # List the keys.
+ # TODO: Test the output here.
+ gpg('list')
+ gpg('list', '--trusted')
+ gpg('list', '--signing')
+
+ # Signing with the default (only) key.
+ gpg('sign', str(test_path))
+
+ # Verify the file we just verified.
+ gpg('verify', str(test_path))
+
+ # Export the key for future use.
+ export_path = tmpdir.join('export.testing.key')
+ gpg('export', str(export_path))
+
+ # Create a second key for use in the tests.
+ gpg('create',
+ '--comment', 'Spack testing key',
+ 'Spack testing 2',
+ 'spack@googlegroups.com')
+
+ # List the keys.
+ # TODO: Test the output here.
+ gpg('list', '--trusted')
+ gpg('list', '--signing')
+
+ test_path = tmpdir.join('to-sign-2.txt')
+ with open(str(test_path), 'w+') as fout:
+ fout.write('Test content for signing.\n')
+
+ # Signing with multiple signing keys is ambiguous.
+ with pytest.raises(RuntimeError) as exc_info:
+ gpg('sign', str(test_path))
+ assert exc_info.value.args[0] == \
+ 'multiple signing keys are available; please choose one'
+
+ # Signing with a specified key.
+ gpg('sign', '--key', keyfp, str(test_path))
+
+ # Untrusting signing keys needs a flag.
+ with pytest.raises(ProcessError):
+ gpg('untrust', 'Spack testing 1')
+
+ # Untrust the key we created.
+ gpg('untrust', '--signing', keyfp)
+
+ # Verification should now fail.
+ with pytest.raises(ProcessError):
+ gpg('verify', str(test_path))
+
+ # Trust the exported key.
+ gpg('trust', str(export_path))
+
+ # Verification should now succeed again.
+ gpg('verify', str(test_path))
diff --git a/lib/spack/spack/test/cmd/info.py b/lib/spack/spack/test/cmd/info.py
new file mode 100644
index 0000000000..c406f6f78e
--- /dev/null
+++ b/lib/spack/spack/test/cmd/info.py
@@ -0,0 +1,92 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import argparse
+
+import pytest
+import spack.cmd.info
+
+from spack.main import SpackCommand
+
+info = SpackCommand('info')
+
+
+@pytest.fixture(scope='module')
+def parser():
+ """Returns the parser for the module command"""
+ prs = argparse.ArgumentParser()
+ spack.cmd.info.setup_parser(prs)
+ return prs
+
+
+@pytest.fixture()
+def info_lines():
+ lines = []
+ return lines
+
+
+@pytest.fixture()
+def mock_print(monkeypatch, info_lines):
+
+ def _print(*args):
+ info_lines.extend(args)
+
+ monkeypatch.setattr(spack.cmd.info.color, 'cprint', _print, raising=False)
+
+
+@pytest.mark.parametrize('pkg', [
+ 'openmpi',
+ 'trilinos',
+ 'boost',
+ 'python',
+ 'dealii'
+])
+def test_it_just_runs(pkg):
+ info(pkg)
+
+
+@pytest.mark.parametrize('pkg_query', [
+ 'hdf5',
+ 'cloverleaf3d',
+ 'trilinos'
+])
+@pytest.mark.usefixtures('mock_print')
+def test_info_fields(pkg_query, parser, info_lines):
+
+ expected_fields = (
+ 'Description:',
+ 'Homepage:',
+ 'Safe versions:',
+ 'Variants:',
+ 'Installation Phases:',
+ 'Virtual Packages:',
+ 'Tags:'
+ )
+
+ args = parser.parse_args([pkg_query])
+ spack.cmd.info.info(parser, args)
+
+ for text in expected_fields:
+ match = [x for x in info_lines if text in x]
+ assert match
diff --git a/lib/spack/spack/test/cmd/install.py b/lib/spack/spack/test/cmd/install.py
index 304eb04a55..7bd6ebc160 100644
--- a/lib/spack/spack/test/cmd/install.py
+++ b/lib/spack/spack/test/cmd/install.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,194 +22,215 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import StringIO
import argparse
-import codecs
-import collections
-import contextlib
-import unittest
+import os
+import filecmp
+
+import pytest
+
+import llnl.util.filesystem as fs
-import llnl.util.filesystem
import spack
-import spack.cmd
-import spack.cmd.install as install
+import spack.cmd.install
+from spack.spec import Spec
+from spack.main import SpackCommand
+
+install = SpackCommand('install')
+
+
+@pytest.fixture(scope='module')
+def parser():
+ """Returns the parser for the module command"""
+ parser = argparse.ArgumentParser()
+ spack.cmd.install.setup_parser(parser)
+ return parser
+
+
+@pytest.fixture()
+def noop_install(monkeypatch):
+
+ def noop(*args, **kwargs):
+ return
+
+ monkeypatch.setattr(spack.package.PackageBase, 'do_install', noop)
+
+
+def test_install_package_and_dependency(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+
+ with tmpdir.as_cwd():
+ install('--log-format=junit', '--log-file=test.xml', 'libdwarf')
+
+ files = tmpdir.listdir()
+ filename = tmpdir.join('test.xml')
+ assert filename in files
+
+ content = filename.open().read()
+ assert 'tests="2"' in content
+ assert 'failures="0"' in content
+ assert 'errors="0"' in content
+
+ s = Spec('libdwarf').concretized()
+ assert not spack.repo.get(s).stage.created
+
+
+@pytest.mark.usefixtures('noop_install', 'builtin_mock', 'config')
+def test_install_runtests():
+ assert not spack.package_testing._test_all
+ assert not spack.package_testing.packages_to_test
+
+ install('--test=root', 'dttop')
+ assert not spack.package_testing._test_all
+ assert spack.package_testing.packages_to_test == set(['dttop'])
+
+ spack.package_testing.clear()
+
+ install('--test=all', 'a')
+ assert spack.package_testing._test_all
+ assert not spack.package_testing.packages_to_test
-FILE_REGISTRY = collections.defaultdict(StringIO.StringIO)
+ spack.package_testing.clear()
+ install('--run-tests', 'a')
+ assert spack.package_testing._test_all
+ assert not spack.package_testing.packages_to_test
-# Monkey-patch open to write module files to a StringIO instance
-@contextlib.contextmanager
-def mock_open(filename, mode, *args):
- if not mode == 'wb':
- message = 'test.test_install : unexpected opening mode for mock_open'
- raise RuntimeError(message)
+ spack.package_testing.clear()
- FILE_REGISTRY[filename] = StringIO.StringIO()
+ assert not spack.package_testing._test_all
+ assert not spack.package_testing.packages_to_test
- try:
- yield FILE_REGISTRY[filename]
- finally:
- handle = FILE_REGISTRY[filename]
- FILE_REGISTRY[filename] = handle.getvalue()
- handle.close()
+def test_install_package_already_installed(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
-class MockSpec(object):
+ with tmpdir.as_cwd():
+ install('libdwarf')
+ install('--log-format=junit', '--log-file=test.xml', 'libdwarf')
- def __init__(self, name, version, hashStr=None):
- self._dependencies = {}
- self.name = name
- self.version = version
- self.hash = hashStr if hashStr else hash((name, version))
+ files = tmpdir.listdir()
+ filename = tmpdir.join('test.xml')
+ assert filename in files
- def _deptype_norm(self, deptype):
- if deptype is None:
- return spack.alldeps
- # Force deptype to be a tuple so that we can do set intersections.
- if isinstance(deptype, str):
- return (deptype,)
- return deptype
+ content = filename.open().read()
+ assert 'tests="2"' in content
+ assert 'failures="0"' in content
+ assert 'errors="0"' in content
- def _find_deps(self, where, deptype):
- deptype = self._deptype_norm(deptype)
+ skipped = [line for line in content.split('\n') if 'skipped' in line]
+ assert len(skipped) == 2
- return [dep.spec
- for dep in where.values()
- if deptype and any(d in deptype for d in dep.deptypes)]
- def dependencies(self, deptype=None):
- return self._find_deps(self._dependencies, deptype)
+@pytest.mark.parametrize('arguments,expected', [
+ ([], spack.dirty), # The default read from configuration file
+ (['--clean'], False),
+ (['--dirty'], True),
+])
+def test_install_dirty_flag(parser, arguments, expected):
+ args = parser.parse_args(arguments)
+ assert args.dirty == expected
- def dependents(self, deptype=None):
- return self._find_deps(self._dependents, deptype)
- def traverse(self, order=None):
- for _, spec in self._dependencies.items():
- yield spec.spec
- yield self
+def test_package_output(tmpdir, capsys, install_mockery, mock_fetch):
+ """Ensure output printed from pkgs is captured by output redirection."""
+ # we can't use output capture here because it interferes with Spack's
+ # logging. TODO: see whether we can get multiple log_outputs to work
+ # when nested AND in pytest
+ spec = Spec('printing-package').concretized()
+ pkg = spec.package
+ pkg.do_install(verbose=True)
- def dag_hash(self):
- return self.hash
+ log_file = os.path.join(spec.prefix, '.spack', 'build.out')
+ with open(log_file) as f:
+ out = f.read()
- @property
- def short_spec(self):
- return '-'.join([self.name, str(self.version), str(self.hash)])
+ # make sure that output from the actual package file appears in the
+ # right place in the build log.
+ assert "BEFORE INSTALL\n==> './configure'" in out
+ assert "'install'\nAFTER INSTALL" in out
-class MockPackage(object):
+@pytest.mark.disable_clean_stage_check
+def test_install_output_on_build_error(builtin_mock, mock_archive, mock_fetch,
+ config, install_mockery, capfd):
+ # capfd interferes with Spack's capturing
+ with capfd.disabled():
+ out = install('build-error', fail_on_error=False)
+ assert isinstance(install.error, spack.build_environment.ChildError)
+ assert install.error.name == 'ProcessError'
+ assert 'configure: error: in /path/to/some/file:' in out
+ assert 'configure: error: cannot run C compiled programs.' in out
+
- def __init__(self, spec, buildLogPath):
- self.name = spec.name
- self.spec = spec
- self.installed = False
- self.build_log_path = buildLogPath
+@pytest.mark.disable_clean_stage_check
+def test_install_output_on_python_error(builtin_mock, mock_archive, mock_fetch,
+ config, install_mockery):
+ out = install('failing-build', fail_on_error=False)
+ assert isinstance(install.error, spack.build_environment.ChildError)
+ assert install.error.name == 'InstallError'
+ assert 'raise InstallError("Expected failure.")' in out
- def do_install(self, *args, **kwargs):
- for x in self.spec.dependencies():
- x.package.do_install(*args, **kwargs)
- self.installed = True
+@pytest.mark.disable_clean_stage_check
+def test_install_with_source(
+ builtin_mock, mock_archive, mock_fetch, config, install_mockery):
+ """Verify that source has been copied into place."""
+ install('--source', '--keep-stage', 'trivial-install-test-package')
+ spec = Spec('trivial-install-test-package').concretized()
+ src = os.path.join(
+ spec.prefix.share, 'trivial-install-test-package', 'src')
+ assert filecmp.cmp(os.path.join(mock_archive.path, 'configure'),
+ os.path.join(src, 'configure'))
-class MockPackageDb(object):
-
- def __init__(self, init=None):
- self.specToPkg = {}
- if init:
- self.specToPkg.update(init)
-
- def get(self, spec):
- return self.specToPkg[spec]
-
-
-def mock_fetch_log(path):
- return []
-
-
-specX = MockSpec('X', '1.2.0')
-specY = MockSpec('Y', '2.3.8')
-specX._dependencies['Y'] = spack.spec.DependencySpec(
- specX, specY, spack.alldeps)
-pkgX = MockPackage(specX, 'logX')
-pkgY = MockPackage(specY, 'logY')
-specX.package = pkgX
-specY.package = pkgY
-
-
-# TODO: add test(s) where Y fails to install
-class InstallTestJunitLog(unittest.TestCase):
- """Tests test-install where X->Y"""
-
- def setUp(self):
- super(InstallTestJunitLog, self).setUp()
- install.PackageBase = MockPackage
- # Monkey patch parse specs
-
- def monkey_parse_specs(x, concretize):
- if x == ['X']:
- return [specX]
- elif x == ['Y']:
- return [specY]
- return []
-
- self.parse_specs = spack.cmd.parse_specs
- spack.cmd.parse_specs = monkey_parse_specs
-
- # Monkey patch os.mkdirp
- self.mkdirp = llnl.util.filesystem.mkdirp
- llnl.util.filesystem.mkdirp = lambda x: True
-
- # Monkey patch open
- self.codecs_open = codecs.open
- codecs.open = mock_open
-
- # Clean FILE_REGISTRY
- FILE_REGISTRY.clear()
-
- pkgX.installed = False
- pkgY.installed = False
-
- # Monkey patch pkgDb
- self.saved_db = spack.repo
- pkgDb = MockPackageDb({specX: pkgX, specY: pkgY})
- spack.repo = pkgDb
-
- def tearDown(self):
- # Remove the monkey patched test_install.open
- codecs.open = self.codecs_open
-
- # Remove the monkey patched os.mkdir
- llnl.util.filesystem.mkdirp = self.mkdirp
- del self.mkdirp
-
- # Remove the monkey patched parse_specs
- spack.cmd.parse_specs = self.parse_specs
- del self.parse_specs
- super(InstallTestJunitLog, self).tearDown()
-
- spack.repo = self.saved_db
-
- def test_installing_both(self):
- parser = argparse.ArgumentParser()
- install.setup_parser(parser)
- args = parser.parse_args(['--log-format=junit', 'X'])
- install.install(parser, args)
- self.assertEqual(len(FILE_REGISTRY), 1)
- for _, content in FILE_REGISTRY.items():
- self.assertTrue('tests="2"' in content)
- self.assertTrue('failures="0"' in content)
- self.assertTrue('errors="0"' in content)
-
- def test_dependency_already_installed(self):
- pkgX.installed = True
- pkgY.installed = True
- parser = argparse.ArgumentParser()
- install.setup_parser(parser)
- args = parser.parse_args(['--log-format=junit', 'X'])
- install.install(parser, args)
- self.assertEqual(len(FILE_REGISTRY), 1)
- for _, content in FILE_REGISTRY.items():
- self.assertTrue('tests="2"' in content)
- self.assertTrue('failures="0"' in content)
- self.assertTrue('errors="0"' in content)
- self.assertEqual(
- sum('skipped' in line for line in content.split('\n')), 2)
+
+@pytest.mark.disable_clean_stage_check
+def test_show_log_on_error(builtin_mock, mock_archive, mock_fetch,
+ config, install_mockery, capfd):
+ """Make sure --show-log-on-error works."""
+ with capfd.disabled():
+ out = install('--show-log-on-error', 'build-error',
+ fail_on_error=False)
+ assert isinstance(install.error, spack.build_environment.ChildError)
+ assert install.error.pkg.name == 'build-error'
+ assert 'Full build log:' in out
+
+ errors = [line for line in out.split('\n')
+ if 'configure: error: cannot run C compiled programs' in line]
+ assert len(errors) == 2
+
+
+def test_install_overwrite(
+ builtin_mock, mock_archive, mock_fetch, config, install_mockery
+):
+ # It's not possible to overwrite something that is not yet installed
+ with pytest.raises(AssertionError):
+ install('--overwrite', 'libdwarf')
+
+ # --overwrite requires a single spec
+ with pytest.raises(AssertionError):
+ install('--overwrite', 'libdwarf', 'libelf')
+
+ # Try to install a spec and then to reinstall it.
+ spec = Spec('libdwarf')
+ spec.concretize()
+
+ install('libdwarf')
+
+ assert os.path.exists(spec.prefix)
+ expected_md5 = fs.hash_directory(spec.prefix)
+
+ # Modify the first installation to be sure the content is not the same
+ # as the one after we reinstalled
+ with open(os.path.join(spec.prefix, 'only_in_old'), 'w') as f:
+ f.write('This content is here to differentiate installations.')
+
+ bad_md5 = fs.hash_directory(spec.prefix)
+
+ assert bad_md5 != expected_md5
+
+ install('--overwrite', '-y', 'libdwarf')
+ assert os.path.exists(spec.prefix)
+ assert fs.hash_directory(spec.prefix) == expected_md5
+ assert fs.hash_directory(spec.prefix) != bad_md5
diff --git a/lib/spack/spack/test/cmd/list.py b/lib/spack/spack/test/cmd/list.py
new file mode 100644
index 0000000000..9fe335a6e3
--- /dev/null
+++ b/lib/spack/spack/test/cmd/list.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/spack/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
+##############################################################################
+import argparse
+
+import pytest
+import spack.cmd.list
+
+
+@pytest.fixture(scope='module')
+def parser():
+ """Returns the parser for the module command"""
+ prs = argparse.ArgumentParser()
+ spack.cmd.list.setup_parser(prs)
+ return prs
+
+
+@pytest.fixture()
+def pkg_names():
+ pkg_names = []
+ return pkg_names
+
+
+@pytest.fixture()
+def mock_name_only(monkeypatch, pkg_names):
+
+ def name_only(x):
+ pkg_names.extend(x)
+
+ monkeypatch.setattr(spack.cmd.list, 'name_only', name_only)
+ monkeypatch.setitem(spack.cmd.list.formatters, 'name_only', name_only)
+
+
+@pytest.mark.usefixtures('mock_name_only')
+class TestListCommand(object):
+
+ def test_list_without_filters(self, parser, pkg_names):
+
+ args = parser.parse_args([])
+ spack.cmd.list.list(parser, args)
+
+ assert pkg_names
+ assert 'cloverleaf3d' in pkg_names
+ assert 'hdf5' in pkg_names
+
+ def test_list_with_filters(self, parser, pkg_names):
+ args = parser.parse_args(['--tags', 'proxy-app'])
+ spack.cmd.list.list(parser, args)
+
+ assert pkg_names
+ assert 'cloverleaf3d' in pkg_names
+ assert 'hdf5' not in pkg_names
diff --git a/lib/spack/spack/test/cmd/module.py b/lib/spack/spack/test/cmd/module.py
index 03ce1ef206..0aa08b9aa6 100644
--- a/lib/spack/spack/test/cmd/module.py
+++ b/lib/spack/spack/test/cmd/module.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,8 +31,14 @@ import spack.modules as modules
def _get_module_files(args):
- return [modules.module_types[args.module_type](spec).file_name
- for spec in args.specs()]
+
+ files = []
+ specs = args.specs()
+
+ for module_type in args.module_type:
+ writer_cls = modules.module_types[module_type]
+ files.extend([writer_cls(spec).layout.filename for spec in specs])
+ return files
@pytest.fixture(scope='module')
@@ -45,9 +51,11 @@ def parser():
@pytest.fixture(
params=[
- ['rm', 'doesnotexist'], # Try to remove a non existing module [tcl]
+ ['rm', 'doesnotexist'], # Try to remove a non existing module
['find', 'mpileaks'], # Try to find a module with multiple matches
['find', 'doesnotexist'], # Try to find a module with no matches
+ # Try to find a module specifying more than one type
+ ['find', '-m', 'tcl', '-m', 'lmod', 'libelf'],
]
)
def failure_args(request):
@@ -67,29 +75,39 @@ def test_exit_with_failure(database, parser, failure_args):
def test_remove_and_add_tcl(database, parser):
+ """Tests adding and removing a tcl module file."""
+
# Remove existing modules [tcl]
- args = parser.parse_args(['rm', '-y', 'mpileaks'])
+ args = parser.parse_args(['rm', '-y', '-m', 'tcl', 'mpileaks'])
module_files = _get_module_files(args)
+
for item in module_files:
assert os.path.exists(item)
+
module.module(parser, args)
+
for item in module_files:
assert not os.path.exists(item)
# Add them back [tcl]
- args = parser.parse_args(['refresh', '-y', 'mpileaks'])
+ args = parser.parse_args(['refresh', '-y', '-m', 'tcl', 'mpileaks'])
module.module(parser, args)
+
for item in module_files:
assert os.path.exists(item)
def test_find(database, parser):
- # Try to find a module
- args = parser.parse_args(['find', 'libelf'])
+ """Tests the 'spack module find' under a few common scenarios."""
+
+ # Try to find it for tcl module files
+ args = parser.parse_args(['find', '--module-type', 'tcl', 'libelf'])
module.module(parser, args)
def test_remove_and_add_dotkit(database, parser):
+ """Tests adding and removing a dotkit module file."""
+
# Remove existing modules [dotkit]
args = parser.parse_args(['rm', '-y', '-m', 'dotkit', 'mpileaks'])
module_files = _get_module_files(args)
diff --git a/lib/spack/spack/test/cmd/python.py b/lib/spack/spack/test/cmd/python.py
new file mode 100644
index 0000000000..000535af8e
--- /dev/null
+++ b/lib/spack/spack/test/cmd/python.py
@@ -0,0 +1,33 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import spack
+from spack.main import SpackCommand
+
+python = SpackCommand('python')
+
+
+def test_python():
+ out = python('-c', 'import spack; print(spack.spack_version)')
+ assert out.strip() == str(spack.spack_version)
diff --git a/lib/spack/spack/test/cmd/test_compiler_cmd.py b/lib/spack/spack/test/cmd/test_compiler_cmd.py
index 647404e6da..e7a2186344 100644
--- a/lib/spack/spack/test/cmd/test_compiler_cmd.py
+++ b/lib/spack/spack/test/cmd/test_compiler_cmd.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -71,12 +71,12 @@ class TestCompilerCommand(object):
all=True, compiler_spec='gcc@4.5.0', add_paths=[], scope=None
)
spack.cmd.compiler.compiler_remove(args)
- compilers = spack.compilers.all_compilers()
+ compilers = spack.compilers.all_compiler_specs()
assert spack.spec.CompilerSpec("gcc@4.5.0") not in compilers
def test_compiler_add(self, mock_compiler_dir):
# Compilers available by default.
- old_compilers = set(spack.compilers.all_compilers())
+ old_compilers = set(spack.compilers.all_compiler_specs())
args = spack.util.pattern.Bunch(
all=None,
@@ -87,8 +87,6 @@ class TestCompilerCommand(object):
spack.cmd.compiler.compiler_find(args)
# Ensure new compiler is in there
- new_compilers = set(spack.compilers.all_compilers())
+ new_compilers = set(spack.compilers.all_compiler_specs())
new_compiler = new_compilers - old_compilers
- assert new_compiler
- c = new_compiler.pop()
- assert c.version == Version(test_version)
+ assert any(c.version == Version(test_version) for c in new_compiler)
diff --git a/lib/spack/spack/test/cmd/uninstall.py b/lib/spack/spack/test/cmd/uninstall.py
index bfbb9b8148..096dfe74e4 100644
--- a/lib/spack/spack/test/cmd/uninstall.py
+++ b/lib/spack/spack/test/cmd/uninstall.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,7 +24,9 @@
##############################################################################
import pytest
import spack.store
-import spack.cmd.uninstall
+from spack.main import SpackCommand, SpackCommandError
+
+uninstall = SpackCommand('uninstall')
class MockArgs(object):
@@ -37,23 +39,24 @@ class MockArgs(object):
self.yes_to_all = True
-def test_uninstall(database):
- parser = None
- uninstall = spack.cmd.uninstall.uninstall
- # Multiple matches
- args = MockArgs(['mpileaks'])
- with pytest.raises(SystemExit):
- uninstall(parser, args)
- # Installed dependents
- args = MockArgs(['libelf'])
- with pytest.raises(SystemExit):
- uninstall(parser, args)
- # Recursive uninstall
- args = MockArgs(['callpath'], all=True, dependents=True)
- uninstall(parser, args)
+def test_multiple_matches(database):
+ """Test unable to uninstall when multiple matches."""
+ with pytest.raises(SpackCommandError):
+ uninstall('-y', 'mpileaks')
+
+
+def test_installed_dependents(database):
+ """Test can't uninstall when ther are installed dependents."""
+ with pytest.raises(SpackCommandError):
+ uninstall('-y', 'libelf')
+
+
+def test_recursive_uninstall(database):
+ """Test recursive uninstall."""
+ uninstall('-y', '-a', '--dependents', 'callpath')
all_specs = spack.store.layout.all_specs()
- assert len(all_specs) == 7
+ assert len(all_specs) == 8
# query specs with multiple configurations
mpileaks_specs = [s for s in all_specs if s.satisfies('mpileaks')]
callpath_specs = [s for s in all_specs if s.satisfies('callpath')]
diff --git a/lib/spack/spack/test/cmd/url.py b/lib/spack/spack/test/cmd/url.py
new file mode 100644
index 0000000000..84fcf90135
--- /dev/null
+++ b/lib/spack/spack/test/cmd/url.py
@@ -0,0 +1,136 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import re
+import pytest
+from spack.url import UndetectableVersionError
+from spack.main import SpackCommand
+from spack.cmd.url import name_parsed_correctly, version_parsed_correctly
+from spack.cmd.url import url_summary
+
+url = SpackCommand('url')
+
+
+class MyPackage:
+ def __init__(self, name, versions):
+ self.name = name
+ self.versions = versions
+
+
+def test_name_parsed_correctly():
+ # Expected True
+ assert name_parsed_correctly(MyPackage('netcdf', []), 'netcdf')
+ assert name_parsed_correctly(MyPackage('r-devtools', []), 'devtools')
+ assert name_parsed_correctly(MyPackage('py-numpy', []), 'numpy')
+ assert name_parsed_correctly(MyPackage('octave-splines', []), 'splines')
+ assert name_parsed_correctly(MyPackage('imagemagick', []), 'ImageMagick') # noqa
+ assert name_parsed_correctly(MyPackage('th-data', []), 'TH.data')
+
+ # Expected False
+ assert not name_parsed_correctly(MyPackage('', []), 'hdf5')
+ assert not name_parsed_correctly(MyPackage('hdf5', []), '')
+ assert not name_parsed_correctly(MyPackage('yaml-cpp', []), 'yamlcpp')
+ assert not name_parsed_correctly(MyPackage('yamlcpp', []), 'yaml-cpp')
+ assert not name_parsed_correctly(MyPackage('r-py-parser', []), 'parser')
+ assert not name_parsed_correctly(MyPackage('oce', []), 'oce-0.18.0') # noqa
+
+
+def test_version_parsed_correctly():
+ # Expected True
+ assert version_parsed_correctly(MyPackage('', ['1.2.3']), '1.2.3')
+ assert version_parsed_correctly(MyPackage('', ['5.4a', '5.4b']), '5.4a')
+ assert version_parsed_correctly(MyPackage('', ['5.4a', '5.4b']), '5.4b')
+ assert version_parsed_correctly(MyPackage('', ['1.63.0']), '1_63_0')
+ assert version_parsed_correctly(MyPackage('', ['0.94h']), '094h')
+
+ # Expected False
+ assert not version_parsed_correctly(MyPackage('', []), '1.2.3')
+ assert not version_parsed_correctly(MyPackage('', ['1.2.3']), '')
+ assert not version_parsed_correctly(MyPackage('', ['1.2.3']), '1.2.4')
+ assert not version_parsed_correctly(MyPackage('', ['3.4a']), '3.4')
+ assert not version_parsed_correctly(MyPackage('', ['3.4']), '3.4b')
+ assert not version_parsed_correctly(MyPackage('', ['0.18.0']), 'oce-0.18.0') # noqa
+
+
+def test_url_parse():
+ url('parse', 'http://zlib.net/fossils/zlib-1.2.10.tar.gz')
+
+
+def test_url_with_no_version_fails():
+ # No version in URL
+ with pytest.raises(UndetectableVersionError):
+ url('parse', 'http://www.netlib.org/voronoi/triangle.zip')
+
+
+def test_url_list():
+ out = url('list')
+ total_urls = len(out.split('\n'))
+
+ # The following two options should not change the number of URLs printed.
+ out = url('list', '--color', '--extrapolation')
+ colored_urls = len(out.split('\n'))
+ assert colored_urls == total_urls
+
+ # The following options should print fewer URLs than the default.
+ # If they print the same number of URLs, something is horribly broken.
+ # If they say we missed 0 URLs, something is probably broken too.
+ out = url('list', '--incorrect-name')
+ incorrect_name_urls = len(out.split('\n'))
+ assert 0 < incorrect_name_urls < total_urls
+
+ out = url('list', '--incorrect-version')
+ incorrect_version_urls = len(out.split('\n'))
+ assert 0 < incorrect_version_urls < total_urls
+
+ out = url('list', '--correct-name')
+ correct_name_urls = len(out.split('\n'))
+ assert 0 < correct_name_urls < total_urls
+
+ out = url('list', '--correct-version')
+ correct_version_urls = len(out.split('\n'))
+ assert 0 < correct_version_urls < total_urls
+
+
+def test_url_summary():
+ """Test the URL summary command."""
+ # test url_summary, the internal function that does the work
+ (total_urls, correct_names, correct_versions,
+ name_count_dict, version_count_dict) = url_summary(None)
+
+ assert 0 < correct_names <= sum(name_count_dict.values()) <= total_urls # noqa
+ assert 0 < correct_versions <= sum(version_count_dict.values()) <= total_urls # noqa
+
+ # make sure it agrees with the actual command.
+ out = url('summary')
+ out_total_urls = int(
+ re.search(r'Total URLs found:\s*(\d+)', out).group(1))
+ assert out_total_urls == total_urls
+
+ out_correct_names = int(
+ re.search(r'Names correctly parsed:\s*(\d+)', out).group(1))
+ assert out_correct_names == correct_names
+
+ out_correct_versions = int(
+ re.search(r'Versions correctly parsed:\s*(\d+)', out).group(1))
+ assert out_correct_versions == correct_versions
diff --git a/lib/spack/spack/test/cmd/view.py b/lib/spack/spack/test/cmd/view.py
new file mode 100644
index 0000000000..9ab3e528d2
--- /dev/null
+++ b/lib/spack/spack/test/cmd/view.py
@@ -0,0 +1,165 @@
+##############################################################################
+# 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/spack/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.main import SpackCommand
+import os.path
+import pytest
+
+activate = SpackCommand('activate')
+extensions = SpackCommand('extensions')
+install = SpackCommand('install')
+view = SpackCommand('view')
+
+
+@pytest.mark.parametrize('cmd', ['hardlink', 'symlink', 'hard', 'add'])
+def test_view_link_type(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery, cmd):
+ install('libdwarf')
+ viewpath = str(tmpdir.mkdir('view_{0}'.format(cmd)))
+ view(cmd, viewpath, 'libdwarf')
+ package_prefix = os.path.join(viewpath, 'libdwarf')
+ assert os.path.exists(package_prefix)
+ assert os.path.islink(package_prefix) == (not cmd.startswith('hard'))
+
+
+def test_view_external(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('externaltool')
+ viewpath = str(tmpdir.mkdir('view'))
+ output = view('symlink', viewpath, 'externaltool')
+ assert 'Skipping external package: externaltool' in output
+
+
+def test_view_extension(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ install('extension1@2.0')
+ install('extension2@1.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ view('symlink', viewpath, 'extension1@1.0')
+ all_installed = extensions('--show', 'installed', 'extendee')
+ assert 'extension1@1.0' in all_installed
+ assert 'extension1@2.0' in all_installed
+ assert 'extension2@1.0' in all_installed
+ global_activated = extensions('--show', 'activated', 'extendee')
+ assert 'extension1@1.0' not in global_activated
+ assert 'extension1@2.0' not in global_activated
+ assert 'extension2@1.0' not in global_activated
+ view_activated = extensions('--show', 'activated',
+ '-v', viewpath,
+ 'extendee')
+ assert 'extension1@1.0' in view_activated
+ assert 'extension1@2.0' not in view_activated
+ assert 'extension2@1.0' not in view_activated
+ assert os.path.exists(os.path.join(viewpath, 'bin', 'extension1'))
+
+
+def test_view_extension_remove(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ view('symlink', viewpath, 'extension1@1.0')
+ view('remove', viewpath, 'extension1@1.0')
+ all_installed = extensions('--show', 'installed', 'extendee')
+ assert 'extension1@1.0' in all_installed
+ global_activated = extensions('--show', 'activated', 'extendee')
+ assert 'extension1@1.0' not in global_activated
+ view_activated = extensions('--show', 'activated',
+ '-v', viewpath,
+ 'extendee')
+ assert 'extension1@1.0' not in view_activated
+ assert not os.path.exists(os.path.join(viewpath, 'bin', 'extension1'))
+
+
+def test_view_extension_conflict(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ install('extension1@2.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ view('symlink', viewpath, 'extension1@1.0')
+ output = view('symlink', viewpath, 'extension1@2.0')
+ assert 'Package conflict detected' in output
+
+
+def test_view_extension_conflict_ignored(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ install('extension1@2.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ view('symlink', viewpath, 'extension1@1.0')
+ view('symlink', viewpath, '-i', 'extension1@2.0')
+ with open(os.path.join(viewpath, 'bin', 'extension1'), 'r') as fin:
+ assert fin.read() == '1.0'
+
+
+def test_view_extension_global_activation(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ install('extension1@2.0')
+ install('extension2@1.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ view('symlink', viewpath, 'extension1@1.0')
+ activate('extension1@2.0')
+ activate('extension2@1.0')
+ all_installed = extensions('--show', 'installed', 'extendee')
+ assert 'extension1@1.0' in all_installed
+ assert 'extension1@2.0' in all_installed
+ assert 'extension2@1.0' in all_installed
+ global_activated = extensions('--show', 'activated', 'extendee')
+ assert 'extension1@1.0' not in global_activated
+ assert 'extension1@2.0' in global_activated
+ assert 'extension2@1.0' in global_activated
+ view_activated = extensions('--show', 'activated',
+ '-v', viewpath,
+ 'extendee')
+ assert 'extension1@1.0' in view_activated
+ assert 'extension1@2.0' not in view_activated
+ assert 'extension2@1.0' not in view_activated
+ assert os.path.exists(os.path.join(viewpath, 'bin', 'extension1'))
+ assert not os.path.exists(os.path.join(viewpath, 'bin', 'extension2'))
+
+
+def test_view_extendee_with_global_activations(
+ tmpdir, builtin_mock, mock_archive, mock_fetch, config,
+ install_mockery):
+ install('extendee')
+ install('extension1@1.0')
+ install('extension1@2.0')
+ install('extension2@1.0')
+ viewpath = str(tmpdir.mkdir('view'))
+ activate('extension1@2.0')
+ output = view('symlink', viewpath, 'extension1@1.0')
+ assert 'Error: Globally activated extensions cannot be used' in output
diff --git a/lib/spack/spack/test/compilers.py b/lib/spack/spack/test/compilers.py
new file mode 100644
index 0000000000..d172d56638
--- /dev/null
+++ b/lib/spack/spack/test/compilers.py
@@ -0,0 +1,69 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+from six import iteritems
+
+import spack.spec
+import spack.compilers as compilers
+
+
+@pytest.mark.usefixtures('config')
+class TestCompilers(object):
+
+ def test_get_compiler_duplicates(self):
+ # In this case there is only one instance of the specified compiler in
+ # the test configuration (so it is not actually a duplicate), but the
+ # method behaves the same.
+ cfg_file_to_duplicates = compilers.get_compiler_duplicates(
+ 'gcc@4.5.0', spack.spec.ArchSpec('cray-CNL-xeon'))
+ assert len(cfg_file_to_duplicates) == 1
+ cfg_file, duplicates = next(iteritems(cfg_file_to_duplicates))
+ assert len(duplicates) == 1
+
+ def test_all_compilers(self):
+ all_compilers = compilers.all_compilers()
+ filtered = [x for x in all_compilers if str(x.spec) == 'clang@3.3']
+ filtered = [x for x in filtered if x.operating_system == 'SuSE11']
+ assert len(filtered) == 1
+
+
+def test_compiler_flags_from_config_are_grouped():
+ compiler_entry = {
+ 'spec': 'intel@17.0.2',
+ 'operating_system': 'foo-os',
+ 'paths': {
+ 'cc': 'cc-path',
+ 'cxx': 'cxx-path',
+ 'fc': None,
+ 'f77': None
+ },
+ 'flags': {
+ 'cflags': '-O0 -foo-flag foo-val'
+ },
+ 'modules': None
+ }
+
+ compiler = compilers.compiler_from_config_entry(compiler_entry)
+ assert any(x == '-foo-flag foo-val' for x in compiler.flags['cflags'])
diff --git a/lib/spack/spack/test/concretize.py b/lib/spack/spack/test/concretize.py
index b7cad503a3..f0d5ae131f 100644
--- a/lib/spack/spack/test/concretize.py
+++ b/lib/spack/spack/test/concretize.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,6 +27,7 @@ import spack
import spack.architecture
from spack.concretize import find_spec
from spack.spec import Spec, CompilerSpec
+from spack.spec import ConflictsInSpecError, SpecError
from spack.version import ver
@@ -75,13 +76,17 @@ def check_concretize(abstract_spec):
# dag
'callpath', 'mpileaks', 'libelf',
# variant
- 'mpich+debug', 'mpich~debug', 'mpich debug=2', 'mpich',
+ 'mpich+debug', 'mpich~debug', 'mpich debug=True', 'mpich',
# compiler flags
'mpich cppflags="-O3"',
# with virtual
'mpileaks ^mpi', 'mpileaks ^mpi@:1.1', 'mpileaks ^mpi@2:',
'mpileaks ^mpi@2.1', 'mpileaks ^mpi@2.2', 'mpileaks ^mpi@2.2',
'mpileaks ^mpi@:1', 'mpileaks ^mpi@1.2:2'
+ # conflict not triggered
+ 'conflict',
+ 'conflict%clang~foo',
+ 'conflict-parent%gcc'
]
)
def spec(request):
@@ -89,6 +94,19 @@ def spec(request):
return request.param
+@pytest.fixture(
+ params=[
+ 'conflict%clang',
+ 'conflict%clang+foo',
+ 'conflict-parent%clang',
+ 'conflict-parent@0.9^conflict~foo'
+ ]
+)
+def conflict_spec(request):
+ """Spec to be concretized"""
+ return request.param
+
+
@pytest.mark.usefixtures('config', 'builtin_mock')
class TestConcretize(object):
def test_concretize(self, spec):
@@ -175,6 +193,22 @@ class TestConcretize(object):
assert Spec('builtin.mock.multi-provider-mpi@1.10.0') in providers
assert Spec('builtin.mock.multi-provider-mpi@1.8.8') in providers
+ def test_different_compilers_get_different_flags(self):
+ client = Spec('cmake-client %gcc@4.7.2 platform=test os=fe target=fe' +
+ ' ^cmake %clang@3.5 platform=test os=fe target=fe')
+ client.concretize()
+ cmake = client['cmake']
+ assert set(client.compiler_flags['cflags']) == set(['-O0'])
+ assert set(cmake.compiler_flags['cflags']) == set(['-O3'])
+ assert set(client.compiler_flags['fflags']) == set(['-O0'])
+ assert not set(cmake.compiler_flags['fflags'])
+
+ def test_compiler_flags_from_user_are_grouped(self):
+ spec = Spec('a%gcc cflags="-O -foo-flag foo-val" platform=test')
+ spec.concretize()
+ cflags = spec.compiler_flags['cflags']
+ assert any(x == '-foo-flag foo-val' for x in cflags)
+
def concretize_multi_provider(self):
s = Spec('mpileaks ^multi-provider-mpi@3.0')
s.concretize()
@@ -211,6 +245,16 @@ class TestConcretize(object):
with pytest.raises(spack.spec.MultipleProviderError):
s.concretize()
+ def test_no_matching_compiler_specs(self):
+ s = Spec('a %gcc@0.0.0')
+ with pytest.raises(spack.concretize.UnavailableCompilerVersionError):
+ s.concretize()
+
+ def test_no_compilers_for_arch(self):
+ s = Spec('a arch=linux-rhel0-x86_64')
+ with pytest.raises(spack.concretize.NoCompilersForArchError):
+ s.concretize()
+
def test_virtual_is_fully_expanded_for_callpath(self):
# force dependence on fake "zmpi" by asking for MPI 10.0
spec = Spec('callpath ^mpi@10.0')
@@ -256,7 +300,7 @@ class TestConcretize(object):
def test_external_package(self):
spec = Spec('externaltool%gcc')
spec.concretize()
- assert spec['externaltool'].external == '/path/to/external_tool'
+ assert spec['externaltool'].external_path == '/path/to/external_tool'
assert 'externalprereq' not in spec
assert spec['externaltool'].compiler.satisfies('gcc')
@@ -285,66 +329,101 @@ class TestConcretize(object):
def test_external_and_virtual(self):
spec = Spec('externaltest')
spec.concretize()
- assert spec['externaltool'].external == '/path/to/external_tool'
- assert spec['stuff'].external == '/path/to/external_virtual_gcc'
+ assert spec['externaltool'].external_path == '/path/to/external_tool'
+ assert spec['stuff'].external_path == '/path/to/external_virtual_gcc'
assert spec['externaltool'].compiler.satisfies('gcc')
assert spec['stuff'].compiler.satisfies('gcc')
def test_find_spec_parents(self):
"""Tests the spec finding logic used by concretization. """
- s = Spec('a +foo',
- Spec('b +foo',
- Spec('c'),
- Spec('d +foo')),
- Spec('e +foo'))
+ s = Spec.from_literal({
+ 'a +foo': {
+ 'b +foo': {
+ 'c': None,
+ 'd+foo': None
+ },
+ 'e +foo': None
+ }
+ })
assert 'a' == find_spec(s['b'], lambda s: '+foo' in s).name
def test_find_spec_children(self):
- s = Spec('a',
- Spec('b +foo',
- Spec('c'),
- Spec('d +foo')),
- Spec('e +foo'))
+ s = Spec.from_literal({
+ 'a': {
+ 'b +foo': {
+ 'c': None,
+ 'd+foo': None
+ },
+ 'e +foo': None
+ }
+ })
+
assert 'd' == find_spec(s['b'], lambda s: '+foo' in s).name
- s = Spec('a',
- Spec('b +foo',
- Spec('c +foo'),
- Spec('d')),
- Spec('e +foo'))
+
+ s = Spec.from_literal({
+ 'a': {
+ 'b +foo': {
+ 'c+foo': None,
+ 'd': None
+ },
+ 'e +foo': None
+ }
+ })
+
assert 'c' == find_spec(s['b'], lambda s: '+foo' in s).name
def test_find_spec_sibling(self):
- s = Spec('a',
- Spec('b +foo',
- Spec('c'),
- Spec('d')),
- Spec('e +foo'))
+
+ s = Spec.from_literal({
+ 'a': {
+ 'b +foo': {
+ 'c': None,
+ 'd': None
+ },
+ 'e +foo': None
+ }
+ })
+
assert 'e' == find_spec(s['b'], lambda s: '+foo' in s).name
assert 'b' == find_spec(s['e'], lambda s: '+foo' in s).name
- s = Spec('a',
- Spec('b +foo',
- Spec('c'),
- Spec('d')),
- Spec('e',
- Spec('f +foo')))
+ s = Spec.from_literal({
+ 'a': {
+ 'b +foo': {
+ 'c': None,
+ 'd': None
+ },
+ 'e': {
+ 'f +foo': None
+ }
+ }
+ })
+
assert 'f' == find_spec(s['b'], lambda s: '+foo' in s).name
def test_find_spec_self(self):
- s = Spec('a',
- Spec('b +foo',
- Spec('c'),
- Spec('d')),
- Spec('e'))
+ s = Spec.from_literal({
+ 'a': {
+ 'b +foo': {
+ 'c': None,
+ 'd': None
+ },
+ 'e': None
+ }
+ })
assert 'b' == find_spec(s['b'], lambda s: '+foo' in s).name
def test_find_spec_none(self):
- s = Spec('a',
- Spec('b',
- Spec('c'),
- Spec('d')),
- Spec('e'))
+ s = Spec.from_literal({
+ 'a': {
+ 'b': {
+ 'c': None,
+ 'd': None
+ },
+ 'e': None
+ }
+ })
assert find_spec(s['b'], lambda s: '+foo' in s) is None
def test_compiler_child(self):
@@ -352,3 +431,29 @@ class TestConcretize(object):
s.concretize()
assert s['mpileaks'].satisfies('%clang')
assert s['dyninst'].satisfies('%gcc')
+
+ def test_conflicts_in_spec(self, conflict_spec):
+ # Check that an exception is raised an caught by the appropriate
+ # exception types.
+ for exc_type in (ConflictsInSpecError, RuntimeError, SpecError):
+ s = Spec(conflict_spec)
+ with pytest.raises(exc_type):
+ s.concretize()
+
+ def test_regression_issue_4492(self):
+ # Constructing a spec which has no dependencies, but is otherwise
+ # concrete is kind of difficult. What we will do is to concretize
+ # a spec, and then modify it to have no dependency and reset the
+ # cache values.
+
+ s = Spec('mpileaks')
+ s.concretize()
+
+ # Check that now the Spec is concrete, store the hash
+ assert s.concrete
+
+ # Remove the dependencies and reset caches
+ s._dependencies.clear()
+ s._concrete = False
+
+ assert not s.concrete
diff --git a/lib/spack/spack/test/concretize_preferences.py b/lib/spack/spack/test/concretize_preferences.py
index 54df4e1563..164b21e072 100644
--- a/lib/spack/spack/test/concretize_preferences.py
+++ b/lib/spack/spack/test/concretize_preferences.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,7 @@ import pytest
import spack
import spack.util.spack_yaml as syaml
from spack.spec import Spec
-from spack.package_prefs import PreferredPackages
+import spack.package_prefs
@pytest.fixture()
@@ -41,7 +41,7 @@ def concretize_scope(config, tmpdir):
# This is kind of weird, but that's how config scopes are
# set in ConfigScope.__init__
spack.config.config_scopes.pop('concretize')
- spack.package_prefs._pkgsort = PreferredPackages()
+ spack.package_prefs.PackagePrefs.clear_caches()
# reset provider index each time, too
spack.repo._provider_index = None
@@ -55,7 +55,7 @@ def update_packages(pkgname, section, value):
"""Update config and reread package list"""
conf = {pkgname: {section: value}}
spack.config.update_config('packages', conf, 'concretize')
- spack.package_prefs._pkgsort = PreferredPackages()
+ spack.package_prefs.PackagePrefs.clear_caches()
def assert_variant_values(spec, **variants):
@@ -102,6 +102,11 @@ class TestConcretizePreferences(object):
spec = concretize('mpileaks')
assert spec.version == spack.spec.Version('2.2')
+ def test_preferred_versions_mixed_version_types(self):
+ update_packages('mixedversions', 'version', ['2.0'])
+ spec = concretize('mixedversions')
+ assert spec.version == spack.spec.Version('2.0')
+
def test_preferred_providers(self):
"""Test preferred providers of virtual packages are
applied correctly
@@ -146,7 +151,7 @@ all:
spack.config.update_config('packages', conf, 'concretize')
# should be no error for 'all':
- spack.package_prefs._pkgsort = PreferredPackages()
+ spack.package_prefs.PackagePrefs.clear_caches()
spack.package_prefs.get_packages_config()
def test_external_mpi(self):
@@ -170,4 +175,4 @@ mpich:
# ensure that once config is in place, external is used
spec = Spec('mpi')
spec.concretize()
- assert spec['mpich'].external == '/dummy/path'
+ assert spec['mpich'].external_path == '/dummy/path'
diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py
index ed8f78ceb4..2b7a7a5c08 100644
--- a/lib/spack/spack/test/config.py
+++ b/lib/spack/spack/test/config.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -369,3 +369,31 @@ class TestConfig(object):
'install_tree': 'install_tree_path',
'build_stage': ['patha', 'pathb']
}
+
+
+def test_keys_are_ordered():
+
+ expected_order = (
+ 'bin',
+ 'man',
+ 'share/man',
+ 'share/aclocal',
+ 'lib',
+ 'lib64',
+ 'include',
+ 'lib/pkgconfig',
+ 'lib64/pkgconfig',
+ ''
+ )
+
+ config_scope = spack.config.ConfigScope(
+ 'modules',
+ os.path.join(spack.test_path, 'data', 'config')
+ )
+
+ data = config_scope.get_section('modules')
+
+ prefix_inspections = data['modules']['prefix_inspections']
+
+ for actual, expected in zip(prefix_inspections, expected_order):
+ assert actual == expected
diff --git a/lib/spack/spack/test/conftest.py b/lib/spack/spack/test/conftest.py
index f344727674..5ac4de1851 100644
--- a/lib/spack/spack/test/conftest.py
+++ b/lib/spack/spack/test/conftest.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,42 +25,111 @@
import collections
import copy
import os
-import re
import shutil
+import re
-import cStringIO
-import llnl.util.filesystem
-import llnl.util.lang
import ordereddict_backport
+
import py
import pytest
+
+from llnl.util.filesystem import remove_linked_tree
+
import spack
import spack.architecture
import spack.database
import spack.directory_layout
-import spack.fetch_strategy
import spack.platforms.test
import spack.repository
import spack.stage
import spack.util.executable
import spack.util.pattern
+from spack.dependency import Dependency
+from spack.package import PackageBase
+from spack.fetch_strategy import FetchStrategyComposite, URLFetchStrategy
+from spack.fetch_strategy import FetchError
+from spack.spec import Spec
+from spack.version import Version
-##########
-# Monkey-patching that is applied to all tests
-##########
+#
+# These fixtures are applied to all tests
+#
+@pytest.fixture(scope='function', autouse=True)
+def no_chdir():
+ """Ensure that no test changes Spack's working dirctory.
+ This prevents Spack tests (and therefore Spack commands) from
+ changing the working directory and causing other tests to fail
+ mysteriously. Tests should use ``working_dir`` or ``py.path``'s
+ ``.as_cwd()`` instead of ``os.chdir`` to avoid failing this check.
-@pytest.fixture(autouse=True)
-def no_stdin_duplication(monkeypatch):
- """Duplicating stdin (or any other stream) returns an empty
- cStringIO object.
+ We assert that the working directory hasn't changed, unless the
+ original wd somehow ceased to exist.
+
+ """
+ original_wd = os.getcwd()
+ yield
+ if os.path.isdir(original_wd):
+ assert os.getcwd() == original_wd
+
+
+@pytest.fixture(scope='session', autouse=True)
+def mock_stage(tmpdir_factory):
+ """Mocks up a fake stage directory for use by tests."""
+ stage_path = spack.stage_path
+ new_stage = str(tmpdir_factory.mktemp('mock_stage'))
+ spack.stage_path = new_stage
+ yield new_stage
+ spack.stage_path = stage_path
+
+
+@pytest.fixture(scope='session')
+def _ignore_stage_files():
+ """Session-scoped helper for check_for_leftover_stage_files.
+
+ Used to track which leftover files in the stage have been seen.
"""
- monkeypatch.setattr(
- llnl.util.lang,
- 'duplicate_stream',
- lambda x: cStringIO.StringIO()
- )
+ # to start with, ignore the .lock file at the stage root.
+ return set(['.lock'])
+
+
+def remove_whatever_it_is(path):
+ """Type-agnostic remove."""
+ if os.path.isfile(path):
+ os.remove(path)
+ elif os.path.islink(path):
+ remove_linked_tree(path)
+ else:
+ shutil.rmtree(path)
+
+
+@pytest.fixture(scope='function', autouse=True)
+def check_for_leftover_stage_files(request, mock_stage, _ignore_stage_files):
+ """Ensure that each test leaves a clean stage when done.
+
+ This can be disabled for tests that are expected to dirty the stage
+ by adding::
+
+ @pytest.mark.disable_clean_stage_check
+
+ to tests that need it.
+ """
+ yield
+
+ files_in_stage = set()
+ if os.path.exists(spack.stage_path):
+ files_in_stage = set(
+ os.listdir(spack.stage_path)) - _ignore_stage_files
+
+ if 'disable_clean_stage_check' in request.keywords:
+ # clean up after tests that are expected to be dirty
+ for f in files_in_stage:
+ path = os.path.join(spack.stage_path, f)
+ remove_whatever_it_is(path)
+ else:
+ _ignore_stage_files |= files_in_stage
+ assert not files_in_stage
@pytest.fixture(autouse=True)
@@ -80,12 +149,10 @@ def mock_fetch_cache(monkeypatch):
pass
def fetch(self):
- raise spack.fetch_strategy.FetchError(
- 'Mock cache always fails for tests'
- )
+ raise FetchError('Mock cache always fails for tests')
def __str__(self):
- return "[mock fetcher]"
+ return "[mock fetch cache]"
monkeypatch.setattr(spack, 'fetch_cache', MockCache())
@@ -170,15 +237,20 @@ def configuration_dir(tmpdir_factory, linux_os):
def config(configuration_dir):
"""Hooks the mock configuration files into spack.config"""
# Set up a mock config scope
+ spack.package_prefs.PackagePrefs.clear_caches()
spack.config.clear_config_caches()
real_scope = spack.config.config_scopes
spack.config.config_scopes = ordereddict_backport.OrderedDict()
spack.config.ConfigScope('site', str(configuration_dir.join('site')))
+ spack.config.ConfigScope('system', str(configuration_dir.join('system')))
spack.config.ConfigScope('user', str(configuration_dir.join('user')))
Config = collections.namedtuple('Config', ['real', 'mock'])
+
yield Config(real=real_scope, mock=spack.config.config_scopes)
+
spack.config.config_scopes = real_scope
spack.config.clear_config_caches()
+ spack.package_prefs.PackagePrefs.clear_caches()
@pytest.fixture(scope='module')
@@ -208,12 +280,11 @@ def database(tmpdir_factory, builtin_mock, config):
# Make a fake install directory
install_path = tmpdir_factory.mktemp('install_for_database')
- spack_install_path = py.path.local(spack.store.root)
- spack.store.root = str(install_path)
+ spack_install_path = spack.store.root
+ spack.store.root = str(install_path)
install_layout = spack.directory_layout.YamlDirectoryLayout(
- str(install_path)
- )
+ str(install_path))
spack_install_layout = spack.store.layout
spack.store.layout = install_layout
@@ -224,14 +295,12 @@ def database(tmpdir_factory, builtin_mock, config):
Entry = collections.namedtuple('Entry', ['path', 'layout', 'db'])
Database = collections.namedtuple(
- 'Database', ['real', 'mock', 'install', 'uninstall', 'refresh']
- )
+ 'Database', ['real', 'mock', 'install', 'uninstall', 'refresh'])
real = Entry(
path=spack_install_path,
layout=spack_install_layout,
- db=spack_install_db
- )
+ db=spack_install_db)
mock = Entry(path=install_path, layout=install_layout, db=install_db)
def _install(spec):
@@ -250,28 +319,33 @@ def database(tmpdir_factory, builtin_mock, config):
_install('mpileaks ^mpich')
_install('mpileaks ^mpich2')
_install('mpileaks ^zmpi')
+ _install('externaltest')
t = Database(
real=real,
mock=mock,
install=_install,
uninstall=_uninstall,
- refresh=_refresh
- )
+ refresh=_refresh)
+
# Transaction used to avoid repeated writes.
with spack.store.db.write_transaction():
t.install('mpileaks ^mpich')
t.install('mpileaks ^mpich2')
t.install('mpileaks ^zmpi')
+ t.install('externaltest')
yield t
with spack.store.db.write_transaction():
for spec in spack.store.db.query():
- t.uninstall(spec)
+ if spec.package.installed:
+ t.uninstall(spec)
+ else:
+ spack.store.db.remove(spec)
install_path.remove(rec=1)
- spack.store.root = str(spack_install_path)
+ spack.store.root = spack_install_path
spack.store.layout = spack_install_layout
spack.store.db = spack_install_db
@@ -282,22 +356,66 @@ def refresh_db_on_exit(database):
yield
database.refresh()
+
+@pytest.fixture()
+def install_mockery(tmpdir, config, builtin_mock):
+ """Hooks a fake install directory, DB, and stage directory into Spack."""
+ layout = spack.store.layout
+ extensions = spack.store.extensions
+ db = spack.store.db
+ new_opt = str(tmpdir.join('opt'))
+
+ # Use a fake install directory to avoid conflicts bt/w
+ # installed pkgs and mock packages.
+ spack.store.layout = spack.directory_layout.YamlDirectoryLayout(new_opt)
+ spack.store.extensions = spack.directory_layout.YamlExtensionsLayout(
+ new_opt, spack.store.layout)
+ spack.store.db = spack.database.Database(new_opt)
+
+ # We use a fake package, so skip the checksum.
+ spack.do_checksum = False
+ yield
+ # Turn checksumming back on
+ spack.do_checksum = True
+ # Restore Spack's layout.
+ spack.store.layout = layout
+ spack.store.extensions = extensions
+ spack.store.db = db
+
+
+@pytest.fixture()
+def mock_fetch(mock_archive):
+ """Fake the URL for a package so it downloads from a file."""
+ fetcher = FetchStrategyComposite()
+ fetcher.append(URLFetchStrategy(mock_archive.url))
+
+ @property
+ def fake_fn(self):
+ return fetcher
+
+ orig_fn = PackageBase.fetcher
+ PackageBase.fetcher = fake_fn
+ yield
+ PackageBase.fetcher = orig_fn
+
+
##########
# Fake archives and repositories
##########
@pytest.fixture(scope='session')
-def mock_archive():
+def mock_archive(tmpdir_factory):
"""Creates a very simple archive directory with a configure script and a
makefile that installs to a prefix. Tars it up into an archive.
"""
tar = spack.util.executable.which('tar', required=True)
- stage = spack.stage.Stage('mock-archive-stage')
- tmpdir = py.path.local(stage.path)
+
+ tmpdir = tmpdir_factory.mktemp('mock-archive-dir')
repo_name = 'mock-archive-repo'
tmpdir.ensure(repo_name, dir=True)
repodir = tmpdir.join(repo_name)
+
# Create the configure script
configure_path = str(tmpdir.join(repo_name, 'configure'))
with open(configure_path, 'w') as f:
@@ -312,75 +430,80 @@ def mock_archive():
"\ttouch $prefix/dummy_file\n"
"EOF\n"
)
- os.chmod(configure_path, 0755)
+ os.chmod(configure_path, 0o755)
+
# Archive it
- current = tmpdir.chdir()
- archive_name = '{0}.tar.gz'.format(repo_name)
- tar('-czf', archive_name, repo_name)
- current.chdir()
- Archive = collections.namedtuple('Archive', ['url', 'path'])
- url = 'file://' + str(tmpdir.join(archive_name))
+ with tmpdir.as_cwd():
+ archive_name = '{0}.tar.gz'.format(repo_name)
+ tar('-czf', archive_name, repo_name)
+
+ Archive = collections.namedtuple('Archive',
+ ['url', 'path', 'archive_file'])
+ archive_file = str(tmpdir.join(archive_name))
+
# Return the url
- yield Archive(url=url, path=str(repodir))
- stage.destroy()
+ yield Archive(
+ url=('file://' + archive_file),
+ archive_file=archive_file,
+ path=str(repodir))
@pytest.fixture(scope='session')
-def mock_git_repository():
+def mock_git_repository(tmpdir_factory):
"""Creates a very simple git repository with two branches and
two commits.
"""
git = spack.util.executable.which('git', required=True)
- stage = spack.stage.Stage('mock-git-stage')
- tmpdir = py.path.local(stage.path)
+
+ tmpdir = tmpdir_factory.mktemp('mock-git-repo-dir')
repo_name = 'mock-git-repo'
tmpdir.ensure(repo_name, dir=True)
repodir = tmpdir.join(repo_name)
# Initialize the repository
- current = repodir.chdir()
- git('init')
- url = 'file://' + str(repodir)
-
- # r0 is just the first commit
- r0_file = 'r0_file'
- repodir.ensure(r0_file)
- git('add', r0_file)
- git('commit', '-m', 'mock-git-repo r0')
-
- branch = 'test-branch'
- branch_file = 'branch_file'
- git('branch', branch)
-
- tag_branch = 'tag-branch'
- tag_file = 'tag_file'
- git('branch', tag_branch)
-
- # Check out first branch
- git('checkout', branch)
- repodir.ensure(branch_file)
- git('add', branch_file)
- git('commit', '-m' 'r1 test branch')
-
- # Check out a second branch and tag it
- git('checkout', tag_branch)
- repodir.ensure(tag_file)
- git('add', tag_file)
- git('commit', '-m' 'tag test branch')
-
- tag = 'test-tag'
- git('tag', tag)
-
- git('checkout', 'master')
-
- # R1 test is the same as test for branch
- rev_hash = lambda x: git('rev-parse', x, output=str).strip()
- r1 = rev_hash(branch)
- r1_file = branch_file
- current.chdir()
+ with repodir.as_cwd():
+ git('init')
+ git('config', 'user.name', 'Spack')
+ git('config', 'user.email', 'spack@spack.io')
+ url = 'file://' + str(repodir)
+
+ # r0 is just the first commit
+ r0_file = 'r0_file'
+ repodir.ensure(r0_file)
+ git('add', r0_file)
+ git('commit', '-m', 'mock-git-repo r0')
+
+ branch = 'test-branch'
+ branch_file = 'branch_file'
+ git('branch', branch)
+
+ tag_branch = 'tag-branch'
+ tag_file = 'tag_file'
+ git('branch', tag_branch)
+
+ # Check out first branch
+ git('checkout', branch)
+ repodir.ensure(branch_file)
+ git('add', branch_file)
+ git('commit', '-m' 'r1 test branch')
+
+ # Check out a second branch and tag it
+ git('checkout', tag_branch)
+ repodir.ensure(tag_file)
+ git('add', tag_file)
+ git('commit', '-m' 'tag test branch')
+
+ tag = 'test-tag'
+ git('tag', tag)
+
+ git('checkout', 'master')
+
+ # R1 test is the same as test for branch
+ rev_hash = lambda x: git('rev-parse', x, output=str).strip()
+ r1 = rev_hash(branch)
+ r1_file = branch_file
Bunch = spack.util.pattern.Bunch
-
checks = {
'master': Bunch(
revision='master', file=r0_file, args={'git': str(repodir)}
@@ -400,15 +523,14 @@ def mock_git_repository():
t = Bunch(checks=checks, url=url, hash=rev_hash, path=str(repodir))
yield t
- stage.destroy()
@pytest.fixture(scope='session')
-def mock_hg_repository():
+def mock_hg_repository(tmpdir_factory):
"""Creates a very simple hg repository with two commits."""
hg = spack.util.executable.which('hg', required=True)
- stage = spack.stage.Stage('mock-hg-stage')
- tmpdir = py.path.local(stage.path)
+
+ tmpdir = tmpdir_factory.mktemp('mock-hg-repo-dir')
repo_name = 'mock-hg-repo'
tmpdir.ensure(repo_name, dir=True)
repodir = tmpdir.join(repo_name)
@@ -416,25 +538,25 @@ def mock_hg_repository():
get_rev = lambda: hg('id', '-i', output=str).strip()
# Initialize the repository
- current = repodir.chdir()
- url = 'file://' + str(repodir)
- hg('init')
- # Commit file r0
- r0_file = 'r0_file'
- repodir.ensure(r0_file)
- hg('add', r0_file)
- hg('commit', '-m', 'revision 0', '-u', 'test')
- r0 = get_rev()
- # Commit file r1
- r1_file = 'r1_file'
- repodir.ensure(r1_file)
- hg('add', r1_file)
- hg('commit', '-m' 'revision 1', '-u', 'test')
- r1 = get_rev()
- current.chdir()
+ with repodir.as_cwd():
+ url = 'file://' + str(repodir)
+ hg('init')
+
+ # Commit file r0
+ r0_file = 'r0_file'
+ repodir.ensure(r0_file)
+ hg('add', r0_file)
+ hg('commit', '-m', 'revision 0', '-u', 'test')
+ r0 = get_rev()
+
+ # Commit file r1
+ r1_file = 'r1_file'
+ repodir.ensure(r1_file)
+ hg('add', r1_file)
+ hg('commit', '-m' 'revision 1', '-u', 'test')
+ r1 = get_rev()
Bunch = spack.util.pattern.Bunch
-
checks = {
'default': Bunch(
revision=r1, file=r1_file, args={'hg': str(repodir)}
@@ -447,58 +569,57 @@ def mock_hg_repository():
}
t = Bunch(checks=checks, url=url, hash=get_rev, path=str(repodir))
yield t
- stage.destroy()
@pytest.fixture(scope='session')
-def mock_svn_repository():
+def mock_svn_repository(tmpdir_factory):
"""Creates a very simple svn repository with two commits."""
svn = spack.util.executable.which('svn', required=True)
svnadmin = spack.util.executable.which('svnadmin', required=True)
- stage = spack.stage.Stage('mock-svn-stage')
- tmpdir = py.path.local(stage.path)
+
+ tmpdir = tmpdir_factory.mktemp('mock-svn-stage')
repo_name = 'mock-svn-repo'
tmpdir.ensure(repo_name, dir=True)
repodir = tmpdir.join(repo_name)
url = 'file://' + str(repodir)
+
# Initialize the repository
- current = repodir.chdir()
- svnadmin('create', str(repodir))
-
- # Import a structure (first commit)
- r0_file = 'r0_file'
- tmpdir.ensure('tmp-path', r0_file)
- svn(
- 'import',
- str(tmpdir.join('tmp-path')),
- url,
- '-m',
- 'Initial import r0'
- )
- shutil.rmtree(str(tmpdir.join('tmp-path')))
- # Second commit
- r1_file = 'r1_file'
- svn('checkout', url, str(tmpdir.join('tmp-path')))
- tmpdir.ensure('tmp-path', r1_file)
- tmpdir.join('tmp-path').chdir()
- svn('add', str(tmpdir.ensure('tmp-path', r1_file)))
- svn('ci', '-m', 'second revision r1')
- repodir.chdir()
- shutil.rmtree(str(tmpdir.join('tmp-path')))
- r0 = '1'
- r1 = '2'
+ with repodir.as_cwd():
+ # NOTE: Adding --pre-1.5-compatible works for NERSC
+ # Unknown if this is also an issue at other sites.
+ svnadmin('create', '--pre-1.5-compatible', str(repodir))
+
+ # Import a structure (first commit)
+ r0_file = 'r0_file'
+ tmpdir.ensure('tmp-path', r0_file)
+ tmp_path = tmpdir.join('tmp-path')
+ svn('import',
+ str(tmp_path),
+ url,
+ '-m',
+ 'Initial import r0')
+ tmp_path.remove()
+
+ # Second commit
+ r1_file = 'r1_file'
+ svn('checkout', url, str(tmp_path))
+ tmpdir.ensure('tmp-path', r1_file)
+
+ with tmp_path.as_cwd():
+ svn('add', str(tmpdir.ensure('tmp-path', r1_file)))
+ svn('ci', '-m', 'second revision r1')
+
+ tmp_path.remove()
+ r0 = '1'
+ r1 = '2'
Bunch = spack.util.pattern.Bunch
-
checks = {
'default': Bunch(
- revision=r1, file=r1_file, args={'svn': url}
- ),
+ revision=r1, file=r1_file, args={'svn': url}),
'rev0': Bunch(
revision=r0, file=r0_file, args={
- 'svn': url, 'revision': r0
- }
- )
+ 'svn': url, 'revision': r0})
}
def get_rev():
@@ -511,4 +632,61 @@ def mock_svn_repository():
t = Bunch(checks=checks, url=url, hash=get_rev, path=str(repodir))
yield t
- current.chdir()
+
+
+##########
+# Mock packages
+##########
+
+
+class MockPackage(object):
+ def __init__(self, name, dependencies, dependency_types, conditions=None,
+ versions=None):
+ self.name = name
+ self.spec = None
+ self.dependencies = ordereddict_backport.OrderedDict()
+
+ assert len(dependencies) == len(dependency_types)
+ for dep, dtype in zip(dependencies, dependency_types):
+ d = Dependency(self, Spec(dep.name), type=dtype)
+ if not conditions or dep.name not in conditions:
+ self.dependencies[dep.name] = {Spec(name): d}
+ else:
+ self.dependencies[dep.name] = {Spec(conditions[dep.name]): d}
+
+ if versions:
+ self.versions = versions
+ else:
+ versions = list(Version(x) for x in [1, 2, 3])
+ self.versions = dict((x, {'preferred': False}) for x in versions)
+
+ self.variants = {}
+ self.provided = {}
+ self.conflicts = {}
+ self.patches = {}
+
+
+class MockPackageMultiRepo(object):
+ def __init__(self, packages):
+ self.spec_to_pkg = dict((x.name, x) for x in packages)
+ self.spec_to_pkg.update(
+ dict(('mockrepo.' + x.name, x) for x in packages))
+
+ def get(self, spec):
+ if not isinstance(spec, spack.spec.Spec):
+ spec = Spec(spec)
+ return self.spec_to_pkg[spec.name]
+
+ def get_pkg_class(self, name):
+ return self.spec_to_pkg[name]
+
+ def exists(self, name):
+ return name in self.spec_to_pkg
+
+ def is_virtual(self, name):
+ return False
+
+ def repo_for_pkg(self, name):
+ import collections
+ Repo = collections.namedtuple('Repo', ['namespace'])
+ return Repo('mockrepo')
diff --git a/lib/spack/spack/test/data/config.yaml b/lib/spack/spack/test/data/config.yaml
index d1758e9c16..ab925f4f6b 100644
--- a/lib/spack/spack/test/data/config.yaml
+++ b/lib/spack/spack/test/data/config.yaml
@@ -1,5 +1,9 @@
config:
install_tree: $spack/opt/spack
+ template_dirs:
+ - $spack/templates
+ - $spack/lib/spack/spack/test/data/templates
+ - $spack/lib/spack/spack/test/data/templates_again
build_stage:
- $tempdir
- /nfs/tmp2/$user
diff --git a/lib/spack/spack/test/data/config/modules.yaml b/lib/spack/spack/test/data/config/modules.yaml
new file mode 100644
index 0000000000..25fe2088e7
--- /dev/null
+++ b/lib/spack/spack/test/data/config/modules.yaml
@@ -0,0 +1,42 @@
+# -------------------------------------------------------------------------
+# This is the default configuration for Spack's module file generation.
+#
+# Settings here are versioned with Spack and are intended to provide
+# sensible defaults out of the box. Spack maintainers should edit this
+# file to keep it current.
+#
+# Users can override these settings by editing the following files.
+#
+# Per-spack-instance settings (overrides defaults):
+# $SPACK_ROOT/etc/spack/modules.yaml
+#
+# Per-user settings (overrides default and site settings):
+# ~/.spack/modules.yaml
+# -------------------------------------------------------------------------
+modules:
+ enable:
+ - tcl
+ - dotkit
+ prefix_inspections:
+ bin:
+ - PATH
+ man:
+ - MANPATH
+ share/man:
+ - MANPATH
+ share/aclocal:
+ - ACLOCAL_PATH
+ lib:
+ - LIBRARY_PATH
+ - LD_LIBRARY_PATH
+ lib64:
+ - LIBRARY_PATH
+ - LD_LIBRARY_PATH
+ include:
+ - CPATH
+ lib/pkgconfig:
+ - PKG_CONFIG_PATH
+ lib64/pkgconfig:
+ - PKG_CONFIG_PATH
+ '':
+ - CMAKE_PREFIX_PATH
diff --git a/lib/spack/spack/test/data/directory_search/README.txt b/lib/spack/spack/test/data/directory_search/README.txt
new file mode 100644
index 0000000000..9c43a4224d
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/README.txt
@@ -0,0 +1 @@
+This directory tree is made up to test that search functions wil return a stable ordered sequence. \ No newline at end of file
diff --git a/lib/spack/spack/test/data/directory_search/a/c.h b/lib/spack/spack/test/data/directory_search/a/c.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/a/c.h
diff --git a/lib/spack/spack/test/data/directory_search/a/libc.a b/lib/spack/spack/test/data/directory_search/a/libc.a
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/a/libc.a
diff --git a/lib/spack/spack/test/data/directory_search/a/libc.dylib b/lib/spack/spack/test/data/directory_search/a/libc.dylib
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/a/libc.dylib
diff --git a/lib/spack/spack/test/data/directory_search/a/libc.so b/lib/spack/spack/test/data/directory_search/a/libc.so
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/a/libc.so
diff --git a/lib/spack/spack/test/data/directory_search/b/b.h b/lib/spack/spack/test/data/directory_search/b/b.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/b.h
diff --git a/lib/spack/spack/test/data/directory_search/b/d.h b/lib/spack/spack/test/data/directory_search/b/d.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/d.h
diff --git a/lib/spack/spack/test/data/directory_search/b/liba.a b/lib/spack/spack/test/data/directory_search/b/liba.a
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/liba.a
diff --git a/lib/spack/spack/test/data/directory_search/b/liba.dylib b/lib/spack/spack/test/data/directory_search/b/liba.dylib
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/liba.dylib
diff --git a/lib/spack/spack/test/data/directory_search/b/liba.so b/lib/spack/spack/test/data/directory_search/b/liba.so
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/liba.so
diff --git a/lib/spack/spack/test/data/directory_search/b/libd.a b/lib/spack/spack/test/data/directory_search/b/libd.a
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/libd.a
diff --git a/lib/spack/spack/test/data/directory_search/b/libd.dylib b/lib/spack/spack/test/data/directory_search/b/libd.dylib
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/libd.dylib
diff --git a/lib/spack/spack/test/data/directory_search/b/libd.so b/lib/spack/spack/test/data/directory_search/b/libd.so
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/b/libd.so
diff --git a/lib/spack/spack/test/data/directory_search/c/a.h b/lib/spack/spack/test/data/directory_search/c/a.h
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/c/a.h
diff --git a/lib/spack/spack/test/data/directory_search/c/libb.a b/lib/spack/spack/test/data/directory_search/c/libb.a
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/c/libb.a
diff --git a/lib/spack/spack/test/data/directory_search/c/libb.dylib b/lib/spack/spack/test/data/directory_search/c/libb.dylib
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/c/libb.dylib
diff --git a/lib/spack/spack/test/data/directory_search/c/libb.so b/lib/spack/spack/test/data/directory_search/c/libb.so
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/lib/spack/spack/test/data/directory_search/c/libb.so
diff --git a/lib/spack/spack/test/data/modules/dotkit/autoload_direct.yaml b/lib/spack/spack/test/data/modules/dotkit/autoload_direct.yaml
new file mode 100644
index 0000000000..2636d6265b
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/dotkit/autoload_direct.yaml
@@ -0,0 +1,5 @@
+enable:
+ - dotkit
+dotkit:
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/dotkit/override_template.yaml b/lib/spack/spack/test/data/modules/dotkit/override_template.yaml
new file mode 100644
index 0000000000..8da581689f
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/dotkit/override_template.yaml
@@ -0,0 +1,5 @@
+enable:
+ - dotkit
+dotkit:
+ all:
+ template: 'override_from_modules.txt'
diff --git a/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml b/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml
new file mode 100644
index 0000000000..a963af1ff8
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/alter_environment.yaml
@@ -0,0 +1,27 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+
+ hierarchy:
+ - mpi
+
+ all:
+ filter:
+ environment_blacklist':
+ - CMAKE_PREFIX_PATH
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+
+ 'platform=test target=x86_64':
+ environment:
+ set:
+ FOO: 'foo'
+ unset:
+ - BAR
+
+ 'platform=test target=x86_32':
+ load:
+ - 'foo/bar'
diff --git a/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml b/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml
new file mode 100644
index 0000000000..ae08639a9f
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/autoload_all.yaml
@@ -0,0 +1,11 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+ hierarchy:
+ - mpi
+ verbose: true
+
+ all:
+ autoload: 'all'
diff --git a/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml b/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml
new file mode 100644
index 0000000000..2c68672f84
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/autoload_direct.yaml
@@ -0,0 +1,10 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+ hierarchy:
+ - mpi
+
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/lmod/blacklist.yaml b/lib/spack/spack/test/data/modules/lmod/blacklist.yaml
new file mode 100644
index 0000000000..e1813910aa
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/blacklist.yaml
@@ -0,0 +1,12 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+ hierarchy:
+ - mpi
+ blacklist:
+ - callpath
+
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml b/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml
new file mode 100644
index 0000000000..ada3c691cb
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/complex_hierarchy.yaml
@@ -0,0 +1,17 @@
+enable:
+ - lmod
+lmod:
+ hash_length: 0
+
+ core_compilers:
+ - 'clang@3.3'
+
+ hierarchy:
+ - lapack
+ - blas
+ - mpi
+
+ verbose: false
+
+ all:
+ autoload: 'all'
diff --git a/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml b/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml
new file mode 100644
index 0000000000..5cfc3356bb
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/core_compilers_empty.yaml
@@ -0,0 +1,6 @@
+enable:
+ - lmod
+lmod:
+ core_compilers: []
+ hierarchy:
+ - mpi
diff --git a/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml b/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml
new file mode 100644
index 0000000000..f5fe65651c
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/missing_core_compilers.yaml
@@ -0,0 +1,5 @@
+enable:
+ - lmod
+lmod:
+ hierarchy:
+ - mpi
diff --git a/lib/spack/spack/test/data/modules/lmod/no_hash.yaml b/lib/spack/spack/test/data/modules/lmod/no_hash.yaml
new file mode 100644
index 0000000000..726ba4d264
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/no_hash.yaml
@@ -0,0 +1,10 @@
+enable:
+ - lmod
+lmod:
+ hash_length: 0
+
+ core_compilers:
+ - 'clang@3.3'
+
+ hierarchy:
+ - mpi
diff --git a/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml b/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml
new file mode 100644
index 0000000000..d6c74132d4
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/non_virtual_in_hierarchy.yaml
@@ -0,0 +1,11 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+ hierarchy:
+ - mpi
+ - openblas
+
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/lmod/override_template.yaml b/lib/spack/spack/test/data/modules/lmod/override_template.yaml
new file mode 100644
index 0000000000..979309a725
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/lmod/override_template.yaml
@@ -0,0 +1,10 @@
+enable:
+ - lmod
+lmod:
+ core_compilers:
+ - 'clang@3.3'
+ hierarchy:
+ - mpi
+
+ all:
+ template: 'override_from_modules.txt'
diff --git a/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml b/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml
new file mode 100644
index 0000000000..c9f00c6360
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/alter_environment.yaml
@@ -0,0 +1,22 @@
+enable:
+ - tcl
+tcl:
+ all:
+ filter:
+ environment_blacklist':
+ - CMAKE_PREFIX_PATH
+ environment:
+ set:
+ '${PACKAGE}_ROOT': '${PREFIX}'
+
+ 'platform=test target=x86_64':
+ environment:
+ set:
+ FOO: 'foo'
+ OMPI_MCA_mpi_leave_pinned: '1'
+ unset:
+ - BAR
+
+ 'platform=test target=x86_32':
+ load:
+ - 'foo/bar'
diff --git a/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml b/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml
new file mode 100644
index 0000000000..6b6a9b0736
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/autoload_all.yaml
@@ -0,0 +1,6 @@
+enable:
+ - tcl
+tcl:
+ verbose: true
+ all:
+ autoload: 'all'
diff --git a/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml b/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml
new file mode 100644
index 0000000000..3cdf3b525b
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/autoload_direct.yaml
@@ -0,0 +1,5 @@
+enable:
+ - tcl
+tcl:
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/tcl/blacklist.yaml b/lib/spack/spack/test/data/modules/tcl/blacklist.yaml
new file mode 100644
index 0000000000..ab2502f83a
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/blacklist.yaml
@@ -0,0 +1,10 @@
+enable:
+ - tcl
+tcl:
+ whitelist:
+ - zmpi
+ blacklist:
+ - callpath
+ - mpi
+ all:
+ autoload: 'direct'
diff --git a/lib/spack/spack/test/data/modules/tcl/conflicts.yaml b/lib/spack/spack/test/data/modules/tcl/conflicts.yaml
new file mode 100644
index 0000000000..4d0eb8d526
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/conflicts.yaml
@@ -0,0 +1,8 @@
+enable:
+ - tcl
+tcl:
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}'
+ all:
+ conflict:
+ - '${PACKAGE}'
+ - 'intel/14.0.1'
diff --git a/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml b/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml
new file mode 100644
index 0000000000..2f72ba4aab
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/invalid_naming_scheme.yaml
@@ -0,0 +1,5 @@
+enable:
+ - tcl
+tcl:
+ # ${OPTIONS} is not allowed in the naming scheme, see #2884
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}-${OPTIONS}'
diff --git a/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml b/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml
new file mode 100644
index 0000000000..297028531b
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/invalid_token_in_env_var_name.yaml
@@ -0,0 +1,21 @@
+enable:
+ - tcl
+tcl:
+ all:
+ filter:
+ environment_blacklist':
+ - CMAKE_PREFIX_PATH
+ environment:
+ set:
+ '${PACKAGE}_ROOT_${PREFIX}': '${PREFIX}'
+
+ 'platform=test target=x86_64':
+ environment:
+ set:
+ FOO_${OPTIONS}: 'foo'
+ unset:
+ - BAR
+
+ 'platform=test target=x86_32':
+ load:
+ - 'foo/bar'
diff --git a/lib/spack/spack/test/data/modules/tcl/override_template.yaml b/lib/spack/spack/test/data/modules/tcl/override_template.yaml
new file mode 100644
index 0000000000..a12e7ffd10
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/override_template.yaml
@@ -0,0 +1,5 @@
+enable:
+ - tcl
+tcl:
+ all:
+ template: 'override_from_modules.txt'
diff --git a/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml b/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml
new file mode 100644
index 0000000000..420c988062
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/prerequisites_all.yaml
@@ -0,0 +1,5 @@
+enable:
+ - tcl
+tcl:
+ all:
+ prerequisites: 'all'
diff --git a/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml b/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml
new file mode 100644
index 0000000000..61e9fba8fc
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/prerequisites_direct.yaml
@@ -0,0 +1,5 @@
+enable:
+ - tcl
+tcl:
+ all:
+ prerequisites: 'direct'
diff --git a/lib/spack/spack/test/data/modules/tcl/suffix.yaml b/lib/spack/spack/test/data/modules/tcl/suffix.yaml
new file mode 100644
index 0000000000..015ac63b0f
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/suffix.yaml
@@ -0,0 +1,7 @@
+enable:
+ - tcl
+tcl:
+ mpileaks:
+ suffixes:
+ '+debug': foo
+ '~debug': bar
diff --git a/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml b/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml
new file mode 100644
index 0000000000..0568605248
--- /dev/null
+++ b/lib/spack/spack/test/data/modules/tcl/wrong_conflicts.yaml
@@ -0,0 +1,7 @@
+enable:
+ - tcl
+tcl:
+ naming_scheme: '${PACKAGE}/${VERSION}-${COMPILERNAME}'
+ all:
+ conflict:
+ - '${PACKAGE}/${COMPILERNAME}'
diff --git a/lib/spack/spack/test/data/patch/foo.patch b/lib/spack/spack/test/data/patch/foo.patch
new file mode 100644
index 0000000000..ff59bd4c54
--- /dev/null
+++ b/lib/spack/spack/test/data/patch/foo.patch
@@ -0,0 +1,7 @@
+--- a/foo.txt 2017-09-25 21:24:33.000000000 -0700
++++ b/foo.txt 2017-09-25 14:31:17.000000000 -0700
+@@ -1,2 +1,3 @@
++zeroth line
+ first line
+-second line
++third line
diff --git a/lib/spack/spack/test/data/patch/foo.tgz b/lib/spack/spack/test/data/patch/foo.tgz
new file mode 100644
index 0000000000..11ec586256
--- /dev/null
+++ b/lib/spack/spack/test/data/patch/foo.tgz
Binary files differ
diff --git a/lib/spack/spack/test/data/sourceme_first.sh b/lib/spack/spack/test/data/sourceme_first.sh
index ee21fabbd5..7adf35e137 100644
--- a/lib/spack/spack/test/data/sourceme_first.sh
+++ b/lib/spack/spack/test/data/sourceme_first.sh
@@ -1,15 +1,15 @@
#!/usr/bin/env bash
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/test/data/sourceme_parameters.sh b/lib/spack/spack/test/data/sourceme_parameters.sh
index 2ee0cc87bd..8b60e944b3 100644
--- a/lib/spack/spack/test/data/sourceme_parameters.sh
+++ b/lib/spack/spack/test/data/sourceme_parameters.sh
@@ -1,15 +1,15 @@
#!/usr/bin/env bash
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/test/data/sourceme_second.sh b/lib/spack/spack/test/data/sourceme_second.sh
index 2269225e45..37059707f8 100644
--- a/lib/spack/spack/test/data/sourceme_second.sh
+++ b/lib/spack/spack/test/data/sourceme_second.sh
@@ -1,15 +1,15 @@
#!/usr/bin/env bash
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/test/data/sourceme_unicode.sh b/lib/spack/spack/test/data/sourceme_unicode.sh
new file mode 100644
index 0000000000..b602dadbbc
--- /dev/null
+++ b/lib/spack/spack/test/data/sourceme_unicode.sh
@@ -0,0 +1,34 @@
+#!/usr/bin/env bash
+
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+# Set an environment variable with some unicode in it to ensure that
+# Spack can decode it.
+#
+# This has caused squashed commits on develop to break, as some
+# committers use unicode in their messages, and Travis sets the
+# current commit message in an environment variable.
+export UNICODE_VAR='don\xe2\x80\x99t'
diff --git a/lib/spack/spack/test/data/templates/a.txt b/lib/spack/spack/test/data/templates/a.txt
new file mode 100644
index 0000000000..79fe8bd9fa
--- /dev/null
+++ b/lib/spack/spack/test/data/templates/a.txt
@@ -0,0 +1 @@
+Hello {{ word }}!
diff --git a/lib/spack/spack/test/data/templates/extension.tcl b/lib/spack/spack/test/data/templates/extension.tcl
new file mode 100644
index 0000000000..cd9d54d988
--- /dev/null
+++ b/lib/spack/spack/test/data/templates/extension.tcl
@@ -0,0 +1,4 @@
+{% extends "modules/modulefile.tcl" %}
+{% block footer %}
+puts stderr "{{ sentence }}"
+{% endblock %}
diff --git a/lib/spack/spack/test/data/templates/override.txt b/lib/spack/spack/test/data/templates/override.txt
new file mode 100644
index 0000000000..6ef9917736
--- /dev/null
+++ b/lib/spack/spack/test/data/templates/override.txt
@@ -0,0 +1 @@
+Override successful!
diff --git a/lib/spack/spack/test/data/templates_again/b.txt b/lib/spack/spack/test/data/templates_again/b.txt
new file mode 100644
index 0000000000..894b945182
--- /dev/null
+++ b/lib/spack/spack/test/data/templates_again/b.txt
@@ -0,0 +1 @@
+Howdy {{ word }}!
diff --git a/lib/spack/spack/test/data/templates_again/override_from_modules.txt b/lib/spack/spack/test/data/templates_again/override_from_modules.txt
new file mode 100644
index 0000000000..951caea4df
--- /dev/null
+++ b/lib/spack/spack/test/data/templates_again/override_from_modules.txt
@@ -0,0 +1 @@
+Override even better!
diff --git a/lib/spack/spack/test/data/web/1.html b/lib/spack/spack/test/data/web/1.html
new file mode 100644
index 0000000000..ef49c38cdb
--- /dev/null
+++ b/lib/spack/spack/test/data/web/1.html
@@ -0,0 +1,10 @@
+<html>
+ <head>
+ This is page 1.
+ </head>
+ <body>
+ <a href="2.html">list_depth=2 follows this.</a>
+
+ <a href="foo-1.0.0.tar.gz">foo-1.0.0.tar.gz</a>
+ </body>
+</html>
diff --git a/lib/spack/spack/test/data/web/2.html b/lib/spack/spack/test/data/web/2.html
new file mode 100644
index 0000000000..64c843f25b
--- /dev/null
+++ b/lib/spack/spack/test/data/web/2.html
@@ -0,0 +1,12 @@
+<html>
+ <head>
+ This is page 2.
+ </head>
+ <body>
+ <a href="3.html">list_depth=3 follows this.</a>
+ <a href="4.html">list_depth=3 follows this too.</a>
+
+ <a href="foo-2.0.0.tar.gz">foo-2.0.0.tar.gz</a>
+ <a href="foo-2.0.0b2.tar.gz">foo-2.0.0b2.tar.gz</a>
+ </body>
+</html>
diff --git a/lib/spack/spack/test/data/web/3.html b/lib/spack/spack/test/data/web/3.html
new file mode 100644
index 0000000000..e530206035
--- /dev/null
+++ b/lib/spack/spack/test/data/web/3.html
@@ -0,0 +1,11 @@
+<html>
+ <head>
+ This is page 3.
+ </head>
+ <body>
+ <a href="index.html">This link is already visited.</a>
+
+ <a href="foo-3.0.tar.gz">foo-3.0.tar.gz</a>
+ <a href="foo-3.0a1.tar.gz">foo-3.0a1.tar.gz</a>
+ </body>
+</html>
diff --git a/lib/spack/spack/test/data/web/4.html b/lib/spack/spack/test/data/web/4.html
new file mode 100644
index 0000000000..b5fe850f4d
--- /dev/null
+++ b/lib/spack/spack/test/data/web/4.html
@@ -0,0 +1,11 @@
+<html>
+ <head>
+ This is page 4.
+ </head>
+ <body>
+ This page is terminal and has no links to other pages.
+
+ <a href="foo-4.5.tar.gz">foo-4.5.tar.gz.</a>
+ <a href="foo-4.5-rc5.tar.gz">foo-4.1-rc5.tar.gz.</a>
+ </body>
+</html>
diff --git a/lib/spack/spack/test/data/web/index.html b/lib/spack/spack/test/data/web/index.html
new file mode 100644
index 0000000000..3985deeb35
--- /dev/null
+++ b/lib/spack/spack/test/data/web/index.html
@@ -0,0 +1,10 @@
+<html>
+ <head>
+ This is the root page.
+ </head>
+ <body>
+ <a href="1.html">list_depth=1 follows this.</a>
+
+ <a href="foo-0.0.0.tar.gz">foo-0.0.0.tar.gz</a>
+ </body>
+</html>
diff --git a/lib/spack/spack/test/database.py b/lib/spack/spack/test/database.py
index bbaa88b91d..72ae6ad278 100644
--- a/lib/spack/spack/test/database.py
+++ b/lib/spack/spack/test/database.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,12 +27,15 @@ These tests check the database is functioning properly,
both in memory and in its file
"""
import multiprocessing
-import os.path
-
+import os
import pytest
+
+from llnl.util.tty.colify import colify
+
import spack
import spack.store
-from llnl.util.tty.colify import colify
+from spack.test.conftest import MockPackageMultiRepo
+from spack.util.executable import Executable
def _print_ref_counts():
@@ -86,16 +89,29 @@ def _check_merkleiness():
def _check_db_sanity(install_db):
"""Utiilty function to check db against install layout."""
- expected = sorted(spack.store.layout.all_specs())
+ pkg_in_layout = sorted(spack.store.layout.all_specs())
actual = sorted(install_db.query())
- assert len(expected) == len(actual)
- for e, a in zip(expected, actual):
+ externals = sorted([x for x in actual if x.external])
+ nexpected = len(pkg_in_layout) + len(externals)
+
+ assert nexpected == len(actual)
+
+ non_external_in_db = sorted([x for x in actual if not x.external])
+
+ for e, a in zip(pkg_in_layout, non_external_in_db):
assert e == a
_check_merkleiness()
+def _mock_install(spec):
+ s = spack.spec.Spec(spec)
+ s.concretize()
+ pkg = spack.repo.get(s)
+ pkg.do_install(fake=True)
+
+
def _mock_remove(spec):
specs = spack.store.db.query(spec)
assert len(specs) == 1
@@ -103,6 +119,24 @@ def _mock_remove(spec):
spec.package.do_uninstall(spec)
+def test_default_queries(database):
+ install_db = database.mock.db
+ rec = install_db.get_record('zmpi')
+
+ spec = rec.spec
+
+ libraries = spec['zmpi'].libs
+ assert len(libraries) == 1
+
+ headers = spec['zmpi'].headers
+ assert len(headers) == 1
+
+ command = spec['zmpi'].command
+ assert isinstance(command, Executable)
+ assert command.name == 'zmpi'
+ assert os.path.exists(command.path)
+
+
def test_005_db_exists(database):
"""Make sure db cache file exists after creating."""
install_path = database.mock.path
@@ -115,7 +149,7 @@ def test_005_db_exists(database):
def test_010_all_install_sanity(database):
"""Ensure that the install layout reflects what we think it does."""
all_specs = spack.store.layout.all_specs()
- assert len(all_specs) == 13
+ assert len(all_specs) == 14
# Query specs with multiple configurations
mpileaks_specs = [s for s in all_specs if s.satisfies('mpileaks')]
@@ -195,7 +229,7 @@ def test_050_basic_query(database):
"""Ensure querying database is consistent with what is installed."""
install_db = database.mock.db
# query everything
- assert len(spack.store.db.query()) == 13
+ assert len(spack.store.db.query()) == 16
# query specs with multiple configurations
mpileaks_specs = install_db.query('mpileaks')
@@ -353,3 +387,38 @@ def test_110_no_write_with_exception_on_install(database):
# reload DB and make sure cmake was not written.
with install_db.read_transaction():
assert install_db.query('cmake', installed=any) == []
+
+
+def test_115_reindex_with_packages_not_in_repo(database, refresh_db_on_exit):
+ install_db = database.mock.db
+
+ saved_repo = spack.repo
+ # Dont add any package definitions to this repository, the idea is that
+ # packages should not have to be defined in the repository once they are
+ # installed
+ mock_repo = MockPackageMultiRepo([])
+ try:
+ spack.repo = mock_repo
+ spack.store.db.reindex(spack.store.layout)
+ _check_db_sanity(install_db)
+ finally:
+ spack.repo = saved_repo
+
+
+def test_external_entries_in_db(database):
+ install_db = database.mock.db
+
+ rec = install_db.get_record('mpileaks ^zmpi')
+ assert rec.spec.external_path is None
+ assert rec.spec.external_module is None
+
+ rec = install_db.get_record('externaltool')
+ assert rec.spec.external_path == '/path/to/external_tool'
+ assert rec.spec.external_module is None
+ assert rec.explicit is False
+
+ rec.spec.package.do_install(fake=True, explicit=True)
+ rec = install_db.get_record('externaltool')
+ assert rec.spec.external_path == '/path/to/external_tool'
+ assert rec.spec.external_module is None
+ assert rec.explicit is True
diff --git a/lib/spack/spack/test/directory_layout.py b/lib/spack/spack/test/directory_layout.py
index 2caadad0fe..b166ea4eac 100644
--- a/lib/spack/spack/test/directory_layout.py
+++ b/lib/spack/spack/test/directory_layout.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,10 +26,13 @@
This test verifies that the Spack directory layout works properly.
"""
import os
-
import pytest
+
+from llnl.util.filesystem import join_path
+
import spack
from spack.directory_layout import YamlDirectoryLayout
+from spack.directory_layout import InvalidDirectoryLayoutParametersError
from spack.repository import RepoPath
from spack.spec import Spec
@@ -43,6 +46,48 @@ def layout_and_dir(tmpdir):
yield YamlDirectoryLayout(str(tmpdir)), str(tmpdir)
+def test_yaml_directory_layout_parameters(
+ tmpdir, config
+):
+ """This tests the various parameters that can be used to configure
+ the install location """
+ spec = Spec('python')
+ spec.concretize()
+
+ # Ensure default layout matches expected spec format
+ layout_default = YamlDirectoryLayout(str(tmpdir))
+ path_default = layout_default.relative_path_for_spec(spec)
+ assert(path_default == spec.format(
+ "${ARCHITECTURE}/"
+ "${COMPILERNAME}-${COMPILERVER}/"
+ "${PACKAGE}-${VERSION}-${HASH}"))
+
+ # Test hash_length parameter works correctly
+ layout_10 = YamlDirectoryLayout(str(tmpdir), hash_len=10)
+ path_10 = layout_10.relative_path_for_spec(spec)
+ layout_7 = YamlDirectoryLayout(str(tmpdir), hash_len=7)
+ path_7 = layout_7.relative_path_for_spec(spec)
+
+ assert(len(path_default) - len(path_10) == 22)
+ assert(len(path_default) - len(path_7) == 25)
+
+ # Test path_scheme
+ arch, compiler, package7 = path_7.split('/')
+ scheme_package7 = "${PACKAGE}-${VERSION}-${HASH:7}"
+
+ layout_package7 = YamlDirectoryLayout(str(tmpdir),
+ path_scheme=scheme_package7)
+ path_package7 = layout_package7.relative_path_for_spec(spec)
+
+ assert(package7 == path_package7)
+
+ # Ensure conflicting parameters caught
+ with pytest.raises(InvalidDirectoryLayoutParametersError):
+ YamlDirectoryLayout(str(tmpdir),
+ hash_len=20,
+ path_scheme=scheme_package7)
+
+
def test_read_and_write_spec(
layout_and_dir, config, builtin_mock
):
@@ -92,23 +137,27 @@ def test_read_and_write_spec(
# TODO: increase reuse of build dependencies.
stored_deptypes = ('link', 'run')
expected = spec.copy(deps=stored_deptypes)
+ expected._mark_concrete()
+
+ assert expected.concrete
assert expected == spec_from_file
- assert expected.eq_dag # msg , spec_from_file
+ assert expected.eq_dag(spec_from_file)
assert spec_from_file.concrete
# Ensure that specs that come out "normal" are really normal.
with open(spec_path) as spec_file:
read_separately = Spec.from_yaml(spec_file.read())
- # TODO: revise this when build deps are in dag_hash
- norm = read_separately.normalized().copy(deps=stored_deptypes)
- assert norm == spec_from_file
+ # TODO: revise this when build deps are in dag_hash
+ norm = read_separately.normalized().copy(deps=stored_deptypes)
+ assert norm == spec_from_file
+ assert norm.eq_dag(spec_from_file)
- # TODO: revise this when build deps are in dag_hash
- conc = read_separately.concretized().copy(deps=stored_deptypes)
- assert conc == spec_from_file
+ # TODO: revise this when build deps are in dag_hash
+ conc = read_separately.concretized().copy(deps=stored_deptypes)
+ assert conc == spec_from_file
+ assert conc.eq_dag(spec_from_file)
- # Make sure the hash of the read-in spec is the same
assert expected.dag_hash() == spec_from_file.dag_hash()
# Ensure directories are properly removed
diff --git a/lib/spack/spack/test/environment.py b/lib/spack/spack/test/environment.py
index e9f0a5182f..c11c050820 100644
--- a/lib/spack/spack/test/environment.py
+++ b/lib/spack/spack/test/environment.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,182 +22,287 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import unittest
import os
+import pytest
+import spack.environment as environment
from spack import spack_root
-from llnl.util.filesystem import join_path
from spack.environment import EnvironmentModifications
-from spack.environment import SetEnv, UnsetEnv
from spack.environment import RemovePath, PrependPath, AppendPath
-from spack.util.environment import filter_system_paths, filter_system_bin_paths
-
-
-class EnvironmentTest(unittest.TestCase):
-
- def setUp(self):
- os.environ['UNSET_ME'] = 'foo'
- os.environ['EMPTY_PATH_LIST'] = ''
- os.environ['PATH_LIST'] = '/path/second:/path/third'
- os.environ['REMOVE_PATH_LIST'] = \
- '/a/b:/duplicate:/a/c:/remove/this:/a/d:/duplicate/:/f/g'
-
- def tearDown(self):
- pass
-
- def test_set(self):
- env = EnvironmentModifications()
- env.set('A', 'dummy value')
- env.set('B', 3)
- env.apply_modifications()
- self.assertEqual('dummy value', os.environ['A'])
- self.assertEqual(str(3), os.environ['B'])
-
- def test_unset(self):
- env = EnvironmentModifications()
- self.assertEqual('foo', os.environ['UNSET_ME'])
- env.unset('UNSET_ME')
- env.apply_modifications()
- self.assertRaises(KeyError, os.environ.__getitem__, 'UNSET_ME')
-
- def test_filter_system_paths(self):
- filtered = filter_system_paths([
- '/usr/local/Cellar/gcc/5.3.0/lib',
- '/usr/local/lib',
- '/usr/local',
- '/usr/local/include',
- '/usr/local/lib64',
- '/usr/local/opt/some-package/lib',
- '/usr/opt/lib',
- '/lib',
- '/',
- '/usr',
- '/lib64',
- '/include',
- '/opt/some-package/include',
- ])
- self.assertEqual(filtered,
- ['/usr/local/Cellar/gcc/5.3.0/lib',
- '/usr/local/opt/some-package/lib',
- '/usr/opt/lib',
- '/opt/some-package/include'])
-
- filtered = filter_system_bin_paths([
- '/usr/local/Cellar/gcc/5.3.0/bin',
- '/usr/local/bin',
- '/usr/local/opt/some-package/bin',
- '/usr/opt/bin',
- '/bin',
- '/opt/some-package/bin',
- ])
- self.assertEqual(filtered,
- ['/usr/local/bin',
- '/bin',
- '/usr/local/Cellar/gcc/5.3.0/bin',
- '/usr/local/opt/some-package/bin',
- '/usr/opt/bin',
- '/opt/some-package/bin'])
-
- def test_set_path(self):
- env = EnvironmentModifications()
- env.set_path('A', ['foo', 'bar', 'baz'])
- env.apply_modifications()
- self.assertEqual('foo:bar:baz', os.environ['A'])
-
- def test_path_manipulation(self):
- env = EnvironmentModifications()
-
- env.append_path('PATH_LIST', '/path/last')
- env.prepend_path('PATH_LIST', '/path/first')
-
- env.append_path('EMPTY_PATH_LIST', '/path/middle')
- env.append_path('EMPTY_PATH_LIST', '/path/last')
- env.prepend_path('EMPTY_PATH_LIST', '/path/first')
-
- env.append_path('NEWLY_CREATED_PATH_LIST', '/path/middle')
- env.append_path('NEWLY_CREATED_PATH_LIST', '/path/last')
- env.prepend_path('NEWLY_CREATED_PATH_LIST', '/path/first')
-
- env.remove_path('REMOVE_PATH_LIST', '/remove/this')
- env.remove_path('REMOVE_PATH_LIST', '/duplicate/')
-
- env.apply_modifications()
- self.assertEqual(
- '/path/first:/path/second:/path/third:/path/last',
- os.environ['PATH_LIST']
- )
- self.assertEqual(
- '/path/first:/path/middle:/path/last',
- os.environ['EMPTY_PATH_LIST']
- )
- self.assertEqual(
- '/path/first:/path/middle:/path/last',
- os.environ['NEWLY_CREATED_PATH_LIST']
- )
- self.assertEqual('/a/b:/a/c:/a/d:/f/g', os.environ['REMOVE_PATH_LIST'])
-
- def test_extra_arguments(self):
- env = EnvironmentModifications()
- env.set('A', 'dummy value', who='Pkg1')
- for x in env:
- assert 'who' in x.args
- env.apply_modifications()
- self.assertEqual('dummy value', os.environ['A'])
-
- def test_extend(self):
- env = EnvironmentModifications()
- env.set('A', 'dummy value')
- env.set('B', 3)
- copy_construct = EnvironmentModifications(env)
- self.assertEqual(len(copy_construct), 2)
- for x, y in zip(env, copy_construct):
- assert x is y
-
- def test_source_files(self):
- datadir = join_path(spack_root, 'lib', 'spack',
- 'spack', 'test', 'data')
- files = [
- join_path(datadir, 'sourceme_first.sh'),
- join_path(datadir, 'sourceme_second.sh'),
- join_path(datadir, 'sourceme_parameters.sh intel64')
- ]
- env = EnvironmentModifications.from_sourcing_files(*files)
- modifications = env.group_by_name()
-
- # This is sensitive to the user's environment; can include
- # spurious entries for things like PS1
- #
- # TODO: figure out how to make a bit more robust.
- self.assertTrue(len(modifications) >= 4)
-
- # Set new variables
- self.assertEqual(len(modifications['NEW_VAR']), 1)
- self.assertTrue(isinstance(modifications['NEW_VAR'][0], SetEnv))
- self.assertEqual(modifications['NEW_VAR'][0].value, 'new')
-
- self.assertEqual(len(modifications['FOO']), 1)
- self.assertTrue(isinstance(modifications['FOO'][0], SetEnv))
- self.assertEqual(modifications['FOO'][0].value, 'intel64')
-
- # Unset variables
- self.assertEqual(len(modifications['EMPTY_PATH_LIST']), 1)
- self.assertTrue(isinstance(
- modifications['EMPTY_PATH_LIST'][0], UnsetEnv))
- # Modified variables
- self.assertEqual(len(modifications['UNSET_ME']), 1)
- self.assertTrue(isinstance(modifications['UNSET_ME'][0], SetEnv))
- self.assertEqual(modifications['UNSET_ME'][0].value, 'overridden')
-
- self.assertEqual(len(modifications['PATH_LIST']), 3)
- self.assertTrue(
- isinstance(modifications['PATH_LIST'][0], RemovePath)
- )
- self.assertEqual(modifications['PATH_LIST'][0].value, '/path/third')
- self.assertTrue(
- isinstance(modifications['PATH_LIST'][1], AppendPath)
- )
- self.assertEqual(modifications['PATH_LIST'][1].value, '/path/fourth')
- self.assertTrue(
- isinstance(modifications['PATH_LIST'][2], PrependPath)
- )
- self.assertEqual(modifications['PATH_LIST'][2].value, '/path/first')
+from spack.environment import SetEnv, UnsetEnv
+from spack.util.environment import filter_system_paths, is_system_path
+
+
+def test_inspect_path(tmpdir):
+ inspections = {
+ 'bin': ['PATH'],
+ 'man': ['MANPATH'],
+ 'share/man': ['MANPATH'],
+ 'share/aclocal': ['ACLOCAL_PATH'],
+ 'lib': ['LIBRARY_PATH', 'LD_LIBRARY_PATH'],
+ 'lib64': ['LIBRARY_PATH', 'LD_LIBRARY_PATH'],
+ 'include': ['CPATH'],
+ 'lib/pkgconfig': ['PKG_CONFIG_PATH'],
+ 'lib64/pkgconfig': ['PKG_CONFIG_PATH'],
+ '': ['CMAKE_PREFIX_PATH']
+ }
+
+ tmpdir.mkdir('bin')
+ tmpdir.mkdir('lib')
+ tmpdir.mkdir('include')
+
+ env = environment.inspect_path(str(tmpdir), inspections)
+ names = [item.name for item in env]
+ assert 'PATH' in names
+ assert 'LIBRARY_PATH' in names
+ assert 'LD_LIBRARY_PATH' in names
+ assert 'CPATH' in names
+
+
+def test_exclude_paths_from_inspection():
+ inspections = {
+ 'lib': ['LIBRARY_PATH', 'LD_LIBRARY_PATH'],
+ 'lib64': ['LIBRARY_PATH', 'LD_LIBRARY_PATH'],
+ 'include': ['CPATH']
+ }
+
+ env = environment.inspect_path(
+ '/usr', inspections, exclude=is_system_path
+ )
+
+ assert len(env) == 0
+
+
+@pytest.fixture()
+def prepare_environment_for_tests():
+ """Sets a few dummy variables in the current environment, that will be
+ useful for the tests below.
+ """
+ os.environ['UNSET_ME'] = 'foo'
+ os.environ['EMPTY_PATH_LIST'] = ''
+ os.environ['PATH_LIST'] = '/path/second:/path/third'
+ os.environ['REMOVE_PATH_LIST'] = '/a/b:/duplicate:/a/c:/remove/this:/a/d:/duplicate/:/f/g' # NOQA: ignore=E501
+ yield
+ for x in ('UNSET_ME', 'EMPTY_PATH_LIST', 'PATH_LIST', 'REMOVE_PATH_LIST'):
+ if x in os.environ:
+ del os.environ[x]
+
+
+@pytest.fixture
+def env(prepare_environment_for_tests):
+ """Returns an empty EnvironmentModifications object."""
+ return EnvironmentModifications()
+
+
+@pytest.fixture
+def miscellaneous_paths():
+ """Returns a list of paths, including system ones."""
+ return [
+ '/usr/local/Cellar/gcc/5.3.0/lib',
+ '/usr/local/lib',
+ '/usr/local',
+ '/usr/local/include',
+ '/usr/local/lib64',
+ '/usr/local/opt/some-package/lib',
+ '/usr/opt/lib',
+ '/usr/local/../bin',
+ '/lib',
+ '/',
+ '/usr',
+ '/usr/',
+ '/usr/bin',
+ '/bin64',
+ '/lib64',
+ '/include',
+ '/include/',
+ '/opt/some-package/include',
+ '/opt/some-package/local/..',
+ ]
+
+
+@pytest.fixture
+def files_to_be_sourced():
+ """Returns a list of files to be sourced"""
+ datadir = os.path.join(
+ spack_root, 'lib', 'spack', 'spack', 'test', 'data'
+ )
+
+ files = [
+ os.path.join(datadir, 'sourceme_first.sh'),
+ os.path.join(datadir, 'sourceme_second.sh'),
+ os.path.join(datadir, 'sourceme_parameters.sh'),
+ os.path.join(datadir, 'sourceme_unicode.sh')
+ ]
+
+ return files
+
+
+def test_set(env):
+ """Tests setting values in the environment."""
+
+ # Here we are storing the commands to set a couple of variables
+ env.set('A', 'dummy value')
+ env.set('B', 3)
+
+ # ...and then we are executing them
+ env.apply_modifications()
+
+ assert 'dummy value' == os.environ['A']
+ assert str(3) == os.environ['B']
+
+
+def test_append_flags(env):
+ """Tests appending to a value in the environment."""
+
+ # Store a couple of commands
+ env.append_flags('APPEND_TO_ME', 'flag1')
+ env.append_flags('APPEND_TO_ME', 'flag2')
+
+ # ... execute the commands
+ env.apply_modifications()
+
+ assert 'flag1 flag2' == os.environ['APPEND_TO_ME']
+
+
+def test_unset(env):
+ """Tests unsetting values in the environment."""
+
+ # Assert that the target variable is there and unset it
+ assert 'foo' == os.environ['UNSET_ME']
+ env.unset('UNSET_ME')
+ env.apply_modifications()
+
+ # Trying to retrieve is after deletion should cause a KeyError
+ with pytest.raises(KeyError):
+ os.environ['UNSET_ME']
+
+
+def test_filter_system_paths(miscellaneous_paths):
+ """Tests that the filtering of system paths works as expected."""
+ filtered = filter_system_paths(miscellaneous_paths)
+ expected = [
+ '/usr/local/Cellar/gcc/5.3.0/lib',
+ '/usr/local/opt/some-package/lib',
+ '/usr/opt/lib',
+ '/opt/some-package/include',
+ '/opt/some-package/local/..',
+ ]
+ assert filtered == expected
+
+
+def test_set_path(env):
+ """Tests setting paths in an environment variable."""
+
+ # Check setting paths with the default separator
+ env.set_path('A', ['foo', 'bar', 'baz'])
+ env.apply_modifications()
+
+ assert 'foo:bar:baz' == os.environ['A']
+
+ env.set_path('B', ['foo', 'bar', 'baz'], separator=';')
+ env.apply_modifications()
+
+ assert 'foo;bar;baz' == os.environ['B']
+
+
+def test_path_manipulation(env):
+ """Tests manipulating list of paths in the environment."""
+
+ env.append_path('PATH_LIST', '/path/last')
+ env.prepend_path('PATH_LIST', '/path/first')
+
+ env.append_path('EMPTY_PATH_LIST', '/path/middle')
+ env.append_path('EMPTY_PATH_LIST', '/path/last')
+ env.prepend_path('EMPTY_PATH_LIST', '/path/first')
+
+ env.append_path('NEWLY_CREATED_PATH_LIST', '/path/middle')
+ env.append_path('NEWLY_CREATED_PATH_LIST', '/path/last')
+ env.prepend_path('NEWLY_CREATED_PATH_LIST', '/path/first')
+
+ env.remove_path('REMOVE_PATH_LIST', '/remove/this')
+ env.remove_path('REMOVE_PATH_LIST', '/duplicate/')
+
+ env.apply_modifications()
+
+ expected = '/path/first:/path/second:/path/third:/path/last'
+ assert os.environ['PATH_LIST'] == expected
+
+ expected = '/path/first:/path/middle:/path/last'
+ assert os.environ['EMPTY_PATH_LIST'] == expected
+
+ expected = '/path/first:/path/middle:/path/last'
+ assert os.environ['NEWLY_CREATED_PATH_LIST'] == expected
+
+ assert os.environ['REMOVE_PATH_LIST'] == '/a/b:/a/c:/a/d:/f/g'
+
+
+def test_extra_arguments(env):
+ """Tests that we can attach extra arguments to any command."""
+ env.set('A', 'dummy value', who='Pkg1')
+ for x in env:
+ assert 'who' in x.args
+
+ env.apply_modifications()
+ assert 'dummy value' == os.environ['A']
+
+
+def test_extend(env):
+ """Tests that we can construct a list of environment modifications
+ starting from another list.
+ """
+ env.set('A', 'dummy value')
+ env.set('B', 3)
+ copy_construct = EnvironmentModifications(env)
+
+ assert len(copy_construct) == 2
+
+ for x, y in zip(env, copy_construct):
+ assert x is y
+
+
+@pytest.mark.usefixtures('prepare_environment_for_tests')
+def test_source_files(files_to_be_sourced):
+ """Tests the construction of a list of environment modifications that are
+ the result of sourcing a file.
+ """
+ env = EnvironmentModifications()
+ for filename in files_to_be_sourced:
+ if filename.endswith('sourceme_parameters.sh'):
+ env.extend(EnvironmentModifications.from_sourcing_file(
+ filename, 'intel64'))
+ else:
+ env.extend(EnvironmentModifications.from_sourcing_file(filename))
+
+ modifications = env.group_by_name()
+
+ # This is sensitive to the user's environment; can include
+ # spurious entries for things like PS1
+ #
+ # TODO: figure out how to make a bit more robust.
+ assert len(modifications) >= 5
+
+ # Set new variables
+ assert len(modifications['NEW_VAR']) == 1
+ assert isinstance(modifications['NEW_VAR'][0], SetEnv)
+ assert modifications['NEW_VAR'][0].value == 'new'
+
+ assert len(modifications['FOO']) == 1
+ assert isinstance(modifications['FOO'][0], SetEnv)
+ assert modifications['FOO'][0].value == 'intel64'
+
+ # Unset variables
+ assert len(modifications['EMPTY_PATH_LIST']) == 1
+ assert isinstance(modifications['EMPTY_PATH_LIST'][0], UnsetEnv)
+
+ # Modified variables
+ assert len(modifications['UNSET_ME']) == 1
+ assert isinstance(modifications['UNSET_ME'][0], SetEnv)
+ assert modifications['UNSET_ME'][0].value == 'overridden'
+
+ assert len(modifications['PATH_LIST']) == 3
+ assert isinstance(modifications['PATH_LIST'][0], RemovePath)
+ assert modifications['PATH_LIST'][0].value == '/path/third'
+ assert isinstance(modifications['PATH_LIST'][1], AppendPath)
+ assert modifications['PATH_LIST'][1].value == '/path/fourth'
+ assert isinstance(modifications['PATH_LIST'][2], PrependPath)
+ assert modifications['PATH_LIST'][2].value == '/path/first'
diff --git a/lib/spack/spack/test/file_cache.py b/lib/spack/spack/test/file_cache.py
index cc66beda2e..7098b9673e 100644
--- a/lib/spack/spack/test/file_cache.py
+++ b/lib/spack/spack/test/file_cache.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,62 +22,54 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""
-Test Spack's FileCache.
-"""
+"""Test Spack's FileCache."""
import os
-import shutil
-import tempfile
-import unittest
+import pytest
from spack.file_cache import FileCache
-class FileCacheTest(unittest.TestCase):
- """Ensure that a file cache can properly write to a file and recover its
- contents."""
+@pytest.fixture()
+def file_cache(tmpdir):
+ """Returns a properly initialized FileCache instance"""
+ return FileCache(str(tmpdir))
- def setUp(self):
- self.scratch_dir = tempfile.mkdtemp()
- self.cache = FileCache(self.scratch_dir)
- def tearDown(self):
- shutil.rmtree(self.scratch_dir)
+def test_write_and_read_cache_file(file_cache):
+ """Test writing then reading a cached file."""
+ with file_cache.write_transaction('test.yaml') as (old, new):
+ assert old is None
+ assert new is not None
+ new.write("foobar\n")
- def test_write_and_read_cache_file(self):
- """Test writing then reading a cached file."""
- with self.cache.write_transaction('test.yaml') as (old, new):
- self.assertTrue(old is None)
- self.assertTrue(new is not None)
- new.write("foobar\n")
+ with file_cache.read_transaction('test.yaml') as stream:
+ text = stream.read()
+ assert text == "foobar\n"
- with self.cache.read_transaction('test.yaml') as stream:
- text = stream.read()
- self.assertEqual("foobar\n", text)
- def test_remove(self):
- """Test removing an entry from the cache."""
- self.test_write_and_write_cache_file()
+def test_write_and_remove_cache_file(file_cache):
+ """Test two write transactions on a cached file. Then try to remove an
+ entry from it.
+ """
- self.cache.remove('test.yaml')
+ with file_cache.write_transaction('test.yaml') as (old, new):
+ assert old is None
+ assert new is not None
+ new.write("foobar\n")
- self.assertFalse(os.path.exists(self.cache.cache_path('test.yaml')))
- self.assertFalse(os.path.exists(self.cache._lock_path('test.yaml')))
+ with file_cache.write_transaction('test.yaml') as (old, new):
+ assert old is not None
+ text = old.read()
+ assert text == "foobar\n"
+ assert new is not None
+ new.write("barbaz\n")
- def test_write_and_write_cache_file(self):
- """Test two write transactions on a cached file."""
- with self.cache.write_transaction('test.yaml') as (old, new):
- self.assertTrue(old is None)
- self.assertTrue(new is not None)
- new.write("foobar\n")
+ with file_cache.read_transaction('test.yaml') as stream:
+ text = stream.read()
+ assert text == "barbaz\n"
- with self.cache.write_transaction('test.yaml') as (old, new):
- self.assertTrue(old is not None)
- text = old.read()
- self.assertEqual("foobar\n", text)
- self.assertTrue(new is not None)
- new.write("barbaz\n")
+ file_cache.remove('test.yaml')
- with self.cache.read_transaction('test.yaml') as stream:
- text = stream.read()
- self.assertEqual("barbaz\n", text)
+ # After removal both the file and the lock file should not exist
+ assert not os.path.exists(file_cache.cache_path('test.yaml'))
+ assert not os.path.exists(file_cache._lock_path('test.yaml'))
diff --git a/lib/spack/spack/test/git_fetch.py b/lib/spack/spack/test/git_fetch.py
index 3bd998c5c2..b28c553753 100644
--- a/lib/spack/spack/test/git_fetch.py
+++ b/lib/spack/spack/test/git_fetch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,23 +26,53 @@ import os
import pytest
import spack
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir, join_path, touch
from spack.spec import Spec
from spack.version import ver
+from spack.fetch_strategy import GitFetchStrategy
+from spack.util.executable import which
-@pytest.fixture(params=['master', 'branch', 'tag', 'commit'])
-def type_of_test(request):
- """Returns one of the test type available for the mock_git_repository"""
- return request.param
+pytestmark = pytest.mark.skipif(
+ not which('git'), reason='requires git to be installed')
-def test_fetch(
- type_of_test,
- mock_git_repository,
- config,
- refresh_builtin_mock
-):
+@pytest.fixture(params=[None, '1.8.5.2', '1.8.5.1', '1.7.10', '1.7.0'])
+def git_version(request):
+ """Tests GitFetchStrategy behavior for different git versions.
+
+ GitFetchStrategy tries to optimize using features of newer git
+ versions, but needs to work with older git versions. To ensure code
+ paths for old versions still work, we fake it out here and make it
+ use the backward-compatibility code paths with newer git versions.
+ """
+ git = which('git', required=True)
+ real_git_version = ver(git('--version', output=str).lstrip('git version '))
+
+ if request.param is None:
+ yield # don't patch; run with the real git_version method.
+ else:
+ test_git_version = ver(request.param)
+ if test_git_version > real_git_version:
+ pytest.skip("Can't test clone logic for newer version of git.")
+
+ # patch the fetch strategy to think it's using a lower git version.
+ # we use this to test what we'd need to do with older git versions
+ # using a newer git installation.
+ git_version_method = GitFetchStrategy.git_version
+ GitFetchStrategy.git_version = test_git_version
+ yield
+ GitFetchStrategy.git_version = git_version_method
+
+
+@pytest.mark.parametrize("type_of_test", ['master', 'branch', 'tag', 'commit'])
+@pytest.mark.parametrize("secure", [True, False])
+def test_fetch(type_of_test,
+ secure,
+ mock_git_repository,
+ config,
+ refresh_builtin_mock,
+ git_version):
"""Tries to:
1. Fetch the repo using a fetch strategy constructed with
@@ -55,30 +85,38 @@ def test_fetch(
# Retrieve the right test parameters
t = mock_git_repository.checks[type_of_test]
h = mock_git_repository.hash
+
# Construct the package under test
spec = Spec('git-test')
spec.concretize()
pkg = spack.repo.get(spec, new=True)
pkg.versions[ver('git')] = t.args
+
# Enter the stage directory and check some properties
with pkg.stage:
- pkg.do_stage()
- assert h('HEAD') == h(t.revision)
+ try:
+ spack.insecure = secure
+ pkg.do_stage()
+ finally:
+ spack.insecure = False
+
+ with working_dir(pkg.stage.source_path):
+ assert h('HEAD') == h(t.revision)
- file_path = join_path(pkg.stage.source_path, t.file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ file_path = join_path(pkg.stage.source_path, t.file)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- os.unlink(file_path)
- assert not os.path.isfile(file_path)
+ os.unlink(file_path)
+ assert not os.path.isfile(file_path)
- untracked_file = 'foobarbaz'
- touch(untracked_file)
- assert os.path.isfile(untracked_file)
- pkg.do_restage()
- assert not os.path.isfile(untracked_file)
+ untracked_file = 'foobarbaz'
+ touch(untracked_file)
+ assert os.path.isfile(untracked_file)
+ pkg.do_restage()
+ assert not os.path.isfile(untracked_file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- assert h('HEAD') == h(t.revision)
+ assert h('HEAD') == h(t.revision)
diff --git a/lib/spack/spack/test/graph.py b/lib/spack/spack/test/graph.py
new file mode 100644
index 0000000000..7cd82c3a88
--- /dev/null
+++ b/lib/spack/spack/test/graph.py
@@ -0,0 +1,138 @@
+##############################################################################
+# 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/spack/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 six import StringIO
+
+from spack.spec import Spec
+from spack.graph import AsciiGraph, topological_sort, graph_dot
+
+
+def test_topo_sort(builtin_mock):
+ """Test topo sort gives correct order."""
+ s = Spec('mpileaks').normalized()
+
+ topo = topological_sort(s)
+
+ assert topo.index('mpileaks') < topo.index('callpath')
+ assert topo.index('mpileaks') < topo.index('mpi')
+ assert topo.index('mpileaks') < topo.index('dyninst')
+ assert topo.index('mpileaks') < topo.index('libdwarf')
+ assert topo.index('mpileaks') < topo.index('libelf')
+
+ assert topo.index('callpath') < topo.index('mpi')
+ assert topo.index('callpath') < topo.index('dyninst')
+ assert topo.index('callpath') < topo.index('libdwarf')
+ assert topo.index('callpath') < topo.index('libelf')
+
+ assert topo.index('dyninst') < topo.index('libdwarf')
+ assert topo.index('dyninst') < topo.index('libelf')
+
+ assert topo.index('libdwarf') < topo.index('libelf')
+
+
+def test_static_graph_mpileaks(builtin_mock):
+ """Test a static spack graph for a simple package."""
+ s = Spec('mpileaks').normalized()
+
+ stream = StringIO()
+ graph_dot([s], static=True, out=stream)
+
+ dot = stream.getvalue()
+
+ assert ' "mpileaks" [label="mpileaks"]\n' in dot
+ assert ' "dyninst" [label="dyninst"]\n' in dot
+ assert ' "callpath" [label="callpath"]\n' in dot
+ assert ' "libelf" [label="libelf"]\n' in dot
+ assert ' "libdwarf" [label="libdwarf"]\n' in dot
+
+ assert ' "dyninst" -> "libdwarf"\n' in dot
+ assert ' "callpath" -> "dyninst"\n' in dot
+ assert ' "mpileaks" -> "mpi"\n' in dot
+ assert ' "libdwarf" -> "libelf"\n' in dot
+ assert ' "callpath" -> "mpi"\n' in dot
+ assert ' "mpileaks" -> "callpath"\n' in dot
+ assert ' "dyninst" -> "libelf"\n' in dot
+
+
+def test_dynamic_dot_graph_mpileaks(builtin_mock):
+ """Test dynamically graphing the mpileaks package."""
+ s = Spec('mpileaks').normalized()
+
+ stream = StringIO()
+ graph_dot([s], static=False, out=stream)
+
+ dot = stream.getvalue()
+
+ mpileaks_hash, mpileaks_lbl = s.dag_hash(), s.format('$_$/')
+ mpi_hash, mpi_lbl = s['mpi'].dag_hash(), s['mpi'].format('$_$/')
+ callpath_hash, callpath_lbl = (
+ s['callpath'].dag_hash(), s['callpath'].format('$_$/'))
+ dyninst_hash, dyninst_lbl = (
+ s['dyninst'].dag_hash(), s['dyninst'].format('$_$/'))
+ libdwarf_hash, libdwarf_lbl = (
+ s['libdwarf'].dag_hash(), s['libdwarf'].format('$_$/'))
+ libelf_hash, libelf_lbl = (
+ s['libelf'].dag_hash(), s['libelf'].format('$_$/'))
+
+ assert ' "%s" [label="%s"]\n' % (mpileaks_hash, mpileaks_lbl) in dot
+ assert ' "%s" [label="%s"]\n' % (callpath_hash, callpath_lbl) in dot
+ assert ' "%s" [label="%s"]\n' % (mpi_hash, mpi_lbl) in dot
+ assert ' "%s" [label="%s"]\n' % (dyninst_hash, dyninst_lbl) in dot
+ assert ' "%s" [label="%s"]\n' % (libdwarf_hash, libdwarf_lbl) in dot
+ assert ' "%s" [label="%s"]\n' % (libelf_hash, libelf_lbl) in dot
+
+ assert ' "%s" -> "%s"\n' % (dyninst_hash, libdwarf_hash) in dot
+ assert ' "%s" -> "%s"\n' % (callpath_hash, dyninst_hash) in dot
+ assert ' "%s" -> "%s"\n' % (mpileaks_hash, mpi_hash) in dot
+ assert ' "%s" -> "%s"\n' % (libdwarf_hash, libelf_hash) in dot
+ assert ' "%s" -> "%s"\n' % (callpath_hash, mpi_hash) in dot
+ assert ' "%s" -> "%s"\n' % (mpileaks_hash, callpath_hash) in dot
+ assert ' "%s" -> "%s"\n' % (dyninst_hash, libelf_hash) in dot
+
+
+def test_ascii_graph_mpileaks(builtin_mock):
+ """Test dynamically graphing the mpileaks package."""
+ s = Spec('mpileaks').normalized()
+
+ stream = StringIO()
+ graph = AsciiGraph()
+ graph.write(s, out=stream, color=False)
+ string = stream.getvalue()
+
+ # Some lines in spack graph still have trailing space
+ # TODO: fix this.
+ string = '\n'.join([line.rstrip() for line in string.split('\n')])
+
+ assert string == r'''o mpileaks
+|\
+| o callpath
+|/|
+o | mpi
+ /
+o dyninst
+|\
+| o libdwarf
+|/
+o libelf
+'''
diff --git a/lib/spack/spack/test/hg_fetch.py b/lib/spack/spack/test/hg_fetch.py
index 71e4693c56..6a22502e86 100644
--- a/lib/spack/spack/test/hg_fetch.py
+++ b/lib/spack/spack/test/hg_fetch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,19 +26,21 @@ import os
import pytest
import spack
-from llnl.util.filesystem import *
+from llnl.util.filesystem import working_dir, join_path, touch
from spack.spec import Spec
from spack.version import ver
+from spack.util.executable import which
-@pytest.fixture(params=['default', 'rev0'])
-def type_of_test(request):
- """Returns one of the test type available for the mock_hg_repository"""
- return request.param
+pytestmark = pytest.mark.skipif(
+ not which('hg'), reason='requires mercurial to be installed')
+@pytest.mark.parametrize("type_of_test", ['default', 'rev0'])
+@pytest.mark.parametrize("secure", [True, False])
def test_fetch(
type_of_test,
+ secure,
mock_hg_repository,
config,
refresh_builtin_mock
@@ -55,30 +57,38 @@ def test_fetch(
# Retrieve the right test parameters
t = mock_hg_repository.checks[type_of_test]
h = mock_hg_repository.hash
+
# Construct the package under test
spec = Spec('hg-test')
spec.concretize()
pkg = spack.repo.get(spec, new=True)
pkg.versions[ver('hg')] = t.args
+
# Enter the stage directory and check some properties
with pkg.stage:
- pkg.do_stage()
- assert h() == t.revision
+ try:
+ spack.insecure = secure
+ pkg.do_stage()
+ finally:
+ spack.insecure = False
+
+ with working_dir(pkg.stage.source_path):
+ assert h() == t.revision
- file_path = join_path(pkg.stage.source_path, t.file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ file_path = join_path(pkg.stage.source_path, t.file)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- os.unlink(file_path)
- assert not os.path.isfile(file_path)
+ os.unlink(file_path)
+ assert not os.path.isfile(file_path)
- untracked_file = 'foobarbaz'
- touch(untracked_file)
- assert os.path.isfile(untracked_file)
- pkg.do_restage()
- assert not os.path.isfile(untracked_file)
+ untracked_file = 'foobarbaz'
+ touch(untracked_file)
+ assert os.path.isfile(untracked_file)
+ pkg.do_restage()
+ assert not os.path.isfile(untracked_file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- assert h() == t.revision
+ assert h() == t.revision
diff --git a/lib/spack/spack/test/install.py b/lib/spack/spack/test/install.py
index f10c3a37e9..86b95459f4 100644
--- a/lib/spack/spack/test/install.py
+++ b/lib/spack/spack/test/install.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,43 +22,15 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import os
import pytest
+
import spack
import spack.store
-from spack.database import Database
-from spack.directory_layout import YamlDirectoryLayout
-from spack.fetch_strategy import URLFetchStrategy, FetchStrategyComposite
from spack.spec import Spec
-@pytest.fixture()
-def install_mockery(tmpdir, config, builtin_mock):
- """Hooks a fake install directory and a fake db into Spack."""
- layout = spack.store.layout
- db = spack.store.db
- # Use a fake install directory to avoid conflicts bt/w
- # installed pkgs and mock packages.
- spack.store.layout = YamlDirectoryLayout(str(tmpdir))
- spack.store.db = Database(str(tmpdir))
- # We use a fake package, so skip the checksum.
- spack.do_checksum = False
- yield
- # Turn checksumming back on
- spack.do_checksum = True
- # Restore Spack's layout.
- spack.store.layout = layout
- spack.store.db = db
-
-
-def fake_fetchify(url, pkg):
- """Fake the URL for a package so it downloads from a file."""
- fetcher = FetchStrategyComposite()
- fetcher.append(URLFetchStrategy(url))
- pkg.fetcher = fetcher
-
-
-@pytest.mark.usefixtures('install_mockery')
-def test_install_and_uninstall(mock_archive):
+def test_install_and_uninstall(install_mockery, mock_fetch):
# Get a basic concrete spec for the trivial install package.
spec = Spec('trivial-install-test-package')
spec.concretize()
@@ -67,8 +39,6 @@ def test_install_and_uninstall(mock_archive):
# Get the package
pkg = spack.repo.get(spec)
- fake_fetchify(mock_archive.url, pkg)
-
try:
pkg.do_install()
pkg.do_uninstall()
@@ -77,28 +47,163 @@ def test_install_and_uninstall(mock_archive):
raise
-@pytest.mark.usefixtures('install_mockery')
-def test_store(mock_archive):
- spec = Spec('cmake-client').concretized()
+def mock_remove_prefix(*args):
+ raise MockInstallError(
+ "Intentional error",
+ "Mock remove_prefix method intentionally fails")
- for s in spec.traverse():
- fake_fetchify(mock_archive.url, s.package)
- pkg = spec.package
+class RemovePrefixChecker(object):
+ def __init__(self, wrapped_rm_prefix):
+ self.removed = False
+ self.wrapped_rm_prefix = wrapped_rm_prefix
+
+ def remove_prefix(self):
+ self.removed = True
+ self.wrapped_rm_prefix()
+
+
+class MockStage(object):
+ def __init__(self, wrapped_stage):
+ self.wrapped_stage = wrapped_stage
+ self.test_destroyed = False
+
+ def __enter__(self):
+ self.create()
+ return self
+
+ def __exit__(self, exc_type, exc_val, exc_tb):
+ if exc_type is None:
+ self.destroy()
+
+ def destroy(self):
+ self.test_destroyed = True
+ self.wrapped_stage.destroy()
+
+ def create(self):
+ self.wrapped_stage.create()
+
+ def __getattr__(self, attr):
+ return getattr(self.wrapped_stage, attr)
+
+
+def test_partial_install_delete_prefix_and_stage(install_mockery, mock_fetch):
+ spec = Spec('canfail').concretized()
+ pkg = spack.repo.get(spec)
+ remove_prefix = spack.package.Package.remove_prefix
+ instance_rm_prefix = pkg.remove_prefix
+
+ try:
+ pkg.succeed = False
+ spack.package.Package.remove_prefix = mock_remove_prefix
+ with pytest.raises(MockInstallError):
+ pkg.do_install()
+ assert os.path.isdir(pkg.prefix)
+ rm_prefix_checker = RemovePrefixChecker(instance_rm_prefix)
+ spack.package.Package.remove_prefix = rm_prefix_checker.remove_prefix
+
+ pkg.succeed = True
+ pkg.stage = MockStage(pkg.stage)
+
+ pkg.do_install(restage=True)
+ assert rm_prefix_checker.removed
+ assert pkg.stage.test_destroyed
+ assert pkg.installed
+
+ finally:
+ spack.package.Package.remove_prefix = remove_prefix
+
+
+def test_dont_add_patches_to_installed_package(install_mockery, mock_fetch):
+ import sys
+ dependency = Spec('dependency-install')
+ dependency.concretize()
+ dependency.package.do_install()
+
+ dependency.package.patches['dependency-install'] = [
+ sys.modules['spack.patch'].Patch.create(
+ None, 'file://fake.patch', sha256='unused-hash')]
+
+ dependency_hash = dependency.dag_hash()
+ dependent = Spec('dependent-install ^/' + dependency_hash)
+ dependent.concretize()
+
+ assert dependent['dependency-install'] == dependency
+
+
+def test_installed_dependency_request_conflicts(
+ install_mockery, mock_fetch, refresh_builtin_mock):
+ dependency = Spec('dependency-install')
+ dependency.concretize()
+ dependency.package.do_install()
+
+ dependency_hash = dependency.dag_hash()
+ dependent = Spec(
+ 'conflicting-dependent ^/' + dependency_hash)
+ with pytest.raises(spack.spec.UnsatisfiableSpecError):
+ dependent.concretize()
+
+
+@pytest.mark.disable_clean_stage_check
+def test_partial_install_keep_prefix(install_mockery, mock_fetch):
+ spec = Spec('canfail').concretized()
+ pkg = spack.repo.get(spec)
+
+ # Normally the stage should start unset, but other tests set it
+ pkg._stage = None
+ remove_prefix = spack.package.Package.remove_prefix
+ try:
+ # If remove_prefix is called at any point in this test, that is an
+ # error
+ pkg.succeed = False # make the build fail
+ spack.package.Package.remove_prefix = mock_remove_prefix
+ with pytest.raises(spack.build_environment.ChildError):
+ pkg.do_install(keep_prefix=True)
+ assert os.path.exists(pkg.prefix)
+
+ pkg.succeed = True # make the build succeed
+ pkg.stage = MockStage(pkg.stage)
+ pkg.do_install(keep_prefix=True)
+ assert pkg.installed
+ assert not pkg.stage.test_destroyed
+
+ finally:
+ spack.package.Package.remove_prefix = remove_prefix
+
+
+def test_second_install_no_overwrite_first(install_mockery, mock_fetch):
+ spec = Spec('canfail').concretized()
+ pkg = spack.repo.get(spec)
+ remove_prefix = spack.package.Package.remove_prefix
try:
+ spack.package.Package.remove_prefix = mock_remove_prefix
+
+ pkg.succeed = True
+ pkg.do_install()
+ assert pkg.installed
+
+ # If Package.install is called after this point, it will fail
+ pkg.succeed = False
pkg.do_install()
- except Exception:
- pkg.remove_prefix()
- raise
+ finally:
+ spack.package.Package.remove_prefix = remove_prefix
-@pytest.mark.usefixtures('install_mockery')
-def test_failing_build(mock_archive):
- spec = Spec('failing-build').concretized()
- for s in spec.traverse():
- fake_fetchify(mock_archive.url, s.package)
+def test_store(install_mockery, mock_fetch):
+ spec = Spec('cmake-client').concretized()
+ pkg = spec.package
+ pkg.do_install()
+
+@pytest.mark.disable_clean_stage_check
+def test_failing_build(install_mockery, mock_fetch):
+ spec = Spec('failing-build').concretized()
pkg = spec.package
+
with pytest.raises(spack.build_environment.ChildError):
pkg.do_install()
+
+
+class MockInstallError(spack.error.SpackError):
+ pass
diff --git a/lib/spack/spack/test/library_list.py b/lib/spack/spack/test/library_list.py
deleted file mode 100644
index 7fc2fd222f..0000000000
--- a/lib/spack/spack/test/library_list.py
+++ /dev/null
@@ -1,111 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-
-import unittest
-
-from llnl.util.filesystem import LibraryList
-
-
-class LibraryListTest(unittest.TestCase):
- def setUp(self):
- l = [
- '/dir1/liblapack.a',
- '/dir2/libfoo.dylib',
- '/dir1/libblas.a',
- '/dir3/libbar.so',
- 'libbaz.so'
- ]
- self.liblist = LibraryList(l)
-
- def test_repr(self):
- x = eval(repr(self.liblist))
- self.assertEqual(self.liblist, x)
-
- def test_joined_and_str(self):
- s1 = self.liblist.joined()
- self.assertEqual(
- s1,
- '/dir1/liblapack.a /dir2/libfoo.dylib /dir1/libblas.a /dir3/libbar.so libbaz.so' # NOQA: ignore=E501
- )
- s2 = str(self.liblist)
- self.assertEqual(s1, s2)
- s3 = self.liblist.joined(';')
- self.assertEqual(
- s3,
- '/dir1/liblapack.a;/dir2/libfoo.dylib;/dir1/libblas.a;/dir3/libbar.so;libbaz.so' # NOQA: ignore=E501
- )
-
- def test_flags(self):
- search_flags = self.liblist.search_flags
- self.assertTrue('-L/dir1' in search_flags)
- self.assertTrue('-L/dir2' in search_flags)
- self.assertTrue('-L/dir3' in search_flags)
- self.assertTrue(isinstance(search_flags, str))
-
- link_flags = self.liblist.link_flags
- self.assertEqual(
- link_flags,
- '-llapack -lfoo -lblas -lbar -lbaz'
- )
-
- ld_flags = self.liblist.ld_flags
- self.assertEqual(ld_flags, search_flags + ' ' + link_flags)
-
- def test_paths_manipulation(self):
- names = self.liblist.names
- self.assertEqual(names, ['lapack', 'foo', 'blas', 'bar', 'baz'])
-
- directories = self.liblist.directories
- self.assertEqual(directories, ['/dir1', '/dir2', '/dir3'])
-
- def test_get_item(self):
- a = self.liblist[0]
- self.assertEqual(a, '/dir1/liblapack.a')
-
- b = self.liblist[:]
- self.assertEqual(type(b), type(self.liblist))
- self.assertEqual(self.liblist, b)
- self.assertTrue(self.liblist is not b)
-
- def test_add(self):
- pylist = [
- '/dir1/liblapack.a', # removed from the final list
- '/dir2/libbaz.so',
- '/dir4/libnew.a'
- ]
- another = LibraryList(pylist)
- l = self.liblist + another
- self.assertEqual(len(l), 7)
- # Invariant : l == l + l
- self.assertEqual(l, l + l)
- # Always produce an instance of LibraryList
- self.assertEqual(
- type(self.liblist),
- type(self.liblist + pylist)
- )
- self.assertEqual(
- type(pylist + self.liblist),
- type(self.liblist)
- )
diff --git a/lib/spack/spack/test/link_tree.py b/lib/spack/spack/test/link_tree.py
deleted file mode 100644
index 5d0a7430b6..0000000000
--- a/lib/spack/spack/test/link_tree.py
+++ /dev/null
@@ -1,143 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-import os
-import unittest
-
-from llnl.util.filesystem import *
-from llnl.util.link_tree import LinkTree
-
-from spack.stage import Stage
-
-
-class LinkTreeTest(unittest.TestCase):
- """Tests Spack's LinkTree class."""
-
- def setUp(self):
- self.stage = Stage('link-tree-test')
- self.stage.create()
-
- with working_dir(self.stage.path):
- touchp('source/1')
- touchp('source/a/b/2')
- touchp('source/a/b/3')
- touchp('source/c/4')
- touchp('source/c/d/5')
- touchp('source/c/d/6')
- touchp('source/c/d/e/7')
-
- source_path = os.path.join(self.stage.path, 'source')
- self.link_tree = LinkTree(source_path)
-
- def tearDown(self):
- self.stage.destroy()
-
- def check_file_link(self, filename):
- self.assertTrue(os.path.isfile(filename))
- self.assertTrue(os.path.islink(filename))
-
- def check_dir(self, filename):
- self.assertTrue(os.path.isdir(filename))
-
- def test_merge_to_new_directory(self):
- with working_dir(self.stage.path):
- self.link_tree.merge('dest')
-
- self.check_file_link('dest/1')
- self.check_file_link('dest/a/b/2')
- self.check_file_link('dest/a/b/3')
- self.check_file_link('dest/c/4')
- self.check_file_link('dest/c/d/5')
- self.check_file_link('dest/c/d/6')
- self.check_file_link('dest/c/d/e/7')
-
- self.link_tree.unmerge('dest')
-
- self.assertFalse(os.path.exists('dest'))
-
- def test_merge_to_existing_directory(self):
- with working_dir(self.stage.path):
-
- touchp('dest/x')
- touchp('dest/a/b/y')
-
- self.link_tree.merge('dest')
-
- self.check_file_link('dest/1')
- self.check_file_link('dest/a/b/2')
- self.check_file_link('dest/a/b/3')
- self.check_file_link('dest/c/4')
- self.check_file_link('dest/c/d/5')
- self.check_file_link('dest/c/d/6')
- self.check_file_link('dest/c/d/e/7')
-
- self.assertTrue(os.path.isfile('dest/x'))
- self.assertTrue(os.path.isfile('dest/a/b/y'))
-
- self.link_tree.unmerge('dest')
-
- self.assertTrue(os.path.isfile('dest/x'))
- self.assertTrue(os.path.isfile('dest/a/b/y'))
-
- self.assertFalse(os.path.isfile('dest/1'))
- self.assertFalse(os.path.isfile('dest/a/b/2'))
- self.assertFalse(os.path.isfile('dest/a/b/3'))
- self.assertFalse(os.path.isfile('dest/c/4'))
- self.assertFalse(os.path.isfile('dest/c/d/5'))
- self.assertFalse(os.path.isfile('dest/c/d/6'))
- self.assertFalse(os.path.isfile('dest/c/d/e/7'))
-
- def test_merge_with_empty_directories(self):
- with working_dir(self.stage.path):
- mkdirp('dest/f/g')
- mkdirp('dest/a/b/h')
-
- self.link_tree.merge('dest')
- self.link_tree.unmerge('dest')
-
- self.assertFalse(os.path.exists('dest/1'))
- self.assertFalse(os.path.exists('dest/a/b/2'))
- self.assertFalse(os.path.exists('dest/a/b/3'))
- self.assertFalse(os.path.exists('dest/c/4'))
- self.assertFalse(os.path.exists('dest/c/d/5'))
- self.assertFalse(os.path.exists('dest/c/d/6'))
- self.assertFalse(os.path.exists('dest/c/d/e/7'))
-
- self.assertTrue(os.path.isdir('dest/a/b/h'))
- self.assertTrue(os.path.isdir('dest/f/g'))
-
- def test_ignore(self):
- with working_dir(self.stage.path):
- touchp('source/.spec')
- touchp('dest/.spec')
-
- self.link_tree.merge('dest', ignore=lambda x: x == '.spec')
- self.link_tree.unmerge('dest', ignore=lambda x: x == '.spec')
-
- self.assertFalse(os.path.exists('dest/1'))
- self.assertFalse(os.path.exists('dest/a'))
- self.assertFalse(os.path.exists('dest/c'))
-
- self.assertTrue(os.path.isfile('source/.spec'))
- self.assertTrue(os.path.isfile('dest/.spec'))
diff --git a/lib/spack/spack/test/llnl/util/file_list.py b/lib/spack/spack/test/llnl/util/file_list.py
new file mode 100644
index 0000000000..f7d5dde4d3
--- /dev/null
+++ b/lib/spack/spack/test/llnl/util/file_list.py
@@ -0,0 +1,277 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import fnmatch
+import os
+
+import pytest
+import six
+import spack
+from llnl.util.filesystem import LibraryList, HeaderList
+from llnl.util.filesystem import find_libraries, find_headers
+
+
+@pytest.fixture()
+def library_list():
+ """Returns an instance of LibraryList."""
+ # Test all valid extensions: ['.a', '.dylib', '.so']
+ libs = [
+ '/dir1/liblapack.a',
+ '/dir2/libpython3.6.dylib', # name may contain periods
+ '/dir1/libblas.a',
+ '/dir3/libz.so',
+ 'libmpi.so.20.10.1', # shared object libraries may be versioned
+ ]
+
+ return LibraryList(libs)
+
+
+@pytest.fixture()
+def header_list():
+ """Returns an instance of header list"""
+ # Test all valid extensions: ['.h', '.hpp', '.hh', '.cuh']
+ headers = [
+ '/dir1/Python.h',
+ '/dir2/date.time.h',
+ '/dir1/pyconfig.hpp',
+ '/dir3/core.hh',
+ 'pymem.cuh',
+ ]
+ h = HeaderList(headers)
+ h.add_macro('-DBOOST_LIB_NAME=boost_regex')
+ h.add_macro('-DBOOST_DYN_LINK')
+ return h
+
+
+class TestLibraryList(object):
+
+ def test_repr(self, library_list):
+ x = eval(repr(library_list))
+ assert library_list == x
+
+ def test_joined_and_str(self, library_list):
+
+ s1 = library_list.joined()
+ expected = '/dir1/liblapack.a /dir2/libpython3.6.dylib /dir1/libblas.a /dir3/libz.so libmpi.so.20.10.1' # noqa: E501
+ assert s1 == expected
+
+ s2 = str(library_list)
+ assert s1 == s2
+
+ s3 = library_list.joined(';')
+ expected = '/dir1/liblapack.a;/dir2/libpython3.6.dylib;/dir1/libblas.a;/dir3/libz.so;libmpi.so.20.10.1' # noqa: E501
+ assert s3 == expected
+
+ def test_flags(self, library_list):
+
+ search_flags = library_list.search_flags
+ assert '-L/dir1' in search_flags
+ assert '-L/dir2' in search_flags
+ assert '-L/dir3' in search_flags
+ assert isinstance(search_flags, str)
+ assert search_flags == '-L/dir1 -L/dir2 -L/dir3'
+
+ link_flags = library_list.link_flags
+ assert '-llapack' in link_flags
+ assert '-lpython3.6' in link_flags
+ assert '-lblas' in link_flags
+ assert '-lz' in link_flags
+ assert '-lmpi' in link_flags
+ assert isinstance(link_flags, str)
+ assert link_flags == '-llapack -lpython3.6 -lblas -lz -lmpi'
+
+ ld_flags = library_list.ld_flags
+ assert isinstance(ld_flags, str)
+ assert ld_flags == search_flags + ' ' + link_flags
+
+ def test_paths_manipulation(self, library_list):
+ names = library_list.names
+ assert names == ['lapack', 'python3.6', 'blas', 'z', 'mpi']
+
+ directories = library_list.directories
+ assert directories == ['/dir1', '/dir2', '/dir3']
+
+ def test_get_item(self, library_list):
+ a = library_list[0]
+ assert a == '/dir1/liblapack.a'
+
+ b = library_list[:]
+ assert type(b) == type(library_list)
+ assert library_list == b
+ assert library_list is not b
+
+ def test_add(self, library_list):
+ pylist = [
+ '/dir1/liblapack.a', # removed from the final list
+ '/dir2/libmpi.so',
+ '/dir4/libnew.a'
+ ]
+ another = LibraryList(pylist)
+ both = library_list + another
+ assert len(both) == 7
+
+ # Invariant
+ assert both == both + both
+
+ # Always produce an instance of LibraryList
+ assert type(library_list + pylist) == type(library_list)
+ assert type(pylist + library_list) == type(library_list)
+
+
+class TestHeaderList(object):
+
+ def test_repr(self, header_list):
+ x = eval(repr(header_list))
+ assert header_list == x
+
+ def test_joined_and_str(self, header_list):
+ s1 = header_list.joined()
+ expected = '/dir1/Python.h /dir2/date.time.h /dir1/pyconfig.hpp /dir3/core.hh pymem.cuh' # noqa: E501
+ assert s1 == expected
+
+ s2 = str(header_list)
+ assert s1 == s2
+
+ s3 = header_list.joined(';')
+ expected = '/dir1/Python.h;/dir2/date.time.h;/dir1/pyconfig.hpp;/dir3/core.hh;pymem.cuh' # noqa: E501
+ assert s3 == expected
+
+ def test_flags(self, header_list):
+ include_flags = header_list.include_flags
+ assert '-I/dir1' in include_flags
+ assert '-I/dir2' in include_flags
+ assert '-I/dir3' in include_flags
+ assert isinstance(include_flags, str)
+ assert include_flags == '-I/dir1 -I/dir2 -I/dir3'
+
+ macros = header_list.macro_definitions
+ assert '-DBOOST_LIB_NAME=boost_regex' in macros
+ assert '-DBOOST_DYN_LINK' in macros
+ assert isinstance(macros, str)
+ assert macros == '-DBOOST_LIB_NAME=boost_regex -DBOOST_DYN_LINK'
+
+ cpp_flags = header_list.cpp_flags
+ assert isinstance(cpp_flags, str)
+ assert cpp_flags == include_flags + ' ' + macros
+
+ def test_paths_manipulation(self, header_list):
+ names = header_list.names
+ assert names == ['Python', 'date.time', 'pyconfig', 'core', 'pymem']
+
+ directories = header_list.directories
+ assert directories == ['/dir1', '/dir2', '/dir3']
+
+ def test_get_item(self, header_list):
+ a = header_list[0]
+ assert a == '/dir1/Python.h'
+
+ b = header_list[:]
+ assert type(b) == type(header_list)
+ assert header_list == b
+ assert header_list is not b
+
+ def test_add(self, header_list):
+ pylist = [
+ '/dir1/Python.h', # removed from the final list
+ '/dir2/pyconfig.hpp',
+ '/dir4/date.time.h'
+ ]
+ another = HeaderList(pylist)
+ h = header_list + another
+ assert len(h) == 7
+
+ # Invariant : l == l + l
+ assert h == h + h
+
+ # Always produce an instance of HeaderList
+ assert type(header_list + pylist) == type(header_list)
+ assert type(pylist + header_list) == type(header_list)
+
+
+#: Directory where the data for the test below is stored
+search_dir = os.path.join(spack.test_path, 'data', 'directory_search')
+
+
+@pytest.mark.parametrize('search_fn,search_list,root,kwargs', [
+ (find_libraries, 'liba', search_dir, {'recurse': True}),
+ (find_libraries, ['liba'], search_dir, {'recurse': True}),
+ (find_libraries, 'libb', search_dir, {'recurse': True}),
+ (find_libraries, ['libc'], search_dir, {'recurse': True}),
+ (find_libraries, ['libc', 'liba'], search_dir, {'recurse': True}),
+ (find_libraries, ['liba', 'libc'], search_dir, {'recurse': True}),
+ (find_libraries, ['libc', 'libb', 'liba'], search_dir, {'recurse': True}),
+ (find_libraries, ['liba', 'libc'], search_dir, {'recurse': True}),
+ (find_libraries,
+ ['libc', 'libb', 'liba'],
+ search_dir,
+ {'recurse': True, 'shared': False}
+ ),
+ (find_headers, 'a', search_dir, {'recurse': True}),
+ (find_headers, ['a'], search_dir, {'recurse': True}),
+ (find_headers, 'b', search_dir, {'recurse': True}),
+ (find_headers, ['c'], search_dir, {'recurse': True}),
+ (find_headers, ['c', 'a'], search_dir, {'recurse': True}),
+ (find_headers, ['a', 'c'], search_dir, {'recurse': True}),
+ (find_headers, ['c', 'b', 'a'], search_dir, {'recurse': True}),
+ (find_headers, ['a', 'c'], search_dir, {'recurse': True}),
+ (find_libraries,
+ ['liba', 'libd'],
+ os.path.join(search_dir, 'b'),
+ {'recurse': False}
+ ),
+ (find_headers,
+ ['b', 'd'],
+ os.path.join(search_dir, 'b'),
+ {'recurse': False}
+ ),
+])
+def test_searching_order(search_fn, search_list, root, kwargs):
+
+ # Test search
+ result = search_fn(search_list, root, **kwargs)
+
+ # The tests are set-up so that something is always found
+ assert len(result) != 0
+
+ # Now reverse the result and start discarding things
+ # as soon as you have matches. In the end the list should
+ # be emptied.
+ L = list(reversed(result))
+
+ # At this point make sure the search list is a sequence
+ if isinstance(search_list, six.string_types):
+ search_list = [search_list]
+
+ # Discard entries in the order they appear in search list
+ for x in search_list:
+ try:
+ while fnmatch.fnmatch(L[-1], x) or x in L[-1]:
+ L.pop()
+ except IndexError:
+ # List is empty
+ pass
+
+ # List should be empty here
+ assert len(L) == 0
diff --git a/lib/spack/spack/test/llnl/util/lang.py b/lib/spack/spack/test/llnl/util/lang.py
new file mode 100644
index 0000000000..37dc01ce53
--- /dev/null
+++ b/lib/spack/spack/test/llnl/util/lang.py
@@ -0,0 +1,96 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+from datetime import datetime, timedelta
+
+from llnl.util.lang import pretty_date, match_predicate
+
+
+def test_pretty_date():
+ """Make sure pretty_date prints the right dates."""
+ now = datetime.now()
+
+ just_now = now - timedelta(seconds=5)
+ assert pretty_date(just_now, now) == "just now"
+
+ seconds = now - timedelta(seconds=30)
+ assert pretty_date(seconds, now) == "30 seconds ago"
+
+ a_minute = now - timedelta(seconds=60)
+ assert pretty_date(a_minute, now) == "a minute ago"
+
+ minutes = now - timedelta(seconds=1800)
+ assert pretty_date(minutes, now) == "30 minutes ago"
+
+ an_hour = now - timedelta(hours=1)
+ assert pretty_date(an_hour, now) == "an hour ago"
+
+ hours = now - timedelta(hours=2)
+ assert pretty_date(hours, now) == "2 hours ago"
+
+ yesterday = now - timedelta(days=1)
+ assert pretty_date(yesterday, now) == "yesterday"
+
+ days = now - timedelta(days=3)
+ assert pretty_date(days, now) == "3 days ago"
+
+ a_week = now - timedelta(weeks=1)
+ assert pretty_date(a_week, now) == "a week ago"
+
+ weeks = now - timedelta(weeks=2)
+ assert pretty_date(weeks, now) == "2 weeks ago"
+
+ a_month = now - timedelta(days=30)
+ assert pretty_date(a_month, now) == "a month ago"
+
+ months = now - timedelta(days=60)
+ assert pretty_date(months, now) == "2 months ago"
+
+ a_year = now - timedelta(days=365)
+ assert pretty_date(a_year, now) == "a year ago"
+
+ years = now - timedelta(days=365 * 2)
+ assert pretty_date(years, now) == "2 years ago"
+
+
+def test_match_predicate():
+ matcher = match_predicate(lambda x: True)
+ assert matcher('foo')
+ assert matcher('bar')
+ assert matcher('baz')
+
+ matcher = match_predicate(['foo', 'bar'])
+ assert matcher('foo')
+ assert matcher('bar')
+ assert not matcher('baz')
+
+ matcher = match_predicate(r'^(foo|bar)$')
+ assert matcher('foo')
+ assert matcher('bar')
+ assert not matcher('baz')
+
+ with pytest.raises(ValueError):
+ matcher = match_predicate(object())
+ matcher('foo')
diff --git a/lib/spack/spack/test/llnl/util/link_tree.py b/lib/spack/spack/test/llnl/util/link_tree.py
new file mode 100644
index 0000000000..59af3b8ad4
--- /dev/null
+++ b/lib/spack/spack/test/llnl/util/link_tree.py
@@ -0,0 +1,152 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+import pytest
+from llnl.util.filesystem import working_dir, mkdirp, touchp
+from llnl.util.link_tree import LinkTree
+from spack.stage import Stage
+
+
+@pytest.fixture()
+def stage():
+ """Creates a stage with the directory structure for the tests."""
+ s = Stage('link-tree-test')
+ s.create()
+
+ with working_dir(s.path):
+ touchp('source/1')
+ touchp('source/a/b/2')
+ touchp('source/a/b/3')
+ touchp('source/c/4')
+ touchp('source/c/d/5')
+ touchp('source/c/d/6')
+ touchp('source/c/d/e/7')
+
+ yield s
+
+ s.destroy()
+
+
+@pytest.fixture()
+def link_tree(stage):
+ """Return a properly initialized LinkTree instance."""
+ source_path = os.path.join(stage.path, 'source')
+ return LinkTree(source_path)
+
+
+def check_file_link(filename):
+ assert os.path.isfile(filename)
+ assert os.path.islink(filename)
+
+
+def check_dir(filename):
+ assert os.path.isdir(filename)
+
+
+def test_merge_to_new_directory(stage, link_tree):
+ with working_dir(stage.path):
+ link_tree.merge('dest')
+
+ check_file_link('dest/1')
+ check_file_link('dest/a/b/2')
+ check_file_link('dest/a/b/3')
+ check_file_link('dest/c/4')
+ check_file_link('dest/c/d/5')
+ check_file_link('dest/c/d/6')
+ check_file_link('dest/c/d/e/7')
+
+ link_tree.unmerge('dest')
+
+ assert not os.path.exists('dest')
+
+
+def test_merge_to_existing_directory(stage, link_tree):
+ with working_dir(stage.path):
+
+ touchp('dest/x')
+ touchp('dest/a/b/y')
+
+ link_tree.merge('dest')
+
+ check_file_link('dest/1')
+ check_file_link('dest/a/b/2')
+ check_file_link('dest/a/b/3')
+ check_file_link('dest/c/4')
+ check_file_link('dest/c/d/5')
+ check_file_link('dest/c/d/6')
+ check_file_link('dest/c/d/e/7')
+
+ assert os.path.isfile('dest/x')
+ assert os.path.isfile('dest/a/b/y')
+
+ link_tree.unmerge('dest')
+
+ assert os.path.isfile('dest/x')
+ assert os.path.isfile('dest/a/b/y')
+
+ assert not os.path.isfile('dest/1')
+ assert not os.path.isfile('dest/a/b/2')
+ assert not os.path.isfile('dest/a/b/3')
+ assert not os.path.isfile('dest/c/4')
+ assert not os.path.isfile('dest/c/d/5')
+ assert not os.path.isfile('dest/c/d/6')
+ assert not os.path.isfile('dest/c/d/e/7')
+
+
+def test_merge_with_empty_directories(stage, link_tree):
+ with working_dir(stage.path):
+ mkdirp('dest/f/g')
+ mkdirp('dest/a/b/h')
+
+ link_tree.merge('dest')
+ link_tree.unmerge('dest')
+
+ assert not os.path.exists('dest/1')
+ assert not os.path.exists('dest/a/b/2')
+ assert not os.path.exists('dest/a/b/3')
+ assert not os.path.exists('dest/c/4')
+ assert not os.path.exists('dest/c/d/5')
+ assert not os.path.exists('dest/c/d/6')
+ assert not os.path.exists('dest/c/d/e/7')
+
+ assert os.path.isdir('dest/a/b/h')
+ assert os.path.isdir('dest/f/g')
+
+
+def test_ignore(stage, link_tree):
+ with working_dir(stage.path):
+ touchp('source/.spec')
+ touchp('dest/.spec')
+
+ link_tree.merge('dest', ignore=lambda x: x == '.spec')
+ link_tree.unmerge('dest', ignore=lambda x: x == '.spec')
+
+ assert not os.path.exists('dest/1')
+ assert not os.path.exists('dest/a')
+ assert not os.path.exists('dest/c')
+
+ assert os.path.isfile('source/.spec')
+ assert os.path.isfile('dest/.spec')
diff --git a/lib/spack/spack/test/llnl/util/lock.py b/lib/spack/spack/test/llnl/util/lock.py
new file mode 100644
index 0000000000..0574adff51
--- /dev/null
+++ b/lib/spack/spack/test/llnl/util/lock.py
@@ -0,0 +1,902 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""These tests ensure that our lock works correctly.
+
+This can be run in two ways.
+
+First, it can be run as a node-local test, with a typical invocation like
+this::
+
+ spack test lock
+
+You can *also* run it as an MPI program, which allows you to test locks
+across nodes. So, e.g., you can run the test like this::
+
+ mpirun -n 7 spack test lock
+
+And it will test locking correctness among MPI processes. Ideally, you
+want the MPI processes to span across multiple nodes, so, e.g., for SLURM
+you might do this::
+
+ srun -N 7 -n 7 -m cyclic spack test lock
+
+You can use this to test whether your shared filesystem properly supports
+POSIX reader-writer locking with byte ranges through fcntl.
+
+If you want to test on multiple filesystems, you can modify the
+``locations`` list below. By default it looks like this::
+
+ locations = [
+ tempfile.gettempdir(), # standard tmp directory (potentially local)
+ '/nfs/tmp2/%u', # NFS tmp mount
+ '/p/lscratch*/%u' # Lustre scratch mount
+ ]
+
+Add names and paths for your preferred filesystem mounts to test on them;
+the tests are parametrized to run on all the filesystems listed in this
+dict. Note that 'tmp' will be skipped for MPI testing, as it is often a
+node-local filesystem, and multi-node tests will fail if the locks aren't
+actually on a shared filesystem.
+
+"""
+import os
+import shutil
+import tempfile
+import traceback
+import glob
+import getpass
+from contextlib import contextmanager
+from multiprocessing import Process
+
+import pytest
+
+from llnl.util.filesystem import join_path, touch
+from spack.util.multiproc import Barrier
+from llnl.util.lock import Lock, WriteTransaction, ReadTransaction, LockError
+
+
+#
+# This test can be run with MPI. MPI is "enabled" if we can import
+# mpi4py and the number of total MPI processes is greater than 1.
+# Otherwise it just runs as a node-local test.
+#
+# NOTE: MPI mode is different from node-local mode in that node-local
+# mode will spawn its own test processes, while MPI mode assumes you've
+# run this script as a SPMD application. In MPI mode, no additional
+# processes are spawned, and you need to ensure that you mpirun the
+# script with enough processes for all the multiproc_test cases below.
+#
+# If you don't run with enough processes, tests that require more
+# processes than you currently have will be skipped.
+#
+mpi = False
+comm = None
+try:
+ from mpi4py import MPI
+ comm = MPI.COMM_WORLD
+ if comm.size > 1:
+ mpi = True
+except ImportError:
+ pass
+
+
+"""This is a list of filesystem locations to test locks in. Paths are
+expanded so that %u is replaced with the current username. '~' is also
+legal and will be expanded to the user's home directory.
+
+Tests are skipped for directories that don't exist, so you'll need to
+update this with the locations of NFS, Lustre, and other mounts on your
+system.
+"""
+locations = [
+ tempfile.gettempdir(),
+ os.path.join('/nfs/tmp2/', getpass.getuser()),
+ os.path.join('/p/lscratch*/', getpass.getuser()),
+]
+
+"""This is the longest a failed multiproc test will take.
+Barriers will time out and raise an exception after this interval.
+In MPI mode, barriers don't time out (they hang). See mpi_multiproc_test.
+"""
+barrier_timeout = 5
+
+"""This is the lock timeout for expected failures.
+This may need to be higher for some filesystems."""
+lock_fail_timeout = 0.1
+
+
+@contextmanager
+def read_only(path):
+ orginal_mode = os.stat(path).st_mode
+ os.chmod(path, 0o444)
+ yield
+ os.chmod(path, orginal_mode)
+
+
+@pytest.fixture(scope='session', params=locations)
+def lock_test_directory(request):
+ """This fixture causes tests to be executed for many different mounts.
+
+ See the ``locations`` dict above for details.
+ """
+ return request.param
+
+
+@pytest.fixture(scope='session')
+def lock_dir(lock_test_directory):
+ parent = next((p for p in glob.glob(lock_test_directory)
+ if os.path.exists(p) and os.access(p, os.W_OK)), None)
+ if not parent:
+ # Skip filesystems that don't exist or aren't writable
+ pytest.skip("requires filesystem: '%s'" % lock_test_directory)
+ elif mpi and parent == tempfile.gettempdir():
+ # Skip local tmp test for MPI runs
+ pytest.skip("skipping local tmp directory for MPI test.")
+
+ tempdir = None
+ if not mpi or comm.rank == 0:
+ tempdir = tempfile.mkdtemp(dir=parent)
+ if mpi:
+ tempdir = comm.bcast(tempdir)
+
+ yield tempdir
+
+ if mpi:
+ # rank 0 may get here before others, in which case it'll try to
+ # remove the directory while other processes try to re-create the
+ # lock. This will give errno 39: directory not empty. Use a
+ # barrier to ensure everyone is done first.
+ comm.barrier()
+
+ if not mpi or comm.rank == 0:
+ shutil.rmtree(tempdir)
+
+
+@pytest.fixture
+def private_lock_path(lock_dir):
+ """In MPI mode, this is a private lock for each rank in a multiproc test.
+
+ For other modes, it is the same as a shared lock.
+ """
+ lock_file = join_path(lock_dir, 'lockfile')
+ if mpi:
+ lock_file += '.%s' % comm.rank
+ yield lock_file
+
+
+@pytest.fixture
+def lock_path(lock_dir):
+ """This lock is shared among all processes in a multiproc test."""
+ lock_file = join_path(lock_dir, 'lockfile')
+ yield lock_file
+
+
+def local_multiproc_test(*functions):
+ """Order some processes using simple barrier synchronization."""
+ b = Barrier(len(functions), timeout=barrier_timeout)
+ procs = [Process(target=f, args=(b,)) for f in functions]
+
+ for p in procs:
+ p.start()
+
+ for p in procs:
+ p.join()
+ assert p.exitcode == 0
+
+
+def mpi_multiproc_test(*functions):
+ """SPMD version of multiproc test.
+
+ This needs to be run like so:
+
+ srun spack test lock
+
+ Each process executes its corresponding function. This is different
+ from ``multiproc_test`` above, which spawns the processes. This will
+ skip tests if there are too few processes to run them.
+ """
+ procs = len(functions)
+ if procs > comm.size:
+ pytest.skip("requires at least %d MPI processes" % procs)
+
+ comm.Barrier() # barrier before each MPI test
+
+ include = comm.rank < len(functions)
+ subcomm = comm.Split(include)
+
+ class subcomm_barrier(object):
+ """Stand-in for multiproc barrier for MPI-parallel jobs."""
+ def wait(self):
+ subcomm.Barrier()
+
+ if include:
+ try:
+ functions[subcomm.rank](subcomm_barrier())
+ except BaseException:
+ # aborting is the best we can do for MPI tests without
+ # hanging, since we're using MPI barriers. This will fail
+ # early and it loses the nice pytest output, but at least it
+ # gets use a stacktrace on the processes that failed.
+ traceback.print_exc()
+ comm.Abort()
+ subcomm.Free()
+
+ comm.Barrier() # barrier after each MPI test.
+
+
+"""``multiproc_test()`` should be called by tests below.
+``multiproc_test()`` will work for either MPI runs or for local runs.
+"""
+multiproc_test = mpi_multiproc_test if mpi else local_multiproc_test
+
+
+#
+# Process snippets below can be composed into tests.
+#
+def acquire_write(lock_path, start=0, length=0):
+ def fn(barrier):
+ lock = Lock(lock_path, start, length)
+ lock.acquire_write() # grab exclusive lock
+ barrier.wait()
+ barrier.wait() # hold the lock until timeout in other procs.
+ return fn
+
+
+def acquire_read(lock_path, start=0, length=0):
+ def fn(barrier):
+ lock = Lock(lock_path, start, length)
+ lock.acquire_read() # grab shared lock
+ barrier.wait()
+ barrier.wait() # hold the lock until timeout in other procs.
+ return fn
+
+
+def timeout_write(lock_path, start=0, length=0):
+ def fn(barrier):
+ lock = Lock(lock_path, start, length)
+ barrier.wait() # wait for lock acquire in first process
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ barrier.wait()
+ return fn
+
+
+def timeout_read(lock_path, start=0, length=0):
+ def fn(barrier):
+ lock = Lock(lock_path, start, length)
+ barrier.wait() # wait for lock acquire in first process
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait()
+ return fn
+
+
+#
+# Test that exclusive locks on other processes time out when an
+# exclusive lock is held.
+#
+def test_write_lock_timeout_on_write(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_write_2(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_write_3(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_write_ranges(lock_path):
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ timeout_write(lock_path, 0, 1))
+
+
+def test_write_lock_timeout_on_write_ranges_2(lock_path):
+ multiproc_test(
+ acquire_write(lock_path, 0, 64),
+ acquire_write(lock_path, 65, 1),
+ timeout_write(lock_path, 0, 1),
+ timeout_write(lock_path, 63, 1))
+
+
+def test_write_lock_timeout_on_write_ranges_3(lock_path):
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ acquire_write(lock_path, 1, 1),
+ timeout_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_write_ranges_4(lock_path):
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ acquire_write(lock_path, 1, 1),
+ acquire_write(lock_path, 2, 456),
+ acquire_write(lock_path, 500, 64),
+ timeout_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+#
+# Test that shared locks on other processes time out when an
+# exclusive lock is held.
+#
+def test_read_lock_timeout_on_write(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_read(lock_path))
+
+
+def test_read_lock_timeout_on_write_2(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_read(lock_path),
+ timeout_read(lock_path))
+
+
+def test_read_lock_timeout_on_write_3(lock_path):
+ multiproc_test(
+ acquire_write(lock_path),
+ timeout_read(lock_path),
+ timeout_read(lock_path),
+ timeout_read(lock_path))
+
+
+def test_read_lock_timeout_on_write_ranges(lock_path):
+ """small write lock, read whole file."""
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ timeout_read(lock_path))
+
+
+def test_read_lock_timeout_on_write_ranges_2(lock_path):
+ """small write lock, small read lock"""
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ timeout_read(lock_path, 0, 1))
+
+
+def test_read_lock_timeout_on_write_ranges_3(lock_path):
+ """two write locks, overlapping read locks"""
+ multiproc_test(
+ acquire_write(lock_path, 0, 1),
+ acquire_write(lock_path, 64, 128),
+ timeout_read(lock_path, 0, 1),
+ timeout_read(lock_path, 128, 256))
+
+
+#
+# Test that exclusive locks time out when shared locks are held.
+#
+def test_write_lock_timeout_on_read(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_read_2(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_read_3(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_read_ranges(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 1),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_on_read_ranges_2(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 1),
+ timeout_write(lock_path, 0, 1))
+
+
+def test_write_lock_timeout_on_read_ranges_3(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 1),
+ acquire_read(lock_path, 10, 1),
+ timeout_write(lock_path, 0, 1),
+ timeout_write(lock_path, 10, 1))
+
+
+def test_write_lock_timeout_on_read_ranges_4(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 64),
+ timeout_write(lock_path, 10, 1),
+ timeout_write(lock_path, 32, 1))
+
+
+def test_write_lock_timeout_on_read_ranges_5(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 64, 128),
+ timeout_write(lock_path, 65, 1),
+ timeout_write(lock_path, 127, 1),
+ timeout_write(lock_path, 90, 10))
+
+
+#
+# Test that exclusive locks time while lots of shared locks are held.
+#
+def test_write_lock_timeout_with_multiple_readers_2_1(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_with_multiple_readers_2_2(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_with_multiple_readers_3_1(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_with_multiple_readers_3_2(lock_path):
+ multiproc_test(
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ acquire_read(lock_path),
+ timeout_write(lock_path),
+ timeout_write(lock_path))
+
+
+def test_write_lock_timeout_with_multiple_readers_2_1_ranges(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 10),
+ acquire_read(lock_path, 0.5, 10),
+ timeout_write(lock_path, 5, 5))
+
+
+def test_write_lock_timeout_with_multiple_readers_2_3_ranges(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 10),
+ acquire_read(lock_path, 5, 15),
+ timeout_write(lock_path, 0, 1),
+ timeout_write(lock_path, 11, 3),
+ timeout_write(lock_path, 7, 1))
+
+
+def test_write_lock_timeout_with_multiple_readers_3_1_ranges(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 5),
+ acquire_read(lock_path, 5, 5),
+ acquire_read(lock_path, 10, 5),
+ timeout_write(lock_path, 0, 15))
+
+
+def test_write_lock_timeout_with_multiple_readers_3_2_ranges(lock_path):
+ multiproc_test(
+ acquire_read(lock_path, 0, 5),
+ acquire_read(lock_path, 5, 5),
+ acquire_read(lock_path, 10, 5),
+ timeout_write(lock_path, 3, 10),
+ timeout_write(lock_path, 5, 1))
+
+
+#
+# Test that read can be upgraded to write.
+#
+def test_upgrade_read_to_write(private_lock_path):
+ """Test that a read lock can be upgraded to a write lock.
+
+ Note that to upgrade a read lock to a write lock, you have the be the
+ only holder of a read lock. Client code needs to coordinate that for
+ shared locks. For this test, we use a private lock just to test that an
+ upgrade is possible.
+ """
+ # ensure lock file exists the first time, so we open it read-only
+ # to begin wtih.
+ touch(private_lock_path)
+
+ lock = Lock(private_lock_path)
+ assert lock._reads == 0
+ assert lock._writes == 0
+
+ lock.acquire_read()
+ assert lock._reads == 1
+ assert lock._writes == 0
+ assert lock._file.mode == 'r+'
+
+ lock.acquire_write()
+ assert lock._reads == 1
+ assert lock._writes == 1
+ assert lock._file.mode == 'r+'
+
+ lock.release_write()
+ assert lock._reads == 1
+ assert lock._writes == 0
+ assert lock._file.mode == 'r+'
+
+ lock.release_read()
+ assert lock._reads == 0
+ assert lock._writes == 0
+ assert lock._file is None
+
+
+#
+# Test that read-only file can be read-locked but not write-locked.
+#
+def test_upgrade_read_to_write_fails_with_readonly_file(private_lock_path):
+ # ensure lock file exists the first time, so we open it read-only
+ # to begin wtih.
+ touch(private_lock_path)
+
+ with read_only(private_lock_path):
+ lock = Lock(private_lock_path)
+ assert lock._reads == 0
+ assert lock._writes == 0
+
+ lock.acquire_read()
+ assert lock._reads == 1
+ assert lock._writes == 0
+ assert lock._file.mode == 'r'
+
+ with pytest.raises(LockError):
+ lock.acquire_write()
+
+
+#
+# Longer test case that ensures locks are reusable. Ordering is
+# enforced by barriers throughout -- steps are shown with numbers.
+#
+def test_complex_acquire_and_release_chain(lock_path):
+ def p1(barrier):
+ lock = Lock(lock_path)
+
+ lock.acquire_write()
+ barrier.wait() # ---------------------------------------- 1
+ # others test timeout
+ barrier.wait() # ---------------------------------------- 2
+ lock.release_write() # release and others acquire read
+ barrier.wait() # ---------------------------------------- 3
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 4
+ lock.release_read()
+ barrier.wait() # ---------------------------------------- 5
+
+ # p2 upgrades read to write
+ barrier.wait() # ---------------------------------------- 6
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 7
+ # p2 releases write and read
+ barrier.wait() # ---------------------------------------- 8
+
+ # p3 acquires read
+ barrier.wait() # ---------------------------------------- 9
+ # p3 upgrades read to write
+ barrier.wait() # ---------------------------------------- 10
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 11
+ # p3 releases locks
+ barrier.wait() # ---------------------------------------- 12
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 13
+ lock.release_read()
+
+ def p2(barrier):
+ lock = Lock(lock_path)
+
+ # p1 acquires write
+ barrier.wait() # ---------------------------------------- 1
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 2
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 3
+ # p1 tests shared read
+ barrier.wait() # ---------------------------------------- 4
+ # others release reads
+ barrier.wait() # ---------------------------------------- 5
+
+ lock.acquire_write() # upgrade read to write
+ barrier.wait() # ---------------------------------------- 6
+ # others test timeout
+ barrier.wait() # ---------------------------------------- 7
+ lock.release_write() # release read AND write (need both)
+ lock.release_read()
+ barrier.wait() # ---------------------------------------- 8
+
+ # p3 acquires read
+ barrier.wait() # ---------------------------------------- 9
+ # p3 upgrades read to write
+ barrier.wait() # ---------------------------------------- 10
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 11
+ # p3 releases locks
+ barrier.wait() # ---------------------------------------- 12
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 13
+ lock.release_read()
+
+ def p3(barrier):
+ lock = Lock(lock_path)
+
+ # p1 acquires write
+ barrier.wait() # ---------------------------------------- 1
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 2
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 3
+ # p1 tests shared read
+ barrier.wait() # ---------------------------------------- 4
+ lock.release_read()
+ barrier.wait() # ---------------------------------------- 5
+
+ # p2 upgrades read to write
+ barrier.wait() # ---------------------------------------- 6
+ with pytest.raises(LockError):
+ lock.acquire_write(lock_fail_timeout)
+ with pytest.raises(LockError):
+ lock.acquire_read(lock_fail_timeout)
+ barrier.wait() # ---------------------------------------- 7
+ # p2 releases write & read
+ barrier.wait() # ---------------------------------------- 8
+
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 9
+ lock.acquire_write()
+ barrier.wait() # ---------------------------------------- 10
+ # others test timeout
+ barrier.wait() # ---------------------------------------- 11
+ lock.release_read() # release read AND write in opposite
+ lock.release_write() # order from before on p2
+ barrier.wait() # ---------------------------------------- 12
+ lock.acquire_read()
+ barrier.wait() # ---------------------------------------- 13
+ lock.release_read()
+
+ multiproc_test(p1, p2, p3)
+
+
+def test_transaction(lock_path):
+ def enter_fn():
+ vals['entered'] = True
+
+ def exit_fn(t, v, tb):
+ vals['exited'] = True
+ vals['exception'] = (t or v or tb)
+
+ lock = Lock(lock_path)
+ vals = {'entered': False, 'exited': False, 'exception': False}
+ with ReadTransaction(lock, enter_fn, exit_fn):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+
+ vals = {'entered': False, 'exited': False, 'exception': False}
+ with WriteTransaction(lock, enter_fn, exit_fn):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+
+
+def test_transaction_with_exception(lock_path):
+ def enter_fn():
+ vals['entered'] = True
+
+ def exit_fn(t, v, tb):
+ vals['exited'] = True
+ vals['exception'] = (t or v or tb)
+
+ lock = Lock(lock_path)
+
+ def do_read_with_exception():
+ with ReadTransaction(lock, enter_fn, exit_fn):
+ raise Exception()
+
+ def do_write_with_exception():
+ with WriteTransaction(lock, enter_fn, exit_fn):
+ raise Exception()
+
+ vals = {'entered': False, 'exited': False, 'exception': False}
+ with pytest.raises(Exception):
+ do_read_with_exception()
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+
+ vals = {'entered': False, 'exited': False, 'exception': False}
+ with pytest.raises(Exception):
+ do_write_with_exception()
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+
+
+def test_transaction_with_context_manager(lock_path):
+ class TestContextManager(object):
+
+ def __enter__(self):
+ vals['entered'] = True
+
+ def __exit__(self, t, v, tb):
+ vals['exited'] = True
+ vals['exception'] = (t or v or tb)
+
+ def exit_fn(t, v, tb):
+ vals['exited_fn'] = True
+ vals['exception_fn'] = (t or v or tb)
+
+ lock = Lock(lock_path)
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with ReadTransaction(lock, TestContextManager, exit_fn):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+ assert vals['exited_fn']
+ assert not vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with ReadTransaction(lock, TestContextManager):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+ assert not vals['exited_fn']
+ assert not vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with WriteTransaction(lock, TestContextManager, exit_fn):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+ assert vals['exited_fn']
+ assert not vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with WriteTransaction(lock, TestContextManager):
+ pass
+
+ assert vals['entered']
+ assert vals['exited']
+ assert not vals['exception']
+ assert not vals['exited_fn']
+ assert not vals['exception_fn']
+
+
+def test_transaction_with_context_manager_and_exception(lock_path):
+ class TestContextManager(object):
+ def __enter__(self):
+ vals['entered'] = True
+
+ def __exit__(self, t, v, tb):
+ vals['exited'] = True
+ vals['exception'] = (t or v or tb)
+
+ def exit_fn(t, v, tb):
+ vals['exited_fn'] = True
+ vals['exception_fn'] = (t or v or tb)
+
+ lock = Lock(lock_path)
+
+ def do_read_with_exception(exit_fn):
+ with ReadTransaction(lock, TestContextManager, exit_fn):
+ raise Exception()
+
+ def do_write_with_exception(exit_fn):
+ with WriteTransaction(lock, TestContextManager, exit_fn):
+ raise Exception()
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with pytest.raises(Exception):
+ do_read_with_exception(exit_fn)
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+ assert vals['exited_fn']
+ assert vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with pytest.raises(Exception):
+ do_read_with_exception(None)
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+ assert not vals['exited_fn']
+ assert not vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with pytest.raises(Exception):
+ do_write_with_exception(exit_fn)
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+ assert vals['exited_fn']
+ assert vals['exception_fn']
+
+ vals = {'entered': False, 'exited': False, 'exited_fn': False,
+ 'exception': False, 'exception_fn': False}
+ with pytest.raises(Exception):
+ do_write_with_exception(None)
+ assert vals['entered']
+ assert vals['exited']
+ assert vals['exception']
+ assert not vals['exited_fn']
+ assert not vals['exception_fn']
diff --git a/lib/spack/spack/test/llnl/util/log.py b/lib/spack/spack/test/llnl/util/log.py
new file mode 100644
index 0000000000..44f4f15131
--- /dev/null
+++ b/lib/spack/spack/test/llnl/util/log.py
@@ -0,0 +1,100 @@
+##############################################################################
+# 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/spack/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 __future__ import print_function
+import pytest
+
+from llnl.util.tty.log import log_output
+from spack.util.executable import which
+
+
+def test_log_python_output_with_python_stream(capsys, tmpdir):
+ # pytest's DontReadFromInput object does not like what we do here, so
+ # disable capsys or things hang.
+ with tmpdir.as_cwd():
+ with capsys.disabled():
+ with log_output('foo.txt'):
+ print('logged')
+
+ with open('foo.txt') as f:
+ assert f.read() == 'logged\n'
+
+ assert capsys.readouterr() == ('', '')
+
+
+def test_log_python_output_with_fd_stream(capfd, tmpdir):
+ with tmpdir.as_cwd():
+ with log_output('foo.txt'):
+ print('logged')
+
+ with open('foo.txt') as f:
+ assert f.read() == 'logged\n'
+
+ assert capfd.readouterr() == ('', '')
+
+
+def test_log_python_output_and_echo_output(capfd, tmpdir):
+ with tmpdir.as_cwd():
+ with log_output('foo.txt') as logger:
+ with logger.force_echo():
+ print('echo')
+ print('logged')
+
+ assert capfd.readouterr() == ('echo\n', '')
+
+ with open('foo.txt') as f:
+ assert f.read() == 'echo\nlogged\n'
+
+
+@pytest.mark.skipif(not which('echo'), reason="needs echo command")
+def test_log_subproc_output(capsys, tmpdir):
+ echo = which('echo')
+
+ # pytest seems to interfere here, so we need to use capsys.disabled()
+ # TODO: figure out why this is and whether it means we're doing
+ # sometihng wrong with OUR redirects. Seems like it should work even
+ # with capsys enabled.
+ with tmpdir.as_cwd():
+ with capsys.disabled():
+ with log_output('foo.txt'):
+ echo('logged')
+
+ with open('foo.txt') as f:
+ assert f.read() == 'logged\n'
+
+
+@pytest.mark.skipif(not which('echo'), reason="needs echo command")
+def test_log_subproc_and_echo_output(capfd, tmpdir):
+ echo = which('echo')
+
+ with tmpdir.as_cwd():
+ with log_output('foo.txt') as logger:
+ with logger.force_echo():
+ echo('echo')
+ print('logged')
+
+ assert capfd.readouterr() == ('echo\n', '')
+
+ with open('foo.txt') as f:
+ assert f.read() == 'logged\n'
diff --git a/lib/spack/spack/test/lock.py b/lib/spack/spack/test/lock.py
deleted file mode 100644
index 4f62cd85e9..0000000000
--- a/lib/spack/spack/test/lock.py
+++ /dev/null
@@ -1,587 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-"""
-These tests ensure that our lock works correctly.
-"""
-import os
-import shutil
-import tempfile
-import unittest
-from multiprocessing import Process
-
-from llnl.util.filesystem import join_path, touch
-from llnl.util.lock import *
-from spack.util.multiproc import Barrier
-
-# This is the longest a failed test will take, as the barriers will
-# time out and raise an exception.
-barrier_timeout = 5
-
-
-class LockTest(unittest.TestCase):
-
- def setUp(self):
- self.tempdir = tempfile.mkdtemp()
- self.lock_path = join_path(self.tempdir, 'lockfile')
-
- def tearDown(self):
- shutil.rmtree(self.tempdir, ignore_errors=True)
-
- def multiproc_test(self, *functions):
- """Order some processes using simple barrier synchronization."""
- b = Barrier(len(functions), timeout=barrier_timeout)
- procs = [Process(target=f, args=(b,)) for f in functions]
-
- for p in procs:
- p.start()
-
- for p in procs:
- p.join()
- self.assertEqual(p.exitcode, 0)
-
- #
- # Process snippets below can be composed into tests.
- #
- def acquire_write(self, start=0, length=0):
- def fn(barrier):
- lock = Lock(self.lock_path, start, length)
- lock.acquire_write() # grab exclusive lock
- barrier.wait()
- barrier.wait() # hold the lock until timeout in other procs.
- return fn
-
- def acquire_read(self, start=0, length=0):
- def fn(barrier):
- lock = Lock(self.lock_path, start, length)
- lock.acquire_read() # grab shared lock
- barrier.wait()
- barrier.wait() # hold the lock until timeout in other procs.
- return fn
-
- def timeout_write(self, start=0, length=0):
- def fn(barrier):
- lock = Lock(self.lock_path, start, length)
- barrier.wait() # wait for lock acquire in first process
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- barrier.wait()
- return fn
-
- def timeout_read(self, start=0, length=0):
- def fn(barrier):
- lock = Lock(self.lock_path, start, length)
- barrier.wait() # wait for lock acquire in first process
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait()
- return fn
-
- #
- # Test that exclusive locks on other processes time out when an
- # exclusive lock is held.
- #
- def test_write_lock_timeout_on_write(self):
- self.multiproc_test(self.acquire_write(), self.timeout_write())
-
- def test_write_lock_timeout_on_write_2(self):
- self.multiproc_test(
- self.acquire_write(), self.timeout_write(), self.timeout_write())
-
- def test_write_lock_timeout_on_write_3(self):
- self.multiproc_test(
- self.acquire_write(), self.timeout_write(), self.timeout_write(),
- self.timeout_write())
-
- def test_write_lock_timeout_on_write_ranges(self):
- self.multiproc_test(
- self.acquire_write(0, 1), self.timeout_write(0, 1))
-
- def test_write_lock_timeout_on_write_ranges_2(self):
- self.multiproc_test(
- self.acquire_write(0, 64), self.acquire_write(65, 1),
- self.timeout_write(0, 1), self.timeout_write(63, 1))
-
- def test_write_lock_timeout_on_write_ranges_3(self):
- self.multiproc_test(
- self.acquire_write(0, 1), self.acquire_write(1, 1),
- self.timeout_write(), self.timeout_write(), self.timeout_write())
-
- def test_write_lock_timeout_on_write_ranges_4(self):
- self.multiproc_test(
- self.acquire_write(0, 1), self.acquire_write(1, 1),
- self.acquire_write(2, 456), self.acquire_write(500, 64),
- self.timeout_write(), self.timeout_write(), self.timeout_write())
-
- #
- # Test that shared locks on other processes time out when an
- # exclusive lock is held.
- #
- def test_read_lock_timeout_on_write(self):
- self.multiproc_test(self.acquire_write(), self.timeout_read())
-
- def test_read_lock_timeout_on_write_2(self):
- self.multiproc_test(
- self.acquire_write(), self.timeout_read(), self.timeout_read())
-
- def test_read_lock_timeout_on_write_3(self):
- self.multiproc_test(
- self.acquire_write(), self.timeout_read(), self.timeout_read(),
- self.timeout_read())
-
- def test_read_lock_timeout_on_write_ranges(self):
- """small write lock, read whole file."""
- self.multiproc_test(self.acquire_write(0, 1), self.timeout_read())
-
- def test_read_lock_timeout_on_write_ranges_2(self):
- """small write lock, small read lock"""
- self.multiproc_test(self.acquire_write(0, 1), self.timeout_read(0, 1))
-
- def test_read_lock_timeout_on_write_ranges_3(self):
- """two write locks, overlapping read locks"""
- self.multiproc_test(
- self.acquire_write(0, 1), self.acquire_write(64, 128),
- self.timeout_read(0, 1), self.timeout_read(128, 256))
-
- #
- # Test that exclusive locks time out when shared locks are held.
- #
- def test_write_lock_timeout_on_read(self):
- self.multiproc_test(self.acquire_read(), self.timeout_write())
-
- def test_write_lock_timeout_on_read_2(self):
- self.multiproc_test(
- self.acquire_read(), self.timeout_write(), self.timeout_write())
-
- def test_write_lock_timeout_on_read_3(self):
- self.multiproc_test(
- self.acquire_read(), self.timeout_write(), self.timeout_write(),
- self.timeout_write())
-
- def test_write_lock_timeout_on_read_ranges(self):
- self.multiproc_test(self.acquire_read(0, 1), self.timeout_write())
-
- def test_write_lock_timeout_on_read_ranges_2(self):
- self.multiproc_test(self.acquire_read(0, 1), self.timeout_write(0, 1))
-
- def test_write_lock_timeout_on_read_ranges_3(self):
- self.multiproc_test(
- self.acquire_read(0, 1), self.acquire_read(10, 1),
- self.timeout_write(0, 1), self.timeout_write(10, 1))
-
- def test_write_lock_timeout_on_read_ranges_4(self):
- self.multiproc_test(
- self.acquire_read(0, 64),
- self.timeout_write(10, 1), self.timeout_write(32, 1))
-
- def test_write_lock_timeout_on_read_ranges_5(self):
- self.multiproc_test(
- self.acquire_read(64, 128),
- self.timeout_write(65, 1), self.timeout_write(127, 1),
- self.timeout_write(90, 10))
-
- #
- # Test that exclusive locks time while lots of shared locks are held.
- #
- def test_write_lock_timeout_with_multiple_readers_2_1(self):
- self.multiproc_test(
- self.acquire_read(), self.acquire_read(), self.timeout_write())
-
- def test_write_lock_timeout_with_multiple_readers_2_2(self):
- self.multiproc_test(
- self.acquire_read(), self.acquire_read(), self.timeout_write(),
- self.timeout_write())
-
- def test_write_lock_timeout_with_multiple_readers_3_1(self):
- self.multiproc_test(
- self.acquire_read(), self.acquire_read(), self.acquire_read(),
- self.timeout_write())
-
- def test_write_lock_timeout_with_multiple_readers_3_2(self):
- self.multiproc_test(
- self.acquire_read(), self.acquire_read(), self.acquire_read(),
- self.timeout_write(), self.timeout_write())
-
- def test_write_lock_timeout_with_multiple_readers_2_1_ranges(self):
- self.multiproc_test(
- self.acquire_read(0, 10), self.acquire_read(5, 10),
- self.timeout_write(5, 5))
-
- def test_write_lock_timeout_with_multiple_readers_2_3_ranges(self):
- self.multiproc_test(
- self.acquire_read(0, 10), self.acquire_read(5, 15),
- self.timeout_write(0, 1), self.timeout_write(11, 3),
- self.timeout_write(7, 1))
-
- def test_write_lock_timeout_with_multiple_readers_3_1_ranges(self):
- self.multiproc_test(
- self.acquire_read(0, 5), self.acquire_read(5, 5),
- self.acquire_read(10, 5),
- self.timeout_write(0, 15))
-
- def test_write_lock_timeout_with_multiple_readers_3_2_ranges(self):
- self.multiproc_test(
- self.acquire_read(0, 5), self.acquire_read(5, 5),
- self.acquire_read(10, 5),
- self.timeout_write(3, 10), self.timeout_write(5, 1))
-
- #
- # Test that read can be upgraded to write.
- #
- def test_upgrade_read_to_write(self):
- # ensure lock file exists the first time, so we open it read-only
- # to begin wtih.
- touch(self.lock_path)
-
- lock = Lock(self.lock_path)
- self.assertTrue(lock._reads == 0)
- self.assertTrue(lock._writes == 0)
-
- lock.acquire_read()
- self.assertTrue(lock._reads == 1)
- self.assertTrue(lock._writes == 0)
- self.assertTrue(lock._file.mode == 'r+')
-
- lock.acquire_write()
- self.assertTrue(lock._reads == 1)
- self.assertTrue(lock._writes == 1)
- self.assertTrue(lock._file.mode == 'r+')
-
- lock.release_write()
- self.assertTrue(lock._reads == 1)
- self.assertTrue(lock._writes == 0)
- self.assertTrue(lock._file.mode == 'r+')
-
- lock.release_read()
- self.assertTrue(lock._reads == 0)
- self.assertTrue(lock._writes == 0)
- self.assertTrue(lock._file is None)
-
- #
- # Test that read-only file can be read-locked but not write-locked.
- #
- def test_upgrade_read_to_write_fails_with_readonly_file(self):
- # ensure lock file exists the first time, so we open it read-only
- # to begin wtih.
- touch(self.lock_path)
- os.chmod(self.lock_path, 0444)
-
- lock = Lock(self.lock_path)
- self.assertTrue(lock._reads == 0)
- self.assertTrue(lock._writes == 0)
-
- lock.acquire_read()
- self.assertTrue(lock._reads == 1)
- self.assertTrue(lock._writes == 0)
- self.assertTrue(lock._file.mode == 'r')
-
- self.assertRaises(LockError, lock.acquire_write)
-
- #
- # Longer test case that ensures locks are reusable. Ordering is
- # enforced by barriers throughout -- steps are shown with numbers.
- #
- def test_complex_acquire_and_release_chain(self):
- def p1(barrier):
- lock = Lock(self.lock_path)
-
- lock.acquire_write()
- barrier.wait() # ---------------------------------------- 1
- # others test timeout
- barrier.wait() # ---------------------------------------- 2
- lock.release_write() # release and others acquire read
- barrier.wait() # ---------------------------------------- 3
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 4
- lock.release_read()
- barrier.wait() # ---------------------------------------- 5
-
- # p2 upgrades read to write
- barrier.wait() # ---------------------------------------- 6
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 7
- # p2 releases write and read
- barrier.wait() # ---------------------------------------- 8
-
- # p3 acquires read
- barrier.wait() # ---------------------------------------- 9
- # p3 upgrades read to write
- barrier.wait() # ---------------------------------------- 10
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 11
- # p3 releases locks
- barrier.wait() # ---------------------------------------- 12
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 13
- lock.release_read()
-
- def p2(barrier):
- lock = Lock(self.lock_path)
-
- # p1 acquires write
- barrier.wait() # ---------------------------------------- 1
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 2
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 3
- # p1 tests shared read
- barrier.wait() # ---------------------------------------- 4
- # others release reads
- barrier.wait() # ---------------------------------------- 5
-
- lock.acquire_write() # upgrade read to write
- barrier.wait() # ---------------------------------------- 6
- # others test timeout
- barrier.wait() # ---------------------------------------- 7
- lock.release_write() # release read AND write (need both)
- lock.release_read()
- barrier.wait() # ---------------------------------------- 8
-
- # p3 acquires read
- barrier.wait() # ---------------------------------------- 9
- # p3 upgrades read to write
- barrier.wait() # ---------------------------------------- 10
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 11
- # p3 releases locks
- barrier.wait() # ---------------------------------------- 12
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 13
- lock.release_read()
-
- def p3(barrier):
- lock = Lock(self.lock_path)
-
- # p1 acquires write
- barrier.wait() # ---------------------------------------- 1
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 2
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 3
- # p1 tests shared read
- barrier.wait() # ---------------------------------------- 4
- lock.release_read()
- barrier.wait() # ---------------------------------------- 5
-
- # p2 upgrades read to write
- barrier.wait() # ---------------------------------------- 6
- self.assertRaises(LockError, lock.acquire_write, 0.1)
- self.assertRaises(LockError, lock.acquire_read, 0.1)
- barrier.wait() # ---------------------------------------- 7
- # p2 releases write & read
- barrier.wait() # ---------------------------------------- 8
-
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 9
- lock.acquire_write()
- barrier.wait() # ---------------------------------------- 10
- # others test timeout
- barrier.wait() # ---------------------------------------- 11
- lock.release_read() # release read AND write in opposite
- lock.release_write() # order from before on p2
- barrier.wait() # ---------------------------------------- 12
- lock.acquire_read()
- barrier.wait() # ---------------------------------------- 13
- lock.release_read()
-
- self.multiproc_test(p1, p2, p3)
-
- def test_transaction(self):
- def enter_fn():
- vals['entered'] = True
-
- def exit_fn(t, v, tb):
- vals['exited'] = True
- vals['exception'] = (t or v or tb)
-
- lock = Lock(self.lock_path)
- vals = {'entered': False, 'exited': False, 'exception': False}
- with ReadTransaction(lock, enter_fn, exit_fn):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
-
- vals = {'entered': False, 'exited': False, 'exception': False}
- with WriteTransaction(lock, enter_fn, exit_fn):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
-
- def test_transaction_with_exception(self):
- def enter_fn():
- vals['entered'] = True
-
- def exit_fn(t, v, tb):
- vals['exited'] = True
- vals['exception'] = (t or v or tb)
-
- lock = Lock(self.lock_path)
-
- def do_read_with_exception():
- with ReadTransaction(lock, enter_fn, exit_fn):
- raise Exception()
-
- def do_write_with_exception():
- with WriteTransaction(lock, enter_fn, exit_fn):
- raise Exception()
-
- vals = {'entered': False, 'exited': False, 'exception': False}
- self.assertRaises(Exception, do_read_with_exception)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
-
- vals = {'entered': False, 'exited': False, 'exception': False}
- self.assertRaises(Exception, do_write_with_exception)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
-
- def test_transaction_with_context_manager(self):
- class TestContextManager(object):
-
- def __enter__(self):
- vals['entered'] = True
-
- def __exit__(self, t, v, tb):
- vals['exited'] = True
- vals['exception'] = (t or v or tb)
-
- def exit_fn(t, v, tb):
- vals['exited_fn'] = True
- vals['exception_fn'] = (t or v or tb)
-
- lock = Lock(self.lock_path)
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- with ReadTransaction(lock, TestContextManager, exit_fn):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
- self.assertTrue(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- with ReadTransaction(lock, TestContextManager):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
- self.assertFalse(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- with WriteTransaction(lock, TestContextManager, exit_fn):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
- self.assertTrue(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- with WriteTransaction(lock, TestContextManager):
- pass
-
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertFalse(vals['exception'])
- self.assertFalse(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
-
- def test_transaction_with_context_manager_and_exception(self):
- class TestContextManager(object):
-
- def __enter__(self):
- vals['entered'] = True
-
- def __exit__(self, t, v, tb):
- vals['exited'] = True
- vals['exception'] = (t or v or tb)
-
- def exit_fn(t, v, tb):
- vals['exited_fn'] = True
- vals['exception_fn'] = (t or v or tb)
-
- lock = Lock(self.lock_path)
-
- def do_read_with_exception(exit_fn):
- with ReadTransaction(lock, TestContextManager, exit_fn):
- raise Exception()
-
- def do_write_with_exception(exit_fn):
- with WriteTransaction(lock, TestContextManager, exit_fn):
- raise Exception()
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- self.assertRaises(Exception, do_read_with_exception, exit_fn)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
- self.assertTrue(vals['exited_fn'])
- self.assertTrue(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- self.assertRaises(Exception, do_read_with_exception, None)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
- self.assertFalse(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- self.assertRaises(Exception, do_write_with_exception, exit_fn)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
- self.assertTrue(vals['exited_fn'])
- self.assertTrue(vals['exception_fn'])
-
- vals = {'entered': False, 'exited': False, 'exited_fn': False,
- 'exception': False, 'exception_fn': False}
- self.assertRaises(Exception, do_write_with_exception, None)
- self.assertTrue(vals['entered'])
- self.assertTrue(vals['exited'])
- self.assertTrue(vals['exception'])
- self.assertFalse(vals['exited_fn'])
- self.assertFalse(vals['exception_fn'])
diff --git a/lib/spack/spack/test/make_executable.py b/lib/spack/spack/test/make_executable.py
index 87a43a529a..dd50746ade 100644
--- a/lib/spack/spack/test/make_executable.py
+++ b/lib/spack/spack/test/make_executable.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,7 @@ import shutil
import tempfile
import unittest
-from llnl.util.filesystem import *
+from llnl.util.filesystem import join_path
from spack.build_environment import MakeExecutable
from spack.util.environment import path_put_first
@@ -46,7 +46,7 @@ class MakeExecutableTest(unittest.TestCase):
with open(make_exe, 'w') as f:
f.write('#!/bin/sh\n')
f.write('echo "$@"')
- os.chmod(make_exe, 0700)
+ os.chmod(make_exe, 0o700)
path_put_first('PATH', [self.tmpdir])
diff --git a/lib/spack/spack/test/mirror.py b/lib/spack/spack/test/mirror.py
index e5e60e3045..ec8a0d504c 100644
--- a/lib/spack/spack/test/mirror.py
+++ b/lib/spack/spack/test/mirror.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,18 +26,20 @@ import filecmp
import os
import pytest
+from llnl.util.filesystem import join_path
+
import spack
import spack.mirror
import spack.util.executable
-from llnl.util.filesystem import join_path
from spack.spec import Spec
from spack.stage import Stage
+from spack.util.executable import which
# paths in repos that shouldn't be in the mirror tarballs.
exclude = ['.hg', '.git', '.svn']
+
repos = {}
-svn = spack.util.executable.which('svn', required=True)
def set_up_package(name, repository, url_attr):
@@ -68,11 +70,7 @@ def check_mirror():
# register mirror with spack config
mirrors = {'spack-mirror-test': 'file://' + mirror_root}
spack.config.update_config('mirrors', mirrors)
-
- os.chdir(stage.path)
- spack.mirror.create(
- mirror_root, repos, no_checksum=True
- )
+ spack.mirror.create(mirror_root, repos, no_checksum=True)
# Stage directory exists
assert os.path.isdir(mirror_root)
@@ -95,13 +93,17 @@ def check_mirror():
# Stage the archive from the mirror and cd to it.
spack.do_checksum = False
pkg.do_stage(mirror_only=True)
+
# Compare the original repo with the expanded archive
original_path = mock_repo.path
if 'svn' in name:
# have to check out the svn repo to compare.
original_path = join_path(
mock_repo.path, 'checked_out')
+
+ svn = which('svn', required=True)
svn('checkout', mock_repo.url, original_path)
+
dcmp = filecmp.dircmp(original_path, pkg.stage.source_path)
# make sure there are no new files in the expanded
# tarball
@@ -113,33 +115,42 @@ def check_mirror():
@pytest.mark.usefixtures('config', 'refresh_builtin_mock')
class TestMirror(object):
+ def test_url_mirror(self, mock_archive):
+ set_up_package('trivial-install-test-package', mock_archive, 'url')
+ check_mirror()
+ repos.clear()
+
+ @pytest.mark.skipif(
+ not which('git'), reason='requires git to be installed')
def test_git_mirror(self, mock_git_repository):
set_up_package('git-test', mock_git_repository, 'git')
check_mirror()
repos.clear()
+ @pytest.mark.skipif(
+ not which('svn'), reason='requires subversion to be installed')
def test_svn_mirror(self, mock_svn_repository):
set_up_package('svn-test', mock_svn_repository, 'svn')
check_mirror()
repos.clear()
+ @pytest.mark.skipif(
+ not which('hg'), reason='requires mercurial to be installed')
def test_hg_mirror(self, mock_hg_repository):
set_up_package('hg-test', mock_hg_repository, 'hg')
check_mirror()
repos.clear()
- def test_url_mirror(self, mock_archive):
- set_up_package('trivial-install-test-package', mock_archive, 'url')
- check_mirror()
- repos.clear()
-
+ @pytest.mark.skipif(
+ not all([which('svn'), which('hg'), which('git')]),
+ reason='requires subversion, git, and mercurial to be installed')
def test_all_mirror(
self,
mock_git_repository,
mock_svn_repository,
mock_hg_repository,
- mock_archive,
- ):
+ mock_archive):
+
set_up_package('git-test', mock_git_repository, 'git')
set_up_package('svn-test', mock_svn_repository, 'svn')
set_up_package('hg-test', mock_hg_repository, 'hg')
diff --git a/lib/spack/spack/test/module_parsing.py b/lib/spack/spack/test/module_parsing.py
new file mode 100644
index 0000000000..61e0ba1972
--- /dev/null
+++ b/lib/spack/spack/test/module_parsing.py
@@ -0,0 +1,148 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import pytest
+import subprocess
+import os
+from spack.util.module_cmd import get_path_from_module
+from spack.util.module_cmd import get_argument_from_module_line
+from spack.util.module_cmd import get_module_cmd_from_bash
+from spack.util.module_cmd import get_module_cmd, ModuleError
+
+
+typeset_func = subprocess.Popen('module avail',
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ shell=True)
+typeset_func.wait()
+typeset = typeset_func.stderr.read()
+MODULE_NOT_DEFINED = b'not found' in typeset
+
+
+@pytest.fixture
+def save_env():
+ old_PATH = os.environ.get('PATH', None)
+ old_bash_func = os.environ.get('BASH_FUNC_module()', None)
+
+ yield
+
+ if old_PATH:
+ os.environ['PATH'] = old_PATH
+ if old_bash_func:
+ os.environ['BASH_FUNC_module()'] = old_bash_func
+
+
+def test_get_path_from_module(save_env):
+ lines = ['prepend-path LD_LIBRARY_PATH /path/to/lib',
+ 'setenv MOD_DIR /path/to',
+ 'setenv LDFLAGS -Wl,-rpath/path/to/lib',
+ 'setenv LDFLAGS -L/path/to/lib',
+ 'prepend-path PATH /path/to/bin']
+
+ for line in lines:
+ module_func = '() { eval `echo ' + line + ' bash filler`\n}'
+ os.environ['BASH_FUNC_module()'] = module_func
+ path = get_path_from_module('mod')
+
+ assert path == '/path/to'
+
+ os.environ['BASH_FUNC_module()'] = '() { eval $(echo fill bash $*)\n}'
+ path = get_path_from_module('mod')
+
+ assert path is None
+
+
+def test_get_argument_from_module_line():
+ lines = ['prepend-path LD_LIBRARY_PATH /lib/path',
+ 'prepend-path LD_LIBRARY_PATH /lib/path',
+ "prepend_path('PATH' , '/lib/path')",
+ 'prepend_path( "PATH" , "/lib/path" )',
+ 'prepend_path("PATH",' + "'/lib/path')"]
+
+ bad_lines = ['prepend_path(PATH,/lib/path)',
+ 'prepend-path (LD_LIBRARY_PATH) /lib/path']
+
+ assert all(get_argument_from_module_line(l) == '/lib/path' for l in lines)
+ for bl in bad_lines:
+ with pytest.raises(ValueError):
+ get_argument_from_module_line(bl)
+
+
+@pytest.mark.skipif(MODULE_NOT_DEFINED, reason='Depends on defined module fn')
+def test_get_module_cmd_from_bash_using_modules():
+ module_list_proc = subprocess.Popen(['module list'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ executable='/bin/bash',
+ shell=True)
+ module_list_proc.wait()
+ module_list = module_list_proc.stdout.read()
+
+ module_cmd = get_module_cmd_from_bash()
+ module_cmd_list = module_cmd('list', output=str, error=str)
+
+ # Lmod command reprints some env variables on every invocation.
+ # Test containment to avoid false failures on lmod systems.
+ assert module_list in module_cmd_list
+
+
+def test_get_module_cmd_from_bash_ticks(save_env):
+ os.environ['BASH_FUNC_module()'] = '() { eval `echo bash $*`\n}'
+
+ module_cmd = get_module_cmd()
+ module_cmd_list = module_cmd('list', output=str, error=str)
+
+ assert module_cmd_list == 'python list\n'
+
+
+def test_get_module_cmd_from_bash_parens(save_env):
+ os.environ['BASH_FUNC_module()'] = '() { eval $(echo fill sh $*)\n}'
+
+ module_cmd = get_module_cmd()
+ module_cmd_list = module_cmd('list', output=str, error=str)
+
+ assert module_cmd_list == 'fill python list\n'
+
+
+def test_get_module_cmd_fails(save_env):
+ os.environ.pop('BASH_FUNC_module()')
+ os.environ.pop('PATH')
+ with pytest.raises(ModuleError):
+ module_cmd = get_module_cmd(b'--norc')
+ module_cmd() # Here to avoid Flake F841 on previous line
+
+
+def test_get_module_cmd_from_which(tmpdir, save_env):
+ f = tmpdir.mkdir('bin').join('modulecmd')
+ f.write('#!/bin/bash\n'
+ 'echo $*')
+ f.chmod(0o770)
+
+ os.environ['PATH'] = str(tmpdir.join('bin')) + ':' + os.environ['PATH']
+ os.environ.pop('BASH_FUNC_module()')
+
+ module_cmd = get_module_cmd(b'--norc')
+ module_cmd_list = module_cmd('list', output=str, error=str)
+
+ assert module_cmd_list == 'python list\n'
diff --git a/lib/spack/spack/test/modules.py b/lib/spack/spack/test/modules.py
deleted file mode 100644
index 4f35df1982..0000000000
--- a/lib/spack/spack/test/modules.py
+++ /dev/null
@@ -1,498 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-import collections
-import contextlib
-
-import cStringIO
-import pytest
-import spack.modules
-import spack.spec
-
-# Our "filesystem" for the tests below
-FILE_REGISTRY = collections.defaultdict(cStringIO.StringIO)
-# Spec strings that will be used throughout the tests
-mpich_spec_string = 'mpich@3.0.4'
-mpileaks_spec_string = 'mpileaks'
-libdwarf_spec_string = 'libdwarf arch=x64-linux'
-
-
-@pytest.fixture()
-def stringio_open(monkeypatch):
- """Overrides the `open` builtin in spack.modules with an implementation
- that writes on a StringIO instance.
- """
- @contextlib.contextmanager
- def _mock(filename, mode):
- if not mode == 'w':
- raise RuntimeError('unexpected opening mode for stringio_open')
-
- FILE_REGISTRY[filename] = cStringIO.StringIO()
-
- try:
- yield FILE_REGISTRY[filename]
- finally:
- handle = FILE_REGISTRY[filename]
- FILE_REGISTRY[filename] = handle.getvalue()
- handle.close()
-
- monkeypatch.setattr(spack.modules, 'open', _mock, raising=False)
-
-
-def get_modulefile_content(factory, spec):
- """Writes the module file and returns the content as a string.
-
- :param factory: module file factory
- :param spec: spec of the module file to be written
- :return: content of the module file
- :rtype: str
- """
- spec.concretize()
- generator = factory(spec)
- generator.write()
- content = FILE_REGISTRY[generator.file_name].split('\n')
- generator.remove()
- return content
-
-
-def test_update_dictionary_extending_list():
- target = {
- 'foo': {
- 'a': 1,
- 'b': 2,
- 'd': 4
- },
- 'bar': [1, 2, 4],
- 'baz': 'foobar'
- }
- update = {
- 'foo': {
- 'c': 3,
- },
- 'bar': [3],
- 'baz': 'foobaz',
- 'newkey': {
- 'd': 4
- }
- }
- spack.modules.update_dictionary_extending_lists(target, update)
- assert len(target) == 4
- assert len(target['foo']) == 4
- assert len(target['bar']) == 4
- assert target['baz'] == 'foobaz'
-
-
-def test_inspect_path():
- env = spack.modules.inspect_path('/usr')
- names = [item.name for item in env]
- assert 'PATH' in names
- assert 'LIBRARY_PATH' in names
- assert 'LD_LIBRARY_PATH' in names
- assert 'CPATH' in names
-
-
-@pytest.fixture()
-def tcl_factory(tmpdir, monkeypatch):
- """Returns a factory that writes non-hierarchical TCL module files."""
- factory = spack.modules.TclModule
- monkeypatch.setattr(factory, 'path', str(tmpdir))
- monkeypatch.setattr(spack.modules, 'module_types', {factory.name: factory})
- return factory
-
-
-@pytest.fixture()
-def lmod_factory(tmpdir, monkeypatch):
- """Returns a factory that writes hierarchical LUA module files."""
- factory = spack.modules.LmodModule
- monkeypatch.setattr(factory, 'path', str(tmpdir))
- monkeypatch.setattr(spack.modules, 'module_types', {factory.name: factory})
- return factory
-
-
-@pytest.fixture()
-def dotkit_factory(tmpdir, monkeypatch):
- """Returns a factory that writes DotKit module files."""
- factory = spack.modules.Dotkit
- monkeypatch.setattr(factory, 'path', str(tmpdir))
- monkeypatch.setattr(spack.modules, 'module_types', {factory.name: factory})
- return factory
-
-
-@pytest.mark.usefixtures('config', 'builtin_mock', 'stringio_open')
-class TestTcl(object):
-
- configuration_autoload_direct = {
- 'enable': ['tcl'],
- 'tcl': {
- 'all': {
- 'autoload': 'direct'
- }
- }
- }
-
- configuration_autoload_all = {
- 'enable': ['tcl'],
- 'tcl': {
- 'all': {
- 'autoload': 'all'
- }
- }
- }
-
- configuration_prerequisites_direct = {
- 'enable': ['tcl'],
- 'tcl': {
- 'all': {
- 'prerequisites': 'direct'
- }
- }
- }
-
- configuration_prerequisites_all = {
- 'enable': ['tcl'],
- 'tcl': {
- 'all': {
- 'prerequisites': 'all'
- }
- }
- }
-
- configuration_alter_environment = {
- 'enable': ['tcl'],
- 'tcl': {
- 'all': {
- 'filter': {'environment_blacklist': ['CMAKE_PREFIX_PATH']},
- 'environment': {
- 'set': {'${PACKAGE}_ROOT': '${PREFIX}'}
- }
- },
- 'platform=test target=x86_64': {
- 'environment': {
- 'set': {'FOO': 'foo'},
- 'unset': ['BAR']
- }
- },
- 'platform=test target=x86_32': {
- 'load': ['foo/bar']
- }
- }
- }
-
- configuration_blacklist = {
- 'enable': ['tcl'],
- 'tcl': {
- 'whitelist': ['zmpi'],
- 'blacklist': ['callpath', 'mpi'],
- 'all': {
- 'autoload': 'direct'
- }
- }
- }
-
- configuration_conflicts = {
- 'enable': ['tcl'],
- 'tcl': {
- 'naming_scheme': '${PACKAGE}/${VERSION}-${COMPILERNAME}',
- 'all': {
- 'conflict': ['${PACKAGE}', 'intel/14.0.1']
- }
- }
- }
-
- configuration_wrong_conflicts = {
- 'enable': ['tcl'],
- 'tcl': {
- 'naming_scheme': '${PACKAGE}/${VERSION}-${COMPILERNAME}',
- 'all': {
- 'conflict': ['${PACKAGE}/${COMPILERNAME}']
- }
- }
- }
-
- configuration_suffix = {
- 'enable': ['tcl'],
- 'tcl': {
- 'mpileaks': {
- 'suffixes': {
- '+debug': 'foo',
- '~debug': 'bar'
- }
- }
- }
- }
-
- def test_simple_case(self, tcl_factory):
- spack.modules._module_config = self.configuration_autoload_direct
- spec = spack.spec.Spec(mpich_spec_string)
- content = get_modulefile_content(tcl_factory, spec)
- assert 'module-whatis "mpich @3.0.4"' in content
- with pytest.raises(TypeError):
- spack.modules.dependencies(spec, 'non-existing-tag')
-
- def test_autoload(self, tcl_factory):
- spack.modules._module_config = self.configuration_autoload_direct
- spec = spack.spec.Spec(mpileaks_spec_string)
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 2
- assert len([x for x in content if 'module load ' in x]) == 2
-
- spack.modules._module_config = self.configuration_autoload_all
- spec = spack.spec.Spec(mpileaks_spec_string)
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 5
- assert len([x for x in content if 'module load ' in x]) == 5
-
- # dtbuild1 has
- # - 1 ('run',) dependency
- # - 1 ('build','link') dependency
- # - 1 ('build',) dependency
- # Just make sure the 'build' dependency is not there
- spack.modules._module_config = self.configuration_autoload_direct
- spec = spack.spec.Spec('dtbuild1')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 2
- assert len([x for x in content if 'module load ' in x]) == 2
-
- # dtbuild1 has
- # - 1 ('run',) dependency
- # - 1 ('build','link') dependency
- # - 1 ('build',) dependency
- # Just make sure the 'build' dependency is not there
- spack.modules._module_config = self.configuration_autoload_all
- spec = spack.spec.Spec('dtbuild1')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 2
- assert len([x for x in content if 'module load ' in x]) == 2
-
- def test_prerequisites(self, tcl_factory):
- spack.modules._module_config = self.configuration_prerequisites_direct
- spec = spack.spec.Spec('mpileaks arch=x86-linux')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'prereq' in x]) == 2
-
- spack.modules._module_config = self.configuration_prerequisites_all
- spec = spack.spec.Spec('mpileaks arch=x86-linux')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'prereq' in x]) == 5
-
- def test_alter_environment(self, tcl_factory):
- spack.modules._module_config = self.configuration_alter_environment
- spec = spack.spec.Spec('mpileaks platform=test target=x86_64')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content
- if x.startswith('prepend-path CMAKE_PREFIX_PATH')
- ]) == 0
- assert len([x for x in content if 'setenv FOO "foo"' in x]) == 1
- assert len([x for x in content if 'unsetenv BAR' in x]) == 1
- assert len([x for x in content if 'setenv MPILEAKS_ROOT' in x]) == 1
-
- spec = spack.spec.Spec('libdwarf %clang platform=test target=x86_32')
- content = get_modulefile_content(tcl_factory, spec)
- assert len(
- [x for x in content if x.startswith('prepend-path CMAKE_PREFIX_PATH')] # NOQA: ignore=E501
- ) == 0
- assert len([x for x in content if 'setenv FOO "foo"' in x]) == 0
- assert len([x for x in content if 'unsetenv BAR' in x]) == 0
- assert len([x for x in content if 'is-loaded foo/bar' in x]) == 1
- assert len([x for x in content if 'module load foo/bar' in x]) == 1
- assert len([x for x in content if 'setenv LIBDWARF_ROOT' in x]) == 1
-
- def test_blacklist(self, tcl_factory):
- spack.modules._module_config = self.configuration_blacklist
- spec = spack.spec.Spec('mpileaks ^zmpi')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 1
- assert len([x for x in content if 'module load ' in x]) == 1
- spec = spack.spec.Spec('callpath arch=x86-linux')
- # Returns a StringIO instead of a string as no module file was written
- with pytest.raises(AttributeError):
- get_modulefile_content(tcl_factory, spec)
- spec = spack.spec.Spec('zmpi arch=x86-linux')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if 'is-loaded' in x]) == 1
- assert len([x for x in content if 'module load ' in x]) == 1
-
- def test_conflicts(self, tcl_factory):
- spack.modules._module_config = self.configuration_conflicts
- spec = spack.spec.Spec('mpileaks')
- content = get_modulefile_content(tcl_factory, spec)
- assert len([x for x in content if x.startswith('conflict')]) == 2
- assert len([x for x in content if x == 'conflict mpileaks']) == 1
- assert len([x for x in content if x == 'conflict intel/14.0.1']) == 1
-
- spack.modules._module_config = self.configuration_wrong_conflicts
- with pytest.raises(SystemExit):
- get_modulefile_content(tcl_factory, spec)
-
- def test_suffixes(self, tcl_factory):
- spack.modules._module_config = self.configuration_suffix
- spec = spack.spec.Spec('mpileaks+debug arch=x86-linux')
- spec.concretize()
- generator = tcl_factory(spec)
- assert 'foo' in generator.use_name
-
- spec = spack.spec.Spec('mpileaks~debug arch=x86-linux')
- spec.concretize()
- generator = tcl_factory(spec)
- assert 'bar' in generator.use_name
-
-
-@pytest.mark.usefixtures('config', 'builtin_mock', 'stringio_open')
-class TestLmod(object):
- configuration_autoload_direct = {
- 'enable': ['lmod'],
- 'lmod': {
- 'all': {
- 'autoload': 'direct'
- }
- }
- }
-
- configuration_autoload_all = {
- 'enable': ['lmod'],
- 'lmod': {
- 'all': {
- 'autoload': 'all'
- }
- }
- }
-
- configuration_no_hash = {
- 'enable': ['lmod'],
- 'lmod': {
- 'hash_length': 0
- }
- }
-
- configuration_alter_environment = {
- 'enable': ['lmod'],
- 'lmod': {
- 'all': {
- 'filter': {'environment_blacklist': ['CMAKE_PREFIX_PATH']}
- },
- 'platform=test target=x86_64': {
- 'environment': {
- 'set': {'FOO': 'foo'},
- 'unset': ['BAR']
- }
- },
- 'platform=test target=x86_32': {
- 'load': ['foo/bar']
- }
- }
- }
-
- configuration_blacklist = {
- 'enable': ['lmod'],
- 'lmod': {
- 'blacklist': ['callpath'],
- 'all': {
- 'autoload': 'direct'
- }
- }
- }
-
- def test_simple_case(self, lmod_factory):
- spack.modules._module_config = self.configuration_autoload_direct
- spec = spack.spec.Spec(mpich_spec_string)
- content = get_modulefile_content(lmod_factory, spec)
- assert '-- -*- lua -*-' in content
- assert 'whatis([[Name : mpich]])' in content
- assert 'whatis([[Version : 3.0.4]])' in content
-
- def test_autoload(self, lmod_factory):
- spack.modules._module_config = self.configuration_autoload_direct
- spec = spack.spec.Spec(mpileaks_spec_string)
- content = get_modulefile_content(lmod_factory, spec)
- assert len([x for x in content if 'if not isloaded(' in x]) == 2
- assert len([x for x in content if 'load(' in x]) == 2
-
- spack.modules._module_config = self.configuration_autoload_all
- spec = spack.spec.Spec(mpileaks_spec_string)
- content = get_modulefile_content(lmod_factory, spec)
- assert len([x for x in content if 'if not isloaded(' in x]) == 5
- assert len([x for x in content if 'load(' in x]) == 5
-
- def test_alter_environment(self, lmod_factory):
- spack.modules._module_config = self.configuration_alter_environment
- spec = spack.spec.Spec('mpileaks platform=test target=x86_64')
- content = get_modulefile_content(lmod_factory, spec)
- assert len(
- [x for x in content if x.startswith('prepend_path("CMAKE_PREFIX_PATH"')] # NOQA: ignore=E501
- ) == 0
- assert len([x for x in content if 'setenv("FOO", "foo")' in x]) == 1
- assert len([x for x in content if 'unsetenv("BAR")' in x]) == 1
-
- spec = spack.spec.Spec('libdwarf %clang platform=test target=x86_32')
- content = get_modulefile_content(lmod_factory, spec)
- assert len(
- [x for x in content if x.startswith('prepend-path("CMAKE_PREFIX_PATH"')] # NOQA: ignore=E501
- ) == 0
- assert len([x for x in content if 'setenv("FOO", "foo")' in x]) == 0
- assert len([x for x in content if 'unsetenv("BAR")' in x]) == 0
-
- def test_blacklist(self, lmod_factory):
- spack.modules._module_config = self.configuration_blacklist
- spec = spack.spec.Spec(mpileaks_spec_string)
- content = get_modulefile_content(lmod_factory, spec)
- assert len([x for x in content if 'if not isloaded(' in x]) == 1
- assert len([x for x in content if 'load(' in x]) == 1
-
- def test_no_hash(self, lmod_factory):
- # Make sure that virtual providers (in the hierarchy) always
- # include a hash. Make sure that the module file for the spec
- # does not include a hash if hash_length is 0.
- spack.modules._module_config = self.configuration_no_hash
- spec = spack.spec.Spec(mpileaks_spec_string)
- spec.concretize()
- module = lmod_factory(spec)
- path = module.file_name
- mpi_spec = spec['mpi']
- mpiElement = "{0}/{1}-{2}/".format(
- mpi_spec.name, mpi_spec.version, mpi_spec.dag_hash(length=7)
- )
- assert mpiElement in path
- mpileaks_spec = spec
- mpileaks_element = "{0}/{1}.lua".format(
- mpileaks_spec.name, mpileaks_spec.version)
- assert path.endswith(mpileaks_element)
-
-
-@pytest.mark.usefixtures('config', 'builtin_mock', 'stringio_open')
-class TestDotkit(object):
- configuration_dotkit = {
- 'enable': ['dotkit'],
- 'dotkit': {
- 'all': {
- 'prerequisites': 'direct'
- }
- }
- }
-
- def test_dotkit(self, dotkit_factory):
- spack.modules._module_config = self.configuration_dotkit
- spec = spack.spec.Spec('mpileaks arch=x86-linux')
- content = get_modulefile_content(dotkit_factory, spec)
- assert '#c spack' in content
- assert '#d mpileaks @2.3' in content
diff --git a/lib/spack/spack/test/modules/common.py b/lib/spack/spack/test/modules/common.py
new file mode 100644
index 0000000000..9c04dae649
--- /dev/null
+++ b/lib/spack/spack/test/modules/common.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import spack.modules.common
+
+
+def test_update_dictionary_extending_list():
+ target = {
+ 'foo': {
+ 'a': 1,
+ 'b': 2,
+ 'd': 4
+ },
+ 'bar': [1, 2, 4],
+ 'baz': 'foobar'
+ }
+ update = {
+ 'foo': {
+ 'c': 3,
+ },
+ 'bar': [3],
+ 'baz': 'foobaz',
+ 'newkey': {
+ 'd': 4
+ }
+ }
+ spack.modules.common.update_dictionary_extending_lists(target, update)
+ assert len(target) == 4
+ assert len(target['foo']) == 4
+ assert len(target['bar']) == 4
+ assert target['baz'] == 'foobaz'
diff --git a/lib/spack/spack/test/modules/conftest.py b/lib/spack/spack/test/modules/conftest.py
new file mode 100644
index 0000000000..35b5a30856
--- /dev/null
+++ b/lib/spack/spack/test/modules/conftest.py
@@ -0,0 +1,154 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import collections
+import contextlib
+import inspect
+import os.path
+import yaml
+
+from six import StringIO
+import pytest
+import spack
+import spack.modules.common
+import spack.util.path
+
+
+@pytest.fixture()
+def file_registry():
+ """Fake filesystem for modulefiles test"""
+ return collections.defaultdict(StringIO)
+
+
+@pytest.fixture()
+def filename_dict(file_registry, monkeypatch):
+ """Returns a fake open that writes on a StringIO instance instead
+ of disk.
+ """
+ @contextlib.contextmanager
+ def _mock(filename, mode):
+ if not mode == 'w':
+ raise RuntimeError('opening mode must be "w" [stringio_open]')
+
+ file_registry[filename] = StringIO()
+ try:
+ yield file_registry[filename]
+ finally:
+ handle = file_registry[filename]
+ file_registry[filename] = handle.getvalue()
+ handle.close()
+ # Patch 'open' in the appropriate module
+ monkeypatch.setattr(spack.modules.common, 'open', _mock, raising=False)
+ return file_registry
+
+
+@pytest.fixture()
+def modulefile_content(filename_dict, request):
+ """Returns a function that generates the content of a module file
+ as a list of lines.
+ """
+
+ writer_cls = getattr(request.module, 'writer_cls')
+
+ def _impl(spec_str):
+ # Write the module file
+ spec = spack.spec.Spec(spec_str)
+ spec.concretize()
+ generator = writer_cls(spec)
+ generator.write()
+
+ # Get its filename
+ filename = generator.layout.filename
+ # Retrieve the content
+ content = filename_dict[filename].split('\n')
+ generator.remove()
+ return content
+
+ return _impl
+
+
+@pytest.fixture()
+def update_template_dirs(config, monkeypatch):
+ """Mocks the template directories for tests"""
+ dirs = spack.config.get_config('config')['template_dirs']
+ dirs = [spack.util.path.canonicalize_path(x) for x in dirs]
+ monkeypatch.setattr(spack, 'template_dirs', dirs)
+
+
+@pytest.fixture()
+def patch_configuration(monkeypatch, request):
+ """Reads a configuration file from the mock ones prepared for tests
+ and monkeypatches the right classes to hook it in.
+ """
+ # Class of the module file writer
+ writer_cls = getattr(request.module, 'writer_cls')
+ # Module where the module file writer is defined
+ writer_mod = inspect.getmodule(writer_cls)
+ # Key for specific settings relative to this module type
+ writer_key = str(writer_mod.__name__).split('.')[-1]
+ # Root folder for configuration
+ root_for_conf = os.path.join(
+ spack.test_path, 'data', 'modules', writer_key
+ )
+
+ def _impl(filename):
+
+ file = os.path.join(root_for_conf, filename + '.yaml')
+ with open(file) as f:
+ configuration = yaml.load(f)
+
+ monkeypatch.setattr(
+ spack.modules.common,
+ 'configuration',
+ configuration
+ )
+ monkeypatch.setattr(
+ writer_mod,
+ 'configuration',
+ configuration[writer_key]
+ )
+ monkeypatch.setattr(
+ writer_mod,
+ 'configuration_registry',
+ {}
+ )
+ return _impl
+
+
+@pytest.fixture()
+def factory(request):
+ """Function that, given a spec string, returns an instance of the writer
+ and the corresponding spec.
+ """
+
+ # Class of the module file writer
+ writer_cls = getattr(request.module, 'writer_cls')
+
+ def _mock(spec_string):
+ spec = spack.spec.Spec(spec_string)
+ spec.concretize()
+ return writer_cls(spec), spec
+
+ return _mock
diff --git a/lib/spack/spack/test/modules/dotkit.py b/lib/spack/spack/test/modules/dotkit.py
new file mode 100644
index 0000000000..b27a9eecf7
--- /dev/null
+++ b/lib/spack/spack/test/modules/dotkit.py
@@ -0,0 +1,72 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import pytest
+import spack.modules.dotkit
+
+#: Class of the writer tested in this module
+writer_cls = spack.modules.dotkit.DotkitModulefileWriter
+
+
+@pytest.mark.usefixtures('config', 'builtin_mock')
+class TestDotkit(object):
+
+ def test_dotkit(self, modulefile_content, patch_configuration):
+ """Tests the generation of a dotkit file that loads dependencies
+ automatically.
+ """
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content('mpileaks arch=x86-linux')
+
+ assert '#c spack' in content
+ assert '#d mpileaks @2.3' in content
+ assert len([x for x in content if 'dk_op' in x]) == 2
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_package(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from and attribute in the package."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content('override-module-templates')
+
+ assert 'Override successful!' in content
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_modules_yaml(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from `modules.yaml`"""
+
+ patch_configuration('override_template')
+
+ # Check that this takes precedence over an attribute in the package
+ content = modulefile_content('override-module-templates')
+ assert 'Override even better!' in content
+
+ content = modulefile_content('mpileaks arch=x86-linux')
+ assert 'Override even better!' in content
diff --git a/lib/spack/spack/test/modules/lmod.py b/lib/spack/spack/test/modules/lmod.py
new file mode 100644
index 0000000000..494a78e829
--- /dev/null
+++ b/lib/spack/spack/test/modules/lmod.py
@@ -0,0 +1,248 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import pytest
+
+import spack.modules.lmod
+
+mpich_spec_string = 'mpich@3.0.4'
+mpileaks_spec_string = 'mpileaks'
+libdwarf_spec_string = 'libdwarf arch=x64-linux'
+
+#: Class of the writer tested in this module
+writer_cls = spack.modules.lmod.LmodModulefileWriter
+
+
+@pytest.fixture(params=[
+ 'clang@3.3',
+ 'gcc@4.5.0'
+])
+def compiler(request):
+ return request.param
+
+
+@pytest.fixture(params=[
+ ('mpich@3.0.4', ('mpi',)),
+ ('openblas@0.2.15', ('blas',)),
+ ('openblas-with-lapack@0.2.15', ('blas', 'lapack'))
+])
+def provider(request):
+ return request.param
+
+
+@pytest.mark.usefixtures('config', 'builtin_mock',)
+class TestLmod(object):
+
+ def test_file_layout(
+ self, compiler, provider, factory, patch_configuration
+ ):
+ """Tests the layout of files in the hierarchy is the one expected."""
+ patch_configuration('complex_hierarchy')
+ spec_string, services = provider
+ module, spec = factory(spec_string + '%' + compiler)
+
+ layout = module.layout
+
+ # Check that the services provided are in the hierarchy
+ for s in services:
+ assert s in layout.conf.hierarchy_tokens
+
+ # Check that the compiler part of the path has no hash and that it
+ # is transformed to r"Core" if the compiler is listed among core
+ # compilers
+ if compiler == 'clang@3.3':
+ assert 'Core' in layout.available_path_parts
+ else:
+ assert compiler.replace('@', '/') in layout.available_path_parts
+
+ # Check that the provider part instead has always an hash even if
+ # hash has been disallowed in the configuration file
+ path_parts = layout.available_path_parts
+ service_part = spec_string.replace('@', '/')
+ service_part = '-'.join([service_part, layout.spec.dag_hash(length=7)])
+ assert service_part in path_parts
+
+ # Check that multi-providers have repetitions in path parts
+ repetitions = len([x for x in path_parts if service_part == x])
+ if spec_string == 'openblas-with-lapack@0.2.15':
+ assert repetitions == 2
+ else:
+ assert repetitions == 1
+
+ def test_simple_case(self, modulefile_content, patch_configuration):
+ """Tests the generation of a simple TCL module file."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content(mpich_spec_string)
+
+ assert '-- -*- lua -*-' in content
+ assert 'whatis([[Name : mpich]])' in content
+ assert 'whatis([[Version : 3.0.4]])' in content
+ assert 'family("mpi")' in content
+
+ def test_autoload_direct(self, modulefile_content, patch_configuration):
+ """Tests the automatic loading of direct dependencies."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content(mpileaks_spec_string)
+
+ assert len([x for x in content if 'if not isloaded(' in x]) == 2
+ assert len([x for x in content if 'load(' in x]) == 2
+
+ # The configuration file doesn't set the verbose keyword
+ # that defaults to False
+ messages = [x for x in content if 'LmodMessage("Autoloading' in x]
+ assert len(messages) == 0
+
+ def test_autoload_all(self, modulefile_content, patch_configuration):
+ """Tests the automatic loading of all dependencies."""
+
+ patch_configuration('autoload_all')
+ content = modulefile_content(mpileaks_spec_string)
+
+ assert len([x for x in content if 'if not isloaded(' in x]) == 5
+ assert len([x for x in content if 'load(' in x]) == 5
+
+ # The configuration file sets the verbose keyword to True
+ messages = [x for x in content if 'LmodMessage("Autoloading' in x]
+ assert len(messages) == 5
+
+ def test_alter_environment(self, modulefile_content, patch_configuration):
+ """Tests modifications to run-time environment."""
+
+ patch_configuration('alter_environment')
+ content = modulefile_content('mpileaks platform=test target=x86_64')
+
+ assert len(
+ [x for x in content if x.startswith('prepend_path("CMAKE_PREFIX_PATH"')] # NOQA: ignore=E501
+ ) == 0
+ assert len([x for x in content if 'setenv("FOO", "foo")' in x]) == 1
+ assert len([x for x in content if 'unsetenv("BAR")' in x]) == 1
+
+ content = modulefile_content(
+ 'libdwarf %clang platform=test target=x86_32'
+ )
+
+ assert len(
+ [x for x in content if x.startswith('prepend-path("CMAKE_PREFIX_PATH"')] # NOQA: ignore=E501
+ ) == 0
+ assert len([x for x in content if 'setenv("FOO", "foo")' in x]) == 0
+ assert len([x for x in content if 'unsetenv("BAR")' in x]) == 0
+
+ def test_blacklist(self, modulefile_content, patch_configuration):
+ """Tests blacklisting the generation of selected modules."""
+
+ patch_configuration('blacklist')
+ content = modulefile_content(mpileaks_spec_string)
+
+ assert len([x for x in content if 'if not isloaded(' in x]) == 1
+ assert len([x for x in content if 'load(' in x]) == 1
+
+ def test_no_hash(self, factory, patch_configuration):
+ """Makes sure that virtual providers (in the hierarchy) always
+ include a hash. Make sure that the module file for the spec
+ does not include a hash if hash_length is 0.
+ """
+
+ patch_configuration('no_hash')
+ module, spec = factory(mpileaks_spec_string)
+ path = module.layout.filename
+ mpi_spec = spec['mpi']
+
+ mpiElement = "{0}/{1}-{2}/".format(
+ mpi_spec.name, mpi_spec.version, mpi_spec.dag_hash(length=7)
+ )
+
+ assert mpiElement in path
+
+ mpileaks_spec = spec
+ mpileaks_element = "{0}/{1}.lua".format(
+ mpileaks_spec.name, mpileaks_spec.version
+ )
+
+ assert path.endswith(mpileaks_element)
+
+ def test_no_core_compilers(self, factory, patch_configuration):
+ """Ensures that missing 'core_compilers' in the configuration file
+ raises the right exception.
+ """
+
+ # In this case we miss the entry completely
+ patch_configuration('missing_core_compilers')
+
+ module, spec = factory(mpileaks_spec_string)
+ with pytest.raises(spack.modules.lmod.CoreCompilersNotFoundError):
+ module.write()
+
+ # Here we have an empty list
+ patch_configuration('core_compilers_empty')
+
+ module, spec = factory(mpileaks_spec_string)
+ with pytest.raises(spack.modules.lmod.CoreCompilersNotFoundError):
+ module.write()
+
+ def test_non_virtual_in_hierarchy(self, factory, patch_configuration):
+ """Ensures that if a non-virtual is in hierarchy, an exception will
+ be raised.
+ """
+ patch_configuration('non_virtual_in_hierarchy')
+
+ module, spec = factory(mpileaks_spec_string)
+ with pytest.raises(spack.modules.lmod.NonVirtualInHierarchyError):
+ module.write()
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_package(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from and attribute in the package."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content('override-module-templates')
+
+ assert 'Override successful!' in content
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_modules_yaml(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from `modules.yaml`"""
+ patch_configuration('override_template')
+
+ content = modulefile_content('override-module-templates')
+ assert 'Override even better!' in content
+
+ content = modulefile_content('mpileaks arch=x86-linux')
+ assert 'Override even better!' in content
+
+ @pytest.mark.usefixtures('config')
+ def test_external_configure_args(
+ self, factory
+ ):
+ # If this package is detected as an external, its configure option line
+ # in the module file starts with 'unknown'
+ writer, spec = factory('externaltool')
+
+ assert 'unknown' in writer.context.configure_options
diff --git a/lib/spack/spack/test/modules/tcl.py b/lib/spack/spack/test/modules/tcl.py
new file mode 100644
index 0000000000..0a8dd99c76
--- /dev/null
+++ b/lib/spack/spack/test/modules/tcl.py
@@ -0,0 +1,279 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import pytest
+import spack.modules.common
+import spack.modules.tcl
+import spack.spec
+
+mpich_spec_string = 'mpich@3.0.4'
+mpileaks_spec_string = 'mpileaks'
+libdwarf_spec_string = 'libdwarf arch=x64-linux'
+
+#: Class of the writer tested in this module
+writer_cls = spack.modules.tcl.TclModulefileWriter
+
+
+@pytest.mark.usefixtures('config', 'builtin_mock')
+class TestTcl(object):
+
+ def test_simple_case(self, modulefile_content, patch_configuration):
+ """Tests the generation of a simple TCL module file."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content(mpich_spec_string)
+
+ assert 'module-whatis "mpich @3.0.4"' in content
+
+ def test_autoload_direct(self, modulefile_content, patch_configuration):
+ """Tests the automatic loading of direct dependencies."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content(mpileaks_spec_string)
+
+ assert len([x for x in content if 'is-loaded' in x]) == 2
+ assert len([x for x in content if 'module load ' in x]) == 2
+
+ # dtbuild1 has
+ # - 1 ('run',) dependency
+ # - 1 ('build','link') dependency
+ # - 1 ('build',) dependency
+ # Just make sure the 'build' dependency is not there
+ content = modulefile_content('dtbuild1')
+
+ assert len([x for x in content if 'is-loaded' in x]) == 2
+ assert len([x for x in content if 'module load ' in x]) == 2
+
+ # The configuration file sets the verbose keyword to False
+ messages = [x for x in content if 'puts stderr "Autoloading' in x]
+ assert len(messages) == 0
+
+ def test_autoload_all(self, modulefile_content, patch_configuration):
+ """Tests the automatic loading of all dependencies."""
+
+ patch_configuration('autoload_all')
+ content = modulefile_content(mpileaks_spec_string)
+
+ assert len([x for x in content if 'is-loaded' in x]) == 5
+ assert len([x for x in content if 'module load ' in x]) == 5
+
+ # dtbuild1 has
+ # - 1 ('run',) dependency
+ # - 1 ('build','link') dependency
+ # - 1 ('build',) dependency
+ # Just make sure the 'build' dependency is not there
+ content = modulefile_content('dtbuild1')
+
+ assert len([x for x in content if 'is-loaded' in x]) == 2
+ assert len([x for x in content if 'module load ' in x]) == 2
+
+ # The configuration file sets the verbose keyword to True
+ messages = [x for x in content if 'puts stderr "Autoloading' in x]
+ assert len(messages) == 2
+
+ def test_prerequisites_direct(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests asking direct dependencies as prerequisites."""
+
+ patch_configuration('prerequisites_direct')
+ content = modulefile_content('mpileaks arch=x86-linux')
+
+ assert len([x for x in content if 'prereq' in x]) == 2
+
+ def test_prerequisites_all(self, modulefile_content, patch_configuration):
+ """Tests asking all dependencies as prerequisites."""
+
+ patch_configuration('prerequisites_all')
+ content = modulefile_content('mpileaks arch=x86-linux')
+
+ assert len([x for x in content if 'prereq' in x]) == 5
+
+ def test_alter_environment(self, modulefile_content, patch_configuration):
+ """Tests modifications to run-time environment."""
+
+ patch_configuration('alter_environment')
+ content = modulefile_content('mpileaks platform=test target=x86_64')
+
+ assert len([x for x in content
+ if x.startswith('prepend-path CMAKE_PREFIX_PATH')
+ ]) == 0
+ assert len([x for x in content if 'setenv FOO "foo"' in x]) == 1
+ assert len([
+ x for x in content if 'setenv OMPI_MCA_mpi_leave_pinned "1"' in x
+ ]) == 1
+ assert len([
+ x for x in content if 'setenv OMPI_MCA_MPI_LEAVE_PINNED "1"' in x
+ ]) == 0
+ assert len([x for x in content if 'unsetenv BAR' in x]) == 1
+ assert len([x for x in content if 'setenv MPILEAKS_ROOT' in x]) == 1
+
+ content = modulefile_content(
+ 'libdwarf %clang platform=test target=x86_32'
+ )
+
+ assert len([x for x in content
+ if x.startswith('prepend-path CMAKE_PREFIX_PATH')
+ ]) == 0
+ assert len([x for x in content if 'setenv FOO "foo"' in x]) == 0
+ assert len([x for x in content if 'unsetenv BAR' in x]) == 0
+ assert len([x for x in content if 'is-loaded foo/bar' in x]) == 1
+ assert len([x for x in content if 'module load foo/bar' in x]) == 1
+ assert len([x for x in content if 'setenv LIBDWARF_ROOT' in x]) == 1
+
+ def test_blacklist(self, modulefile_content, patch_configuration):
+ """Tests blacklisting the generation of selected modules."""
+
+ patch_configuration('blacklist')
+ content = modulefile_content('mpileaks ^zmpi')
+
+ assert len([x for x in content if 'is-loaded' in x]) == 1
+ assert len([x for x in content if 'module load ' in x]) == 1
+
+ # Returns a StringIO instead of a string as no module file was written
+ with pytest.raises(AttributeError):
+ modulefile_content('callpath arch=x86-linux')
+
+ content = modulefile_content('zmpi arch=x86-linux')
+
+ assert len([x for x in content if 'is-loaded' in x]) == 1
+ assert len([x for x in content if 'module load ' in x]) == 1
+
+ def test_naming_scheme(self, factory, patch_configuration):
+ """Tests reading the correct naming scheme."""
+
+ # This configuration has no error, so check the conflicts directives
+ # are there
+ patch_configuration('conflicts')
+
+ # Test we read the expected configuration for the naming scheme
+ writer, _ = factory('mpileaks')
+ expected = '${PACKAGE}/${VERSION}-${COMPILERNAME}'
+
+ assert writer.conf.naming_scheme == expected
+
+ def test_invalid_naming_scheme(self, factory, patch_configuration):
+ """Tests the evaluation of an invalid naming scheme."""
+
+ patch_configuration('invalid_naming_scheme')
+
+ # Test that having invalid tokens in the naming scheme raises
+ # a RuntimeError
+ writer, _ = factory('mpileaks')
+ with pytest.raises(RuntimeError):
+ writer.layout.use_name
+
+ def test_invalid_token_in_env_name(self, factory, patch_configuration):
+ """Tests setting environment variables with an invalid name."""
+
+ patch_configuration('invalid_token_in_env_var_name')
+
+ writer, _ = factory('mpileaks')
+ with pytest.raises(RuntimeError):
+ writer.write()
+
+ def test_conflicts(self, modulefile_content, patch_configuration):
+ """Tests adding conflicts to the module."""
+
+ # This configuration has no error, so check the conflicts directives
+ # are there
+ patch_configuration('conflicts')
+ content = modulefile_content('mpileaks')
+
+ assert len([x for x in content if x.startswith('conflict')]) == 2
+ assert len([x for x in content if x == 'conflict mpileaks']) == 1
+ assert len([x for x in content if x == 'conflict intel/14.0.1']) == 1
+
+ # This configuration is inconsistent, check an error is raised
+ patch_configuration('wrong_conflicts')
+ with pytest.raises(SystemExit):
+ modulefile_content('mpileaks')
+
+ def test_suffixes(self, patch_configuration, factory):
+ """Tests adding suffixes to module file name."""
+ patch_configuration('suffix')
+
+ writer, spec = factory('mpileaks+debug arch=x86-linux')
+ assert 'foo' in writer.layout.use_name
+
+ writer, spec = factory('mpileaks~debug arch=x86-linux')
+ assert 'bar' in writer.layout.use_name
+
+ def test_setup_environment(self, modulefile_content, patch_configuration):
+ """Tests the internal set-up of run-time environment."""
+
+ patch_configuration('suffix')
+ content = modulefile_content('mpileaks')
+
+ assert len([x for x in content if 'setenv FOOBAR' in x]) == 1
+ assert len(
+ [x for x in content if 'setenv FOOBAR "mpileaks"' in x]
+ ) == 1
+
+ spec = spack.spec.Spec('mpileaks')
+ spec.concretize()
+ content = modulefile_content(str(spec['callpath']))
+
+ assert len([x for x in content if 'setenv FOOBAR' in x]) == 1
+ assert len(
+ [x for x in content if 'setenv FOOBAR "callpath"' in x]
+ ) == 1
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_package(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from and attribute in the package."""
+
+ patch_configuration('autoload_direct')
+ content = modulefile_content('override-module-templates')
+
+ assert 'Override successful!' in content
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_override_template_in_modules_yaml(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests overriding a template from `modules.yaml`"""
+ patch_configuration('override_template')
+
+ content = modulefile_content('override-module-templates')
+ assert 'Override even better!' in content
+
+ content = modulefile_content('mpileaks arch=x86-linux')
+ assert 'Override even better!' in content
+
+ @pytest.mark.usefixtures('update_template_dirs')
+ def test_extend_context(
+ self, modulefile_content, patch_configuration
+ ):
+ """Tests using a package defined context"""
+ patch_configuration('autoload_direct')
+ content = modulefile_content('override-context-templates')
+
+ assert 'puts stderr "sentence from package"' in content
+
+ short_description = 'module-whatis "This package updates the context for TCL modulefiles."' # NOQA: ignore=E501
+ assert short_description in content
diff --git a/lib/spack/spack/test/multimethod.py b/lib/spack/spack/test/multimethod.py
index 90948f010c..40519cccb1 100644
--- a/lib/spack/spack/test/multimethod.py
+++ b/lib/spack/spack/test/multimethod.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,8 +25,7 @@
"""Test for multi_method dispatch."""
import spack
import pytest
-from spack.multimethod import *
-from spack.version import *
+from spack.multimethod import NoSuchMethodError
def test_no_version_match(builtin_mock):
@@ -86,7 +85,7 @@ def test_default_works(builtin_mock):
def test_target_match(builtin_mock):
platform = spack.architecture.platform()
- targets = platform.targets.values()
+ targets = list(platform.targets.values())
for target in targets[:-1]:
pkg = spack.repo.get('multimethod target=' + target.name)
assert pkg.different_by_target() == target.name
@@ -118,3 +117,11 @@ def test_virtual_dep_match(builtin_mock):
pkg = spack.repo.get('multimethod^mpich@1.0')
assert pkg.different_by_virtual_dep() == 1
+
+
+def test_multimethod_with_base_class(builtin_mock):
+ pkg = spack.repo.get('multimethod@3')
+ assert pkg.base_method() == "subclass_method"
+
+ pkg = spack.repo.get('multimethod@1')
+ assert pkg.base_method() == "base_method"
diff --git a/lib/spack/spack/test/namespace_trie.py b/lib/spack/spack/test/namespace_trie.py
index 7927fc8e60..fa38a76cc1 100644
--- a/lib/spack/spack/test/namespace_trie.py
+++ b/lib/spack/spack/test/namespace_trie.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,88 +22,92 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import unittest
+import pytest
-from spack.util.naming import NamespaceTrie
+import spack.util.naming
-class NamespaceTrieTest(unittest.TestCase):
+@pytest.fixture()
+def trie():
+ return spack.util.naming.NamespaceTrie()
- def setUp(self):
- self.trie = NamespaceTrie()
- def test_add_single(self):
- self.trie['foo'] = 'bar'
+def test_add_single(trie):
+ trie['foo'] = 'bar'
- self.assertTrue(self.trie.is_prefix('foo'))
- self.assertTrue(self.trie.has_value('foo'))
- self.assertEqual(self.trie['foo'], 'bar')
+ assert trie.is_prefix('foo')
+ assert trie.has_value('foo')
+ assert trie['foo'] == 'bar'
- def test_add_multiple(self):
- self.trie['foo.bar'] = 'baz'
- self.assertFalse(self.trie.has_value('foo'))
- self.assertTrue(self.trie.is_prefix('foo'))
+def test_add_multiple(trie):
+ trie['foo.bar'] = 'baz'
- self.assertTrue(self.trie.is_prefix('foo.bar'))
- self.assertTrue(self.trie.has_value('foo.bar'))
- self.assertEqual(self.trie['foo.bar'], 'baz')
+ assert not trie.has_value('foo')
+ assert trie.is_prefix('foo')
- self.assertFalse(self.trie.is_prefix('foo.bar.baz'))
- self.assertFalse(self.trie.has_value('foo.bar.baz'))
+ assert trie.is_prefix('foo.bar')
+ assert trie.has_value('foo.bar')
+ assert trie['foo.bar'] == 'baz'
- def test_add_three(self):
- # add a three-level namespace
- self.trie['foo.bar.baz'] = 'quux'
+ assert not trie.is_prefix('foo.bar.baz')
+ assert not trie.has_value('foo.bar.baz')
- self.assertTrue(self.trie.is_prefix('foo'))
- self.assertFalse(self.trie.has_value('foo'))
- self.assertTrue(self.trie.is_prefix('foo.bar'))
- self.assertFalse(self.trie.has_value('foo.bar'))
+def test_add_three(trie):
+ # add a three-level namespace
+ trie['foo.bar.baz'] = 'quux'
- self.assertTrue(self.trie.is_prefix('foo.bar.baz'))
- self.assertTrue(self.trie.has_value('foo.bar.baz'))
- self.assertEqual(self.trie['foo.bar.baz'], 'quux')
+ assert trie.is_prefix('foo')
+ assert not trie.has_value('foo')
- self.assertFalse(self.trie.is_prefix('foo.bar.baz.quux'))
- self.assertFalse(self.trie.has_value('foo.bar.baz.quux'))
+ assert trie.is_prefix('foo.bar')
+ assert not trie.has_value('foo.bar')
- # Try to add a second element in a prefix namespace
- self.trie['foo.bar'] = 'blah'
+ assert trie.is_prefix('foo.bar.baz')
+ assert trie.has_value('foo.bar.baz')
+ assert trie['foo.bar.baz'] == 'quux'
- self.assertTrue(self.trie.is_prefix('foo'))
- self.assertFalse(self.trie.has_value('foo'))
+ assert not trie.is_prefix('foo.bar.baz.quux')
+ assert not trie.has_value('foo.bar.baz.quux')
- self.assertTrue(self.trie.is_prefix('foo.bar'))
- self.assertTrue(self.trie.has_value('foo.bar'))
- self.assertEqual(self.trie['foo.bar'], 'blah')
+ # Try to add a second element in a prefix namespace
+ trie['foo.bar'] = 'blah'
- self.assertTrue(self.trie.is_prefix('foo.bar.baz'))
- self.assertTrue(self.trie.has_value('foo.bar.baz'))
- self.assertEqual(self.trie['foo.bar.baz'], 'quux')
+ assert trie.is_prefix('foo')
+ assert not trie.has_value('foo')
- self.assertFalse(self.trie.is_prefix('foo.bar.baz.quux'))
- self.assertFalse(self.trie.has_value('foo.bar.baz.quux'))
+ assert trie.is_prefix('foo.bar')
+ assert trie.has_value('foo.bar')
+ assert trie['foo.bar'] == 'blah'
- def test_add_none_single(self):
- self.trie['foo'] = None
- self.assertTrue(self.trie.is_prefix('foo'))
- self.assertTrue(self.trie.has_value('foo'))
- self.assertEqual(self.trie['foo'], None)
+ assert trie.is_prefix('foo.bar.baz')
+ assert trie.has_value('foo.bar.baz')
+ assert trie['foo.bar.baz'] == 'quux'
- self.assertFalse(self.trie.is_prefix('foo.bar'))
- self.assertFalse(self.trie.has_value('foo.bar'))
+ assert not trie.is_prefix('foo.bar.baz.quux')
+ assert not trie.has_value('foo.bar.baz.quux')
- def test_add_none_multiple(self):
- self.trie['foo.bar'] = None
- self.assertTrue(self.trie.is_prefix('foo'))
- self.assertFalse(self.trie.has_value('foo'))
+def test_add_none_single(trie):
+ trie['foo'] = None
+ assert trie.is_prefix('foo')
+ assert trie.has_value('foo')
+ assert trie['foo'] is None
- self.assertTrue(self.trie.is_prefix('foo.bar'))
- self.assertTrue(self.trie.has_value('foo.bar'))
- self.assertEqual(self.trie['foo.bar'], None)
+ assert not trie.is_prefix('foo.bar')
+ assert not trie.has_value('foo.bar')
- self.assertFalse(self.trie.is_prefix('foo.bar.baz'))
- self.assertFalse(self.trie.has_value('foo.bar.baz'))
+
+def test_add_none_multiple(trie):
+ trie['foo.bar'] = None
+
+ assert trie.is_prefix('foo')
+ assert not trie.has_value('foo')
+
+ assert trie.is_prefix('foo.bar')
+ assert trie.has_value('foo.bar')
+ assert trie['foo.bar'] is None
+
+ assert not trie.is_prefix('foo.bar.baz')
+ assert not trie.has_value('foo.bar.baz')
diff --git a/lib/spack/spack/test/optional_deps.py b/lib/spack/spack/test/optional_deps.py
index d2b8c3e3ac..23702a3410 100644
--- a/lib/spack/spack/test/optional_deps.py
+++ b/lib/spack/spack/test/optional_deps.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,65 +29,82 @@ from spack.spec import Spec
@pytest.fixture(
params=[
# Normalize simple conditionals
- ('optional-dep-test', Spec('optional-dep-test')),
- ('optional-dep-test~a', Spec('optional-dep-test~a')),
- ('optional-dep-test+a', Spec('optional-dep-test+a', Spec('a'))),
- ('optional-dep-test a=true', Spec(
- 'optional-dep-test a=true', Spec('a')
- )),
- ('optional-dep-test a=true', Spec('optional-dep-test+a', Spec('a'))),
- ('optional-dep-test@1.1', Spec('optional-dep-test@1.1', Spec('b'))),
- ('optional-dep-test%intel', Spec(
- 'optional-dep-test%intel', Spec('c')
- )),
- ('optional-dep-test%intel@64.1', Spec(
- 'optional-dep-test%intel@64.1', Spec('c'), Spec('d')
- )),
- ('optional-dep-test%intel@64.1.2', Spec(
- 'optional-dep-test%intel@64.1.2', Spec('c'), Spec('d')
- )),
- ('optional-dep-test%clang@35', Spec(
- 'optional-dep-test%clang@35', Spec('e')
- )),
+ ('optional-dep-test', {'optional-dep-test': None}),
+ ('optional-dep-test~a', {'optional-dep-test~a': None}),
+ ('optional-dep-test+a', {'optional-dep-test+a': {'a': None}}),
+ ('optional-dep-test a=true', {
+ 'optional-dep-test a=true': {
+ 'a': None
+ }}),
+ ('optional-dep-test a=true', {
+ 'optional-dep-test+a': {
+ 'a': None
+ }}),
+ ('optional-dep-test@1.1', {'optional-dep-test@1.1': {'b': None}}),
+ ('optional-dep-test%intel', {'optional-dep-test%intel': {'c': None}}),
+ ('optional-dep-test%intel@64.1', {
+ 'optional-dep-test%intel@64.1': {
+ 'c': None,
+ 'd': None
+ }}),
+ ('optional-dep-test%intel@64.1.2', {
+ 'optional-dep-test%intel@64.1.2': {
+ 'c': None,
+ 'd': None
+ }}),
+ ('optional-dep-test%clang@35', {
+ 'optional-dep-test%clang@35': {
+ 'e': None
+ }}),
# Normalize multiple conditionals
- ('optional-dep-test+a@1.1', Spec(
- 'optional-dep-test+a@1.1', Spec('a'), Spec('b')
- )),
- ('optional-dep-test+a%intel', Spec(
- 'optional-dep-test+a%intel', Spec('a'), Spec('c')
- )),
- ('optional-dep-test@1.1%intel', Spec(
- 'optional-dep-test@1.1%intel', Spec('b'), Spec('c')
- )),
- ('optional-dep-test@1.1%intel@64.1.2+a', Spec(
- 'optional-dep-test@1.1%intel@64.1.2+a',
- Spec('b'),
- Spec('a'),
- Spec('c'),
- Spec('d')
- )),
- ('optional-dep-test@1.1%clang@36.5+a', Spec(
- 'optional-dep-test@1.1%clang@36.5+a',
- Spec('b'),
- Spec('a'),
- Spec('e')
- )),
+ ('optional-dep-test+a@1.1', {
+ 'optional-dep-test+a@1.1': {
+ 'a': None,
+ 'b': None
+ }}),
+ ('optional-dep-test+a%intel', {
+ 'optional-dep-test+a%intel': {
+ 'a': None,
+ 'c': None
+ }}),
+ ('optional-dep-test@1.1%intel', {
+ 'optional-dep-test@1.1%intel': {
+ 'b': None,
+ 'c': None
+ }}),
+ ('optional-dep-test@1.1%intel@64.1.2+a', {
+ 'optional-dep-test@1.1%intel@64.1.2+a': {
+ 'a': None,
+ 'b': None,
+ 'c': None,
+ 'd': None
+ }}),
+ ('optional-dep-test@1.1%clang@36.5+a', {
+ 'optional-dep-test@1.1%clang@36.5+a': {
+ 'b': None,
+ 'a': None,
+ 'e': None
+ }}),
# Chained MPI
- ('optional-dep-test-2+mpi', Spec(
- 'optional-dep-test-2+mpi',
- Spec('optional-dep-test+mpi', Spec('mpi'))
- )),
+ ('optional-dep-test-2+mpi', {
+ 'optional-dep-test-2+mpi': {
+ 'optional-dep-test+mpi': {'mpi': None}
+ }}),
# Each of these dependencies comes from a conditional
# dependency on another. This requires iterating to evaluate
# the whole chain.
- ('optional-dep-test+f', Spec(
- 'optional-dep-test+f', Spec('f'), Spec('g'), Spec('mpi')
- ))
+ ('optional-dep-test+f', {
+ 'optional-dep-test+f': {
+ 'f': None,
+ 'g': None,
+ 'mpi': None
+ }})
]
)
def spec_and_expected(request):
- """Parameters for te normalization test."""
- return request.param
+ """Parameters for the normalization test."""
+ spec, d = request.param
+ return spec, Spec.from_literal(d)
def test_normalize(spec_and_expected, config, builtin_mock):
diff --git a/lib/spack/spack/test/package_sanity.py b/lib/spack/spack/test/package_sanity.py
index c75d7cdcc7..adc6867b72 100644
--- a/lib/spack/spack/test/package_sanity.py
+++ b/lib/spack/spack/test/package_sanity.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,49 +22,38 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""\
-This test does sanity checks on Spack's builtin package database.
-"""
-import unittest
+"""This test does sanity checks on Spack's builtin package database."""
+
import re
import spack
from spack.repository import RepoPath
-class PackageSanityTest(unittest.TestCase):
+def check_db():
+ """Get all packages in a DB to make sure they work."""
+ for name in spack.repo.all_package_names():
+ spack.repo.get(name)
+
- def check_db(self):
- """Get all packages in a DB to make sure they work."""
- for name in spack.repo.all_package_names():
- spack.repo.get(name)
+def test_get_all_packages():
+ """Get all packages once and make sure that works."""
+ check_db()
- def test_get_all_packages(self):
- """Get all packages once and make sure that works."""
- self.check_db()
- def test_get_all_mock_packages(self):
- """Get the mock packages once each too."""
- db = RepoPath(spack.mock_packages_path)
- spack.repo.swap(db)
- self.check_db()
- spack.repo.swap(db)
+def test_get_all_mock_packages():
+ """Get the mock packages once each too."""
+ db = RepoPath(spack.mock_packages_path)
+ spack.repo.swap(db)
+ check_db()
+ spack.repo.swap(db)
- def test_url_versions(self):
- """Check URLs for regular packages, if they are explicitly defined."""
- for pkg in spack.repo.all_packages():
- for v, vattrs in pkg.versions.items():
- if 'url' in vattrs:
- # If there is a url for the version check it.
- v_url = pkg.url_for_version(v)
- self.assertEqual(vattrs['url'], v_url)
- def test_all_versions_are_lowercase(self):
- """Spack package names must be lowercase, and use `-` instead of `_`.
- """
- errors = []
- for name in spack.repo.all_package_names():
- if re.search(r'[_A-Z]', name):
- errors.append(name)
+def test_all_versions_are_lowercase():
+ """Spack package names must be lowercase, and use `-` instead of `_`."""
+ errors = []
+ for name in spack.repo.all_package_names():
+ if re.search(r'[_A-Z]', name):
+ errors.append(name)
- self.assertEqual([], errors)
+ assert len(errors) == 0
diff --git a/lib/spack/spack/test/packages.py b/lib/spack/spack/test/packages.py
index 6ae8a33a24..9533627b24 100644
--- a/lib/spack/spack/test/packages.py
+++ b/lib/spack/spack/test/packages.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,108 +23,108 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
import spack
+import pytest
+
from llnl.util.filesystem import join_path
from spack.repository import Repo
from spack.util.naming import mod_to_class
-from spack.spec import *
-
-
-def test_load_package(builtin_mock):
- spack.repo.get('mpich')
-
-
-def test_package_name(builtin_mock):
- pkg = spack.repo.get('mpich')
- assert pkg.name == 'mpich'
-
-
-def test_package_filename(builtin_mock):
- repo = Repo(spack.mock_packages_path)
- filename = repo.filename_for_package_name('mpich')
- assert filename == join_path(
- spack.mock_packages_path,
- 'packages',
- 'mpich',
- 'package.py'
- )
-
-
-def test_nonexisting_package_filename():
- repo = Repo(spack.mock_packages_path)
- filename = repo.filename_for_package_name('some-nonexisting-package')
- assert filename == join_path(
- spack.mock_packages_path,
- 'packages',
- 'some-nonexisting-package',
- 'package.py'
- )
-
-
-def test_package_class_names():
- assert 'Mpich' == mod_to_class('mpich')
- assert 'PmgrCollective' == mod_to_class('pmgr_collective')
- assert 'PmgrCollective' == mod_to_class('pmgr-collective')
- assert 'Pmgrcollective' == mod_to_class('PmgrCollective')
- assert '_3db' == mod_to_class('3db')
-
-
-# Below tests target direct imports of spack packages from the
-# spack.pkg namespace
-def test_import_package(builtin_mock):
- import spack.pkg.builtin.mock.mpich # noqa
-
-
-def test_import_package_as(builtin_mock):
- import spack.pkg.builtin.mock.mpich as mp # noqa
-
- import spack.pkg.builtin.mock # noqa
- import spack.pkg.builtin.mock as m # noqa
- from spack.pkg.builtin import mock # noqa
-
-
-def test_inheritance_of_diretives():
- p = spack.repo.get('simple-inheritance')
-
- # Check dictionaries that should have been filled by directives
- assert len(p.dependencies) == 3
- assert 'cmake' in p.dependencies
- assert 'openblas' in p.dependencies
- assert 'mpi' in p.dependencies
- assert len(p.provided) == 2
-
- # Check that Spec instantiation behaves as we expect
- s = Spec('simple-inheritance')
- s.concretize()
- assert '^cmake' in s
- assert '^openblas' in s
- assert '+openblas' in s
- assert 'mpi' in s
-
- s = Spec('simple-inheritance~openblas')
- s.concretize()
- assert '^cmake' in s
- assert '^openblas' not in s
- assert '~openblas' in s
- assert 'mpi' in s
-
-
-def test_import_class_from_package(builtin_mock):
- from spack.pkg.builtin.mock.mpich import Mpich # noqa
-
-
-def test_import_module_from_package(builtin_mock):
- from spack.pkg.builtin.mock import mpich # noqa
-
-
-def test_import_namespace_container_modules(builtin_mock):
- import spack.pkg # noqa
- import spack.pkg as p # noqa
- from spack import pkg # noqa
-
- import spack.pkg.builtin # noqa
- import spack.pkg.builtin as b # noqa
- from spack.pkg import builtin # noqa
-
- import spack.pkg.builtin.mock # noqa
- import spack.pkg.builtin.mock as m # noqa
- from spack.pkg.builtin import mock # noqa
+from spack.spec import Spec
+
+
+@pytest.mark.usefixtures('config', 'builtin_mock')
+class TestPackage(object):
+ def test_load_package(self):
+ spack.repo.get('mpich')
+
+ def test_package_name(self):
+ pkg = spack.repo.get('mpich')
+ assert pkg.name == 'mpich'
+
+ def test_package_filename(self):
+ repo = Repo(spack.mock_packages_path)
+ filename = repo.filename_for_package_name('mpich')
+ assert filename == join_path(
+ spack.mock_packages_path,
+ 'packages',
+ 'mpich',
+ 'package.py'
+ )
+
+ def test_nonexisting_package_filename(self):
+ repo = Repo(spack.mock_packages_path)
+ filename = repo.filename_for_package_name('some-nonexisting-package')
+ assert filename == join_path(
+ spack.mock_packages_path,
+ 'packages',
+ 'some-nonexisting-package',
+ 'package.py'
+ )
+
+ def test_package_class_names(self):
+ assert 'Mpich' == mod_to_class('mpich')
+ assert 'PmgrCollective' == mod_to_class('pmgr_collective')
+ assert 'PmgrCollective' == mod_to_class('pmgr-collective')
+ assert 'Pmgrcollective' == mod_to_class('PmgrCollective')
+ assert '_3db' == mod_to_class('3db')
+
+ # Below tests target direct imports of spack packages from the
+ # spack.pkg namespace
+ def test_import_package(self):
+ import spack.pkg.builtin.mock.mpich # noqa
+
+ def test_import_package_as(self):
+ import spack.pkg.builtin.mock.mpich as mp # noqa
+
+ import spack.pkg.builtin.mock # noqa
+ import spack.pkg.builtin.mock as m # noqa
+ from spack.pkg.builtin import mock # noqa
+
+ def test_inheritance_of_diretives(self):
+ p = spack.repo.get('simple-inheritance')
+
+ # Check dictionaries that should have been filled by directives
+ assert len(p.dependencies) == 3
+ assert 'cmake' in p.dependencies
+ assert 'openblas' in p.dependencies
+ assert 'mpi' in p.dependencies
+ assert len(p.provided) == 2
+
+ # Check that Spec instantiation behaves as we expect
+ s = Spec('simple-inheritance')
+ s.concretize()
+ assert '^cmake' in s
+ assert '^openblas' in s
+ assert '+openblas' in s
+ assert 'mpi' in s
+
+ s = Spec('simple-inheritance~openblas')
+ s.concretize()
+ assert '^cmake' in s
+ assert '^openblas' not in s
+ assert '~openblas' in s
+ assert 'mpi' in s
+
+ def test_dependency_extensions(self):
+ s = Spec('extension2')
+ s.concretize()
+ deps = set(x.name for x in s.package.dependency_activations())
+ assert deps == set(['extension1'])
+
+ def test_import_class_from_package(self):
+ from spack.pkg.builtin.mock.mpich import Mpich # noqa
+
+ def test_import_module_from_package(self):
+ from spack.pkg.builtin.mock import mpich # noqa
+
+ def test_import_namespace_container_modules(self):
+ import spack.pkg # noqa
+ import spack.pkg as p # noqa
+ from spack import pkg # noqa
+
+ import spack.pkg.builtin # noqa
+ import spack.pkg.builtin as b # noqa
+ from spack.pkg import builtin # noqa
+
+ import spack.pkg.builtin.mock # noqa
+ import spack.pkg.builtin.mock as m # noqa
+ from spack.pkg.builtin import mock # noqa
diff --git a/lib/spack/spack/test/packaging.py b/lib/spack/spack/test/packaging.py
new file mode 100644
index 0000000000..49e5138c89
--- /dev/null
+++ b/lib/spack/spack/test/packaging.py
@@ -0,0 +1,378 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""
+This test checks the binary packaging infrastructure
+"""
+import os
+import stat
+import sys
+import shutil
+import pytest
+import argparse
+
+from llnl.util.filesystem import mkdirp
+
+import spack
+import spack.store
+import spack.binary_distribution as bindist
+import spack.cmd.buildcache as buildcache
+from spack.spec import Spec
+from spack.fetch_strategy import URLFetchStrategy, FetchStrategyComposite
+from spack.util.executable import ProcessError
+from spack.relocate import needs_binary_relocation, needs_text_relocation
+from spack.relocate import get_patchelf, relocate_text
+from spack.relocate import substitute_rpath, get_relative_rpaths
+from spack.relocate import macho_replace_paths, macho_make_paths_relative
+from spack.relocate import modify_macho_object, macho_get_paths
+
+
+@pytest.fixture(scope='function')
+def testing_gpg_directory(tmpdir):
+ old_gpg_path = spack.util.gpg.GNUPGHOME
+ spack.util.gpg.GNUPGHOME = str(tmpdir.join('gpg'))
+ yield
+ spack.util.gpg.GNUPGHOME = old_gpg_path
+
+
+def has_gnupg2():
+ try:
+ spack.util.gpg.Gpg.gpg()('--version', output=os.devnull)
+ return True
+ except ProcessError:
+ return False
+
+
+def fake_fetchify(url, pkg):
+ """Fake the URL for a package so it downloads from a file."""
+ fetcher = FetchStrategyComposite()
+ fetcher.append(URLFetchStrategy(url))
+ pkg.fetcher = fetcher
+
+
+@pytest.mark.usefixtures('install_mockery', 'testing_gpg_directory')
+def test_packaging(mock_archive, tmpdir):
+ # tweak patchelf to only do a download
+ spec = Spec("patchelf")
+ spec.concretize()
+ pkg = spack.repo.get(spec)
+ fake_fetchify(pkg.fetcher, pkg)
+ mkdirp(os.path.join(pkg.prefix, "bin"))
+ patchelfscr = os.path.join(pkg.prefix, "bin", "patchelf")
+ f = open(patchelfscr, 'w')
+ body = """#!/bin/bash
+echo $PATH"""
+ f.write(body)
+ f.close()
+ st = os.stat(patchelfscr)
+ os.chmod(patchelfscr, st.st_mode | stat.S_IEXEC)
+
+ # Install the test package
+ spec = Spec('trivial-install-test-package')
+ spec.concretize()
+ assert spec.concrete
+ pkg = spack.repo.get(spec)
+ fake_fetchify(mock_archive.url, pkg)
+ pkg.do_install()
+ pkghash = '/' + spec.dag_hash(7)
+
+ # Put some non-relocatable file in there
+ filename = os.path.join(spec.prefix, "dummy.txt")
+ with open(filename, "w") as script:
+ script.write(spec.prefix)
+
+ # Create the build cache and
+ # put it directly into the mirror
+
+ mirror_path = os.path.join(str(tmpdir), 'test-mirror')
+ specs = [spec]
+ spack.mirror.create(
+ mirror_path, specs, no_checksum=True
+ )
+
+ # register mirror with spack config
+ mirrors = {'spack-mirror-test': 'file://' + mirror_path}
+ spack.config.update_config('mirrors', mirrors)
+
+ stage = spack.stage.Stage(
+ mirrors['spack-mirror-test'], name="build_cache", keep=True)
+ stage.create()
+ # setup argument parser
+ parser = argparse.ArgumentParser()
+ buildcache.setup_parser(parser)
+
+ # Create a private key to sign package with if gpg2 available
+ if has_gnupg2():
+ spack.util.gpg.Gpg.create(name='test key 1', expires='0',
+ email='spack@googlegroups.com',
+ comment='Spack test key')
+ # Create build cache with signing
+ args = parser.parse_args(['create', '-d', mirror_path, str(spec)])
+ buildcache.buildcache(parser, args)
+
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
+
+ # test overwrite install
+ args = parser.parse_args(['install', '-f', str(pkghash)])
+ buildcache.buildcache(parser, args)
+
+ # create build cache with relative path and signing
+ args = parser.parse_args(
+ ['create', '-d', mirror_path, '-f', '-r', str(spec)])
+ buildcache.buildcache(parser, args)
+
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
+
+ # install build cache with verification
+ args = parser.parse_args(['install', str(spec)])
+ buildcache.install_tarball(spec, args)
+
+ # test overwrite install
+ args = parser.parse_args(['install', '-f', str(pkghash)])
+ buildcache.buildcache(parser, args)
+
+ else:
+ # create build cache without signing
+ args = parser.parse_args(
+ ['create', '-d', mirror_path, '-y', str(spec)])
+ buildcache.buildcache(parser, args)
+
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
+
+ # install build cache without verification
+ args = parser.parse_args(['install', '-y', str(spec)])
+ buildcache.install_tarball(spec, args)
+
+ # test overwrite install without verification
+ args = parser.parse_args(['install', '-f', '-y', str(pkghash)])
+ buildcache.buildcache(parser, args)
+
+ # create build cache with relative path
+ args = parser.parse_args(
+ ['create', '-d', mirror_path, '-f', '-r', '-y', str(pkghash)])
+ buildcache.buildcache(parser, args)
+
+ # Uninstall the package
+ pkg.do_uninstall(force=True)
+
+ # install build cache
+ args = parser.parse_args(['install', '-y', str(spec)])
+ buildcache.install_tarball(spec, args)
+
+ # test overwrite install
+ args = parser.parse_args(['install', '-f', '-y', str(pkghash)])
+ buildcache.buildcache(parser, args)
+
+ # Validate the relocation information
+ buildinfo = bindist.read_buildinfo_file(spec.prefix)
+ assert(buildinfo['relocate_textfiles'] == ['dummy.txt'])
+
+ args = parser.parse_args(['list'])
+ buildcache.buildcache(parser, args)
+
+ args = parser.parse_args(['list', '-f'])
+ buildcache.buildcache(parser, args)
+
+ args = parser.parse_args(['list', 'trivial'])
+ buildcache.buildcache(parser, args)
+
+ # Copy a key to the mirror to have something to download
+ shutil.copyfile(spack.mock_gpg_keys_path + '/external.key',
+ mirror_path + '/external.key')
+
+ args = parser.parse_args(['keys'])
+ buildcache.buildcache(parser, args)
+
+ args = parser.parse_args(['keys', '-f'])
+ buildcache.buildcache(parser, args)
+
+ # unregister mirror with spack config
+ mirrors = {}
+ spack.config.update_config('mirrors', mirrors)
+ shutil.rmtree(mirror_path)
+ stage.destroy()
+
+
+def test_relocate_text():
+ # Validate the text path replacement
+ old_dir = '/home/spack/opt/spack'
+ filename = 'dummy.txt'
+ with open(filename, "w") as script:
+ script.write(old_dir)
+ script.close()
+
+ filenames = [filename]
+ new_dir = '/opt/rh/devtoolset/'
+ relocate_text(filenames, old_dir, new_dir)
+
+ with open(filename, "r")as script:
+ for line in script:
+ assert(new_dir in line)
+
+
+def test_needs_relocation():
+ binary_type = (
+ 'ELF 64-bit LSB executable, x86-64, version 1 (SYSV),'
+ ' dynamically linked (uses shared libs),'
+ ' for GNU/Linux x.y.z, stripped')
+
+ assert needs_binary_relocation(binary_type, os_id='Linux')
+ assert not needs_binary_relocation('relocatable',
+ os_id='Linux')
+ assert not needs_binary_relocation('symbolic link to `foo\'',
+ os_id='Linux')
+
+ assert needs_text_relocation('ASCII text')
+ assert not needs_text_relocation('symbolic link to `foo.text\'')
+
+ macho_type = 'Mach-O 64-bit executable x86_64'
+ assert needs_binary_relocation(macho_type, os_id='Darwin')
+
+
+def test_macho_paths():
+
+ out = macho_make_paths_relative('/Users/Shares/spack/pkgC/lib/libC.dylib',
+ '/Users/Shared/spack',
+ ('/Users/Shared/spack/pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib'),
+ ('/Users/Shared/spack/pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'),
+ '/Users/Shared/spack/pkgC/lib/libC.dylib')
+ assert out == (['@loader_path/../../../../Shared/spack/pkgA/lib',
+ '@loader_path/../../../../Shared/spack/pkgB/lib',
+ '/usr/local/lib'],
+ ['@loader_path/../../../../Shared/spack/pkgA/libA.dylib',
+ '@loader_path/../../../../Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'],
+ '@rpath/libC.dylib')
+
+ out = macho_make_paths_relative('/Users/Shared/spack/pkgC/bin/exeC',
+ '/Users/Shared/spack',
+ ('/Users/Shared/spack/pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib'),
+ ('/Users/Shared/spack/pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'), None)
+
+ assert out == (['@loader_path/../../pkgA/lib',
+ '@loader_path/../../pkgB/lib',
+ '/usr/local/lib'],
+ ['@loader_path/../../pkgA/libA.dylib',
+ '@loader_path/../../pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'], None)
+
+ out = macho_replace_paths('/Users/Shared/spack',
+ '/Applications/spack',
+ ('/Users/Shared/spack/pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib'),
+ ('/Users/Shared/spack/pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'),
+ '/Users/Shared/spack/pkgC/lib/libC.dylib')
+ assert out == (['/Applications/spack/pkgA/lib',
+ '/Applications/spack/pkgB/lib',
+ '/usr/local/lib'],
+ ['/Applications/spack/pkgA/libA.dylib',
+ '/Applications/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'],
+ '/Applications/spack/pkgC/lib/libC.dylib')
+
+ out = macho_replace_paths('/Users/Shared/spack',
+ '/Applications/spack',
+ ('/Users/Shared/spack/pkgA/lib',
+ '/Users/Shared/spack/pkgB/lib',
+ '/usr/local/lib'),
+ ('/Users/Shared/spack/pkgA/libA.dylib',
+ '/Users/Shared/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'),
+ None)
+ assert out == (['/Applications/spack/pkgA/lib',
+ '/Applications/spack/pkgB/lib',
+ '/usr/local/lib'],
+ ['/Applications/spack/pkgA/libA.dylib',
+ '/Applications/spack/pkgB/libB.dylib',
+ '/usr/local/lib/libloco.dylib'],
+ None)
+
+
+def test_elf_paths():
+ out = get_relative_rpaths(
+ '/usr/bin/test', '/usr',
+ ('/usr/lib', '/usr/lib64', '/opt/local/lib'))
+ assert out == ['$ORIGIN/../lib', '$ORIGIN/../lib64', '/opt/local/lib']
+
+ out = substitute_rpath(
+ ('/usr/lib', '/usr/lib64', '/opt/local/lib'), '/usr', '/opt')
+ assert out == ['/opt/lib', '/opt/lib64', '/opt/local/lib']
+
+
+@pytest.mark.skipif(sys.platform != 'darwin',
+ reason="only works with Mach-o objects")
+def test_relocate_macho(tmpdir):
+ with tmpdir.as_cwd():
+
+ get_patchelf() # this does nothing on Darwin
+
+ rpaths, deps, idpath = macho_get_paths('/bin/bash')
+ nrpaths, ndeps, nid = macho_make_paths_relative('/bin/bash', '/usr',
+ rpaths, deps, idpath)
+ shutil.copyfile('/bin/bash', 'bash')
+ modify_macho_object('bash',
+ rpaths, deps, idpath,
+ nrpaths, ndeps, nid)
+
+ rpaths, deps, idpath = macho_get_paths('/bin/bash')
+ nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt',
+ rpaths, deps, idpath)
+ shutil.copyfile('/bin/bash', 'bash')
+ modify_macho_object('bash',
+ rpaths, deps, idpath,
+ nrpaths, ndeps, nid)
+
+ path = '/usr/lib/libncurses.5.4.dylib'
+ rpaths, deps, idpath = macho_get_paths(path)
+ nrpaths, ndeps, nid = macho_make_paths_relative(path, '/usr',
+ rpaths, deps, idpath)
+ shutil.copyfile(
+ '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib')
+ modify_macho_object('libncurses.5.4.dylib',
+ rpaths, deps, idpath,
+ nrpaths, ndeps, nid)
+
+ rpaths, deps, idpath = macho_get_paths(path)
+ nrpaths, ndeps, nid = macho_replace_paths('/usr', '/opt',
+ rpaths, deps, idpath)
+ shutil.copyfile(
+ '/usr/lib/libncurses.5.4.dylib', 'libncurses.5.4.dylib')
+ modify_macho_object(
+ 'libncurses.5.4.dylib',
+ rpaths, deps, idpath,
+ nrpaths, ndeps, nid)
diff --git a/lib/spack/spack/test/patch.py b/lib/spack/spack/test/patch.py
new file mode 100644
index 0000000000..6afb50bba0
--- /dev/null
+++ b/lib/spack/spack/test/patch.py
@@ -0,0 +1,194 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+import sys
+import filecmp
+import pytest
+
+from llnl.util.filesystem import working_dir, mkdirp
+
+import spack
+import spack.util.compression
+from spack.stage import Stage
+from spack.spec import Spec
+
+
+@pytest.fixture()
+def mock_stage(tmpdir, monkeypatch):
+ # don't disrupt the spack install directory with tests.
+ mock_path = str(tmpdir)
+ monkeypatch.setattr(spack, 'stage_path', mock_path)
+ return mock_path
+
+
+data_path = os.path.join(spack.test_path, 'data', 'patch')
+
+
+@pytest.mark.parametrize('filename, sha256, archive_sha256', [
+ # compressed patch -- needs sha256 and archive_256
+ (os.path.join(data_path, 'foo.tgz'),
+ '252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
+ '4e8092a161ec6c3a1b5253176fcf33ce7ba23ee2ff27c75dbced589dabacd06e'),
+ # uncompressed patch -- needs only sha256
+ (os.path.join(data_path, 'foo.patch'),
+ '252c0af58be3d90e5dc5e0d16658434c9efa5d20a5df6c10bf72c2d77f780866',
+ None)
+])
+def test_url_patch(mock_stage, filename, sha256, archive_sha256):
+ # Make a patch object
+ url = 'file://' + filename
+ m = sys.modules['spack.patch']
+ patch = m.Patch.create(
+ None, url, sha256=sha256, archive_sha256=archive_sha256)
+
+ # make a stage
+ with Stage(url) as stage: # TODO: url isn't used; maybe refactor Stage
+ # TODO: there is probably a better way to mock this.
+ stage.mirror_path = mock_stage # don't disrupt the spack install
+
+ # fake a source path
+ with working_dir(stage.path):
+ mkdirp('spack-expanded-archive')
+
+ with working_dir(stage.source_path):
+ # write a file to be patched
+ with open('foo.txt', 'w') as f:
+ f.write("""\
+first line
+second line
+""")
+ # write the expected result of patching.
+ with open('foo-expected.txt', 'w') as f:
+ f.write("""\
+zeroth line
+first line
+third line
+""")
+ # apply the patch and compare files
+ patch.apply(stage)
+
+ with working_dir(stage.source_path):
+ assert filecmp.cmp('foo.txt', 'foo-expected.txt')
+
+
+def test_patch_in_spec(builtin_mock, config):
+ """Test whether patches in a package appear in the spec."""
+ spec = Spec('patch')
+ spec.concretize()
+ assert 'patches' in list(spec.variants.keys())
+
+ # Here the order is bar, foo, baz. Note that MV variants order
+ # lexicographically based on the hash, not on the position of the
+ # patch directive.
+ assert (('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730',
+ 'b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c',
+ 'bf07a7fbb825fc0aae7bf4a1177b2b31fcf8a3feeaf7092761e18c859ee52a9c') ==
+ spec.variants['patches'].value)
+
+
+def test_patched_dependency(builtin_mock, config):
+ """Test whether patched dependencies work."""
+ spec = Spec('patch-a-dependency')
+ spec.concretize()
+ assert 'patches' in list(spec['libelf'].variants.keys())
+
+ # foo
+ assert (('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c',) ==
+ spec['libelf'].variants['patches'].value)
+
+
+def test_multiple_patched_dependencies(builtin_mock, config):
+ """Test whether multiple patched dependencies work."""
+ spec = Spec('patch-several-dependencies')
+ spec.concretize()
+
+ # basic patch on libelf
+ assert 'patches' in list(spec['libelf'].variants.keys())
+ # foo
+ assert (('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c',) ==
+ spec['libelf'].variants['patches'].value)
+
+ # URL patches
+ assert 'patches' in list(spec['fake'].variants.keys())
+ # urlpatch.patch, urlpatch.patch.gz
+ assert (('1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd',
+ 'abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234') ==
+ spec['fake'].variants['patches'].value)
+
+
+def test_conditional_patched_dependencies(builtin_mock, config):
+ """Test whether conditional patched dependencies work."""
+ spec = Spec('patch-several-dependencies @1.0')
+ spec.concretize()
+
+ # basic patch on libelf
+ assert 'patches' in list(spec['libelf'].variants.keys())
+ # foo
+ assert (('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c',) ==
+ spec['libelf'].variants['patches'].value)
+
+ # conditional patch on libdwarf
+ assert 'patches' in list(spec['libdwarf'].variants.keys())
+ # bar
+ assert (('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730',) ==
+ spec['libdwarf'].variants['patches'].value)
+ # baz is conditional on libdwarf version
+ assert ('bf07a7fbb825fc0aae7bf4a1177b2b31fcf8a3feeaf7092761e18c859ee52a9c'
+ not in spec['libdwarf'].variants['patches'].value)
+
+ # URL patches
+ assert 'patches' in list(spec['fake'].variants.keys())
+ # urlpatch.patch, urlpatch.patch.gz
+ assert (('1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd',
+ 'abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234') ==
+ spec['fake'].variants['patches'].value)
+
+
+def test_conditional_patched_deps_with_conditions(builtin_mock, config):
+ """Test whether conditional patched dependencies with conditions work."""
+ spec = Spec('patch-several-dependencies @1.0 ^libdwarf@20111030')
+ spec.concretize()
+
+ # basic patch on libelf
+ assert 'patches' in list(spec['libelf'].variants.keys())
+ # foo
+ assert ('b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c'
+ in spec['libelf'].variants['patches'].value)
+
+ # conditional patch on libdwarf
+ assert 'patches' in list(spec['libdwarf'].variants.keys())
+ # bar
+ assert ('7d865e959b2466918c9863afca942d0fb89d7c9ac0c99bafc3749504ded97730'
+ in spec['libdwarf'].variants['patches'].value)
+ # baz is conditional on libdwarf version (no guarantee on order w/conds)
+ assert ('bf07a7fbb825fc0aae7bf4a1177b2b31fcf8a3feeaf7092761e18c859ee52a9c'
+ in spec['libdwarf'].variants['patches'].value)
+
+ # URL patches
+ assert 'patches' in list(spec['fake'].variants.keys())
+ # urlpatch.patch, urlpatch.patch.gz
+ assert (('1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd',
+ 'abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234') ==
+ spec['fake'].variants['patches'].value)
diff --git a/lib/spack/spack/test/pattern.py b/lib/spack/spack/test/pattern.py
index 0c772a0d2d..72cabbbfd7 100644
--- a/lib/spack/spack/test/pattern.py
+++ b/lib/spack/spack/test/pattern.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,84 +23,88 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import unittest
-
+import pytest
import spack.util.pattern as pattern
-class CompositeTest(unittest.TestCase):
+@pytest.fixture()
+def interface():
+ """Returns the interface class for the composite."""
+ class Base:
+ counter = 0
- def setUp(self):
- class Base:
- counter = 0
+ def add(self):
+ raise NotImplemented('add not implemented')
- def add(self):
- raise NotImplemented('add not implemented')
+ def subtract(self):
+ raise NotImplemented('subtract not implemented')
- def subtract(self):
- raise NotImplemented('subtract not implemented')
+ return Base
+
+
+@pytest.fixture()
+def implementation(interface):
+ """Returns an implementation of the interface"""
+ class Implementation(interface):
- class One(Base):
+ def __init__(self, value):
+ self.value = value
def add(self):
- Base.counter += 1
+ interface.counter += self.value
def subtract(self):
- Base.counter -= 1
+ interface.counter -= self.value
+
+ return Implementation
+
+
+@pytest.fixture(params=[
+ 'interface',
+ 'method_list'
+])
+def composite(interface, implementation, request):
+ """Returns a composite that contains an instance of `implementation(1)`
+ and one of `implementation(2)`.
+ """
+ if request.param == 'interface':
+ @pattern.composite(interface=interface)
+ class Composite:
+ pass
- class Two(Base):
+ else:
+ @pattern.composite(method_list=['add', 'subtract'])
+ class Composite:
+ pass
- def add(self):
- Base.counter += 2
+ c = Composite()
+ c.append(implementation(1))
+ c.append(implementation(2))
- def subtract(self):
- Base.counter -= 2
+ return c
- self.Base = Base
- self.One = One
- self.Two = Two
- def test_composite_from_method_list(self):
+def test_composite_interface_calls(interface, composite):
- @pattern.composite(method_list=['add', 'subtract'])
- class CompositeFromMethodList:
- pass
+ composite.add()
+ assert interface.counter == 3
+
+ composite.pop()
+ composite.subtract()
+ assert interface.counter == 2
- composite = CompositeFromMethodList()
- composite.append(self.One())
- composite.append(self.Two())
- composite.add()
- self.assertEqual(self.Base.counter, 3)
- composite.pop()
- composite.subtract()
- self.assertEqual(self.Base.counter, 2)
- def test_composite_from_interface(self):
+def test_composite_wrong_container(interface):
- @pattern.composite(interface=self.Base)
+ with pytest.raises(TypeError):
+ @pattern.composite(interface=interface, container=2)
class CompositeFromInterface:
pass
- composite = CompositeFromInterface()
- composite.append(self.One())
- composite.append(self.Two())
- composite.add()
- self.assertEqual(self.Base.counter, 3)
- composite.pop()
- composite.subtract()
- self.assertEqual(self.Base.counter, 2)
-
- def test_error_conditions(self):
-
- def wrong_container():
- @pattern.composite(interface=self.Base, container=2)
- class CompositeFromInterface:
- pass
-
- def no_methods():
- @pattern.composite()
- class CompositeFromInterface:
- pass
-
- self.assertRaises(TypeError, wrong_container)
- self.assertRaises(TypeError, no_methods)
+
+def test_composite_no_methods():
+
+ with pytest.raises(TypeError):
+ @pattern.composite()
+ class CompositeFromInterface:
+ pass
diff --git a/lib/spack/spack/test/provider_index.py b/lib/spack/spack/test/provider_index.py
index a176d0c315..985a1ae3f3 100644
--- a/lib/spack/spack/test/provider_index.py
+++ b/lib/spack/spack/test/provider_index.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,8 @@ Tests assume that mock packages provide this::
mpi@:10.0: set([zmpi])},
'stuff': {stuff: set([externalvirtual])}}
"""
-import StringIO
+from six import StringIO
+
import spack
from spack.provider_index import ProviderIndex
from spack.spec import Spec
@@ -46,10 +47,10 @@ from spack.spec import Spec
def test_yaml_round_trip(builtin_mock):
p = ProviderIndex(spack.repo.all_package_names())
- ostream = StringIO.StringIO()
+ ostream = StringIO()
p.to_yaml(ostream)
- istream = StringIO.StringIO(ostream.getvalue())
+ istream = StringIO(ostream.getvalue())
q = ProviderIndex.from_yaml(istream)
assert p == q
diff --git a/lib/spack/spack/test/python_version.py b/lib/spack/spack/test/python_version.py
index 5af55bdc5f..b9bb18bfd2 100644
--- a/lib/spack/spack/test/python_version.py
+++ b/lib/spack/spack/test/python_version.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,80 +22,143 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""
-This test ensures that all Spack files are Python version 2.6 or less.
+"""Check that Spack complies with minimum supported python versions.
+
+We ensure that all Spack files work with Python2 >= 2.6 and Python3 >= 3.0.
-Spack was originally 2.7, but enough systems in 2014 are still using
-2.6 on their frontend nodes that we need 2.6 to get adopted.
+We'd like to drop 2.6 support at some point, but there are still many HPC
+systems that ship with RHEL6/CentOS 6, which have Python 2.6 as the
+default version. Once those go away, we can likely drop 2.6 and increase
+the minimum supported Python 3 version, as well.
"""
+from __future__ import print_function
+
import os
+import sys
import re
-import unittest
import llnl.util.tty as tty
-import pyqver2
import spack
-spack_max_version = (2, 6)
-
-
-class PythonVersionTest(unittest.TestCase):
-
- def pyfiles(self, *search_paths):
- # first file is the spack script.
- yield spack.spack_file
-
- # Iterate through the whole spack source tree.
- for path in search_paths:
- for root, dirnames, filenames in os.walk(path):
- for filename in filenames:
- if re.match(r'^[^.#].*\.py$', filename):
- yield os.path.join(root, filename)
-
- def package_py_files(self):
- for name in spack.repo.all_package_names():
- yield spack.repo.filename_for_package_name(name)
-
- def check_python_versions(self, *files):
- # dict version -> filename -> reasons
- all_issues = {}
-
- for fn in files:
- with open(fn) as pyfile:
- versions = pyqver2.get_versions(pyfile.read())
- for ver, reasons in versions.items():
- if ver > spack_max_version:
- if ver not in all_issues:
- all_issues[ver] = {}
- all_issues[ver][fn] = reasons
-
- if all_issues:
- tty.error("Spack must run on Python version %d.%d"
- % spack_max_version)
-
- for v in sorted(all_issues.keys(), reverse=True):
- msgs = []
- for fn in sorted(all_issues[v].keys()):
- short_fn = fn
- if fn.startswith(spack.prefix):
- short_fn = fn[len(spack.prefix):]
-
- reasons = [r for r in set(all_issues[v][fn]) if r]
- for r in reasons:
- msgs.append(("%s:%s" % ('spack' + short_fn, r[0]), r[1]))
-
- tty.error("These files require version %d.%d:" % v)
- maxlen = max(len(f) for f, prob in msgs)
- fmt = "%%-%ds%%s" % (maxlen + 3)
- print fmt % ('File', 'Reason')
- print fmt % ('-' * (maxlen), '-' * 20)
- for msg in msgs:
- print fmt % msg
-
- self.assertTrue(len(all_issues) == 0)
-
- def test_core_module_compatibility(self):
- self.check_python_versions(*self.pyfiles(spack.lib_path))
-
- def test_package_module_compatibility(self):
- self.check_python_versions(*self.pyfiles(spack.packages_path))
+#
+# This test uses pyqver, by Greg Hewgill, which is a dual-source module.
+# That means we need to do different checks depending on whether we're
+# running Python 2 or Python 3.
+#
+if sys.version_info[0] < 3:
+ import pyqver2 as pyqver
+ spack_min_supported = (2, 6)
+
+ # Exclude Python 3 versions of dual-source modules when using Python 2
+ exclude_paths = [
+ # Jinja 2 has some 'async def' functions that are not treated correctly
+ # by pyqver.py
+ os.path.join(spack.lib_path, 'external', 'jinja2', 'asyncfilters.py'),
+ os.path.join(spack.lib_path, 'external', 'jinja2', 'asyncsupport.py'),
+ os.path.join(spack.lib_path, 'external', 'yaml', 'lib3'),
+ os.path.join(spack.lib_path, 'external', 'pyqver3.py')]
+
+else:
+ import pyqver3 as pyqver
+ spack_min_supported = (3, 0)
+
+ # Exclude Python 2 versions of dual-source modules when using Python 3
+ exclude_paths = [
+ # Jinja 2 has some 'async def' functions that are not treated correctly
+ # by pyqver.py
+ os.path.join(spack.lib_path, 'external', 'jinja2', 'asyncfilters.py'),
+ os.path.join(spack.lib_path, 'external', 'jinja2', 'asyncsupport.py'),
+ os.path.join(spack.lib_path, 'external', 'yaml', 'lib'),
+ os.path.join(spack.lib_path, 'external', 'pyqver2.py')]
+
+
+def pyfiles(search_paths, exclude=()):
+ """Generator that yields all the python files in the search paths.
+
+ Args:
+ search_paths (list of str): list of paths to search for python files
+ exclude (list of str): file paths to exclude from search
+
+ Yields:
+ python files in the search path.
+ """
+ # first file is the spack script.
+ yield spack.spack_file
+
+ # Iterate through the whole spack source tree.
+ for path in search_paths:
+ for root, dirnames, filenames in os.walk(path):
+ for filename in filenames:
+ realpath = os.path.realpath(os.path.join(root, filename))
+ if any(realpath.startswith(p) for p in exclude):
+ continue
+
+ if re.match(r'^[^.#].*\.py$', filename):
+ yield os.path.join(root, filename)
+
+
+def check_python_versions(files):
+ """Check that a set of Python files works with supported Ptyhon versions"""
+ # This is a dict dict mapping:
+ # version -> filename -> reasons
+ #
+ # Reasons are tuples of (lineno, string), where the string is the
+ # cause for a version incompatibility.
+ all_issues = {}
+
+ # Parse files and run pyqver on each file.
+ for path in files:
+ with open(path) as pyfile:
+ full_text = pyfile.read()
+ versions = pyqver.get_versions(full_text, path)
+
+ for ver, reasons in versions.items():
+ if ver <= spack_min_supported:
+ continue
+
+ # Record issues. Mark exceptions with '# nopyqver' comment
+ for lineno, cause in reasons:
+ lines = full_text.split('\n')
+ if not re.search(r'#\s*nopyqver\s*$', lines[lineno - 1]):
+ all_issues.setdefault(ver, {})[path] = reasons
+
+ # Print a message if there are are issues
+ if all_issues:
+ tty.msg("Spack must remain compatible with Python version %d.%d"
+ % spack_min_supported)
+
+ # Print out a table showing which files/linenos require which
+ # python version, and a string describing why.
+ for v in sorted(all_issues.keys(), reverse=True):
+ messages = []
+ for path in sorted(all_issues[v].keys()):
+ short_path = path
+ if path.startswith(spack.prefix):
+ short_path = path[len(spack.prefix):]
+
+ reasons = [r for r in set(all_issues[v][path]) if r]
+ for lineno, cause in reasons:
+ file_line = "%s:%s" % (short_path.lstrip('/'), lineno)
+ messages.append((file_line, cause))
+
+ print()
+ tty.msg("These files require version %d.%d:" % v)
+ maxlen = max(len(f) for f, prob in messages)
+ fmt = "%%-%ds%%s" % (maxlen + 3)
+ print(fmt % ('File', 'Reason'))
+ print(fmt % ('-' * (maxlen), '-' * 20))
+ for msg in messages:
+ print(fmt % msg)
+
+ # Fail this test if there were issues.
+ assert not all_issues
+
+
+def test_core_module_compatibility():
+ """Test that all core spack modules work with supported Python versions."""
+ check_python_versions(pyfiles([spack.lib_path], exclude=exclude_paths))
+
+
+def test_package_module_compatibility():
+ """Test that all spack packages work with supported Python versions."""
+ check_python_versions(pyfiles([spack.packages_path]))
diff --git a/lib/spack/spack/test/repo.py b/lib/spack/spack/test/repo.py
new file mode 100644
index 0000000000..7bf1291ec0
--- /dev/null
+++ b/lib/spack/spack/test/repo.py
@@ -0,0 +1,76 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import spack
+
+import pytest
+
+
+# Unlike the repo_path fixture defined in conftest, this has a test-level
+# scope rather than a session level scope, since we want to edit the
+# given RepoPath
+@pytest.fixture()
+def repo_for_test():
+ return spack.repository.RepoPath(spack.mock_packages_path)
+
+
+@pytest.fixture()
+def extra_repo(tmpdir_factory):
+ repo_namespace = 'extra_test_repo'
+ repo_dir = tmpdir_factory.mktemp(repo_namespace)
+ repo_dir.ensure('packages', dir=True)
+
+ with open(str(repo_dir.join('repo.yaml')), 'w') as F:
+ F.write("""
+repo:
+ namespace: extra_test_repo
+""")
+ return spack.repository.Repo(str(repo_dir))
+
+
+def test_repo_getpkg(repo_for_test):
+ repo_for_test.get('a')
+ repo_for_test.get('builtin.mock.a')
+
+
+def test_repo_multi_getpkg(repo_for_test, extra_repo):
+ repo_for_test.put_first(extra_repo)
+ repo_for_test.get('a')
+ repo_for_test.get('builtin.mock.a')
+
+
+def test_repo_multi_getpkgclass(repo_for_test, extra_repo):
+ repo_for_test.put_first(extra_repo)
+ repo_for_test.get_pkg_class('a')
+ repo_for_test.get_pkg_class('builtin.mock.a')
+
+
+def test_repo_pkg_with_unknown_namespace(repo_for_test):
+ with pytest.raises(spack.repository.UnknownNamespaceError):
+ repo_for_test.get('unknown.a')
+
+
+def test_repo_unknown_pkg(repo_for_test):
+ with pytest.raises(spack.repository.UnknownPackageError):
+ repo_for_test.get('builtin.mock.nonexistentpackage')
diff --git a/lib/spack/spack/test/sbang.py b/lib/spack/spack/test/sbang.py
index 12abce7b35..6b583b187f 100644
--- a/lib/spack/spack/test/sbang.py
+++ b/lib/spack/spack/test/sbang.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,30 +27,37 @@ Test that Spack's shebang filtering works correctly.
"""
import os
import stat
-import unittest
+import pytest
import tempfile
import shutil
+import filecmp
+
+from llnl.util.filesystem import mkdirp
-from llnl.util.filesystem import *
-from spack.hooks.sbang import filter_shebangs_in_directory
import spack
+from spack.hooks.sbang import shebang_too_long, filter_shebangs_in_directory
+from spack.util.executable import which
-short_line = "#!/this/is/short/bin/bash\n"
-long_line = "#!/this/" + ('x' * 200) + "/is/long\n"
-lua_line = "#!/this/" + ('x' * 200) + "/is/lua\n"
-lua_line_patched = "--!/this/" + ('x' * 200) + "/is/lua\n"
-sbang_line = '#!/bin/bash %s/bin/sbang\n' % spack.spack_root
-last_line = "last!\n"
+short_line = "#!/this/is/short/bin/bash\n"
+long_line = "#!/this/" + ('x' * 200) + "/is/long\n"
+lua_line = "#!/this/" + ('x' * 200) + "/is/lua\n"
+lua_in_text = ("line\n") * 100 + "lua\n" + ("line\n" * 100)
+lua_line_patched = "--!/this/" + ('x' * 200) + "/is/lua\n"
+node_line = "#!/this/" + ('x' * 200) + "/is/node\n"
+node_in_text = ("line\n") * 100 + "lua\n" + ("line\n" * 100)
+node_line_patched = "//!/this/" + ('x' * 200) + "/is/node\n"
+sbang_line = '#!/bin/bash %s/bin/sbang\n' % spack.spack_root
+last_line = "last!\n"
-class SbangTest(unittest.TestCase):
- def setUp(self):
+class ScriptDirectory(object):
+ """Directory full of test scripts to run sbang instrumentation on."""
+ def __init__(self):
self.tempdir = tempfile.mkdtemp()
- # make sure we can ignore non-files
- directory = os.path.join(self.tempdir, 'dir')
- mkdirp(directory)
+ self.directory = os.path.join(self.tempdir, 'dir')
+ mkdirp(self.directory)
# Script with short shebang
self.short_shebang = os.path.join(self.tempdir, 'short')
@@ -70,49 +77,102 @@ class SbangTest(unittest.TestCase):
f.write(lua_line)
f.write(last_line)
+ # Lua script with long shebang
+ self.lua_textbang = os.path.join(self.tempdir, 'lua_in_text')
+ with open(self.lua_textbang, 'w') as f:
+ f.write(short_line)
+ f.write(lua_in_text)
+ f.write(last_line)
+
+ # Node script with long shebang
+ self.node_shebang = os.path.join(self.tempdir, 'node')
+ with open(self.node_shebang, 'w') as f:
+ f.write(node_line)
+ f.write(last_line)
+
+ # Node script with long shebang
+ self.node_textbang = os.path.join(self.tempdir, 'node_in_text')
+ with open(self.node_textbang, 'w') as f:
+ f.write(short_line)
+ f.write(node_in_text)
+ f.write(last_line)
+
# Script already using sbang.
- self.has_shebang = os.path.join(self.tempdir, 'shebang')
- with open(self.has_shebang, 'w') as f:
+ self.has_sbang = os.path.join(self.tempdir, 'shebang')
+ with open(self.has_sbang, 'w') as f:
f.write(sbang_line)
f.write(long_line)
f.write(last_line)
- def tearDown(self):
+ # Fake binary file.
+ self.binary = os.path.join(self.tempdir, 'binary')
+ tar = which('tar', required=True)
+ tar('czf', self.binary, self.has_sbang)
+
+ def destroy(self):
shutil.rmtree(self.tempdir, ignore_errors=True)
- def test_shebang_handling(self):
- filter_shebangs_in_directory(self.tempdir)
-
- # Make sure this is untouched
- with open(self.short_shebang, 'r') as f:
- self.assertEqual(f.readline(), short_line)
- self.assertEqual(f.readline(), last_line)
-
- # Make sure this got patched.
- with open(self.long_shebang, 'r') as f:
- self.assertEqual(f.readline(), sbang_line)
- self.assertEqual(f.readline(), long_line)
- self.assertEqual(f.readline(), last_line)
-
- # Make sure this got patched.
- with open(self.lua_shebang, 'r') as f:
- self.assertEqual(f.readline(), sbang_line)
- self.assertEqual(f.readline(), lua_line_patched)
- self.assertEqual(f.readline(), last_line)
-
- # Make sure this is untouched
- with open(self.has_shebang, 'r') as f:
- self.assertEqual(f.readline(), sbang_line)
- self.assertEqual(f.readline(), long_line)
- self.assertEqual(f.readline(), last_line)
-
- def test_shebang_handles_non_writable_files(self):
- # make a file non-writable
- st = os.stat(self.long_shebang)
- not_writable_mode = st.st_mode & ~stat.S_IWRITE
- os.chmod(self.long_shebang, not_writable_mode)
-
- self.test_shebang_handling()
-
- st = os.stat(self.long_shebang)
- self.assertEqual(oct(not_writable_mode), oct(st.st_mode))
+
+@pytest.fixture
+def script_dir():
+ sdir = ScriptDirectory()
+ yield sdir
+ sdir.destroy()
+
+
+def test_shebang_handling(script_dir):
+ assert shebang_too_long(script_dir.lua_shebang)
+ assert shebang_too_long(script_dir.long_shebang)
+
+ assert not shebang_too_long(script_dir.short_shebang)
+ assert not shebang_too_long(script_dir.has_sbang)
+ assert not shebang_too_long(script_dir.binary)
+ assert not shebang_too_long(script_dir.directory)
+
+ filter_shebangs_in_directory(script_dir.tempdir)
+
+ # Make sure this is untouched
+ with open(script_dir.short_shebang, 'r') as f:
+ assert f.readline() == short_line
+ assert f.readline() == last_line
+
+ # Make sure this got patched.
+ with open(script_dir.long_shebang, 'r') as f:
+ assert f.readline() == sbang_line
+ assert f.readline() == long_line
+ assert f.readline() == last_line
+
+ # Make sure this got patched.
+ with open(script_dir.lua_shebang, 'r') as f:
+ assert f.readline() == sbang_line
+ assert f.readline() == lua_line_patched
+ assert f.readline() == last_line
+
+ # Make sure this got patched.
+ with open(script_dir.node_shebang, 'r') as f:
+ assert f.readline() == sbang_line
+ assert f.readline() == node_line_patched
+ assert f.readline() == last_line
+
+ assert filecmp.cmp(script_dir.lua_textbang,
+ os.path.join(script_dir.tempdir, 'lua_in_text'))
+ assert filecmp.cmp(script_dir.node_textbang,
+ os.path.join(script_dir.tempdir, 'node_in_text'))
+
+ # Make sure this is untouched
+ with open(script_dir.has_sbang, 'r') as f:
+ assert f.readline() == sbang_line
+ assert f.readline() == long_line
+ assert f.readline() == last_line
+
+
+def test_shebang_handles_non_writable_files(script_dir):
+ # make a file non-writable
+ st = os.stat(script_dir.long_shebang)
+ not_writable_mode = st.st_mode & ~stat.S_IWRITE
+ os.chmod(script_dir.long_shebang, not_writable_mode)
+
+ test_shebang_handling(script_dir)
+
+ st = os.stat(script_dir.long_shebang)
+ assert oct(not_writable_mode) == oct(st.st_mode)
diff --git a/lib/spack/spack/test/spack_yaml.py b/lib/spack/spack/test/spack_yaml.py
index fbbb7b8e60..2bcb2b4ce9 100644
--- a/lib/spack/spack/test/spack_yaml.py
+++ b/lib/spack/spack/test/spack_yaml.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,14 +22,17 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""
-Test Spack's custom YAML format.
-"""
-import unittest
+"""Test Spack's custom YAML format."""
+
+import pytest
import spack.util.spack_yaml as syaml
-test_file = """\
+
+@pytest.fixture()
+def data():
+ """Returns the data loaded from a test file"""
+ test_file = """\
config_file:
x86_64:
foo: /path/to/foo
@@ -43,66 +46,65 @@ config_file:
[ 1, 2, 3 ]
some_key: some_string
"""
+ return syaml.load(test_file)
+
+
+def test_parse(data):
+
+ expected = {
+ 'config_file': syaml.syaml_dict([
+ ('x86_64', syaml.syaml_dict([
+ ('foo', '/path/to/foo'),
+ ('bar', '/path/to/bar'),
+ ('baz', '/path/to/baz')])),
+ ('some_list', ['item 1', 'item 2', 'item 3']),
+ ('another_list', [1, 2, 3]),
+ ('some_key', 'some_string')
+ ])}
+
+ assert data == expected
+
+
+def test_dict_order(data):
+
+ expected_order = ['x86_64', 'some_list', 'another_list', 'some_key']
+ assert data['config_file'].keys() == expected_order
+
+ expected_order = ['foo', 'bar', 'baz']
+ assert data['config_file']['x86_64'].keys() == expected_order
+
+
+def test_line_numbers(data):
+ def check(obj, start_line, end_line):
+ assert obj._start_mark.line == start_line
+ assert obj._end_mark.line == end_line
+
+ check(data, 0, 12)
+ check(data['config_file'], 1, 12)
+ check(data['config_file']['x86_64'], 2, 5)
+ check(data['config_file']['x86_64']['foo'], 2, 2)
+ check(data['config_file']['x86_64']['bar'], 3, 3)
+ check(data['config_file']['x86_64']['baz'], 4, 4)
+ check(data['config_file']['some_list'], 6, 9)
+ check(data['config_file']['some_list'][0], 6, 6)
+ check(data['config_file']['some_list'][1], 7, 7)
+ check(data['config_file']['some_list'][2], 8, 8)
+ check(data['config_file']['another_list'], 10, 10)
+ check(data['config_file']['some_key'], 11, 11)
+
+
+def test_yaml_aliases():
+ aliased_list_1 = ['foo']
+ aliased_list_2 = []
+ dict_with_aliases = {
+ 'a': aliased_list_1,
+ 'b': aliased_list_1,
+ 'c': aliased_list_1,
+ 'd': aliased_list_2,
+ 'e': aliased_list_2,
+ 'f': aliased_list_2,
+ }
+ string = syaml.dump(dict_with_aliases)
-test_data = {
- 'config_file': syaml.syaml_dict([
- ('x86_64', syaml.syaml_dict([
- ('foo', '/path/to/foo'),
- ('bar', '/path/to/bar'),
- ('baz', '/path/to/baz')])),
- ('some_list', ['item 1', 'item 2', 'item 3']),
- ('another_list', [1, 2, 3]),
- ('some_key', 'some_string')
- ])}
-
-
-class SpackYamlTest(unittest.TestCase):
-
- def setUp(self):
- self.data = syaml.load(test_file)
-
- def test_parse(self):
- self.assertEqual(test_data, self.data)
-
- def test_dict_order(self):
- self.assertEqual(
- ['x86_64', 'some_list', 'another_list', 'some_key'],
- self.data['config_file'].keys())
-
- self.assertEqual(
- ['foo', 'bar', 'baz'],
- self.data['config_file']['x86_64'].keys())
-
- def test_line_numbers(self):
- def check(obj, start_line, end_line):
- self.assertEqual(obj._start_mark.line, start_line)
- self.assertEqual(obj._end_mark.line, end_line)
-
- check(self.data, 0, 12)
- check(self.data['config_file'], 1, 12)
- check(self.data['config_file']['x86_64'], 2, 5)
- check(self.data['config_file']['x86_64']['foo'], 2, 2)
- check(self.data['config_file']['x86_64']['bar'], 3, 3)
- check(self.data['config_file']['x86_64']['baz'], 4, 4)
- check(self.data['config_file']['some_list'], 6, 9)
- check(self.data['config_file']['some_list'][0], 6, 6)
- check(self.data['config_file']['some_list'][1], 7, 7)
- check(self.data['config_file']['some_list'][2], 8, 8)
- check(self.data['config_file']['another_list'], 10, 10)
- check(self.data['config_file']['some_key'], 11, 11)
-
- def test_yaml_aliases(self):
- aliased_list_1 = ['foo']
- aliased_list_2 = []
- dict_with_aliases = {
- 'a': aliased_list_1,
- 'b': aliased_list_1,
- 'c': aliased_list_1,
- 'd': aliased_list_2,
- 'e': aliased_list_2,
- 'f': aliased_list_2,
- }
- string = syaml.dump(dict_with_aliases)
-
- # ensure no YAML aliases appear in syaml dumps.
- self.assertFalse('*id' in string)
+ # ensure no YAML aliases appear in syaml dumps.
+ assert '*id' not in string
diff --git a/lib/spack/spack/test/spec_dag.py b/lib/spack/spack/test/spec_dag.py
index 1578bcacbe..0f359d8291 100644
--- a/lib/spack/spack/test/spec_dag.py
+++ b/lib/spack/spack/test/spec_dag.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,9 +24,6 @@
##############################################################################
"""
These tests check Spec DAG operations using dummy packages.
-You can find the dummy packages here::
-
- spack/lib/spack/spack/test/mock_packages
"""
import pytest
import spack
@@ -34,6 +31,8 @@ import spack.architecture
import spack.package
from spack.spec import Spec
+from spack.dependency import all_deptypes, Dependency, canonical_deptype
+from spack.test.conftest import MockPackage, MockPackageMultiRepo
def check_links(spec_to_check):
@@ -54,9 +53,9 @@ def saved_deps():
@pytest.fixture()
def set_dependency(saved_deps):
"""Returns a function that alters the dependency information
- for a package.
+ for a package in the ``saved_deps`` fixture.
"""
- def _mock(pkg_name, spec, deptypes=spack.alldeps):
+ def _mock(pkg_name, spec, deptypes=all_deptypes):
"""Alters dependence information for a package.
Adds a dependency on <spec> to pkg. Use this to mock up constraints.
@@ -66,13 +65,51 @@ def set_dependency(saved_deps):
pkg = spack.repo.get(pkg_name)
if pkg_name not in saved_deps:
saved_deps[pkg_name] = (pkg, pkg.dependencies.copy())
- # Change dep spec
- # XXX(deptype): handle deptypes.
- pkg.dependencies[spec.name] = {Spec(pkg_name): spec}
- pkg.dependency_types[spec.name] = set(deptypes)
+
+ cond = Spec(pkg.name)
+ dependency = Dependency(pkg, spec, type=deptypes)
+ pkg.dependencies[spec.name] = {cond: dependency}
return _mock
+@pytest.mark.usefixtures('config')
+def test_test_deptype():
+ """Ensure that test-only dependencies are only included for specified
+packages in the following spec DAG::
+
+ w
+ /|
+ x y
+ |
+ z
+
+w->y deptypes are (link, build), w->x and y->z deptypes are (test)
+
+"""
+ saved_repo = spack.repo
+
+ default = ('build', 'link')
+ test_only = ('test',)
+
+ x = MockPackage('x', [], [])
+ z = MockPackage('z', [], [])
+ y = MockPackage('y', [z], [test_only])
+ w = MockPackage('w', [x, y], [test_only, default])
+
+ mock_repo = MockPackageMultiRepo([w, x, y, z])
+ try:
+ spack.package_testing.test(w.name)
+ spack.repo = mock_repo
+ spec = Spec('w')
+ spec.concretize()
+
+ assert ('x' in spec)
+ assert ('z' not in spec)
+ finally:
+ spack.repo = saved_repo
+ spack.package_testing.clear()
+
+
@pytest.mark.usefixtures('refresh_builtin_mock')
class TestSpecDag(object):
@@ -93,7 +130,7 @@ class TestSpecDag(object):
names = ['mpileaks', 'callpath', 'dyninst', 'libdwarf', 'libelf',
'zmpi', 'fake']
- pairs = zip([0, 1, 2, 3, 4, 2, 3], names)
+ pairs = list(zip([0, 1, 2, 3, 4, 2, 3], names))
traversal = dag.traverse()
assert [x.name for x in traversal] == names
@@ -107,7 +144,7 @@ class TestSpecDag(object):
names = ['mpileaks', 'callpath', 'dyninst', 'libdwarf', 'libelf',
'libelf', 'zmpi', 'fake', 'zmpi']
- pairs = zip([0, 1, 2, 3, 4, 3, 2, 3, 1], names)
+ pairs = list(zip([0, 1, 2, 3, 4, 3, 2, 3, 1], names))
traversal = dag.traverse(cover='edges')
assert [x.name for x in traversal] == names
@@ -121,7 +158,7 @@ class TestSpecDag(object):
names = ['mpileaks', 'callpath', 'dyninst', 'libdwarf', 'libelf',
'libelf', 'zmpi', 'fake', 'zmpi', 'fake']
- pairs = zip([0, 1, 2, 3, 4, 3, 2, 3, 1, 2], names)
+ pairs = list(zip([0, 1, 2, 3, 4, 3, 2, 3, 1, 2], names))
traversal = dag.traverse(cover='paths')
assert [x.name for x in traversal] == names
@@ -135,7 +172,7 @@ class TestSpecDag(object):
names = ['libelf', 'libdwarf', 'dyninst', 'fake', 'zmpi',
'callpath', 'mpileaks']
- pairs = zip([4, 3, 2, 3, 2, 1, 0], names)
+ pairs = list(zip([4, 3, 2, 3, 2, 1, 0], names))
traversal = dag.traverse(order='post')
assert [x.name for x in traversal] == names
@@ -149,7 +186,7 @@ class TestSpecDag(object):
names = ['libelf', 'libdwarf', 'libelf', 'dyninst', 'fake', 'zmpi',
'callpath', 'zmpi', 'mpileaks']
- pairs = zip([4, 3, 3, 2, 3, 2, 1, 1, 0], names)
+ pairs = list(zip([4, 3, 3, 2, 3, 2, 1, 1, 0], names))
traversal = dag.traverse(cover='edges', order='post')
assert [x.name for x in traversal] == names
@@ -163,7 +200,7 @@ class TestSpecDag(object):
names = ['libelf', 'libdwarf', 'libelf', 'dyninst', 'fake', 'zmpi',
'callpath', 'fake', 'zmpi', 'mpileaks']
- pairs = zip([4, 3, 3, 2, 3, 2, 1, 2, 1, 0], names)
+ pairs = list(zip([4, 3, 3, 2, 3, 2, 1, 2, 1, 0], names))
traversal = dag.traverse(cover='paths', order='post')
assert [x.name for x in traversal] == names
@@ -201,15 +238,19 @@ class TestSpecDag(object):
spec.normalize()
spec.normalize()
- def test_normalize_with_virtual_spec(self):
- dag = Spec('mpileaks',
- Spec('callpath',
- Spec('dyninst',
- Spec('libdwarf',
- Spec('libelf')),
- Spec('libelf')),
- Spec('mpi')),
- Spec('mpi'))
+ def test_normalize_with_virtual_spec(self, ):
+ dag = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {'libelf': None},
+ 'libelf': None
+ },
+ 'mpi': None
+ },
+ 'mpi': None
+ }
+ })
dag.normalize()
# make sure nothing with the same name occurs twice
@@ -223,14 +264,18 @@ class TestSpecDag(object):
assert counts[name] == 1
def test_dependents_and_dependencies_are_correct(self):
- spec = Spec('mpileaks',
- Spec('callpath',
- Spec('dyninst',
- Spec('libdwarf',
- Spec('libelf')),
- Spec('libelf')),
- Spec('mpi')),
- Spec('mpi'))
+ spec = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {'libelf': None},
+ 'libelf': None
+ },
+ 'mpi': None
+ },
+ 'mpi': None
+ }
+ })
check_links(spec)
spec.normalize()
@@ -278,21 +323,45 @@ class TestSpecDag(object):
def test_equal(self):
# Different spec structures to test for equality
- flat = Spec('mpileaks ^callpath ^libelf ^libdwarf')
-
- flat_init = Spec(
- 'mpileaks', Spec('callpath'), Spec('libdwarf'), Spec('libelf'))
-
- flip_flat = Spec(
- 'mpileaks', Spec('libelf'), Spec('libdwarf'), Spec('callpath'))
-
- dag = Spec('mpileaks', Spec('callpath',
- Spec('libdwarf',
- Spec('libelf'))))
-
- flip_dag = Spec('mpileaks', Spec('callpath',
- Spec('libelf',
- Spec('libdwarf'))))
+ flat = Spec.from_literal(
+ {'mpileaks ^callpath ^libelf ^libdwarf': None}
+ )
+
+ flat_init = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': None,
+ 'libdwarf': None,
+ 'libelf': None
+ }
+ })
+
+ flip_flat = Spec.from_literal({
+ 'mpileaks': {
+ 'libelf': None,
+ 'libdwarf': None,
+ 'callpath': None
+ }
+ })
+
+ dag = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'libdwarf': {
+ 'libelf': None
+ }
+ }
+ }
+ })
+
+ flip_dag = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'libelf': {
+ 'libdwarf': None
+ }
+ }
+ }
+ })
# All these are equal to each other with regular ==
specs = (flat, flat_init, flip_flat, dag, flip_dag)
@@ -315,39 +384,52 @@ class TestSpecDag(object):
def test_normalize_mpileaks(self):
# Spec parsed in from a string
- spec = Spec('mpileaks ^mpich ^callpath ^dyninst ^libelf@1.8.11'
- ' ^libdwarf')
+ spec = Spec.from_literal({
+ 'mpileaks ^mpich ^callpath ^dyninst ^libelf@1.8.11 ^libdwarf': None
+ })
# What that spec should look like after parsing
- expected_flat = Spec(
- 'mpileaks', Spec('mpich'), Spec('callpath'), Spec('dyninst'),
- Spec('libelf@1.8.11'), Spec('libdwarf'))
+ expected_flat = Spec.from_literal({
+ 'mpileaks': {
+ 'mpich': None,
+ 'callpath': None,
+ 'dyninst': None,
+ 'libelf@1.8.11': None,
+ 'libdwarf': None
+ }
+ })
# What it should look like after normalization
mpich = Spec('mpich')
libelf = Spec('libelf@1.8.11')
- expected_normalized = Spec(
- 'mpileaks',
- Spec('callpath',
- Spec('dyninst',
- Spec('libdwarf',
- libelf),
- libelf),
- mpich),
- mpich)
+ expected_normalized = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {libelf: None},
+ libelf: None
+ },
+ mpich: None
+ },
+ mpich: None
+ },
+ })
# Similar to normalized spec, but now with copies of the same
# libelf node. Normalization should result in a single unique
# node for each package, so this is the wrong DAG.
- non_unique_nodes = Spec(
- 'mpileaks',
- Spec('callpath',
- Spec('dyninst',
- Spec('libdwarf',
- Spec('libelf@1.8.11')),
- Spec('libelf@1.8.11')),
- mpich),
- Spec('mpich'))
+ non_unique_nodes = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {'libelf@1.8.11': None},
+ 'libelf@1.8.11': None
+ },
+ mpich: None
+ },
+ mpich: None
+ }
+ }, normal=False)
# All specs here should be equal under regular equality
specs = (spec, expected_flat, expected_normalized, non_unique_nodes)
@@ -384,14 +466,18 @@ class TestSpecDag(object):
spec = Spec('mpileaks ^mpi ^libelf@1.8.11 ^libdwarf')
spec.normalize()
- expected_normalized = Spec(
- 'mpileaks',
- Spec('callpath',
- Spec('dyninst',
- Spec('libdwarf',
- Spec('libelf@1.8.11')),
- Spec('libelf@1.8.11')),
- Spec('mpi')), Spec('mpi'))
+ expected_normalized = Spec.from_literal({
+ 'mpileaks': {
+ 'callpath': {
+ 'dyninst': {
+ 'libdwarf': {'libelf@1.8.11': None},
+ 'libelf@1.8.11': None
+ },
+ 'mpi': None
+ },
+ 'mpi': None
+ }
+ })
assert str(spec) == str(expected_normalized)
@@ -508,7 +594,7 @@ class TestSpecDag(object):
'dtlink1', 'dtlink3', 'dtlink4', 'dtrun1', 'dtlink5',
'dtrun3', 'dtbuild3']
- traversal = dag.traverse(deptype=spack.alldeps)
+ traversal = dag.traverse(deptype=all)
assert [x.name for x in traversal] == names
def test_deptype_traversal_run(self):
@@ -556,16 +642,18 @@ class TestSpecDag(object):
def test_traversal_directions(self):
"""Make sure child and parent traversals of specs work."""
- # We'll use d for a diamond dependency
- d = Spec('d')
-
- # Mock spec.
- spec = Spec('a',
- Spec('b',
- Spec('c', d),
- Spec('e')),
- Spec('f',
- Spec('g', d)))
+ # Mock spec - d is used for a diamond dependency
+ spec = Spec.from_literal({
+ 'a': {
+ 'b': {
+ 'c': {'d': None},
+ 'e': None
+ },
+ 'f': {
+ 'g': {'d': None}
+ }
+ }
+ })
assert (
['a', 'b', 'c', 'd', 'e', 'f', 'g'] ==
@@ -581,16 +669,18 @@ class TestSpecDag(object):
def test_edge_traversals(self):
"""Make sure child and parent traversals of specs work."""
- # We'll use d for a diamond dependency
- d = Spec('d')
-
- # Mock spec.
- spec = Spec('a',
- Spec('b',
- Spec('c', d),
- Spec('e')),
- Spec('f',
- Spec('g', d)))
+ # Mock spec - d is used for a diamond dependency
+ spec = Spec.from_literal({
+ 'a': {
+ 'b': {
+ 'c': {'d': None},
+ 'e': None
+ },
+ 'f': {
+ 'g': {'d': None}
+ }
+ }
+ })
assert (
['a', 'b', 'c', 'd', 'e', 'f', 'g'] ==
@@ -612,12 +702,16 @@ class TestSpecDag(object):
assert '^mpich2' in s2
def test_construct_spec_with_deptypes(self):
- s = Spec('a',
- Spec('b',
- ['build'], Spec('c')),
- Spec('d',
- ['build', 'link'], Spec('e',
- ['run'], Spec('f'))))
+ """Ensure that it is possible to construct a spec with explicit
+ dependency types."""
+ s = Spec.from_literal({
+ 'a': {
+ 'b': {'c:build': None},
+ 'd': {
+ 'e:build,link': {'f:run': None}
+ }
+ }
+ })
assert s['b']._dependencies['c'].deptypes == ('build',)
assert s['d']._dependencies['e'].deptypes == ('build', 'link')
@@ -636,7 +730,12 @@ class TestSpecDag(object):
assert s['f']._dependents['e'].deptypes == ('run',)
def check_diamond_deptypes(self, spec):
- """Validate deptypes in dt-diamond spec."""
+ """Validate deptypes in dt-diamond spec.
+
+ This ensures that concretization works properly when two packages
+ depend on the same dependency in different ways.
+
+ """
assert spec['dt-diamond']._dependencies[
'dt-diamond-left'].deptypes == ('build', 'link')
@@ -650,12 +749,19 @@ class TestSpecDag(object):
'dt-diamond-bottom'].deptypes == ('build', 'link', 'run')
def check_diamond_normalized_dag(self, spec):
- bottom = Spec('dt-diamond-bottom')
- dag = Spec('dt-diamond',
- ['build', 'link'], Spec('dt-diamond-left',
- ['build'], bottom),
- ['build', 'link'], Spec('dt-diamond-right',
- ['build', 'link', 'run'], bottom))
+
+ dag = Spec.from_literal({
+ 'dt-diamond': {
+ 'dt-diamond-left:build,link': {
+ 'dt-diamond-bottom:build': None
+ },
+ 'dt-diamond-right:build,link': {
+ 'dt-diamond-bottom:build,link,run': None
+ },
+
+ }
+ })
+
assert spec.eq_dag(dag)
def test_normalize_diamond_deptypes(self):
@@ -690,3 +796,112 @@ class TestSpecDag(object):
s4 = s3.copy()
self.check_diamond_deptypes(s4)
+
+ def test_getitem_query(self):
+ s = Spec('mpileaks')
+ s.concretize()
+
+ # Check a query to a non-virtual package
+ a = s['callpath']
+
+ query = a.last_query
+ assert query.name == 'callpath'
+ assert len(query.extra_parameters) == 0
+ assert not query.isvirtual
+
+ # Check a query to a virtual package
+ a = s['mpi']
+
+ query = a.last_query
+ assert query.name == 'mpi'
+ assert len(query.extra_parameters) == 0
+ assert query.isvirtual
+
+ # Check a query to a virtual package with
+ # extra parameters after query
+ a = s['mpi:cxx,fortran']
+
+ query = a.last_query
+ assert query.name == 'mpi'
+ assert len(query.extra_parameters) == 2
+ assert 'cxx' in query.extra_parameters
+ assert 'fortran' in query.extra_parameters
+ assert query.isvirtual
+
+ def test_getitem_exceptional_paths(self):
+ s = Spec('mpileaks')
+ s.concretize()
+ # Needed to get a proxy object
+ q = s['mpileaks']
+
+ # Test that the attribute is read-only
+ with pytest.raises(AttributeError):
+ q.libs = 'foo'
+
+ with pytest.raises(AttributeError):
+ q.libs
+
+ def test_canonical_deptype(self):
+ # special values
+ assert canonical_deptype(all) == all_deptypes
+ assert canonical_deptype('all') == all_deptypes
+
+ with pytest.raises(ValueError):
+ canonical_deptype(None)
+ with pytest.raises(ValueError):
+ canonical_deptype([None])
+
+ # everything in all_deptypes is canonical
+ for v in all_deptypes:
+ assert canonical_deptype(v) == (v,)
+
+ # tuples
+ assert canonical_deptype(('build',)) == ('build',)
+ assert canonical_deptype(
+ ('build', 'link', 'run')) == ('build', 'link', 'run')
+ assert canonical_deptype(
+ ('build', 'link')) == ('build', 'link')
+ assert canonical_deptype(
+ ('build', 'run')) == ('build', 'run')
+
+ # lists
+ assert canonical_deptype(
+ ['build', 'link', 'run']) == ('build', 'link', 'run')
+ assert canonical_deptype(
+ ['build', 'link']) == ('build', 'link')
+ assert canonical_deptype(
+ ['build', 'run']) == ('build', 'run')
+
+ # sorting
+ assert canonical_deptype(
+ ('run', 'build', 'link')) == ('build', 'link', 'run')
+ assert canonical_deptype(
+ ('run', 'link', 'build')) == ('build', 'link', 'run')
+ assert canonical_deptype(
+ ('run', 'link')) == ('link', 'run')
+ assert canonical_deptype(
+ ('link', 'build')) == ('build', 'link')
+
+ # can't put 'all' in tuple or list
+ with pytest.raises(ValueError):
+ canonical_deptype(['all'])
+ with pytest.raises(ValueError):
+ canonical_deptype(('all',))
+
+ # invalid values
+ with pytest.raises(ValueError):
+ canonical_deptype('foo')
+ with pytest.raises(ValueError):
+ canonical_deptype(('foo', 'bar'))
+ with pytest.raises(ValueError):
+ canonical_deptype(('foo',))
+
+ def test_invalid_literal_spec(self):
+
+ # Can't give type 'build' to a top-level spec
+ with pytest.raises(spack.spec.SpecParseError):
+ Spec.from_literal({'foo:build': None})
+
+ # Can't use more than one ':' separator
+ with pytest.raises(KeyError):
+ Spec.from_literal({'foo': {'bar:build:link': None}})
diff --git a/lib/spack/spack/test/spec_semantics.py b/lib/spack/spack/test/spec_semantics.py
index 84c8650f15..03f77992c5 100644
--- a/lib/spack/spack/test/spec_semantics.py
+++ b/lib/spack/spack/test/spec_semantics.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,34 +24,53 @@
##############################################################################
import spack.architecture
import pytest
-from spack.spec import *
+from spack.spec import Spec, UnsatisfiableSpecError
+from spack.spec import substitute_abstract_variants, parse_anonymous_spec
+from spack.variant import InvalidVariantValueError
+from spack.variant import MultipleValuesInExclusiveVariantError
-def check_satisfies(spec, anon_spec, concrete=False):
- left = Spec(spec, concrete=concrete)
+
+def target_factory(spec_string, target_concrete):
+ spec = Spec(spec_string)
+
+ if target_concrete:
+ spec._mark_concrete()
+ substitute_abstract_variants(spec)
+
+ return spec
+
+
+def argument_factory(argument_spec, left):
try:
- right = Spec(anon_spec) # if it's not anonymous, allow it.
+ # If it's not anonymous, allow it
+ right = target_factory(argument_spec, False)
except Exception:
- right = parse_anonymous_spec(anon_spec, left.name)
+ right = parse_anonymous_spec(argument_spec, left.name)
+ return right
+
+
+def check_satisfies(target_spec, argument_spec, target_concrete=False):
+
+ left = target_factory(target_spec, target_concrete)
+ right = argument_factory(argument_spec, left)
# Satisfies is one-directional.
assert left.satisfies(right)
- assert left.satisfies(anon_spec)
+ assert left.satisfies(argument_spec)
- # if left satisfies right, then we should be able to consrain
+ # If left satisfies right, then we should be able to constrain
# right by left. Reverse is not always true.
right.copy().constrain(left)
-def check_unsatisfiable(spec, anon_spec, concrete=False):
- left = Spec(spec, concrete=concrete)
- try:
- right = Spec(anon_spec) # if it's not anonymous, allow it.
- except Exception:
- right = parse_anonymous_spec(anon_spec, left.name)
+def check_unsatisfiable(target_spec, argument_spec, target_concrete=False):
+
+ left = target_factory(target_spec, target_concrete)
+ right = argument_factory(argument_spec, left)
assert not left.satisfies(right)
- assert not left.satisfies(anon_spec)
+ assert not left.satisfies(argument_spec)
with pytest.raises(UnsatisfiableSpecError):
right.copy().constrain(left)
@@ -243,6 +262,155 @@ class TestSpecSematics(object):
check_satisfies('mpich~foo', 'mpich foo=FALSE')
check_satisfies('mpich foo=False', 'mpich~foo')
+ def test_satisfies_multi_value_variant(self):
+ # Check quoting
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'multivalue_variant foo="bar,baz"')
+ check_satisfies('multivalue_variant foo=bar,baz',
+ 'multivalue_variant foo=bar,baz')
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'multivalue_variant foo=bar,baz')
+
+ # A more constrained spec satisfies a less constrained one
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'multivalue_variant foo="bar"')
+
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'multivalue_variant foo="baz"')
+
+ check_satisfies('multivalue_variant foo="bar,baz,barbaz"',
+ 'multivalue_variant foo="bar,baz"')
+
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'foo="bar,baz"')
+
+ check_satisfies('multivalue_variant foo="bar,baz"',
+ 'foo="bar"')
+
+ def test_satisfies_single_valued_variant(self):
+ """Tests that the case reported in
+ https://github.com/spack/spack/pull/2386#issuecomment-282147639
+ is handled correctly.
+ """
+ a = Spec('a foobar=bar')
+ a.concretize()
+
+ assert a.satisfies('foobar=bar')
+
+ # Assert that an autospec generated from a literal
+ # gives the right result for a single valued variant
+ assert 'foobar=bar' in a
+ assert 'foobar=baz' not in a
+ assert 'foobar=fee' not in a
+
+ # ... and for a multi valued variant
+ assert 'foo=bar' in a
+
+ # Check that conditional dependencies are treated correctly
+ assert '^b' in a
+
+ def test_unsatisfied_single_valued_variant(self):
+ a = Spec('a foobar=baz')
+ a.concretize()
+ assert '^b' not in a
+
+ mv = Spec('multivalue_variant')
+ mv.concretize()
+ assert 'a@1.0' not in mv
+
+ def test_indirect_unsatisfied_single_valued_variant(self):
+ spec = Spec('singlevalue-variant-dependent')
+ spec.concretize()
+ assert 'a@1.0' not in spec
+
+ def test_unsatisfiable_multi_value_variant(self):
+
+ # Semantics for a multi-valued variant is different
+ # Depending on whether the spec is concrete or not
+
+ a = target_factory(
+ 'multivalue_variant foo="bar"', target_concrete=True
+ )
+ spec_str = 'multivalue_variant foo="bar,baz"'
+ b = Spec(spec_str)
+ assert not a.satisfies(b)
+ assert not a.satisfies(spec_str)
+ # A concrete spec cannot be constrained further
+ with pytest.raises(UnsatisfiableSpecError):
+ a.constrain(b)
+
+ a = Spec('multivalue_variant foo="bar"')
+ spec_str = 'multivalue_variant foo="bar,baz"'
+ b = Spec(spec_str)
+ # The specs are abstract and they **could** be constrained
+ assert a.satisfies(b)
+ assert a.satisfies(spec_str)
+ # An abstract spec can instead be constrained
+ assert a.constrain(b)
+
+ a = target_factory(
+ 'multivalue_variant foo="bar,baz"', target_concrete=True
+ )
+ spec_str = 'multivalue_variant foo="bar,baz,quux"'
+ b = Spec(spec_str)
+ assert not a.satisfies(b)
+ assert not a.satisfies(spec_str)
+ # A concrete spec cannot be constrained further
+ with pytest.raises(UnsatisfiableSpecError):
+ a.constrain(b)
+
+ a = Spec('multivalue_variant foo="bar,baz"')
+ spec_str = 'multivalue_variant foo="bar,baz,quux"'
+ b = Spec(spec_str)
+ # The specs are abstract and they **could** be constrained
+ assert a.satisfies(b)
+ assert a.satisfies(spec_str)
+ # An abstract spec can instead be constrained
+ assert a.constrain(b)
+ # ...but will fail during concretization if there are
+ # values in the variant that are not allowed
+ with pytest.raises(InvalidVariantValueError):
+ a.concretize()
+
+ # This time we'll try to set a single-valued variant
+ a = Spec('multivalue_variant fee="bar"')
+ spec_str = 'multivalue_variant fee="baz"'
+ b = Spec(spec_str)
+ # The specs are abstract and they **could** be constrained,
+ # as before concretization I don't know which type of variant
+ # I have (if it is not a BV)
+ assert a.satisfies(b)
+ assert a.satisfies(spec_str)
+ # A variant cannot be parsed as single-valued until we try to
+ # concretize. This means that we can constrain the variant above
+ assert a.constrain(b)
+ # ...but will fail during concretization if there are
+ # multiple values set
+ with pytest.raises(MultipleValuesInExclusiveVariantError):
+ a.concretize()
+
+ def test_unsatisfiable_variant_types(self):
+ # These should fail due to incompatible types
+
+ # FIXME: these needs to be checked as the new relaxed
+ # FIXME: semantic makes them fail (constrain does not raise)
+ # check_unsatisfiable('multivalue_variant +foo',
+ # 'multivalue_variant foo="bar"')
+ # check_unsatisfiable('multivalue_variant ~foo',
+ # 'multivalue_variant foo="bar"')
+
+ check_unsatisfiable(
+ target_spec='multivalue_variant foo="bar"',
+ argument_spec='multivalue_variant +foo',
+ target_concrete=True
+ )
+
+ check_unsatisfiable(
+ target_spec='multivalue_variant foo="bar"',
+ argument_spec='multivalue_variant ~foo',
+ target_concrete=True
+ )
+
def test_satisfies_unconstrained_variant(self):
# only asked for mpich, no constraints. Either will do.
check_satisfies('mpich+foo', 'mpich')
@@ -266,7 +434,7 @@ class TestSpecSematics(object):
# No matchi in specs
check_unsatisfiable('mpich~foo', 'mpich+foo')
check_unsatisfiable('mpich+foo', 'mpich~foo')
- check_unsatisfiable('mpich foo=1', 'mpich foo=2')
+ check_unsatisfiable('mpich foo=True', 'mpich foo=False')
def test_satisfies_matching_compiler_flag(self):
check_satisfies('mpich cppflags="-O3"', 'mpich cppflags="-O3"')
@@ -287,6 +455,14 @@ class TestSpecSematics(object):
# 'mpich' is concrete:
check_unsatisfiable('mpich', 'mpich cppflags="-O3"', True)
+ def test_copy_satisfies_transitive(self):
+ spec = Spec('dttop')
+ spec.concretize()
+ copy = spec.copy()
+ for s in spec.traverse():
+ assert s.satisfies(copy[s.name])
+ assert copy[s.name].satisfies(s)
+
def test_unsatisfiable_compiler_flag_mismatch(self):
# No matchi in specs
check_unsatisfiable(
@@ -408,6 +584,19 @@ class TestSpecSematics(object):
'libelf+debug~foo', 'libelf+debug', 'libelf+debug~foo'
)
+ def test_constrain_multi_value_variant(self):
+ check_constrain(
+ 'multivalue_variant foo="bar,baz"',
+ 'multivalue_variant foo="bar"',
+ 'multivalue_variant foo="baz"'
+ )
+
+ check_constrain(
+ 'multivalue_variant foo="bar,baz,barbaz"',
+ 'multivalue_variant foo="bar,barbaz"',
+ 'multivalue_variant foo="baz"'
+ )
+
def test_constrain_compiler_flags(self):
check_constrain(
'libelf cflags="-O3" cppflags="-Wall"',
@@ -447,7 +636,7 @@ class TestSpecSematics(object):
check_invalid_constraint('libelf+debug', 'libelf~debug')
check_invalid_constraint('libelf+debug~foo', 'libelf+debug+foo')
- check_invalid_constraint('libelf debug=2', 'libelf debug=1')
+ check_invalid_constraint('libelf debug=True', 'libelf debug=False')
check_invalid_constraint(
'libelf cppflags="-O3"', 'libelf cppflags="-O2"')
@@ -520,3 +709,14 @@ class TestSpecSematics(object):
check_constrain_not_changed(
'libelf^foo target=' + default_target,
'libelf^foo target=' + default_target)
+
+ def test_exceptional_paths_for_constructor(self):
+
+ with pytest.raises(TypeError):
+ Spec((1, 2))
+
+ with pytest.raises(ValueError):
+ Spec('')
+
+ with pytest.raises(ValueError):
+ Spec('libelf foo')
diff --git a/lib/spack/spack/test/spec_syntax.py b/lib/spack/spack/test/spec_syntax.py
index 043d9b176f..009cb5c129 100644
--- a/lib/spack/spack/test/spec_syntax.py
+++ b/lib/spack/spack/test/spec_syntax.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,9 +25,15 @@
import pytest
import shlex
+import spack
import spack.spec as sp
from spack.parse import Token
-from spack.spec import *
+from spack.spec import Spec, parse, parse_anonymous_spec
+from spack.spec import SpecParseError, RedundantSpecError
+from spack.spec import AmbiguousHashError, InvalidHashError, NoSuchHashError
+from spack.spec import DuplicateArchitectureError, DuplicateVariantError
+from spack.spec import DuplicateDependencyError, DuplicateCompilerSpecError
+
# Sample output for a complex lexing.
complex_lex = [Token(sp.ID, 'mvapich_foo'),
@@ -122,7 +128,7 @@ class TestSpecSyntax(object):
def _check_raises(self, exc_type, items):
for item in items:
with pytest.raises(exc_type):
- self.check_parse(item)
+ Spec(item)
# ========================================================================
# Parse checks
@@ -132,6 +138,19 @@ class TestSpecSyntax(object):
self.check_parse("mvapich_foo")
self.check_parse("_mvapich_foo")
+ def test_anonymous_specs(self):
+ self.check_parse("%intel")
+ self.check_parse("@2.7")
+ self.check_parse("^zlib")
+ self.check_parse("+foo")
+ self.check_parse("arch=test-None-None", "platform=test")
+ self.check_parse('@2.7:')
+
+ def test_anonymous_specs_with_multiple_parts(self):
+ # Parse anonymous spec with multiple tokens
+ self.check_parse('@4.2: languages=go', 'languages=go @4.2:')
+ self.check_parse('@4.2: languages=go')
+
def test_simple_dependence(self):
self.check_parse("openmpi^hwloc")
self.check_parse("openmpi^hwloc^libunwind")
@@ -218,6 +237,163 @@ class TestSpecSyntax(object):
errors = ['x@@1.2', 'x ^y@@1.2', 'x@1.2::', 'x::']
self._check_raises(SpecParseError, errors)
+ def _check_hash_parse(self, spec):
+ """Check several ways to specify a spec by hash."""
+ # full hash
+ self.check_parse(str(spec), '/' + spec.dag_hash())
+
+ # partial hash
+ self.check_parse(str(spec), '/ ' + spec.dag_hash()[:5])
+
+ # name + hash
+ self.check_parse(str(spec), spec.name + '/' + spec.dag_hash())
+
+ # name + version + space + partial hash
+ self.check_parse(
+ str(spec), spec.name + '@' + str(spec.version) +
+ ' /' + spec.dag_hash()[:6])
+
+ def test_spec_by_hash(self, database):
+ specs = database.mock.db.query()
+ assert len(specs) # make sure something's in the DB
+
+ for spec in specs:
+ self._check_hash_parse(spec)
+
+ def test_dep_spec_by_hash(self, database):
+ mpileaks_zmpi = database.mock.db.query_one('mpileaks ^zmpi')
+ zmpi = database.mock.db.query_one('zmpi')
+ fake = database.mock.db.query_one('fake')
+
+ assert 'fake' in mpileaks_zmpi
+ assert 'zmpi' in mpileaks_zmpi
+
+ mpileaks_hash_fake = sp.Spec('mpileaks ^/' + fake.dag_hash())
+ assert 'fake' in mpileaks_hash_fake
+ assert mpileaks_hash_fake['fake'] == fake
+
+ mpileaks_hash_zmpi = sp.Spec(
+ 'mpileaks %' + str(mpileaks_zmpi.compiler) +
+ ' ^ / ' + zmpi.dag_hash())
+ assert 'zmpi' in mpileaks_hash_zmpi
+ assert mpileaks_hash_zmpi['zmpi'] == zmpi
+ assert mpileaks_hash_zmpi.compiler == mpileaks_zmpi.compiler
+
+ mpileaks_hash_fake_and_zmpi = sp.Spec(
+ 'mpileaks ^/' + fake.dag_hash()[:4] + '^ / ' + zmpi.dag_hash()[:5])
+ assert 'zmpi' in mpileaks_hash_fake_and_zmpi
+ assert mpileaks_hash_fake_and_zmpi['zmpi'] == zmpi
+
+ assert 'fake' in mpileaks_hash_fake_and_zmpi
+ assert mpileaks_hash_fake_and_zmpi['fake'] == fake
+
+ def test_multiple_specs_with_hash(self, database):
+ mpileaks_zmpi = database.mock.db.query_one('mpileaks ^zmpi')
+ callpath_mpich2 = database.mock.db.query_one('callpath ^mpich2')
+
+ # name + hash + separate hash
+ specs = sp.parse('mpileaks /' + mpileaks_zmpi.dag_hash() +
+ '/' + callpath_mpich2.dag_hash())
+ assert len(specs) == 2
+
+ # 2 separate hashes
+ specs = sp.parse('/' + mpileaks_zmpi.dag_hash() +
+ '/' + callpath_mpich2.dag_hash())
+ assert len(specs) == 2
+
+ # 2 separate hashes + name
+ specs = sp.parse('/' + mpileaks_zmpi.dag_hash() +
+ '/' + callpath_mpich2.dag_hash() +
+ ' callpath')
+ assert len(specs) == 3
+
+ # hash + 2 names
+ specs = sp.parse('/' + mpileaks_zmpi.dag_hash() +
+ ' callpath' +
+ ' callpath')
+ assert len(specs) == 3
+
+ # hash + name + hash
+ specs = sp.parse('/' + mpileaks_zmpi.dag_hash() +
+ ' callpath' +
+ ' / ' + callpath_mpich2.dag_hash())
+ assert len(specs) == 2
+
+ def test_ambiguous_hash(self, database):
+ x1 = Spec('a')
+ x1._hash = 'xy'
+ x1._concrete = True
+ x2 = Spec('a')
+ x2._hash = 'xx'
+ x2._concrete = True
+ database.mock.db.add(x1, spack.store.layout)
+ database.mock.db.add(x2, spack.store.layout)
+
+ # ambiguity in first hash character
+ self._check_raises(AmbiguousHashError, ['/x'])
+
+ # ambiguity in first hash character AND spec name
+ self._check_raises(AmbiguousHashError, ['a/x'])
+
+ def test_invalid_hash(self, database):
+ mpileaks_zmpi = database.mock.db.query_one('mpileaks ^zmpi')
+ zmpi = database.mock.db.query_one('zmpi')
+
+ mpileaks_mpich = database.mock.db.query_one('mpileaks ^mpich')
+ mpich = database.mock.db.query_one('mpich')
+
+ # name + incompatible hash
+ self._check_raises(InvalidHashError, [
+ 'zmpi /' + mpich.dag_hash(),
+ 'mpich /' + zmpi.dag_hash()])
+
+ # name + dep + incompatible hash
+ self._check_raises(InvalidHashError, [
+ 'mpileaks ^mpich /' + mpileaks_zmpi.dag_hash(),
+ 'mpileaks ^zmpi /' + mpileaks_mpich.dag_hash()])
+
+ def test_nonexistent_hash(self, database):
+ """Ensure we get errors for nonexistant hashes."""
+ specs = database.mock.db.query()
+
+ # This hash shouldn't be in the test DB. What are the odds :)
+ no_such_hash = 'aaaaaaaaaaaaaaa'
+ hashes = [s._hash for s in specs]
+ assert no_such_hash not in [h[:len(no_such_hash)] for h in hashes]
+
+ self._check_raises(NoSuchHashError, [
+ '/' + no_such_hash,
+ 'mpileaks /' + no_such_hash])
+
+ def test_redundant_spec(self, database):
+ """Check that redundant spec constraints raise errors.
+
+ TODO (TG): does this need to be an error? Or should concrete
+ specs only raise errors if constraints cause a contradiction?
+
+ """
+ mpileaks_zmpi = database.mock.db.query_one('mpileaks ^zmpi')
+ callpath_zmpi = database.mock.db.query_one('callpath ^zmpi')
+ dyninst = database.mock.db.query_one('dyninst')
+
+ mpileaks_mpich2 = database.mock.db.query_one('mpileaks ^mpich2')
+
+ redundant_specs = [
+ # redudant compiler
+ '/' + mpileaks_zmpi.dag_hash() + '%' + str(mpileaks_zmpi.compiler),
+
+ # redudant version
+ 'mpileaks/' + mpileaks_mpich2.dag_hash() +
+ '@' + str(mpileaks_mpich2.version),
+
+ # redundant dependency
+ 'callpath /' + callpath_zmpi.dag_hash() + '^ libelf',
+
+ # redundant flags
+ '/' + dyninst.dag_hash() + ' cflags="-O3 -fPIC"']
+
+ self._check_raises(RedundantSpecError, redundant_specs)
+
def test_duplicate_variant(self):
duplicates = [
'x@1.2+debug+debug',
@@ -362,3 +538,18 @@ class TestSpecSyntax(object):
"mvapich_foo debug= 4 "
"^ _openmpi @1.2 : 1.4 , 1.6 % intel @ 12.1 : 12.6 + debug - qt_4 "
"^ stackwalker @ 8.1_1e")
+
+
+@pytest.mark.parametrize('spec,anon_spec,spec_name', [
+ ('openmpi languages=go', 'languages=go', 'openmpi'),
+ ('openmpi @4.6:', '@4.6:', 'openmpi'),
+ ('openmpi languages=go @4.6:', 'languages=go @4.6:', 'openmpi'),
+ ('openmpi @4.6: languages=go', '@4.6: languages=go', 'openmpi'),
+])
+def test_parse_anonymous_specs(spec, anon_spec, spec_name):
+
+ expected = parse(spec)
+ spec = parse_anonymous_spec(anon_spec, spec_name)
+
+ assert len(expected) == 1
+ assert spec in expected
diff --git a/lib/spack/spack/test/spec_yaml.py b/lib/spack/spack/test/spec_yaml.py
index e913dc8412..cefb737cfb 100644
--- a/lib/spack/spack/test/spec_yaml.py
+++ b/lib/spack/spack/test/spec_yaml.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,9 +24,11 @@
##############################################################################
"""Test YAML serialization for specs.
-YAML format preserves DAG informatoin in the spec.
+YAML format preserves DAG information in the spec.
"""
+from collections import Iterable, Mapping
+
import spack.util.spack_json as sjson
import spack.util.spack_yaml as syaml
from spack.spec import Spec
@@ -50,6 +52,16 @@ def test_normal_spec(builtin_mock):
check_yaml_round_trip(spec)
+def test_external_spec(config, builtin_mock):
+ spec = Spec('externaltool')
+ spec.concretize()
+ check_yaml_round_trip(spec)
+
+ spec = Spec('externaltest')
+ spec.concretize()
+ check_yaml_round_trip(spec)
+
+
def test_ambiguous_version_spec(builtin_mock):
spec = Spec('mpileaks@1.0:5.0,6.1,7.3+debug~opt')
spec.normalize()
@@ -62,6 +74,12 @@ def test_concrete_spec(config, builtin_mock):
check_yaml_round_trip(spec)
+def test_yaml_multivalue():
+ spec = Spec('multivalue_variant foo="bar,baz"')
+ spec.concretize()
+ check_yaml_round_trip(spec)
+
+
def test_yaml_subdag(config, builtin_mock):
spec = Spec('mpileaks^mpich+debug')
spec.concretize()
@@ -78,8 +96,6 @@ def test_using_ordered_dict(builtin_mock):
versions and processes.
"""
def descend_and_check(iterable, level=0):
- from spack.util.spack_yaml import syaml_dict
- from collections import Iterable, Mapping
if isinstance(iterable, Mapping):
assert isinstance(iterable, syaml_dict)
return descend_and_check(iterable.values(), level=level + 1)
@@ -95,7 +111,12 @@ def test_using_ordered_dict(builtin_mock):
for spec in specs:
dag = Spec(spec)
dag.normalize()
+ from pprint import pprint
+ pprint(dag.to_node_dict())
+ break
+
level = descend_and_check(dag.to_node_dict())
+
# level just makes sure we are doing something here
assert level >= 5
diff --git a/lib/spack/spack/test/stage.py b/lib/spack/spack/test/stage.py
index 5b4c46e0bf..2117ef5462 100644
--- a/lib/spack/spack/test/stage.py
+++ b/lib/spack/spack/test/stage.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,22 +26,15 @@
import collections
import os
+from llnl.util.filesystem import join_path, working_dir
+
import pytest
import spack
import spack.stage
import spack.util.executable
-from llnl.util.filesystem import join_path
from spack.stage import Stage
-def check_chdir_to_source(stage, stage_name):
- stage_path = get_stage_path(stage, stage_name)
- archive_dir = 'test-files'
- assert join_path(
- os.path.realpath(stage_path), archive_dir
- ) == os.getcwd()
-
-
def check_expand_archive(stage, stage_name, mock_archive):
stage_path = get_stage_path(stage, stage_name)
archive_name = 'test-files.tar.gz'
@@ -64,11 +57,6 @@ def check_fetch(stage, stage_name):
assert join_path(stage_path, archive_name) == stage.fetcher.archive_file
-def check_chdir(stage, stage_name):
- stage_path = get_stage_path(stage, stage_name)
- assert os.path.realpath(stage_path) == os.getcwd()
-
-
def check_destroy(stage, stage_name):
"""Figure out whether a stage was destroyed correctly."""
stage_path = get_stage_path(stage, stage_name)
@@ -162,10 +150,9 @@ def mock_archive(tmpdir, monkeypatch):
test_tmp_path.ensure(dir=True)
test_readme.write('hello world!\n')
- current = tmpdir.chdir()
- tar = spack.util.executable.which('tar', required=True)
- tar('czf', str(archive_name), 'test-files')
- current.chdir()
+ with tmpdir.as_cwd():
+ tar = spack.util.executable.which('tar', required=True)
+ tar('czf', str(archive_name), 'test-files')
# Make spack use the test environment for tmp stuff.
monkeypatch.setattr(spack.stage, '_tmp_root', None)
@@ -180,9 +167,6 @@ def mock_archive(tmpdir, monkeypatch):
test_tmp_dir=test_tmp_path,
archive_dir=archive_dir
)
- # record this since this test changes to directories that will
- # be removed.
- current.chdir()
@pytest.fixture()
@@ -245,40 +229,28 @@ class TestStage(object):
check_setup(stage, None, mock_archive)
check_destroy(stage, None)
- def test_chdir(self, mock_archive):
- with Stage(mock_archive.url, name=self.stage_name) as stage:
- stage.chdir()
- check_setup(stage, self.stage_name, mock_archive)
- check_chdir(stage, self.stage_name)
- check_destroy(stage, self.stage_name)
-
def test_fetch(self, mock_archive):
with Stage(mock_archive.url, name=self.stage_name) as stage:
stage.fetch()
check_setup(stage, self.stage_name, mock_archive)
- check_chdir(stage, self.stage_name)
check_fetch(stage, self.stage_name)
check_destroy(stage, self.stage_name)
def test_no_search_if_default_succeeds(
- self, mock_archive, failing_search_fn
- ):
- with Stage(
- mock_archive.url,
- name=self.stage_name,
- search_fn=failing_search_fn
- ) as stage:
+ self, mock_archive, failing_search_fn):
+ stage = Stage(mock_archive.url,
+ name=self.stage_name,
+ search_fn=failing_search_fn)
+ with stage:
stage.fetch()
check_destroy(stage, self.stage_name)
def test_no_search_mirror_only(
- self, failing_fetch_strategy, failing_search_fn
- ):
- with Stage(
- failing_fetch_strategy,
- name=self.stage_name,
- search_fn=failing_search_fn
- ) as stage:
+ self, failing_fetch_strategy, failing_search_fn):
+ stage = Stage(failing_fetch_strategy,
+ name=self.stage_name,
+ search_fn=failing_search_fn)
+ with stage:
try:
stage.fetch(mirror_only=True)
except spack.fetch_strategy.FetchError:
@@ -286,11 +258,10 @@ class TestStage(object):
check_destroy(stage, self.stage_name)
def test_search_if_default_fails(self, failing_fetch_strategy, search_fn):
- with Stage(
- failing_fetch_strategy,
- name=self.stage_name,
- search_fn=search_fn
- ) as stage:
+ stage = Stage(failing_fetch_strategy,
+ name=self.stage_name,
+ search_fn=search_fn)
+ with stage:
try:
stage.fetch(mirror_only=False)
except spack.fetch_strategy.FetchError:
@@ -307,75 +278,64 @@ class TestStage(object):
check_expand_archive(stage, self.stage_name, mock_archive)
check_destroy(stage, self.stage_name)
- def test_expand_archive_with_chdir(self, mock_archive):
- with Stage(mock_archive.url, name=self.stage_name) as stage:
- stage.fetch()
- check_setup(stage, self.stage_name, mock_archive)
- check_fetch(stage, self.stage_name)
- stage.expand_archive()
- stage.chdir_to_source()
- check_expand_archive(stage, self.stage_name, mock_archive)
- check_chdir_to_source(stage, self.stage_name)
- check_destroy(stage, self.stage_name)
-
def test_restage(self, mock_archive):
with Stage(mock_archive.url, name=self.stage_name) as stage:
stage.fetch()
stage.expand_archive()
- stage.chdir_to_source()
- check_expand_archive(stage, self.stage_name, mock_archive)
- check_chdir_to_source(stage, self.stage_name)
- # Try to make a file in the old archive dir
- with open('foobar', 'w') as file:
- file.write("this file is to be destroyed.")
+ with working_dir(stage.source_path):
+ check_expand_archive(stage, self.stage_name, mock_archive)
+
+ # Try to make a file in the old archive dir
+ with open('foobar', 'w') as file:
+ file.write("this file is to be destroyed.")
assert 'foobar' in os.listdir(stage.source_path)
# Make sure the file is not there after restage.
stage.restage()
- check_chdir(stage, self.stage_name)
check_fetch(stage, self.stage_name)
- stage.chdir_to_source()
- check_chdir_to_source(stage, self.stage_name)
assert 'foobar' not in os.listdir(stage.source_path)
check_destroy(stage, self.stage_name)
def test_no_keep_without_exceptions(self, mock_archive):
- with Stage(
- mock_archive.url, name=self.stage_name, keep=False
- ) as stage:
+ stage = Stage(mock_archive.url, name=self.stage_name, keep=False)
+ with stage:
pass
check_destroy(stage, self.stage_name)
+ @pytest.mark.disable_clean_stage_check
def test_keep_without_exceptions(self, mock_archive):
- with Stage(
- mock_archive.url, name=self.stage_name, keep=True
- ) as stage:
+ stage = Stage(mock_archive.url, name=self.stage_name, keep=True)
+ with stage:
pass
path = get_stage_path(stage, self.stage_name)
assert os.path.isdir(path)
+ @pytest.mark.disable_clean_stage_check
def test_no_keep_with_exceptions(self, mock_archive):
class ThisMustFailHere(Exception):
pass
+
+ stage = Stage(mock_archive.url, name=self.stage_name, keep=False)
try:
- with Stage(
- mock_archive.url, name=self.stage_name, keep=False
- ) as stage:
+ with stage:
raise ThisMustFailHere()
+
except ThisMustFailHere:
path = get_stage_path(stage, self.stage_name)
assert os.path.isdir(path)
+ @pytest.mark.disable_clean_stage_check
def test_keep_exceptions(self, mock_archive):
class ThisMustFailHere(Exception):
pass
+
+ stage = Stage(mock_archive.url, name=self.stage_name, keep=True)
try:
- with Stage(
- mock_archive.url, name=self.stage_name, keep=True
- ) as stage:
+ with stage:
raise ThisMustFailHere()
+
except ThisMustFailHere:
path = get_stage_path(stage, self.stage_name)
assert os.path.isdir(path)
diff --git a/lib/spack/spack/test/svn_fetch.py b/lib/spack/spack/test/svn_fetch.py
index 962a150909..f00b0b8259 100644
--- a/lib/spack/spack/test/svn_fetch.py
+++ b/lib/spack/spack/test/svn_fetch.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,19 +26,21 @@ import os
import pytest
import spack
-from llnl.util.filesystem import *
+from llnl.util.filesystem import join_path, touch, working_dir
from spack.spec import Spec
from spack.version import ver
+from spack.util.executable import which
-@pytest.fixture(params=['default', 'rev0'])
-def type_of_test(request):
- """Returns one of the test type available for the mock_hg_repository"""
- return request.param
+pytestmark = pytest.mark.skipif(
+ not which('svn'), reason='requires subversion to be installed')
+@pytest.mark.parametrize("type_of_test", ['default', 'rev0'])
+@pytest.mark.parametrize("secure", [True, False])
def test_fetch(
type_of_test,
+ secure,
mock_svn_repository,
config,
refresh_builtin_mock
@@ -55,30 +57,38 @@ def test_fetch(
# Retrieve the right test parameters
t = mock_svn_repository.checks[type_of_test]
h = mock_svn_repository.hash
+
# Construct the package under test
- spec = Spec('hg-test')
+ spec = Spec('svn-test')
spec.concretize()
pkg = spack.repo.get(spec, new=True)
- pkg.versions[ver('hg')] = t.args
+ pkg.versions[ver('svn')] = t.args
+
# Enter the stage directory and check some properties
with pkg.stage:
- pkg.do_stage()
- assert h() == t.revision
+ try:
+ spack.insecure = secure
+ pkg.do_stage()
+ finally:
+ spack.insecure = False
+
+ with working_dir(pkg.stage.source_path):
+ assert h() == t.revision
- file_path = join_path(pkg.stage.source_path, t.file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ file_path = join_path(pkg.stage.source_path, t.file)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- os.unlink(file_path)
- assert not os.path.isfile(file_path)
+ os.unlink(file_path)
+ assert not os.path.isfile(file_path)
- untracked_file = 'foobarbaz'
- touch(untracked_file)
- assert os.path.isfile(untracked_file)
- pkg.do_restage()
- assert not os.path.isfile(untracked_file)
+ untracked_file = 'foobarbaz'
+ touch(untracked_file)
+ assert os.path.isfile(untracked_file)
+ pkg.do_restage()
+ assert not os.path.isfile(untracked_file)
- assert os.path.isdir(pkg.stage.source_path)
- assert os.path.isfile(file_path)
+ assert os.path.isdir(pkg.stage.source_path)
+ assert os.path.isfile(file_path)
- assert h() == t.revision
+ assert h() == t.revision
diff --git a/lib/spack/spack/test/tengine.py b/lib/spack/spack/test/tengine.py
new file mode 100644
index 0000000000..35979879e1
--- /dev/null
+++ b/lib/spack/spack/test/tengine.py
@@ -0,0 +1,110 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import pytest
+import spack.tengine as tengine
+import spack.config
+
+from spack.util.path import canonicalize_path
+
+
+class TestContext(object):
+
+ class A(tengine.Context):
+ @tengine.context_property
+ def foo(self):
+ return 1
+
+ class B(tengine.Context):
+ @tengine.context_property
+ def bar(self):
+ return 2
+
+ class C(A, B):
+ @tengine.context_property
+ def foobar(self):
+ return 3
+
+ @tengine.context_property
+ def foo(self):
+ return 10
+
+ def test_to_dict(self):
+ """Tests that all the context properties in a hierarchy are considered
+ when building the context dictionary.
+ """
+
+ # A derives directly from Context
+ a = TestContext.A()
+ d = a.to_dict()
+
+ assert len(d) == 1
+ assert 'foo' in d
+ assert d['foo'] == 1
+
+ # So does B
+ b = TestContext.B()
+ d = b.to_dict()
+
+ assert len(d) == 1
+ assert 'bar' in d
+ assert d['bar'] == 2
+
+ # C derives from both and overrides 'foo'
+ c = TestContext.C()
+ d = c.to_dict()
+
+ assert len(d) == 3
+ for x in ('foo', 'bar', 'foobar'):
+ assert x in d
+
+ assert d['foo'] == 10
+ assert d['bar'] == 2
+ assert d['foobar'] == 3
+
+
+@pytest.mark.usefixtures('config')
+class TestTengineEnvironment(object):
+
+ def test_template_retrieval(self):
+ """Tests the template retrieval mechanism hooked into config files"""
+ # Check the directories are correct
+ template_dirs = spack.config.get_config('config')['template_dirs']
+ template_dirs = [canonicalize_path(x) for x in template_dirs]
+ assert len(template_dirs) == 3
+
+ env = tengine.make_environment(template_dirs)
+
+ # Retrieve a.txt, which resides in the second
+ # template directory specified in the mock configuration
+ template = env.get_template('a.txt')
+ text = template.render({'word': 'world'})
+ assert 'Hello world!' == text
+
+ # Retrieve b.txt, which resides in the third
+ # template directory specified in the mock configuration
+ template = env.get_template('b.txt')
+ text = template.render({'word': 'world'})
+ assert 'Howdy world!' == text
diff --git a/lib/spack/spack/test/test_activations.py b/lib/spack/spack/test/test_activations.py
new file mode 100644
index 0000000000..ec3562aaa6
--- /dev/null
+++ b/lib/spack/spack/test/test_activations.py
@@ -0,0 +1,271 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import spack
+from llnl.util.filesystem import join_path
+from spack.directory_layout import YamlDirectoryLayout
+from spack.filesystem_view import YamlFilesystemView
+
+import os
+import pytest
+
+
+class FakeExtensionPackage(object):
+ def __init__(self, name, prefix):
+ self.name = name
+ self.prefix = prefix
+ self.spec = FakeSpec(self)
+
+
+class FakeSpec(object):
+ def __init__(self, package):
+ self.name = package.name
+ self.prefix = package.prefix
+ self.hash = self.name
+
+ def dag_hash(self):
+ return self.hash
+
+
+def create_dir_structure(tmpdir, dir_structure):
+ for fname, children in dir_structure.items():
+ tmpdir.ensure(fname, dir=fname.endswith('/'))
+ if children:
+ create_dir_structure(tmpdir.join(fname), children)
+
+
+@pytest.fixture()
+def python_and_extension_dirs(tmpdir):
+ python_dirs = {
+ 'bin/': {
+ 'python': None
+ },
+ 'lib/': {
+ 'python2.7/': {
+ 'site-packages/': None
+ }
+ }
+ }
+
+ python_name = 'python'
+ python_prefix = tmpdir.join(python_name)
+ create_dir_structure(python_prefix, python_dirs)
+
+ python_spec = spack.spec.Spec('python@2.7.12')
+ python_spec._concrete = True
+ python_spec.package.spec._set_test_prefix(str(python_prefix))
+
+ ext_dirs = {
+ 'bin/': {
+ 'py-ext-tool': None
+ },
+ 'lib/': {
+ 'python2.7/': {
+ 'site-packages/': {
+ 'py-extension/': {
+ 'sample.py': None
+ }
+ }
+ }
+ }
+ }
+
+ ext_name = 'py-extension'
+ ext_prefix = tmpdir.join(ext_name)
+ create_dir_structure(ext_prefix, ext_dirs)
+
+ easy_install_location = 'lib/python2.7/site-packages/easy-install.pth'
+ with open(join_path(ext_prefix, easy_install_location), 'w') as F:
+ F.write("""path/to/ext1.egg
+path/to/setuptools.egg""")
+
+ return str(python_prefix), str(ext_prefix)
+
+
+def test_python_activation(tmpdir):
+ # Note the lib directory is based partly on the python version
+ python_spec = spack.spec.Spec('python@2.7.12')
+ python_spec._concrete = True
+
+ python_name = 'python'
+ tmpdir.ensure(python_name, dir=True)
+
+ python_prefix = str(tmpdir.join(python_name))
+ # Set the prefix on the package's spec reference because that is a copy of
+ # the original spec
+ python_spec.package.spec._set_test_prefix(python_prefix)
+
+ ext_name = 'py-extension'
+ tmpdir.ensure(ext_name, dir=True)
+ ext_pkg = FakeExtensionPackage(ext_name, str(tmpdir.join(ext_name)))
+
+ python_pkg = python_spec.package
+ python_pkg.activate(ext_pkg)
+
+
+def test_python_activation_with_files(tmpdir, python_and_extension_dirs):
+ python_prefix, ext_prefix = python_and_extension_dirs
+
+ python_spec = spack.spec.Spec('python@2.7.12')
+ python_spec._concrete = True
+ python_spec.package.spec._set_test_prefix(python_prefix)
+
+ ext_pkg = FakeExtensionPackage('py-extension', ext_prefix)
+
+ python_pkg = python_spec.package
+ python_pkg.activate(ext_pkg)
+
+ assert os.path.exists(join_path(python_prefix, 'bin/py-ext-tool'))
+
+ easy_install_location = 'lib/python2.7/site-packages/easy-install.pth'
+ with open(join_path(python_prefix, easy_install_location), 'r') as F:
+ easy_install_contents = F.read()
+
+ assert 'ext1.egg' in easy_install_contents
+ assert 'setuptools.egg' not in easy_install_contents
+
+
+def test_python_activation_view(tmpdir, python_and_extension_dirs):
+ python_prefix, ext_prefix = python_and_extension_dirs
+
+ python_spec = spack.spec.Spec('python@2.7.12')
+ python_spec._concrete = True
+ python_spec.package.spec._set_test_prefix(python_prefix)
+
+ ext_pkg = FakeExtensionPackage('py-extension', ext_prefix)
+
+ view_dir = str(tmpdir.join('view'))
+ layout = YamlDirectoryLayout(view_dir)
+ view = YamlFilesystemView(view_dir, layout)
+
+ python_pkg = python_spec.package
+ python_pkg.activate(ext_pkg, extensions_layout=view.extensions_layout)
+
+ assert not os.path.exists(join_path(python_prefix, 'bin/py-ext-tool'))
+
+ assert os.path.exists(join_path(view_dir, 'bin/py-ext-tool'))
+
+
+@pytest.fixture()
+def perl_and_extension_dirs(tmpdir):
+ perl_dirs = {
+ 'bin/': {
+ 'perl': None
+ },
+ 'lib/': {
+ 'site_perl/': {
+ '5.24.1/': {
+ 'x86_64-linux/': None
+ }
+ }
+ }
+ }
+
+ perl_name = 'perl'
+ perl_prefix = tmpdir.join(perl_name)
+ create_dir_structure(perl_prefix, perl_dirs)
+
+ perl_spec = spack.spec.Spec('perl@5.24.1')
+ perl_spec._concrete = True
+ perl_spec.package.spec._set_test_prefix(str(perl_prefix))
+
+ ext_dirs = {
+ 'bin/': {
+ 'perl-ext-tool': None
+ },
+ 'lib/': {
+ 'site_perl/': {
+ '5.24.1/': {
+ 'x86_64-linux/': {
+ 'TestExt/': {
+ }
+ }
+ }
+ }
+ }
+ }
+
+ ext_name = 'perl-extension'
+ ext_prefix = tmpdir.join(ext_name)
+ create_dir_structure(ext_prefix, ext_dirs)
+
+ return str(perl_prefix), str(ext_prefix)
+
+
+def test_perl_activation(tmpdir):
+ # Note the lib directory is based partly on the perl version
+ perl_spec = spack.spec.Spec('perl@5.24.1')
+ perl_spec._concrete = True
+
+ perl_name = 'perl'
+ tmpdir.ensure(perl_name, dir=True)
+
+ perl_prefix = str(tmpdir.join(perl_name))
+ # Set the prefix on the package's spec reference because that is a copy of
+ # the original spec
+ perl_spec.package.spec._set_test_prefix(perl_prefix)
+
+ ext_name = 'perl-extension'
+ tmpdir.ensure(ext_name, dir=True)
+ ext_pkg = FakeExtensionPackage(ext_name, str(tmpdir.join(ext_name)))
+
+ perl_pkg = perl_spec.package
+ perl_pkg.activate(ext_pkg)
+
+
+def test_perl_activation_with_files(tmpdir, perl_and_extension_dirs):
+ perl_prefix, ext_prefix = perl_and_extension_dirs
+
+ perl_spec = spack.spec.Spec('perl@5.24.1')
+ perl_spec._concrete = True
+ perl_spec.package.spec._set_test_prefix(perl_prefix)
+
+ ext_pkg = FakeExtensionPackage('perl-extension', ext_prefix)
+
+ perl_pkg = perl_spec.package
+ perl_pkg.activate(ext_pkg)
+
+ assert os.path.exists(join_path(perl_prefix, 'bin/perl-ext-tool'))
+
+
+def test_perl_activation_view(tmpdir, perl_and_extension_dirs):
+ perl_prefix, ext_prefix = perl_and_extension_dirs
+
+ perl_spec = spack.spec.Spec('perl@5.24.1')
+ perl_spec._concrete = True
+ perl_spec.package.spec._set_test_prefix(perl_prefix)
+
+ ext_pkg = FakeExtensionPackage('perl-extension', ext_prefix)
+
+ view_dir = str(tmpdir.join('view'))
+ layout = YamlDirectoryLayout(view_dir)
+ view = YamlFilesystemView(view_dir, layout)
+
+ perl_pkg = perl_spec.package
+ perl_pkg.activate(ext_pkg, extensions_layout=view.extensions_layout)
+
+ assert not os.path.exists(join_path(perl_prefix, 'bin/perl-ext-tool'))
+
+ assert os.path.exists(join_path(view_dir, 'bin/perl-ext-tool'))
diff --git a/lib/spack/spack/test/url_extrapolate.py b/lib/spack/spack/test/url_extrapolate.py
deleted file mode 100644
index 5f5cf555ae..0000000000
--- a/lib/spack/spack/test/url_extrapolate.py
+++ /dev/null
@@ -1,101 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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
-##############################################################################
-"""Tests ability of spack to extrapolate URL versions from
-existing versions.
-"""
-import unittest
-
-import spack.url as url
-
-
-class UrlExtrapolateTest(unittest.TestCase):
-
- def check_url(self, base, version, new_url):
- self.assertEqual(url.substitute_version(base, version), new_url)
-
- def test_libelf_version(self):
- base = "http://www.mr511.de/software/libelf-0.8.13.tar.gz"
- self.check_url(base, '0.8.13', base)
- self.check_url(
- base, '0.8.12', "http://www.mr511.de/software/libelf-0.8.12.tar.gz")
- self.check_url(
- base, '0.3.1', "http://www.mr511.de/software/libelf-0.3.1.tar.gz")
- self.check_url(
- base, '1.3.1b', "http://www.mr511.de/software/libelf-1.3.1b.tar.gz")
-
- def test_libdwarf_version(self):
- base = "http://www.prevanders.net/libdwarf-20130729.tar.gz"
- self.check_url(base, '20130729', base)
- self.check_url(
- base, '8.12', "http://www.prevanders.net/libdwarf-8.12.tar.gz")
-
- def test_dyninst_version(self):
- # Dyninst has a version twice in the URL.
- base = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1.2/DyninstAPI-8.1.2.tgz"
- self.check_url(base, '8.1.2', base)
- self.check_url(base, '8.2',
- "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.2/DyninstAPI-8.2.tgz")
- self.check_url(base, '8.3.1',
- "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.3.1/DyninstAPI-8.3.1.tgz")
-
- def test_partial_version_prefix(self):
- # Test now with a partial prefix earlier in the URL -- this is
- # hard to figure out so Spack only substitutes the last
- # instance of the version.
- base = "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1/DyninstAPI-8.1.2.tgz"
- self.check_url(base, '8.1.2', base)
- self.check_url(base, '8.1.4',
- "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1/DyninstAPI-8.1.4.tgz")
- self.check_url(base, '8.2',
- "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1/DyninstAPI-8.2.tgz")
- self.check_url(base, '8.3.1',
- "http://www.dyninst.org/sites/default/files/downloads/dyninst/8.1/DyninstAPI-8.3.1.tgz")
-
- def test_scalasca_partial_version(self):
- # Note that this probably doesn't actually work, but sites are
- # inconsistent about their directory structure, so it's not
- # clear what is right. This test is for consistency and to
- # document behavior. If you figure out a good way to handle
- # this case, fix the tests too.
- self.check_url('http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz', '8.3.1',
- 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-8.3.1.tar.gz')
- self.check_url('http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz', '8.3.1',
- 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-8.3.1.tar.gz')
-
- def test_mpileaks_version(self):
- self.check_url('https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz', '2.1.3',
- 'https://github.com/hpc/mpileaks/releases/download/v2.1.3/mpileaks-2.1.3.tar.gz')
-
- def test_gcc(self):
- self.check_url('http://open-source-box.org/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2', '4.7',
- 'http://open-source-box.org/gcc/gcc-4.7/gcc-4.7.tar.bz2')
- self.check_url('http://open-source-box.org/gcc/gcc-4.4.7/gcc-4.4.7.tar.bz2', '4.4.7',
- 'http://open-source-box.org/gcc/gcc-4.4.7/gcc-4.4.7.tar.bz2')
-
- def test_github_raw(self):
- self.check_url('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true', '2.0.7',
- 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true')
- self.check_url('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true', '4.7',
- 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v4.7.tgz?raw=true')
diff --git a/lib/spack/spack/test/url_fetch.py b/lib/spack/spack/test/url_fetch.py
new file mode 100644
index 0000000000..168bda5f64
--- /dev/null
+++ b/lib/spack/spack/test/url_fetch.py
@@ -0,0 +1,109 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+import pytest
+
+from llnl.util.filesystem import working_dir, is_exe
+
+import spack
+from spack.fetch_strategy import from_list_url, URLFetchStrategy
+from spack.spec import Spec
+from spack.version import ver
+import spack.util.crypto as crypto
+
+
+@pytest.fixture(params=list(crypto.hashes.keys()))
+def checksum_type(request):
+ return request.param
+
+
+@pytest.mark.parametrize('secure', [True, False])
+def test_fetch(
+ mock_archive,
+ secure,
+ checksum_type,
+ config,
+ refresh_builtin_mock
+):
+ """Fetch an archive and make sure we can checksum it."""
+ mock_archive.url
+ mock_archive.path
+
+ algo = crypto.hashes[checksum_type]()
+ with open(mock_archive.archive_file, 'rb') as f:
+ algo.update(f.read())
+ checksum = algo.hexdigest()
+
+ # Get a spec and tweak the test package with new chcecksum params
+ spec = Spec('url-test')
+ spec.concretize()
+
+ pkg = spack.repo.get('url-test', new=True)
+ pkg.url = mock_archive.url
+ pkg.versions[ver('test')] = {checksum_type: checksum, 'url': pkg.url}
+ pkg.spec = spec
+
+ # Enter the stage directory and check some properties
+ with pkg.stage:
+ try:
+ spack.insecure = secure
+ pkg.do_stage()
+ finally:
+ spack.insecure = False
+
+ with working_dir(pkg.stage.source_path):
+ assert os.path.exists('configure')
+ assert is_exe('configure')
+
+ with open('configure') as f:
+ contents = f.read()
+ assert contents.startswith('#!/bin/sh')
+ assert 'echo Building...' in contents
+
+
+def test_from_list_url(builtin_mock, config):
+ pkg = spack.repo.get('url-list-test', new=True)
+ for ver_str in ['0.0.0', '1.0.0', '2.0.0',
+ '3.0', '4.5', '2.0.0b2',
+ '3.0a1', '4.5-rc5']:
+ spec = Spec('url-list-test@%s' % ver_str)
+ spec.concretize()
+ pkg.spec = spec
+ fetch_strategy = from_list_url(pkg)
+ assert isinstance(fetch_strategy, URLFetchStrategy)
+ assert (os.path.basename(fetch_strategy.url) ==
+ ('foo-' + ver_str + '.tar.gz'))
+
+
+def test_hash_detection(checksum_type):
+ algo = crypto.hashes[checksum_type]()
+ h = 'f' * (algo.digest_size * 2) # hex -> bytes
+ checker = crypto.Checker(h)
+ assert checker.hash_name == checksum_type
+
+
+def test_unknown_hash(checksum_type):
+ with pytest.raises(ValueError):
+ crypto.Checker('a')
diff --git a/lib/spack/spack/test/url_parse.py b/lib/spack/spack/test/url_parse.py
index c4718d56b8..7a22205076 100644
--- a/lib/spack/spack/test/url_parse.py
+++ b/lib/spack/spack/test/url_parse.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,345 +22,420 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""\
-This file has a bunch of versions tests taken from the excellent version
-detection in Homebrew.
+"""Tests Spack's ability to parse the name and version of a package
+based on its URL.
"""
-import unittest
-
-import spack.url as url
-
-
-class UrlParseTest(unittest.TestCase):
-
- def assert_not_detected(self, string):
- self.assertRaises(
- url.UndetectableVersionError, url.parse_name_and_version, string)
-
- def check(self, name, v, string, **kwargs):
- # Make sure correct name and version are extracted.
- parsed_name, parsed_v = url.parse_name_and_version(string)
- self.assertEqual(parsed_name, name)
- self.assertEqual(parsed_v, url.Version(v))
-
- # Some URLs (like boost) are special and need to override the
- # built-in functionality.
- if kwargs.get('no_check_url', False):
- return
-
- # Make sure Spack formulates the right URL when we try to
- # build one with a specific version.
- self.assertEqual(string, url.substitute_version(string, v))
-
- def test_wwwoffle_version(self):
- self.check(
- 'wwwoffle', '2.9h',
- 'http://www.gedanken.demon.co.uk/download-wwwoffle/wwwoffle-2.9h.tgz')
-
- def test_version_sourceforge_download(self):
- self.check(
- 'foo-bar', '1.21',
- 'http://sourceforge.net/foo_bar-1.21.tar.gz/download')
- self.check(
- 'foo-bar', '1.21',
- 'http://sf.net/foo_bar-1.21.tar.gz/download')
-
- def test_no_version(self):
- self.assert_not_detected('http://example.com/blah.tar')
- self.assert_not_detected('foo')
-
- def test_version_all_dots(self):
- self.check(
- 'foo-bar-la', '1.14', 'http://example.com/foo.bar.la.1.14.zip')
-
- def test_version_underscore_separator(self):
- self.check(
- 'grc', '1.1',
- 'http://example.com/grc_1.1.tar.gz')
-
- def test_boost_version_style(self):
- self.check(
- 'boost', '1.39.0',
- 'http://example.com/boost_1_39_0.tar.bz2',
- no_check_url=True)
-
- def test_erlang_version_style(self):
- self.check(
- 'otp', 'R13B',
- 'http://erlang.org/download/otp_src_R13B.tar.gz')
-
- def test_another_erlang_version_style(self):
- self.check(
- 'otp', 'R15B01',
- 'https://github.com/erlang/otp/tarball/OTP_R15B01')
-
- def test_yet_another_erlang_version_style(self):
- self.check(
- 'otp', 'R15B03-1',
- 'https://github.com/erlang/otp/tarball/OTP_R15B03-1')
-
- def test_p7zip_version_style(self):
- self.check(
- 'p7zip', '9.04',
- 'http://kent.dl.sourceforge.net/sourceforge/p7zip/p7zip_9.04_src_all.tar.bz2')
-
- def test_new_github_style(self):
- self.check(
- 'libnet', '1.1.4',
- 'https://github.com/sam-github/libnet/tarball/libnet-1.1.4')
-
- def test_gloox_beta_style(self):
- self.check(
- 'gloox', '1.0-beta7',
- 'http://camaya.net/download/gloox-1.0-beta7.tar.bz2')
-
- def test_sphinx_beta_style(self):
- self.check(
- 'sphinx', '1.10-beta',
- 'http://sphinxsearch.com/downloads/sphinx-1.10-beta.tar.gz')
-
- def test_astyle_verson_style(self):
- self.check(
- 'astyle', '1.23',
- 'http://kent.dl.sourceforge.net/sourceforge/astyle/astyle_1.23_macosx.tar.gz')
-
- def test_version_dos2unix(self):
- self.check(
- 'dos2unix', '3.1',
- 'http://www.sfr-fresh.com/linux/misc/dos2unix-3.1.tar.gz')
-
- def test_version_internal_dash(self):
- self.check(
- 'foo-arse', '1.1-2',
- 'http://example.com/foo-arse-1.1-2.tar.gz')
-
- def test_version_single_digit(self):
- self.check(
- 'foo-bar', '45',
- 'http://example.com/foo_bar.45.tar.gz')
-
- def test_noseparator_single_digit(self):
- self.check(
- 'foo-bar', '45',
- 'http://example.com/foo_bar45.tar.gz')
-
- def test_version_developer_that_hates_us_format(self):
- self.check(
- 'foo-bar-la', '1.2.3',
- 'http://example.com/foo-bar-la.1.2.3.tar.gz')
-
- def test_version_regular(self):
- self.check(
- 'foo-bar', '1.21',
- 'http://example.com/foo_bar-1.21.tar.gz')
-
- def test_version_gitlab(self):
- self.check(
- 'vtk', '7.0.0',
- 'https://gitlab.kitware.com/vtk/vtk/repository/'
- 'archive.tar.bz2?ref=v7.0.0')
- self.check(
- 'icet', '1.2.3',
- 'https://gitlab.kitware.com/icet/icet/repository/'
- 'archive.tar.gz?ref=IceT-1.2.3')
- self.check(
- 'foo', '42.1337',
- 'http://example.com/org/foo/repository/'
- 'archive.zip?ref=42.1337bar')
-
- def test_version_github(self):
- self.check(
- 'yajl', '1.0.5',
- 'http://github.com/lloyd/yajl/tarball/1.0.5')
-
- def test_version_github_with_high_patch_number(self):
- self.check(
- 'yajl', '1.2.34',
- 'http://github.com/lloyd/yajl/tarball/v1.2.34')
-
- def test_yet_another_version(self):
- self.check(
- 'mad', '0.15.1b',
- 'http://example.com/mad-0.15.1b.tar.gz')
-
- def test_lame_version_style(self):
- self.check(
- 'lame', '398-2',
- 'http://kent.dl.sourceforge.net/sourceforge/lame/lame-398-2.tar.gz')
-
- def test_ruby_version_style(self):
- self.check(
- 'ruby', '1.9.1-p243',
- 'ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz')
-
- def test_omega_version_style(self):
- self.check(
- 'omega', '0.80.2',
- 'http://www.alcyone.com/binaries/omega/omega-0.80.2-src.tar.gz')
-
- def test_rc_style(self):
- self.check(
- 'libvorbis', '1.2.2rc1',
- 'http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.2rc1.tar.bz2')
-
- def test_dash_rc_style(self):
- self.check(
- 'js', '1.8.0-rc1',
- 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz')
-
- def test_angband_version_style(self):
- self.check(
- 'angband', '3.0.9b',
- 'http://rephial.org/downloads/3.0/angband-3.0.9b-src.tar.gz')
-
- def test_stable_suffix(self):
- self.check(
- 'libevent', '1.4.14b',
- 'http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz')
-
- def test_debian_style_1(self):
- self.check(
- 'sl', '3.03',
- 'http://ftp.de.debian.org/debian/pool/main/s/sl/sl_3.03.orig.tar.gz')
-
- def test_debian_style_2(self):
- self.check(
- 'mmv', '1.01b',
- 'http://ftp.de.debian.org/debian/pool/main/m/mmv/mmv_1.01b.orig.tar.gz')
-
- def test_imagemagick_style(self):
- self.check(
- 'imagemagick', '6.7.5-7',
-
- 'http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.7.5-7.tar.bz2')
-
- def test_dash_version_dash_style(self):
- self.check(
- 'antlr', '3.4',
- 'http://www.antlr.org/download/antlr-3.4-complete.jar')
-
- def test_apache_version_style(self):
- self.check(
- 'apache-cassandra', '1.2.0-rc2',
- 'http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz')
-
- def test_jpeg_style(self):
- self.check(
- 'jpegsrc', '8d',
- 'http://www.ijg.org/files/jpegsrc.v8d.tar.gz')
-
- def test_pypy_version(self):
- self.check(
- 'pypy', '1.4.1',
- 'http://pypy.org/download/pypy-1.4.1-osx.tar.bz2')
-
- def test_openssl_version(self):
- self.check(
- 'openssl', '0.9.8s',
- 'http://www.openssl.org/source/openssl-0.9.8s.tar.gz')
-
- def test_xaw3d_version(self):
- self.check(
- 'xaw3d', '1.5E',
- 'ftp://ftp.visi.com/users/hawkeyd/X/Xaw3d-1.5E.tar.gz')
-
- def test_fann_version(self):
- self.check(
- 'fann', '2.1.0beta',
- 'http://downloads.sourceforge.net/project/fann/fann/2.1.0beta/fann-2.1.0beta.zip')
-
- def test_iges_version(self):
- self.check(
- 'grads', '2.0.1',
- 'ftp://iges.org/grads/2.0/grads-2.0.1-bin-darwin9.8-intel.tar.gz')
-
- def test_haxe_version(self):
- self.check(
- 'haxe', '2.08',
- 'http://haxe.org/file/haxe-2.08-osx.tar.gz')
-
- def test_imap_version(self):
- self.check(
- 'imap', '2007f',
- 'ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz')
-
- def test_suite3270_version(self):
- self.check(
- 'suite3270', '3.3.12ga7',
- 'http://sourceforge.net/projects/x3270/files/x3270/3.3.12ga7/suite3270-3.3.12ga7-src.tgz')
-
- def test_synergy_version(self):
- self.check(
- 'synergy', '1.3.6p2',
- 'http://synergy.googlecode.com/files/synergy-1.3.6p2-MacOSX-Universal.zip')
-
- def test_mvapich2_19_version(self):
- self.check(
- 'mvapich2', '1.9',
- 'http://mvapich.cse.ohio-state.edu/download/mvapich2/mv2/mvapich2-1.9.tgz')
-
- def test_mvapich2_20_version(self):
- self.check(
- 'mvapich2', '2.0',
- 'http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.0.tar.gz')
-
- def test_hdf5_version(self):
- self.check(
- 'hdf5', '1.8.13',
- 'http://www.hdfgroup.org/ftp/HDF5/current/src/hdf5-1.8.13.tar.bz2')
-
- def test_scalasca_version(self):
- self.check(
- 'cube', '4.2.3',
- 'http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz')
- self.check(
- 'cube', '4.3-TP1',
- 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz')
-
- def test_mpileaks_version(self):
- self.check(
- 'mpileaks', '1.0',
- 'https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz')
- self.check(
- 'mpileaks', '1.0',
- 'https://github.com/hpc/mpileaks/releases/download/1.0/mpileaks-1.0.tar.gz')
-
- def test_gcc_version(self):
- self.check(
- 'gcc', '4.4.7',
- 'http://open-source-box.org/gcc/gcc-4.4.7/gcc-4.4.7.tar.bz2')
-
- def test_gcc_version_precedence(self):
- # prefer the version in the tarball, not in the url prefix.
- self.check(
- 'gcc', '4.4.7',
- 'http://open-source-box.org/gcc/gcc-4.9.2/gcc-4.4.7.tar.bz2')
-
- def test_github_raw_url(self):
- self.check(
- 'powerparser', '2.0.7',
- 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true')
-
- def test_r_xml_version(self):
- self.check(
- 'xml', '3.98-1.4',
- 'https://cran.r-project.org/src/contrib/XML_3.98-1.4.tar.gz')
-
- def test_nco_version(self):
- self.check(
- 'nco', '4.6.2-beta03',
- 'https://github.com/nco/nco/archive/4.6.2-beta03.tar.gz')
-
- self.check(
- 'nco', '4.6.3-alpha04',
- 'https://github.com/nco/nco/archive/4.6.3-alpha04.tar.gz')
-
- def test_yorick_version(self):
- self.check(
- 'yorick', '2_2_04',
- 'https://github.com/dhmunro/yorick/archive/y_2_2_04.tar.gz')
-
- def test_luaposix_version(self):
- self.check(
- 'luaposix', '33.4.0',
- 'https://github.com/luaposix/luaposix/archive/release-v33.4.0.tar.gz')
+
+import os
+import pytest
+
+from spack.url import parse_name_offset, parse_version_offset
+from spack.url import parse_name_and_version, substitute_version
+from spack.url import strip_name_suffixes, strip_version_suffixes
+from spack.url import UndetectableVersionError
+from spack.version import Version
+
+
+@pytest.mark.parametrize('url,expected', [
+ # No suffix
+ ('rgb-1.0.6', 'rgb-1.0.6'),
+ # Misleading prefix
+ ('jpegsrc.v9b', 'jpegsrc.v9b'),
+ ('turbolinux702', 'turbolinux702'),
+ ('converge_install_2.3.16', 'converge_install_2.3.16'),
+ # Download type - src
+ ('apache-ant-1.9.7-src', 'apache-ant-1.9.7'),
+ ('go1.7.4.src', 'go1.7.4'),
+ # Download type - source
+ ('bowtie2-2.2.5-source', 'bowtie2-2.2.5'),
+ ('grib_api-1.17.0-Source', 'grib_api-1.17.0'),
+ # Download type - full
+ ('julia-0.4.3-full', 'julia-0.4.3'),
+ # Download type - bin
+ ('apache-maven-3.3.9-bin', 'apache-maven-3.3.9'),
+ # Download type - binary
+ ('Jmol-14.8.0-binary', 'Jmol-14.8.0'),
+ # Download type - gem
+ ('rubysl-date-2.0.9.gem', 'rubysl-date-2.0.9'),
+ # Download type - tar
+ ('gromacs-4.6.1-tar', 'gromacs-4.6.1'),
+ # Download type - sh
+ ('Miniconda2-4.3.11-Linux-x86_64.sh', 'Miniconda2-4.3.11'),
+ # Download version - release
+ ('v1.0.4-release', 'v1.0.4'),
+ # Download version - stable
+ ('libevent-2.0.21-stable', 'libevent-2.0.21'),
+ # Download version - final
+ ('2.6.7-final', '2.6.7'),
+ # Download version - rel
+ ('v1.9.5.1rel', 'v1.9.5.1'),
+ # Download version - orig
+ ('dash_0.5.5.1.orig', 'dash_0.5.5.1'),
+ # Download version - plus
+ ('ncbi-blast-2.6.0+-src', 'ncbi-blast-2.6.0'),
+ # License
+ ('cppad-20170114.gpl', 'cppad-20170114'),
+ # OS - linux
+ ('astyle_2.04_linux', 'astyle_2.04'),
+ # OS - unix
+ ('install-tl-unx', 'install-tl'),
+ # OS - macos
+ ('astyle_1.23_macosx', 'astyle_1.23'),
+ ('haxe-2.08-osx', 'haxe-2.08'),
+ # PyPI - wheel
+ ('entrypoints-0.2.2-py2.py3-none-any.whl', 'entrypoints-0.2.2'),
+ ('numpy-1.12.0-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl', 'numpy-1.12.0'), # noqa
+ # PyPI - exe
+ ('PyYAML-3.12.win-amd64-py3.5.exe', 'PyYAML-3.12'),
+ # Combinations of multiple patterns - all
+ ('p7zip_9.04_src_all', 'p7zip_9.04'),
+ # Combinations of multiple patterns - run
+ ('cuda_8.0.44_linux.run', 'cuda_8.0.44'),
+ # Combinations of multiple patterns - file
+ ('ack-2.14-single-file', 'ack-2.14'),
+ # Combinations of multiple patterns - jar
+ ('antlr-3.4-complete.jar', 'antlr-3.4'),
+ # Combinations of multiple patterns - oss
+ ('tbb44_20160128oss_src_0', 'tbb44_20160128'),
+ # Combinations of multiple patterns - darwin
+ ('ghc-7.0.4-x86_64-apple-darwin', 'ghc-7.0.4'),
+ ('ghc-7.0.4-i386-apple-darwin', 'ghc-7.0.4'),
+ # Combinations of multiple patterns - arch
+ ('VizGlow_v2.2alpha17-R21November2016-Linux-x86_64-Install',
+ 'VizGlow_v2.2alpha17-R21November2016'),
+ ('jdk-8u92-linux-x64', 'jdk-8u92'),
+ ('cuda_6.5.14_linux_64.run', 'cuda_6.5.14'),
+ # Combinations of multiple patterns - with
+ ('mafft-7.221-with-extensions-src', 'mafft-7.221'),
+ ('spark-2.0.0-bin-without-hadoop', 'spark-2.0.0'),
+ # Combinations of multiple patterns - public
+ ('dakota-6.3-public.src', 'dakota-6.3'),
+ # Combinations of multiple patterns - universal
+ ('synergy-1.3.6p2-MacOSX-Universal', 'synergy-1.3.6p2'),
+ # Combinations of multiple patterns - dynamic
+ ('snptest_v2.5.2_linux_x86_64_dynamic', 'snptest_v2.5.2'),
+])
+def test_url_strip_version_suffixes(url, expected):
+ stripped = strip_version_suffixes(url)
+ assert stripped == expected
+
+
+@pytest.mark.parametrize('url,version,expected', [
+ # No suffix
+ ('rgb-1.0.6', '1.0.6', 'rgb'),
+ ('nauty26r7', '26r7', 'nauty'),
+ # Download type - install
+ ('converge_install_2.3.16', '2.3.16', 'converge'),
+ # Download type - src
+ ('jpegsrc.v9b', '9b', 'jpeg'),
+ # Download type - archive
+ ('coinhsl-archive-2014.01.17', '2014.01.17', 'coinhsl'),
+ # Download type - std
+ ('ghostscript-fonts-std-8.11', '8.11', 'ghostscript-fonts'),
+ # Download version - release
+ ('cbench_release_1.3.0.tar.gz', '1.3.0', 'cbench'),
+ # Download version - snapshot
+ ('gts-snapshot-121130', '121130', 'gts'),
+ # Download version - distrib
+ ('zoltan_distrib_v3.83', '3.83', 'zoltan'),
+ # VCS - bazaar
+ ('libvterm-0+bzr681', '681', 'libvterm'),
+ # License - gpl
+ ('PyQt-x11-gpl-4.11.3', '4.11.3', 'PyQt-x11')
+])
+def test_url_strip_name_suffixes(url, version, expected):
+ stripped = strip_name_suffixes(url, version)
+ assert stripped == expected
+
+
+@pytest.mark.parametrize('name,noffset,ver,voffset,path', [
+ # Name in path
+ ('antlr', 25, '2.7.7', 40, 'https://github.com/antlr/antlr/tarball/v2.7.7'),
+ # Name in stem
+ ('gmp', 32, '6.0.0a', 36, 'https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2'),
+ # Name in suffix
+
+ # Don't think I've ever seen one of these before
+ # We don't look for it, so it would probably fail anyway
+
+ # Version in path
+ ('nextflow', 31, '0.20.1', 59, 'https://github.com/nextflow-io/nextflow/releases/download/v0.20.1/nextflow'),
+ # Version in stem
+ ('zlib', 24, '1.2.10', 29, 'http://zlib.net/fossils/zlib-1.2.10.tar.gz'),
+ ('slepc', 51, '3.6.2', 57, 'http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz'),
+ ('cloog', 61, '0.18.1', 67, 'http://www.bastoul.net/cloog/pages/download/count.php3?url=./cloog-0.18.1.tar.gz'),
+ ('libxc', 58, '2.2.2', 64, 'http://www.tddft.org/programs/octopus/down.php?file=libxc/libxc-2.2.2.tar.gz'),
+ # Version in suffix
+ ('swiftsim', 36, '0.3.0', 76, 'http://gitlab.cosma.dur.ac.uk/swift/swiftsim/repository/archive.tar.gz?ref=v0.3.0'),
+ ('sionlib', 30, '1.7.1', 59, 'http://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.1'),
+ # Regex in name
+ ('voro++', 40, '0.4.6', 47, 'http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz'),
+ # SourceForge download
+ ('glew', 55, '2.0.0', 60, 'https://sourceforge.net/projects/glew/files/glew/2.0.0/glew-2.0.0.tgz/download'),
+])
+def test_url_parse_offset(name, noffset, ver, voffset, path):
+ """Tests that the name, version and offsets are computed correctly.
+
+ Args:
+ name (str): expected name
+ noffset (int): name offset
+ ver (str): expected version
+ voffset (int): version offset
+ path (str): url to be parsed
+ """
+ # Make sure parse_name_offset and parse_name_version are working
+ v, vstart, vlen, vi, vre = parse_version_offset(path)
+ n, nstart, nlen, ni, nre = parse_name_offset(path, v)
+
+ assert n == name
+ assert v == ver
+ assert nstart == noffset
+ assert vstart == voffset
+
+
+@pytest.mark.parametrize('name,version,url', [
+ # Common Repositories - github downloads
+
+ ('nco', '4.6.2', 'https://github.com/nco/nco/archive/4.6.2.tar.gz'),
+ # name/archive/vver.ver
+ ('vim', '8.0.0134', 'https://github.com/vim/vim/archive/v8.0.0134.tar.gz'),
+ # name/archive/name-ver.ver
+ ('oce', '0.18', 'https://github.com/tpaviot/oce/archive/OCE-0.18.tar.gz'),
+ # name/releases/download/vver/name-ver.ver
+ ('libmesh', '1.0.0', 'https://github.com/libMesh/libmesh/releases/download/v1.0.0/libmesh-1.0.0.tar.bz2'),
+ # name/tarball/vver.ver
+ ('git', '2.7.1', 'https://github.com/git/git/tarball/v2.7.1'),
+ # name/zipball/vver.ver
+ ('git', '2.7.1', 'https://github.com/git/git/zipball/v2.7.1'),
+ # Common Repositories - gitlab downloads
+
+ # name/repository/archive.ext?ref=vver.ver
+ ('swiftsim', '0.3.0',
+ 'http://gitlab.cosma.dur.ac.uk/swift/swiftsim/repository/archive.tar.gz?ref=v0.3.0'),
+ # name/repository/archive.ext?ref=name-ver.ver
+ ('icet', '1.2.3',
+ 'https://gitlab.kitware.com/icet/icet/repository/archive.tar.gz?ref=IceT-1.2.3'),
+
+ # Common Repositories - bitbucket downloads
+
+ # name/get/ver.ver
+ ('eigen', '3.2.7', 'https://bitbucket.org/eigen/eigen/get/3.2.7.tar.bz2'),
+ # name/get/vver.ver
+ ('hoomd-blue', '1.3.3',
+ 'https://bitbucket.org/glotzer/hoomd-blue/get/v1.3.3.tar.bz2'),
+ # name/downloads/name-ver.ver
+ ('dolfin', '2016.1.0',
+ 'https://bitbucket.org/fenics-project/dolfin/downloads/dolfin-2016.1.0.tar.gz'),
+ # Common Repositories - sourceforge downloads
+
+ # name-ver.ver
+ ('libpng', '1.6.27',
+ 'http://download.sourceforge.net/libpng/libpng-1.6.27.tar.gz'),
+ ('lcms2', '2.6',
+ 'http://downloads.sourceforge.net/project/lcms/lcms/2.6/lcms2-2.6.tar.gz'),
+ ('modules', '3.2.10',
+ 'http://prdownloads.sourceforge.net/modules/modules-3.2.10.tar.gz'),
+ # name-ver.ver.ext/download
+ ('glew', '2.0.0',
+ 'https://sourceforge.net/projects/glew/files/glew/2.0.0/glew-2.0.0.tgz/download'),
+
+ # Common Repositories - cran downloads
+
+ # name.name_ver.ver-ver.ver
+ ('TH.data', '1.0-8', 'https://cran.r-project.org/src/contrib/TH.data_1.0-8.tar.gz'),
+ ('knitr', '1.14', 'https://cran.rstudio.com/src/contrib/knitr_1.14.tar.gz'),
+ ('devtools', '1.12.0', 'https://cloud.r-project.org/src/contrib/devtools_1.12.0.tar.gz'),
+
+ # Common Repositories - pypi downloads
+
+ # name.name_name-ver.ver
+ ('3to2', '1.1.1', 'https://pypi.python.org/packages/source/3/3to2/3to2-1.1.1.zip'),
+ ('mpmath', '0.19',
+ 'https://pypi.python.org/packages/source/m/mpmath/mpmath-all-0.19.tar.gz'),
+ ('pandas', '0.16.0',
+ 'https://pypi.python.org/packages/source/p/pandas/pandas-0.16.0.tar.gz#md5=bfe311f05dc0c351f8955fbd1e296e73'),
+ ('sphinx_rtd_theme', '0.1.10a0',
+ 'https://pypi.python.org/packages/da/6b/1b75f13d8aa3333f19c6cdf1f0bc9f52ea739cae464fbee050307c121857/sphinx_rtd_theme-0.1.10a0.tar.gz'),
+ ('backports.ssl_match_hostname', '3.5.0.1',
+ 'https://pypi.io/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_hostname-3.5.0.1.tar.gz'),
+ # Common Repositories - bazaar downloads
+ ('libvterm', '681', 'http://www.leonerd.org.uk/code/libvterm/libvterm-0+bzr681.tar.gz'),
+
+ # Common Tarball Formats
+
+ # ver.ver
+ ('eigen', '3.2.7', 'https://bitbucket.org/eigen/eigen/get/3.2.7.tar.bz2'),
+ # ver.ver-ver
+ ('ImageMagick', '7.0.2-7', 'https://github.com/ImageMagick/ImageMagick/archive/7.0.2-7.tar.gz'),
+ # vver.ver
+ ('CGNS', '3.3.0', 'https://github.com/CGNS/CGNS/archive/v3.3.0.tar.gz'),
+ # vver_ver
+ ('luafilesystem', '1_6_3', 'https://github.com/keplerproject/luafilesystem/archive/v1_6_3.tar.gz'),
+
+ # No separators
+ ('turbolinux', '702', 'file://{0}/turbolinux702.tar.gz'.format(os.getcwd())),
+ ('nauty', '26r7', 'http://pallini.di.uniroma1.it/nauty26r7.tar.gz'),
+ # Dashes only
+ ('Trilinos', '12-10-1',
+ 'https://github.com/trilinos/Trilinos/archive/trilinos-release-12-10-1.tar.gz'),
+ ('panda', '2016-03-07',
+ 'http://comopt.ifi.uni-heidelberg.de/software/PANDA/downloads/panda-2016-03-07.tar'),
+ ('gts', '121130',
+ 'http://gts.sourceforge.net/tarballs/gts-snapshot-121130.tar.gz'),
+ ('cdd', '061a',
+ 'http://www.cs.mcgill.ca/~fukuda/download/cdd/cdd-061a.tar.gz'),
+ # Only underscores
+ ('tinyxml', '2_6_2',
+ 'https://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.tar.gz'),
+ ('boost', '1_55_0',
+ 'http://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2'),
+ ('yorick', '2_2_04',
+ 'https://github.com/dhmunro/yorick/archive/y_2_2_04.tar.gz'),
+ ('tbb', '44_20160413',
+ 'https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb44_20160413oss_src.tgz'),
+
+ # Only dots
+
+ # name.name.ver.ver
+ ('prank', '150803', 'http://wasabiapp.org/download/prank/prank.source.150803.tgz'),
+ ('jpeg', '9b', 'http://www.ijg.org/files/jpegsrc.v9b.tar.gz'),
+ ('openjpeg', '2.1',
+ 'https://github.com/uclouvain/openjpeg/archive/version.2.1.tar.gz'),
+ # name.namever.ver
+ ('atlas', '3.11.34',
+ 'http://sourceforge.net/projects/math-atlas/files/Developer%20%28unstable%29/3.11.34/atlas3.11.34.tar.bz2'),
+ ('visit', '2.10.1', 'http://portal.nersc.gov/project/visit/releases/2.10.1/visit2.10.1.tar.gz'),
+ ('geant', '4.10.01.p03', 'http://geant4.cern.ch/support/source/geant4.10.01.p03.tar.gz'),
+ ('tcl', '8.6.5', 'http://prdownloads.sourceforge.net/tcl/tcl8.6.5-src.tar.gz'),
+
+ # Dash and dots
+
+ # name-name-ver.ver
+ # digit in name
+ ('m4', '1.4.17', 'https://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz'),
+ # letter in version
+ ('gmp', '6.0.0a', 'https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2'),
+ # version starts with 'v'
+ ('LaunchMON', '1.0.2',
+ 'https://github.com/LLNL/LaunchMON/releases/download/v1.0.2/launchmon-v1.0.2.tar.gz'),
+ # name-ver-ver.ver
+ ('libedit', '20150325-3.1', 'http://thrysoee.dk/editline/libedit-20150325-3.1.tar.gz'),
+
+ # Dash and unserscores
+
+ # name-name-ver_ver
+ ('icu4c', '57_1', 'http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz'),
+
+ # Underscores and dots
+
+ # name_name_ver.ver
+ ('superlu_dist', '4.1', 'http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_dist_4.1.tar.gz'),
+ ('pexsi', '0.9.0', 'https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v0.9.0.tar.gz'),
+ # name_name.ver.ver
+ ('fer', '696', 'ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v696.tar.gz'),
+
+ # Dash dot dah dot
+
+ # name-name-ver.ver-ver.ver
+ ('sowing', '1.1.23-p1', 'http://ftp.mcs.anl.gov/pub/petsc/externalpackages/sowing-1.1.23-p1.tar.gz'),
+ ('bib2xhtml', '3.0-15-gf506', 'http://www.spinellis.gr/sw/textproc/bib2xhtml/bib2xhtml-v3.0-15-gf506.tar.gz'),
+ # namever.ver-ver.ver
+ ('go', '1.4-bootstrap-20161024', 'https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz'),
+
+ # Underscore dash dot
+
+ # name_name-ver.ver
+ ('the_silver_searcher', '0.32.0', 'http://geoff.greer.fm/ag/releases/the_silver_searcher-0.32.0.tar.gz'),
+ ('sphinx_rtd_theme', '0.1.10a0',
+ 'https://pypi.python.org/packages/source/s/sphinx_rtd_theme/sphinx_rtd_theme-0.1.10a0.tar.gz'),
+
+ # Dot underscore dot dash dot
+
+ # name.name_ver.ver-ver.ver
+ ('TH.data', '1.0-8', 'https://cran.r-project.org/src/contrib/TH.data_1.0-8.tar.gz'),
+ ('XML', '3.98-1.4', 'https://cran.r-project.org/src/contrib/XML_3.98-1.4.tar.gz'),
+
+ # Dash dot underscore dot
+
+ # name-name-ver.ver_ver.ver
+ ('pypar', '2.1.5_108',
+ 'https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pypar/pypar-2.1.5_108.tgz'),
+ # name-namever.ver_ver.ver
+ ('STAR-CCM+', '11.06.010_02',
+ 'file://{0}/STAR-CCM+11.06.010_02_linux-x86_64.tar.gz'.format(os.getcwd())),
+
+ # Weird URLS
+
+ # github.com/repo/name/releases/download/name-vver/name
+ ('nextflow', '0.20.1', 'https://github.com/nextflow-io/nextflow/releases/download/v0.20.1/nextflow'),
+ # suffix queries
+ ('swiftsim', '0.3.0', 'http://gitlab.cosma.dur.ac.uk/swift/swiftsim/repository/archive.tar.gz?ref=v0.3.0'),
+ ('sionlib', '1.7.1', 'http://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.1'),
+ # stem queries
+ ('slepc', '3.6.2', 'http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz'),
+ ('otf', '1.12.5salmon',
+ 'http://wwwpub.zih.tu-dresden.de/%7Emlieber/dcount/dcount.php?package=otf&get=OTF-1.12.5salmon.tar.gz'),
+ # single character name
+ ('R', '3.3.2', 'https://cloud.r-project.org/src/base/R-3/R-3.3.2.tar.gz'),
+ # name starts with digit
+ ('3to2', '1.1.1', 'https://pypi.python.org/packages/source/3/3to2/3to2-1.1.1.zip'),
+ # plus in name
+ ('gtk+', '2.24.31', 'http://ftp.gnome.org/pub/gnome/sources/gtk+/2.24/gtk+-2.24.31.tar.xz'),
+ ('voro++', '0.4.6', 'http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz'),
+ # Name comes before download.php
+ ('sionlib', '1.7.1', 'http://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.1'),
+ # Ignore download.php
+ ('slepc', '3.6.2', 'http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz'),
+ ('ScientificPython', '2.8.1',
+ 'https://sourcesup.renater.fr/frs/download.php/file/4411/ScientificPython-2.8.1.tar.gz'),
+ # gloox beta style
+ ('gloox', '1.0-beta7', 'http://camaya.net/download/gloox-1.0-beta7.tar.bz2'),
+ # sphinx beta style
+ ('sphinx', '1.10-beta', 'http://sphinxsearch.com/downloads/sphinx-1.10-beta.tar.gz'),
+ # ruby version style
+ ('ruby', '1.9.1-p243', 'ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz'),
+ # rc style
+ ('libvorbis', '1.2.2rc1', 'http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.2rc1.tar.bz2'),
+ # dash rc style
+ ('js', '1.8.0-rc1', 'http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz'),
+ # apache version style
+ ('apache-cassandra', '1.2.0-rc2',
+ 'http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz'),
+ # xaw3d version
+ ('Xaw3d', '1.5E', 'ftp://ftp.visi.com/users/hawkeyd/X/Xaw3d-1.5E.tar.gz'),
+ # fann version
+ ('fann', '2.1.0beta', 'http://downloads.sourceforge.net/project/fann/fann/2.1.0beta/fann-2.1.0beta.zip'),
+ # imap version
+ ('imap', '2007f', 'ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz'),
+ # suite3270 version
+ ('suite3270', '3.3.12ga7',
+ 'http://sourceforge.net/projects/x3270/files/x3270/3.3.12ga7/suite3270-3.3.12ga7-src.tgz'),
+ # scalasca version
+ ('cube', '4.2.3', 'http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz'),
+ ('cube', '4.3-TP1', 'http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3-TP1.tar.gz'),
+ # github raw url
+ ('CLAMR', '2.0.7', 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true'),
+ # luaposix version
+ ('luaposix', '33.4.0', 'https://github.com/luaposix/luaposix/archive/release-v33.4.0.tar.gz'),
+ # nco version
+ ('nco', '4.6.2-beta03', 'https://github.com/nco/nco/archive/4.6.2-beta03.tar.gz'),
+ ('nco', '4.6.3-alpha04', 'https://github.com/nco/nco/archive/4.6.3-alpha04.tar.gz'),
+])
+def test_url_parse_name_and_version(name, version, url):
+ # Make sure correct name and version are extracted.
+ parsed_name, parsed_version = parse_name_and_version(url)
+ assert parsed_name == name
+ assert parsed_version == Version(version)
+
+ # Make sure Spack formulates the right URL when we try to
+ # build one with a specific version.
+ assert url == substitute_version(url, version)
+
+
+@pytest.mark.parametrize('not_detectable_url', [
+ 'http://www.netlib.org/blas/blast-forum/cblas.tgz',
+ 'http://www.netlib.org/voronoi/triangle.zip',
+])
+def test_no_version(not_detectable_url):
+ with pytest.raises(UndetectableVersionError):
+ parse_name_and_version(not_detectable_url)
diff --git a/lib/spack/spack/test/url_substitution.py b/lib/spack/spack/test/url_substitution.py
index ea6374e3d2..dcd26aad0d 100644
--- a/lib/spack/spack/test/url_substitution.py
+++ b/lib/spack/spack/test/url_substitution.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,44 +22,44 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""\
-This test does sanity checks on substituting new versions into URLs
-"""
-import unittest
-import spack.url as url
+"""Tests Spack's ability to substitute a different version into a URL."""
+import os
-base = "https://comp.llnl.gov/linear_solvers/download/hypre-2.9.0b.tar.gz"
-stem = "https://comp.llnl.gov/linear_solvers/download/hypre-"
+import pytest
+import spack.url
-class PackageSanityTest(unittest.TestCase):
+@pytest.mark.parametrize('base_url,version,expected', [
+ # Ensures that substituting the same version results in the same URL
+ ('http://www.mr511.de/software/libelf-0.8.13.tar.gz', '0.8.13',
+ 'http://www.mr511.de/software/libelf-0.8.13.tar.gz'),
+ # Test a completely different version syntax
+ ('http://www.prevanders.net/libdwarf-20130729.tar.gz', '8.12',
+ 'http://www.prevanders.net/libdwarf-8.12.tar.gz'),
+ # Test a URL where the version appears twice
+ # It should get substituted both times
+ ('https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz', '2.1.3',
+ 'https://github.com/hpc/mpileaks/releases/download/v2.1.3/mpileaks-2.1.3.tar.gz'),
+ # Test now with a partial prefix earlier in the URL
+ # This is hard to figure out so Spack only substitutes
+ # the last instance of the version
+ ('https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.0.tar.bz2', '2.2.0',
+ 'https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.2.0.tar.bz2'),
+ ('https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.1.0.tar.bz2', '2.2',
+ 'https://www.open-mpi.org/software/ompi/v2.1/downloads/openmpi-2.2.tar.bz2'),
+ # No separator between the name and version of the package
+ ('file://{0}/turbolinux702.tar.gz'.format(os.getcwd()), '703',
+ 'file://{0}/turbolinux703.tar.gz'.format(os.getcwd())),
- def test_hypre_url_substitution(self):
- self.assertEqual(url.substitute_version(base, '2.9.0b'), base)
- self.assertEqual(
- url.substitute_version(base, '2.8.0b'), stem + "2.8.0b.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '2.7.0b'), stem + "2.7.0b.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '2.6.0b'), stem + "2.6.0b.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '1.14.0b'), stem + "1.14.0b.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '1.13.0b'), stem + "1.13.0b.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '2.0.0'), stem + "2.0.0.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '1.6.0'), stem + "1.6.0.tar.gz")
-
- def test_otf2_url_substitution(self):
- base = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
-
- self.assertEqual(url.substitute_version(base, '1.4'), base)
-
- self.assertEqual(
- url.substitute_version(base, '1.3.1'),
- "http://www.vi-hps.org/upload/packages/otf2/otf2-1.3.1.tar.gz")
- self.assertEqual(
- url.substitute_version(base, '1.2.1'),
- "http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz")
+ ('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true', '2.0.7',
+ 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true'),
+ ('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true', '4.7',
+ 'https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v4.7.tgz?raw=true'),
+ # Package name contains regex characters
+ ('http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz', '1.2.3',
+ 'http://math.lbl.gov/voro++/download/dir/voro++-1.2.3.tar.gz'),
+])
+def test_url_substitution(base_url, version, expected):
+ computed = spack.url.substitute_version(base_url, version)
+ assert computed == expected
diff --git a/lib/spack/spack/test/util/filesystem.py b/lib/spack/spack/test/util/filesystem.py
new file mode 100644
index 0000000000..86c243a97e
--- /dev/null
+++ b/lib/spack/spack/test/util/filesystem.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import llnl.util.filesystem as fs
+
+
+def test_move_transaction_commit(tmpdir):
+
+ fake_library = tmpdir.mkdir('lib').join('libfoo.so')
+ fake_library.write('Just some fake content.')
+
+ old_md5 = fs.hash_directory(str(tmpdir))
+
+ with fs.replace_directory_transaction(str(tmpdir.join('lib'))):
+ fake_library = tmpdir.mkdir('lib').join('libfoo.so')
+ fake_library.write('Other content.')
+ new_md5 = fs.hash_directory(str(tmpdir))
+
+ assert old_md5 != fs.hash_directory(str(tmpdir))
+ assert new_md5 == fs.hash_directory(str(tmpdir))
+
+
+def test_move_transaction_rollback(tmpdir):
+
+ fake_library = tmpdir.mkdir('lib').join('libfoo.so')
+ fake_library.write('Just some fake content.')
+
+ h = fs.hash_directory(str(tmpdir))
+
+ try:
+ with fs.replace_directory_transaction(str(tmpdir.join('lib'))):
+ assert h != fs.hash_directory(str(tmpdir))
+ fake_library = tmpdir.mkdir('lib').join('libfoo.so')
+ fake_library.write('Other content.')
+ raise RuntimeError('')
+ except RuntimeError:
+ pass
+
+ assert h == fs.hash_directory(str(tmpdir))
diff --git a/lib/spack/spack/test/util/log_parser.py b/lib/spack/spack/test/util/log_parser.py
new file mode 100644
index 0000000000..37642f7f1f
--- /dev/null
+++ b/lib/spack/spack/test/util/log_parser.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 ctest_log_parser import CTestLogParser
+
+
+def test_log_parser(tmpdir):
+ log_file = tmpdir.join('log.txt')
+
+ with log_file.open('w') as f:
+ f.write("""#!/bin/sh\n
+checking build system type... x86_64-apple-darwin16.6.0
+checking host system type... x86_64-apple-darwin16.6.0
+error: weird_error.c:145: something weird happened E
+checking for gcc... /Users/gamblin2/src/spack/lib/spack/env/clang/clang
+checking whether the C compiler works... yes
+/var/tmp/build/foo.py:60: warning: some weird warning W
+checking for C compiler default output file name... a.out
+ld: fatal: linker thing happened E
+checking for suffix of executables...
+configure: error: in /path/to/some/file: E
+configure: error: cannot run C compiled programs. E
+""")
+
+ parser = CTestLogParser()
+ errors, warnings = parser.parse(str(log_file))
+
+ assert len(errors) == 4
+ assert all(e.text.endswith('E') for e in errors)
+
+ assert len(warnings) == 1
+ assert all(w.text.endswith('W') for w in warnings)
diff --git a/lib/spack/spack/test/util/prefix.py b/lib/spack/spack/test/util/prefix.py
new file mode 100644
index 0000000000..e1cda1f1e4
--- /dev/null
+++ b/lib/spack/spack/test/util/prefix.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""Tests various features of :py:class:`spack.util.prefix.Prefix`"""
+
+from spack.util.prefix import Prefix
+
+
+def test_prefix_attributes():
+ """Test normal prefix attributes like ``prefix.bin``"""
+ prefix = Prefix('/usr')
+
+ assert prefix.bin == '/usr/bin'
+ assert prefix.lib == '/usr/lib'
+ assert prefix.include == '/usr/include'
+
+
+def test_multilevel_attributes():
+ """Test attributes of attributes, like ``prefix.share.man``"""
+ prefix = Prefix('/usr/')
+
+ assert prefix.share.man == '/usr/share/man'
+ assert prefix.man.man8 == '/usr/man/man8'
+ assert prefix.foo.bar.baz == '/usr/foo/bar/baz'
+
+ share = prefix.share
+
+ assert isinstance(share, Prefix)
+ assert share.man == '/usr/share/man'
+
+
+def test_string_like_behavior():
+ """Test string-like behavior of the prefix object"""
+ prefix = Prefix('/usr')
+
+ assert prefix == '/usr'
+ assert isinstance(prefix, str)
+
+ assert prefix + '/bin' == '/usr/bin'
+ assert '--prefix=%s' % prefix == '--prefix=/usr'
+ assert '--prefix={0}'.format(prefix) == '--prefix=/usr'
+
+ assert prefix.find('u', 1)
+ assert prefix.upper() == '/USR'
+ assert prefix.lstrip('/') == 'usr'
diff --git a/lib/spack/spack/test/variant.py b/lib/spack/spack/test/variant.py
new file mode 100644
index 0000000000..6bb7dc78e4
--- /dev/null
+++ b/lib/spack/spack/test/variant.py
@@ -0,0 +1,713 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import pytest
+import numbers
+
+from spack.variant import Variant, SingleValuedVariant, VariantMap
+from spack.variant import MultiValuedVariant, BoolValuedVariant
+from spack.variant import UnsatisfiableVariantSpecError
+from spack.variant import InconsistentValidationError
+from spack.variant import MultipleValuesInExclusiveVariantError
+from spack.variant import InvalidVariantValueError, DuplicateVariantError
+
+
+class TestMultiValuedVariant(object):
+
+ def test_initialization(self):
+
+ # Basic properties
+ a = MultiValuedVariant('foo', 'bar,baz')
+ assert repr(a) == "MultiValuedVariant('foo', 'bar,baz')"
+ assert str(a) == 'foo=bar,baz'
+ assert a.value == ('bar', 'baz')
+ assert 'bar' in a
+ assert 'baz' in a
+ assert eval(repr(a)) == a
+
+ # Spaces are trimmed
+ b = MultiValuedVariant('foo', 'bar, baz')
+ assert repr(b) == "MultiValuedVariant('foo', 'bar, baz')"
+ assert str(b) == 'foo=bar,baz'
+ assert b.value == ('bar', 'baz')
+ assert 'bar' in b
+ assert 'baz' in b
+ assert a == b
+ assert hash(a) == hash(b)
+ assert eval(repr(b)) == a
+
+ # Order is not important
+ c = MultiValuedVariant('foo', 'baz, bar')
+ assert repr(c) == "MultiValuedVariant('foo', 'baz, bar')"
+ assert str(c) == 'foo=bar,baz'
+ assert c.value == ('bar', 'baz')
+ assert 'bar' in c
+ assert 'baz' in c
+ assert a == c
+ assert hash(a) == hash(c)
+ assert eval(repr(c)) == a
+
+ # Check the copy
+ d = a.copy()
+ assert repr(a) == repr(d)
+ assert str(a) == str(d)
+ assert d.value == ('bar', 'baz')
+ assert 'bar' in d
+ assert 'baz' in d
+ assert a == d
+ assert a is not d
+ assert hash(a) == hash(d)
+ assert eval(repr(d)) == a
+
+ def test_satisfies(self):
+
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = MultiValuedVariant('foo', 'bar')
+ c = MultiValuedVariant('fee', 'bar,baz')
+ d = MultiValuedVariant('foo', 'True')
+
+ # 'foo=bar,baz' satisfies 'foo=bar'
+ assert a.satisfies(b)
+
+ # 'foo=bar' does not satisfy 'foo=bar,baz'
+ assert not b.satisfies(a)
+
+ # 'foo=bar,baz' does not satisfy 'foo=bar,baz' and vice-versa
+ assert not a.satisfies(c)
+ assert not c.satisfies(a)
+
+ # Implicit type conversion for variants of other types
+
+ b_sv = SingleValuedVariant('foo', 'bar')
+ assert b.satisfies(b_sv)
+ d_sv = SingleValuedVariant('foo', 'True')
+ assert d.satisfies(d_sv)
+ almost_d_bv = SingleValuedVariant('foo', 'true')
+ assert not d.satisfies(almost_d_bv)
+
+ d_bv = BoolValuedVariant('foo', 'True')
+ assert d.satisfies(d_bv)
+ # This case is 'peculiar': the two BV instances are
+ # equivalent, but if converted to MV they are not
+ # as MV is case sensitive with respect to 'True' and 'False'
+ almost_d_bv = BoolValuedVariant('foo', 'true')
+ assert not d.satisfies(almost_d_bv)
+
+ def test_compatible(self):
+
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = MultiValuedVariant('foo', 'True')
+ c = MultiValuedVariant('fee', 'bar,baz')
+ d = MultiValuedVariant('foo', 'bar,barbaz')
+
+ # If the name of two multi-valued variants is the same,
+ # they are compatible
+ assert a.compatible(b)
+ assert not a.compatible(c)
+ assert a.compatible(d)
+
+ assert b.compatible(a)
+ assert not b.compatible(c)
+ assert b.compatible(d)
+
+ assert not c.compatible(a)
+ assert not c.compatible(b)
+ assert not c.compatible(d)
+
+ assert d.compatible(a)
+ assert d.compatible(b)
+ assert not d.compatible(c)
+
+ # Implicit type conversion for other types
+
+ b_sv = SingleValuedVariant('foo', 'True')
+ assert b.compatible(b_sv)
+ assert not c.compatible(b_sv)
+
+ b_bv = BoolValuedVariant('foo', 'True')
+ assert b.compatible(b_bv)
+ assert not c.compatible(b_bv)
+
+ def test_constrain(self):
+
+ # Try to constrain on a value with less constraints than self
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = MultiValuedVariant('foo', 'bar')
+
+ changed = a.constrain(b)
+ assert not changed
+ t = MultiValuedVariant('foo', 'bar,baz')
+ assert a == t
+
+ # Try to constrain on a value with more constraints than self
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = MultiValuedVariant('foo', 'bar')
+
+ changed = b.constrain(a)
+ assert changed
+ t = MultiValuedVariant('foo', 'bar,baz')
+ assert a == t
+
+ # Try to constrain on the same value
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = a.copy()
+
+ changed = a.constrain(b)
+ assert not changed
+ t = MultiValuedVariant('foo', 'bar,baz')
+ assert a == t
+
+ # Try to constrain on a different name
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b = MultiValuedVariant('fee', 'bar')
+
+ with pytest.raises(ValueError):
+ a.constrain(b)
+
+ # Implicit type conversion for variants of other types
+
+ a = MultiValuedVariant('foo', 'bar,baz')
+ b_sv = SingleValuedVariant('foo', 'bar')
+ c_sv = SingleValuedVariant('foo', 'barbaz')
+
+ assert not a.constrain(b_sv)
+ assert a.constrain(c_sv)
+
+ d_bv = BoolValuedVariant('foo', 'True')
+
+ assert a.constrain(d_bv)
+ assert not a.constrain(d_bv)
+
+ def test_yaml_entry(self):
+
+ a = MultiValuedVariant('foo', 'bar,baz,barbaz')
+ b = MultiValuedVariant('foo', 'bar, baz, barbaz')
+ expected = ('foo', sorted(['bar', 'baz', 'barbaz']))
+
+ assert a.yaml_entry() == expected
+ assert b.yaml_entry() == expected
+
+ a = MultiValuedVariant('foo', 'bar')
+ expected = ('foo', sorted(['bar']))
+
+ assert a.yaml_entry() == expected
+
+
+class TestSingleValuedVariant(object):
+
+ def test_initialization(self):
+
+ # Basic properties
+ a = SingleValuedVariant('foo', 'bar')
+ assert repr(a) == "SingleValuedVariant('foo', 'bar')"
+ assert str(a) == 'foo=bar'
+ assert a.value == 'bar'
+ assert 'bar' in a
+ assert eval(repr(a)) == a
+
+ # Raise if multiple values are passed
+ with pytest.raises(ValueError):
+ SingleValuedVariant('foo', 'bar, baz')
+
+ # Check the copy
+ b = a.copy()
+ assert repr(a) == repr(b)
+ assert str(a) == str(b)
+ assert b.value == 'bar'
+ assert 'bar' in b
+ assert a == b
+ assert a is not b
+ assert hash(a) == hash(b)
+ assert eval(repr(b)) == a
+
+ def test_satisfies(self):
+ a = SingleValuedVariant('foo', 'bar')
+ b = SingleValuedVariant('foo', 'bar')
+ c = SingleValuedVariant('foo', 'baz')
+ d = SingleValuedVariant('fee', 'bar')
+ e = SingleValuedVariant('foo', 'True')
+
+ # 'foo=bar' can only satisfy 'foo=bar'
+ assert a.satisfies(b)
+ assert not a.satisfies(c)
+ assert not a.satisfies(d)
+
+ assert b.satisfies(a)
+ assert not b.satisfies(c)
+ assert not b.satisfies(d)
+
+ assert not c.satisfies(a)
+ assert not c.satisfies(b)
+ assert not c.satisfies(d)
+
+ # Implicit type conversion for variants of other types
+
+ a_mv = MultiValuedVariant('foo', 'bar')
+ assert a.satisfies(a_mv)
+ multiple_values = MultiValuedVariant('foo', 'bar,baz')
+ assert not a.satisfies(multiple_values)
+
+ e_bv = BoolValuedVariant('foo', 'True')
+ assert e.satisfies(e_bv)
+ almost_e_bv = BoolValuedVariant('foo', 'true')
+ assert not e.satisfies(almost_e_bv)
+
+ def test_compatible(self):
+
+ a = SingleValuedVariant('foo', 'bar')
+ b = SingleValuedVariant('fee', 'bar')
+ c = SingleValuedVariant('foo', 'baz')
+ d = SingleValuedVariant('foo', 'bar')
+
+ # If the name of two multi-valued variants is the same,
+ # they are compatible
+ assert not a.compatible(b)
+ assert not a.compatible(c)
+ assert a.compatible(d)
+
+ assert not b.compatible(a)
+ assert not b.compatible(c)
+ assert not b.compatible(d)
+
+ assert not c.compatible(a)
+ assert not c.compatible(b)
+ assert not c.compatible(d)
+
+ assert d.compatible(a)
+ assert not d.compatible(b)
+ assert not d.compatible(c)
+
+ # Implicit type conversion for variants of other types
+
+ a_mv = MultiValuedVariant('foo', 'bar')
+ b_mv = MultiValuedVariant('fee', 'bar')
+ c_mv = MultiValuedVariant('foo', 'baz')
+ d_mv = MultiValuedVariant('foo', 'bar')
+
+ assert not a.compatible(b_mv)
+ assert not a.compatible(c_mv)
+ assert a.compatible(d_mv)
+
+ assert not b.compatible(a_mv)
+ assert not b.compatible(c_mv)
+ assert not b.compatible(d_mv)
+
+ assert not c.compatible(a_mv)
+ assert not c.compatible(b_mv)
+ assert not c.compatible(d_mv)
+
+ assert d.compatible(a_mv)
+ assert not d.compatible(b_mv)
+ assert not d.compatible(c_mv)
+
+ e = SingleValuedVariant('foo', 'True')
+ e_bv = BoolValuedVariant('foo', 'True')
+ almost_e_bv = BoolValuedVariant('foo', 'true')
+
+ assert e.compatible(e_bv)
+ assert not e.compatible(almost_e_bv)
+
+ def test_constrain(self):
+
+ # Try to constrain on a value equal to self
+ a = SingleValuedVariant('foo', 'bar')
+ b = SingleValuedVariant('foo', 'bar')
+
+ changed = a.constrain(b)
+ assert not changed
+ t = SingleValuedVariant('foo', 'bar')
+ assert a == t
+
+ # Try to constrain on a value with a different value
+ a = SingleValuedVariant('foo', 'bar')
+ b = SingleValuedVariant('foo', 'baz')
+
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ b.constrain(a)
+
+ # Try to constrain on a value with a different value
+ a = SingleValuedVariant('foo', 'bar')
+ b = SingleValuedVariant('fee', 'bar')
+
+ with pytest.raises(ValueError):
+ b.constrain(a)
+
+ # Try to constrain on the same value
+ a = SingleValuedVariant('foo', 'bar')
+ b = a.copy()
+
+ changed = a.constrain(b)
+ assert not changed
+ t = SingleValuedVariant('foo', 'bar')
+ assert a == t
+
+ # Implicit type conversion for variants of other types
+ a = SingleValuedVariant('foo', 'True')
+ mv = MultiValuedVariant('foo', 'True')
+ bv = BoolValuedVariant('foo', 'True')
+ for v in (mv, bv):
+ assert not a.constrain(v)
+
+ def test_yaml_entry(self):
+ a = SingleValuedVariant('foo', 'bar')
+ expected = ('foo', 'bar')
+
+ assert a.yaml_entry() == expected
+
+
+class TestBoolValuedVariant(object):
+
+ def test_initialization(self):
+ # Basic properties - True value
+ for v in (True, 'True', 'TRUE', 'TrUe'):
+ a = BoolValuedVariant('foo', v)
+ assert repr(a) == "BoolValuedVariant('foo', {0})".format(repr(v))
+ assert str(a) == '+foo'
+ assert a.value is True
+ assert True in a
+ assert eval(repr(a)) == a
+
+ # Copy - True value
+ b = a.copy()
+ assert repr(a) == repr(b)
+ assert str(a) == str(b)
+ assert b.value is True
+ assert True in b
+ assert a == b
+ assert a is not b
+ assert hash(a) == hash(b)
+ assert eval(repr(b)) == a
+
+ # Basic properties - False value
+ for v in (False, 'False', 'FALSE', 'FaLsE'):
+ a = BoolValuedVariant('foo', v)
+ assert repr(a) == "BoolValuedVariant('foo', {0})".format(repr(v))
+ assert str(a) == '~foo'
+ assert a.value is False
+ assert False in a
+ assert eval(repr(a)) == a
+
+ # Copy - True value
+ b = a.copy()
+ assert repr(a) == repr(b)
+ assert str(a) == str(b)
+ assert b.value is False
+ assert False in b
+ assert a == b
+ assert a is not b
+ assert eval(repr(b)) == a
+
+ # Invalid values
+ for v in ('bar', 'bar,baz'):
+ with pytest.raises(ValueError):
+ BoolValuedVariant('foo', v)
+
+ def test_satisfies(self):
+ a = BoolValuedVariant('foo', True)
+ b = BoolValuedVariant('foo', False)
+ c = BoolValuedVariant('fee', False)
+ d = BoolValuedVariant('foo', 'True')
+
+ assert not a.satisfies(b)
+ assert not a.satisfies(c)
+ assert a.satisfies(d)
+
+ assert not b.satisfies(a)
+ assert not b.satisfies(c)
+ assert not b.satisfies(d)
+
+ assert not c.satisfies(a)
+ assert not c.satisfies(b)
+ assert not c.satisfies(d)
+
+ assert d.satisfies(a)
+ assert not d.satisfies(b)
+ assert not d.satisfies(c)
+
+ # BV variants are case insensitive to 'True' or 'False'
+ d_mv = MultiValuedVariant('foo', 'True')
+ assert d.satisfies(d_mv)
+ assert not b.satisfies(d_mv)
+
+ d_mv = MultiValuedVariant('foo', 'FaLsE')
+ assert not d.satisfies(d_mv)
+ assert b.satisfies(d_mv)
+
+ d_mv = MultiValuedVariant('foo', 'bar')
+ assert not d.satisfies(d_mv)
+ assert not b.satisfies(d_mv)
+
+ d_sv = SingleValuedVariant('foo', 'True')
+ assert d.satisfies(d_sv)
+
+ def test_compatible(self):
+
+ a = BoolValuedVariant('foo', True)
+ b = BoolValuedVariant('fee', True)
+ c = BoolValuedVariant('foo', False)
+ d = BoolValuedVariant('foo', 'True')
+
+ # If the name of two multi-valued variants is the same,
+ # they are compatible
+ assert not a.compatible(b)
+ assert not a.compatible(c)
+ assert a.compatible(d)
+
+ assert not b.compatible(a)
+ assert not b.compatible(c)
+ assert not b.compatible(d)
+
+ assert not c.compatible(a)
+ assert not c.compatible(b)
+ assert not c.compatible(d)
+
+ assert d.compatible(a)
+ assert not d.compatible(b)
+ assert not d.compatible(c)
+
+ for value in ('True', 'TrUe', 'TRUE'):
+ d_mv = MultiValuedVariant('foo', value)
+ assert d.compatible(d_mv)
+ assert not c.compatible(d_mv)
+
+ d_sv = SingleValuedVariant('foo', value)
+ assert d.compatible(d_sv)
+ assert not c.compatible(d_sv)
+
+ def test_constrain(self):
+ # Try to constrain on a value equal to self
+ a = BoolValuedVariant('foo', 'True')
+ b = BoolValuedVariant('foo', True)
+
+ changed = a.constrain(b)
+ assert not changed
+ t = BoolValuedVariant('foo', True)
+ assert a == t
+
+ # Try to constrain on a value with a different value
+ a = BoolValuedVariant('foo', True)
+ b = BoolValuedVariant('foo', False)
+
+ with pytest.raises(UnsatisfiableVariantSpecError):
+ b.constrain(a)
+
+ # Try to constrain on a value with a different value
+ a = BoolValuedVariant('foo', True)
+ b = BoolValuedVariant('fee', True)
+
+ with pytest.raises(ValueError):
+ b.constrain(a)
+
+ # Try to constrain on the same value
+ a = BoolValuedVariant('foo', True)
+ b = a.copy()
+
+ changed = a.constrain(b)
+ assert not changed
+ t = BoolValuedVariant('foo', True)
+ assert a == t
+
+ # Try to constrain on other values
+ a = BoolValuedVariant('foo', 'True')
+ sv = SingleValuedVariant('foo', 'True')
+ mv = MultiValuedVariant('foo', 'True')
+ for v in (sv, mv):
+ assert not a.constrain(v)
+
+ def test_yaml_entry(self):
+
+ a = BoolValuedVariant('foo', 'True')
+ expected = ('foo', True)
+ assert a.yaml_entry() == expected
+
+ a = BoolValuedVariant('foo', 'False')
+ expected = ('foo', False)
+ assert a.yaml_entry() == expected
+
+
+def test_from_node_dict():
+ a = MultiValuedVariant.from_node_dict('foo', ['bar'])
+ assert type(a) == MultiValuedVariant
+
+ a = MultiValuedVariant.from_node_dict('foo', 'bar')
+ assert type(a) == SingleValuedVariant
+
+ a = MultiValuedVariant.from_node_dict('foo', 'true')
+ assert type(a) == BoolValuedVariant
+
+
+class TestVariant(object):
+
+ def test_validation(self):
+ a = Variant(
+ 'foo',
+ default='',
+ description='',
+ values=('bar', 'baz', 'foobar'),
+ multi=False
+ )
+ # Valid vspec, shouldn't raise
+ vspec = a.make_variant('bar')
+ a.validate_or_raise(vspec)
+
+ # Multiple values are not allowed
+ with pytest.raises(MultipleValuesInExclusiveVariantError):
+ vspec.value = 'bar,baz'
+
+ # Inconsistent vspec
+ vspec.name = 'FOO'
+ with pytest.raises(InconsistentValidationError):
+ a.validate_or_raise(vspec)
+
+ # Valid multi-value vspec
+ a.multi = True
+ vspec = a.make_variant('bar,baz')
+ a.validate_or_raise(vspec)
+ # Add an invalid value
+ vspec.value = 'bar,baz,barbaz'
+ with pytest.raises(InvalidVariantValueError):
+ a.validate_or_raise(vspec)
+
+ def test_callable_validator(self):
+
+ def validator(x):
+ try:
+ return isinstance(int(x), numbers.Integral)
+ except ValueError:
+ return False
+
+ a = Variant(
+ 'foo',
+ default=1024,
+ description='',
+ values=validator,
+ multi=False
+ )
+ vspec = a.make_default()
+ a.validate_or_raise(vspec)
+ vspec.value = 2056
+ a.validate_or_raise(vspec)
+ vspec.value = 'foo'
+ with pytest.raises(InvalidVariantValueError):
+ a.validate_or_raise(vspec)
+
+ def test_representation(self):
+ a = Variant(
+ 'foo',
+ default='',
+ description='',
+ values=('bar', 'baz', 'foobar'),
+ multi=False
+ )
+ assert a.allowed_values == 'bar, baz, foobar'
+
+
+class TestVariantMapTest(object):
+
+ def test_invalid_values(self):
+ # Value with invalid type
+ a = VariantMap(None)
+ with pytest.raises(TypeError):
+ a['foo'] = 2
+
+ # Duplicate variant
+ a['foo'] = MultiValuedVariant('foo', 'bar,baz')
+ with pytest.raises(DuplicateVariantError):
+ a['foo'] = MultiValuedVariant('foo', 'bar')
+
+ with pytest.raises(DuplicateVariantError):
+ a['foo'] = SingleValuedVariant('foo', 'bar')
+
+ with pytest.raises(DuplicateVariantError):
+ a['foo'] = BoolValuedVariant('foo', True)
+
+ # Non matching names between key and vspec.name
+ with pytest.raises(KeyError):
+ a['bar'] = MultiValuedVariant('foo', 'bar')
+
+ def test_set_item(self):
+ # Check that all the three types of variants are accepted
+ a = VariantMap(None)
+
+ a['foo'] = BoolValuedVariant('foo', True)
+ a['bar'] = SingleValuedVariant('bar', 'baz')
+ a['foobar'] = MultiValuedVariant('foobar', 'a, b, c, d, e')
+
+ def test_substitute(self):
+ # Check substitution of a key that exists
+ a = VariantMap(None)
+ a['foo'] = BoolValuedVariant('foo', True)
+ a.substitute(SingleValuedVariant('foo', 'bar'))
+
+ # Trying to substitute something that is not
+ # in the map will raise a KeyError
+ with pytest.raises(KeyError):
+ a.substitute(BoolValuedVariant('bar', True))
+
+ def test_satisfies_and_constrain(self):
+ # foo=bar foobar=fee feebar=foo
+ a = VariantMap(None)
+ a['foo'] = MultiValuedVariant('foo', 'bar')
+ a['foobar'] = SingleValuedVariant('foobar', 'fee')
+ a['feebar'] = SingleValuedVariant('feebar', 'foo')
+
+ # foo=bar,baz foobar=fee shared=True
+ b = VariantMap(None)
+ b['foo'] = MultiValuedVariant('foo', 'bar, baz')
+ b['foobar'] = SingleValuedVariant('foobar', 'fee')
+ b['shared'] = BoolValuedVariant('shared', True)
+
+ assert not a.satisfies(b)
+ assert b.satisfies(a)
+
+ assert not a.satisfies(b, strict=True)
+ assert not b.satisfies(a, strict=True)
+
+ # foo=bar,baz foobar=fee feebar=foo shared=True
+ c = VariantMap(None)
+ c['foo'] = MultiValuedVariant('foo', 'bar, baz')
+ c['foobar'] = SingleValuedVariant('foobar', 'fee')
+ c['feebar'] = SingleValuedVariant('feebar', 'foo')
+ c['shared'] = BoolValuedVariant('shared', True)
+
+ assert a.constrain(b)
+ assert a == c
+
+ def test_copy(self):
+ a = VariantMap(None)
+ a['foo'] = BoolValuedVariant('foo', True)
+ a['bar'] = SingleValuedVariant('bar', 'baz')
+ a['foobar'] = MultiValuedVariant('foobar', 'a, b, c, d, e')
+
+ c = a.copy()
+ assert a == c
+
+ def test_str(self):
+ c = VariantMap(None)
+ c['foo'] = MultiValuedVariant('foo', 'bar, baz')
+ c['foobar'] = SingleValuedVariant('foobar', 'fee')
+ c['feebar'] = SingleValuedVariant('feebar', 'foo')
+ c['shared'] = BoolValuedVariant('shared', True)
+ assert str(c) == ' feebar=foo foo=bar,baz foobar=fee +shared'
diff --git a/lib/spack/spack/test/versions.py b/lib/spack/spack/test/versions.py
index c1d427783c..c0136c41dc 100644
--- a/lib/spack/spack/test/versions.py
+++ b/lib/spack/spack/test/versions.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,413 +22,491 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""
-These version tests were taken from the RPM source code.
+"""These version tests were taken from the RPM source code.
We try to maintain compatibility with RPM's version semantics
where it makes sense.
"""
-import unittest
-
-from spack.version import *
-
-
-class VersionsTest(unittest.TestCase):
-
- def assert_ver_lt(self, a, b):
- a, b = ver(a), ver(b)
- self.assertTrue(a < b)
- self.assertTrue(a <= b)
- self.assertTrue(a != b)
- self.assertFalse(a == b)
- self.assertFalse(a > b)
- self.assertFalse(a >= b)
-
- def assert_ver_gt(self, a, b):
- a, b = ver(a), ver(b)
- self.assertTrue(a > b)
- self.assertTrue(a >= b)
- self.assertTrue(a != b)
- self.assertFalse(a == b)
- self.assertFalse(a < b)
- self.assertFalse(a <= b)
-
- def assert_ver_eq(self, a, b):
- a, b = ver(a), ver(b)
- self.assertFalse(a > b)
- self.assertTrue(a >= b)
- self.assertFalse(a != b)
- self.assertTrue(a == b)
- self.assertFalse(a < b)
- self.assertTrue(a <= b)
-
- def assert_in(self, needle, haystack):
- self.assertTrue(ver(needle) in ver(haystack))
-
- def assert_not_in(self, needle, haystack):
- self.assertFalse(ver(needle) in ver(haystack))
-
- def assert_canonical(self, canonical_list, version_list):
- self.assertEqual(ver(canonical_list), ver(version_list))
-
- def assert_overlaps(self, v1, v2):
- self.assertTrue(ver(v1).overlaps(ver(v2)))
-
- def assert_no_overlap(self, v1, v2):
- self.assertFalse(ver(v1).overlaps(ver(v2)))
-
- def assert_satisfies(self, v1, v2):
- self.assertTrue(ver(v1).satisfies(ver(v2)))
-
- def assert_does_not_satisfy(self, v1, v2):
- self.assertFalse(ver(v1).satisfies(ver(v2)))
-
- def check_intersection(self, expected, a, b):
- self.assertEqual(ver(expected), ver(a).intersection(ver(b)))
-
- def check_union(self, expected, a, b):
- self.assertEqual(ver(expected), ver(a).union(ver(b)))
-
- def test_two_segments(self):
- self.assert_ver_eq('1.0', '1.0')
- self.assert_ver_lt('1.0', '2.0')
- self.assert_ver_gt('2.0', '1.0')
- self.assert_ver_eq('develop', 'develop')
- self.assert_ver_lt('1.0', 'develop')
- self.assert_ver_gt('develop', '1.0')
-
- def test_three_segments(self):
- self.assert_ver_eq('2.0.1', '2.0.1')
- self.assert_ver_lt('2.0', '2.0.1')
- self.assert_ver_gt('2.0.1', '2.0')
-
- def test_alpha(self):
- # TODO: not sure whether I like this. 2.0.1a is *usually*
- # TODO: less than 2.0.1, but special-casing it makes version
- # TODO: comparison complicated. See version.py
- self.assert_ver_eq('2.0.1a', '2.0.1a')
- self.assert_ver_gt('2.0.1a', '2.0.1')
- self.assert_ver_lt('2.0.1', '2.0.1a')
-
- def test_patch(self):
- self.assert_ver_eq('5.5p1', '5.5p1')
- self.assert_ver_lt('5.5p1', '5.5p2')
- self.assert_ver_gt('5.5p2', '5.5p1')
- self.assert_ver_eq('5.5p10', '5.5p10')
- self.assert_ver_lt('5.5p1', '5.5p10')
- self.assert_ver_gt('5.5p10', '5.5p1')
-
- def test_num_alpha_with_no_separator(self):
- self.assert_ver_lt('10xyz', '10.1xyz')
- self.assert_ver_gt('10.1xyz', '10xyz')
- self.assert_ver_eq('xyz10', 'xyz10')
- self.assert_ver_lt('xyz10', 'xyz10.1')
- self.assert_ver_gt('xyz10.1', 'xyz10')
-
- def test_alpha_with_dots(self):
- self.assert_ver_eq('xyz.4', 'xyz.4')
- self.assert_ver_lt('xyz.4', '8')
- self.assert_ver_gt('8', 'xyz.4')
- self.assert_ver_lt('xyz.4', '2')
- self.assert_ver_gt('2', 'xyz.4')
-
- def test_nums_and_patch(self):
- self.assert_ver_lt('5.5p2', '5.6p1')
- self.assert_ver_gt('5.6p1', '5.5p2')
- self.assert_ver_lt('5.6p1', '6.5p1')
- self.assert_ver_gt('6.5p1', '5.6p1')
-
- def test_rc_versions(self):
- self.assert_ver_gt('6.0.rc1', '6.0')
- self.assert_ver_lt('6.0', '6.0.rc1')
-
- def test_alpha_beta(self):
- self.assert_ver_gt('10b2', '10a1')
- self.assert_ver_lt('10a2', '10b2')
-
- def test_double_alpha(self):
- self.assert_ver_eq('1.0aa', '1.0aa')
- self.assert_ver_lt('1.0a', '1.0aa')
- self.assert_ver_gt('1.0aa', '1.0a')
-
- def test_padded_numbers(self):
- self.assert_ver_eq('10.0001', '10.0001')
- self.assert_ver_eq('10.0001', '10.1')
- self.assert_ver_eq('10.1', '10.0001')
- self.assert_ver_lt('10.0001', '10.0039')
- self.assert_ver_gt('10.0039', '10.0001')
-
- def test_close_numbers(self):
- self.assert_ver_lt('4.999.9', '5.0')
- self.assert_ver_gt('5.0', '4.999.9')
-
- def test_date_stamps(self):
- self.assert_ver_eq('20101121', '20101121')
- self.assert_ver_lt('20101121', '20101122')
- self.assert_ver_gt('20101122', '20101121')
-
- def test_underscores(self):
- self.assert_ver_eq('2_0', '2_0')
- self.assert_ver_eq('2.0', '2_0')
- self.assert_ver_eq('2_0', '2.0')
-
- def test_rpm_oddities(self):
- self.assert_ver_eq('1b.fc17', '1b.fc17')
- self.assert_ver_lt('1b.fc17', '1.fc17')
- self.assert_ver_gt('1.fc17', '1b.fc17')
- self.assert_ver_eq('1g.fc17', '1g.fc17')
- self.assert_ver_gt('1g.fc17', '1.fc17')
- self.assert_ver_lt('1.fc17', '1g.fc17')
-
- # Stuff below here is not taken from RPM's tests and is
- # unique to spack
- def test_version_ranges(self):
- self.assert_ver_lt('1.2:1.4', '1.6')
- self.assert_ver_gt('1.6', '1.2:1.4')
- self.assert_ver_eq('1.2:1.4', '1.2:1.4')
- self.assertNotEqual(ver('1.2:1.4'), ver('1.2:1.6'))
-
- self.assert_ver_lt('1.2:1.4', '1.5:1.6')
- self.assert_ver_gt('1.5:1.6', '1.2:1.4')
-
- def test_contains(self):
- self.assert_in('1.3', '1.2:1.4')
- self.assert_in('1.2.5', '1.2:1.4')
- self.assert_in('1.3.5', '1.2:1.4')
- self.assert_in('1.3.5-7', '1.2:1.4')
- self.assert_not_in('1.1', '1.2:1.4')
- self.assert_not_in('1.5', '1.2:1.4')
-
- self.assert_in('1.4.2', '1.2:1.4')
- self.assert_not_in('1.4.2', '1.2:1.4.0')
-
- self.assert_in('1.2.8', '1.2.7:1.4')
- self.assert_in('1.2.7:1.4', ':')
- self.assert_not_in('1.2.5', '1.2.7:1.4')
-
- self.assert_in('1.4.1', '1.2.7:1.4')
- self.assert_not_in('1.4.1', '1.2.7:1.4.0')
-
- def test_in_list(self):
- self.assert_in('1.2', ['1.5', '1.2', '1.3'])
- self.assert_in('1.2.5', ['1.5', '1.2:1.3'])
- self.assert_in('1.5', ['1.5', '1.2:1.3'])
- self.assert_not_in('1.4', ['1.5', '1.2:1.3'])
-
- self.assert_in('1.2.5:1.2.7', [':'])
- self.assert_in('1.2.5:1.2.7', ['1.5', '1.2:1.3'])
- self.assert_not_in('1.2.5:1.5', ['1.5', '1.2:1.3'])
- self.assert_not_in('1.1:1.2.5', ['1.5', '1.2:1.3'])
-
- def test_ranges_overlap(self):
- self.assert_overlaps('1.2', '1.2')
- self.assert_overlaps('1.2.1', '1.2.1')
- self.assert_overlaps('1.2.1b', '1.2.1b')
-
- self.assert_overlaps('1.2:1.7', '1.6:1.9')
- self.assert_overlaps(':1.7', '1.6:1.9')
- self.assert_overlaps(':1.7', ':1.9')
- self.assert_overlaps(':1.7', '1.6:')
- self.assert_overlaps('1.2:', '1.6:1.9')
- self.assert_overlaps('1.2:', ':1.9')
- self.assert_overlaps('1.2:', '1.6:')
- self.assert_overlaps(':', ':')
- self.assert_overlaps(':', '1.6:1.9')
- self.assert_overlaps('1.6:1.9', ':')
-
- def test_overlap_with_containment(self):
- self.assert_in('1.6.5', '1.6')
- self.assert_in('1.6.5', ':1.6')
-
- self.assert_overlaps('1.6.5', ':1.6')
- self.assert_overlaps(':1.6', '1.6.5')
-
- self.assert_not_in(':1.6', '1.6.5')
- self.assert_in('1.6.5', ':1.6')
-
- def test_lists_overlap(self):
- self.assert_overlaps('1.2b:1.7,5', '1.6:1.9,1')
- self.assert_overlaps('1,2,3,4,5', '3,4,5,6,7')
- self.assert_overlaps('1,2,3,4,5', '5,6,7')
- self.assert_overlaps('1,2,3,4,5', '5:7')
- self.assert_overlaps('1,2,3,4,5', '3, 6:7')
- self.assert_overlaps('1, 2, 4, 6.5', '3, 6:7')
- self.assert_overlaps('1, 2, 4, 6.5', ':, 5, 8')
- self.assert_overlaps('1, 2, 4, 6.5', ':')
- self.assert_no_overlap('1, 2, 4', '3, 6:7')
- self.assert_no_overlap('1,2,3,4,5', '6,7')
- self.assert_no_overlap('1,2,3,4,5', '6:7')
-
- def test_canonicalize_list(self):
- self.assert_canonical(['1.2', '1.3', '1.4'],
- ['1.2', '1.3', '1.3', '1.4'])
-
- self.assert_canonical(['1.2', '1.3:1.4'],
- ['1.2', '1.3', '1.3:1.4'])
-
- self.assert_canonical(['1.2', '1.3:1.4'],
- ['1.2', '1.3:1.4', '1.4'])
-
- self.assert_canonical(['1.3:1.4'],
- ['1.3:1.4', '1.3', '1.3.1', '1.3.9', '1.4'])
-
- self.assert_canonical(['1.3:1.4'],
- ['1.3', '1.3.1', '1.3.9', '1.4', '1.3:1.4'])
-
- self.assert_canonical(['1.3:1.5'],
- ['1.3', '1.3.1', '1.3.9', '1.4:1.5', '1.3:1.4'])
-
- self.assert_canonical(['1.3:1.5'],
- ['1.3, 1.3.1,1.3.9,1.4:1.5,1.3:1.4'])
-
- self.assert_canonical(['1.3:1.5'],
- ['1.3, 1.3.1,1.3.9,1.4 : 1.5 , 1.3 : 1.4'])
-
- self.assert_canonical([':'],
- [':,1.3, 1.3.1,1.3.9,1.4 : 1.5 , 1.3 : 1.4'])
-
- def test_intersection(self):
- self.check_intersection('2.5',
- '1.0:2.5', '2.5:3.0')
- self.check_intersection('2.5:2.7',
- '1.0:2.7', '2.5:3.0')
- self.check_intersection('0:1', ':', '0:1')
-
- self.check_intersection(['1.0', '2.5:2.7'],
- ['1.0:2.7'], ['2.5:3.0', '1.0'])
- self.check_intersection(['2.5:2.7'],
- ['1.1:2.7'], ['2.5:3.0', '1.0'])
- self.check_intersection(['0:1'], [':'], ['0:1'])
-
- def test_intersect_with_containment(self):
- self.check_intersection('1.6.5', '1.6.5', ':1.6')
- self.check_intersection('1.6.5', ':1.6', '1.6.5')
-
- self.check_intersection('1.6:1.6.5', ':1.6.5', '1.6')
- self.check_intersection('1.6:1.6.5', '1.6', ':1.6.5')
-
- def test_union_with_containment(self):
- self.check_union(':1.6', '1.6.5', ':1.6')
- self.check_union(':1.6', ':1.6', '1.6.5')
-
- self.check_union(':1.6', ':1.6.5', '1.6')
- self.check_union(':1.6', '1.6', ':1.6.5')
-
- self.check_union(':', '1.0:', ':2.0')
-
- self.check_union('1:4', '1:3', '2:4')
- self.check_union('1:4', '2:4', '1:3')
-
- # Tests successor/predecessor case.
- self.check_union('1:4', '1:2', '3:4')
-
- def test_basic_version_satisfaction(self):
- self.assert_satisfies('4.7.3', '4.7.3')
-
- self.assert_satisfies('4.7.3', '4.7')
- self.assert_satisfies('4.7.3b2', '4.7')
- self.assert_satisfies('4.7b6', '4.7')
-
- self.assert_satisfies('4.7.3', '4')
- self.assert_satisfies('4.7.3b2', '4')
- self.assert_satisfies('4.7b6', '4')
-
- self.assert_does_not_satisfy('4.8.0', '4.9')
- self.assert_does_not_satisfy('4.8', '4.9')
- self.assert_does_not_satisfy('4', '4.9')
-
- def test_basic_version_satisfaction_in_lists(self):
- self.assert_satisfies(['4.7.3'], ['4.7.3'])
-
- self.assert_satisfies(['4.7.3'], ['4.7'])
- self.assert_satisfies(['4.7.3b2'], ['4.7'])
- self.assert_satisfies(['4.7b6'], ['4.7'])
-
- self.assert_satisfies(['4.7.3'], ['4'])
- self.assert_satisfies(['4.7.3b2'], ['4'])
- self.assert_satisfies(['4.7b6'], ['4'])
-
- self.assert_does_not_satisfy(['4.8.0'], ['4.9'])
- self.assert_does_not_satisfy(['4.8'], ['4.9'])
- self.assert_does_not_satisfy(['4'], ['4.9'])
-
- def test_version_range_satisfaction(self):
- self.assert_satisfies('4.7b6', '4.3:4.7')
- self.assert_satisfies('4.3.0', '4.3:4.7')
- self.assert_satisfies('4.3.2', '4.3:4.7')
-
- self.assert_does_not_satisfy('4.8.0', '4.3:4.7')
- self.assert_does_not_satisfy('4.3', '4.4:4.7')
-
- self.assert_satisfies('4.7b6', '4.3:4.7')
- self.assert_does_not_satisfy('4.8.0', '4.3:4.7')
-
- def test_version_range_satisfaction_in_lists(self):
- self.assert_satisfies(['4.7b6'], ['4.3:4.7'])
- self.assert_satisfies(['4.3.0'], ['4.3:4.7'])
- self.assert_satisfies(['4.3.2'], ['4.3:4.7'])
-
- self.assert_does_not_satisfy(['4.8.0'], ['4.3:4.7'])
- self.assert_does_not_satisfy(['4.3'], ['4.4:4.7'])
-
- self.assert_satisfies(['4.7b6'], ['4.3:4.7'])
- self.assert_does_not_satisfy(['4.8.0'], ['4.3:4.7'])
-
- def test_satisfaction_with_lists(self):
- self.assert_satisfies('4.7', '4.3, 4.6, 4.7')
- self.assert_satisfies('4.7.3', '4.3, 4.6, 4.7')
- self.assert_satisfies('4.6.5', '4.3, 4.6, 4.7')
- self.assert_satisfies('4.6.5.2', '4.3, 4.6, 4.7')
-
- self.assert_does_not_satisfy('4', '4.3, 4.6, 4.7')
- self.assert_does_not_satisfy('4.8.0', '4.2, 4.3:4.7')
-
- self.assert_satisfies('4.8.0', '4.2, 4.3:4.8')
- self.assert_satisfies('4.8.2', '4.2, 4.3:4.8')
-
- def test_formatted_strings(self):
- versions = '1.2.3', '1_2_3', '1-2-3'
- for item in versions:
- v = Version(item)
- self.assertEqual(v.dotted, '1.2.3')
- self.assertEqual(v.dashed, '1-2-3')
- self.assertEqual(v.underscored, '1_2_3')
- self.assertEqual(v.joined, '123')
-
- def test_repr_and_str(self):
-
- def check_repr_and_str(vrs):
- a = Version(vrs)
- self.assertEqual(repr(a), 'Version(\'' + vrs + '\')')
- b = eval(repr(a))
- self.assertEqual(a, b)
- self.assertEqual(str(a), vrs)
- self.assertEqual(str(a), str(b))
-
- check_repr_and_str('1.2.3')
- check_repr_and_str('R2016a')
- check_repr_and_str('R2016a.2-3_4')
-
- def test_get_item(self):
- a = Version('0.1_2-3')
- self.assertTrue(isinstance(a[1], int))
- # Test slicing
- b = a[0:2]
- self.assertTrue(isinstance(b, Version))
- self.assertEqual(b, Version('0.1'))
- self.assertEqual(repr(b), 'Version(\'0.1\')')
- self.assertEqual(str(b), '0.1')
- b = a[0:3]
- self.assertTrue(isinstance(b, Version))
- self.assertEqual(b, Version('0.1_2'))
- self.assertEqual(repr(b), 'Version(\'0.1_2\')')
- self.assertEqual(str(b), '0.1_2')
- b = a[1:]
- self.assertTrue(isinstance(b, Version))
- self.assertEqual(b, Version('1_2-3'))
- self.assertEqual(repr(b), 'Version(\'1_2-3\')')
- self.assertEqual(str(b), '1_2-3')
- # Raise TypeError on tuples
- self.assertRaises(TypeError, b.__getitem__, 1, 2)
-
-if __name__ == '__main__':
- unittest.main()
+import pytest
+
+from spack.version import Version, ver
+
+
+def assert_ver_lt(a, b):
+ """Asserts the results of comparisons when 'a' is less than 'b'."""
+ a, b = ver(a), ver(b)
+ assert a < b
+ assert a <= b
+ assert a != b
+ assert not a == b
+ assert not a > b
+ assert not a >= b
+
+
+def assert_ver_gt(a, b):
+ """Asserts the results of comparisons when 'a' is greater than 'b'."""
+ a, b = ver(a), ver(b)
+ assert a > b
+ assert a >= b
+ assert a != b
+ assert not a == b
+ assert not a < b
+ assert not a <= b
+
+
+def assert_ver_eq(a, b):
+ """Asserts the results of comparisons when 'a' is equal to 'b'."""
+ a, b = ver(a), ver(b)
+ assert not a > b
+ assert a >= b
+ assert not a != b
+ assert a == b
+ assert not a < b
+ assert a <= b
+
+
+def assert_in(needle, haystack):
+ """Asserts that 'needle' is in 'haystack'."""
+ assert ver(needle) in ver(haystack)
+
+
+def assert_not_in(needle, haystack):
+ """Asserts that 'needle' is not in 'haystack'."""
+ assert ver(needle) not in ver(haystack)
+
+
+def assert_canonical(canonical_list, version_list):
+ """Asserts that a redundant list is reduced to canonical form."""
+ assert ver(canonical_list) == ver(version_list)
+
+
+def assert_overlaps(v1, v2):
+ """Asserts that two version ranges overlaps."""
+ assert ver(v1).overlaps(ver(v2))
+
+
+def assert_no_overlap(v1, v2):
+ """Asserts that two version ranges do not overlap."""
+ assert not ver(v1).overlaps(ver(v2))
+
+
+def assert_satisfies(v1, v2):
+ """Asserts that 'v1' satisfies 'v2'."""
+ assert ver(v1).satisfies(ver(v2))
+
+
+def assert_does_not_satisfy(v1, v2):
+ """Asserts that 'v1' does not satisfy 'v2'."""
+ assert not ver(v1).satisfies(ver(v2))
+
+
+def check_intersection(expected, a, b):
+ """Asserts that 'a' intersect 'b' == 'expected'."""
+ assert ver(expected) == ver(a).intersection(ver(b))
+
+
+def check_union(expected, a, b):
+ """Asserts that 'a' union 'b' == 'expected'."""
+ assert ver(expected) == ver(a).union(ver(b))
+
+
+def test_two_segments():
+ assert_ver_eq('1.0', '1.0')
+ assert_ver_lt('1.0', '2.0')
+ assert_ver_gt('2.0', '1.0')
+ assert_ver_eq('develop', 'develop')
+ assert_ver_lt('1.0', 'develop')
+ assert_ver_gt('develop', '1.0')
+
+
+def test_three_segments():
+ assert_ver_eq('2.0.1', '2.0.1')
+ assert_ver_lt('2.0', '2.0.1')
+ assert_ver_gt('2.0.1', '2.0')
+
+
+def test_alpha():
+ # TODO: not sure whether I like this. 2.0.1a is *usually*
+ # TODO: less than 2.0.1, but special-casing it makes version
+ # TODO: comparison complicated. See version.py
+ assert_ver_eq('2.0.1a', '2.0.1a')
+ assert_ver_gt('2.0.1a', '2.0.1')
+ assert_ver_lt('2.0.1', '2.0.1a')
+
+
+def test_patch():
+ assert_ver_eq('5.5p1', '5.5p1')
+ assert_ver_lt('5.5p1', '5.5p2')
+ assert_ver_gt('5.5p2', '5.5p1')
+ assert_ver_eq('5.5p10', '5.5p10')
+ assert_ver_lt('5.5p1', '5.5p10')
+ assert_ver_gt('5.5p10', '5.5p1')
+
+
+def test_num_alpha_with_no_separator():
+ assert_ver_lt('10xyz', '10.1xyz')
+ assert_ver_gt('10.1xyz', '10xyz')
+ assert_ver_eq('xyz10', 'xyz10')
+ assert_ver_lt('xyz10', 'xyz10.1')
+ assert_ver_gt('xyz10.1', 'xyz10')
+
+
+def test_alpha_with_dots():
+ assert_ver_eq('xyz.4', 'xyz.4')
+ assert_ver_lt('xyz.4', '8')
+ assert_ver_gt('8', 'xyz.4')
+ assert_ver_lt('xyz.4', '2')
+ assert_ver_gt('2', 'xyz.4')
+
+
+def test_nums_and_patch():
+ assert_ver_lt('5.5p2', '5.6p1')
+ assert_ver_gt('5.6p1', '5.5p2')
+ assert_ver_lt('5.6p1', '6.5p1')
+ assert_ver_gt('6.5p1', '5.6p1')
+
+
+def test_rc_versions():
+ assert_ver_gt('6.0.rc1', '6.0')
+ assert_ver_lt('6.0', '6.0.rc1')
+
+
+def test_alpha_beta():
+ assert_ver_gt('10b2', '10a1')
+ assert_ver_lt('10a2', '10b2')
+
+
+def test_double_alpha():
+ assert_ver_eq('1.0aa', '1.0aa')
+ assert_ver_lt('1.0a', '1.0aa')
+ assert_ver_gt('1.0aa', '1.0a')
+
+
+def test_padded_numbers():
+ assert_ver_eq('10.0001', '10.0001')
+ assert_ver_eq('10.0001', '10.1')
+ assert_ver_eq('10.1', '10.0001')
+ assert_ver_lt('10.0001', '10.0039')
+ assert_ver_gt('10.0039', '10.0001')
+
+
+def test_close_numbers():
+ assert_ver_lt('4.999.9', '5.0')
+ assert_ver_gt('5.0', '4.999.9')
+
+
+def test_date_stamps():
+ assert_ver_eq('20101121', '20101121')
+ assert_ver_lt('20101121', '20101122')
+ assert_ver_gt('20101122', '20101121')
+
+
+def test_underscores():
+ assert_ver_eq('2_0', '2_0')
+ assert_ver_eq('2.0', '2_0')
+ assert_ver_eq('2_0', '2.0')
+ assert_ver_eq('2-0', '2_0')
+ assert_ver_eq('2_0', '2-0')
+
+
+def test_rpm_oddities():
+ assert_ver_eq('1b.fc17', '1b.fc17')
+ assert_ver_lt('1b.fc17', '1.fc17')
+ assert_ver_gt('1.fc17', '1b.fc17')
+ assert_ver_eq('1g.fc17', '1g.fc17')
+ assert_ver_gt('1g.fc17', '1.fc17')
+ assert_ver_lt('1.fc17', '1g.fc17')
+
+
+# Stuff below here is not taken from RPM's tests and is
+# unique to spack
+def test_version_ranges():
+ assert_ver_lt('1.2:1.4', '1.6')
+ assert_ver_gt('1.6', '1.2:1.4')
+ assert_ver_eq('1.2:1.4', '1.2:1.4')
+ assert ver('1.2:1.4') != ver('1.2:1.6')
+
+ assert_ver_lt('1.2:1.4', '1.5:1.6')
+ assert_ver_gt('1.5:1.6', '1.2:1.4')
+
+
+def test_contains():
+ assert_in('1.3', '1.2:1.4')
+ assert_in('1.2.5', '1.2:1.4')
+ assert_in('1.3.5', '1.2:1.4')
+ assert_in('1.3.5-7', '1.2:1.4')
+ assert_not_in('1.1', '1.2:1.4')
+ assert_not_in('1.5', '1.2:1.4')
+
+ assert_in('1.4.2', '1.2:1.4')
+ assert_not_in('1.4.2', '1.2:1.4.0')
+
+ assert_in('1.2.8', '1.2.7:1.4')
+ assert_in('1.2.7:1.4', ':')
+ assert_not_in('1.2.5', '1.2.7:1.4')
+
+ assert_in('1.4.1', '1.2.7:1.4')
+ assert_not_in('1.4.1', '1.2.7:1.4.0')
+
+
+def test_in_list():
+ assert_in('1.2', ['1.5', '1.2', '1.3'])
+ assert_in('1.2.5', ['1.5', '1.2:1.3'])
+ assert_in('1.5', ['1.5', '1.2:1.3'])
+ assert_not_in('1.4', ['1.5', '1.2:1.3'])
+
+ assert_in('1.2.5:1.2.7', [':'])
+ assert_in('1.2.5:1.2.7', ['1.5', '1.2:1.3'])
+ assert_not_in('1.2.5:1.5', ['1.5', '1.2:1.3'])
+ assert_not_in('1.1:1.2.5', ['1.5', '1.2:1.3'])
+
+
+def test_ranges_overlap():
+ assert_overlaps('1.2', '1.2')
+ assert_overlaps('1.2.1', '1.2.1')
+ assert_overlaps('1.2.1b', '1.2.1b')
+
+ assert_overlaps('1.2:1.7', '1.6:1.9')
+ assert_overlaps(':1.7', '1.6:1.9')
+ assert_overlaps(':1.7', ':1.9')
+ assert_overlaps(':1.7', '1.6:')
+ assert_overlaps('1.2:', '1.6:1.9')
+ assert_overlaps('1.2:', ':1.9')
+ assert_overlaps('1.2:', '1.6:')
+ assert_overlaps(':', ':')
+ assert_overlaps(':', '1.6:1.9')
+ assert_overlaps('1.6:1.9', ':')
+
+
+def test_overlap_with_containment():
+ assert_in('1.6.5', '1.6')
+ assert_in('1.6.5', ':1.6')
+
+ assert_overlaps('1.6.5', ':1.6')
+ assert_overlaps(':1.6', '1.6.5')
+
+ assert_not_in(':1.6', '1.6.5')
+ assert_in('1.6.5', ':1.6')
+
+
+def test_lists_overlap():
+ assert_overlaps('1.2b:1.7,5', '1.6:1.9,1')
+ assert_overlaps('1,2,3,4,5', '3,4,5,6,7')
+ assert_overlaps('1,2,3,4,5', '5,6,7')
+ assert_overlaps('1,2,3,4,5', '5:7')
+ assert_overlaps('1,2,3,4,5', '3, 6:7')
+ assert_overlaps('1, 2, 4, 6.5', '3, 6:7')
+ assert_overlaps('1, 2, 4, 6.5', ':, 5, 8')
+ assert_overlaps('1, 2, 4, 6.5', ':')
+ assert_no_overlap('1, 2, 4', '3, 6:7')
+ assert_no_overlap('1,2,3,4,5', '6,7')
+ assert_no_overlap('1,2,3,4,5', '6:7')
+
+
+def test_canonicalize_list():
+ assert_canonical(['1.2', '1.3', '1.4'], ['1.2', '1.3', '1.3', '1.4'])
+
+ assert_canonical(['1.2', '1.3:1.4'], ['1.2', '1.3', '1.3:1.4'])
+
+ assert_canonical(['1.2', '1.3:1.4'], ['1.2', '1.3:1.4', '1.4'])
+
+ assert_canonical(['1.3:1.4'], ['1.3:1.4', '1.3', '1.3.1', '1.3.9', '1.4'])
+
+ assert_canonical(['1.3:1.4'], ['1.3', '1.3.1', '1.3.9', '1.4', '1.3:1.4'])
+
+ assert_canonical(
+ ['1.3:1.5'], ['1.3', '1.3.1', '1.3.9', '1.4:1.5', '1.3:1.4']
+ )
+
+ assert_canonical(['1.3:1.5'], ['1.3, 1.3.1,1.3.9,1.4:1.5,1.3:1.4'])
+
+ assert_canonical(['1.3:1.5'], ['1.3, 1.3.1,1.3.9,1.4 : 1.5 , 1.3 : 1.4'])
+
+ assert_canonical([':'], [':,1.3, 1.3.1,1.3.9,1.4 : 1.5 , 1.3 : 1.4'])
+
+
+def test_intersection():
+ check_intersection('2.5', '1.0:2.5', '2.5:3.0')
+ check_intersection('2.5:2.7', '1.0:2.7', '2.5:3.0')
+ check_intersection('0:1', ':', '0:1')
+
+ check_intersection(['1.0', '2.5:2.7'], ['1.0:2.7'], ['2.5:3.0', '1.0'])
+ check_intersection(['2.5:2.7'], ['1.1:2.7'], ['2.5:3.0', '1.0'])
+ check_intersection(['0:1'], [':'], ['0:1'])
+
+
+def test_intersect_with_containment():
+ check_intersection('1.6.5', '1.6.5', ':1.6')
+ check_intersection('1.6.5', ':1.6', '1.6.5')
+
+ check_intersection('1.6:1.6.5', ':1.6.5', '1.6')
+ check_intersection('1.6:1.6.5', '1.6', ':1.6.5')
+
+
+def test_union_with_containment():
+ check_union(':1.6', '1.6.5', ':1.6')
+ check_union(':1.6', ':1.6', '1.6.5')
+
+ check_union(':1.6', ':1.6.5', '1.6')
+ check_union(':1.6', '1.6', ':1.6.5')
+
+ check_union(':', '1.0:', ':2.0')
+
+ check_union('1:4', '1:3', '2:4')
+ check_union('1:4', '2:4', '1:3')
+
+ # Tests successor/predecessor case.
+ check_union('1:4', '1:2', '3:4')
+
+
+def test_basic_version_satisfaction():
+ assert_satisfies('4.7.3', '4.7.3')
+
+ assert_satisfies('4.7.3', '4.7')
+ assert_satisfies('4.7.3b2', '4.7')
+ assert_satisfies('4.7b6', '4.7')
+
+ assert_satisfies('4.7.3', '4')
+ assert_satisfies('4.7.3b2', '4')
+ assert_satisfies('4.7b6', '4')
+
+ assert_does_not_satisfy('4.8.0', '4.9')
+ assert_does_not_satisfy('4.8', '4.9')
+ assert_does_not_satisfy('4', '4.9')
+
+
+def test_basic_version_satisfaction_in_lists():
+ assert_satisfies(['4.7.3'], ['4.7.3'])
+
+ assert_satisfies(['4.7.3'], ['4.7'])
+ assert_satisfies(['4.7.3b2'], ['4.7'])
+ assert_satisfies(['4.7b6'], ['4.7'])
+
+ assert_satisfies(['4.7.3'], ['4'])
+ assert_satisfies(['4.7.3b2'], ['4'])
+ assert_satisfies(['4.7b6'], ['4'])
+
+ assert_does_not_satisfy(['4.8.0'], ['4.9'])
+ assert_does_not_satisfy(['4.8'], ['4.9'])
+ assert_does_not_satisfy(['4'], ['4.9'])
+
+
+def test_version_range_satisfaction():
+ assert_satisfies('4.7b6', '4.3:4.7')
+ assert_satisfies('4.3.0', '4.3:4.7')
+ assert_satisfies('4.3.2', '4.3:4.7')
+
+ assert_does_not_satisfy('4.8.0', '4.3:4.7')
+ assert_does_not_satisfy('4.3', '4.4:4.7')
+
+ assert_satisfies('4.7b6', '4.3:4.7')
+ assert_does_not_satisfy('4.8.0', '4.3:4.7')
+
+
+def test_version_range_satisfaction_in_lists():
+ assert_satisfies(['4.7b6'], ['4.3:4.7'])
+ assert_satisfies(['4.3.0'], ['4.3:4.7'])
+ assert_satisfies(['4.3.2'], ['4.3:4.7'])
+
+ assert_does_not_satisfy(['4.8.0'], ['4.3:4.7'])
+ assert_does_not_satisfy(['4.3'], ['4.4:4.7'])
+
+ assert_satisfies(['4.7b6'], ['4.3:4.7'])
+ assert_does_not_satisfy(['4.8.0'], ['4.3:4.7'])
+
+
+def test_satisfaction_with_lists():
+ assert_satisfies('4.7', '4.3, 4.6, 4.7')
+ assert_satisfies('4.7.3', '4.3, 4.6, 4.7')
+ assert_satisfies('4.6.5', '4.3, 4.6, 4.7')
+ assert_satisfies('4.6.5.2', '4.3, 4.6, 4.7')
+
+ assert_does_not_satisfy('4', '4.3, 4.6, 4.7')
+ assert_does_not_satisfy('4.8.0', '4.2, 4.3:4.7')
+
+ assert_satisfies('4.8.0', '4.2, 4.3:4.8')
+ assert_satisfies('4.8.2', '4.2, 4.3:4.8')
+
+
+def test_formatted_strings():
+ versions = (
+ '1.2.3b', '1_2_3b', '1-2-3b',
+ '1.2-3b', '1.2_3b', '1-2.3b',
+ '1-2_3b', '1_2.3b', '1_2-3b'
+ )
+ for item in versions:
+ v = Version(item)
+ assert v.dotted.string == '1.2.3b'
+ assert v.dashed.string == '1-2-3b'
+ assert v.underscored.string == '1_2_3b'
+ assert v.joined.string == '123b'
+
+ assert v.dotted.dashed.string == '1-2-3b'
+ assert v.dotted.underscored.string == '1_2_3b'
+ assert v.dotted.dotted.string == '1.2.3b'
+ assert v.dotted.joined.string == '123b'
+
+
+def test_up_to():
+ v = Version('1.23-4_5b')
+
+ assert v.up_to(1).string == '1'
+ assert v.up_to(2).string == '1.23'
+ assert v.up_to(3).string == '1.23-4'
+ assert v.up_to(4).string == '1.23-4_5'
+ assert v.up_to(5).string == '1.23-4_5b'
+
+ assert v.up_to(-1).string == '1.23-4_5'
+ assert v.up_to(-2).string == '1.23-4'
+ assert v.up_to(-3).string == '1.23'
+ assert v.up_to(-4).string == '1'
+
+ assert v.up_to(2).dotted.string == '1.23'
+ assert v.up_to(2).dashed.string == '1-23'
+ assert v.up_to(2).underscored.string == '1_23'
+ assert v.up_to(2).joined.string == '123'
+
+ assert v.dotted.up_to(2).string == '1.23' == v.up_to(2).dotted.string
+ assert v.dashed.up_to(2).string == '1-23' == v.up_to(2).dashed.string
+ assert v.underscored.up_to(2).string == '1_23'
+ assert v.up_to(2).underscored.string == '1_23'
+
+ assert v.up_to(2).up_to(1).string == '1'
+
+
+def test_repr_and_str():
+
+ def check_repr_and_str(vrs):
+ a = Version(vrs)
+ assert repr(a) == "Version('" + vrs + "')"
+ b = eval(repr(a))
+ assert a == b
+ assert str(a) == vrs
+ assert str(a) == str(b)
+
+ check_repr_and_str('1.2.3')
+ check_repr_and_str('R2016a')
+ check_repr_and_str('R2016a.2-3_4')
+
+
+def test_get_item():
+ a = Version('0.1_2-3')
+ assert isinstance(a[1], int)
+ # Test slicing
+ b = a[0:2]
+ assert isinstance(b, Version)
+ assert b == Version('0.1')
+ assert repr(b) == "Version('0.1')"
+ assert str(b) == '0.1'
+ b = a[0:3]
+ assert isinstance(b, Version)
+ assert b == Version('0.1_2')
+ assert repr(b) == "Version('0.1_2')"
+ assert str(b) == '0.1_2'
+ b = a[1:]
+ assert isinstance(b, Version)
+ assert b == Version('1_2-3')
+ assert repr(b) == "Version('1_2-3')"
+ assert str(b) == '1_2-3'
+ # Raise TypeError on tuples
+ with pytest.raises(TypeError):
+ b.__getitem__(1, 2)
diff --git a/lib/spack/spack/test/web.py b/lib/spack/spack/test/web.py
new file mode 100644
index 0000000000..82ca61f410
--- /dev/null
+++ b/lib/spack/spack/test/web.py
@@ -0,0 +1,162 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""Tests for web.py."""
+import os
+
+import spack
+from spack.util.web import spider, find_versions_of_archive
+from spack.version import ver
+
+
+web_data_path = os.path.join(spack.test_path, 'data', 'web')
+
+root = 'file://' + web_data_path + '/index.html'
+root_tarball = 'file://' + web_data_path + '/foo-0.0.0.tar.gz'
+
+page_1 = 'file://' + os.path.join(web_data_path, '1.html')
+page_2 = 'file://' + os.path.join(web_data_path, '2.html')
+page_3 = 'file://' + os.path.join(web_data_path, '3.html')
+page_4 = 'file://' + os.path.join(web_data_path, '4.html')
+
+
+def test_spider_0():
+ pages, links = spider(root, depth=0)
+
+ assert root in pages
+ assert page_1 not in pages
+ assert page_2 not in pages
+ assert page_3 not in pages
+ assert page_4 not in pages
+
+ assert "This is the root page." in pages[root]
+
+ assert root not in links
+ assert page_1 in links
+ assert page_2 not in links
+ assert page_3 not in links
+ assert page_4 not in links
+
+
+def test_spider_1():
+ pages, links = spider(root, depth=1)
+
+ assert root in pages
+ assert page_1 in pages
+ assert page_2 not in pages
+ assert page_3 not in pages
+ assert page_4 not in pages
+
+ assert "This is the root page." in pages[root]
+ assert "This is page 1." in pages[page_1]
+
+ assert root not in links
+ assert page_1 in links
+ assert page_2 in links
+ assert page_3 not in links
+ assert page_4 not in links
+
+
+def test_spider_2():
+ pages, links = spider(root, depth=2)
+
+ assert root in pages
+ assert page_1 in pages
+ assert page_2 in pages
+ assert page_3 not in pages
+ assert page_4 not in pages
+
+ assert "This is the root page." in pages[root]
+ assert "This is page 1." in pages[page_1]
+ assert "This is page 2." in pages[page_2]
+
+ assert root not in links
+ assert page_1 in links
+ assert page_1 in links
+ assert page_2 in links
+ assert page_3 in links
+ assert page_4 in links
+
+
+def test_spider_3():
+ pages, links = spider(root, depth=3)
+
+ assert root in pages
+ assert page_1 in pages
+ assert page_2 in pages
+ assert page_3 in pages
+ assert page_4 in pages
+
+ assert "This is the root page." in pages[root]
+ assert "This is page 1." in pages[page_1]
+ assert "This is page 2." in pages[page_2]
+ assert "This is page 3." in pages[page_3]
+ assert "This is page 4." in pages[page_4]
+
+ assert root in links # circular link on page 3
+ assert page_1 in links
+ assert page_1 in links
+ assert page_2 in links
+ assert page_3 in links
+ assert page_4 in links
+
+
+def test_find_versions_of_archive_0():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=0)
+ assert ver('0.0.0') in versions
+
+
+def test_find_versions_of_archive_1():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=1)
+ assert ver('0.0.0') in versions
+ assert ver('1.0.0') in versions
+
+
+def test_find_versions_of_archive_2():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=2)
+ assert ver('0.0.0') in versions
+ assert ver('1.0.0') in versions
+ assert ver('2.0.0') in versions
+
+
+def test_find_exotic_versions_of_archive_2():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=2)
+ # up for grabs to make this better.
+ assert ver('2.0.0b2') in versions
+
+
+def test_find_versions_of_archive_3():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=3)
+ assert ver('0.0.0') in versions
+ assert ver('1.0.0') in versions
+ assert ver('2.0.0') in versions
+ assert ver('3.0') in versions
+ assert ver('4.5') in versions
+
+
+def test_find_exotic_versions_of_archive_3():
+ versions = find_versions_of_archive(root_tarball, root, list_depth=3)
+ assert ver('2.0.0b2') in versions
+ assert ver('3.0a1') in versions
+ assert ver('4.5-rc5') in versions
diff --git a/lib/spack/spack/url.py b/lib/spack/spack/url.py
index a1eec6067e..5276b3165f 100644
--- a/lib/spack/spack/url.py
+++ b/lib/spack/spack/url.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,17 +28,17 @@ The idea is to allow package creators to supply nothing more than the
download location of the package, and figure out version and name information
from there.
-Example: when spack is given the following URL:
+**Example:** when spack is given the following URL:
- ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz
+ https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.12/src/hdf-4.2.12.tar.gz
-It can figure out that the package name is ruby, and that it is at version
-1.9.1-p243. This is useful for making the creation of packages simple: a user
+It can figure out that the package name is ``hdf``, and that it is at version
+``4.2.12``. This is useful for making the creation of packages simple: a user
just supplies a URL and skeleton code is generated automatically.
-Spack can also figure out that it can most likely download 1.8.1 at this URL:
+Spack can also figure out that it can most likely download 4.2.6 at this URL:
- ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.8.1.tar.gz
+ https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.6/src/hdf-4.2.6.tar.gz
This is useful if a user asks for a package at a particular version number;
spack doesn't need anyone to tell it where to get the tarball even though
@@ -46,11 +46,11 @@ it's never been told about that version before.
"""
import os
import re
-from StringIO import StringIO
-from urlparse import urlsplit, urlunsplit
+from six import StringIO
+from six.moves.urllib.parse import urlsplit, urlunsplit
import llnl.util.tty as tty
-from llnl.util.tty.color import *
+from llnl.util.tty.color import colorize
import spack.error
import spack.util.compression as comp
@@ -63,16 +63,49 @@ from spack.version import Version
# "path" seemed like the most generic term.
#
def find_list_url(url):
- """Finds a good list URL for the supplied URL. This depends on
- the site. By default, just assumes that a good list URL is the
- dirname of an archive path. For github URLs, this returns the
- URL of the project's releases page.
+ """Finds a good list URL for the supplied URL.
+
+ By default, returns the dirname of the archive path.
+
+ Provides special treatment for the following websites, which have a
+ unique list URL different from the dirname of the download URL:
+
+ ========= =======================================================
+ GitHub https://github.com/<repo>/<name>/releases
+ GitLab https://gitlab.\*/<repo>/<name>/tags
+ BitBucket https://bitbucket.org/<repo>/<name>/downloads/?tab=tags
+ CRAN https://\*.r-project.org/src/contrib/Archive/<name>
+ ========= =======================================================
+
+ Parameters:
+ url (str): The download URL for the package
+
+ Returns:
+ str: The list URL for the package
"""
url_types = [
+ # GitHub
# e.g. https://github.com/llnl/callpath/archive/v1.0.1.tar.gz
- (r'^(https://github.com/[^/]+/[^/]+)/archive/',
- lambda m: m.group(1) + '/releases')]
+ (r'(.*github\.com/[^/]+/[^/]+)',
+ lambda m: m.group(1) + '/releases'),
+
+ # GitLab
+ # e.g. https://gitlab.dkrz.de/k202009/libaec/uploads/631e85bcf877c2dcaca9b2e6d6526339/libaec-1.0.0.tar.gz
+ (r'(.*gitlab[^/]+/[^/]+/[^/]+)',
+ lambda m: m.group(1) + '/tags'),
+
+ # BitBucket
+ # e.g. https://bitbucket.org/eigen/eigen/get/3.3.3.tar.bz2
+ (r'(.*bitbucket.org/[^/]+/[^/]+)',
+ lambda m: m.group(1) + '/downloads/?tab=tags'),
+
+ # CRAN
+ # e.g. https://cran.r-project.org/src/contrib/Rcpp_0.12.9.tar.gz
+ # e.g. https://cloud.r-project.org/src/contrib/rgl_0.98.1.tar.gz
+ (r'(.*\.r-project\.org/src/contrib)/([^_]+)',
+ lambda m: m.group(1) + '/Archive/' + m.group(2)),
+ ]
for pattern, fun in url_types:
match = re.search(pattern, url)
@@ -101,32 +134,211 @@ def strip_query_and_fragment(path):
return (path, '') # Ignore URL parse errors here
+def strip_version_suffixes(path):
+ """Some tarballs contain extraneous information after the version:
+
+ * ``bowtie2-2.2.5-source``
+ * ``libevent-2.0.21-stable``
+ * ``cuda_8.0.44_linux.run``
+
+ These strings are not part of the version number and should be ignored.
+ This function strips those suffixes off and returns the remaining string.
+ The goal is that the version is always the last thing in ``path``:
+
+ * ``bowtie2-2.2.5``
+ * ``libevent-2.0.21``
+ * ``cuda_8.0.44``
+
+ Args:
+ path (str): The filename or URL for the package
+
+ Returns:
+ str: The ``path`` with any extraneous suffixes removed
+ """
+ # NOTE: This could be done with complicated regexes in parse_version_offset
+ # NOTE: The problem is that we would have to add these regexes to the end
+ # NOTE: of every single version regex. Easier to just strip them off
+ # NOTE: permanently
+
+ suffix_regexes = [
+ # Download type
+ '[Ii]nstall',
+ 'all',
+ 'src(_0)?',
+ '[Ss]ources?',
+ 'file',
+ 'full',
+ 'single',
+ 'public',
+ 'with[a-zA-Z_-]+',
+ 'bin',
+ 'binary',
+ 'run',
+ '[Uu]niversal',
+ 'jar',
+ 'complete',
+ 'dynamic',
+ 'oss',
+ 'gem',
+ 'tar',
+ 'sh',
+
+ # Download version
+ 'release',
+ 'stable',
+ '[Ff]inal',
+ 'rel',
+ 'orig',
+ 'dist',
+ '\+',
+
+ # License
+ 'gpl',
+
+ # Arch
+ # Needs to come before and after OS, appears in both orders
+ 'ia32',
+ 'intel',
+ 'amd64',
+ 'x64',
+ 'x86_64',
+ 'x86',
+ 'i[36]86',
+ 'ppc64(le)?',
+ 'armv?(7l|6l|64)',
+
+ # OS
+ '[Ll]inux(_64)?',
+ '[Uu]ni?x',
+ '[Ss]un[Oo][Ss]',
+ '[Mm]ac[Oo][Ss][Xx]?',
+ '[Oo][Ss][Xx]',
+ '[Dd]arwin(64)?',
+ '[Aa]pple',
+ '[Ww]indows',
+ '[Ww]in(64|32)?',
+ '[Cc]ygwin(64|32)?',
+ '[Mm]ingw',
+
+ # Arch
+ # Needs to come before and after OS, appears in both orders
+ 'ia32',
+ 'intel',
+ 'amd64',
+ 'x64',
+ 'x86_64',
+ 'x86',
+ 'i[36]86',
+ 'ppc64(le)?',
+ 'armv?(7l|6l|64)?',
+
+ # PyPI
+ '[._-]py[23].*\.whl',
+ '[._-]cp[23].*\.whl',
+ '[._-]win.*\.exe',
+ ]
+
+ for regex in suffix_regexes:
+ # Remove the suffix from the end of the path
+ # This may be done multiple times
+ path = re.sub(r'[._-]?' + regex + '$', '', path)
+
+ return path
+
+
+def strip_name_suffixes(path, version):
+ """Most tarballs contain a package name followed by a version number.
+ However, some also contain extraneous information in-between the name
+ and version:
+
+ * ``rgb-1.0.6``
+ * ``converge_install_2.3.16``
+ * ``jpegsrc.v9b``
+
+ These strings are not part of the package name and should be ignored.
+ This function strips the version number and any extraneous suffixes
+ off and returns the remaining string. The goal is that the name is
+ always the last thing in ``path``:
+
+ * ``rgb``
+ * ``converge``
+ * ``jpeg``
+
+ Args:
+ path (str): The filename or URL for the package
+ version (str): The version detected for this URL
+
+ Returns:
+ str: The ``path`` with any extraneous suffixes removed
+ """
+ # NOTE: This could be done with complicated regexes in parse_name_offset
+ # NOTE: The problem is that we would have to add these regexes to every
+ # NOTE: single name regex. Easier to just strip them off permanently
+
+ suffix_regexes = [
+ # Strip off the version and anything after it
+
+ # name-ver
+ # name_ver
+ # name.ver
+ r'[._-]v?' + str(version) + '.*',
+
+ # namever
+ str(version) + '.*',
+
+ # Download type
+ 'install',
+ 'src',
+ '(open)?[Ss]ources?',
+ '[._-]archive',
+ '[._-]std',
+
+ # Download version
+ 'release',
+ 'snapshot',
+ 'distrib',
+
+ # VCS
+ '0\+bzr',
+
+ # License
+ 'gpl',
+ ]
+
+ for regex in suffix_regexes:
+ # Remove the suffix from the end of the path
+ # This may be done multiple times
+ path = re.sub('[._-]?' + regex + '$', '', path)
+
+ return path
+
+
def split_url_extension(path):
"""Some URLs have a query string, e.g.:
- 1. https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true
- 2. http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz
- 3. https://gitlab.kitware.com/vtk/vtk/repository/archive.tar.bz2?ref=v7.0.0
+ 1. https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7.tgz?raw=true
+ 2. http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz
+ 3. https://gitlab.kitware.com/vtk/vtk/repository/archive.tar.bz2?ref=v7.0.0
- In (1), the query string needs to be stripped to get at the
- extension, but in (2) & (3), the filename is IN a single final query
- argument.
+ In (1), the query string needs to be stripped to get at the
+ extension, but in (2) & (3), the filename is IN a single final query
+ argument.
- This strips the URL into three pieces: prefix, ext, and suffix.
- The suffix contains anything that was stripped off the URL to
- get at the file extension. In (1), it will be '?raw=true', but
- in (2), it will be empty. In (3) the suffix is a parameter that follows
- after the file extension, e.g.:
+ This strips the URL into three pieces: ``prefix``, ``ext``, and ``suffix``.
+ The suffix contains anything that was stripped off the URL to
+ get at the file extension. In (1), it will be ``'?raw=true'``, but
+ in (2), it will be empty. In (3) the suffix is a parameter that follows
+ after the file extension, e.g.:
- 1. ('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7', '.tgz', '?raw=true')
- 2. ('http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin',
- '.tar.gz', None)
- 3. ('https://gitlab.kitware.com/vtk/vtk/repository/archive', '.tar.bz2', '?ref=v7.0.0')
+ 1. ``('https://github.com/losalamos/CLAMR/blob/packages/PowerParser_v2.0.7', '.tgz', '?raw=true')``
+ 2. ``('http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin', '.tar.gz', None)``
+ 3. ``('https://gitlab.kitware.com/vtk/vtk/repository/archive', '.tar.bz2', '?ref=v7.0.0')``
"""
prefix, ext, suffix = path, '', ''
# Strip off sourceforge download suffix.
- match = re.search(r'((?:sourceforge.net|sf.net)/.*)(/download)$', path)
+ # e.g. https://sourceforge.net/projects/glew/files/glew/2.0.0/glew-2.0.0.tgz/download
+ match = re.search(r'(.*(?:sourceforge\.net|sf\.net)/.*)(/download)$', path)
if match:
prefix, suffix = match.groups()
@@ -149,7 +361,7 @@ def determine_url_file_extension(path):
"""This returns the type of archive a URL refers to. This is
sometimes confusing because of URLs like:
- (1) https://github.com/petdance/ack/tarball/1.93_02
+ (1) https://github.com/petdance/ack/tarball/1.93_02
Where the URL doesn't actually contain the filename. We need
to know what type it is so that we can appropriately name files
@@ -166,181 +378,355 @@ def determine_url_file_extension(path):
return ext
-def parse_version_offset(path, debug=False):
- """Try to extract a version string from a filename or URL. This is taken
- largely from Homebrew's Version class."""
+def parse_version_offset(path):
+ """Try to extract a version string from a filename or URL.
+
+ Args:
+ path (str): The filename or URL for the package
+
+ Returns:
+ tuple of (Version, int, int, int, str): A tuple containing:
+ version of the package,
+ first index of version,
+ length of version string,
+ the index of the matching regex
+ the matching regex
+
+ Raises:
+ UndetectableVersionError: If the URL does not match any regexes
+ """
original_path = path
+ # path: The prefix of the URL, everything before the ext and suffix
+ # ext: The file extension
+ # suffix: Any kind of query string that begins with a '?'
path, ext, suffix = split_url_extension(path)
- # Allow matches against the basename, to avoid including parent
- # dirs in version name Remember the offset of the stem in the path
- stem = os.path.basename(path)
- offset = len(path) - len(stem)
+ # stem: Everything from path after the final '/'
+ original_stem = os.path.basename(path)
+
+ # Try to strip off anything after the version number
+ stem = strip_version_suffixes(original_stem)
+
+ # Assumptions:
+ #
+ # 1. version always comes after the name
+ # 2. separators include '-', '_', and '.'
+ # 3. names can contain A-Z, a-z, 0-9, '+', separators
+ # 4. versions can contain A-Z, a-z, 0-9, separators
+ # 5. versions always start with a digit
+ # 6. versions are often prefixed by a 'v' character
+ # 7. separators are most reliable to determine name/version boundaries
+
+ # List of the following format:
+ #
+ # [
+ # (regex, string),
+ # ...
+ # ]
+ #
+ # The first regex that matches string will be used to determine
+ # the version of the package. Thefore, hyperspecific regexes should
+ # come first while generic, catch-all regexes should come last.
+ # With that said, regular expressions are slow, so if possible, put
+ # ones that only catch one or two URLs at the bottom.
+ version_regexes = [
+ # 1st Pass: Simplest case
+ # Assume name contains no digits and version contains no letters
+ # e.g. libpng-1.6.27
+ (r'^[a-zA-Z+._-]+[._-]v?(\d[\d._-]*)$', stem),
+
+ # 2nd Pass: Version only
+ # Assume version contains no letters
- version_types = [
- # GitHub tarballs, e.g. v1.2.3
- (r'github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+)$', path),
+ # ver
+ # e.g. 3.2.7, 7.0.2-7, v3.3.0, v1_6_3
+ (r'^v?(\d[\d._-]*)$', stem),
- # e.g. https://github.com/sam-github/libnet/tarball/libnet-1.1.4
- (r'github.com/.+/(?:zip|tar)ball/.*-((\d+\.)+\d+)$', path),
+ # 3rd Pass: No separator characters are used
+ # Assume name contains no digits
- # e.g. https://github.com/isaacs/npm/tarball/v0.2.5-1
- (r'github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+-(\d+))$', path),
+ # namever
+ # e.g. turbolinux702, nauty26r7
+ (r'^[a-zA-Z+]*(\d[\da-zA-Z]*)$', stem),
- # e.g. https://github.com/petdance/ack/tarball/1.93_02
- (r'github.com/.+/(?:zip|tar)ball/v?((\d+\.)+\d+_(\d+))$', path),
+ # 4th Pass: A single separator character is used
+ # Assume name contains no digits
- # Yorick is very special.
- # e.g. https://github.com/dhmunro/yorick/archive/y_2_2_04.tar.gz
- (r'github.com/[^/]+/yorick/archive/y_(\d+(?:_\d+)*)$', path),
+ # name-name-ver-ver
+ # e.g. panda-2016-03-07, gts-snapshot-121130, cdd-061a
+ (r'^[a-zA-Z+-]*(\d[\da-zA-Z-]*)$', stem),
- # e.g. https://github.com/hpc/lwgrp/archive/v1.0.1.tar.gz
- (r'github.com/[^/]+/[^/]+/archive/(?:release-)?v?(\w+(?:[.-]\w+)*)$', path), # noqa
+ # name_name_ver_ver
+ # e.g. tinyxml_2_6_2, boost_1_55_0, tbb2017_20161128, v1_6_3
+ (r'^[a-zA-Z+_]*(\d[\da-zA-Z_]*)$', stem),
- # e.g. https://github.com/erlang/otp/tarball/OTP_R15B01 (erlang style)
- (r'[-_](R\d+[AB]\d*(-\d+)?)', path),
+ # name.name.ver.ver
+ # e.g. prank.source.150803, jpegsrc.v9b, atlas3.11.34, geant4.10.01.p03
+ (r'^[a-zA-Z+.]*(\d[\da-zA-Z.]*)$', stem),
- # e.g., https://github.com/hpc/libcircle/releases/download/0.2.1-rc.1/libcircle-0.2.1-rc.1.tar.gz
- # e.g.,
- # https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
- (r'github.com/[^/]+/[^/]+/releases/download/v?([^/]+)/.*$', path),
+ # 5th Pass: Two separator characters are used
+ # Name may contain digits, version may contain letters
- # GitLab syntax:
- # {baseUrl}{/organization}{/projectName}/repository/archive.{fileEnding}?ref={gitTag}
- # as with github releases, we hope a version can be found in the
- # git tag
- # Search dotted versions:
- # e.g., https://gitlab.kitware.com/vtk/vtk/repository/archive.tar.bz2?ref=v7.0.0
- # e.g., https://example.com/org/repo/repository/archive.tar.bz2?ref=SomePrefix-2.1.1
- (r'\?ref=(?:.*-|v)*((\d+\.)+\d+).*$', suffix),
+ # name-name-ver.ver
+ # e.g. m4-1.4.17, gmp-6.0.0a, launchmon-v1.0.2
+ (r'^[a-zA-Z\d+-]+-v?(\d[\da-zA-Z.]*)$', stem),
- # e.g. boost_1_39_0
- (r'((\d+_)+\d+)$', stem),
+ # name-name-ver_ver
+ # e.g. icu4c-57_1
+ (r'^[a-zA-Z\d+-]+-v?(\d[\da-zA-Z_]*)$', stem),
- # e.g. foobar-4.5.1-1
- # e.g. ruby-1.9.1-p243
- (r'-((\d+\.)*\d\.\d+-(p|rc|RC)?\d+)(?:[-._](?:bin|dist|stable|src|sources))?$', stem), # noqa
+ # name_name_ver.ver
+ # e.g. superlu_dist_4.1, pexsi_v0.9.0
+ (r'^[a-zA-Z\d+_]+_v?(\d[\da-zA-Z.]*)$', stem),
- # e.g. lame-398-1
- (r'-((\d)+-\d)', stem),
+ # name_name.ver.ver
+ # e.g. fer_source.v696
+ (r'^[a-zA-Z\d+_]+\.v?(\d[\da-zA-Z.]*)$', stem),
- # e.g. foobar_1.2-3 or 3.98-1.4
- (r'_((\d+\.)+\d+(-(\d+(\.\d+)?))?[a-z]?)', stem),
+ # name-name-ver.ver-ver.ver
+ # e.g. sowing-1.1.23-p1, bib2xhtml-v3.0-15-gf506, 4.6.3-alpha04
+ (r'^(?:[a-zA-Z\d+-]+-)?v?(\d[\da-zA-Z.-]*)$', stem),
- # e.g. foobar-4.5.1
- (r'-((\d+\.)*\d+)$', stem),
+ # namever.ver-ver.ver
+ # e.g. go1.4-bootstrap-20161024
+ (r'^[a-zA-Z+]+v?(\d[\da-zA-Z.-]*)$', stem),
- # e.g. foobar-4.5.1b, foobar4.5RC, foobar.v4.5.1b
- (r'[-._]?v?((\d+\.)*\d+[-._]?([a-z]|rc|RC|tp|TP?)\d*)$', stem),
+ # 6th Pass: All three separator characters are used
+ # Name may contain digits, version may contain letters
- # e.g. foobar-4.5.0-beta1, or foobar-4.50-beta
- (r'-((\d+\.)*\d+-beta(\d+)?)$', stem),
+ # name_name-ver.ver
+ # e.g. the_silver_searcher-0.32.0, sphinx_rtd_theme-0.1.10a0
+ (r'^[a-zA-Z\d+_]+-v?(\d[\da-zA-Z.]*)$', stem),
- # e.g. foobar4.5.1
- (r'((\d+\.)*\d+)$', stem),
+ # name.name_ver.ver-ver.ver
+ # e.g. TH.data_1.0-8, XML_3.98-1.4
+ (r'^[a-zA-Z\d+.]+_v?(\d[\da-zA-Z.-]*)$', stem),
+
+ # name-name-ver.ver_ver.ver
+ # e.g. pypar-2.1.5_108
+ (r'^[a-zA-Z\d+-]+-v?(\d[\da-zA-Z._]*)$', stem),
+
+ # name.name_name-ver.ver
+ # e.g. tap.py-1.6, backports.ssl_match_hostname-3.5.0.1
+ (r'^[a-zA-Z\d+._]+-v?(\d[\da-zA-Z.]*)$', stem),
+
+ # name-namever.ver_ver.ver
+ # e.g. STAR-CCM+11.06.010_02
+ (r'^[a-zA-Z+-]+(\d[\da-zA-Z._]*)$', stem),
- # e.g. foobar-4.5.0-bin
- (r'-((\d+\.)+\d+[a-z]?)[-._](bin|dist|stable|src|sources?)$', stem),
+ # 7th Pass: Specific VCS
- # e.g. dash_0.5.5.1.orig.tar.gz (Debian style)
- (r'_((\d+\.)+\d+[a-z]?)[.]orig$', stem),
+ # bazaar
+ # e.g. libvterm-0+bzr681
+ (r'bzr(\d[\da-zA-Z._-]*)$', stem),
- # e.g. http://www.openssl.org/source/openssl-0.9.8s.tar.gz
- (r'-v?([^-]+(-alpha|-beta)?)', stem),
+ # 8th Pass: Version in path
- # e.g. astyle_1.23_macosx.tar.gz
- (r'_([^_]+(_alpha|_beta)?)', stem),
+ # github.com/repo/name/releases/download/vver/name
+ # e.g. https://github.com/nextflow-io/nextflow/releases/download/v0.20.1/nextflow
+ (r'github\.com/[^/]+/[^/]+/releases/download/[a-zA-Z+._-]*v?(\d[\da-zA-Z._-]*)/', path), # noqa
- # e.g. http://mirrors.jenkins-ci.org/war/1.486/jenkins.war
- (r'\/(\d\.\d+)\/', path),
+ # 9th Pass: Query strings
- # e.g. http://www.ijg.org/files/jpegsrc.v8d.tar.gz
- (r'\.v(\d+[a-z]?)', stem)]
+ # e.g. http://gitlab.cosma.dur.ac.uk/swift/swiftsim/repository/archive.tar.gz?ref=v0.3.0
+ (r'\?ref=[a-zA-Z+._-]*v?(\d[\da-zA-Z._-]*)$', suffix),
- for i, vtype in enumerate(version_types):
- regex, match_string = vtype
+ # e.g. http://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.1
+ (r'\?version=v?(\d[\da-zA-Z._-]*)$', suffix),
+
+ # e.g. http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz
+ (r'\?filename=[a-zA-Z\d+-]+-v?(\d[\da-zA-Z.]*)$', stem),
+
+ # e.g. http://wwwpub.zih.tu-dresden.de/%7Emlieber/dcount/dcount.php?package=otf&get=OTF-1.12.5salmon.tar.gz
+ (r'\?package=[a-zA-Z\d+-]+&get=[a-zA-Z\d+-]+-v?(\d[\da-zA-Z.]*)$', stem), # noqa
+ ]
+
+ for i, version_regex in enumerate(version_regexes):
+ regex, match_string = version_regex
match = re.search(regex, match_string)
if match and match.group(1) is not None:
- if debug:
- tty.msg("Parsing URL: %s" % path,
- " Matched regex %d: r'%s'" % (i, regex))
-
version = match.group(1)
start = match.start(1)
- # if we matched from the basename, then add offset in.
+ # If we matched from the stem or suffix, we need to add offset
+ offset = 0
if match_string is stem:
- start += offset
+ offset = len(path) - len(original_stem)
+ elif match_string is suffix:
+ offset = len(path)
+ if ext:
+ offset += len(ext) + 1 # .tar.gz is converted to tar.gz
+ start += offset
- return version, start, len(version)
+ return version, start, len(version), i, regex
raise UndetectableVersionError(original_path)
-def parse_version(path, debug=False):
- """Given a URL or archive name, extract a version from it and return
- a version object.
- """
- ver, start, l = parse_version_offset(path, debug=debug)
- return Version(ver)
+def parse_version(path):
+ """Try to extract a version string from a filename or URL.
+ Args:
+ path (str): The filename or URL for the package
-def parse_name_offset(path, v=None, debug=False):
- if v is None:
- v = parse_version(path, debug=debug)
+ Returns:
+ spack.version.Version: The version of the package
- path, ext, suffix = split_url_extension(path)
+ Raises:
+ UndetectableVersionError: If the URL does not match any regexes
+ """
+ version, start, length, i, regex = parse_version_offset(path)
+ return Version(version)
- # Allow matching with either path or stem, as with the version.
- stem = os.path.basename(path)
- offset = len(path) - len(stem)
- name_types = [
- (r'/sourceforge/([^/]+)/', path),
- (r'github.com/[^/]+/[^/]+/releases/download/%s/(.*)-%s$' %
- (v, v), path),
- (r'/([^/]+)/(tarball|zipball)/', path),
- (r'/([^/]+)[_.-](bin|dist|stable|src|sources)[_.-]%s' % v, path),
- (r'github.com/[^/]+/([^/]+)/archive', path),
- (r'[^/]+/([^/]+)/repository/archive', path), # gitlab
+def parse_name_offset(path, v=None):
+ """Try to determine the name of a package from its filename or URL.
- (r'([^/]+)[_.-]v?%s' % v, stem), # prefer the stem
- (r'([^/]+)%s' % v, stem),
+ Args:
+ path (str): The filename or URL for the package
+ v (str): The version of the package
- # accept the path if name is not in stem.
- (r'/([^/]+)[_.-]v?%s' % v, path),
- (r'/([^/]+)%s' % v, path),
+ Returns:
+ tuple of (str, int, int, int, str): A tuple containing:
+ name of the package,
+ first index of name,
+ length of name,
+ the index of the matching regex
+ the matching regex
- (r'^([^/]+)[_.-]v?%s' % v, path),
- (r'^([^/]+)%s' % v, path)]
+ Raises:
+ UndetectableNameError: If the URL does not match any regexes
+ """
+ original_path = path
+
+ # We really need to know the version of the package
+ # This helps us prevent collisions between the name and version
+ if v is None:
+ try:
+ v = parse_version(path)
+ except UndetectableVersionError:
+ # Not all URLs contain a version. We still want to be able
+ # to determine a name if possible.
+ v = 'unknown'
+
+ # path: The prefix of the URL, everything before the ext and suffix
+ # ext: The file extension
+ # suffix: Any kind of query string that begins with a '?'
+ path, ext, suffix = split_url_extension(path)
- for i, name_type in enumerate(name_types):
- regex, match_string = name_type
+ # stem: Everything from path after the final '/'
+ original_stem = os.path.basename(path)
+
+ # Try to strip off anything after the package name
+ stem = strip_name_suffixes(original_stem, v)
+
+ # List of the following format:
+ #
+ # [
+ # (regex, string),
+ # ...
+ # ]
+ #
+ # The first regex that matches string will be used to determine
+ # the name of the package. Thefore, hyperspecific regexes should
+ # come first while generic, catch-all regexes should come last.
+ # With that said, regular expressions are slow, so if possible, put
+ # ones that only catch one or two URLs at the bottom.
+ name_regexes = [
+ # 1st Pass: Common repositories
+
+ # GitHub: github.com/repo/name/
+ # e.g. https://github.com/nco/nco/archive/4.6.2.tar.gz
+ (r'github\.com/[^/]+/([^/]+)', path),
+
+ # GitLab: gitlab.*/repo/name/
+ # e.g. http://gitlab.cosma.dur.ac.uk/swift/swiftsim/repository/archive.tar.gz?ref=v0.3.0
+ (r'gitlab[^/]+/[^/]+/([^/]+)', path),
+
+ # Bitbucket: bitbucket.org/repo/name/
+ # e.g. https://bitbucket.org/glotzer/hoomd-blue/get/v1.3.3.tar.bz2
+ (r'bitbucket\.org/[^/]+/([^/]+)', path),
+
+ # PyPI: pypi.(python.org|io)/packages/source/first-letter/name/
+ # e.g. https://pypi.python.org/packages/source/m/mpmath/mpmath-all-0.19.tar.gz
+ # e.g. https://pypi.io/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_hostname-3.5.0.1.tar.gz
+ (r'pypi\.(?:python\.org|io)/packages/source/[A-Za-z\d]/([^/]+)', path),
+
+ # 2nd Pass: Query strings
+
+ # ?filename=name-ver.ver
+ # e.g. http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz
+ (r'\?filename=([A-Za-z\d+-]+)$', stem),
+
+ # ?package=name
+ # e.g. http://wwwpub.zih.tu-dresden.de/%7Emlieber/dcount/dcount.php?package=otf&get=OTF-1.12.5salmon.tar.gz
+ (r'\?package=([A-Za-z\d+-]+)', stem),
+
+ # download.php
+ # e.g. http://apps.fz-juelich.de/jsc/sionlib/download.php?version=1.7.1
+ (r'([^/]+)/download.php$', path),
+
+ # 3rd Pass: Name followed by version in archive
+
+ (r'^([A-Za-z\d+\._-]+)$', stem),
+ ]
+
+ for i, name_regex in enumerate(name_regexes):
+ regex, match_string = name_regex
match = re.search(regex, match_string)
if match:
name = match.group(1)
start = match.start(1)
- # if we matched from the basename, then add offset in.
+ # If we matched from the stem or suffix, we need to add offset
+ offset = 0
if match_string is stem:
- start += offset
-
- # package names should be lowercase and separated by dashes.
- name = name.lower()
- name = re.sub('[_.]', '-', name)
+ offset = len(path) - len(original_stem)
+ elif match_string is suffix:
+ offset = len(path)
+ if ext:
+ offset += len(ext) + 1 # .tar.gz is converted to tar.gz
+ start += offset
- return name, start, len(name)
+ return name, start, len(name), i, regex
- raise UndetectableNameError(path)
+ raise UndetectableNameError(original_path)
def parse_name(path, ver=None):
- name, start, l = parse_name_offset(path, ver)
+ """Try to determine the name of a package from its filename or URL.
+
+ Args:
+ path (str): The filename or URL for the package
+ ver (str): The version of the package
+
+ Returns:
+ str: The name of the package
+
+ Raises:
+ UndetectableNameError: If the URL does not match any regexes
+ """
+ name, start, length, i, regex = parse_name_offset(path, ver)
return name
def parse_name_and_version(path):
+ """Try to determine the name of a package and extract its version
+ from its filename or URL.
+
+ Args:
+ path (str): The filename or URL for the package
+
+ Returns:
+ tuple of (str, Version)A tuple containing:
+ The name of the package
+ The version of the package
+
+ Raises:
+ UndetectableVersionError: If the URL does not match any regexes
+ UndetectableNameError: If the URL does not match any regexes
+ """
ver = parse_version(path)
name = parse_name(path, ver)
return (name, ver)
@@ -366,96 +752,82 @@ def cumsum(elts, init=0, fn=lambda x: x):
return sums
+def find_all(substring, string):
+ """Returns a list containing the indices of
+ every occurrence of substring in string."""
+
+ occurrences = []
+ index = 0
+ while index < len(string):
+ index = string.find(substring, index)
+ if index == -1:
+ break
+ occurrences.append(index)
+ index += len(substring)
+
+ return occurrences
+
+
def substitution_offsets(path):
"""This returns offsets for substituting versions and names in the
- provided path. It is a helper for substitute_version().
+ provided path. It is a helper for :func:`substitute_version`.
"""
# Get name and version offsets
try:
- ver, vs, vl = parse_version_offset(path)
- name, ns, nl = parse_name_offset(path, ver)
+ ver, vs, vl, vi, vregex = parse_version_offset(path)
+ name, ns, nl, ni, nregex = parse_name_offset(path, ver)
except UndetectableNameError:
return (None, -1, -1, (), ver, vs, vl, (vs,))
except UndetectableVersionError:
- return (None, -1, -1, (), None, -1, -1, ())
-
- # protect extensions like bz2 from getting inadvertently
- # considered versions.
- path = comp.strip_extension(path)
-
- # Construct a case-insensitive regular expression for the package name.
- name_re = '(%s)' % insensitize(name)
+ try:
+ name, ns, nl, ni, nregex = parse_name_offset(path)
+ return (name, ns, nl, (ns,), None, -1, -1, ())
+ except UndetectableNameError:
+ return (None, -1, -1, (), None, -1, -1, ())
- # Split the string apart by things that match the name so that if the
- # name contains numbers or things that look like versions, we don't
- # accidentally substitute them with a version.
- name_parts = re.split(name_re, path)
+ # Find the index of every occurrence of name and ver in path
+ name_offsets = find_all(name, path)
+ ver_offsets = find_all(ver, path)
- offsets = cumsum(name_parts, 0, len)
- name_offsets = offsets[1::2]
-
- ver_offsets = []
- for i in xrange(0, len(name_parts), 2):
- vparts = re.split(ver, name_parts[i])
- voffsets = cumsum(vparts, offsets[i], len)
- ver_offsets.extend(voffsets[1::2])
-
- return (name, ns, nl, tuple(name_offsets),
- ver, vs, vl, tuple(ver_offsets))
+ return (name, ns, nl, name_offsets,
+ ver, vs, vl, ver_offsets)
def wildcard_version(path):
"""Find the version in the supplied path, and return a regular expression
that will match this path with any version in its place.
"""
- # Get name and version, so we can treat them specially
- name, v = parse_name_and_version(path)
+ # Get version so we can replace it with a wildcard
+ version = parse_version(path)
- path, ext, suffix = split_url_extension(path)
+ # Split path by versions
+ vparts = path.split(str(version))
+
+ # Replace each version with a generic capture group to find versions
+ # and escape everything else so it's not interpreted as a regex
+ result = '(\d.*)'.join(re.escape(vp) for vp in vparts)
- # Construct a case-insensitive regular expression for the package name.
- name_re = '(%s)' % insensitize(name)
-
- # Split the string apart by things that match the name so that if the
- # name contains numbers or things that look like versions, we don't
- # catch them with the version wildcard.
- name_parts = re.split(name_re, path)
-
- # Even elements in the array did *not* match the name
- for i in xrange(0, len(name_parts), 2):
- # Split each part by things that look like versions.
- vparts = re.split(v.wildcard(), name_parts[i])
-
- # Replace each version with a generic capture group to find versions.
- # And escape everything else so it's not interpreted as a regex
- vgroup = '(%s)' % v.wildcard()
- name_parts[i] = vgroup.join(re.escape(vp) for vp in vparts)
-
- # Put it all back together with original name matches intact.
- result = ''.join(name_parts)
- if ext:
- result += '.' + ext
- result += suffix
return result
def substitute_version(path, new_version):
"""Given a URL or archive name, find the version in the path and
- substitute the new version for it. Replace all occurrences of
- the version *if* they don't overlap with the package name.
+ substitute the new version for it. Replace all occurrences of
+ the version *if* they don't overlap with the package name.
- Simple example::
- substitute_version('http://www.mr511.de/software/libelf-0.8.13.tar.gz', '2.9.3')
- ->'http://www.mr511.de/software/libelf-2.9.3.tar.gz'
+ Simple example:
- Complex examples::
- substitute_version('http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.0.tar.gz', 2.1)
- -> 'http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.1.tar.gz'
+ .. code-block:: python
- # In this string, the "2" in mvapich2 is NOT replaced.
- substitute_version('http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.tar.gz', 2.1)
- -> 'http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.1.tar.gz'
+ substitute_version('http://www.mr511.de/software/libelf-0.8.13.tar.gz', '2.9.3')
+ >>> 'http://www.mr511.de/software/libelf-2.9.3.tar.gz'
+ Complex example:
+
+ .. code-block:: python
+
+ substitute_version('https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.12/src/hdf-4.2.12.tar.gz', '2.3')
+ >>> 'https://www.hdfgroup.org/ftp/HDF/releases/HDF2.3/src/hdf-2.3.tar.gz'
"""
(name, ns, nl, noffs,
ver, vs, vl, voffs) = substitution_offsets(path)
@@ -474,17 +846,17 @@ def substitute_version(path, new_version):
def color_url(path, **kwargs):
"""Color the parts of the url according to Spack's parsing.
- Colors are:
- Cyan: The version found by parse_version_offset().
- Red: The name found by parse_name_offset().
-
- Green: Instances of version string from substitute_version().
- Magenta: Instances of the name (protected from substitution).
+ Colors are:
+ | Cyan: The version found by :func:`parse_version_offset`.
+ | Red: The name found by :func:`parse_name_offset`.
- Optional args:
- errors=True Append parse errors at end of string.
- subs=True Color substitutions as well as parsed name/version.
+ | Green: Instances of version string from :func:`substitute_version`.
+ | Magenta: Instances of the name (protected from substitution).
+ Args:
+ path (str): The filename or URL for the package
+ errors (bool): Append parse errors at end of string.
+ subs (bool): Color substitutions as well as parsed name/version.
"""
errors = kwargs.get('errors', False)
subs = kwargs.get('subs', False)
diff --git a/lib/spack/spack/util/__init__.py b/lib/spack/spack/util/__init__.py
index ed1ec23bca..8922701e9f 100644
--- a/lib/spack/spack/util/__init__.py
+++ b/lib/spack/spack/util/__init__.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/util/compression.py b/lib/spack/spack/util/compression.py
index caec70064d..3b747e08c6 100644
--- a/lib/spack/spack/util/compression.py
+++ b/lib/spack/spack/util/compression.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/util/crypto.py b/lib/spack/spack/util/crypto.py
index d074716022..13262be551 100644
--- a/lib/spack/spack/util/crypto.py
+++ b/lib/spack/spack/util/crypto.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,19 +22,20 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import sys
import hashlib
"""Set of acceptable hashes that Spack will use."""
-_acceptable_hashes = [
- hashlib.md5,
- hashlib.sha1,
- hashlib.sha224,
- hashlib.sha256,
- hashlib.sha384,
- hashlib.sha512]
+hashes = dict((h, getattr(hashlib, h)) for h in [
+ 'md5',
+ 'sha1',
+ 'sha224',
+ 'sha256',
+ 'sha384',
+ 'sha512'])
"""Index for looking up hasher for a digest."""
-_size_to_hash = dict((h().digest_size, h) for h in _acceptable_hashes)
+_size_to_hash = dict((h().digest_size, h) for h in hashes.values())
def checksum(hashlib_algo, filename, **kwargs):
@@ -43,7 +44,7 @@ def checksum(hashlib_algo, filename, **kwargs):
"""
block_size = kwargs.get('block_size', 2**20)
hasher = hashlib_algo()
- with open(filename) as file:
+ with open(filename, 'rb') as file:
while True:
data = file.read(block_size)
if not data:
@@ -104,11 +105,16 @@ class Checker(object):
def prefix_bits(byte_array, bits):
"""Return the first <bits> bits of a byte array as an integer."""
+ if sys.version_info < (3,):
+ b2i = ord # In Python 2, indexing byte_array gives str
+ else:
+ b2i = lambda b: b # In Python 3, indexing byte_array gives int
+
result = 0
n = 0
for i, b in enumerate(byte_array):
n += 8
- result = (result << 8) | ord(b)
+ result = (result << 8) | b2i(b)
if n >= bits:
break
diff --git a/lib/spack/spack/util/debug.py b/lib/spack/spack/util/debug.py
index cf485a611d..25f0600935 100644
--- a/lib/spack/spack/util/debug.py
+++ b/lib/spack/spack/util/debug.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/util/environment.py b/lib/spack/spack/util/environment.py
index 420cce8245..51f7f586ec 100644
--- a/lib/spack/spack/util/environment.py
+++ b/lib/spack/spack/util/environment.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,23 +25,26 @@
import os
system_paths = ['/', '/usr', '/usr/local']
-suffixes = ['lib', 'lib64', 'include']
+suffixes = ['bin', 'bin64', 'include', 'lib', 'lib64']
system_dirs = [os.path.join(p, s) for s in suffixes for p in system_paths] + \
system_paths
-system_bins = [os.path.join(p, 'bin') for p in system_paths]
-def filter_system_paths(paths):
- return [p for p in paths if p not in system_dirs]
+def is_system_path(path):
+ """Predicate that given a path returns True if it is a system path,
+ False otherwise.
+
+ Args:
+ path (str): path to a directory
+ Returns:
+ True or False
+ """
+ return os.path.normpath(path) in system_dirs
-def filter_system_bin_paths(paths):
- # Turn the iterable into a list. Assume it's a list from here on.
- _paths = list(paths)
- bins = [p for p in _paths if p in system_bins]
- nobins = [p for p in _paths if p not in system_bins]
- # put bins infront as PATH is set by: prepend_path('PATH', item)
- return bins + nobins
+
+def filter_system_paths(paths):
+ return [p for p in paths if not is_system_path(p)]
def get_path(name):
@@ -82,4 +85,4 @@ def dump_environment(path):
"""Dump the current environment out to a file."""
with open(path, 'w') as env_file:
for key, val in sorted(os.environ.items()):
- env_file.write("%s=%s\n" % (key, val))
+ env_file.write('export %s="%s"\n' % (key, val))
diff --git a/lib/spack/spack/util/executable.py b/lib/spack/spack/util/executable.py
index 63bbbb7c92..af516dc607 100644
--- a/lib/spack/spack/util/executable.py
+++ b/lib/spack/spack/util/executable.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,11 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-
import os
import re
import subprocess
+from six import string_types
+import sys
import llnl.util.tty as tty
import spack
@@ -46,90 +47,100 @@ class Executable(object):
raise ProcessError("Cannot construct executable for '%s'" % name)
def add_default_arg(self, arg):
+ """Add a default argument to the command."""
self.exe.append(arg)
def add_default_env(self, key, value):
+ """Set an environment variable when the command is run.
+
+ Parameters:
+ key: The environment variable to set
+ value: The value to set it to
+ """
self.default_env[key] = value
@property
def command(self):
- return ' '.join(self.exe)
-
- def __call__(self, *args, **kwargs):
- """Run this executable in a subprocess.
-
- Arguments
- args
- command line arguments to the executable to run.
-
- Optional arguments
-
- fail_on_error
+ """The command-line string.
- Raise an exception if the subprocess returns an
- error. Default is True. When not set, the return code is
- avaiale as `exe.returncode`.
-
- ignore_errors
-
- An optional list/tuple of error codes that can be
- *ignored*. i.e., if these codes are returned, this will
- not raise an exception when `fail_on_error` is `True`.
-
- output, error
-
- These arguments allow you to specify new stdout and stderr
- values. They default to `None`, which means the
- subprocess will inherit the parent's file descriptors.
-
- You can set these to:
- - python streams, e.g. open Python file objects, or os.devnull;
- - filenames, which will be automatically opened for writing; or
- - `str`, as in the Python string type. If you set these to `str`,
- output and error will be written to pipes and returned as
- a string. If both `output` and `error` are set to `str`,
- then one string is returned containing output concatenated
- with error.
+ Returns:
+ str: The executable and default arguments
+ """
+ return ' '.join(self.exe)
- input
+ @property
+ def name(self):
+ """The executable name.
- Same as output, error, but `str` is not an allowed value.
+ Returns:
+ str: The basename of the executable
+ """
+ return os.path.basename(self.path)
- Deprecated arguments
+ @property
+ def path(self):
+ """The path to the executable.
- return_output[=False]
+ Returns:
+ str: The path to the executable
+ """
+ return self.exe[0]
- Setting this to True is the same as setting output=str.
- This argument may be removed in future Spack versions.
+ def __call__(self, *args, **kwargs):
+ """Run this executable in a subprocess.
+ Parameters:
+ *args (str): Command-line arguments to the executable to run
+
+ Keyword Arguments:
+ env (dict): The environment to run the executable with
+ fail_on_error (bool): Raise an exception if the subprocess returns
+ an error. Default is True. The return code is available as
+ ``exe.returncode``
+ ignore_errors (int or list): A list of error codes to ignore.
+ If these codes are returned, this process will not raise
+ an exception even if ``fail_on_error`` is set to ``True``
+ input: Where to read stdin from
+ output: Where to send stdout
+ error: Where to send stderr
+
+ Accepted values for input, output, and error:
+
+ * python streams, e.g. open Python file objects, or ``os.devnull``
+ * filenames, which will be automatically opened for writing
+ * ``str``, as in the Python string type. If you set these to ``str``,
+ output and error will be written to pipes and returned as a string.
+ If both ``output`` and ``error`` are set to ``str``, then one string
+ is returned containing output concatenated with error. Not valid
+ for ``input``
+
+ By default, the subprocess inherits the parent's file descriptors.
"""
- fail_on_error = kwargs.pop("fail_on_error", True)
- ignore_errors = kwargs.pop("ignore_errors", ())
-
- # environment
- env = kwargs.get('env', None)
- if env is None:
+ # Environment
+ env_arg = kwargs.get('env', None)
+ if env_arg is None:
env = os.environ.copy()
env.update(self.default_env)
else:
- env = self.default_env.copy().update(env)
+ env = self.default_env.copy()
+ env.update(env_arg)
- # TODO: This is deprecated. Remove in a future version.
- return_output = kwargs.pop("return_output", False)
+ fail_on_error = kwargs.pop('fail_on_error', True)
+ ignore_errors = kwargs.pop('ignore_errors', ())
- # Default values of None says to keep parent's file descriptors.
- if return_output:
- output = str
- else:
- output = kwargs.pop("output", None)
+ # If they just want to ignore one error code, make it a tuple.
+ if isinstance(ignore_errors, int):
+ ignore_errors = (ignore_errors, )
+
+ input = kwargs.pop('input', None)
+ output = kwargs.pop('output', None)
+ error = kwargs.pop('error', None)
- error = kwargs.pop("error", None)
- input = kwargs.pop("input", None)
if input is str:
- raise ValueError("Cannot use `str` as input stream.")
+ raise ValueError('Cannot use `str` as input stream.')
def streamify(arg, mode):
- if isinstance(arg, basestring):
+ if isinstance(arg, string_types):
return open(arg, mode), True
elif arg is str:
return subprocess.PIPE, False
@@ -137,12 +148,8 @@ class Executable(object):
return arg, False
ostream, close_ostream = streamify(output, 'w')
- estream, close_estream = streamify(error, 'w')
- istream, close_istream = streamify(input, 'r')
-
- # if they just want to ignore one error code, make it a tuple.
- if isinstance(ignore_errors, int):
- ignore_errors = (ignore_errors, )
+ estream, close_estream = streamify(error, 'w')
+ istream, close_istream = streamify(input, 'r')
quoted_args = [arg for arg in args if re.search(r'^"|^\'|"$|\'$', arg)]
if quoted_args:
@@ -172,25 +179,25 @@ class Executable(object):
rc = self.returncode = proc.returncode
if fail_on_error and rc != 0 and (rc not in ignore_errors):
- raise ProcessError("Command exited with status %d:" %
+ raise ProcessError('Command exited with status %d:' %
proc.returncode, cmd_line)
if output is str or error is str:
result = ''
if output is str:
- result += out
+ result += to_str(out)
if error is str:
- result += err
+ result += to_str(err)
return result
except OSError as e:
raise ProcessError(
- "%s: %s" % (self.exe[0], e.strerror), "Command: " + cmd_line)
+ '%s: %s' % (self.exe[0], e.strerror), 'Command: ' + cmd_line)
except subprocess.CalledProcessError as e:
if fail_on_error:
raise ProcessError(
- str(e), "\nExit status %d when invoking command: %s" %
+ str(e), '\nExit status %d when invoking command: %s' %
(proc.returncode, cmd_line))
finally:
@@ -211,27 +218,57 @@ class Executable(object):
return hash((type(self), ) + tuple(self.exe))
def __repr__(self):
- return "<exe: %s>" % self.exe
+ return '<exe: %s>' % self.exe
def __str__(self):
return ' '.join(self.exe)
-def which(name, **kwargs):
- """Finds an executable in the path like command-line which."""
- path = kwargs.get('path', os.environ.get('PATH', '').split(os.pathsep))
+def to_str(content):
+ """Produce a str type from the content of a process stream obtained with
+ Popen.communicate.
+ """
+ # Prior to python3, Popen.communicate returns a str type. For python3 it
+ # returns a bytes type. In the case of python3 we decode the
+ # byte string to produce a str type. This will generate junk if the
+ # encoding is not UTF-8 (which includes ASCII).
+ if sys.version_info < (3, 0, 0):
+ return content
+ else:
+ return content.decode('utf-8')
+
+
+def which(*args, **kwargs):
+ """Finds an executable in the path like command-line which.
+
+ If given multiple executables, returns the first one that is found.
+ If no executables are found, returns None.
+
+ Parameters:
+ *args (str): One or more executables to search for
+
+ Keyword Arguments:
+ path (:func:`list` or str): The path to search. Defaults to ``PATH``
+ required (bool): If set to True, raise an error if executable not found
+
+ Returns:
+ Executable: The first executable that is found in the path
+ """
+ path = kwargs.get('path', os.environ.get('PATH', ''))
required = kwargs.get('required', False)
- if not path:
- path = []
+ if isinstance(path, string_types):
+ path = path.split(os.pathsep)
- for dir in path:
- exe = os.path.join(dir, name)
- if os.path.isfile(exe) and os.access(exe, os.X_OK):
- return Executable(exe)
+ for name in args:
+ for directory in path:
+ exe = os.path.join(directory, name)
+ if os.path.isfile(exe) and os.access(exe, os.X_OK):
+ return Executable(exe)
if required:
- tty.die("spack requires %s. Make sure it is in your path." % name)
+ tty.die("spack requires '%s'. Make sure it is in your path." % args[0])
+
return None
diff --git a/lib/spack/spack/util/gpg.py b/lib/spack/spack/util/gpg.py
new file mode 100644
index 0000000000..4af849fb3c
--- /dev/null
+++ b/lib/spack/spack/util/gpg.py
@@ -0,0 +1,120 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+
+import spack
+from spack.util.executable import Executable
+
+
+GNUPGHOME = spack.gpg_path
+
+
+class Gpg(object):
+ @staticmethod
+ def gpg():
+ # TODO: Support loading up a GPG environment from a built gpg.
+ gpg = Executable('gpg2')
+ if not os.path.exists(GNUPGHOME):
+ os.makedirs(GNUPGHOME)
+ os.chmod(GNUPGHOME, 0o700)
+ gpg.add_default_env('GNUPGHOME', GNUPGHOME)
+ return gpg
+
+ @classmethod
+ def create(cls, **kwargs):
+ r, w = os.pipe()
+ r = os.fdopen(r, 'r')
+ w = os.fdopen(w, 'w')
+ w.write('''
+ Key-Type: rsa
+ Key-Length: 4096
+ Key-Usage: sign
+ Name-Real: %(name)s
+ Name-Email: %(email)s
+ Name-Comment: %(comment)s
+ Expire-Date: %(expires)s
+ %%no-protection
+ %%commit
+ ''' % kwargs)
+ w.close()
+ cls.gpg()('--gen-key', '--batch', input=r)
+ r.close()
+
+ @classmethod
+ def signing_keys(cls):
+ keys = []
+ output = cls.gpg()('--list-secret-keys', '--with-colons',
+ '--fingerprint', output=str)
+ for line in output.split('\n'):
+ if line.startswith('fpr'):
+ keys.append(line.split(':')[9])
+ return keys
+
+ @classmethod
+ def export_keys(cls, location, *keys):
+ cls.gpg()('--armor', '--export', '--output', location, *keys)
+
+ @classmethod
+ def trust(cls, keyfile):
+ cls.gpg()('--import', keyfile)
+
+ @classmethod
+ def untrust(cls, signing, *keys):
+ args = [
+ '--yes',
+ '--batch',
+ ]
+ if signing:
+ signing_args = args + ['--delete-secret-keys'] + list(keys)
+ cls.gpg()(*signing_args)
+ args.append('--delete-keys')
+ args.extend(keys)
+ cls.gpg()(*args)
+
+ @classmethod
+ def sign(cls, key, file, output, clearsign=False):
+ args = [
+ '--armor',
+ '--default-key', key,
+ '--output', output,
+ file,
+ ]
+ if clearsign:
+ args.insert(0, '--clearsign')
+ else:
+ args.insert(0, '--detach-sign')
+ cls.gpg()(*args)
+
+ @classmethod
+ def verify(cls, signature, file):
+ cls.gpg()('--verify', signature, file)
+
+ @classmethod
+ def list(cls, trusted, signing):
+ if trusted:
+ cls.gpg()('--list-public-keys')
+ if signing:
+ cls.gpg()('--list-secret-keys')
diff --git a/lib/spack/spack/util/log_parse.py b/lib/spack/spack/util/log_parse.py
new file mode 100644
index 0000000000..1d5ad465fa
--- /dev/null
+++ b/lib/spack/spack/util/log_parse.py
@@ -0,0 +1,93 @@
+##############################################################################
+# 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/spack/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 __future__ import print_function
+
+from six import StringIO
+
+from ctest_log_parser import CTestLogParser
+from llnl.util.tty.color import colorize
+
+
+def parse_log_events(stream, context=6):
+ """Extract interesting events from a log file as a list of LogEvent.
+
+ Args:
+ stream (str or fileobject): build log name or file object
+ context (int): lines of context to extract around each log event
+
+ Returns:
+ (tuple): two lists containig ``BuildError`` and
+ ``BuildWarning`` objects.
+
+ This is a wrapper around ``ctest_log_parser.CTestLogParser`` that
+ lazily constructs a single ``CTestLogParser`` object. This ensures
+ that all the regex compilation is only done once.
+ """
+ if parse_log_events.ctest_parser is None:
+ parse_log_events.ctest_parser = CTestLogParser()
+
+ return parse_log_events.ctest_parser.parse(stream, context)
+
+
+#: lazily constructed CTest log parser
+parse_log_events.ctest_parser = None
+
+
+def make_log_context(log_events):
+ """Get error context from a log file.
+
+ Args:
+ log_events (list of LogEvent): list of events created by
+ ``ctest_log_parser.parse()``
+
+ Returns:
+ str: context from the build log with errors highlighted
+
+ Parses the log file for lines containing errors, and prints them out
+ with line numbers and context. Errors are highlighted with '>>' and
+ with red highlighting (if color is enabled).
+ """
+ error_lines = set(e.line_no for e in log_events)
+
+ out = StringIO()
+ next_line = 1
+ for event in log_events:
+ start = event.start
+
+ if start > next_line:
+ out.write(' [ ... ]\n')
+
+ if start < next_line:
+ start = next_line
+
+ for i in range(start, event.end):
+ if i in error_lines:
+ out.write(colorize(' @R{>> %-6d%s}\n' % (i, event[i])))
+ else:
+ out.write(' %-6d%s\n' % (i, event[i]))
+
+ next_line = event.end
+
+ return out.getvalue()
diff --git a/lib/spack/spack/util/module_cmd.py b/lib/spack/spack/util/module_cmd.py
new file mode 100644
index 0000000000..00fc4ddc65
--- /dev/null
+++ b/lib/spack/spack/util/module_cmd.py
@@ -0,0 +1,201 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+"""
+This module contains routines related to the module command for accessing and
+parsing environment modules.
+"""
+import subprocess
+import re
+import os
+import llnl.util.tty as tty
+from spack.util.executable import which
+
+
+def get_module_cmd(bashopts=''):
+ try:
+ return get_module_cmd_from_bash(bashopts)
+ except ModuleError:
+ # Don't catch the exception this time; we have no other way to do it.
+ tty.warn("Could not detect module function from bash."
+ " Trying to detect modulecmd from `which`")
+ try:
+ return get_module_cmd_from_which()
+ except ModuleError:
+ raise ModuleError('Spack requires modulecmd or a defined module'
+ ' fucntion. Make sure modulecmd is in your path'
+ ' or the function "module" is defined in your'
+ ' bash environment.')
+
+
+def get_module_cmd_from_which():
+ module_cmd = which('modulecmd')
+ if not module_cmd:
+ raise ModuleError('`which` did not find any modulecmd executable')
+ module_cmd.add_default_arg('python')
+
+ # Check that the executable works
+ module_cmd('list', output=str, error=str, fail_on_error=False)
+ if module_cmd.returncode != 0:
+ raise ModuleError('get_module_cmd cannot determine the module command')
+
+ return module_cmd
+
+
+def get_module_cmd_from_bash(bashopts=''):
+ # Find how the module function is defined in the environment
+ module_func = os.environ.get('BASH_FUNC_module()', None)
+ if module_func:
+ module_func = os.path.expandvars(module_func)
+ else:
+ module_func_proc = subprocess.Popen(['{0} typeset -f module | '
+ 'envsubst'.format(bashopts)],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ executable='/bin/bash',
+ shell=True)
+ module_func_proc.wait()
+ module_func = module_func_proc.stdout.read()
+
+ # Find the portion of the module function that is evaluated
+ try:
+ find_exec = re.search(r'.*`(.*(:? bash | sh ).*)`.*', module_func)
+ exec_line = find_exec.group(1)
+ except BaseException:
+ try:
+ # This will fail with nested parentheses. TODO: expand regex.
+ find_exec = re.search(r'.*\(([^()]*(:? bash | sh )[^()]*)\).*',
+ module_func)
+ exec_line = find_exec.group(1)
+ except BaseException:
+ raise ModuleError('get_module_cmd cannot '
+ 'determine the module command from bash')
+
+ # Create an executable
+ args = exec_line.split()
+ module_cmd = which(args[0])
+ if module_cmd:
+ for arg in args[1:]:
+ if arg in ('bash', 'sh'):
+ module_cmd.add_default_arg('python')
+ break
+ else:
+ module_cmd.add_default_arg(arg)
+ else:
+ raise ModuleError('Could not create executable based on module'
+ ' function.')
+
+ # Check that the executable works
+ module_cmd('list', output=str, error=str, fail_on_error=False)
+ if module_cmd.returncode != 0:
+ raise ModuleError('get_module_cmd cannot determine the module command'
+ 'from bash.')
+
+ return module_cmd
+
+
+def load_module(mod):
+ """Takes a module name and removes modules until it is possible to
+ load that module. It then loads the provided module. Depends on the
+ modulecmd implementation of modules used in cray and lmod.
+ """
+ # Create an executable of the module command that will output python code
+ modulecmd = get_module_cmd()
+
+ # Read the module and remove any conflicting modules
+ # We do this without checking that they are already installed
+ # for ease of programming because unloading a module that is not
+ # loaded does nothing.
+ text = modulecmd('show', mod, output=str, error=str).split()
+ for i, word in enumerate(text):
+ if word == 'conflict':
+ exec(compile(modulecmd('unload', text[i + 1], output=str,
+ error=str), '<string>', 'exec'))
+ # Load the module now that there are no conflicts
+ load = modulecmd('load', mod, output=str, error=str)
+ exec(compile(load, '<string>', 'exec'))
+
+
+def get_argument_from_module_line(line):
+ if '(' in line and ')' in line:
+ # Determine which lua quote symbol is being used for the argument
+ comma_index = line.index(',')
+ cline = line[comma_index:]
+ try:
+ quote_index = min(cline.find(q) for q in ['"', "'"] if q in cline)
+ lua_quote = cline[quote_index]
+ except ValueError:
+ # Change error text to describe what is going on.
+ raise ValueError("No lua quote symbol found in lmod module line.")
+ words_and_symbols = line.split(lua_quote)
+ return words_and_symbols[-2]
+ else:
+ return line.split()[2]
+
+
+def get_path_from_module(mod):
+ """Inspects a TCL module for entries that indicate the absolute path
+ at which the library supported by said module can be found.
+ """
+ # Create a modulecmd executable
+ modulecmd = get_module_cmd()
+
+ # Read the module
+ text = modulecmd('show', mod, output=str, error=str).split('\n')
+
+ # If it sets the LD_LIBRARY_PATH or CRAY_LD_LIBRARY_PATH, use that
+ for line in text:
+ if line.find('LD_LIBRARY_PATH') >= 0:
+ path = get_argument_from_module_line(line)
+ return path[:path.find('/lib')]
+
+ # If it lists its package directory, return that
+ for line in text:
+ if line.find(mod.upper() + '_DIR') >= 0:
+ return get_argument_from_module_line(line)
+
+ # If it lists a -rpath instruction, use that
+ for line in text:
+ rpath = line.find('-rpath/')
+ if rpath >= 0:
+ return line[rpath + 6:line.find('/lib')]
+
+ # If it lists a -L instruction, use that
+ for line in text:
+ L = line.find('-L/')
+ if L >= 0:
+ return line[L + 2:line.find('/lib')]
+
+ # If it sets the PATH, use it
+ for line in text:
+ if line.find('PATH') >= 0:
+ path = get_argument_from_module_line(line)
+ return path[:path.find('/bin')]
+
+ # Unable to find module path
+ return None
+
+
+class ModuleError(Exception):
+ """Raised the the module_cmd utility to indicate errors."""
diff --git a/lib/spack/spack/util/multiproc.py b/lib/spack/spack/util/multiproc.py
index 6a25c45713..3cbbac4566 100644
--- a/lib/spack/spack/util/multiproc.py
+++ b/lib/spack/spack/util/multiproc.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,6 @@ than multiprocessing.Pool.apply() can. For example, apply() will fail
to pickle functions if they're passed indirectly as parameters.
"""
from multiprocessing import Process, Pipe, Semaphore, Value
-from itertools import izip
__all__ = ['spawn', 'parmap', 'Barrier']
@@ -43,7 +42,7 @@ def spawn(f):
def parmap(f, X):
pipe = [Pipe() for x in X]
proc = [Process(target=spawn(f), args=(c, x))
- for x, (p, c) in izip(X, pipe)]
+ for x, (p, c) in zip(X, pipe)]
[p.start() for p in proc]
[p.join() for p in proc]
return [p.recv() for (p, c) in pipe]
@@ -93,5 +92,5 @@ class Barrier:
self.turnstile2.release()
-class BarrierTimeoutError:
+class BarrierTimeoutError(Exception):
pass
diff --git a/lib/spack/spack/util/naming.py b/lib/spack/spack/util/naming.py
index 9a5cdee411..78e368f06c 100644
--- a/lib/spack/spack/util/naming.py
+++ b/lib/spack/spack/util/naming.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,7 @@ from __future__ import absolute_import
import string
import itertools
import re
-from StringIO import StringIO
+from six import StringIO
import spack
@@ -39,6 +39,7 @@ __all__ = [
'validate_fully_qualified_module_name',
'validate_module_name',
'possible_spack_module_names',
+ 'simplify_name',
'NamespaceTrie']
# Valid module names can contain '-' but can't start with it.
@@ -56,7 +57,7 @@ def mod_to_class(mod_name):
* Class names use the CapWords convention.
Regular source code follows these convetions. Spack is a bit
- more liberal with its Package names nad Compiler names:
+ more liberal with its Package names and Compiler names:
* They can contain '-' as well as '_', but cannot start with '-'.
* They can start with numbers, e.g. "3proxy".
@@ -108,6 +109,54 @@ def possible_spack_module_names(python_mod_name):
return results
+def simplify_name(name):
+ """Simplify package name to only lowercase, digits, and dashes.
+
+ Simplifies a name which may include uppercase letters, periods,
+ underscores, and pluses. In general, we want our package names to
+ only contain lowercase letters, digits, and dashes.
+
+ Args:
+ name (str): The original name of the package
+
+ Returns:
+ str: The new name of the package
+ """
+ # Convert CamelCase to Dashed-Names
+ # e.g. ImageMagick -> Image-Magick
+ # e.g. SuiteSparse -> Suite-Sparse
+ # name = re.sub('([a-z])([A-Z])', r'\1-\2', name)
+
+ # Rename Intel downloads
+ # e.g. l_daal, l_ipp, l_mkl -> daal, ipp, mkl
+ if name.startswith('l_'):
+ name = name[2:]
+
+ # Convert UPPERCASE to lowercase
+ # e.g. SAMRAI -> samrai
+ name = name.lower()
+
+ # Replace '_' and '.' with '-'
+ # e.g. backports.ssl_match_hostname -> backports-ssl-match-hostname
+ name = name.replace('_', '-')
+ name = name.replace('.', '-')
+
+ # Replace "++" with "pp" and "+" with "-plus"
+ # e.g. gtk+ -> gtk-plus
+ # e.g. voro++ -> voropp
+ name = name.replace('++', 'pp')
+ name = name.replace('+', '-plus')
+
+ # Simplify Lua package names
+ # We don't want "lua" to occur multiple times in the name
+ name = re.sub('^(lua)([^-])', r'\1-\2', name)
+
+ # Simplify Bio++ package names
+ name = re.sub('^(bpp)([^-])', r'\1-\2', name)
+
+ return name
+
+
def valid_module_name(mod_name):
"""Return whether mod_name is valid for use in Spack."""
return bool(re.match(_valid_module_re, mod_name))
diff --git a/lib/spack/spack/util/path.py b/lib/spack/spack/util/path.py
index 7235f6b756..9ce6c9306c 100644
--- a/lib/spack/spack/util/path.py
+++ b/lib/spack/spack/util/path.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -65,8 +65,10 @@ def substitute_config_variables(path):
def canonicalize_path(path):
- """Substitute config vars, expand user home, take abspath."""
+ """Substitute config vars, expand environment vars,
+ expand user home, take abspath."""
path = substitute_config_variables(path)
+ path = os.path.expandvars(path)
path = os.path.expanduser(path)
path = os.path.abspath(path)
return path
diff --git a/lib/spack/spack/util/pattern.py b/lib/spack/spack/util/pattern.py
index b5731ccf08..3a85336bdc 100644
--- a/lib/spack/spack/util/pattern.py
+++ b/lib/spack/spack/util/pattern.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,20 +28,23 @@ import functools
def composite(interface=None, method_list=None, container=list):
- """Returns a class decorator that patches a class adding all the methods
- it needs to be a composite for a given interface.
+ """Decorator implementing the GoF composite pattern.
+
+ Args:
+ interface (type): class exposing the interface to which the
+ composite object must conform. Only non-private and
+ non-special methods will be taken into account
+ method_list (list of str): names of methods that should be part
+ of the composite
+ container (MutableSequence): container for the composite object
+ (default = list). Must fulfill the MutableSequence
+ contract. The composite class will expose the container API
+ to manage object composition
+
+ Returns:
+ a class decorator that patches a class adding all the methods
+ it needs to be a composite for a given interface.
- :param interface: class exposing the interface to which the composite \
- object must conform. Only non-private and non-special methods will \
- be taken into account
-
- :param method_list: names of methods that should be part of the composite
-
- :param container: container for the composite object (default = list). \
- Must fulfill the MutableSequence contract. The composite class will \
- expose the container API to manage object composition
-
- :return: class decorator
"""
# Check if container fulfills the MutableSequence contract and raise an
# exception if it doesn't. The patched class returned by the decorator will
@@ -61,7 +64,7 @@ def composite(interface=None, method_list=None, container=list):
# Retrieve the base class of the composite. Inspect its methods and
# decide which ones will be overridden
def no_special_no_private(x):
- return inspect.ismethod(x) and not x.__name__.startswith('_')
+ return callable(x) and not x.__name__.startswith('_')
# Patch the behavior of each of the methods in the previous list.
# This is done associating an instance of the descriptor below to
@@ -90,42 +93,25 @@ def composite(interface=None, method_list=None, container=list):
return getter
dictionary_for_type_call = {}
+
# Construct a dictionary with the methods explicitly passed as name
if method_list is not None:
- # python@2.7: method_list_dict = {name: IterateOver(name) for name
- # in method_list}
- method_list_dict = {}
- for name in method_list:
- method_list_dict[name] = IterateOver(name)
- dictionary_for_type_call.update(method_list_dict)
+ dictionary_for_type_call.update(
+ (name, IterateOver(name)) for name in method_list)
+
# Construct a dictionary with the methods inspected from the interface
if interface is not None:
- ##########
- # python@2.7: interface_methods = {name: method for name, method in
- # inspect.getmembers(interface, predicate=no_special_no_private)}
- interface_methods = {}
- for name, method in inspect.getmembers(
- interface, predicate=no_special_no_private):
- interface_methods[name] = method
- ##########
- # python@2.7: interface_methods_dict = {name: IterateOver(name,
- # method) for name, method in interface_methods.iteritems()}
- interface_methods_dict = {}
- for name, method in interface_methods.iteritems():
- interface_methods_dict[name] = IterateOver(name, method)
- ##########
- dictionary_for_type_call.update(interface_methods_dict)
+ dictionary_for_type_call.update(
+ (name, IterateOver(name, method))
+ for name, method in inspect.getmembers(
+ interface, predicate=no_special_no_private))
+
# Get the methods that are defined in the scope of the composite
# class and override any previous definition
- ##########
- # python@2.7: cls_method = {name: method for name, method in
- # inspect.getmembers(cls, predicate=inspect.ismethod)}
- cls_method = {}
- for name, method in inspect.getmembers(
- cls, predicate=inspect.ismethod):
- cls_method[name] = method
- ##########
- dictionary_for_type_call.update(cls_method)
+ dictionary_for_type_call.update(
+ (name, method) for name, method in inspect.getmembers(
+ cls, predicate=inspect.ismethod))
+
# Generate the new class on the fly and return it
# FIXME : inherit from interface if we start to use ABC classes?
wrapper_class = type(cls.__name__, (cls, container),
diff --git a/lib/spack/spack/util/prefix.py b/lib/spack/spack/util/prefix.py
index 985d862269..d96b1c2449 100644
--- a/lib/spack/spack/util/prefix.py
+++ b/lib/spack/spack/util/prefix.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,72 +23,35 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
"""
-This file contains utilities to help with installing packages.
+This file contains utilities for managing the installation prefix of a package.
"""
-from llnl.util.filesystem import join_path
+import os
class Prefix(str):
"""This class represents an installation prefix, but provides useful
- attributes for referring to directories inside the prefix.
+ attributes for referring to directories inside the prefix.
- For example, you can do something like this::
+ Attributes of this object are created on the fly when you request them,
+ so any of the following is valid:
- prefix = Prefix('/usr')
- print prefix.lib
- print prefix.lib64
- print prefix.bin
- print prefix.share
- print prefix.man4
+ >>> prefix = Prefix('/usr')
+ >>> prefix.bin
+ /usr/bin
+ >>> prefix.lib64
+ /usr/lib64
+ >>> prefix.share.man
+ /usr/share/man
+ >>> prefix.foo.bar.baz
+ /usr/foo/bar/baz
- This program would print:
+ Prefix objects behave identically to strings. In fact, they
+ subclass ``str``. So operators like ``+`` are legal::
- /usr/lib
- /usr/lib64
- /usr/bin
- /usr/share
- /usr/share/man/man4
+ print('foobar ' + prefix)
- Prefix objects behave identically to strings. In fact, they
- subclass str. So operators like + are legal:
-
- print "foobar " + prefix
-
- This prints 'foobar /usr". All of this is meant to make custom
- installs easy.
+ This prints ``foobar /usr``. All of this is meant to make custom
+ installs easy.
"""
-
- def __new__(cls, path):
- s = super(Prefix, cls).__new__(cls, path)
- s.bin = join_path(s, 'bin')
- s.sbin = join_path(s, 'sbin')
- s.etc = join_path(s, 'etc')
- s.include = join_path(s, 'include')
- s.lib = join_path(s, 'lib')
- s.lib64 = join_path(s, 'lib64')
- s.libexec = join_path(s, 'libexec')
- s.share = join_path(s, 'share')
- s.doc = join_path(s.share, 'doc')
- s.info = join_path(s.share, 'info')
-
- s.man = join_path(s, 'man')
- s.man1 = join_path(s.man, 'man1')
- s.man2 = join_path(s.man, 'man2')
- s.man3 = join_path(s.man, 'man3')
- s.man4 = join_path(s.man, 'man4')
- s.man5 = join_path(s.man, 'man5')
- s.man6 = join_path(s.man, 'man6')
- s.man7 = join_path(s.man, 'man7')
- s.man8 = join_path(s.man, 'man8')
-
- s.share_man = join_path(s.share, 'man')
- s.share_man1 = join_path(s.share_man, 'man1')
- s.share_man2 = join_path(s.share_man, 'man2')
- s.share_man3 = join_path(s.share_man, 'man3')
- s.share_man4 = join_path(s.share_man, 'man4')
- s.share_man5 = join_path(s.share_man, 'man5')
- s.share_man6 = join_path(s.share_man, 'man6')
- s.share_man7 = join_path(s.share_man, 'man7')
- s.share_man8 = join_path(s.share_man, 'man8')
-
- return s
+ def __getattr__(self, attr):
+ return Prefix(os.path.join(self, attr))
diff --git a/lib/spack/spack/util/spack_json.py b/lib/spack/spack/util/spack_json.py
index 236eef8983..fbc514c14b 100644
--- a/lib/spack/spack/util/spack_json.py
+++ b/lib/spack/spack/util/spack_json.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,11 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
"""Simple wrapper around JSON to guarantee consistent use of load/dump. """
+import sys
import json
+from six import string_types
+from six import iteritems
+
import spack.error
__all__ = ['load', 'dump', 'SpackJSONError']
@@ -36,12 +40,12 @@ _json_dump_args = {
def load(stream):
"""Spack JSON needs to be ordered to support specs."""
- if isinstance(stream, basestring):
- return _byteify(json.loads(stream, object_hook=_byteify),
- ignore_dicts=True)
+ if isinstance(stream, string_types):
+ load = json.loads
else:
- return _byteify(json.load(stream, object_hook=_byteify),
- ignore_dicts=True)
+ load = json.load
+
+ return _strify(load(stream, object_hook=_strify), ignore_dicts=True)
def dump(data, stream=None):
@@ -52,19 +56,23 @@ def dump(data, stream=None):
return json.dump(data, stream, **_json_dump_args)
-def _byteify(data, ignore_dicts=False):
- # if this is a unicode string, return its string representation
- if isinstance(data, unicode):
- return data.encode('utf-8')
+def _strify(data, ignore_dicts=False):
+ # if this is a unicode string in python 2, return its string representation
+ if sys.version_info[0] < 3:
+ if isinstance(data, unicode):
+ return data.encode('utf-8')
+
# if this is a list of values, return list of byteified values
if isinstance(data, list):
- return [_byteify(item, ignore_dicts=True) for item in data]
+ return [_strify(item, ignore_dicts=True) for item in data]
+
# if this is a dictionary, return dictionary of byteified keys and values
# but only if we haven't already byteified it
if isinstance(data, dict) and not ignore_dicts:
- return dict((_byteify(key, ignore_dicts=True),
- _byteify(value, ignore_dicts=True)) for key, value in
- data.iteritems())
+ return dict((_strify(key, ignore_dicts=True),
+ _strify(value, ignore_dicts=True)) for key, value in
+ iteritems(data))
+
# if it's anything else, return it in its original form
return data
@@ -72,5 +80,5 @@ def _byteify(data, ignore_dicts=False):
class SpackJSONError(spack.error.SpackError):
"""Raised when there are issues with JSON parsing."""
- def __init__(self, msg, yaml_error):
- super(SpackJSONError, self).__init__(msg, str(yaml_error))
+ def __init__(self, msg, json_error):
+ super(SpackJSONError, self).__init__(msg, str(json_error))
diff --git a/lib/spack/spack/util/spack_yaml.py b/lib/spack/spack/util/spack_yaml.py
index 9d4c607908..476ed464f5 100644
--- a/lib/spack/spack/util/spack_yaml.py
+++ b/lib/spack/spack/util/spack_yaml.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@
"""
import yaml
from yaml import Loader, Dumper
-from yaml.nodes import *
+from yaml.nodes import MappingNode, SequenceNode, ScalarNode
from yaml.constructor import ConstructorError
from ordereddict_backport import OrderedDict
@@ -85,13 +85,7 @@ class OrderedLineLoader(Loader):
def construct_yaml_str(self, node):
value = self.construct_scalar(node)
- try:
- value = value.encode('ascii')
- except UnicodeEncodeError:
- pass
-
value = syaml_str(value)
-
mark(value, node)
return value
@@ -137,7 +131,7 @@ class OrderedLineLoader(Loader):
key = self.construct_object(key_node, deep=deep)
try:
hash(key)
- except TypeError, exc:
+ except TypeError as exc:
raise ConstructorError(
"while constructing a mapping", node.start_mark,
"found unacceptable key (%s)" % exc, key_node.start_mark)
@@ -154,11 +148,11 @@ class OrderedLineLoader(Loader):
# register above new constructors
OrderedLineLoader.add_constructor(
- u'tag:yaml.org,2002:map', OrderedLineLoader.construct_yaml_map)
+ 'tag:yaml.org,2002:map', OrderedLineLoader.construct_yaml_map)
OrderedLineLoader.add_constructor(
- u'tag:yaml.org,2002:seq', OrderedLineLoader.construct_yaml_seq)
+ 'tag:yaml.org,2002:seq', OrderedLineLoader.construct_yaml_seq)
OrderedLineLoader.add_constructor(
- u'tag:yaml.org,2002:str', OrderedLineLoader.construct_yaml_str)
+ 'tag:yaml.org,2002:str', OrderedLineLoader.construct_yaml_str)
class OrderedLineDumper(Dumper):
@@ -181,7 +175,7 @@ class OrderedLineDumper(Dumper):
# if it's a syaml_dict, preserve OrderedDict order.
# Otherwise do the default thing.
sort = not isinstance(mapping, syaml_dict)
- mapping = mapping.items()
+ mapping = list(mapping.items())
if sort:
mapping.sort()
diff --git a/lib/spack/spack/util/string.py b/lib/spack/spack/util/string.py
index dae7afbf46..feb05a31a8 100644
--- a/lib/spack/spack/util/string.py
+++ b/lib/spack/spack/util/string.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/lib/spack/spack/util/web.py b/lib/spack/spack/util/web.py
index 935532266f..eadfc66ee0 100644
--- a/lib/spack/spack/util/web.py
+++ b/lib/spack/spack/util/web.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,13 +22,30 @@
# 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 __future__ import print_function
+
import re
import os
+import ssl
import sys
-import urllib2
-import urlparse
-from multiprocessing import Pool
-from HTMLParser import HTMLParser, HTMLParseError
+import traceback
+import hashlib
+
+from six.moves.urllib.request import urlopen, Request
+from six.moves.urllib.error import URLError
+from six.moves.urllib.parse import urljoin
+import multiprocessing.pool
+
+try:
+ # Python 2 had these in the HTMLParser package.
+ from HTMLParser import HTMLParser, HTMLParseError
+except ImportError:
+ # In Python 3, things moved to html.parser
+ from html.parser import HTMLParser
+
+ # Also, HTMLParseError is deprecated and never raised.
+ class HTMLParseError(Exception):
+ pass
import llnl.util.tty as tty
@@ -36,8 +53,9 @@ import spack
import spack.error
from spack.util.compression import ALLOWED_ARCHIVE_TYPES
+
# Timeout in seconds for web requests
-TIMEOUT = 10
+_timeout = 10
class LinkParser(HTMLParser):
@@ -55,34 +73,65 @@ class LinkParser(HTMLParser):
self.links.append(val)
-def _spider(args):
- """_spider(url, depth, max_depth)
+class NonDaemonProcess(multiprocessing.Process):
+ """Process tha allows sub-processes, so pools can have sub-pools."""
+ def _get_daemon(self):
+ return False
- Fetches URL and any pages it links to up to max_depth. depth should
- initially be 1, and max_depth includes the root. This function will
- print out a warning only if the root can't be fetched; it ignores
- errors with pages that the root links to.
+ def _set_daemon(self, value):
+ pass
- This will return a list of the pages fetched, in no particular order.
+ daemon = property(_get_daemon, _set_daemon)
+
+
+class NonDaemonPool(multiprocessing.pool.Pool):
+ """Pool that uses non-daemon processes"""
+ Process = NonDaemonProcess
- Takes args as a tuple b/c it's intended to be used by a multiprocessing
- pool. Firing off all the child links at once makes the fetch MUCH
- faster for pages with lots of children.
- """
- url, visited, root, opener, depth, max_depth, raise_on_error = args
+def _spider(url, visited, root, depth, max_depth, raise_on_error):
+ """Fetches URL and any pages it links to up to max_depth.
+
+ depth should initially be zero, and max_depth is the max depth of
+ links to follow from the root.
+
+ Prints out a warning only if the root can't be fetched; it ignores
+ errors with pages that the root links to.
+
+ Returns a tuple of:
+ - pages: dict of pages visited (URL) mapped to their full text.
+ - links: set of links encountered while visiting the pages.
+ """
pages = {} # dict from page URL -> text content.
links = set() # set of all links seen on visited pages.
+ # root may end with index.html -- chop that off.
+ if root.endswith('/index.html'):
+ root = re.sub('/index.html$', '', root)
+
try:
+ context = None
+ if sys.version_info < (2, 7, 9) or \
+ ((3,) < sys.version_info < (3, 4, 3)):
+ if not spack.insecure:
+ tty.warn("Spack will not check SSL certificates. You need to "
+ "update your Python to enable certificate "
+ "verification.")
+ else:
+ # We explicitly create default context to avoid error described in
+ # https://blog.sucuri.net/2016/03/beware-unverified-tls-certificates-php-python.html
+ context = ssl._create_unverified_context() \
+ if spack.insecure \
+ else ssl.create_default_context()
+
# Make a HEAD request first to check the content type. This lets
# us ignore tarballs and gigantic files.
# It would be nice to do this with the HTTP Accept header to avoid
# one round-trip. However, most servers seem to ignore the header
# if you ask for a tarball with Accept: text/html.
- req = urllib2.Request(url)
+ req = Request(url)
req.get_method = lambda: "HEAD"
- resp = urllib2.urlopen(req, timeout=TIMEOUT)
+ resp = _urlopen(req, timeout=_timeout, context=context)
if "Content-type" not in resp.headers:
tty.debug("ignoring page " + url)
@@ -95,11 +144,11 @@ def _spider(args):
# Do the real GET request when we know it's just HTML.
req.get_method = lambda: "GET"
- response = urllib2.urlopen(req, timeout=TIMEOUT)
+ response = _urlopen(req, timeout=_timeout, context=context)
response_url = response.geturl()
# Read the page and and stick it in the map we'll return
- page = response.read()
+ page = response.read().decode('utf-8')
pages[response_url] = page
# Parse out the links in the page
@@ -109,7 +158,7 @@ def _spider(args):
while link_parser.links:
raw_link = link_parser.links.pop()
- abs_link = urlparse.urljoin(response_url, raw_link.strip())
+ abs_link = urljoin(response_url, raw_link.strip())
links.add(abs_link)
@@ -127,25 +176,34 @@ def _spider(args):
# If we're not at max depth, follow links.
if depth < max_depth:
- subcalls.append((abs_link, visited, root, None,
+ subcalls.append((abs_link, visited, root,
depth + 1, max_depth, raise_on_error))
visited.add(abs_link)
if subcalls:
+ pool = NonDaemonPool(processes=len(subcalls))
try:
- pool = Pool(processes=len(subcalls))
- results = pool.map(_spider, subcalls)
+ results = pool.map(_spider_wrapper, subcalls)
+
for sub_pages, sub_links in results:
pages.update(sub_pages)
links.update(sub_links)
+
finally:
pool.terminate()
pool.join()
- except urllib2.URLError as e:
+ except URLError as e:
tty.debug(e)
+
+ if isinstance(e.reason, ssl.SSLError):
+ tty.warn("Spack was unable to fetch url list due to a certificate "
+ "verification problem. You can try running spack -k, "
+ "which will not check SSL certificates. Use this at your "
+ "own risk.")
+
if raise_on_error:
- raise spack.error.NoNetworkConnectionError(str(e), url)
+ raise NoNetworkConnectionError(str(e), url)
except HTMLParseError as e:
# This error indicates that Python's HTML parser sucks.
@@ -159,46 +217,61 @@ def _spider(args):
except Exception as e:
# Other types of errors are completely ignored, except in debug mode.
- tty.debug("Error in _spider: %s" % e)
+ tty.debug("Error in _spider: %s:%s" % (type(e), e),
+ traceback.format_exc())
return pages, links
-def spider(root_url, **kwargs):
+def _spider_wrapper(args):
+ """Wrapper for using spider with multiprocessing."""
+ return _spider(*args)
+
+
+def _urlopen(*args, **kwargs):
+ """Wrapper for compatibility with old versions of Python."""
+ # We don't pass 'context' parameter to urlopen because it
+ # was introduces only starting versions 2.7.9 and 3.4.3 of Python.
+ if 'context' in kwargs and kwargs['context'] is None:
+ del kwargs['context']
+ return urlopen(*args, **kwargs)
+
+
+def spider(root_url, depth=0):
"""Gets web pages from a root URL.
- If depth is specified (e.g., depth=2), then this will also fetches pages
- linked from the root and its children up to depth.
+
+ If depth is specified (e.g., depth=2), then this will also follow
+ up to <depth> levels of links from the root.
This will spawn processes to fetch the children, for much improved
performance over a sequential fetch.
+
"""
- max_depth = kwargs.setdefault('depth', 1)
- pages, links = _spider((root_url, set(), root_url, None,
- 1, max_depth, False))
+ pages, links = _spider(root_url, set(), root_url, 0, depth, False)
return pages, links
-def find_versions_of_archive(*archive_urls, **kwargs):
+def find_versions_of_archive(archive_urls, list_url=None, list_depth=0):
"""Scrape web pages for new versions of a tarball.
Arguments:
archive_urls:
- URLs for different versions of a package. Typically these
- are just the tarballs from the package file itself. By
- default, this searches the parent directories of archives.
+ URL or sequence of URLs for different versions of a
+ package. Typically these are just the tarballs from the package
+ file itself. By default, this searches the parent directories
+ of archives.
Keyword Arguments:
list_url:
-
URL for a listing of archives. Spack wills scrape these
pages for download links that look like the archive URL.
list_depth:
- Max depth to follow links on list_url pages.
+ Max depth to follow links on list_url pages. Default 0.
"""
- list_url = kwargs.get('list_url', None)
- list_depth = kwargs.get('list_depth', 1)
+ if not isinstance(archive_urls, (list, tuple)):
+ archive_urls = [archive_urls]
# Generate a list of list_urls based on archive urls and any
# explicitly listed list_url in the package
@@ -212,9 +285,9 @@ def find_versions_of_archive(*archive_urls, **kwargs):
pages = {}
links = set()
for lurl in list_urls:
- p, l = spider(lurl, depth=list_depth)
- pages.update(p)
- links.update(l)
+ pg, lnk = spider(lurl, depth=list_depth)
+ pages.update(pg)
+ links.update(lnk)
# Scrape them for archive URLs
regexes = []
@@ -229,6 +302,14 @@ def find_versions_of_archive(*archive_urls, **kwargs):
# part, not the full path.
url_regex = os.path.basename(url_regex)
+ # We need to add a / to the beginning of the regex to prevent
+ # Spack from picking up similarly named packages like:
+ # https://cran.r-project.org/src/contrib/pls_2.6-0.tar.gz
+ # https://cran.r-project.org/src/contrib/enpls_5.7.tar.gz
+ # https://cran.r-project.org/src/contrib/autopls_1.3.tar.gz
+ # https://cran.r-project.org/src/contrib/matrixpls_1.0.4.tar.gz
+ url_regex = '/' + url_regex
+
# We need to add a $ anchor to the end of the regex to prevent
# Spack from picking up signature files like:
# .asc
@@ -236,7 +317,9 @@ def find_versions_of_archive(*archive_urls, **kwargs):
# .sha256
# .sig
# However, SourceForge downloads still need to end in '/download'.
- regexes.append(url_regex + '(\/download)?$')
+ url_regex += '(\/download)?$'
+
+ regexes.append(url_regex)
# Build a dict version -> URL from any links that match the wildcards.
versions = {}
@@ -249,3 +332,105 @@ def find_versions_of_archive(*archive_urls, **kwargs):
continue
return versions
+
+
+def get_checksums_for_versions(
+ url_dict, name, first_stage_function=None, keep_stage=False):
+ """Fetches and checksums archives from URLs.
+
+ This function is called by both ``spack checksum`` and ``spack
+ create``. The ``first_stage_function`` argument allows the caller to
+ inspect the first downloaded archive, e.g., to determine the build
+ system.
+
+ Args:
+ url_dict (dict): A dictionary of the form: version -> URL
+ name (str): The name of the package
+ first_stage_function (callable): function that takes a Stage and a URL;
+ this is run on the stage of the first URL downloaded
+ keep_stage (bool): whether to keep staging area when command completes
+
+ Returns:
+ (str): A multi-line string containing versions and corresponding hashes
+
+ """
+ sorted_versions = sorted(url_dict.keys(), reverse=True)
+
+ # Find length of longest string in the list for padding
+ max_len = max(len(str(v)) for v in sorted_versions)
+ num_ver = len(sorted_versions)
+
+ tty.msg("Found {0} version{1} of {2}:".format(
+ num_ver, '' if num_ver == 1 else 's', name),
+ "",
+ *spack.cmd.elide_list(
+ ["{0:{1}} {2}".format(str(v), max_len, url_dict[v])
+ for v in sorted_versions]))
+ print()
+
+ archives_to_fetch = tty.get_number(
+ "How many would you like to checksum?", default=1, abort='q')
+
+ if not archives_to_fetch:
+ tty.die("Aborted.")
+
+ versions = sorted_versions[:archives_to_fetch]
+ urls = [url_dict[v] for v in versions]
+
+ tty.msg("Downloading...")
+ version_hashes = []
+ i = 0
+ for url, version in zip(urls, versions):
+ try:
+ with spack.stage.Stage(url, keep=keep_stage) as stage:
+ # Fetch the archive
+ stage.fetch()
+ if i == 0 and first_stage_function:
+ # Only run first_stage_function the first time,
+ # no need to run it every time
+ first_stage_function(stage, url)
+
+ # Checksum the archive and add it to the list
+ version_hashes.append((version, spack.util.crypto.checksum(
+ hashlib.md5, stage.archive_file)))
+ i += 1
+ except spack.stage.FailedDownloadError:
+ tty.msg("Failed to fetch {0}".format(url))
+ except Exception as e:
+ tty.msg("Something failed on {0}, skipping.".format(url),
+ " ({0})".format(e))
+
+ if not version_hashes:
+ tty.die("Could not fetch any versions for {0}".format(name))
+
+ # Find length of longest string in the list for padding
+ max_len = max(len(str(v)) for v, h in version_hashes)
+
+ # Generate the version directives to put in a package.py
+ version_lines = "\n".join([
+ " version('{0}', {1}'{2}')".format(
+ v, ' ' * (max_len - len(str(v))), h) for v, h in version_hashes
+ ])
+
+ num_hash = len(version_hashes)
+ tty.msg("Checksummed {0} version{1} of {2}".format(
+ num_hash, '' if num_hash == 1 else 's', name))
+
+ return version_lines
+
+
+class SpackWebError(spack.error.SpackError):
+ """Superclass for Spack web spidering errors."""
+
+
+class VersionFetchError(SpackWebError):
+ """Raised when we can't determine a URL to fetch a package."""
+
+
+class NoNetworkConnectionError(SpackWebError):
+ """Raised when an operation can't get an internet connection."""
+ def __init__(self, message, url):
+ super(NoNetworkConnectionError, self).__init__(
+ "No network connection: " + str(message),
+ "URL was: " + str(url))
+ self.url = url
diff --git a/lib/spack/spack/variant.py b/lib/spack/spack/variant.py
index b2c1a73489..43a1ab4ae6 100644
--- a/lib/spack/spack/variant.py
+++ b/lib/spack/spack/variant.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,17 +22,653 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-"""Variant is a class describing flags on builds, or "variants".
+"""The variant module contains data structures that are needed to manage
+variants both in packages and in specs.
+"""
-Could be generalized later to describe aribitrary parameters, but
-currently variants are just flags.
+import functools
+import inspect
+import re
-"""
+import llnl.util.lang as lang
+import spack
+import spack.error as error
+from six import StringIO
class Variant(object):
- """Represents a variant on a build. Can be either on or off."""
+ """Represents a variant in a package, as declared in the
+ variant directive.
+ """
+
+ def __init__(
+ self,
+ name,
+ default,
+ description,
+ values=(True, False),
+ multi=False,
+ validator=None):
+ """Initialize a package variant.
- def __init__(self, default, description):
- self.default = default
+ Args:
+ name (str): name of the variant
+ default (str): default value for the variant in case
+ nothing has been specified
+ description (str): purpose of the variant
+ values (sequence): sequence of allowed values or a callable
+ accepting a single value as argument and returning True if the
+ value is good, False otherwise
+ multi (bool): whether multiple CSV are allowed
+ validator (callable): optional callable used to enforce
+ additional logic on the set of values being validated
+ """
+ self.name = name
+ self.default = default
self.description = str(description)
+
+ self.values = None
+ if values is any:
+ # 'any' is a special case to make it easy to say any value is ok
+ self.single_value_validator = lambda x: True
+
+ elif isinstance(values, type):
+ # supplying a type means any value *of that type*
+ def isa_type(v):
+ try:
+ values(v)
+ return True
+ except ValueError:
+ return False
+ self.single_value_validator = isa_type
+
+ if callable(values):
+ # If 'values' is a callable, assume it is a single value
+ # validator and reset the values to be explicit during debug
+ self.single_value_validator = values
+
+ else:
+ # Otherwise assume values is the set of allowed explicit values
+ self.values = tuple(values)
+ allowed = self.values + (self.default,)
+ self.single_value_validator = lambda x: x in allowed
+
+ self.multi = multi
+ self.group_validator = validator
+
+ def validate_or_raise(self, vspec, pkg=None):
+ """Validate a variant spec against this package variant. Raises an
+ exception if any error is found.
+
+ Args:
+ vspec (VariantSpec): instance to be validated
+ pkg (Package): the package that required the validation,
+ if available
+
+ Raises:
+ InconsistentValidationError: if ``vspec.name != self.name``
+
+ MultipleValuesInExclusiveVariantError: if ``vspec`` has
+ multiple values but ``self.multi == False``
+
+ InvalidVariantValueError: if ``vspec.value`` contains
+ invalid values
+ """
+ # Check the name of the variant
+ if self.name != vspec.name:
+ raise InconsistentValidationError(vspec, self)
+
+ # Check the values of the variant spec
+ value = vspec.value
+ if isinstance(vspec.value, (bool, str)):
+ value = (vspec.value,)
+
+ # If the value is exclusive there must be at most one
+ if not self.multi and len(value) != 1:
+ raise MultipleValuesInExclusiveVariantError(vspec, pkg)
+
+ # Check and record the values that are not allowed
+ not_allowed_values = [
+ x for x in value if self.single_value_validator(x) is False
+ ]
+ if not_allowed_values:
+ raise InvalidVariantValueError(self, not_allowed_values, pkg)
+
+ # Validate the group of values if needed
+ if self.group_validator is not None:
+ self.group_validator(value)
+
+ @property
+ def allowed_values(self):
+ """Returns a string representation of the allowed values for
+ printing purposes
+
+ Returns:
+ str: representation of the allowed values
+ """
+ # Join an explicit set of allowed values
+ if self.values is not None:
+ v = tuple(str(x) for x in self.values)
+ return ', '.join(v)
+ # In case we were given a single-value validator
+ # print the docstring
+ docstring = inspect.getdoc(self.single_value_validator)
+ v = docstring if docstring else ''
+ return v
+
+ def make_default(self):
+ """Factory that creates a variant holding the default value.
+
+ Returns:
+ MultiValuedVariant or SingleValuedVariant or BoolValuedVariant:
+ instance of the proper variant
+ """
+ return self.make_variant(self.default)
+
+ def make_variant(self, value):
+ """Factory that creates a variant holding the value passed as
+ a parameter.
+
+ Args:
+ value: value that will be hold by the variant
+
+ Returns:
+ MultiValuedVariant or SingleValuedVariant or BoolValuedVariant:
+ instance of the proper variant
+ """
+ return self.variant_cls(self.name, value)
+
+ @property
+ def variant_cls(self):
+ """Proper variant class to be used for this configuration."""
+ if self.multi:
+ return MultiValuedVariant
+ elif self.values == (True, False):
+ return BoolValuedVariant
+ return SingleValuedVariant
+
+
+def implicit_variant_conversion(method):
+ """Converts other to type(self) and calls method(self, other)
+
+ Args:
+ method: any predicate method that takes another variant as an argument
+
+ Returns: decorated method
+ """
+ @functools.wraps(method)
+ def convert(self, other):
+ # We don't care if types are different as long as I can convert
+ # other to type(self)
+ try:
+ other = type(self)(other.name, other._original_value)
+ except (error.SpecError, ValueError):
+ return False
+ return method(self, other)
+ return convert
+
+
+@lang.key_ordering
+class AbstractVariant(object):
+ """A variant that has not yet decided who it wants to be. It behaves like
+ a multi valued variant which **could** do things.
+
+ This kind of variant is generated during parsing of expressions like
+ ``foo=bar`` and differs from multi valued variants because it will
+ satisfy any other variant with the same name. This is because it **could**
+ do it if it grows up to be a multi valued variant with the right set of
+ values.
+ """
+
+ def __init__(self, name, value):
+ self.name = name
+
+ # Stores 'value' after a bit of massaging
+ # done by the property setter
+ self._value = None
+ self._original_value = None
+
+ # Invokes property setter
+ self.value = value
+
+ @staticmethod
+ def from_node_dict(name, value):
+ """Reconstruct a variant from a node dict."""
+ if isinstance(value, list):
+ # read multi-value variants in and be faithful to the YAML
+ mvar = MultiValuedVariant(name, ())
+ mvar._value = tuple(value)
+ mvar._original_value = mvar._value
+ return mvar
+
+ elif str(value).upper() == 'TRUE' or str(value).upper() == 'FALSE':
+ return BoolValuedVariant(name, value)
+
+ return SingleValuedVariant(name, value)
+
+ def yaml_entry(self):
+ """Returns a key, value tuple suitable to be an entry in a yaml dict.
+
+ Returns:
+ tuple: (name, value_representation)
+ """
+ return self.name, list(self.value)
+
+ @property
+ def value(self):
+ """Returns a tuple of strings containing the values stored in
+ the variant.
+
+ Returns:
+ tuple of str: values stored in the variant
+ """
+ return self._value
+
+ @value.setter
+ def value(self, value):
+ self._value_setter(value)
+
+ def _value_setter(self, value):
+ # Store the original value
+ self._original_value = value
+
+ if not isinstance(value, (tuple, list)):
+ # Store a tuple of CSV string representations
+ # Tuple is necessary here instead of list because the
+ # values need to be hashed
+ value = re.split(r'\s*,\s*', str(value))
+
+ # With multi-value variants it is necessary
+ # to remove duplicates and give an order
+ # to a set
+ self._value = tuple(sorted(set(value)))
+
+ def _cmp_key(self):
+ return self.name, self.value
+
+ def copy(self):
+ """Returns an instance of a variant equivalent to self
+
+ Returns:
+ any variant type: a copy of self
+
+ >>> a = MultiValuedVariant('foo', True)
+ >>> b = a.copy()
+ >>> assert a == b
+ >>> assert a is not b
+ """
+ return type(self)(self.name, self._original_value)
+
+ @implicit_variant_conversion
+ def satisfies(self, other):
+ """Returns true if ``other.name == self.name``, because any value that
+ other holds and is not in self yet **could** be added.
+
+ Args:
+ other: constraint to be met for the method to return True
+
+ Returns:
+ bool: True or False
+ """
+ # If names are different then `self` does not satisfy `other`
+ # (`foo=bar` will never satisfy `baz=bar`)
+ return other.name == self.name
+
+ @implicit_variant_conversion
+ def compatible(self, other):
+ """Returns True if self and other are compatible, False otherwise.
+
+ As there is no semantic check, two VariantSpec are compatible if
+ either they contain the same value or they are both multi-valued.
+
+ Args:
+ other: instance against which we test compatibility
+
+ Returns:
+ bool: True or False
+ """
+ # If names are different then they are not compatible
+ return other.name == self.name
+
+ @implicit_variant_conversion
+ def constrain(self, other):
+ """Modify self to match all the constraints for other if both
+ instances are multi-valued. Returns True if self changed,
+ False otherwise.
+
+ Args:
+ other: instance against which we constrain self
+
+ Returns:
+ bool: True or False
+ """
+ if self.name != other.name:
+ raise ValueError('variants must have the same name')
+
+ old_value = self.value
+ self.value = ','.join(sorted(set(self.value + other.value)))
+ return old_value != self.value
+
+ def __contains__(self, item):
+ return item in self._value
+
+ def __repr__(self):
+ cls = type(self)
+ return '{0.__name__}({1}, {2})'.format(
+ cls, repr(self.name), repr(self._original_value)
+ )
+
+ def __str__(self):
+ return '{0}={1}'.format(
+ self.name, ','.join(str(x) for x in self.value)
+ )
+
+
+class MultiValuedVariant(AbstractVariant):
+ """A variant that can hold multiple values at once."""
+ @implicit_variant_conversion
+ def satisfies(self, other):
+ """Returns true if ``other.name == self.name`` and ``other.value`` is
+ a strict subset of self. Does not try to validate.
+
+ Args:
+ other: constraint to be met for the method to return True
+
+ Returns:
+ bool: True or False
+ """
+ # If names are different then `self` does not satisfy `other`
+ # (`foo=bar` does not satisfy `baz=bar`)
+ if other.name != self.name:
+ return False
+
+ # Otherwise we want all the values in `other` to be also in `self`
+ return all(v in self.value for v in other.value)
+
+
+class SingleValuedVariant(MultiValuedVariant):
+ """A variant that can hold multiple values, but one at a time."""
+
+ def _value_setter(self, value):
+ # Treat the value as a multi-valued variant
+ super(SingleValuedVariant, self)._value_setter(value)
+
+ # Then check if there's only a single value
+ if len(self._value) != 1:
+ raise MultipleValuesInExclusiveVariantError(self, None)
+ self._value = str(self._value[0])
+
+ def __str__(self):
+ return '{0}={1}'.format(self.name, self.value)
+
+ @implicit_variant_conversion
+ def satisfies(self, other):
+ # If names are different then `self` does not satisfy `other`
+ # (`foo=bar` does not satisfy `baz=bar`)
+ if other.name != self.name:
+ return False
+
+ return self.value == other.value
+
+ def compatible(self, other):
+ return self.satisfies(other)
+
+ @implicit_variant_conversion
+ def constrain(self, other):
+ if self.name != other.name:
+ raise ValueError('variants must have the same name')
+
+ if self.value != other.value:
+ raise UnsatisfiableVariantSpecError(other.value, self.value)
+ return False
+
+ def __contains__(self, item):
+ return item == self.value
+
+ def yaml_entry(self):
+ return self.name, self.value
+
+
+class BoolValuedVariant(SingleValuedVariant):
+ """A variant that can hold either True or False."""
+
+ def _value_setter(self, value):
+ # Check the string representation of the value and turn
+ # it to a boolean
+ if str(value).upper() == 'TRUE':
+ self._original_value = value
+ self._value = True
+ elif str(value).upper() == 'FALSE':
+ self._original_value = value
+ self._value = False
+ else:
+ msg = 'cannot construct a BoolValuedVariant for "{0}" from '
+ msg += 'a value that does not represent a bool'
+ raise ValueError(msg.format(self.name))
+
+ def __contains__(self, item):
+ return item is self.value
+
+ def __str__(self):
+ return '{0}{1}'.format('+' if self.value else '~', self.name)
+
+
+class VariantMap(lang.HashableMap):
+ """Map containing variant instances. New values can be added only
+ if the key is not already present.
+ """
+
+ def __init__(self, spec):
+ super(VariantMap, self).__init__()
+ self.spec = spec
+
+ def __setitem__(self, name, vspec):
+ # Raise a TypeError if vspec is not of the right type
+ if not isinstance(vspec, AbstractVariant):
+ msg = 'VariantMap accepts only values of variant types'
+ msg += ' [got {0} instead]'.format(type(vspec).__name__)
+ raise TypeError(msg)
+
+ # Raise an error if the variant was already in this map
+ if name in self.dict:
+ msg = 'Cannot specify variant "{0}" twice'.format(name)
+ raise DuplicateVariantError(msg)
+
+ # Raise an error if name and vspec.name don't match
+ if name != vspec.name:
+ msg = 'Inconsistent key "{0}", must be "{1}" to match VariantSpec'
+ raise KeyError(msg.format(name, vspec.name))
+
+ # Set the item
+ super(VariantMap, self).__setitem__(name, vspec)
+
+ def substitute(self, vspec):
+ """Substitutes the entry under ``vspec.name`` with ``vspec``.
+
+ Args:
+ vspec: variant spec to be substituted
+ """
+ if vspec.name not in self:
+ msg = 'cannot substitute a key that does not exist [{0}]'
+ raise KeyError(msg.format(vspec.name))
+
+ # Set the item
+ super(VariantMap, self).__setitem__(vspec.name, vspec)
+
+ def satisfies(self, other, strict=False):
+ """Returns True if this VariantMap is more constrained than other,
+ False otherwise.
+
+ Args:
+ other (VariantMap): VariantMap instance to satisfy
+ strict (bool): if True return False if a key is in other and
+ not in self, otherwise discard that key and proceed with
+ evaluation
+
+ Returns:
+ bool: True or False
+ """
+ to_be_checked = [k for k in other]
+
+ strict_or_concrete = strict
+ if self.spec is not None:
+ strict_or_concrete |= self.spec._concrete
+
+ if not strict_or_concrete:
+ to_be_checked = filter(lambda x: x in self, to_be_checked)
+
+ return all(k in self and self[k].satisfies(other[k])
+ for k in to_be_checked)
+
+ def constrain(self, other):
+ """Add all variants in other that aren't in self to self. Also
+ constrain all multi-valued variants that are already present.
+ Return True if self changed, False otherwise
+
+ Args:
+ other (VariantMap): instance against which we constrain self
+
+ Returns:
+ bool: True or False
+ """
+ if other.spec is not None and other.spec._concrete:
+ for k in self:
+ if k not in other:
+ raise UnsatisfiableVariantSpecError(self[k], '<absent>')
+
+ changed = False
+ for k in other:
+ if k in self:
+ # If they are not compatible raise an error
+ if not self[k].compatible(other[k]):
+ raise UnsatisfiableVariantSpecError(self[k], other[k])
+ # If they are compatible merge them
+ changed |= self[k].constrain(other[k])
+ else:
+ # If it is not present copy it straight away
+ self[k] = other[k].copy()
+ changed = True
+
+ return changed
+
+ @property
+ def concrete(self):
+ """Returns True if the spec is concrete in terms of variants.
+
+ Returns:
+ bool: True or False
+ """
+ return self.spec._concrete or all(
+ v in self for v in self.spec.package_class.variants
+ )
+
+ def copy(self):
+ """Return an instance of VariantMap equivalent to self.
+
+ Returns:
+ VariantMap: a copy of self
+ """
+ clone = VariantMap(self.spec)
+ for name, variant in self.items():
+ clone[name] = variant.copy()
+ return clone
+
+ def __str__(self):
+ # print keys in order
+ sorted_keys = sorted(self.keys())
+
+ # add spaces before and after key/value variants.
+ string = StringIO()
+
+ kv = False
+ for key in sorted_keys:
+ vspec = self[key]
+
+ if not isinstance(vspec.value, bool):
+ # add space before all kv pairs.
+ string.write(' ')
+ kv = True
+ else:
+ # not a kv pair this time
+ if kv:
+ # if it was LAST time, then pad after.
+ string.write(' ')
+ kv = False
+
+ string.write(str(vspec))
+
+ return string.getvalue()
+
+
+def substitute_abstract_variants(spec):
+ """Uses the information in `spec.package` to turn any variant that needs
+ it into a SingleValuedVariant.
+
+ Args:
+ spec: spec on which to operate the substitution
+ """
+ for name, v in spec.variants.items():
+ if name in spack.directives.reserved_names:
+ continue
+ pkg_variant = spec.package_class.variants[name]
+ new_variant = pkg_variant.make_variant(v._original_value)
+ pkg_variant.validate_or_raise(new_variant, spec.package_class)
+ spec.variants.substitute(new_variant)
+
+
+class DuplicateVariantError(error.SpecError):
+ """Raised when the same variant occurs in a spec twice."""
+
+
+class UnknownVariantError(error.SpecError):
+ """Raised when an unknown variant occurs in a spec."""
+
+ def __init__(self, pkg, variant):
+ super(UnknownVariantError, self).__init__(
+ 'Package {0} has no variant {1}!'.format(pkg, variant)
+ )
+
+
+class InconsistentValidationError(error.SpecError):
+ """Raised if the wrong validator is used to validate a variant."""
+ def __init__(self, vspec, variant):
+ msg = ('trying to validate variant "{0.name}" '
+ 'with the validator of "{1.name}"')
+ super(InconsistentValidationError, self).__init__(
+ msg.format(vspec, variant)
+ )
+
+
+class MultipleValuesInExclusiveVariantError(error.SpecError, ValueError):
+ """Raised when multiple values are present in a variant that wants
+ only one.
+ """
+ def __init__(self, variant, pkg):
+ msg = 'multiple values are not allowed for variant "{0.name}"{1}'
+ pkg_info = ''
+ if pkg is not None:
+ pkg_info = ' in package "{0}"'.format(pkg.name)
+ super(MultipleValuesInExclusiveVariantError, self).__init__(
+ msg.format(variant, pkg_info)
+ )
+
+
+class InvalidVariantValueError(error.SpecError):
+ """Raised when a valid variant has at least an invalid value."""
+
+ def __init__(self, variant, invalid_values, pkg):
+ msg = 'invalid values for variant "{0.name}"{2}: {1}\n'
+ pkg_info = ''
+ if pkg is not None:
+ pkg_info = ' in package "{0}"'.format(pkg.name)
+ super(InvalidVariantValueError, self).__init__(
+ msg.format(variant, invalid_values, pkg_info)
+ )
+
+
+class UnsatisfiableVariantSpecError(error.UnsatisfiableSpecError):
+ """Raised when a spec variant conflicts with package constraints."""
+
+ def __init__(self, provided, required):
+ super(UnsatisfiableVariantSpecError, self).__init__(
+ provided, required, "variant")
diff --git a/lib/spack/spack/version.py b/lib/spack/spack/version.py
index 0d68a709e8..cef58d43f4 100644
--- a/lib/spack/spack/version.py
+++ b/lib/spack/spack/version.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -47,8 +47,8 @@ import re
import numbers
from bisect import bisect_left
from functools import wraps
+from six import string_types
-from functools_backport import total_ordering
from spack.util.spack_yaml import syaml_dict
__all__ = ['Version', 'VersionRange', 'VersionList', 'ver']
@@ -107,11 +107,6 @@ def coerced(method):
return coercing_method
-def _numeric_lt(self0, other):
- """Compares two versions, knowing they're both numeric"""
-
-
-@total_ordering
class Version(object):
"""Class to represent versions"""
@@ -131,30 +126,90 @@ class Version(object):
self.version = tuple(int_if_int(seg) for seg in segments)
# Store the separators from the original version string as well.
- # last element of separators is ''
- self.separators = tuple(re.split(segment_regex, string)[1:-1])
+ self.separators = tuple(re.split(segment_regex, string)[1:])
@property
def dotted(self):
- return '.'.join(str(x) for x in self.version)
+ """The dotted representation of the version.
+
+ Example:
+ >>> version = Version('1-2-3b')
+ >>> version.dotted
+ Version('1.2.3b')
+
+ Returns:
+ Version: The version with separator characters replaced by dots
+ """
+ return Version(self.string.replace('-', '.').replace('_', '.'))
@property
def underscored(self):
- return '_'.join(str(x) for x in self.version)
+ """The underscored representation of the version.
+
+ Example:
+ >>> version = Version('1.2.3b')
+ >>> version.underscored
+ Version('1_2_3b')
+
+ Returns:
+ Version: The version with separator characters replaced by
+ underscores
+ """
+ return Version(self.string.replace('.', '_').replace('-', '_'))
@property
def dashed(self):
- return '-'.join(str(x) for x in self.version)
+ """The dashed representation of the version.
+
+ Example:
+ >>> version = Version('1.2.3b')
+ >>> version.dashed
+ Version('1-2-3b')
+
+ Returns:
+ Version: The version with separator characters replaced by dashes
+ """
+ return Version(self.string.replace('.', '-').replace('_', '-'))
@property
def joined(self):
- return ''.join(str(x) for x in self.version)
+ """The joined representation of the version.
+
+ Example:
+ >>> version = Version('1.2.3b')
+ >>> version.joined
+ Version('123b')
+
+ Returns:
+ Version: The version with separator characters removed
+ """
+ return Version(
+ self.string.replace('.', '').replace('-', '').replace('_', ''))
def up_to(self, index):
- """Return a version string up to the specified component, exclusive.
- e.g., if this is 10.8.2, self.up_to(2) will return '10.8'.
+ """The version up to the specified component.
+
+ Examples:
+ >>> version = Version('1.23-4b')
+ >>> version.up_to(1)
+ Version('1')
+ >>> version.up_to(2)
+ Version('1.23')
+ >>> version.up_to(3)
+ Version('1.23-4')
+ >>> version.up_to(4)
+ Version('1.23-4b')
+ >>> version.up_to(-1)
+ Version('1.23-4')
+ >>> version.up_to(-2)
+ Version('1.23')
+ >>> version.up_to(-3)
+ Version('1')
+
+ Returns:
+ Version: The first index components of the version
"""
- return '.'.join(str(x) for x in self[:index])
+ return self[:index]
def lowest(self):
return self
@@ -195,52 +250,27 @@ class Version(object):
nother = len(other.version)
return nother <= nself and self.version[:nother] == other.version
- def wildcard(self):
- """Create a regex that will match variants of this version string."""
- def a_or_n(seg):
- if type(seg) == int:
- return r'[0-9]+'
- else:
- return r'[a-zA-Z]+'
-
- version = self.version
-
- # Use a wildcard for separators, in case a version is written
- # two different ways (e.g., boost writes 1_55_0 and 1.55.0)
- sep_re = '[_.-]'
- separators = ('',) + (sep_re,) * len(self.separators)
-
- version += (version[-1],) * 2
- separators += (sep_re,) * 2
-
- segments = [a_or_n(seg) for seg in version]
-
- wc = segments[0]
- for i in xrange(1, len(separators)):
- wc += '(?:' + separators[i] + segments[i]
-
- # Add possible alpha or beta indicator at the end of each segemnt
- # We treat these specially b/c they're so common.
- wc += '(?:[a-z]|alpha|beta)?)?' * (len(segments) - 1)
- return wc
-
def __iter__(self):
return iter(self.version)
def __getitem__(self, idx):
cls = type(self)
+
if isinstance(idx, numbers.Integral):
return self.version[idx]
+
elif isinstance(idx, slice):
- # Currently len(self.separators) == len(self.version) - 1
- extendend_separators = self.separators + ('',)
string_arg = []
- for token, sep in zip(self.version, extendend_separators)[idx]:
+
+ pairs = zip(self.version[idx], self.separators[idx])
+ for token, sep in pairs:
string_arg.append(str(token))
string_arg.append(str(sep))
+
string_arg.pop() # We don't need the last separator
string_arg = ''.join(string_arg)
return cls(string_arg)
+
message = '{cls.__name__} indices must be integers'
raise TypeError(message.format(cls=cls))
@@ -250,6 +280,9 @@ class Version(object):
def __str__(self):
return self.string
+ def __format__(self, format_spec):
+ return self.string.format(format_spec)
+
@property
def concrete(self):
return self
@@ -323,9 +356,22 @@ class Version(object):
return (other is not None and
type(other) == Version and self.version == other.version)
+ @coerced
def __ne__(self, other):
return not (self == other)
+ @coerced
+ def __le__(self, other):
+ return self == other or self < other
+
+ @coerced
+ def __ge__(self, other):
+ return not (self < other)
+
+ @coerced
+ def __gt__(self, other):
+ return not (self == other) and not (self < other)
+
def __hash__(self):
return hash(self.version)
@@ -371,13 +417,12 @@ class Version(object):
return VersionList()
-@total_ordering
class VersionRange(object):
def __init__(self, start, end):
- if isinstance(start, basestring):
+ if isinstance(start, string_types):
start = Version(start)
- if isinstance(end, basestring):
+ if isinstance(end, string_types):
end = Version(end)
self.start = start
@@ -414,9 +459,22 @@ class VersionRange(object):
type(other) == VersionRange and
self.start == other.start and self.end == other.end)
+ @coerced
def __ne__(self, other):
return not (self == other)
+ @coerced
+ def __le__(self, other):
+ return self == other or self < other
+
+ @coerced
+ def __ge__(self, other):
+ return not (self < other)
+
+ @coerced
+ def __gt__(self, other):
+ return not (self == other) and not (self < other)
+
@property
def concrete(self):
return self.start if self.start == self.end else None
@@ -561,14 +619,13 @@ class VersionRange(object):
return out
-@total_ordering
class VersionList(object):
"""Sorted, non-redundant list of Versions and VersionRanges."""
def __init__(self, vlist=None):
self.versions = []
if vlist is not None:
- if isinstance(vlist, basestring):
+ if isinstance(vlist, string_types):
vlist = _string_to_version(vlist)
if type(vlist) == VersionList:
self.versions = vlist.versions
@@ -754,6 +811,7 @@ class VersionList(object):
def __eq__(self, other):
return other is not None and self.versions == other.versions
+ @coerced
def __ne__(self, other):
return not (self == other)
@@ -761,6 +819,18 @@ class VersionList(object):
def __lt__(self, other):
return other is not None and self.versions < other.versions
+ @coerced
+ def __le__(self, other):
+ return self == other or self < other
+
+ @coerced
+ def __ge__(self, other):
+ return not (self < other)
+
+ @coerced
+ def __gt__(self, other):
+ return not (self == other) and not (self < other)
+
def __hash__(self):
return hash(tuple(self.versions))
@@ -796,7 +866,7 @@ def ver(obj):
"""
if isinstance(obj, (list, tuple)):
return VersionList(obj)
- elif isinstance(obj, basestring):
+ elif isinstance(obj, string_types):
return _string_to_version(obj)
elif isinstance(obj, (int, float)):
return _string_to_version(str(obj))
diff --git a/share/spack/docs/docker/module-file-tutorial/Dockerfile b/share/spack/docs/docker/module-file-tutorial/Dockerfile
new file mode 100644
index 0000000000..a012492a98
--- /dev/null
+++ b/share/spack/docs/docker/module-file-tutorial/Dockerfile
@@ -0,0 +1,52 @@
+FROM ubuntu:16.04
+
+# General environment for docker
+ENV DEBIAN_FRONTEND=noninteractive \
+ SPACK_ROOT=/usr/local \
+ FORCE_UNSAFE_CONFIGURE=1
+
+# Install system packages
+RUN apt-get update \
+ && apt-get install -y --no-install-recommends \
+ autoconf \
+ build-essential \
+ ca-certificates \
+ coreutils \
+ curl man less \
+ emacs-nox vim nano \
+ git \
+ openmpi-bin openmpi-common libopenmpi-dev \
+ python \
+ unzip \
+ && rm -rf /var/lib/apt/lists/*
+
+# Load spack environment on login
+COPY spack.sh /etc/profile
+
+# Install spack
+RUN curl -s -L https://api.github.com/repos/spack/spack/tarball/develop \
+ | tar xzC $SPACK_ROOT --strip 1
+
+# Copy configuration for external packages
+COPY packages.yaml $SPACK_ROOT/etc/spack/
+
+# Build lmod
+RUN spack install lmod && spack clean -a
+
+# Build a compiler
+RUN spack install gcc@7.2.0 && spack clean -a
+RUN /bin/bash -l -c ' \
+ spack load gcc@7.2.0 \
+ && spack compiler add'
+
+# Build the software on top of the compiler
+RUN spack install netlib-scalapack ^openmpi ^openblas %gcc@7.2.0 \
+ && spack install netlib-scalapack ^mpich ^openblas %gcc@7.2.0 \
+ && spack install netlib-scalapack ^openmpi ^netlib-lapack %gcc@7.2.0 \
+ && spack install netlib-scalapack ^mpich ^netlib-lapack %gcc@7.2.0 \
+ && spack install py-scipy ^openblas \
+ && spack clean -a
+
+# image run hook: the -l will make sure /etc/profile environments are loaded
+CMD /bin/bash -l
+
diff --git a/share/spack/docs/docker/module-file-tutorial/packages.yaml b/share/spack/docs/docker/module-file-tutorial/packages.yaml
new file mode 100644
index 0000000000..8e3971e61f
--- /dev/null
+++ b/share/spack/docs/docker/module-file-tutorial/packages.yaml
@@ -0,0 +1,9 @@
+packages:
+ git:
+ buildable: False
+ paths:
+ git@2.9.4: /usr
+ openmpi:
+ buildable: False
+ paths:
+ openmpi@1.10.2: /usr
diff --git a/share/spack/docs/docker/module-file-tutorial/spack.sh b/share/spack/docs/docker/module-file-tutorial/spack.sh
new file mode 100644
index 0000000000..54d095c717
--- /dev/null
+++ b/share/spack/docs/docker/module-file-tutorial/spack.sh
@@ -0,0 +1,8 @@
+source $SPACK_ROOT/share/spack/setup-env.sh
+
+LMOD_DIR=$(spack location -i lmod)
+
+if [[ $LMOD_DIR ]] ; then
+ source ${LMOD_DIR}/lmod/lmod/init/bash
+ source $SPACK_ROOT/share/spack/setup-env.sh
+fi
diff --git a/share/spack/logo/spack-logo-text-64.png b/share/spack/logo/spack-logo-text-64.png
deleted file mode 100644
index 8dad4c519f..0000000000
--- a/share/spack/logo/spack-logo-text-64.png
+++ /dev/null
Binary files differ
diff --git a/share/spack/logo/spack-logo-text-bottom.svg b/share/spack/logo/spack-logo-text-bottom.svg
new file mode 100644
index 0000000000..90f5c5515e
--- /dev/null
+++ b/share/spack/logo/spack-logo-text-bottom.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="256" height="340"
+ viewBox="-128 -128 256 340"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .logo { font-family:Arial; font-weight:bold; }
+ .diamond { fill:#0f3a80; }
+ circle.back { fill:#ffa600; stroke:#0f3a80; stroke-width:6; }
+ circle.front { fill:#ffffff; stroke:#0f3a80; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#ffffff; stroke-width:7; }
+ line.shadow { stroke:#0f3a80; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffffff"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+
+ <text x="0" y="184" text-anchor="middle" font-size="64pt" class="logo">
+ Spack
+ </text>
+</svg>
diff --git a/share/spack/logo/spack-logo-text.svg b/share/spack/logo/spack-logo-text.svg
new file mode 100644
index 0000000000..5ad4588d8a
--- /dev/null
+++ b/share/spack/logo/spack-logo-text.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="850" height="256"
+ viewBox="-128 -128 850 256"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .logo { font-family:Arial; font-weight:bold; }
+ .diamond { fill:#0f3a80; }
+ circle.back { fill:#ffa600; stroke:#0f3a80; stroke-width:6; }
+ circle.front { fill:#ffffff; stroke:#0f3a80; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#ffffff; stroke-width:7; }
+ line.shadow { stroke:#0f3a80; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffffff"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+
+ <text x="160" y="64" font-size="128pt" class="logo">Spack</text>
+</svg>
diff --git a/share/spack/logo/spack-logo-white-text-48.png b/share/spack/logo/spack-logo-white-text-48.png
deleted file mode 100644
index 9e60867e81..0000000000
--- a/share/spack/logo/spack-logo-white-text-48.png
+++ /dev/null
Binary files differ
diff --git a/share/spack/logo/spack-logo-white-text-bottom.svg b/share/spack/logo/spack-logo-white-text-bottom.svg
new file mode 100644
index 0000000000..25d62a6b2d
--- /dev/null
+++ b/share/spack/logo/spack-logo-white-text-bottom.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="256" height="340"
+ viewBox="-128 -128 256 340"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .logo { font-family:Arial; font-weight:bold; fill:#ffffff; }
+ .diamond { fill:#ffffff; }
+ circle.back { fill:#ffa600; stroke:#ffffff; stroke-width:6; }
+ circle.front { fill:#0e3d7e; stroke:#ffffff; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#0e3d7e; stroke-width:7; }
+ line.shadow { stroke:#ffffff; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#0e3d7e"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+
+ <text x="0" y="184" text-anchor="middle" font-size="64pt" class="logo">
+ Spack
+ </text>
+</svg>
diff --git a/share/spack/logo/spack-logo-white-text.svg b/share/spack/logo/spack-logo-white-text.svg
new file mode 100644
index 0000000000..d3dfd73f5c
--- /dev/null
+++ b/share/spack/logo/spack-logo-white-text.svg
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="850" height="256"
+ viewBox="-128 -128 850 256"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .logo { font-family:Arial; font-weight:bold; fill:#ffffff; }
+ .diamond { fill:#ffffff; }
+ circle.back { fill:#ffa600; stroke:#ffffff; stroke-width:6; }
+ circle.front { fill:#0e3d7e; stroke:#ffffff; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#0e3d7e; stroke-width:7; }
+ line.shadow { stroke:#ffffff; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#0e3d7e"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+
+ <text x="160" y="64" font-size="128pt" class="logo">Spack</text>
+</svg>
diff --git a/share/spack/logo/spack-logo-white.svg b/share/spack/logo/spack-logo-white.svg
new file mode 100644
index 0000000000..3e6c40d123
--- /dev/null
+++ b/share/spack/logo/spack-logo-white.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="256" height="256"
+ viewBox="-128 -128 256 256"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .diamond { fill:#ffffff; }
+ circle.back { fill:#ffa600; stroke:#ffffff; stroke-width:6; }
+ circle.front { fill:#0e3d7e; stroke:#ffffff; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#0e3d7e; stroke-width:7; }
+ line.shadow { stroke:#ffffff; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#0e3d7e"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+</svg>
diff --git a/share/spack/logo/spack-logo.svg b/share/spack/logo/spack-logo.svg
new file mode 100644
index 0000000000..a56eed57a6
--- /dev/null
+++ b/share/spack/logo/spack-logo.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg width="256" height="256"
+ viewBox="-128 -128 256 256"
+ version="1.1"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:ev="http://www.w3.org/2001/xml-events">
+
+ <style>
+ .diamond { fill:#0f3a80; }
+ circle.back { fill:#ffa600; stroke:#0f3a80; stroke-width:6; }
+ circle.front { fill:#ffffff; stroke:#0f3a80; stroke-width:6; }
+ line.back { stroke:#ffa600; stroke-width:7; }
+ line.front { stroke:#ffffff; stroke-width:7; }
+ line.shadow { stroke:#0f3a80; stroke-width:7; }
+ </style>
+
+ <defs>
+ <!-- need two arrows b/c we can't sync color with the marked element -->
+ <marker id="barrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffa600"/>
+ </marker>
+ <marker id="farrow" markerWidth="4" markerHeight="3" refX=".05" refY="1.5"
+ orient="auto" markerUnits="strokeWidth">
+ <path d="M0,0 L0,3 L4,1.5 z" fill="#ffffff"/>
+ </marker>
+ </defs>
+
+ <!-- rounded diamond shape -->
+ <rect x="-97" y="-97" width="194" height="194" rx="26" ry="26"
+ transform="rotate(45)" class="diamond"/>
+
+ <!-- background dependency structure -->
+ <line x1="-11" y1="-80" x2="-11" y2="-29" transform="rotate(42 -11 -80)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-80" y1="0" x2="-80" y2="57" transform="rotate(-45 -80 0)"
+ class="back" marker-end="url(#barrow)"/>
+ <line x1="-11" y1="-80" x2="-11" y2="28" class="back"
+ marker-end="url(#barrow)"/>
+
+ <circle cx="-11" cy="-80" r="23" class="back"/>
+ <circle cx="0" cy="80" r="23" class="back"/>
+ <circle cx="-80" cy="0" r="23" class="back"/>
+
+ <!-- foreground dependency structure -->
+ <line x1="18" y1="-80" x2="18" y2="0" transform="rotate(42 17 -80)"
+ class="shadow"/>
+ <line x1="13" y1="-80" x2="13" y2="-5" transform="rotate(42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+
+ <line x1="11" y1="-80" x2="11" y2="-29" transform="rotate(-42 11 -80)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="80" y1="0" x2="80" y2="57" transform="rotate(45 80 0)"
+ class="front" marker-end="url(#farrow)"/>
+ <line x1="11" y1="-80" x2="11" y2="28" class="front"
+ marker-end="url(#farrow)"/>
+
+ <circle cx="11" cy="-80" r="23" class="front"/>
+ <circle cx="80" cy="0" r="23" class="front"/>
+</svg>
diff --git a/share/spack/qa/check_dependencies b/share/spack/qa/check_dependencies
deleted file mode 100755
index e999463b03..0000000000
--- a/share/spack/qa/check_dependencies
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/env bash
-#
-# Description:
-# Check to see if dependencies are installed.
-# If not, warn the user and tell them how to
-# install these dependencies.
-#
-# Usage:
-# check-deps <dep> ...
-#
-# Options:
-# One or more dependencies. Must use name of binary.
-
-for dep in "$@"; do
- if ! which $dep &> /dev/null; then
- # Map binary name to package name
- case $dep in
- sphinx-apidoc|sphinx-build)
- spack_package=py-sphinx
- pip_package=sphinx
- ;;
- coverage)
- spack_package=py-coverage
- pip_package=coverage
- ;;
- flake8)
- spack_package=py-flake8
- pip_package=flake8
- ;;
- dot)
- spack_package=graphviz
- ;;
- git)
- spack_package=git
- ;;
- hg)
- spack_package=mercurial
- pip_package=mercurial
- ;;
- svn)
- spack_package=subversion
- ;;
- *)
- spack_package=$dep
- pip_package=$dep
- ;;
- esac
-
- echo "ERROR: $dep is required to run this script."
- echo
-
- if [[ $spack_package ]]; then
- echo "To install with Spack, run:"
- echo " $ spack install $spack_package"
- fi
-
- if [[ $pip_package ]]; then
- echo "To install with pip, run:"
- echo " $ pip install $pip_package"
- fi
-
- if [[ $spack_package || $pip_package ]]; then
- echo "Then add the bin directory to your PATH."
- fi
-
- exit 1
- fi
-
- # Flake8 and Sphinx require setuptools in order to run.
- # Otherwise, they print out this error message:
- #
- # Traceback (most recent call last):
- # File: "/usr/bin/flake8", line 5, in <module>
- # from pkg_resources import load_entry_point
- # ImportError: No module named pkg_resources
- #
- # Print a more useful error message if setuptools not found.
- if [[ $dep == flake8 || $dep == sphinx* ]]; then
- # Find which Python is being run
- # Spack-installed packages have a hard-coded shebang
- python_cmd=$(head -n 1 $(which $dep) | cut -c 3-)
- # May not have a shebang
- if [[ $python_cmd != *python* ]]; then
- python_cmd=python
- fi
- # Check if setuptools is in the PYTHONPATH
- if ! $python_cmd -c "import setuptools" 2> /dev/null; then
- echo "ERROR: setuptools is required to run $dep."
- echo "Please add it to your PYTHONPATH."
-
- exit 1
- fi
- fi
-done
-
-echo "Dependencies found."
diff --git a/share/spack/qa/configuration/packages.yaml b/share/spack/qa/configuration/packages.yaml
new file mode 100644
index 0000000000..fad3489d3b
--- /dev/null
+++ b/share/spack/qa/configuration/packages.yaml
@@ -0,0 +1,13 @@
+packages:
+ cmake:
+ buildable: False
+ paths:
+ cmake@2.8.12.2: /usr
+ r:
+ buildable: False
+ paths:
+ r@3.0.2: /usr
+ perl:
+ buildable: False
+ paths:
+ perl@5.18.2: /usr
diff --git a/share/spack/qa/run-build-tests b/share/spack/qa/run-build-tests
new file mode 100755
index 0000000000..b5d5aed28f
--- /dev/null
+++ b/share/spack/qa/run-build-tests
@@ -0,0 +1,29 @@
+#!/bin/bash -e
+#
+# Description:
+# Runs Spack build smoke tests. This installs a few packages that
+# cover different parts of the build system. It is not an exhaustive
+# test of Spack's packages.
+#
+# Usage:
+# run-build-tests
+#
+. "$(dirname $0)/setup.sh"
+check_dependencies ${coverage} git hg svn
+
+# Move to root directory of Spack
+# Allows script to be run from anywhere
+cd "$SPACK_ROOT"
+
+# Make sure we have a spec to build.
+if [ -z "$SPEC" ]; then
+ echo "Error: run-build-tests requires the $SPEC to build to be set."
+ exit 1
+fi
+
+# Print compiler information
+spack config get compilers
+
+# Run some build smoke tests, potentially with code coverage
+${coverage_run} bin/spack install -v ${SPEC}
+${coverage_combine}
diff --git a/share/spack/qa/run-doc-tests b/share/spack/qa/run-doc-tests
index ca892d7eb4..c43779fcaf 100755
--- a/share/spack/qa/run-doc-tests
+++ b/share/spack/qa/run-doc-tests
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/bash -e
#
# Description:
# Builds Spack documentation and checks for
@@ -8,34 +8,13 @@
# Usage:
# run-doc-tests
#
-# Notes:
-# Requires sphinx, graphviz, git, mercurial, and subversion.
-#
-
-QA_DIR="$(dirname "$0")"
-SPACK_ROOT="$QA_DIR/../../.."
-DOC_DIR="$SPACK_ROOT/lib/spack/docs"
-
-# Array of dependencies
-deps=(
- sphinx-apidoc
- sphinx-build
- dot
- git
- hg
- svn
-)
-
-# Check for dependencies
-"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1
-
-# Add Spack to the PATH.
-export PATH="$SPACK_ROOT/bin:$PATH"
+. "$(dirname $0)/setup.sh"
+check_dependencies sphinx-apidoc sphinx-build dot git hg svn
# Move to documentation directory
# Allows script to be run from anywhere
-cd "$DOC_DIR"
+cd "$SPACK_ROOT/lib/spack/docs"
# Treat warnings as fatal errors
make clean --silent
-make SPHINXOPTS=-W JOBS=1
+make SPHINXOPTS=-W
diff --git a/share/spack/qa/run-flake8-tests b/share/spack/qa/run-flake8-tests
index 83469eeb9d..29fc15f9d7 100755
--- a/share/spack/qa/run-flake8-tests
+++ b/share/spack/qa/run-flake8-tests
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/bash -e
#
# Description:
# Runs source code style checks on Spack.
@@ -8,22 +8,7 @@
# Usage:
# run-flake8-tests
#
-# Notes:
-# Requires flake8.
-#
-
-QA_DIR="$(dirname "$0")"
-SPACK_ROOT="$QA_DIR/../../.."
-
-# Array of dependencies
-deps=(
- flake8
-)
-
-# Check for dependencies
-"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1
-
-# Add Spack to the PATH.
-export PATH="$SPACK_ROOT/bin:$PATH"
+. "$(dirname $0)/setup.sh"
+check_dependencies flake8
-exec spack flake8
+spack flake8
diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests
index d2ce9647af..87203ba915 100755
--- a/share/spack/qa/run-unit-tests
+++ b/share/spack/qa/run-unit-tests
@@ -1,4 +1,4 @@
-#!/usr/bin/env bash
+#!/bin/bash -e
#
# Description:
# Runs Spack unit tests.
@@ -10,42 +10,23 @@
# Optionally add one or more unit tests
# to only run these tests.
#
-# Notes:
-# Requires coverage, git, mercurial, and subversion.
-#
-
-QA_DIR="$(dirname "$0")"
-SPACK_ROOT="$QA_DIR/../../.."
-
-# Array of dependencies
-deps=(
- coverage
- git
- hg
- svn
-)
-
-# Check for dependencies
-"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1
-
-# Add Spack to the PATH.
-export PATH="$SPACK_ROOT/bin:$PATH"
+. "$(dirname $0)/setup.sh"
+check_dependencies ${coverage} git hg svn
# Move to root directory of Spack
# Allows script to be run from anywhere
cd "$SPACK_ROOT"
-# Run integration tests
-# TODO: should these be separated into a different test suite?
-source "$SPACK_ROOT/share/spack/setup-env.sh"
-spack compilers
+# Print compiler information
spack config get compilers
+# Run spack help to cover command import
+${coverage_run} bin/spack -h
+${coverage_run} bin/spack help -a
+
+# Profile and print top 20 lines for a simple call to spack spec
+${coverage_run} bin/spack -p --lines 20 spec mpileaks
+
# Run unit tests with code coverage
-if [[ "$TRAVIS_PYTHON_VERSION" == 2.7 ]]; then
- coverage run bin/spack install -v libdwarf
- coverage run bin/spack test "$@" && coverage combine
-else
- spack install -v libdwarf
- spack test "$@"
-fi
+${coverage_run} bin/spack test "$@"
+${coverage_combine}
diff --git a/share/spack/qa/setup.sh b/share/spack/qa/setup.sh
new file mode 100755
index 0000000000..98c79a0457
--- /dev/null
+++ b/share/spack/qa/setup.sh
@@ -0,0 +1,118 @@
+#!/bin/bash -e
+#
+# Description:
+# Common setup code to be sourced by Spack's test scripts.
+#
+
+QA_DIR="$(dirname ${BASH_SOURCE[0]})"
+SPACK_ROOT="$QA_DIR/../../.."
+
+# Source the setup script
+. "$SPACK_ROOT/share/spack/setup-env.sh"
+
+# Set up some variables for running coverage tests.
+if [[ "$COVERAGE" == true ]]; then
+ coverage=coverage
+ coverage_run="coverage run"
+ coverage_combine="coverage combine"
+else
+ coverage=""
+ coverage_run=""
+ coverage_combine=""
+fi
+
+#
+# Description:
+# Check to see if dependencies are installed.
+# If not, warn the user and tell them how to
+# install these dependencies.
+#
+# Usage:
+# check-deps <dep> ...
+#
+# Options:
+# One or more dependencies. Must use name of binary.
+check_dependencies() {
+ for dep in "$@"; do
+ if ! which $dep &> /dev/null; then
+ # Map binary name to package name
+ case $dep in
+ sphinx-apidoc|sphinx-build)
+ spack_package=py-sphinx
+ pip_package=sphinx
+ ;;
+ coverage)
+ spack_package=py-coverage
+ pip_package=coverage
+ ;;
+ flake8)
+ spack_package=py-flake8
+ pip_package=flake8
+ ;;
+ dot)
+ spack_package=graphviz
+ ;;
+ git)
+ spack_package=git
+ ;;
+ hg)
+ spack_package=mercurial
+ pip_package=mercurial
+ ;;
+ svn)
+ spack_package=subversion
+ ;;
+ *)
+ spack_package=$dep
+ pip_package=$dep
+ ;;
+ esac
+
+ echo "ERROR: $dep is required to run this script."
+ echo
+
+ if [[ $spack_package ]]; then
+ echo "To install with Spack, run:"
+ echo " $ spack install $spack_package"
+ fi
+
+ if [[ $pip_package ]]; then
+ echo "To install with pip, run:"
+ echo " $ pip install $pip_package"
+ fi
+
+ if [[ $spack_package || $pip_package ]]; then
+ echo "Then add the bin directory to your PATH."
+ fi
+
+ exit 1
+ fi
+
+ # Flake8 and Sphinx require setuptools in order to run.
+ # Otherwise, they print out this error message:
+ #
+ # Traceback (most recent call last):
+ # File: "/usr/bin/flake8", line 5, in <module>
+ # from pkg_resources import load_entry_point
+ # ImportError: No module named pkg_resources
+ #
+ # Print a more useful error message if setuptools not found.
+ if [[ $dep == flake8 || $dep == sphinx* ]]; then
+ # Find which Python is being run
+ # Spack-installed packages have a hard-coded shebang
+ python_cmd=$(head -n 1 $(which $dep) | cut -c 3-)
+ # May not have a shebang
+ if [[ $python_cmd != *python* ]]; then
+ python_cmd=python
+ fi
+ # Check if setuptools is in the PYTHONPATH
+ if ! $python_cmd -c "import setuptools" 2> /dev/null; then
+ echo "ERROR: setuptools is required to run $dep."
+ echo "Please add it to your PYTHONPATH."
+
+ exit 1
+ fi
+ fi
+ done
+ echo "Dependencies found."
+}
diff --git a/share/spack/setup-env.csh b/share/spack/setup-env.csh
index b960c21459..6fc728daa8 100755
--- a/share/spack/setup-env.csh
+++ b/share/spack/setup-env.csh
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -39,9 +39,15 @@ if ($?SPACK_ROOT) then
alias spack 'set _sp_args = (\!*); source $_spack_share_dir/csh/spack.csh'
alias _spack_pathadd 'set _pa_args = (\!*) && source $_spack_share_dir/csh/pathadd.csh'
+ # Shamelessly stolen from setup-env.sh
+ set _sp_sys_type = `$SPACK_ROOT/bin/spack python -c 'print(spack.architecture.sys_type())'`
+ set _sp_dotkit_root = `$SPACK_ROOT/bin/spack python -c "print(spack.util.path.canonicalize_path(spack.config.get_config('config').get('module_roots').get('dotkit')))"`
+ set _sp_tcl_root = `$SPACK_ROOT/bin/spack python -c "print(spack.util.path.canonicalize_path(spack.config.get_config('config').get('module_roots').get('tcl')))"`
+
# Set up modules and dotkit search paths in the user environment
- # TODO: fix SYS_TYPE to something non-LLNL-specific
- _spack_pathadd DK_NODE "$_spack_share_dir/dotkit/$SYS_TYPE"
- _spack_pathadd MODULEPATH "$_spack_share_dir/modules/$SYS_TYPE"
+ _spack_pathadd DK_NODE "$_sp_dotkit_root/$_sp_sys_type"
+ _spack_pathadd MODULEPATH "$_sp_tcl_root/$_sp_sys_type"
_spack_pathadd PATH "$SPACK_ROOT/bin"
+else
+ echo "ERROR: Sourcing spack setup-env.csh requires setting SPACK_ROOT to the root of your spack installation"
endif
diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index 943db72612..21a7e00345 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,9 @@
#
# This file is part of Spack and sets up the spack environment for
# bash and zsh. This includes dotkit support, module support, and
-# it also puts spack in your path. Source it like this:
+# it also puts spack in your path. The script also checks that
+# at least module support exists, and provides suggestions if it
+# doesn't. Source it like this:
#
# . /path/to/spack/share/spack/setup-env.sh
#
@@ -92,6 +94,8 @@ function spack {
LOC="$(spack location $_sp_arg "$@")"
if [[ -d "$LOC" ]] ; then
cd "$LOC"
+ else
+ return 1
fi
fi
return
@@ -167,6 +171,11 @@ function _spack_pathadd {
fi
}
+# Export spack function so it is available in subshells (only works with bash)
+if [ -n "${BASH_VERSION:-}" ]; then
+ export -f spack
+fi
+
#
# Figure out where this file is. Below code needs to be portable to
# bash and zsh.
@@ -182,14 +191,59 @@ if [ -z "$_sp_source_file" ]; then
fi
#
-# Set up modules and dotkit search paths in the user environment
+# Find root directory and add bin to path.
#
_sp_share_dir=$(cd "$(dirname $_sp_source_file)" && pwd)
_sp_prefix=$(cd "$(dirname $(dirname $_sp_share_dir))" && pwd)
_spack_pathadd PATH "${_sp_prefix%/}/bin"
+export SPACK_ROOT=${_sp_prefix}
+#
+# Determine which shell is being used
+#
+function _spack_determine_shell() {
+ ps -p $$ | tail -n 1 | awk '{print $4}' | sed 's/^-//' | xargs basename
+}
+export SPACK_SHELL=$(_spack_determine_shell)
+
+#
+# Check whether a function of the given name is defined
+#
+function _spack_fn_exists() {
+ LANG= type $1 2>&1 | grep -q 'function'
+}
+
+need_module="no"
+if ! _spack_fn_exists use && ! _spack_fn_exists module; then
+ need_module="yes"
+fi;
+
+#
+# build and make available environment-modules
+#
+if [ "${need_module}" = "yes" ]; then
+ #check if environment-modules is installed
+ module_prefix="$(spack location -i "environment-modules" 2>&1 || echo "not_installed")"
+ module_prefix=$(echo "${module_prefix}" | tail -n 1)
+ if [ "${module_prefix}" != "not_installed" ]; then
+ #activate it!
+ export MODULE_PREFIX=${module_prefix}
+ _spack_pathadd PATH "${MODULE_PREFIX}/Modules/bin"
+ module() { eval `${MODULE_PREFIX}/Modules/bin/modulecmd ${SPACK_SHELL} $*`; }
+ fi;
+fi;
+
+#
+# Set up modules and dotkit search paths in the user environment
+#
_sp_sys_type=$(spack-python -c 'print(spack.architecture.sys_type())')
_sp_dotkit_root=$(spack-python -c "print(spack.util.path.canonicalize_path(spack.config.get_config('config').get('module_roots', {}).get('dotkit')))")
_sp_tcl_root=$(spack-python -c "print(spack.util.path.canonicalize_path(spack.config.get_config('config').get('module_roots', {}).get('tcl')))")
_spack_pathadd DK_NODE "${_sp_dotkit_root%/}/$_sp_sys_type"
_spack_pathadd MODULEPATH "${_sp_tcl_root%/}/$_sp_sys_type"
+
+# Add programmable tab completion for Bash
+#
+if [ -n "${BASH_VERSION:-}" ]; then
+ source $_sp_share_dir/spack-completion.bash
+fi
diff --git a/share/spack/spack-completion.bash b/share/spack/spack-completion.bash
new file mode 100755
index 0000000000..56cbfef792
--- /dev/null
+++ b/share/spack/spack-completion.bash
@@ -0,0 +1,953 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+# The following global variables are used/set by Bash programmable completion
+# COMP_CWORD: An index into ${COMP_WORDS} of the word containing the
+# current cursor position
+# COMP_LINE: The current command line
+# COMP_WORDS: an array containing individual command arguments typed so far
+# COMPREPLY: an array containing possible completions as a result of your
+# function
+
+# Bash programmable completion for Spack
+function _bash_completion_spack {
+ # In all following examples, let the cursor be denoted by brackets, i.e. []
+
+ # For our purposes, flags should not affect tab completion. For instance,
+ # `spack install []` and `spack -d install --jobs 8 []` should both give the same
+ # possible completions. Therefore, we need to ignore any flags in COMP_WORDS.
+ local COMP_WORDS_NO_FLAGS=()
+ local index=0
+ while [[ "$index" -lt "$COMP_CWORD" ]]
+ do
+ if [[ "${COMP_WORDS[$index]}" == [a-z]* ]]
+ then
+ COMP_WORDS_NO_FLAGS+=("${COMP_WORDS[$index]}")
+ fi
+ let index++
+ done
+
+ # Options will be listed by a subfunction named after non-flag arguments.
+ # For example, `spack -d install []` will call _spack_install
+ # and `spack compiler add []` will call _spack_compiler_add
+ local subfunction=$(IFS='_'; echo "_${COMP_WORDS_NO_FLAGS[*]}")
+ # Translate dashes to underscores, as dashes are not permitted in
+ # compatibility mode. See https://github.com/spack/spack/pull/4079
+ subfunction=${subfunction//-/_}
+
+ # However, the word containing the current cursor position needs to be
+ # added regardless of whether or not it is a flag. This allows us to
+ # complete something like `spack install --keep-st[]`
+ COMP_WORDS_NO_FLAGS+=("${COMP_WORDS[$COMP_CWORD]}")
+
+ # Since we have removed all words after COMP_CWORD, we can safely assume
+ # that COMP_CWORD_NO_FLAGS is simply the index of the last element
+ local COMP_CWORD_NO_FLAGS=$(( ${#COMP_WORDS_NO_FLAGS[@]} - 1 ))
+
+ # There is no guarantee that the cursor is at the end of the command line
+ # when tab completion is envoked. For example, in the following situation:
+ # `spack -d [] install`
+ # if the user presses the TAB key, a list of valid flags should be listed.
+ # Note that we cannot simply ignore everything after the cursor. In the
+ # previous scenario, the user should expect to see a list of flags, but
+ # not of other subcommands. Obviously, `spack -d list install` would be
+ # invalid syntax. To accomplish this, we use the variable list_options
+ # which is true if the current word starts with '-' or if the cursor is
+ # not at the end of the line.
+ local list_options=false
+ if [[ "${COMP_WORDS[$COMP_CWORD]}" == -* || \
+ "$COMP_CWORD" -ne "${#COMP_WORDS[@]}-1" ]]
+ then
+ list_options=true
+ fi
+
+ # In general, when envoking tab completion, the user is not expecting to
+ # see optional flags mixed in with subcommands or package names. Tab
+ # completion is used by those who are either lazy or just bad at spelling.
+ # If someone doesn't remember what flag to use, seeing single letter flags
+ # in their results won't help them, and they should instead consult the
+ # documentation. However, if the user explicitly declares that they are
+ # looking for a flag, we can certainly help them out.
+ # `spack install -[]`
+ # and
+ # `spack install --[]`
+ # should list all flags and long flags, respectively. Furthermore, if a
+ # subcommand has no non-flag completions, such as `spack arch []`, it
+ # should list flag completions.
+
+ local cur=${COMP_WORDS_NO_FLAGS[$COMP_CWORD_NO_FLAGS]}
+ local prev=${COMP_WORDS_NO_FLAGS[$COMP_CWORD_NO_FLAGS-1]}
+
+ #_test_vars
+
+ # Make sure function exists before calling it
+ if [[ "$(type -t $subfunction)" == "function" ]]
+ then
+ COMPREPLY=($($subfunction))
+ fi
+}
+
+# Spack commands
+
+function _spack {
+ if $list_options
+ then
+ compgen -W "-h --help -d --debug -D --pdb -k --insecure -m --mock -p
+ --profile -v --verbose -s --stacktrace -V --version
+ --color --color=always --color=auto --color=never" -- "$cur"
+ else
+ compgen -W "$(_subcommands)" -- "$cur"
+ fi
+}
+
+function _spack_activate {
+ if $list_options
+ then
+ compgen -W "-h --help -f --force" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_arch {
+ compgen -W "-h --help -p --platform" -- "$cur"
+}
+
+function _spack_bootstrap {
+ # FIXME: What does this command even do?
+ if $list_options
+ then
+ compgen -W "-h --help -r --remote" -- "$cur"
+ fi
+}
+
+function _spack_build {
+ if $list_options
+ then
+ compgen -W "-h --help -v --verbose" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_buildcache {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "create install keys list" -- "$cur"
+ fi
+}
+
+function _spack_buildcache_create {
+ if $list_options
+ then
+ compgen -W "-h --help -r --rel -f --force -y --yes-to-all -k --key
+ -d --directory" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_buildcache_install {
+ if $list_options
+ then
+ compgen -W "-h --help -f --force -y --yes-to-all" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_buildcache_keys {
+ if $list_options
+ then
+ compgen -W "-h --help -i --install -y --yes-to-all" -- "$cur"
+ fi
+}
+
+function _spack_buildcache_list {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_cd {
+ if $list_options
+ then
+ compgen -W "-h --help -m --module-dir -r --spack-root -i --install-dir
+ -p --package-dir -P --packages -s --stage-dir -S --stages
+ -b --build-dir" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_checksum {
+ if $list_options
+ then
+ compgen -W "-h --help --keep-stage" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_clean {
+ if $list_options
+ then
+ compgen -W "-h --help -s --stage -d --downloads
+ -m --misc-cache -a --all" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_compiler {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "find add remove rm list info" -- "$cur"
+ fi
+}
+
+function _spack_compiler_add {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ fi
+}
+
+function _spack_compiler_find {
+ # Alias to `spack compiler add`
+ _spack_compiler_add
+}
+
+function _spack_compiler_info {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ else
+ compgen -W "$(_installed_compilers)" -- "$cur"
+ fi
+}
+
+function _spack_compiler_list {
+ compgen -W "-h --help --scope" -- "$cur"
+}
+
+function _spack_compiler_remove {
+ if $list_options
+ then
+ compgen -W "-h --help -a --all --scope" -- "$cur"
+ else
+ compgen -W "$(_installed_compilers)" -- "$cur"
+ fi
+}
+
+function _spack_compiler_rm {
+ # Alias to `spack compiler remove`
+ _spack_compiler_remove
+}
+
+function _spack_compilers {
+ compgen -W "-h --help --scope" -- "$cur"
+}
+
+function _spack_config {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ else
+ compgen -W "edit get" -- "$cur"
+ fi
+}
+
+function _spack_config_edit {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "mirrors repos modules packages config compilers" -- "$cur"
+ fi
+}
+
+function _spack_config_get {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "mirrors repos modules packages config compilers" -- "$cur"
+ fi
+}
+
+function _spack_configure {
+ if $list_options
+ then
+ compgen -W "-h --help -v --verbose" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_create {
+ compgen -W "-h --help --keep-stage -n --name -t --template -r --repo
+ -N --namespace -f --force" -- "$cur"
+}
+
+function _spack_deactivate {
+ if $list_options
+ then
+ compgen -W "-h --help -f --force -a --all" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_debug {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "create-db-tarball" -- "$cur"
+ fi
+}
+
+function _spack_debug_create_db_tarball {
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_dependents {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_diy {
+ if $list_options
+ then
+ compgen -W "-h --help -i --ignore-dependencies --keep-prefix
+ --skip-patch -q --quiet --clean --dirty" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_doc {
+ # FIXME: What does this command even do?
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_edit {
+ if $list_options
+ then
+ compgen -W "-h --help -b --build-system -c --command -t --test -m --module
+ -r --repo -N --namespace" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_env {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_extensions {
+ if $list_options
+ then
+ compgen -W "-h --help -l --long -p --paths -d --deps" -- "$cur"
+ else
+ compgen -W "go-bootstrap go lua octave python r ruby rust" -- "$cur"
+ fi
+}
+
+function _spack_fetch {
+ if $list_options
+ then
+ compgen -W "-h --help -n --no-checksum -m --missing
+ -D --dependencies" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_find {
+ if $list_options
+ then
+ compgen -W "-h --help -s --short -p --paths -d --deps -l --long
+ -L --very-long -f --show-flags --show-full-compiler
+ -e --explicit -E --implicit -u --unknown -m --missing
+ -v --variants -M --only-missing -N --namespace" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_flake8 {
+ if $list_options
+ then
+ compgen -W "-h --help -k --keep-temp -o --output
+ -r --root-relative -U --no-untracked" -- "$cur"
+ fi
+}
+
+function _spack_graph {
+ if $list_options
+ then
+ compgen -W "-h --help -a --ascii -d --dot -n --normalize -s --static
+ -i --installed -t --deptype" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_help {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_subcommands)" -- "$cur"
+ fi
+}
+
+function _spack_info {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_install {
+ if $list_options
+ then
+ compgen -W "-h --help --only -j --jobs --keep-prefix --keep-stage
+ -n --no-checksum -v --verbose --fake --clean --dirty
+ --run-tests --log-format --log-file --source" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_list {
+ if $list_options
+ then
+ compgen -W "-h --help -d --search-description --format" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_load {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_location {
+ if $list_options
+ then
+ compgen -W "-h --help -m --module-dir -r --spack-root -i --install-dir
+ -p --package-dir -P --packages -s --stage-dir -S --stages
+ -b --build-dir" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_md5 {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+function _spack_mirror {
+ if $list_options
+ then
+ compgen -W "-h --help -n --no-checksum" -- "$cur"
+ else
+ compgen -W "add create list remove rm" -- "$cur"
+ fi
+}
+
+function _spack_mirror_add {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ fi
+}
+
+function _spack_mirror_create {
+ if $list_options
+ then
+ compgen -W "-h --help -d --directory -f --file
+ -D --dependencies -o --one-version-per-spec" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_mirror_list {
+ compgen -W "-h --help --scope" -- "$cur"
+}
+
+function _spack_mirror_remove {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ else
+ compgen -W "$(_mirrors)" -- "$cur"
+ fi
+}
+
+function _spack_module {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "find loads refresh rm" -- "$cur"
+ fi
+}
+
+function _spack_module_find {
+ if $list_options
+ then
+ compgen -W "-h --help -m --module-type" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_module_loads {
+ if $list_options
+ then
+ compgen -W "-h --help --input-only -p --prefix -x --exclude
+ -m --module-type -r --dependencies" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+
+}
+
+function _spack_module_refresh {
+ if $list_options
+ then
+ compgen -W "-h --help --delete-tree -m --module-type
+ -y --yes-to-all" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_module_rm {
+ if $list_options
+ then
+ compgen -W "-h --help -m --module-type -y --yes-to-all" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_patch {
+ if $list_options
+ then
+ compgen -W "-h --help -n --no-checksum" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_pkg {
+ # FIXME: What does this subcommand even do?
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "add added diff list removed" -- "$cur"
+ fi
+}
+
+function _spack_pkg_add {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_pkg_added {
+ # FIXME: How to list git revisions?
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_pkg_diff {
+ # FIXME: How to list git revisions?
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_pkg_list {
+ # FIXME: How to list git revisions?
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_pkg_removed {
+ # FIXME: How to list git revisions?
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_providers {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "awk blas daal elf golang ipp lapack mkl
+ mpe mpi opencl openfoam pil scalapack" -- "$cur"
+ fi
+}
+
+function _spack_python {
+ if $list_options
+ then
+ compgen -W "-h --help -c" -- "$cur"
+ fi
+}
+
+function _spack_reindex {
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_repo {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "add create list remove rm" -- "$cur"
+ fi
+}
+
+function _spack_repo_add {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ fi
+}
+
+function _spack_repo_create {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+function _spack_repo_list {
+ compgen -W "-h --help --scope" -- "$cur"
+}
+
+function _spack_repo_remove {
+ if $list_options
+ then
+ compgen -W "-h --help --scope" -- "$cur"
+ else
+ compgen -W "$(_repos)" -- "$cur"
+ fi
+}
+
+function _spack_repo_rm {
+ # Alias to `spack repo remove`
+ _spack_repo_remove
+}
+
+function _spack_restage {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_setup {
+ if $list_options
+ then
+ compgen -W "-h --help -i --ignore-dependencies -v --verbose
+ --clean --dirty" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_spec {
+ if $list_options
+ then
+ compgen -W "-h --help -l --long -L --very-long -y --yaml -c --cover
+ -N --namespaces -I --install-status -t --types" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_stage {
+ if $list_options
+ then
+ compgen -W "-h --help -n --no-checksum -p --path" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_test {
+ if $list_options
+ then
+ compgen -W "-h --help -H --pytest-help -l --list
+ -L --long-list" -- "$cur"
+ else
+ compgen -W "$(_tests)" -- "$cur"
+ fi
+}
+
+function _spack_uninstall {
+ if $list_options
+ then
+ compgen -W "-h --help -f --force -a --all -R --dependents
+ -y --yes-to-all" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_unload {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)"
+ fi
+}
+
+function _spack_unuse {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)"
+ fi
+}
+
+function _spack_url {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "list parse summary" -- "$cur"
+ fi
+}
+
+function _spack_url_list {
+ compgen -W "-h --help -c --color -e --extrapolation
+ -n --incorrect-name -N --correct-name
+ -v --incorrect-version -V --correct-version" -- "$cur"
+}
+
+function _spack_url_parse {
+ compgen -W "-h --help -s --spider" -- "$cur"
+}
+
+function _spack_url_summary {
+ compgen -W "-h --help" -- "$cur"
+}
+
+function _spack_use {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_installed_packages)" -- "$cur"
+ fi
+}
+
+function _spack_versions {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ else
+ compgen -W "$(_all_packages)" -- "$cur"
+ fi
+}
+
+function _spack_view {
+ if $list_options
+ then
+ compgen -W "-h --help -v --verbose -e --exclude
+ -d --dependencies" -- "$cur"
+ else
+ compgen -W "add check hard hardlink remove rm soft
+ statlink status symlink" -- "$cur"
+ fi
+}
+
+function _spack_view_add {
+ # Alias for `spack view symlink`
+ _spack_view_symlink
+}
+
+function _spack_view_check {
+ # Alias for `spack view statlink`
+ _spack_view_statlink
+}
+
+function _spack_view_hard {
+ # Alias for `spack view hardlink`
+ _spack_view_hardlink
+}
+
+function _spack_view_hardlink {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+function _spack_view_remove {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+function _spack_view_rm {
+ # Alias for `spack view remove`
+ _spack_view_remove
+}
+
+function _spack_view_soft {
+ # Alias for `spack view symlink`
+ _spack_view_symlink
+}
+
+function _spack_view_statlink {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+function _spack_view_status {
+ # Alias for `spack view statlink`
+ _spack_view_statlink
+}
+
+function _spack_view_symlink {
+ if $list_options
+ then
+ compgen -W "-h --help" -- "$cur"
+ fi
+}
+
+# Helper functions for subcommands
+
+function _subcommands {
+ spack help --all | grep "^ [a-z]" | awk '{print $1}' | grep -v spack
+}
+
+function _all_packages {
+ spack list
+}
+
+function _installed_packages {
+ # Perl one-liner used to strip out color codes
+ spack find | grep -v "^--" | perl -pe 's/\e\[?.*?[\@-~]//g'
+}
+
+function _installed_compilers {
+ spack compilers | egrep -v "^(-|=)"
+}
+
+function _mirrors {
+ spack mirror list | awk '{print $1}'
+}
+
+function _repos {
+ spack repo list | awk '{print $1}'
+}
+
+function _tests {
+ spack test -l
+}
+
+# Testing functions
+
+function _test_vars {
+ echo "-----------------------------------------------------" >> temp
+ echo "Full line: '$COMP_LINE'" >> temp
+ echo >> temp
+ echo "Word list w/ flags: $(_pretty_print COMP_WORDS[@])" >> temp
+ echo "# words w/ flags: '${#COMP_WORDS[@]}'" >> temp
+ echo "Cursor index w/ flags: '$COMP_CWORD'" >> temp
+ echo >> temp
+ echo "Word list w/out flags: $(_pretty_print COMP_WORDS_NO_FLAGS[@])" >> temp
+ echo "# words w/out flags: '${#COMP_WORDS_NO_FLAGS[@]}'" >> temp
+ echo "Cursor index w/out flags: '$COMP_CWORD_NO_FLAGS'" >> temp
+ echo >> temp
+ echo "Subfunction: '$subfunction'" >> temp
+ if $list_options
+ then
+ echo "List options: 'True'" >> temp
+ else
+ echo "List options: 'False'" >> temp
+ fi
+ echo "Current word: '$cur'" >> temp
+ echo "Previous word: '$prev'" >> temp
+}
+
+# Pretty-prints one or more arrays
+# Syntax: _pretty_print array1[@] ...
+function _pretty_print {
+ for arg in $@
+ do
+ local array=("${!arg}")
+ echo -n "$arg: ["
+ printf "'%s'" "${array[0]}"
+ printf ", '%s'" "${array[@]:1}"
+ echo "]"
+ done
+}
+
+complete -o default -F _bash_completion_spack spack
diff --git a/templates/modules/modulefile.dk b/templates/modules/modulefile.dk
new file mode 100644
index 0000000000..c3f6d2dce1
--- /dev/null
+++ b/templates/modules/modulefile.dk
@@ -0,0 +1,31 @@
+{% block header %}
+{% if category %}
+#c {{ category }}
+{% endif %}
+{% if short_description %}
+#d {{ short_description }}
+{% endif %}
+{% if long_description %}
+{{ long_description| textwrap(72)| prepend_to_line('#h ')| join() }}
+{% endif %}
+{% endblock %}
+
+{% block autoloads %}
+{% for module in autoload %}
+dk_op {{ module }}
+{% endfor %}
+{% endblock %}
+
+{% block environment %}
+{% for command_name, cmd in environment_modifications %}
+{% if command_name == 'PrependPath' %}
+dk_alter {{ cmd.name }} {{ cmd.value }}
+{% endif %}
+{% if command_name == 'RemovePath' %}
+dk_unalter {{ cmd.name }} {{ cmd.value }}
+{% endif %}
+{% if command_name == 'SetEnv' %}
+dk_setenv {{ cmd.name }} {{ cmd.value }}
+{% endif %}
+{% endfor %}
+{% endblock %}
diff --git a/templates/modules/modulefile.lua b/templates/modules/modulefile.lua
new file mode 100644
index 0000000000..cf37595228
--- /dev/null
+++ b/templates/modules/modulefile.lua
@@ -0,0 +1,91 @@
+-- -*- lua -*-
+-- Module file created by spack (https://github.com/spack/spack) on {{ timestamp }}
+--
+-- {{ spec.short_spec }}
+--
+
+{% block header %}
+{% if short_description %}
+whatis([[Name : {{ spec.name }}]])
+whatis([[Version : {{ spec.version }}]])
+whatis([[Short description : {{ short_description }}]])
+{% endif %}
+{% if configure_options %}
+whatis([[Configure options : {{ configure_options }}]])
+{% endif %}
+
+{% if long_description %}
+help([[{{ long_description| textwrap(72)| join() }}]])
+{% endif %}
+{% endblock %}
+
+{% block provides %}
+{# Prepend the path I unlock as a provider of #}
+{# services and set the families of services I provide #}
+{% if has_modulepath_modifications %}
+-- Services provided by the package
+{% for name in provides %}
+family("{{ name }}")
+{% endfor %}
+
+-- Loading this module unlocks the path below unconditionally
+{% for path in unlocked_paths %}
+prepend_path("MODULEPATH", "{{ path }}")
+{% endfor %}
+
+{# Try to see if missing providers have already #}
+{# been loaded into the environment #}
+{% if has_conditional_modifications %}
+-- Try to load variables into path to see if providers are there
+{% for name in missing %}
+local {{ name }}_name = os.getenv("LMOD_{{ name|upper() }}_NAME")
+local {{ name }}_version = os.getenv("LMOD_{{ name|upper() }}_VERSION")
+{% endfor %}
+
+-- Change MODULEPATH based on the result of the tests above
+{% for condition, path in conditionally_unlocked_paths %}
+if {{ condition }} then
+ local t = pathJoin({{ path }})
+ prepend_path("MODULEPATH", t)
+end
+{% endfor %}
+
+-- Set variables to notify the provider of the new services
+{% for name in provides %}
+setenv("LMOD_{{ name|upper() }}_NAME", "{{ name_part }}")
+setenv("LMOD_{{ name|upper() }}_VERSION", "{{ version_part }}")
+{% endfor %}
+{% endif %}
+{% endif %}
+{% endblock %}
+
+{% block autoloads %}
+{% for module in autoload %}
+if not isloaded("{{ module }}") then
+{% if verbose %}
+ LmodMessage("Autoloading {{ module }}")
+{% endif %}
+ load("{{ module }}")
+end
+{% endfor %}
+{% endblock %}
+
+{% block environment %}
+{% for command_name, cmd in environment_modifications %}
+{% if command_name == 'PrependPath' %}
+prepend_path("{{ cmd.name }}", "{{ cmd.value }}")
+{% elif command_name == 'AppendPath' %}
+append_path("{{ cmd.name }}", "{{ cmd.value }}")
+{% elif command_name == 'RemovePath' %}
+remove_path("{{ cmd.name }}", "{{ cmd.value }}")
+{% elif command_name == 'SetEnv' %}
+setenv("{{ cmd.name }}", "{{ cmd.value }}")
+{% elif command_name == 'UnsetEnv' %}
+unsetenv("{{ cmd.name }}")
+{% endif %}
+{% endfor %}
+{% endblock %}
+
+{% block footer %}
+{# In case the module needs to be extended with custom LUA code #}
+{% endblock %}
diff --git a/templates/modules/modulefile.tcl b/templates/modules/modulefile.tcl
new file mode 100644
index 0000000000..833d8bf6c2
--- /dev/null
+++ b/templates/modules/modulefile.tcl
@@ -0,0 +1,82 @@
+#%Module1.0
+## Module file created by spack (https://github.com/spack/spack) on {{ timestamp }}
+##
+## {{ spec.short_spec }}
+##
+{% if configure_options %}
+## Configure options: {{ configure_options }}
+##
+{% endif %}
+
+
+{% block header %}
+{% if short_description %}
+module-whatis "{{ short_description }}"
+{% endif %}
+
+{% if long_description %}
+proc ModulesHelp { } {
+{{ long_description| textwrap(72)| quote()| prepend_to_line('puts stderr ')| join() }}
+}
+{% endif %}
+{% endblock %}
+
+{% block autoloads %}
+{% for module in autoload %}
+if ![ is-loaded {{ module }} ] {{ '{' }}
+{% if verbose %}
+ puts stderr "Autoloading {{ module }}"
+{% endif %}
+ module load {{ module }}
+{{ '}' }}
+{% endfor %}
+{% endblock %}
+{# #}
+{% block prerequisite %}
+{% for module in prerequisites %}
+prereq {{ module }}
+{% endfor %}
+{% endblock %}
+{# #}
+{% block conflict %}
+{% for name in conflicts %}
+conflict {{ name }}
+{% endfor %}
+{% endblock %}
+
+{% block environment %}
+{% for command_name, cmd in environment_modifications %}
+{% if cmd.separator != ':' %}
+{# A non-standard separator is required #}
+{% if command_name == 'PrependPath' %}
+prepend-path --delim "{{ cmd.separator }}" {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'AppendPath' %}
+append-path --delim "{{ cmd.separator }}" {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'RemovePath' %}
+remove-path --delim "{{ cmd.separator }}" {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'SetEnv' %}
+setenv --delim "{{ cmd.separator }}" {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'UnsetEnv' %}
+unsetenv {{ cmd.name }}
+{% endif %}
+{% else %}
+{# We are using the usual separator #}
+{% if command_name == 'PrependPath' %}
+prepend-path {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'AppendPath' %}
+append-path {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'RemovePath' %}
+remove-path {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'SetEnv' %}
+setenv {{ cmd.name }} "{{ cmd.value }}"
+{% elif command_name == 'UnsetEnv' %}
+unsetenv {{ cmd.name }}
+{% endif %}
+{# #}
+{% endif %}
+{% endfor %}
+{% endblock %}
+
+{% block footer %}
+{# In case he module needs to be extended with custom TCL code #}
+{% endblock %}
diff --git a/var/spack/gpg.mock/README.md b/var/spack/gpg.mock/README.md
new file mode 100644
index 0000000000..95215a8634
--- /dev/null
+++ b/var/spack/gpg.mock/README.md
@@ -0,0 +1,3 @@
+# Mock GPG directory
+
+This directory contains keys and data used in the testing Spack.
diff --git a/var/spack/gpg.mock/data/content.txt b/var/spack/gpg.mock/data/content.txt
new file mode 100644
index 0000000000..6ab0f567cf
--- /dev/null
+++ b/var/spack/gpg.mock/data/content.txt
@@ -0,0 +1 @@
+This file has a signature signed by an external key.
diff --git a/var/spack/gpg.mock/data/content.txt.asc b/var/spack/gpg.mock/data/content.txt.asc
new file mode 100644
index 0000000000..7593156113
--- /dev/null
+++ b/var/spack/gpg.mock/data/content.txt.asc
@@ -0,0 +1,17 @@
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2
+
+iQIcBAABCAAGBQJZELiKAAoJENygJBhApdriPvgP/0shBTmx4jg6QaI0zyie8a+R
++L/o9iIV4MqvBI5g+Ti+nktoCSxSOPOYFW4af740A7/43wIML9LK+gIhx/QbCrMb
+bNqzyIry9/L6PK1cCuXvd10CT+MCF1P0hdaMtKihdBYB3J8f5y1i30z+a8YWsRsX
+tPMVF/HunlpAkSWIpjmbJzFPT1R/UiBHl4VJ+mM3NNZYNIq8ZhKUiXwlQkZ8R8zg
+M0IEFkwfFtp7JxnhG7jR0k63cNm3KSocAJpwENy46RKGsAvwvqTzRh4T2MlmQIjH
+TC1MA8alJvtSdBHpkKffSU8jLewKHe1H48nc9NifMy04Ni8fSlGZe14Oe7Krqla0
+qWs+XHrGCmSleyiRUQes1MKQ7NhumKEoEaU+q0/c+lUDILZp1TlfvTPg2fzng4M/
+YF6+f+wqM+xY6z1/IloOMHis5oALjARSO88ldrLU4DQp/6jTKJO/+I4uWhMnPkMW
++a3GLWl1CShReHKbWZTLFtdQATZXA8M6wQ8FAsLOmRLb0AlEQ28A8fHrBCCdU2xj
+tSG++U1ZUo64cMYQmIMsvIApnkTh7qCkDjaVBP1to3qc83YHncxorydz9ERpuDvP
+d1IOHlJyUSM4+sLkCPvH9QyTaJn/x7D/VraznEiptGON7G6G9AgyAzIgYamm1Kwh
+UDhbQDFDhLLvUSDGzO3l
+=kwo9
+-----END PGP SIGNATURE-----
diff --git a/var/spack/gpg.mock/keys/external.key b/var/spack/gpg.mock/keys/external.key
new file mode 100644
index 0000000000..d08c90ea7f
--- /dev/null
+++ b/var/spack/gpg.mock/keys/external.key
@@ -0,0 +1,30 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v2
+
+mQINBFkQuFIBEAC7DiUM7jQ01kaGX+4nguzVeYquBRYoEUiObl5UIVSavMn4I7Oy
+aytG+qR26tUpunjEB6ftIQMJSyPKueclUJBaQ9lzQ3WpFC3ItpBNkMxHpiqPa9DX
+ddMk2QtJt4TlCWJEdnhR/92mMF+vf7B5/OvFvKOi0P+AwzBHC8IKTxml/UosmeVI
+Cs69FzRDXyqQxQAkATmuDmHXPaC6RkDmpVRe3ej+Kr+Xu4vcb/EBHg/vcZkFdSmi
+hyOj21/8LQZzcwTg4TSgHzKqbjPtIEQM3NNksvcFYlq2X0ad4cBcxa1Hj5xV8oS/
+bdYOFSdsh3QRROcEeKYVQZhvCR12qS93P4b2egbamBxCQK0Sn6QPIjlR6+Ya2/6p
+/hHddF+YVA6HJ22QZjaORf9lImYfYMs1ka2GtgkczOeaFEfcJ96nIa8Qb1jcrOon
+/3k/l+Ae09HRCcGB2DgKXw7S+CXKt46Oadp3bIDAyceotGnrG3cVA6A9Lwqy6U/5
+ywry8ETu3wlIR3EAIwM0a/3xCPg3cC/bt9rSqsFcmXyxltGI2CBTWcTqcyjW4VAw
+nVI8otBd4yNdimhpxLfx6AaMjA+D+OSltnAZUrp1fSFVhWLpTxLbcTv+HJ/g4U+x
++PAsQ79Hzmzvy/8nOvIprGzY4LCmBPbLUB47Yu761HhYQhkuJiYP1R/GzQARAQAB
+tDpTcGFjayB0ZXN0aW5nIChTcGFjayB0ZXN0aW5nIGtleSkgPHNwYWNrQGdvb2ds
+ZWdyb3Vwcy5jb20+iQI3BBMBCAAhBQJZELhSAhsDBQsJCAcCBhUICQoLAgQWAgMB
+Ah4BAheAAAoJENygJBhApdriOnUP/iLC1ZxyBP3STSVgBBTS1L6FnRAc9ya6eXNT
+EwLLoSL0I0srs0sThmhyW38ZamsXYDhggaetShxemcO0BoNAii/oNK9yQoXNF4f6
+7wg2ZxCDuDjp/3VsbiI+kNlH2kj1tQ/M53ak9nYhmwLJFfKzjQBWJiyTwYZwO3MB
+QvXBvLIKj6IDS20o+7jbOq8F243vo5/uNHc/6C9eC3i4jzXWVlln2+iN/e5sVt+X
+ZiggLK2Goj5CZ7ZjZQvdoH4wKbSPLBg0Lh5FYSih9p0wx0UTEoi0jPqFUDw81duz
+IyxjbGASSaUxoz16C2U/olPEAAXeBe4266jRQwTrn+sEIX5FD+RGoryXQ97pV5up
+I9wb2anVAMHOf20iYep3vYTjnFG/81ykODm8+I4D/Jj0EEe1E2b0D+7RQ9xKNYxC
+fDgY3isXBFzmS6O4h8N27P06yfzQX+zvjPrrHRB7ka2pmDT3M421p2wN0n9aCq1J
+8+M5UdpF98A38oosyE53KcItoCUFLgEP3KrWPwvpDUC2sNQAOFiHeitzc+v1iwmD
+RScdefCQ8qc2JJdCqMG6M0tlFy6Tw1o0eBYOhhDGa0rq/PQ4NewR2dj+yDXXBGJy
+ElR0VChqniMCyd2Q4SDPnhcVrWPTYSKL1MpsL0lXED8TGOdoAHHmQNU8MWhqmdBy
+zcWArNUY
+=yVqw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/var/spack/gpg/README.md b/var/spack/gpg/README.md
new file mode 100644
index 0000000000..122d24f841
--- /dev/null
+++ b/var/spack/gpg/README.md
@@ -0,0 +1,5 @@
+# GPG Keys
+
+This directory contains keys that should be trusted by this installation of
+Spack. They are imported when running `spack gpg init`, but may also be
+imported manually with `spack gpg trust path/to/key`.
diff --git a/var/spack/repos/builtin.mock/packages/a/package.py b/var/spack/repos/builtin.mock/packages/a/package.py
index 0d75ee1256..468e839dec 100644
--- a/var/spack/repos/builtin.mock/packages/a/package.py
+++ b/var/spack/repos/builtin.mock/packages/a/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,48 @@
from spack import *
-class A(Package):
- """Simple package with no dependencies"""
+class A(AutotoolsPackage):
+ """Simple package with one optional dependency"""
homepage = "http://www.example.com"
url = "http://www.example.com/a-1.0.tar.gz"
version('1.0', '0123456789abcdef0123456789abcdef')
+ version('2.0', '2.0_a_hash')
+
+ variant(
+ 'foo',
+ values=('bar', 'baz', 'fee'),
+ default='bar',
+ description='',
+ multi=True
+ )
+
+ variant(
+ 'foobar',
+ values=('bar', 'baz', 'fee'),
+ default='bar',
+ description='',
+ multi=False
+ )
+
+ variant('bvv', default=True, description='The good old BV variant')
+
+ depends_on('b', when='foobar=bar')
+
+ def with_or_without_fee(self, activated):
+ if not activated:
+ return '--no-fee'
+ return '--fee-all-the-time'
+
+ def autoreconf(self, spec, prefix):
+ pass
+
+ def configure(self, spec, prefix):
+ pass
+
+ def build(self, spec, prefix):
+ pass
def install(self, spec, prefix):
pass
diff --git a/var/spack/repos/builtin.mock/packages/b/package.py b/var/spack/repos/builtin.mock/packages/b/package.py
index 5729f24e79..b352fa6f80 100644
--- a/var/spack/repos/builtin.mock/packages/b/package.py
+++ b/var/spack/repos/builtin.mock/packages/b/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/boost/package.py b/var/spack/repos/builtin.mock/packages/boost/package.py
new file mode 100644
index 0000000000..df50e18574
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/boost/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 Boost(Package):
+ """Fake boost package."""
+
+ homepage = "http://www.boost.org"
+ url = "http://downloads.sourceforge.net/project/boost/boost/1.63.0/boost_1_63_0.tar.bz2"
+
+ version('1.63.0', '1c837ecd990bb022d07e7aab32b09847')
+
+ default_install_libs = set(['atomic',
+ 'chrono',
+ 'date_time',
+ 'filesystem',
+ 'graph',
+ 'iostreams',
+ 'locale',
+ 'log',
+ 'math',
+ 'program_options',
+ 'random',
+ 'regex',
+ 'serialization',
+ 'signals',
+ 'system',
+ 'test',
+ 'thread',
+ 'timer',
+ 'wave'])
+
+ # mpi/python are not installed by default because they pull in many
+ # dependencies and/or because there is a great deal of customization
+ # possible (and it would be difficult to choose sensible defaults)
+ default_noinstall_libs = set(['mpi', 'python'])
+
+ all_libs = default_install_libs | default_noinstall_libs
+
+ for lib in all_libs:
+ variant(lib, default=(lib not in default_noinstall_libs),
+ description="Compile with {0} library".format(lib))
+
+ variant('debug', default=False,
+ description='Switch to the debug version of Boost')
+ variant('shared', default=True,
+ description="Additionally build shared libraries")
+ variant('multithreaded', default=True,
+ description="Build multi-threaded versions of libraries")
+ variant('singlethreaded', default=False,
+ description="Build single-threaded versions of libraries")
+ variant('icu', default=False,
+ description="Build with Unicode and ICU suport")
+ variant('graph', default=False,
+ description="Build the Boost Graph library")
+ variant('taggedlayout', default=False,
+ description="Augment library names with build options")
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/build-error/package.py b/var/spack/repos/builtin.mock/packages/build-error/package.py
new file mode 100644
index 0000000000..e0c1a9ee83
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/build-error/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 BuildError(Package):
+ """This package has an install method that fails in a build script."""
+
+ homepage = "http://www.example.com/trivial_install"
+ url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz"
+
+ version('1.0', 'foobarbaz')
+
+ def install(self, spec, prefix):
+ with open('configure', 'w') as f:
+ f.write("""#!/bin/sh\n
+echo 'checking build system type... x86_64-apple-darwin16.6.0'
+echo 'checking host system type... x86_64-apple-darwin16.6.0'
+echo 'checking for gcc... /Users/gamblin2/src/spack/lib/spack/env/clang/clang'
+echo 'checking whether the C compiler works... yes'
+echo 'checking for C compiler default output file name... a.out'
+echo 'checking for suffix of executables...'
+echo 'configure: error: in /path/to/some/file:'
+echo 'configure: error: cannot run C compiled programs.'
+exit 1
+""")
+ configure()
diff --git a/var/spack/repos/builtin.mock/packages/c/package.py b/var/spack/repos/builtin.mock/packages/c/package.py
index 80777a05bb..22132dd00d 100644
--- a/var/spack/repos/builtin.mock/packages/c/package.py
+++ b/var/spack/repos/builtin.mock/packages/c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/callpath/package.py b/var/spack/repos/builtin.mock/packages/callpath/package.py
index 56b969df98..19438e6277 100644
--- a/var/spack/repos/builtin.mock/packages/callpath/package.py
+++ b/var/spack/repos/builtin.mock/packages/callpath/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,3 +40,6 @@ class Callpath(Package):
configure("--prefix=%s" % prefix)
make()
make("install")
+
+ def setup_environment(self, senv, renv):
+ renv.set('FOOBAR', self.name)
diff --git a/var/spack/repos/builtin.mock/packages/canfail/package.py b/var/spack/repos/builtin.mock/packages/canfail/package.py
new file mode 100644
index 0000000000..b49bb3ce3e
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/canfail/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Canfail(Package):
+ """Package which fails install unless a special attribute is set"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/a-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ succeed = False
+
+ def install(self, spec, prefix):
+ if not self.succeed:
+ raise InstallError("'succeed' was false")
+ touch(join_path(prefix, 'an_installation_file'))
diff --git a/var/spack/repos/builtin.mock/packages/cmake-client/package.py b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
index 51704e3f4b..2fde961376 100644
--- a/var/spack/repos/builtin.mock/packages/cmake-client/package.py
+++ b/var/spack/repos/builtin.mock/packages/cmake-client/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,9 +22,10 @@
# 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 *
import os
+from spack import *
+
def check(condition, msg):
"""Raise an install error if condition is False."""
@@ -39,6 +40,28 @@ class CmakeClient(CMakePackage):
version('1.0', '4cb3ff35b2472aae70f542116d616e63')
+ callback_counter = 0
+
+ flipped = False
+ run_this = True
+ check_this_is_None = None
+ did_something = False
+
+ @run_after('cmake')
+ @run_before('cmake', 'build', 'install')
+ def increment(self):
+ self.callback_counter += 1
+
+ @run_after('cmake')
+ @on_package_attributes(run_this=True, check_this_is_None=None)
+ def flip(self):
+ self.flipped = True
+
+ @run_after('cmake')
+ @on_package_attributes(does_not_exist=None)
+ def do_not_execute(self):
+ self.did_something = True
+
def setup_environment(self, spack_env, run_env):
spack_cc # Ensure spack module-scope variable is avaiabl
check(from_cmake == "from_cmake",
@@ -67,11 +90,15 @@ class CmakeClient(CMakePackage):
"setup_dependent_package.")
def cmake(self, spec, prefix):
- pass
+ assert self.callback_counter == 1
- build = cmake
+ def build(self, spec, prefix):
+ assert self.did_something is False
+ assert self.flipped is True
+ assert self.callback_counter == 3
def install(self, spec, prefix):
+ assert self.callback_counter == 4
# check that cmake is in the global scope.
global cmake
check(cmake is not None, "No cmake was in environment!")
diff --git a/var/spack/repos/builtin.mock/packages/cmake/package.py b/var/spack/repos/builtin.mock/packages/cmake/package.py
index c8b6464e69..15ad5606b4 100644
--- a/var/spack/repos/builtin.mock/packages/cmake/package.py
+++ b/var/spack/repos/builtin.mock/packages/cmake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/conflict-parent/package.py b/var/spack/repos/builtin.mock/packages/conflict-parent/package.py
new file mode 100644
index 0000000000..b8aaf55def
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/conflict-parent/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 ConflictParent(Package):
+ homepage = 'https://github.com/tgamblin/callpath'
+ url = 'http://github.com/tgamblin/callpath-1.0.tar.gz'
+
+ version(0.8, 'foobarbaz')
+ version(0.9, 'foobarbaz')
+ version(1.0, 'foobarbaz')
+
+ depends_on('conflict')
+
+ conflicts('^conflict~foo', when='@0.9')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
+
+ def setup_environment(self, senv, renv):
+ renv.set('FOOBAR', self.name)
diff --git a/var/spack/repos/builtin.mock/packages/conflict/package.py b/var/spack/repos/builtin.mock/packages/conflict/package.py
new file mode 100644
index 0000000000..26f09d77ee
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/conflict/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Conflict(Package):
+ homepage = 'https://github.com/tgamblin/callpath'
+ url = 'http://github.com/tgamblin/callpath-1.0.tar.gz'
+
+ version(0.8, 'foobarbaz')
+ version(0.9, 'foobarbaz')
+ version(1.0, 'foobarbaz')
+
+ variant('foo', default=True, description='')
+
+ conflicts('%clang', when='+foo')
+
+ def install(self, spec, prefix):
+ configure("--prefix=%s" % prefix)
+ make()
+ make("install")
+
+ def setup_environment(self, senv, renv):
+ renv.set('FOOBAR', self.name)
diff --git a/var/spack/repos/builtin.mock/packages/conflicting-dependent/package.py b/var/spack/repos/builtin.mock/packages/conflicting-dependent/package.py
new file mode 100644
index 0000000000..620d398d35
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/conflicting-dependent/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 ConflictingDependent(Package):
+ """By itself this package does not have conflicts, but it is used to
+ ensure that if a user tries to build with an installed instance
+ of dependency-install@2 that there is a failure."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/a-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ depends_on('dependency-install@:1.0')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/dependency-install/package.py b/var/spack/repos/builtin.mock/packages/dependency-install/package.py
new file mode 100644
index 0000000000..eeaf2ada11
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/dependency-install/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 DependencyInstall(Package):
+ """Dependency which has a working install method"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/a-1.0.tar.gz"
+
+ version('1.0', 'hash1.0')
+ version('2.0', 'hash2.0')
+
+ def install(self, spec, prefix):
+ touch(join_path(prefix, 'an_installation_file'))
diff --git a/var/spack/repos/builtin.mock/packages/dependent-install/package.py b/var/spack/repos/builtin.mock/packages/dependent-install/package.py
new file mode 100644
index 0000000000..9bcc73d056
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/dependent-install/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 DependentInstall(Package):
+ """Dependent which has a working install method"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/a-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ depends_on('dependency-install')
+
+ def install(self, spec, prefix):
+ touch(join_path(prefix, 'an_installation_file'))
diff --git a/var/spack/repos/builtin.mock/packages/develop-test/package.py b/var/spack/repos/builtin.mock/packages/develop-test/package.py
index 0c693c60fb..c546f701fd 100644
--- a/var/spack/repos/builtin.mock/packages/develop-test/package.py
+++ b/var/spack/repos/builtin.mock/packages/develop-test/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/direct-mpich/package.py b/var/spack/repos/builtin.mock/packages/direct-mpich/package.py
index f38589ad4d..737570ffe8 100644
--- a/var/spack/repos/builtin.mock/packages/direct-mpich/package.py
+++ b/var/spack/repos/builtin.mock/packages/direct-mpich/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dt-diamond-bottom/package.py b/var/spack/repos/builtin.mock/packages/dt-diamond-bottom/package.py
index 0c9fc1164a..7f55beb542 100644
--- a/var/spack/repos/builtin.mock/packages/dt-diamond-bottom/package.py
+++ b/var/spack/repos/builtin.mock/packages/dt-diamond-bottom/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dt-diamond-left/package.py b/var/spack/repos/builtin.mock/packages/dt-diamond-left/package.py
index 40b65266d4..262008079c 100644
--- a/var/spack/repos/builtin.mock/packages/dt-diamond-left/package.py
+++ b/var/spack/repos/builtin.mock/packages/dt-diamond-left/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dt-diamond-right/package.py b/var/spack/repos/builtin.mock/packages/dt-diamond-right/package.py
index 7b6e4abe5f..cc0db5bff1 100644
--- a/var/spack/repos/builtin.mock/packages/dt-diamond-right/package.py
+++ b/var/spack/repos/builtin.mock/packages/dt-diamond-right/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dt-diamond/package.py b/var/spack/repos/builtin.mock/packages/dt-diamond/package.py
index 0b0f300b35..c3b0b9db57 100644
--- a/var/spack/repos/builtin.mock/packages/dt-diamond/package.py
+++ b/var/spack/repos/builtin.mock/packages/dt-diamond/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtbuild1/package.py b/var/spack/repos/builtin.mock/packages/dtbuild1/package.py
index 8d3b28b539..bc00d4ed03 100644
--- a/var/spack/repos/builtin.mock/packages/dtbuild1/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtbuild1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtbuild2/package.py b/var/spack/repos/builtin.mock/packages/dtbuild2/package.py
index 9ea65735ff..1a3eb57835 100644
--- a/var/spack/repos/builtin.mock/packages/dtbuild2/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtbuild2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtbuild3/package.py b/var/spack/repos/builtin.mock/packages/dtbuild3/package.py
index 261c69e01e..a03a04a523 100644
--- a/var/spack/repos/builtin.mock/packages/dtbuild3/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtbuild3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtlink1/package.py b/var/spack/repos/builtin.mock/packages/dtlink1/package.py
index 0269e08b65..9c7e4bdebf 100644
--- a/var/spack/repos/builtin.mock/packages/dtlink1/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtlink1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtlink2/package.py b/var/spack/repos/builtin.mock/packages/dtlink2/package.py
index ad55c5ad48..1a78a4879c 100644
--- a/var/spack/repos/builtin.mock/packages/dtlink2/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtlink2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtlink3/package.py b/var/spack/repos/builtin.mock/packages/dtlink3/package.py
index 2b425103bd..8c53f3e2a0 100644
--- a/var/spack/repos/builtin.mock/packages/dtlink3/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtlink3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtlink4/package.py b/var/spack/repos/builtin.mock/packages/dtlink4/package.py
index d7af5ecbfc..4d7a57b2da 100644
--- a/var/spack/repos/builtin.mock/packages/dtlink4/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtlink4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtlink5/package.py b/var/spack/repos/builtin.mock/packages/dtlink5/package.py
index a9a22734cd..914e7655fb 100644
--- a/var/spack/repos/builtin.mock/packages/dtlink5/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtlink5/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtrun1/package.py b/var/spack/repos/builtin.mock/packages/dtrun1/package.py
index af9539ba68..738540ea52 100644
--- a/var/spack/repos/builtin.mock/packages/dtrun1/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtrun1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtrun2/package.py b/var/spack/repos/builtin.mock/packages/dtrun2/package.py
index a6cf0110b3..84129c1732 100644
--- a/var/spack/repos/builtin.mock/packages/dtrun2/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtrun2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtrun3/package.py b/var/spack/repos/builtin.mock/packages/dtrun3/package.py
index 426320c247..ee0c4272e4 100644
--- a/var/spack/repos/builtin.mock/packages/dtrun3/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtrun3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dttop/package.py b/var/spack/repos/builtin.mock/packages/dttop/package.py
index 99c86523e1..9bb83fff89 100644
--- a/var/spack/repos/builtin.mock/packages/dttop/package.py
+++ b/var/spack/repos/builtin.mock/packages/dttop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dtuse/package.py b/var/spack/repos/builtin.mock/packages/dtuse/package.py
index c77d700b98..3f8b0c9e98 100644
--- a/var/spack/repos/builtin.mock/packages/dtuse/package.py
+++ b/var/spack/repos/builtin.mock/packages/dtuse/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/dyninst/package.py b/var/spack/repos/builtin.mock/packages/dyninst/package.py
index daf1b82ec6..d00f604d61 100644
--- a/var/spack/repos/builtin.mock/packages/dyninst/package.py
+++ b/var/spack/repos/builtin.mock/packages/dyninst/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/e/package.py b/var/spack/repos/builtin.mock/packages/e/package.py
index c764007563..a00d459e9f 100644
--- a/var/spack/repos/builtin.mock/packages/e/package.py
+++ b/var/spack/repos/builtin.mock/packages/e/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/extendee/package.py b/var/spack/repos/builtin.mock/packages/extendee/package.py
new file mode 100644
index 0000000000..cae5f93bf3
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/extendee/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Extendee(Package):
+ """A package with extensions"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/extendee-1.0.tar.gz"
+
+ extendable = True
+
+ version('1.0', 'hash-extendee-1.0')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin.mock/packages/extension1/package.py b/var/spack/repos/builtin.mock/packages/extension1/package.py
new file mode 100644
index 0000000000..f4999e9963
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/extension1/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+
+
+class Extension1(Package):
+ """A package which extends another package"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/extension1-1.0.tar.gz"
+
+ extends('extendee')
+
+ version('1.0', 'hash-extension1-1.0')
+ version('2.0', 'hash-extension1-2.0')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with open(os.path.join(prefix.bin, 'extension1'), 'w+') as fout:
+ fout.write(str(spec.version))
diff --git a/var/spack/repos/builtin.mock/packages/extension2/package.py b/var/spack/repos/builtin.mock/packages/extension2/package.py
new file mode 100644
index 0000000000..01f3f94636
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/extension2/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+
+
+class Extension2(Package):
+ """A package which extends another package. It also depends on another
+ package which extends the same package."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/extension2-1.0.tar.gz"
+
+ extends('extendee')
+ depends_on('extension1', type=('build', 'run'))
+
+ version('1.0', 'hash-extension2-1.0')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with open(os.path.join(prefix.bin, 'extension2'), 'w+') as fout:
+ fout.write(str(spec.version))
diff --git a/var/spack/repos/builtin.mock/packages/externalmodule/package.py b/var/spack/repos/builtin.mock/packages/externalmodule/package.py
index f7c9b056a4..5e9f8fda44 100644
--- a/var/spack/repos/builtin.mock/packages/externalmodule/package.py
+++ b/var/spack/repos/builtin.mock/packages/externalmodule/package.py
@@ -1,14 +1,14 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/externalprereq/package.py b/var/spack/repos/builtin.mock/packages/externalprereq/package.py
index 226742f2cb..1890ab72d8 100644
--- a/var/spack/repos/builtin.mock/packages/externalprereq/package.py
+++ b/var/spack/repos/builtin.mock/packages/externalprereq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/externaltest/package.py b/var/spack/repos/builtin.mock/packages/externaltest/package.py
index 252c42556e..00cc553cbe 100644
--- a/var/spack/repos/builtin.mock/packages/externaltest/package.py
+++ b/var/spack/repos/builtin.mock/packages/externaltest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/externaltool/package.py b/var/spack/repos/builtin.mock/packages/externaltool/package.py
index d2daddd350..c47c31ac66 100644
--- a/var/spack/repos/builtin.mock/packages/externaltool/package.py
+++ b/var/spack/repos/builtin.mock/packages/externaltool/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/externalvirtual/package.py b/var/spack/repos/builtin.mock/packages/externalvirtual/package.py
index 6310a17bc9..d0b814d83b 100644
--- a/var/spack/repos/builtin.mock/packages/externalvirtual/package.py
+++ b/var/spack/repos/builtin.mock/packages/externalvirtual/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/failing-build/package.py b/var/spack/repos/builtin.mock/packages/failing-build/package.py
index a36553992e..e61451253a 100644
--- a/var/spack/repos/builtin.mock/packages/failing-build/package.py
+++ b/var/spack/repos/builtin.mock/packages/failing-build/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/fake/package.py b/var/spack/repos/builtin.mock/packages/fake/package.py
index b83eec7470..6b264a4d55 100644
--- a/var/spack/repos/builtin.mock/packages/fake/package.py
+++ b/var/spack/repos/builtin.mock/packages/fake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/flake8/hyper-specific-patch-that-fixes-some-random-bug-that-probably-only-affects-one-user.patch b/var/spack/repos/builtin.mock/packages/flake8/hyper-specific-patch-that-fixes-some-random-bug-that-probably-only-affects-one-user.patch
new file mode 100644
index 0000000000..b8c9065e4b
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/flake8/hyper-specific-patch-that-fixes-some-random-bug-that-probably-only-affects-one-user.patch
@@ -0,0 +1 @@
+Fake patch
diff --git a/var/spack/repos/builtin.mock/packages/flake8/package.py b/var/spack/repos/builtin.mock/packages/flake8/package.py
new file mode 100644
index 0000000000..4f2e9bd475
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/flake8/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 Flake8(Package):
+ """Package containing as many PEP 8 violations as possible.
+ All of these violations are exceptions that we allow in
+ package.py files."""
+
+ # Used to tell whether or not the package has been modified
+ state = 'unmodified'
+
+ # Make sure pre-existing noqa is not interfered with
+ blatant_violation = 'line-that-has-absolutely-no-execuse-for-being-over-79-characters' # noqa
+ blatant_violation = 'line-that-has-absolutely-no-execuse-for-being-over-79-characters' # noqa: E501
+
+ # Keywords exempt from line-length checks
+ homepage = '#####################################################################'
+ url = '#####################################################################'
+ git = '#####################################################################'
+ svn = '#####################################################################'
+ hg = '#####################################################################'
+ list_url = '#####################################################################'
+
+ # URL strings exempt from line-length checks
+ # http://########################################################################
+ # https://#######################################################################
+ # ftp://#########################################################################
+ # file://########################################################################
+
+ # Directives exempt from line-length checks
+ version('2.0', '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef')
+ version('1.0', '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef')
+
+ variant('super-awesome-feature', default=True, description='Enable super awesome feature')
+ variant('somewhat-awesome-feature', default=False, description='Enable somewhat awesome feature')
+
+ provides('lapack', when='@2.0+super-awesome-feature+somewhat-awesome-feature')
+
+ extends('python', ignore='bin/(why|does|every|package|that|depends|on|numpy|need|to|copy|f2py3?)')
+
+ depends_on('boost+atomic+chrono+date_time~debug+filesystem~graph~icu+iostreams+locale+log+math~mpi+multithreaded+program_options~python+random+regex+serialization+shared+signals~singlethreaded+system~taggedlayout+test+thread+timer+wave')
+
+ conflicts('+super-awesome-feature', when='%intel@16:17+somewhat-awesome-feature')
+
+ resource(name='Deez-Nuts', destination='White-House', placement='President', when='@2020', url='www.elect-deez-nuts.com')
+
+ patch('hyper-specific-patch-that-fixes-some-random-bug-that-probably-only-affects-one-user.patch', when='%gcc@3.2.2:3.2.3')
+
+ def install(self, spec, prefix):
+ # Make sure lines with '# noqa' work as expected. Don't just
+ # remove them entirely. This will mess up the indentation of
+ # the following lines.
+ if 'really-long-if-statement' != 'that-goes-over-the-line-length-limit-and-requires-noqa': # noqa
+ pass
+
+ # '@when' decorated functions are exempt from redefinition errors
+ @when('@2.0')
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/git-test/package.py b/var/spack/repos/builtin.mock/packages/git-test/package.py
index 730e71ac6b..9378f72195 100644
--- a/var/spack/repos/builtin.mock/packages/git-test/package.py
+++ b/var/spack/repos/builtin.mock/packages/git-test/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/hg-test/package.py b/var/spack/repos/builtin.mock/packages/hg-test/package.py
index 70a9b7f2c7..17d8379d1c 100644
--- a/var/spack/repos/builtin.mock/packages/hg-test/package.py
+++ b/var/spack/repos/builtin.mock/packages/hg-test/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/hypre/package.py b/var/spack/repos/builtin.mock/packages/hypre/package.py
index b9e31b09dc..c815aca191 100644
--- a/var/spack/repos/builtin.mock/packages/hypre/package.py
+++ b/var/spack/repos/builtin.mock/packages/hypre/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py b/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py
index 77b8022b1c..3b9b9caec1 100644
--- a/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py
+++ b/var/spack/repos/builtin.mock/packages/indirect-mpich/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/libdwarf/package.py b/var/spack/repos/builtin.mock/packages/libdwarf/package.py
index 0fcbe4a62e..726cb756a6 100644
--- a/var/spack/repos/builtin.mock/packages/libdwarf/package.py
+++ b/var/spack/repos/builtin.mock/packages/libdwarf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -41,4 +41,4 @@ class Libdwarf(Package):
depends_on("libelf")
def install(self, spec, prefix):
- pass
+ touch(prefix.libdwarf)
diff --git a/var/spack/repos/builtin.mock/packages/libelf/package.py b/var/spack/repos/builtin.mock/packages/libelf/package.py
index 90d00ad339..9cf8d152df 100644
--- a/var/spack/repos/builtin.mock/packages/libelf/package.py
+++ b/var/spack/repos/builtin.mock/packages/libelf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,11 +34,4 @@ class Libelf(Package):
version('0.8.10', '9db4d36c283d9790d8fa7df1f4d7b4d9')
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--enable-shared",
- "--disable-dependency-tracking",
- "--disable-debug")
- make()
-
- # The mkdir commands in libelf's intsall can fail in parallel
- make("install", parallel=False)
+ touch(prefix.libelf)
diff --git a/var/spack/repos/builtin.mock/packages/mixedversions/package.py b/var/spack/repos/builtin.mock/packages/mixedversions/package.py
new file mode 100644
index 0000000000..6e01fbc13b
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/mixedversions/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Mixedversions(Package):
+ url = "http://www.fake-mixedversions.org/downloads/mixedversions-1.0.tar.gz"
+
+ version('2.0.1', 'hashc')
+ version('2.0', 'hashb')
+ version('1.0.1', 'hasha')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/mpich/package.py b/var/spack/repos/builtin.mock/packages/mpich/package.py
index 936127398c..f9dbf572c5 100644
--- a/var/spack/repos/builtin.mock/packages/mpich/package.py
+++ b/var/spack/repos/builtin.mock/packages/mpich/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,8 @@ class Mpich(Package):
list_url = "http://www.mpich.org/static/downloads/"
list_depth = 2
+ tags = ['tag1', 'tag2']
+
variant('debug', default=False,
description="Compile MPICH with debug flags.")
diff --git a/var/spack/repos/builtin.mock/packages/mpich2/package.py b/var/spack/repos/builtin.mock/packages/mpich2/package.py
index c92b4ba43a..92e72daa4a 100644
--- a/var/spack/repos/builtin.mock/packages/mpich2/package.py
+++ b/var/spack/repos/builtin.mock/packages/mpich2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,8 @@ class Mpich2(Package):
list_url = "http://www.mpich.org/static/downloads/"
list_depth = 2
+ tags = ['tag1', 'tag3']
+
version('1.5', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
version('1.4', 'foobarbaz')
version('1.3', 'foobarbaz')
diff --git a/var/spack/repos/builtin.mock/packages/mpileaks/package.py b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
index 10fbf3845e..6b5afafdb2 100644
--- a/var/spack/repos/builtin.mock/packages/mpileaks/package.py
+++ b/var/spack/repos/builtin.mock/packages/mpileaks/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,5 +42,11 @@ class Mpileaks(Package):
depends_on("mpi")
depends_on("callpath")
+ # Will be used to try raising an exception
+ libs = None
+
def install(self, spec, prefix):
pass
+
+ def setup_environment(self, senv, renv):
+ renv.set('FOOBAR', self.name)
diff --git a/var/spack/repos/builtin.mock/packages/multi-provider-mpi/package.py b/var/spack/repos/builtin.mock/packages/multi-provider-mpi/package.py
index 5f85dec9b5..9240671ba2 100644
--- a/var/spack/repos/builtin.mock/packages/multi-provider-mpi/package.py
+++ b/var/spack/repos/builtin.mock/packages/multi-provider-mpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/multimethod-base/package.py b/var/spack/repos/builtin.mock/packages/multimethod-base/package.py
new file mode 100644
index 0000000000..454f658adf
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/multimethod-base/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 MultimethodBase(Package):
+ """This is a base class for the Multimethod test case.
+
+ It tests whether mutlimethod properly invokes methods in a base
+ class when subclass multi-methods do not match.
+
+ """
+
+ homepage = 'http://www.example.com/'
+ url = 'http://www.example.com/example-1.0.tar.gz'
+
+ def base_method(self):
+ return "base_method"
diff --git a/var/spack/repos/builtin.mock/packages/multimethod/package.py b/var/spack/repos/builtin.mock/packages/multimethod/package.py
index fa3f815135..25a7ec7fca 100644
--- a/var/spack/repos/builtin.mock/packages/multimethod/package.py
+++ b/var/spack/repos/builtin.mock/packages/multimethod/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,11 +22,15 @@
# 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 six import string_types
+
from spack import *
import spack.architecture
+from spack.pkg.builtin.mock.multimethod_base import MultimethodBase
+
-class Multimethod(Package):
+class Multimethod(MultimethodBase):
"""This package is designed for use with Spack's multimethod test.
It has a bunch of test cases for the @when decorator that the
test uses.
@@ -100,14 +104,14 @@ class Multimethod(Package):
# Make sure we can switch methods on different target
#
platform = spack.architecture.platform()
- targets = platform.targets.values()
+ targets = list(platform.targets.values())
if len(targets) > 1:
targets = targets[:-1]
for target in targets:
@when('target=' + target.name)
def different_by_target(self):
- if isinstance(self.spec.architecture.target, basestring):
+ if isinstance(self.spec.architecture.target, string_types):
return self.spec.architecture.target
else:
return self.spec.architecture.target.name
@@ -132,3 +136,11 @@ class Multimethod(Package):
@when('^mpi@2:')
def different_by_virtual_dep(self):
return 2
+
+ #
+ # Make sure methods with a default implementation in a superclass
+ # will invoke that method when none in the subclass match.
+ #
+ @when("@2:")
+ def base_method(self):
+ return "subclass_method"
diff --git a/var/spack/repos/builtin.mock/packages/multivalue_variant/package.py b/var/spack/repos/builtin.mock/packages/multivalue_variant/package.py
new file mode 100644
index 0000000000..0d27e31e44
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/multivalue_variant/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 MultivalueVariant(Package):
+ homepage = "http://www.llnl.gov"
+ url = "http://www.llnl.gov/mpileaks-1.0.tar.gz"
+
+ version(1.0, 'foobarbaz')
+ version(2.1, 'foobarbaz')
+ version(2.2, 'foobarbaz')
+ version(2.3, 'foobarbaz')
+
+ variant('debug', default=False, description='Debug variant')
+ variant(
+ 'foo',
+ description='Multi-valued variant',
+ values=('bar', 'baz', 'barbaz'),
+ multi=True
+ )
+
+ variant(
+ 'fee',
+ description='Single-valued variant',
+ default='bar',
+ values=('bar', 'baz', 'barbaz'),
+ multi=False
+ )
+
+ depends_on('mpi')
+ depends_on('callpath')
+ depends_on('a')
+ depends_on('a@1.0', when='fee=barbaz')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/netlib-blas/package.py b/var/spack/repos/builtin.mock/packages/netlib-blas/package.py
index 0a5b1d0e6a..48c99ba9d6 100644
--- a/var/spack/repos/builtin.mock/packages/netlib-blas/package.py
+++ b/var/spack/repos/builtin.mock/packages/netlib-blas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py b/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py
index 755d3001a4..9108e70cf0 100644
--- a/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py
+++ b/var/spack/repos/builtin.mock/packages/netlib-lapack/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/openblas-with-lapack/package.py b/var/spack/repos/builtin.mock/packages/openblas-with-lapack/package.py
index 0f14fbaa61..c73e65ac2b 100644
--- a/var/spack/repos/builtin.mock/packages/openblas-with-lapack/package.py
+++ b/var/spack/repos/builtin.mock/packages/openblas-with-lapack/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/openblas/package.py b/var/spack/repos/builtin.mock/packages/openblas/package.py
index f6cdeeea49..8d41c8958a 100644
--- a/var/spack/repos/builtin.mock/packages/openblas/package.py
+++ b/var/spack/repos/builtin.mock/packages/openblas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py
index 337f54e24e..51bbb9761f 100644
--- a/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py
+++ b/var/spack/repos/builtin.mock/packages/optional-dep-test-2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py
index 2904b3782d..48bf3820af 100644
--- a/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py
+++ b/var/spack/repos/builtin.mock/packages/optional-dep-test-3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py b/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py
index 2c07e61769..48ffbf6765 100644
--- a/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py
+++ b/var/spack/repos/builtin.mock/packages/optional-dep-test/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/othervirtual/package.py b/var/spack/repos/builtin.mock/packages/othervirtual/package.py
index 83bc07df98..c7b0e72a01 100644
--- a/var/spack/repos/builtin.mock/packages/othervirtual/package.py
+++ b/var/spack/repos/builtin.mock/packages/othervirtual/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/override-context-templates/package.py b/var/spack/repos/builtin.mock/packages/override-context-templates/package.py
new file mode 100644
index 0000000000..9f59ad0e7e
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/override-context-templates/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class OverrideContextTemplates(Package):
+ """This package updates the context for TCL modulefiles.
+
+ And additional lines that shouldn't be in the short description.
+ """
+ homepage = "http://www.fake-spack-example.org"
+ url = "http://www.fake-spack-example.org/downloads/fake-1.0.tar.gz"
+
+ version('1.0', 'foobarbaz')
+
+ tcl_template = 'extension.tcl'
+ tcl_context = {'sentence': "sentence from package"}
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/override-module-templates/package.py b/var/spack/repos/builtin.mock/packages/override-module-templates/package.py
new file mode 100644
index 0000000000..6d877c7a76
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/override-module-templates/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class OverrideModuleTemplates(Package):
+ homepage = "http://www.fake-spack-example.org"
+ url = "http://www.fake-spack-example.org/downloads/fake-1.0.tar.gz"
+
+ version('1.0', 'foobarbaz')
+
+ dotkit_template = 'override.txt'
+ tcl_template = 'override.txt'
+ lmod_template = 'override.txt'
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/patch-a-dependency/foo.patch b/var/spack/repos/builtin.mock/packages/patch-a-dependency/foo.patch
new file mode 100644
index 0000000000..257cc5642c
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-a-dependency/foo.patch
@@ -0,0 +1 @@
+foo
diff --git a/var/spack/repos/builtin.mock/packages/patch-a-dependency/package.py b/var/spack/repos/builtin.mock/packages/patch-a-dependency/package.py
new file mode 100644
index 0000000000..fea0b27195
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-a-dependency/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PatchADependency(Package):
+ """Package that requries a patched version of a dependency."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/patch-a-dependency-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ depends_on('libelf', patches=patch('foo.patch'))
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/patch-several-dependencies/bar.patch b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/bar.patch
new file mode 100644
index 0000000000..5716ca5987
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/bar.patch
@@ -0,0 +1 @@
+bar
diff --git a/var/spack/repos/builtin.mock/packages/patch-several-dependencies/baz.patch b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/baz.patch
new file mode 100644
index 0000000000..76018072e0
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/baz.patch
@@ -0,0 +1 @@
+baz
diff --git a/var/spack/repos/builtin.mock/packages/patch-several-dependencies/foo.patch b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/foo.patch
new file mode 100644
index 0000000000..257cc5642c
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/foo.patch
@@ -0,0 +1 @@
+foo
diff --git a/var/spack/repos/builtin.mock/packages/patch-several-dependencies/package.py b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/package.py
new file mode 100644
index 0000000000..73837449c6
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch-several-dependencies/package.py
@@ -0,0 +1,60 @@
+##############################################################################
+# 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/spack/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 PatchSeveralDependencies(Package):
+ """Package that requries multiple patches on a dependency."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/patch-a-dependency-1.0.tar.gz"
+
+ version('2.0', '0123456789abcdef0123456789abcdef')
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ # demonstrate all the different ways to patch things
+
+ # single patch file in repo
+ depends_on('libelf', patches='foo.patch')
+
+ # using a list of patches in one depends_on
+ depends_on('libdwarf', patches=[
+ patch('bar.patch'), # nested patch directive
+ patch('baz.patch', when='@20111030') # and with a conditional
+ ], when='@1.0') # with a depends_on conditional
+
+ # URL patches
+ depends_on('fake', patches=[
+ # uncompressed URL patch
+ patch('http://example.com/urlpatch.patch',
+ sha256='abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234'),
+ # compressed URL patch requires separate archive sha
+ patch('http://example.com/urlpatch2.patch.gz',
+ archive_sha256='abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd',
+ sha256='1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd1234abcd')
+ ])
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/patch/bar.patch b/var/spack/repos/builtin.mock/packages/patch/bar.patch
new file mode 100644
index 0000000000..5716ca5987
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch/bar.patch
@@ -0,0 +1 @@
+bar
diff --git a/var/spack/repos/builtin.mock/packages/patch/baz.patch b/var/spack/repos/builtin.mock/packages/patch/baz.patch
new file mode 100644
index 0000000000..76018072e0
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch/baz.patch
@@ -0,0 +1 @@
+baz
diff --git a/var/spack/repos/builtin.mock/packages/patch/foo.patch b/var/spack/repos/builtin.mock/packages/patch/foo.patch
new file mode 100644
index 0000000000..257cc5642c
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch/foo.patch
@@ -0,0 +1 @@
+foo
diff --git a/var/spack/repos/builtin.mock/packages/patch/package.py b/var/spack/repos/builtin.mock/packages/patch/package.py
new file mode 100644
index 0000000000..79b0943b24
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patch/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Patch(Package):
+ """Package that requries a patched version of a dependency."""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/patch-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ patch('foo.patch')
+ patch('bar.patch')
+ patch('baz.patch')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/patchelf/package.py b/var/spack/repos/builtin.mock/packages/patchelf/package.py
new file mode 100644
index 0000000000..d499199d3e
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/patchelf/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Patchelf(AutotoolsPackage):
+ """
+ PatchELF is a small utility to modify the
+ dynamic linker and RPATH of ELF executables.
+ """
+
+ homepage = "https://nixos.org/patchelf.html"
+ url = "http://nixos.org/releases/patchelf/patchelf-0.8/patchelf-0.8.tar.gz"
+
+ list_url = "http://nixos.org/releases/patchelf/"
+ list_depth = 1
+
+ version('0.9', '3c265508526760f233620f35d79c79fc')
+ version('0.8', '407b229e6a681ffb0e2cdd5915cb2d01')
diff --git a/var/spack/repos/builtin.mock/packages/printing-package/package.py b/var/spack/repos/builtin.mock/packages/printing-package/package.py
new file mode 100644
index 0000000000..815972f9eb
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/printing-package/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PrintingPackage(Package):
+ """This package prints some output from its install method.
+
+ We use this to test whether that output is properly logged.
+ """
+ homepage = "http://www.example.com/printing_package"
+ url = "http://www.unit-test-should-replace-this-url/trivial_install-1.0.tar.gz"
+
+ version('1.0', 'foobarbaz')
+
+ def install(self, spec, prefix):
+ print("BEFORE INSTALL")
+
+ configure('--prefix=%s' % prefix)
+ make()
+ make('install')
+
+ print("AFTER INSTALL")
diff --git a/var/spack/repos/builtin.mock/packages/python/package.py b/var/spack/repos/builtin.mock/packages/python/package.py
index a5290161ad..f402be3b56 100644
--- a/var/spack/repos/builtin.mock/packages/python/package.py
+++ b/var/spack/repos/builtin.mock/packages/python/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/singlevalue-variant-dependent/package.py b/var/spack/repos/builtin.mock/packages/singlevalue-variant-dependent/package.py
new file mode 100644
index 0000000000..60530e8202
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/singlevalue-variant-dependent/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 SinglevalueVariantDependent(Package):
+ """Simple package with one optional dependency"""
+
+ homepage = "http://www.example.com"
+ url = "http://www.example.com/archive-1.0.tar.gz"
+
+ version('1.0', '0123456789abcdef0123456789abcdef')
+
+ depends_on('multivalue_variant fee=baz')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/svn-test/package.py b/var/spack/repos/builtin.mock/packages/svn-test/package.py
index 01d0929c28..1c4424dab5 100644
--- a/var/spack/repos/builtin.mock/packages/svn-test/package.py
+++ b/var/spack/repos/builtin.mock/packages/svn-test/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/trivial-install-test-package/package.py b/var/spack/repos/builtin.mock/packages/trivial-install-test-package/package.py
index 2129d9788b..eadba7064c 100644
--- a/var/spack/repos/builtin.mock/packages/trivial-install-test-package/package.py
+++ b/var/spack/repos/builtin.mock/packages/trivial-install-test-package/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin.mock/packages/url-list-test/package.py b/var/spack/repos/builtin.mock/packages/url-list-test/package.py
new file mode 100644
index 0000000000..e77d203707
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/url-list-test/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 *
+
+import os
+import spack
+
+
+class UrlListTest(Package):
+ """Mock package with url_list."""
+ homepage = "http://www.url-list-example.com"
+
+ web_data_path = os.path.join(spack.test_path, 'data', 'web')
+ url = 'file://' + web_data_path + '/foo-0.0.0.tar.gz'
+ list_url = 'file://' + web_data_path + '/index.html'
+ list_depth = 3
+
+ version('0.0.0')
+ version('1.0.0')
+ version('3.0')
+ version('4.5')
+ version('2.0.0b2')
+ version('3.0a1')
+ version('4.5-rc5')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/url-test/package.py b/var/spack/repos/builtin.mock/packages/url-test/package.py
new file mode 100644
index 0000000000..113dc0714b
--- /dev/null
+++ b/var/spack/repos/builtin.mock/packages/url-test/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 UrlTest(Package):
+ """Mock package that fetches from a URL."""
+ homepage = "http://www.url-fetch-example.com"
+
+ version('test', url='to-be-filled-in-by-test')
+
+ def install(self, spec, prefix):
+ pass
diff --git a/var/spack/repos/builtin.mock/packages/zmpi/package.py b/var/spack/repos/builtin.mock/packages/zmpi/package.py
index b6a5b33011..99a750afc1 100644
--- a/var/spack/repos/builtin.mock/packages/zmpi/package.py
+++ b/var/spack/repos/builtin.mock/packages/zmpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/abinit/package.py b/var/spack/repos/builtin/packages/abinit/package.py
index 76fa044982..59040cd0d8 100644
--- a/var/spack/repos/builtin/packages/abinit/package.py
+++ b/var/spack/repos/builtin/packages/abinit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,18 @@
#
# Author: Matteo Giantomassi <matteo.giantomassiNOSPAM AT uclouvain.be>
# Date: October 11, 2016
-
from spack import *
-class Abinit(Package):
+class Abinit(AutotoolsPackage):
"""ABINIT is a package whose main program allows one to find the total
energy, charge density and electronic structure of systems made of
electrons and nuclei (molecules and periodic solids) within
Density Functional Theory (DFT), using pseudopotentials and a planewave
- or wavelet basis. ABINIT also includes options to optimize the geometry
- according to the DFT forces and stresses, or to perform molecular dynamics
+ or wavelet basis.
+
+ ABINIT also includes options to optimize the geometry according to the
+ DFT forces and stresses, or to perform molecular dynamics
simulations using these forces, or to generate dynamical matrices,
Born effective charges, and dielectric tensors, based on Density-Functional
Perturbation Theory, and many more properties. Excited states can be
@@ -45,11 +46,12 @@ class Abinit(Package):
programs are provided.
"""
- homepage = "http://www.abinit.org"
- url = "http://ftp.abinit.org/abinit-8.0.8b.tar.gz"
+ homepage = 'http://www.abinit.org'
+ url = 'http://ftp.abinit.org/abinit-8.0.8b.tar.gz'
+ version('8.2.2', '5f25250e06fdc0815c224ffd29858860')
# Versions before 8.0.8b are not supported.
- version("8.0.8b", "abc9e303bfa7f9f43f95598f87d84d5d")
+ version('8.0.8b', 'abc9e303bfa7f9f43f95598f87d84d5d')
variant('mpi', default=True,
description='Builds with MPI support. Requires MPI2+')
@@ -58,118 +60,122 @@ class Abinit(Package):
variant('scalapack', default=False,
description='Enables scalapack support. Requires MPI')
# variant('elpa', default=False,
- # description='Uses elpa instead of scalapack. Requires MPI')
+ # description='Uses elpa instead of scalapack. Requires MPI')
# TODO: To be tested.
# It was working before the last `git pull` but now all tests crash.
# For the time being, the default is netcdf3 and the internal fallbacks
+ # FIXME: rename (trio?) and use multivalued variants to cover
+ # --with-trio-flavor={netcdf, none}
+ # Note that Abinit@8: does not support etsf_io anymore because it is not
+ # compatible with HDF5 and MPI-IO
variant('hdf5', default=False,
description='Enables HDF5+Netcdf4 with MPI. WARNING: experimental')
# Add dependencies
# currently one cannot forward options to virtual packages, see #1712.
- # depends_on("blas", when="~openmp")
- # depends_on("blas+openmp", when="+openmp")
+ # depends_on('blas', when='~openmp')
+ # depends_on('blas+openmp', when='+openmp')
depends_on('blas')
- depends_on("lapack")
+ depends_on('lapack')
# Require MPI2+
- depends_on("mpi@2:", when="+mpi")
+ depends_on('mpi@2:', when='+mpi')
- depends_on("scalapack", when="+scalapack+mpi")
- # depends_on("elpa", when="+elpa+mpi~openmp")
- # depends_on("elpa+openmp", when="+elpa+mpi+openmp")
+ depends_on('scalapack', when='+scalapack+mpi')
- depends_on("fftw+float", when="~openmp")
- depends_on("fftw+float+openmp", when="+openmp")
+ # depends_on('elpa~openmp', when='+elpa+mpi~openmp')
+ # depends_on('elpa+openmp', when='+elpa+mpi+openmp')
- depends_on("netcdf-fortran", when="+hdf5")
- depends_on("hdf5+mpi", when='+mpi+hdf5') # required for NetCDF-4 support
+ depends_on('fftw+float', when='~openmp')
+ depends_on('fftw+float+openmp', when='+openmp')
- # pin libxc version
- depends_on("libxc@2.2.1")
+ depends_on('netcdf-fortran', when='+hdf5')
+ depends_on('hdf5+mpi', when='+mpi+hdf5') # required for NetCDF-4 support
- def validate(self, spec):
- """
- Checks if incompatible variants have been activated at the same time
+ # pin libxc version
+ depends_on("libxc@2.2.2")
- :param spec: spec of the package
- :raises RuntimeError: in case of inconsistencies
- """
- error = 'you cannot ask for \'+{variant}\' when \'+mpi\' is not active'
+ # Cannot ask for +scalapack if it does not depend on MPI
+ conflicts('+scalapack', when='~mpi')
- if '+scalapack' in spec and '~mpi' in spec:
- raise RuntimeError(error.format(variant='scalapack'))
+ # Elpa is a substitute for scalapack and needs mpi
+ # conflicts('+elpa', when='~mpi')
+ # conflicts('+elpa', when='+scalapack')
- if '+elpa' in spec and ('~mpi' in spec or '~scalapack' in spec):
- raise RuntimeError(error.format(variant='elpa'))
+ def configure_args(self):
- def install(self, spec, prefix):
- self.validate(spec)
+ spec = self.spec
- options = ['--prefix=%s' % prefix]
+ options = []
oapp = options.append
if '+mpi' in spec:
# MPI version:
# let the configure script auto-detect MPI support from mpi_prefix
- oapp("--with-mpi-prefix=%s" % spec["mpi"].prefix)
- oapp("--enable-mpi=yes")
- oapp("--enable-mpi-io=yes")
+ oapp('--with-mpi-prefix={0}'.format(spec['mpi'].prefix))
+ oapp('--enable-mpi=yes')
+ oapp('--enable-mpi-io=yes')
# Activate OpenMP in Abinit Fortran code.
if '+openmp' in spec:
oapp('--enable-openmp=yes')
- # BLAS/LAPACK
+ # BLAS/LAPACK/SCALAPACK-ELPA
+ linalg = spec['lapack'].libs + spec['blas'].libs
if '+scalapack' in spec:
- oapp("--with-linalg-flavor=custom+scalapack")
- linalg = (spec['scalapack'].scalapack_libs +
- spec['lapack'].lapack_libs + spec['blas'].blas_libs)
+ oapp('--with-linalg-flavor=custom+scalapack')
+ linalg = spec['scalapack'].libs + linalg
# elif '+elpa' in spec:
else:
- oapp("--with-linalg-flavor=custom")
- linalg = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ oapp('--with-linalg-flavor=custom')
- oapp("--with-linalg-libs=%s" % linalg.ld_flags)
+ oapp('--with-linalg-libs={0}'.format(linalg.ld_flags))
# FFTW3: use sequential or threaded version if +openmp
- fftflavor, fftlibs = "fftw3", "-lfftw3 -lfftw3f"
+ fftflavor, fftlibs = 'fftw3', '-lfftw3 -lfftw3f'
if '+openmp' in spec:
- fftflavor = "fftw3-threads"
- fftlibs = "-lfftw3_omp -lfftw3 -lfftw3f"
+ fftflavor = 'fftw3-threads'
+ fftlibs = '-lfftw3_omp -lfftw3 -lfftw3f'
options.extend([
- "--with-fft-flavor=%s" % fftflavor,
- "--with-fft-incs=-I%s" % spec["fftw"].prefix.include,
- "--with-fft-libs=-L%s %s" % (spec["fftw"].prefix.lib, fftlibs),
+ '--with-fft-flavor=%s' % fftflavor,
+ '--with-fft-incs=-I%s' % spec['fftw'].prefix.include,
+ '--with-fft-libs=-L%s %s' % (spec['fftw'].prefix.lib, fftlibs),
])
- oapp("--with-dft-flavor=atompaw+libxc")
+ oapp('--with-dft-flavor=atompaw+libxc')
# LibXC library
+ libxc = spec['libxc:fortran']
options.extend([
- "with_libxc_incs=-I%s" % spec["libxc"].prefix.include,
- "with_libxc_libs=-L%s -lxcf90 -lxc" % spec["libxc"].prefix.lib,
+ 'with_libxc_incs={0}'.format(libxc.headers.cpp_flags),
+ 'with_libxc_libs={0}'.format(libxc.libs.ld_flags + ' -lm')
])
# Netcdf4/HDF5
- if "+hdf5" in spec:
- oapp("--with-trio-flavor=netcdf")
- hdf_libs = "-L%s -lhdf5_hl -lhdf5" % spec["hdf5"].prefix.lib
+ if '+hdf5' in spec:
+ oapp('--with-trio-flavor=netcdf')
+ # Since version 8, Abinit started to use netcdf4 + hdf5 and we have
+ # to link with the high level HDF5 library
+ hdf5 = spec['hdf5:hl']
+ netcdff = spec['netcdf-fortran:shared']
options.extend([
- "--with-netcdf-incs=-I%s" % (
- spec["netcdf-fortran"].prefix.include),
- "--with-netcdf-libs=-L%s -lnetcdff -lnetcdf %s" % (
- spec["netcdf-fortran"].prefix.lib, hdf_libs),
+ '--with-netcdf-incs={0}'.format(netcdff.headers.cpp_flags),
+ '--with-netcdf-libs={0}'.format(
+ netcdff.libs.ld_flags + ' ' + hdf5.libs.ld_flags
+ ),
])
else:
- # Use internal fallbacks (netcdf3)
- oapp("--with-trio-flavor=netcdf-fallback")
+ # In Spack we do our best to avoid building any internally provided
+ # dependencies, such as netcdf3 in this case.
+ oapp('--with-trio-flavor=none')
- configure(*options)
- make()
+ return options
- # make("check")
- # make("tests_in")
- make("install")
+ def check(self):
+ """This method is called after the build phase if tests have been
+ explicitly activated by user.
+ """
+ make('check')
+ make('tests_in')
diff --git a/var/spack/repos/builtin/packages/abyss/package.py b/var/spack/repos/builtin/packages/abyss/package.py
new file mode 100644
index 0000000000..4a8aa0fb03
--- /dev/null
+++ b/var/spack/repos/builtin/packages/abyss/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 Abyss(AutotoolsPackage):
+ """ABySS is a de novo, parallel, paired-end sequence assembler
+ that is designed for short reads. The single-processor version
+ is useful for assembling genomes up to 100 Mbases in size."""
+
+ homepage = "http://www.bcgsc.ca/platform/bioinfo/software/abyss"
+ url = "https://github.com/bcgsc/abyss/archive/2.0.2.tar.gz"
+
+ version('2.0.2', 'bb3f8cebf121312bf81789d963b4ecc5')
+ version('1.5.2', '10d6d72d1a915e618d41a5cbbcf2364c')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+
+ depends_on('mpi')
+ depends_on('boost@:1.50.0,1.53.0:', when='@2.0.2:')
+ depends_on('boost@:1.50.0,1.53.0:1.59.0', when='@:1.5.2')
+ depends_on('sparsehash')
+ depends_on('sqlite')
+
+ conflicts('^intel-mpi')
+ conflicts('^intel-parallel-studio+mpi')
+ conflicts('^mvapich2')
+ conflicts('^spectrum-mpi')
+
+ def configure_args(self):
+ args = ['--with-boost=%s' % self.spec['boost'].prefix,
+ '--with-sqlite=%s' % self.spec['sqlite'].prefix,
+ '--with-mpi=%s' % self.spec['mpi'].prefix]
+ if self.spec['mpi'].name == 'mpich':
+ args.append('--enable-mpich')
+ return args
diff --git a/var/spack/repos/builtin/packages/ack/package.py b/var/spack/repos/builtin/packages/ack/package.py
index 70249aebac..ec1b6d2a22 100644
--- a/var/spack/repos/builtin/packages/ack/package.py
+++ b/var/spack/repos/builtin/packages/ack/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,6 +35,8 @@ class Ack(Package):
homepage = "http://beyondgrep.com/"
url = "http://beyondgrep.com/ack-2.14-single-file"
+ version('2.18', 'e8ebfd7a7ec8476bffd4686bf7b14fd7', expand=False)
+ version('2.16', '7085b5a5c76fda43ff049410870c8535', expand=False)
version('2.14', 'e74150a1609d28a70b450ef9cc2ed56b', expand=False)
depends_on('perl')
@@ -44,7 +46,7 @@ class Ack(Package):
ack = 'ack-{0}-single-file'.format(self.version)
# rewrite the script's #! line to call the perl dependency
- shbang = '#!' + join_path(spec['perl'].prefix.bin, 'perl')
+ shbang = '#!' + spec['perl'].command.path
filter_file(r'^#!/usr/bin/env perl', shbang, ack)
install(ack, join_path(prefix.bin, "ack"))
diff --git a/var/spack/repos/builtin/packages/activeharmony/package.py b/var/spack/repos/builtin/packages/activeharmony/package.py
index 6a4e67a1ca..d03d3f99eb 100644
--- a/var/spack/repos/builtin/packages/activeharmony/package.py
+++ b/var/spack/repos/builtin/packages/activeharmony/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/adept-utils/package.py b/var/spack/repos/builtin/packages/adept-utils/package.py
index 1a6998fd96..3f704a4893 100644
--- a/var/spack/repos/builtin/packages/adept-utils/package.py
+++ b/var/spack/repos/builtin/packages/adept-utils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class AdeptUtils(Package):
+class AdeptUtils(CMakePackage):
"""Utility libraries for LLNL performance tools."""
homepage = "https://github.com/llnl/adept-utils"
@@ -34,11 +34,6 @@ class AdeptUtils(Package):
version('1.0.1', '731a310717adcb004d9d195130efee7d')
version('1.0', '5c6cd9badce56c945ac8551e34804397')
- depends_on("boost")
- depends_on("mpi")
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake(*std_cmake_args)
- make()
- make("install")
+ depends_on('boost')
+ depends_on('mpi')
+ depends_on('cmake@2.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/adios/package.py b/var/spack/repos/builtin/packages/adios/package.py
index e240ce0858..1b0b88d167 100644
--- a/var/spack/repos/builtin/packages/adios/package.py
+++ b/var/spack/repos/builtin/packages/adios/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,11 +22,10 @@
# 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 Adios(Package):
+class Adios(AutotoolsPackage):
"""The Adaptable IO System (ADIOS) provides a simple,
flexible way for scientists to describe the
data in their code that may need to be written,
@@ -34,10 +33,13 @@ class Adios(Package):
"""
homepage = "http://www.olcf.ornl.gov/center-projects/adios/"
- url = "https://github.com/ornladios/ADIOS/archive/v1.10.0.tar.gz"
+ url = "https://github.com/ornladios/ADIOS/archive/v1.12.0.tar.gz"
version('develop', git='https://github.com/ornladios/ADIOS.git',
branch='master')
+ version('1.12.0', '84a1c71b6698009224f6f748c5257fc9')
+ version('1.11.1', '5639bfc235e50bf17ba9dafb14ea4185')
+ version('1.11.0', '5eead5b2ccf962f5e6d5f254d29d5238')
version('1.10.0', 'eff450a4c0130479417cfd63186957f3')
version('1.9.0', '310ff02388bbaa2b1c1710ee970b5678')
@@ -47,85 +49,127 @@ class Adios(Package):
variant('fortran', default=False,
description='Enable Fortran bindings support')
- variant('mpi', default=True, description='Enable MPI support')
- variant('infiniband', default=False, description='Enable infiniband support')
+ variant('mpi', default=True,
+ description='Enable MPI support')
+ variant('infiniband', default=False,
+ description='Enable infiniband support')
# transforms
- variant('zlib', default=True, description='Enable szip transform support')
- variant('szip', default=False, description='Enable szip transform support')
+ variant('zlib', default=True,
+ description='Enable zlib transform support')
+ variant('bzip2', default=False,
+ description='Enable bzip2 transform support')
+ variant('szip', default=False,
+ description='Enable szip transform support')
+ variant('zfp', default=True,
+ description='Enable ZFP transform support')
+ variant('sz', default=True,
+ description='Enable SZ transform support')
# transports and serial file converters
- variant('hdf5', default=False, description='Enable parallel HDF5 transport and serial bp2h5 converter')
-
- # Lots of setting up here for this package
- # module swap PrgEnv-intel PrgEnv-$COMP
- # module load cray-hdf5/1.8.14
- # module load python/2.7.10
+ variant('hdf5', default=False,
+ description='Enable parallel HDF5 transport and serial bp2h5 ' +
+ 'converter')
+ variant('netcdf', default=False, description='Enable netcdf support')
+
+ variant(
+ 'staging',
+ default=None,
+ values=('flexpath', 'dataspaces'),
+ multi=True,
+ description='Enable dataspaces and/or flexpath staging transports'
+ )
depends_on('autoconf', type='build')
depends_on('automake', type='build')
- depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+ depends_on('libtool@:2.4.2', type='build')
depends_on('python', type='build')
depends_on('mpi', when='+mpi')
- depends_on('mxml@2.9:')
# optional transformations
depends_on('zlib', when='+zlib')
+ depends_on('bzip2', when='+bzip2')
depends_on('szip', when='+szip')
+ depends_on('sz@:1.4.10', when='+sz')
+ depends_on('zfp@:0.5.0', when='+zfp')
# optional transports & file converters
- depends_on('hdf5@1.8:+mpi', when='+hdf5')
+ depends_on('hdf5@1.8:+hl+mpi', when='+hdf5')
+ depends_on('netcdf', when='+netcdf')
+ depends_on('libevpath', when='staging=flexpath')
+ depends_on('dataspaces+mpi', when='staging=dataspaces')
+
+ for p in ['+hdf5', '+netcdf', 'staging=flexpath', 'staging=dataspaces']:
+ conflicts(p, when='~mpi')
+ build_directory = 'spack-build'
+
+ # ADIOS uses the absolute Python path, which is too long and results in
+ # "bad interpreter" errors - but not applicable for 1.9.0
+ patch('python.patch', when='@1.10.0:')
# Fix ADIOS <=1.10.0 compile error on HDF5 1.10+
# https://github.com/ornladios/ADIOS/commit/3b21a8a41509
- # https://github.com/LLNL/spack/issues/1683
+ # https://github.com/spack/spack/issues/1683
patch('adios_1100.patch', when='@:1.10.0^hdf5@1.10:')
def validate(self, spec):
- """
- Checks if incompatible variants have been activated at the same time
- :param spec: spec of the package
- :raises RuntimeError: in case of inconsistencies
+ """Checks if incompatible variants have been activated at the same time
+
+ Args:
+ spec: spec of the package
+
+ Raises:
+ RuntimeError: in case of inconsistencies
"""
if '+fortran' in spec and not self.compiler.fc:
msg = 'cannot build a fortran variant without a fortran compiler'
raise RuntimeError(msg)
- def install(self, spec, prefix):
- self.validate(spec)
- # Handle compilation after spec validation
- extra_args = []
+ def with_or_without_hdf5(self, activated):
+
+ if activated:
+ return '--with-phdf5={0}'.format(
+ self.spec['hdf5'].prefix
+ )
- # required, otherwise building its python bindings on ADIOS will fail
- extra_args.append("CFLAGS=-fPIC")
+ return '--without-phdf5'
- # always build external MXML, even in ADIOS 1.10.0+
- extra_args.append('--with-mxml=%s' % spec['mxml'].prefix)
+ def configure_args(self):
+ spec = self.spec
+ self.validate(spec)
+
+ extra_args = [
+ # required, otherwise building its python bindings will fail
+ 'CFLAGS={0}'.format(self.compiler.pic_flag)
+ ]
- if '+shared' in spec:
- extra_args.append('--enable-shared')
+ extra_args += self.enable_or_disable('shared')
+ extra_args += self.enable_or_disable('fortran')
if '+mpi' in spec:
- extra_args.append('--with-mpi')
- if '+infiniband' in spec:
- extra_args.append('--with-infiniband')
- else:
- extra_args.append('--with-infiniband=no')
-
- if '+fortran' in spec:
- extra_args.append('--enable-fortran')
- else:
- extra_args.append('--disable-fortran')
-
- if '+zlib' in spec:
- extra_args.append('--with-zlib=%s' % spec['zlib'].prefix)
- if '+szip' in spec:
- extra_args.append('--with-szip=%s' % spec['szip'].prefix)
- if '+hdf5' in spec:
- extra_args.append('--with-phdf5=%s' % spec['hdf5'].prefix)
-
- sh = which('sh')
- sh('./autogen.sh')
-
- configure("--prefix=%s" % prefix,
- *extra_args)
- make()
- make("install")
+ env['MPICC'] = spec['mpi'].mpicc
+ env['MPICXX'] = spec['mpi'].mpicxx
+
+ extra_args += self.with_or_without('mpi', activation_value='prefix')
+ extra_args += self.with_or_without('infiniband')
+
+ # Transforms
+ variants = ['zlib', 'bzip2', 'szip', 'zfp', 'sz']
+
+ # External I/O libraries
+ variants += ['hdf5', 'netcdf']
+
+ for x in variants:
+ extra_args += self.with_or_without(x, activation_value='prefix')
+
+ # Staging transports
+ def with_staging(name):
+ if name == 'flexpath':
+ return spec['libevpath'].prefix
+ return spec[name].prefix
+
+ extra_args += self.with_or_without(
+ 'staging',
+ activation_value=with_staging
+ )
+
+ return extra_args
diff --git a/var/spack/repos/builtin/packages/adios/python.patch b/var/spack/repos/builtin/packages/adios/python.patch
new file mode 100644
index 0000000000..96c9f57661
--- /dev/null
+++ b/var/spack/repos/builtin/packages/adios/python.patch
@@ -0,0 +1,10 @@
+diff --git a/utils/gpp/gpp.py.in b/utils/gpp/gpp.py.in
+index cbb0d88..6977a55 100755
+--- a/utils/gpp/gpp.py.in
++++ b/utils/gpp/gpp.py.in
+@@ -1,4 +1,4 @@
+-#!@PYTHON_EXECUTABLE@
++#!/usr/bin/env python
+
+ import sys
+ import os
diff --git a/var/spack/repos/builtin/packages/adios2/package.py b/var/spack/repos/builtin/packages/adios2/package.py
new file mode 100644
index 0000000000..a222477c2d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/adios2/package.py
@@ -0,0 +1,119 @@
+##############################################################################
+# 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/spack/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 Adios2(CMakePackage):
+ """Next generation of ADIOS developed in the Exascale Computing Program"""
+
+ homepage = "https://www.olcf.ornl.gov/center-projects/adios/"
+ url = "https://github.com/ornladios/ADIOS2/archive/v2.0.0.tar.gz"
+
+ version('develop', branch='master',
+ git='https://github.com/ornladios/ADIOS2.git')
+
+ version('2.0.0', 'da39655b51745d2c5f3f1e46c5abc4d7')
+
+ variant('shared', default=True,
+ description='Also build shared libraries')
+ variant('mpi', default=True,
+ description='Enable MPI')
+ # transforms (not yet implemented)
+ # variant('bzip2', default=True,
+ # description='Enable BZip2 compression')
+ # variant('zfp', default=True,
+ # description='Enable ZFP compression')
+ # transport engines
+ variant('dataman', default=True,
+ description='Enable the DataMan engine for WAN transports')
+ # currently required by DataMan, optional in the future
+ # variant('zeromq', default=False,
+ # description='Enable ZeroMQ for the DataMan engine')
+ variant('hdf5', default=False,
+ description='Enable the HDF5 engine')
+ variant('adios1', default=False,
+ description='Enable the ADIOS 1.x engine')
+ # language bindings
+ variant('python', default=True,
+ description='Enable the Python >= 2.7 bindings')
+
+ # requires mature C++11 implementations
+ conflicts('%gcc@:4.7')
+ conflicts('%intel@:15')
+ conflicts('%pgi@:14')
+
+ # DataMan needs dlopen
+ conflicts('+dataman', when='~shared')
+
+ depends_on('cmake@3.5.0:', type='build')
+
+ # contained in thirdparty/
+ # depends_on('googletest')
+ # depends_on('pugixml')
+ # depends_on('kwsys')
+ # depends_on('nlohmannjson')
+ # depends_on('pybind11@2.1.1:', when='+python')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('zeromq', when='+dataman')
+
+ depends_on('hdf5', when='+hdf5')
+ depends_on('hdf5+mpi', when='+hdf5+mpi')
+ depends_on('adios', when='+adios1')
+ depends_on('adios+mpi', when='+adios1+mpi')
+
+ depends_on('bzip2', when='+bzip2')
+ depends_on('zfp', when='+zfp')
+
+ extends('python', when='+python')
+ depends_on('python@2.7:', type=('build', 'run'), when='+python')
+ depends_on('py-numpy@1.6.1:', type=('build', 'run'), when='+python')
+ depends_on('py-mpi4py@2.0.0:', type=('build', 'run'), when='+mpi +python')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DADIOS2_BUILD_SHARED_LIBS:BOOL={0}'.format((
+ 'ON' if '+shared' in spec else 'OFF')),
+ '-DADIOS2_BUILD_TESTING=OFF',
+ '-DADIOS2_USE_MPI={0}'.format((
+ 'ON' if '+mpi' in spec else 'OFF')),
+ '-DADIOS2_USE_BZip2={0}'.format((
+ 'ON' if '+bzip2' in spec else 'OFF')),
+ '-DADIOS2_USE_ZFP={0}'.format((
+ 'ON' if '+zfp' in spec else 'OFF')),
+ '-DADIOS2_USE_DataMan={0}'.format((
+ 'ON' if '+dataman' in spec else 'OFF')),
+ '-DADIOS2_USE_ZeroMQ={0}'.format((
+ 'ON' if '+dataman' in spec else 'OFF')),
+ '-DADIOS2_USE_HDF5={0}'.format((
+ 'ON' if '+hdf5' in spec else 'OFF')),
+ '-DADIOS2_USE_ADIOS1={0}'.format((
+ 'ON' if '+adios1' in spec else 'OFF')),
+ '-DADIOS2_USE_Python={0}'.format((
+ 'ON' if '+python' in spec else 'OFF'))
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/adlbx/package.py b/var/spack/repos/builtin/packages/adlbx/package.py
new file mode 100644
index 0000000000..dfe6dffb03
--- /dev/null
+++ b/var/spack/repos/builtin/packages/adlbx/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Adlbx(AutotoolsPackage):
+ """ADLB/X: Master-worker library + work stealing and data dependencies"""
+
+ homepage = 'http://swift-lang.org/Swift-T'
+ url = 'http://swift-lang.github.io/swift-t-downloads/adlbx-0.8.0.tar.gz'
+ version('0.8.0', '34ade59ce3be5bc296955231d47a27dd')
+
+ depends_on('exmcutils')
+ depends_on('mpi')
+
+ def configure_args(self):
+ args = ['--with-c-utils=' + self.spec['exmcutils'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/adol-c/package.py b/var/spack/repos/builtin/packages/adol-c/package.py
index 5c8d894757..953cade297 100644
--- a/var/spack/repos/builtin/packages/adol-c/package.py
+++ b/var/spack/repos/builtin/packages/adol-c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,63 +25,79 @@
from spack import *
-class AdolC(Package):
+class AdolC(AutotoolsPackage):
"""A package for the automatic differentiation of first and higher
derivatives of vector functions in C and C++ programs by operator
overloading."""
homepage = "https://projects.coin-or.org/ADOL-C"
url = "http://www.coin-or.org/download/source/ADOL-C/ADOL-C-2.6.1.tgz"
- version('develop', svn='https://projects.coin-or.org/svn/ADOL-C/trunk/')
+ version('develop', git='https://gitlab.com/adol-c/adol-c.git',
+ branch='master')
+ version('2.6.3', 'f78f67f70d5874830a1ad1c0f54e54f7')
version('2.6.2', '0f9547584c99c0673e4f81cf64e8d865')
version('2.6.1', '1032b28427d6e399af4610e78c0f087b')
+ variant('advanced_branching', default=False,
+ description='Enable advanced branching to reduce retaping')
+ variant('atrig_erf', default=True,
+ description='Enable arc-trig and error functions')
variant('doc', default=True, description='Install documentation')
variant('openmp', default=False, description='Enable OpenMP support')
variant('sparse', default=False, description='Enable sparse drivers')
- variant('tests', default=True,
- description='Build all included examples as a test case')
+ variant('examples', default=True, description='Install examples')
+
+ # Build dependencies
+ depends_on('automake', type='build', when='@develop')
+ depends_on('autoconf', type='build', when='@develop')
+ depends_on('libtool', type='build', when='@develop')
+ depends_on('m4', type='build', when='@develop')
patch('openmp_exam_261.patch', when='@2.6.1')
- def install(self, spec, prefix):
- make_args = ['--prefix=%s' % prefix]
+ def configure_args(self):
+ spec = self.spec
+
+ configure_args = []
+
+ if '+advanced_branching' in spec:
+ configure_args.extend([
+ '--enable-advanced-branching'
+ ])
- # --with-cflags=FLAGS use CFLAGS=FLAGS (default: -O3 -Wall -ansi)
- # --with-cxxflags=FLAGS use CXXFLAGS=FLAGS (default: -O3 -Wall)
+ if '+atrig_erf' in spec:
+ configure_args.extend([
+ '--enable-atrig-erf'
+ ])
if '+openmp' in spec:
- if spec.satisfies('%gcc'):
- make_args.extend([
- # FIXME: Is this required? -I <path to omp.h> -L <LLVM
- # OpenMP library path>
- '--with-openmp-flag=-fopenmp'
- ])
- else:
- raise InstallError(
- "OpenMP flags for compilers other than GCC "
- "are not implemented.")
+ configure_args.extend([
+ '--with-openmp-flag={0}'.format(self.compiler.openmp_flag)
+ ])
if '+sparse' in spec:
- make_args.extend([
+ configure_args.extend([
'--enable-sparse'
])
# We can simply use the bundled examples to check
# whether Adol-C works as expected
- if '+tests' in spec:
- make_args.extend([
- '--enable-docexa', # Documeted examples
+ if '+examples' in spec:
+ configure_args.extend([
+ '--enable-docexa', # Documented examples
'--enable-addexa' # Additional examples
])
if '+openmp' in spec:
- make_args.extend([
+ configure_args.extend([
'--enable-parexa' # Parallel examples
])
- configure(*make_args)
- make()
- make("install")
+ return configure_args
+
+ @run_after('install')
+ def install_additional_files(self):
+ spec = self.spec
+ prefix = self.prefix
# Copy the config.h file, as some packages might require it
source_directory = self.stage.source_path
@@ -94,7 +110,7 @@ class AdolC(Package):
join_path(prefix.share, 'doc'))
# Install examples to {prefix}/share
- if '+tests' in spec:
+ if '+examples' in spec:
install_tree(join_path('ADOL-C', 'examples'),
join_path(prefix.share, 'examples'))
diff --git a/var/spack/repos/builtin/packages/albert/package.py b/var/spack/repos/builtin/packages/albert/package.py
new file mode 100644
index 0000000000..d720f04650
--- /dev/null
+++ b/var/spack/repos/builtin/packages/albert/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Albert(MakefilePackage):
+ """Albert is an interactive program to assist the
+ specialist in the study of nonassociative algebra."""
+
+ homepage = "https://people.cs.clemson.edu/~dpj/albertstuff/albert.html"
+ url = "https://github.com/kentavv/Albert/archive/v4.0a_opt4.tar.gz"
+
+ version('4.0a_opt4', '79e3d9623602f2ca5db7d84c81d4eb8c')
+
+ depends_on('readline')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('albert', join_path(prefix.bin))
diff --git a/var/spack/repos/builtin/packages/alglib/Makefile b/var/spack/repos/builtin/packages/alglib/Makefile
new file mode 100644
index 0000000000..fbcfdb9542
--- /dev/null
+++ b/var/spack/repos/builtin/packages/alglib/Makefile
@@ -0,0 +1,20 @@
+CC = $(SPACK_CXX)
+CFLAGS = -fPIC -Wall -O2 -g
+LDFLAGS = -shared
+RM = rm -f
+TARGET_LIB = libalglib.so
+
+SRCS = $(wildcard *.cpp)
+OBJS = $(SRCS:.cpp=.o)
+
+%.o: %.cpp
+ $(CC) -c ${CFLAGS} $<
+
+.PHONY: all
+all: $(OBJS)
+ $(CC) ${LDFLAGS} -o ${TARGET_LIB} $^
+
+# do not look for "clean", consider it always as missing
+.phony: clean
+clean:
+ ${RM} *.o
diff --git a/var/spack/repos/builtin/packages/alglib/package.py b/var/spack/repos/builtin/packages/alglib/package.py
new file mode 100644
index 0000000000..e470dba292
--- /dev/null
+++ b/var/spack/repos/builtin/packages/alglib/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+import os
+import shutil
+
+
+class Alglib(MakefilePackage):
+ """ALGLIB is a cross-platform numerical analysis and data processing
+ library."""
+
+ homepage = "http://www.alglib.net"
+ url = "http://www.alglib.net/translator/re/alglib-3.11.0.cpp.gpl.tgz"
+
+ version('3.11.0', 'f87bb05349924d486e8809590dee9f80')
+
+ def url_for_version(self, version):
+ return 'http://www.alglib.net/translator/re/alglib-{0}.cpp.gpl.tgz'.format(version.dotted)
+
+ build_directory = 'src'
+
+ def edit(self, spec, prefix):
+ # this package has no build system!
+ make_file_src = join_path(os.path.dirname(self.module.__file__),
+ 'Makefile')
+ make_file = join_path(self.stage.source_path, 'src', 'Makefile')
+ shutil.copy(make_file_src, make_file)
+ filter_file(r'so', dso_suffix, make_file)
+
+ def install(self, spec, prefix):
+ name = 'libalglib.{0}'.format(dso_suffix)
+ with working_dir('src'):
+ mkdirp(prefix.lib)
+ install(name, prefix.lib)
+ mkdirp(prefix.include)
+ headers = glob.glob('*.h')
+ for h in headers:
+ install(h, prefix.include)
diff --git a/var/spack/repos/builtin/packages/allinea-forge/package.py b/var/spack/repos/builtin/packages/allinea-forge/package.py
index ac60762cc3..a4a821737d 100644
--- a/var/spack/repos/builtin/packages/allinea-forge/package.py
+++ b/var/spack/repos/builtin/packages/allinea-forge/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,5 +48,5 @@ class AllineaForge(Package):
return url + "allinea-forge-%s-Redhat-6.0-x86_64.tar" % version
def install(self, spec, prefix):
- textinstall = which('textinstall.sh')
+ textinstall = Executable('./textinstall.sh')
textinstall('--accept-licence', prefix)
diff --git a/var/spack/repos/builtin/packages/allinea-reports/package.py b/var/spack/repos/builtin/packages/allinea-reports/package.py
index 13863c271d..69c881c369 100644
--- a/var/spack/repos/builtin/packages/allinea-reports/package.py
+++ b/var/spack/repos/builtin/packages/allinea-reports/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,5 +48,5 @@ class AllineaReports(Package):
return url + "allinea-reports-%s-Redhat-6.0-x86_64.tar" % version
def install(self, spec, prefix):
- textinstall = which('textinstall.sh')
+ textinstall = Executable('./textinstall.sh')
textinstall('--accept-licence', prefix)
diff --git a/var/spack/repos/builtin/packages/allpaths-lg/package.py b/var/spack/repos/builtin/packages/allpaths-lg/package.py
new file mode 100644
index 0000000000..69731045aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/allpaths-lg/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 AllpathsLg(AutotoolsPackage):
+ """ALLPATHS-LG is our original short read assembler and it works on both
+ small and large (mammalian size) genomes."""
+
+ homepage = "http://www.broadinstitute.org/software/allpaths-lg/blog/"
+ url = "ftp://ftp.broadinstitute.org/pub/crd/ALLPATHS/Release-LG/latest_source_code/LATEST_VERSION.tar.gz"
+
+ version('52488', 'bde9008e236d87708a48eb83af6d6d5b')
+
+ # compiles with gcc 4.7.0 to 4.9.4)
+ conflicts('%gcc@:4.6.4,5.1.0:')
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
diff --git a/var/spack/repos/builtin/packages/alquimia/package.py b/var/spack/repos/builtin/packages/alquimia/package.py
new file mode 100644
index 0000000000..983bab23f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/alquimia/package.py
@@ -0,0 +1,68 @@
+##############################################################################
+# 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/spack/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 Alquimia(CMakePackage):
+ """Alquimia is an interface that exposes the capabilities
+ of mature geochemistry codes such as CrunchFlow and PFLOTRAN"""
+
+ homepage = "https://github.com/LBL-EESA/alquimia-dev"
+
+ version('xsdk-0.2.0', git='https://github.com/LBL-EESA/alquimia-dev.git', tag='xsdk-0.2.0')
+ version('develop', git='https://github.com/LBL-EESA/alquimia-dev.git')
+
+ variant('shared', default=True,
+ description='Enables the build of shared libraries')
+
+ depends_on('mpi')
+ depends_on('hdf5')
+ depends_on('pflotran@xsdk-0.2.0', when='@xsdk-0.2.0')
+ depends_on('pflotran@develop', when='@develop')
+ depends_on('petsc@xsdk-0.2.0', when='@xsdk-0.2.0')
+ depends_on('petsc@develop', when='@develop')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ options = ['-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+ '-DUSE_XSDK_DEFAULTS=YES',
+ '-DBUILD_SHARED_LIBS:BOOL=%s' % (
+ 'ON' if '+shared' in spec else 'OFF'),
+ '-DTPL_ENABLE_MPI:BOOL=ON',
+ '-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix,
+ '-DTPL_ENABLE_HDF5:BOOL=ON',
+ '-DXSDK_WITH_PFLOTRAN:BOOL=ON',
+ # This is not good.
+ # It assumes that the .a file exists and is not a .so
+ '-DTPL_PFLOTRAN_LIBRARIES=%s' % (
+ spec['pflotran'].prefix.lib + "/libpflotranchem.a"),
+ '-DTPL_PFLOTRAN_INCLUDE_DIRS=%s' % (
+ spec['pflotran'].prefix.include),
+ '-DTPL_ENABLE_PETSC:BOOL=ON',
+ '-DPETSC_EXECUTABLE_RUNS=ON',
+ '-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % self.prefix]
+ return options
diff --git a/var/spack/repos/builtin/packages/alsa-lib/package.py b/var/spack/repos/builtin/packages/alsa-lib/package.py
new file mode 100644
index 0000000000..8e469e9ae7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/alsa-lib/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 AlsaLib(AutotoolsPackage):
+ """The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI
+ functionality to the Linux operating system. alsa-lib contains the user
+ space library that developers compile ALSA applications against."""
+
+ homepage = "https://www.alsa-project.org"
+ url = "ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.4.1.tar.bz2"
+
+ version('1.1.4.1', '29fa3e69122d3cf3e8f0e01a0cb1d183')
diff --git a/var/spack/repos/builtin/packages/amg/package.py b/var/spack/repos/builtin/packages/amg/package.py
new file mode 100644
index 0000000000..5167347dc9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/amg/package.py
@@ -0,0 +1,74 @@
+##############################################################################
+# 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/spack/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 0s2111-1307 USA
+##############################################################################
+from spack import *
+
+
+class Amg(MakefilePackage):
+ """AMG is a parallel algebraic multigrid solver for linear systems arising
+ from problems on unstructured grids. The driver provided with AMG
+ builds linear systems for various 3-dimensional problems.
+ """
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ homepage = "https://codesign.llnl.gov/amg2013.php"
+ git = "https://github.com/LLNL/AMG"
+
+ version('1.0', git=git, tag='1.0')
+ version('develop', git=git, branch='master')
+
+ variant('openmp', default=True, description='Build with OpenMP support')
+ variant('optflags', default=False, description='Additional optimizations')
+ variant('int64', default=False, description='Use 64-bit integers for global variables')
+
+ depends_on('mpi')
+
+ @property
+ def build_targets(self):
+ targets = []
+
+ include_cflags = ['-DTIMER_USE_MPI']
+ include_lflags = ['-lm']
+
+ if '+openmp' in self.spec:
+ include_cflags.append('-DHYPRE_USING_OPENMP')
+ include_cflags.append(self.compiler.openmp_flag)
+ include_lflags.append(self.compiler.openmp_flag)
+ if '+optflags' in self.spec:
+ include_cflags.append('-DHYPRE_USING_PERSISTENT_COMM')
+ include_cflags.append('-DHYPRE_HOPSCOTCH')
+
+ if '+int64' in self.spec:
+ include_cflags.append('-DHYPRE_BIGINT')
+
+ targets.append('INCLUDE_CFLAGS={0}'.format(' '.join(include_cflags)))
+ targets.append('INCLUDE_LFLAGS={0}'.format(' '.join(include_lflags)))
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('test/amg', prefix.bin)
+ install_tree('docs', prefix.docs)
diff --git a/var/spack/repos/builtin/packages/amg2013/package.py b/var/spack/repos/builtin/packages/amg2013/package.py
new file mode 100644
index 0000000000..43e9277805
--- /dev/null
+++ b/var/spack/repos/builtin/packages/amg2013/package.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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 0s2111-1307 USA
+##############################################################################
+from spack import *
+
+
+class Amg2013(MakefilePackage):
+ """AMG2013 is a parallel algebraic multigrid solver for linear
+ systems arising from problems on unstructured grids.
+ It has been derived directly from the BoomerAMG solver in the
+ hypre library, a large linear solver library that is being developed
+ in the Center for Applied Scientific Computing (CASC) at LLNL.
+ """
+ tags = ['proxy-app']
+ homepage = "https://codesign.llnl.gov/amg2013.php"
+ url = "https://codesign.llnl.gov/amg2013/amg2013.tgz"
+
+ version('master', '9d918d2a69528b83e6e0aba6ba601fef',
+ url='https://codesign.llnl.gov/amg2013/amg2013.tgz')
+
+ variant('openmp', default=True, description='Build with OpenMP support')
+ variant('assumedpartition', default=False, description='Use assumed partition (for thousands of processors)')
+ variant('int64', default=False, description='Use 64-bit integers for global variables')
+
+ depends_on('mpi')
+
+ @property
+ def build_targets(self):
+ targets = []
+
+ include_cflags = ['-DTIMER_USE_MPI']
+ include_lflags = ['-lm']
+
+ if '+openmp' in self.spec:
+ include_cflags.append('-DHYPRE_USING_OPENMP')
+ include_cflags.append(self.compiler.openmp_flag)
+ include_lflags.append(self.compiler.openmp_flag)
+
+ if '+assumedpartition' in self.spec:
+ include_cflags.append('-DHYPRE_NO_GLOBAL_PARTITION')
+
+ if '+int64' in self.spec:
+ include_cflags.append('-DHYPRE_LONG_LONG')
+
+ targets.append('INCLUDE_CFLAGS={0}'.format(' '.join(include_cflags)))
+ targets.append('INCLUDE_LFLAGS={0}'.format(' '.join(include_lflags)))
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('test/amg2013', prefix.bin)
+ install_tree('docs', prefix.docs)
+ install('COPYRIGHT', prefix.docs)
+ install('COPYING.LESSER', prefix.docs)
diff --git a/var/spack/repos/builtin/packages/ampliconnoise/package.py b/var/spack/repos/builtin/packages/ampliconnoise/package.py
new file mode 100644
index 0000000000..626ac16678
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ampliconnoise/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 Ampliconnoise(MakefilePackage):
+ """AmpliconNoise is a collection of programs for the removal of noise
+ from 454 sequenced PCR amplicons."""
+
+ homepage = "https://code.google.com/archive/p/ampliconnoise/"
+ url = "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ampliconnoise/AmpliconNoiseV1.29.tar.gz"
+
+ version('1.29', 'd6723e6f9cc71d7eb6f1a65ba4643aac')
+
+ depends_on('mpi@2:')
+ depends_on('gsl')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', self.prefix.Scripts)
+ run_env.set('PYRO_LOOKUP_FILE', join_path(self.prefix, 'Data',
+ 'LookUp_E123.dat'))
+ run_env.set('SEQ_LOOKUP_FILE', join_path(self.prefix, 'Data',
+ 'Tran.dat'))
+
+ def install(self, spec, prefix):
+ make('install')
+ install_tree('bin', prefix.bin)
+ install_tree('Data', prefix.Data)
+ install_tree('FastaUnique', prefix.FastaUnique)
+ install_tree('FCluster', prefix.FCluster)
+ install_tree('NDist', prefix.NDist)
+ install_tree('Perseus', prefix.Perseus)
+ install_tree('PerseusD', prefix.PerseusD)
+ install_tree('PyroDist', prefix.PyroDist)
+ install_tree('PyroNoise', prefix.PyroNoise)
+ install_tree('PyroNoiseM', prefix.PyroNoiseM)
+ install_tree('Scripts', prefix.Scripts)
+ install_tree('SeqDist', prefix.SeqDist)
+ install_tree('SeqNoise', prefix.SeqNoise)
+ install_tree('SplitClusterClust', prefix.SplitClusterClust)
+ install_tree('SplitClusterEven', prefix.SplitClusterEven)
+ install_tree('Test', prefix.Test)
+ install_tree('TestFLX', prefix.TestFLX)
+ install_tree('TestTitanium', prefix.TestTitanium)
+ install_tree('TestTitaniumFast', prefix.TestTitaniumFast)
diff --git a/var/spack/repos/builtin/packages/amr-exp-parabolic/package.py b/var/spack/repos/builtin/packages/amr-exp-parabolic/package.py
new file mode 100644
index 0000000000..14d393ed27
--- /dev/null
+++ b/var/spack/repos/builtin/packages/amr-exp-parabolic/package.py
@@ -0,0 +1,95 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class AmrExpParabolic(MakefilePackage):
+ """Simplified block-structured adaptive mesh refinement algorithm
+ in two and three dimensions with subcycling in time.
+ The algorithm solves a linear advection diffusion equation
+ with a simple numerical method. This proxy app is intended to
+ capture the communication pattern of an explicit AMR algorithm
+ but does not represent an accurate characterization of
+ floating point effort or
+ relative costs of communication to computation."""
+
+ homepage = "https://ccse.lbl.gov/ExaCT/index.html"
+ url = "https://ccse.lbl.gov/ExaCT/AMR_Exp_Parabolic.tgz"
+ tags = ['proxy-app']
+
+ version(
+ 'release', '330604d9cc755dad8a2cdfaa7ff8f6a4',
+ url='https://ccse.lbl.gov/ExaCT/AMR_Exp_Parabolic.tgz')
+
+ variant(
+ 'debug', default=False, description='Turn on debugging')
+ variant(
+ 'mpi', default=True, description='Build with MPI support')
+ variant(
+ 'openmp', default=False,
+ description='Build with OpenMP support')
+ variant(
+ 'prof', default=False, description='Use profiler')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('gmake', type='build')
+
+ build_directory = 'MiniApps/AMR_Adv_Diff_F90'
+
+ def edit(self, spec, prefix):
+ def_file = FileFilter('Tools/F_mk/GMakedefs.mak')
+ def_file.filter('tdir = t/.*', 'tdir := t/$(suf)')
+ def_file.filter('hdir = t/.*', 'hdir := t/html')
+ def_file.filter('include $(BOXLIB_HOME)/Tools/F_mk/GMakeMPI.mak', '#')
+
+ if '+mpi' in spec:
+ def_file.filter('FC.*:=.*', 'FC = {0}'.format(spec['mpi'].mpifc))
+ def_file.filter('F90.*:=.*', 'F90 = {0}'.format(spec['mpi'].mpifc))
+ def_file.filter(
+ 'mpi_include_dir =.*',
+ 'mpi_include_dir = {0}'.format(spec['mpi'].prefix.include))
+ def_file.filter(
+ 'mpi_lib_dir =.*',
+ 'mpi_lib_dir = {0}'.format(spec['mpi'].prefix.lib))
+
+ with working_dir(self.build_directory):
+ makefile = FileFilter('GNUmakefile')
+ if '+debug' in spec:
+ makefile.filter('NDEBUG.*:= t', '#')
+ if '~mpi' in spec:
+ makefile.filter('MPI.*:= t', '#')
+ if '+openmp' in spec:
+ makefile.filter('OMP.*:=', 'OMP := t')
+ if '+prof' in spec:
+ makefile.filter('PROF.*:=', 'PROF := t')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ files = glob.glob(join_path(self.build_directory, '*.exe'))
+ for f in files:
+ install(f, prefix.bin)
+ install('README.txt', prefix)
+ install('license.txt', prefix)
diff --git a/var/spack/repos/builtin/packages/amrex/package.py b/var/spack/repos/builtin/packages/amrex/package.py
new file mode 100644
index 0000000000..89533db2e6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/amrex/package.py
@@ -0,0 +1,86 @@
+##############################################################################
+# 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/spack/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 Amrex(CMakePackage):
+ """AMReX is the successor to BoxLib.
+ It is a Block-Structured AMR Framework.
+ """
+
+ homepage = "https://ccse.lbl.gov/AMReX/index.html"
+ url = "https://github.com/AMReX-Codes/amrex.git"
+
+ version('17.06', git='https://github.com/AMReX-Codes/amrex.git', commit='836d3c7')
+ version('master', git='https://github.com/AMReX-Codes/amrex.git', tag='master')
+ version('develop', git='https://github.com/AMReX-Codes/amrex.git', tag='development')
+
+ variant('dims',
+ default='3',
+ values=('1', '2', '3'),
+ multi=False,
+ description='Number of spatial dimensions')
+
+ variant('prec',
+ default='DOUBLE',
+ values=('FLOAT', 'DOUBLE'),
+ multi=False,
+ description='Floating point precision')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+ variant('openmp', default=False, description='Enable OpenMP parallel support')
+ variant('fortran', default=True, description='Enable Fortran support')
+ variant('debug', default=False, description='Enable debugging features')
+ variant('particles', default=False, description='Include particle classes in build')
+
+ depends_on('mpi', when='+mpi')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ cmake_args = [
+ '-DENABLE_POSITION_INDEPENDENT_CODE=ON',
+ '-DBL_SPACEDIM:INT=%d' % int(spec.variants['dims'].value),
+ '-DBL_PRECISION:STRING=%s' % spec.variants['prec'].value,
+ '-DENABLE_FMG=%s' % ('+fortran' in spec),
+ '-DENABLE_FBASELIB=%s' % ('+fortran' in spec),
+ '-DBL_DEBUG:INT=%d' % int('+debug' in spec),
+ '-DBL_USE_PARTICLES:INT=%d' % int('+particles' in spec),
+ '-DENABLE_MPI:INT=%d' % int('+mpi' in spec),
+ '-DENABLE_OpenMP:INT=%d' % int('+openmp' in spec),
+ ]
+
+ if '+mpi' in spec:
+ cmake_args += [
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx
+ ]
+ if '+fortran' in spec:
+ cmake_args += [
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc
+ ]
+ cmake_args += ['-DENABLE_FORTRAN_MPI=%s' % ('+fortran' in spec)]
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/andi/package.py b/var/spack/repos/builtin/packages/andi/package.py
new file mode 100644
index 0000000000..44c2644507
--- /dev/null
+++ b/var/spack/repos/builtin/packages/andi/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Andi(AutotoolsPackage):
+ """andi is used for for estimating the
+ evolutionary distance between closely related genomes."""
+
+ homepage = "https://github.com/EvolBioInf/andi"
+ url = "https://github.com/EvolBioInf/andi/archive/v0.10.tar.gz"
+
+ version('0.10', '3aaba7961798bb4aaa546baa44e469d8')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('gsl')
+ depends_on('libdivsufsort')
diff --git a/var/spack/repos/builtin/packages/angsd/package.py b/var/spack/repos/builtin/packages/angsd/package.py
new file mode 100644
index 0000000000..eb3e5e58f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/angsd/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Angsd(MakefilePackage):
+ """Angsd is a program for analysing NGS data. The software can handle a
+ number of different input types from mapped reads to imputed genotype
+ probabilities. Most methods take genotype uncertainty into account
+ instead of basing the analysis on called genotypes. This is especially
+ useful for low and medium depth data."""
+
+ homepage = "https://github.com/ANGSD/angsd"
+ url = "https://github.com/ANGSD/angsd/archive/0.919.tar.gz"
+
+ version('0.919', '79d342f49c24ac00d35934f2617048d4')
+
+ depends_on('htslib')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('R_LIBS', prefix.R)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('angsd', join_path(prefix.bin))
+ install_tree('R', prefix.R)
+ install_tree('RES', prefix.RES)
+ install_tree('scripts', prefix.scripts)
diff --git a/var/spack/repos/builtin/packages/ant/package.py b/var/spack/repos/builtin/packages/ant/package.py
index 81a0e089e5..82478c481d 100644
--- a/var/spack/repos/builtin/packages/ant/package.py
+++ b/var/spack/repos/builtin/packages/ant/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,11 +32,16 @@ class Ant(Package):
"""
homepage = "http://ant.apache.org/"
- url = "http://apache.claz.org/ant/source/apache-ant-1.9.7-src.tar.gz"
+ url = "https://archive.apache.org/dist/ant/source/apache-ant-1.9.7-src.tar.gz"
- version('1.9.7', 'a2fd9458c76700b7be51ef12f07d4bb1')
+ # 1.10.0 requires newer Java, not yet tested....
+ # version('1.10.0', '2260301bb7734e34d8b96f1a5fd7979c')
+ version('1.9.9', '22c9d40dabafbec348aaada226581239')
+ version('1.9.8', '16253d516d5c33c4af9ef8fafcf1004b')
+ version('1.9.7', 'a2fd9458c76700b7be51ef12f07d4bb1')
+ version('1.9.6', '29b7507c9053e301d2b85091f2aec6f0')
- depends_on('jdk')
+ depends_on('java')
def install(self, spec, prefix):
env['ANT_HOME'] = self.prefix
diff --git a/var/spack/repos/builtin/packages/antlr/gcc.patch b/var/spack/repos/builtin/packages/antlr/gcc.patch
new file mode 100644
index 0000000000..40de6b7861
--- /dev/null
+++ b/var/spack/repos/builtin/packages/antlr/gcc.patch
@@ -0,0 +1,15 @@
+Description: Adds missing includes to fix FTBFS.
+
+Index: antlr-2.7.7/lib/cpp/antlr/CharScanner.hpp
+===================================================================
+--- antlr-2.7.7.orig/lib/cpp/antlr/CharScanner.hpp 2006-11-01 22:37:17.000000000 +0100
++++ antlr-2.7.7/lib/cpp/antlr/CharScanner.hpp 2009-01-15 20:47:53.000000000 +0100
+@@ -17,6 +17,8 @@
+ #else
+ #include <cctype>
+ #endif
++#include <cstdio>
++#include <cstring>
+
+ #if ( _MSC_VER == 1200 )
+ // VC6 seems to need this
diff --git a/var/spack/repos/builtin/packages/antlr/package.py b/var/spack/repos/builtin/packages/antlr/package.py
index 88653a8ea9..50324dd82c 100644
--- a/var/spack/repos/builtin/packages/antlr/package.py
+++ b/var/spack/repos/builtin/packages/antlr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,29 +32,20 @@ class Antlr(AutotoolsPackage):
frameworks. From a grammar, ANTLR generates a parser that can build and
walk parse trees."""
- homepage = "http://www.antlr.org"
- url = "https://github.com/antlr/antlr/tarball/v2.7.7"
+ homepage = "http://www.antlr2.org/"
+ url = "http://www.antlr2.org/download/antlr-2.7.7.tar.gz"
- # Notes from http://nco.sourceforge.net/#bld
- # The first steps to build (i.e., compile, for the most part) NCO from
- # source code are to install the pre-requisites: ANTLR version 2.7.7
- # (like this one not version 3.x or 4.x!) (required for ncap2)... ANTLR
- # binaries from major distributions are pre-built with the source patch
- # necessary to allow NCO to link to ANTLR... The ANTLR source file
- # CharScanner.hpp must include this line: #include <cstring> or else
- # ncap2 will not compile (this tarball is already patched).
- version('2.7.7', '914865e853fe8e1e61a9f23d045cb4ab',
- # Patched version as described above
- url='http://dust.ess.uci.edu/tmp/antlr-2.7.7.tar.gz')
- # Unpatched version
- # url='http://dust.ess.uci.edu/nco/antlr-2.7.7.tar.gz')
+ version('2.7.7', '01cc9a2a454dd33dcd8c856ec89af090')
+
+ # Fixes build with recent versions of GCC
+ patch('gcc.patch')
variant('cxx', default=True, description='Enable ANTLR for C++')
variant('java', default=False, description='Enable ANTLR for Java')
variant('python', default=False, description='Enable ANTLR for Python')
extends('python', when='+python')
- depends_on('jdk', type=('build', 'run'), when='+java')
+ depends_on('java', type=('build', 'run'), when='+java')
def configure_args(self):
spec = self.spec
diff --git a/var/spack/repos/builtin/packages/ape/package.py b/var/spack/repos/builtin/packages/ape/package.py
index 48e436804f..dd24c84e5e 100644
--- a/var/spack/repos/builtin/packages/ape/package.py
+++ b/var/spack/repos/builtin/packages/ape/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,7 +35,7 @@ class Ape(Package):
version('2.2.1', 'ab81da85bd749c0c136af088c7f9ad58')
depends_on('gsl')
- depends_on('libxc')
+ depends_on('libxc@:2.2.2')
def install(self, spec, prefix):
args = []
diff --git a/var/spack/repos/builtin/packages/apex/package.py b/var/spack/repos/builtin/packages/apex/package.py
index 832e10a1ec..50f74f6220 100644
--- a/var/spack/repos/builtin/packages/apex/package.py
+++ b/var/spack/repos/builtin/packages/apex/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,14 +23,13 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-from spack.util.environment import *
-class Apex(Package):
+class Apex(CMakePackage):
homepage = "http://github.com/khuck/xpress-apex"
url = "http://github.com/khuck/xpress-apex/archive/v0.1.tar.gz"
- version('0.1', '8b95f0c0313da1575960d3ad69f18e75')
+ version('0.1', 'e224a0b9033e23a9697ce2a3c307a0a3')
depends_on("binutils+libiberty")
depends_on("boost@1.54:")
@@ -38,19 +37,14 @@ class Apex(Package):
depends_on("activeharmony@4.5:")
depends_on("ompt-openmp")
- def install(self, spec, prefix):
-
- path = get_path("PATH")
- path.remove(spec["binutils"].prefix.bin)
- path_set("PATH", path)
- with working_dir("build", create=True):
- cmake('-DBOOST_ROOT=%s' % spec['boost'].prefix,
- '-DUSE_BFD=TRUE',
- '-DBFD_ROOT=%s' % spec['binutils'].prefix,
- '-DUSE_ACTIVEHARMONY=TRUE',
- '-DACTIVEHARMONY_ROOT=%s' % spec['activeharmony'].prefix,
- '-DUSE_OMPT=TRUE',
- '-DOMPT_ROOT=%s' % spec['ompt-openmp'].prefix,
- '..', *std_cmake_args)
- make()
- make("install")
+ def cmake_args(self):
+ spec = self.spec
+ return [
+ '-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DUSE_BFD=TRUE',
+ '-DBFD_ROOT=%s' % spec['binutils'].prefix,
+ '-DUSE_ACTIVEHARMONY=TRUE',
+ '-DACTIVEHARMONY_ROOT=%s' % spec['activeharmony'].prefix,
+ '-DUSE_OMPT=TRUE',
+ '-DOMPT_ROOT=%s' % spec['ompt-openmp'].prefix,
+ ]
diff --git a/var/spack/repos/builtin/packages/applewmproto/package.py b/var/spack/repos/builtin/packages/applewmproto/package.py
index 8d7e360bfb..170df5d570 100644
--- a/var/spack/repos/builtin/packages/applewmproto/package.py
+++ b/var/spack/repos/builtin/packages/applewmproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Applewmproto(Package):
+class Applewmproto(AutotoolsPackage):
"""Apple Rootless Window Management Extension.
This extension defines a protcol that allows X window managers
@@ -39,8 +39,3 @@ class Applewmproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/appres/package.py b/var/spack/repos/builtin/packages/appres/package.py
index 47a9c5bb54..87f5c2ff96 100644
--- a/var/spack/repos/builtin/packages/appres/package.py
+++ b/var/spack/repos/builtin/packages/appres/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Appres(Package):
+class Appres(AutotoolsPackage):
"""The appres program prints the resources seen by an application (or
subhierarchy of an application) with the specified class and instance
names. It can be used to determine which resources a particular
@@ -42,9 +42,3 @@ class Appres(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/apr-util/package.py b/var/spack/repos/builtin/packages/apr-util/package.py
index 8e01d3bbdd..1b68584530 100644
--- a/var/spack/repos/builtin/packages/apr-util/package.py
+++ b/var/spack/repos/builtin/packages/apr-util/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,21 +25,93 @@
from spack import *
-class AprUtil(Package):
+class AprUtil(AutotoolsPackage):
"""Apache Portable Runtime Utility"""
+
homepage = 'https://apr.apache.org/'
- url = 'http://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz'
+ url = 'http://archive.apache.org/dist/apr/apr-util-1.6.0.tar.gz'
+
+ version('1.6.0', '3b03dbff60728a4f4c33f5d929e8b35a')
+ version('1.5.4', '866825c04da827c6e5f53daff5569f42')
- version('1.5.4', '866825c04da827c6e5f53daff5569f42')
+ variant('crypto', default=True, description='Enable crypto support')
+ variant('gdbm', default=False, description='Enable GDBM support')
+ variant('pgsql', default=False, description='Enable PostgreSQL support')
+ variant('sqlite', default=False, description='Enable sqlite DBD driver')
+ variant('odbc', default=False, description='Enalbe ODBC support')
depends_on('apr')
+ depends_on('expat')
+ depends_on('libiconv')
+
+ depends_on('openssl', when='+crypto')
+ depends_on('gdbm', when='+gdbm')
+ depends_on('postgresql', when='+pgsql')
+ depends_on('sqlite', when='+sqlite')
+ depends_on('unixodbc', when='+odbc')
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ '--with-apr={0}'.format(spec['apr'].prefix),
+ '--with-expat={0}'.format(spec['expat'].prefix),
+ '--with-iconv={0}'.format(spec['libiconv'].prefix),
+ # TODO: Add support for the following database managers
+ '--without-ndbm',
+ '--without-berkeley-db',
+ '--without-mysql',
+ '--without-oracle',
+ ]
+
+ if '+crypto' in spec:
+ args.extend([
+ '--with-crypto',
+ '--with-openssl={0}'.format(spec['openssl'].prefix),
+ ])
+ else:
+ args.append('--without-crypto')
+
+ if '+gdbm' in spec:
+ args.append('--with-gdbm={0}'.format(spec['gdbm'].prefix))
+ else:
+ args.append('--without-gdbm')
+
+ if '+pgsql' in spec:
+ args.append('--with-pgsql={0}'.format(spec['postgresql'].prefix))
+ else:
+ args.append('--without-pgsql')
+
+ if '+sqlite' in spec:
+ if spec.satisfies('^sqlite@3.0:3.999'):
+ args.extend([
+ '--with-sqlite3={0}'.format(spec['sqlite'].prefix),
+ '--without-sqlite2',
+ ])
+ elif spec.satisfies('^sqlite@2.0:2.999'):
+ args.extend([
+ '--with-sqlite2={0}'.format(spec['sqlite'].prefix),
+ '--without-sqlite3',
+ ])
+ else:
+ args.extend([
+ '--without-sqlite2',
+ '--without-sqlite3',
+ ])
+
+ if '+odbc' in spec:
+ args.append('--with-odbc={0}'.format(spec['unixodbc'].prefix))
+ else:
+ args.append('--without-odbc')
- def install(self, spec, prefix):
+ return args
- # configure, build, install:
- options = ['--prefix=%s' % prefix]
- options.append('--with-apr=%s' % spec['apr'].prefix)
+ def check(self):
+ # FIXME: Database driver tests fail, at least on macOS:
+ #
+ # Failed to load driver file apr_dbd_pgsql.so
+ # Failed to load driver file apr_dbd_sqlite3.so
+ # Failed to load driver file apr_dbd_odbc.so
- configure(*options)
- make()
- make('install')
+ # Tests occassionally fail when run in parallel
+ make('check', parallel=False)
diff --git a/var/spack/repos/builtin/packages/apr/package.py b/var/spack/repos/builtin/packages/apr/package.py
index 0cd51f52e3..f78b229229 100644
--- a/var/spack/repos/builtin/packages/apr/package.py
+++ b/var/spack/repos/builtin/packages/apr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,11 @@
from spack import *
-class Apr(Package):
+class Apr(AutotoolsPackage):
"""Apache portable runtime."""
- homepage = 'https://apr.apache.org/'
- url = 'http://archive.apache.org/dist/apr/apr-1.5.2.tar.gz'
- version('1.5.2', '98492e965963f852ab29f9e61b2ad700')
+ homepage = 'https://apr.apache.org/'
+ url = 'http://archive.apache.org/dist/apr/apr-1.6.2.tar.gz'
- def install(self, spec, prefix):
- options = ['--prefix=%s' % prefix]
- configure(*options)
- make()
- make('install')
+ version('1.6.2', '8672e78514e3fcef2643127c524bf0f9')
+ version('1.5.2', '98492e965963f852ab29f9e61b2ad700')
diff --git a/var/spack/repos/builtin/packages/archer/package.py b/var/spack/repos/builtin/packages/archer/package.py
new file mode 100644
index 0000000000..87ced1051a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/archer/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Archer(CMakePackage):
+ """ARCHER, a data race detection tool for large OpenMP applications."""
+
+ homepage = "https://github.com/PRUNERS/ARCHER"
+ url = "https://github.com/PRUNERS/archer/archive/v1.0.0.tar.gz"
+
+ version('1.0.0', '790bfaf00b9f57490eb609ecabfe954a')
+
+ depends_on('cmake@3.4.3:', type='build')
+ depends_on('llvm')
+ depends_on('ninja@1.5:', type='build')
+ depends_on('llvm-openmp-ompt')
+
+ generator = 'Ninja'
+
+ def cmake_args(self):
+ return [
+ '-DCMAKE_C_COMPILER=clang',
+ '-DCMAKE_CXX_COMPILER=clang++',
+ '-DOMP_PREFIX:PATH=%s' % self.spec['llvm-openmp-ompt'].prefix,
+ ]
diff --git a/var/spack/repos/builtin/packages/argtable/package.py b/var/spack/repos/builtin/packages/argtable/package.py
new file mode 100644
index 0000000000..f622e29837
--- /dev/null
+++ b/var/spack/repos/builtin/packages/argtable/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Argtable(AutotoolsPackage):
+ """Argtable is an ANSI C library for parsing GNU style command line
+ options with a minimum of fuss.
+ """
+
+ homepage = "http://argtable.sourceforge.net/"
+ url = "https://sourceforge.net/projects/argtable/files/argtable/argtable-2.13/argtable2-13.tar.gz/download"
+
+ version('2-13', '156773989d0d6406cea36526d3926668')
diff --git a/var/spack/repos/builtin/packages/arlecore/package.py b/var/spack/repos/builtin/packages/arlecore/package.py
new file mode 100644
index 0000000000..69de30423d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/arlecore/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 *
+import distutils.dir_util
+
+
+class Arlecore(Package):
+ """An Integrated Software for Population Genetics Data Analysis"""
+
+ homepage = "http://cmpg.unibe.ch/software/arlequin35/"
+ url = "http://cmpg.unibe.ch/software/arlequin35/linux/arlecore_linux.zip"
+
+ version('3.5.2.2', '347a589fc609f359eb61557a2e8ceb2f')
+
+ depends_on('r', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ distutils.dir_util.copy_tree(".", prefix)
diff --git a/var/spack/repos/builtin/packages/armadillo/package.py b/var/spack/repos/builtin/packages/armadillo/package.py
index 2336da4520..2037f552d8 100644
--- a/var/spack/repos/builtin/packages/armadillo/package.py
+++ b/var/spack/repos/builtin/packages/armadillo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Armadillo(Package):
+class Armadillo(CMakePackage):
"""Armadillo is a high quality linear algebra library (matrix maths)
for the C++ language, aiming towards a good balance between speed and
ease of use."""
@@ -33,40 +33,42 @@ class Armadillo(Package):
homepage = "http://arma.sourceforge.net/"
url = "http://sourceforge.net/projects/arma/files/armadillo-7.200.1.tar.xz"
+ version('8.100.1', 'd9762d6f097e0451d0cfadfbda295e7c')
+ version('7.950.1', 'c06eb38b12cae49cab0ce05f96147147')
+ # NOTE: v7.900.1 download url seems broken is no v7.950.1?
+ version('7.900.1', '5ef71763bd429a3d481499878351f3be')
version('7.500.0', '7d316fdf3c3c7ea92b64704180ae315d')
version('7.200.2', 'b21585372d67a8876117fd515d8cf0a2')
version('7.200.1', 'ed86d6df0058979e107502e1fe3e469e')
variant('hdf5', default=False, description='Include HDF5 support')
- depends_on('cmake@2.8:', type='build')
+ depends_on('cmake@2.8.12:', type='build')
depends_on('arpack-ng') # old arpack causes undefined symbols
depends_on('blas')
depends_on('lapack')
depends_on('superlu@5.2:')
depends_on('hdf5', when='+hdf5')
- def install(self, spec, prefix):
- arpack = find_libraries(['libarpack'], root=spec[
- 'arpack-ng'].prefix.lib, shared=True)
- superlu = find_libraries(['libsuperlu'], root=spec[
- 'superlu'].prefix, shared=False, recurse=True)
- cmake_args = [
+ # Adds an `#undef linux` to prevent preprocessor expansion of include
+ # directories with `linux` in them getting transformed into a 1.
+ # E.g. `/path/linux-x86_64/dir` -> `/path/1-x86_64/dir` if/when a linux
+ # platform's compiler is adding `#define linux 1`.
+ patch('undef_linux.patch', when='platform=linux')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ return [
# ARPACK support
- '-DARPACK_LIBRARY={0}'.format(arpack.joined()),
+ '-DARPACK_LIBRARY={0}'.format(spec['arpack-ng'].libs.joined(";")),
# BLAS support
- '-DBLAS_LIBRARY={0}'.format(spec['blas'].blas_libs.joined()),
+ '-DBLAS_LIBRARY={0}'.format(spec['blas'].libs.joined(";")),
# LAPACK support
- '-DLAPACK_LIBRARY={0}'.format(spec['lapack'].lapack_libs.joined()),
+ '-DLAPACK_LIBRARY={0}'.format(spec['lapack'].libs.joined(";")),
# SuperLU support
'-DSuperLU_INCLUDE_DIR={0}'.format(spec['superlu'].prefix.include),
- '-DSuperLU_LIBRARY={0}'.format(superlu.joined()),
+ '-DSuperLU_LIBRARY={0}'.format(spec['superlu'].libs.joined(";")),
# HDF5 support
'-DDETECT_HDF5={0}'.format('ON' if '+hdf5' in spec else 'OFF')
]
-
- cmake_args.extend(std_cmake_args)
- cmake('.', *cmake_args)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/armadillo/undef_linux.patch b/var/spack/repos/builtin/packages/armadillo/undef_linux.patch
new file mode 100644
index 0000000000..68b434dca8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/armadillo/undef_linux.patch
@@ -0,0 +1,4 @@
+--- a/include/armadillo_bits/compiler_setup.hpp
++++ b/include/armadillo_bits/compiler_setup.hpp
+@@ -0,0 +1 @@
++#undef linux
diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py
index a1c18d8086..a784baf1cc 100644
--- a/var/spack/repos/builtin/packages/arpack-ng/package.py
+++ b/var/spack/repos/builtin/packages/arpack-ng/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -56,6 +56,7 @@ class ArpackNg(Package):
homepage = 'https://github.com/opencollab/arpack-ng'
url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz'
+ version('3.5.0', '9762c9ae6d739a9e040f8201b1578874')
version('3.4.0', 'ae9ca13f2143a7ea280cb0e2fd4bfae4')
version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5')
@@ -80,6 +81,19 @@ class ArpackNg(Package):
depends_on('mpi', when='+mpi')
+ @property
+ def libs(self):
+ # TODO: do we need spec['arpack-ng:parallel'].libs ?
+ # query_parameters = self.spec.last_query.extra_parameters
+ libraries = ['libarpack']
+
+ if '+mpi' in self.spec:
+ libraries = ['libparpack'] + libraries
+
+ return find_libraries(
+ libraries, root=self.prefix, shared=True, recurse=True
+ )
+
@when('@3.4.0:')
def install(self, spec, prefix):
@@ -88,8 +102,8 @@ class ArpackNg(Package):
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
# Make sure we use Spack's blas/lapack:
- lapack_libs = spec['lapack'].lapack_libs.joined(';')
- blas_libs = spec['blas'].blas_libs.joined(';')
+ lapack_libs = spec['lapack'].libs.joined(';')
+ blas_libs = spec['blas'].libs.joined(';')
options.extend([
'-DLAPACK_FOUND=true',
@@ -114,7 +128,7 @@ class ArpackNg(Package):
make('test')
make('install')
- @when('@3.3.0')
+ @when('@3.3.0') # noqa
def install(self, spec, prefix):
# Apparently autotools are not bootstrapped
which('libtoolize')()
@@ -129,8 +143,8 @@ class ArpackNg(Package):
])
options.extend([
- '--with-blas={0}'.format(spec['blas'].blas_libs.ld_flags),
- '--with-lapack={0}'.format(spec['lapack'].lapack_libs.ld_flags)
+ '--with-blas={0}'.format(spec['blas'].libs.ld_flags),
+ '--with-lapack={0}'.format(spec['lapack'].libs.ld_flags)
])
if '+shared' not in spec:
options.append('--enable-shared=no')
diff --git a/var/spack/repos/builtin/packages/arpack/package.py b/var/spack/repos/builtin/packages/arpack/package.py
deleted file mode 100644
index 91b5f06a4a..0000000000
--- a/var/spack/repos/builtin/packages/arpack/package.py
+++ /dev/null
@@ -1,73 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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 *
-import os
-
-
-class Arpack(Package):
- """A collection of Fortran77 subroutines designed to solve large scale
- eigenvalue problems."""
-
- homepage = "http://www.caam.rice.edu/software/ARPACK/"
- url = "http://www.caam.rice.edu/software/ARPACK/SRC/arpack96.tar.gz"
-
- version('96', 'fffaa970198b285676f4156cebc8626e')
-
- depends_on('blas')
- depends_on('lapack')
-
- def patch(self):
- makefile = FileFilter('ARmake.inc')
-
- # Section 1: Paths and Libraries
-
- # Change the build directory
- makefile.filter('^home.*', 'home = %s' % os.getcwd())
-
- # Use external BLAS/LAPACK
- makefile.filter('^BLASdir.*',
- 'BLASdir = %s' % self.spec['blas'].prefix)
- makefile.filter('^LAPACKdir.*',
- 'LAPACKdir = %s' % self.spec['lapack'].prefix)
-
- # Do not include the platform in the library name
- makefile.filter('^PLAT.*', 'PLAT = ')
- makefile.filter('^ARPACKLIB.*', 'ARPACKLIB = $(home)/libarpack.a')
-
- # Section 2: Compilers
-
- # Be sure to use the Spack compiler wrapper
- makefile.filter('^FC.*', 'FC = {0}'.format(os.environ['F77']))
- makefile.filter('^FFLAGS.*', 'FFLAGS = -O2 -g -fPIC')
-
- if not which('ranlib'):
- makefile.filter('^RANLIB.*', 'RANLIB = touch')
-
- def install(self, spec, prefix):
- with working_dir('SRC'):
- make('all')
-
- mkdir(prefix.lib)
- install('libarpack.a', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/ascent/package.py b/var/spack/repos/builtin/packages/ascent/package.py
new file mode 100644
index 0000000000..854bf1e909
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ascent/package.py
@@ -0,0 +1,333 @@
+##############################################################################
+# 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/spack/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 *
+
+import socket
+import os
+
+import llnl.util.tty as tty
+from os import environ as env
+
+
+def cmake_cache_entry(name, value):
+ """
+ Helper that creates CMake cache entry strings used in
+ 'host-config' files.
+ """
+ return 'set({0} "{1}" CACHE PATH "")\n\n'.format(name, value)
+
+
+class Ascent(Package):
+ """Ascent is an open source many-core capable lightweight in situ
+ visualization and analysis infrastructure for multi-physics HPC
+ simulations."""
+
+ homepage = "https://github.com/Alpine-DAV/ascent"
+ url = "https://github.com/Alpine-DAV/ascent"
+
+ maintainers = ['cyrush']
+
+ version('develop',
+ git='https://github.com/Alpine-DAV/ascent.git',
+ branch='develop',
+ submodules=True)
+
+ ###########################################################################
+ # package variants
+ ###########################################################################
+
+ variant("shared", default=True, description="Build Conduit as shared libs")
+
+ variant("cmake", default=True,
+ description="Build CMake (if off, attempt to use cmake from PATH)")
+
+ variant("mpi", default=True, description="Build Ascent MPI Support")
+
+ # variants for python support
+ variant("python", default=True, description="Build Conduit Python support")
+
+ # variants for runtime features
+
+ variant("vtkh", default=True,
+ description="Build VTK-h filter and rendering support")
+
+ variant("tbb", default=True, description="Build tbb support")
+ variant("cuda", default=False, description="Build cuda support")
+
+ variant("adios", default=True, description="Build Adios filter support")
+
+ # variants for dev-tools (docs, etc)
+ variant("doc", default=False, description="Build Conduit's documentation")
+
+ ###########################################################################
+ # package dependencies
+ ###########################################################################
+
+ depends_on("cmake", when="+cmake")
+ depends_on("conduit")
+
+ #######################
+ # Python
+ #######################
+ # we need a shared version of python b/c linking with static python lib
+ # causes duplicate state issues when running compiled python modules.
+ depends_on("python+shared")
+ extends("python", when="+python")
+ # TODO: blas and lapack are disabled due to build
+ # issues Cyrus experienced on OSX 10.11.6
+ depends_on("py-numpy~blas~lapack", when="+python", type=('build', 'run'))
+
+ #######################
+ # MPI
+ #######################
+ depends_on("mpi", when="+mpi")
+ depends_on("py-mpi4py", when="+python+mpi")
+
+ #############################
+ # TPLs for Runtime Features
+ #############################
+
+ depends_on("vtkh", when="+vtkh")
+ depends_on("vtkh+cuda", when="+vtkh+cuda")
+ depends_on("adios", when="+adios")
+
+ #######################
+ # Documentation related
+ #######################
+ depends_on("py-sphinx", when="+python+doc", type='build')
+
+ def install(self, spec, prefix):
+ """
+ Build and install Conduit.
+ """
+ with working_dir('spack-build', create=True):
+ host_cfg_fname = self.create_host_config(spec, prefix)
+ cmake_args = []
+ # if we have a static build, we need to avoid any of
+ # spack's default cmake settings related to rpaths
+ # (see: https://github.com/LLNL/spack/issues/2658)
+ if "+shared" in spec:
+ cmake_args.extend(std_cmake_args)
+ else:
+ for arg in std_cmake_args:
+ if arg.count("RPATH") == 0:
+ cmake_args.append(arg)
+ cmake_args.extend(["-C", host_cfg_fname, "../src"])
+ cmake(*cmake_args)
+ make()
+ make("install")
+ # TODO also copy host_cfg_fname into install
+
+ def create_host_config(self, spec, prefix):
+ """
+ This method creates a 'host-config' file that specifies
+ all of the options used to configure and build ascent.
+ """
+
+ #######################
+ # Compiler Info
+ #######################
+ c_compiler = env["SPACK_CC"]
+ cpp_compiler = env["SPACK_CXX"]
+ f_compiler = None
+
+ if self.compiler.fc:
+ # even if this is set, it may not exist so do one more sanity check
+ if os.path.isfile(env["SPACK_FC"]):
+ f_compiler = env["SPACK_FC"]
+
+ #######################################################################
+ # By directly fetching the names of the actual compilers we appear
+ # to doing something evil here, but this is necessary to create a
+ # 'host config' file that works outside of the spack install env.
+ #######################################################################
+
+ sys_type = spec.architecture
+ # if on llnl systems, we can use the SYS_TYPE
+ if "SYS_TYPE" in env:
+ sys_type = env["SYS_TYPE"]
+
+ ##############################################
+ # Find and record what CMake is used
+ ##############################################
+
+ if "+cmake" in spec:
+ cmake_exe = spec['cmake'].command.path
+ else:
+ cmake_exe = which("cmake")
+ if cmake_exe is None:
+ msg = 'failed to find CMake (and cmake variant is off)'
+ raise RuntimeError(msg)
+ cmake_exe = cmake_exe.path
+
+ host_cfg_fname = "%s-%s-%s.cmake" % (socket.gethostname(),
+ sys_type,
+ spec.compiler)
+
+ cfg = open(host_cfg_fname, "w")
+ cfg.write("##################################\n")
+ cfg.write("# spack generated host-config\n")
+ cfg.write("##################################\n")
+ cfg.write("# {0}-{1}\n".format(sys_type, spec.compiler))
+ cfg.write("##################################\n\n")
+
+ # Include path to cmake for reference
+ cfg.write("# cmake from spack \n")
+ cfg.write("# cmake executable path: %s\n\n" % cmake_exe)
+
+ #######################
+ # Compiler Settings
+ #######################
+
+ cfg.write("#######\n")
+ cfg.write("# using %s compiler spec\n" % spec.compiler)
+ cfg.write("#######\n\n")
+ cfg.write("# c compiler used by spack\n")
+ cfg.write(cmake_cache_entry("CMAKE_C_COMPILER", c_compiler))
+ cfg.write("# cpp compiler used by spack\n")
+ cfg.write(cmake_cache_entry("CMAKE_CXX_COMPILER", cpp_compiler))
+
+ cfg.write("# fortran compiler used by spack\n")
+ if f_compiler is not None:
+ cfg.write(cmake_cache_entry("ENABLE_FORTRAN", "ON"))
+ cfg.write(cmake_cache_entry("CMAKE_Fortran_COMPILER", f_compiler))
+ else:
+ cfg.write("# no fortran compiler found\n\n")
+ cfg.write(cmake_cache_entry("ENABLE_FORTRAN", "OFF"))
+
+ #######################################################################
+ # Core Dependencies
+ #######################################################################
+
+ #######################
+ # Conduit
+ #######################
+
+ cfg.write("# conduit from spack \n")
+ cfg.write(cmake_cache_entry("CONDUIT_DIR", spec['conduit'].prefix))
+
+ #######################################################################
+ # Optional Dependencies
+ #######################################################################
+
+ #######################
+ # Python
+ #######################
+
+ cfg.write("# Python Support\n")
+
+ if "+python" in spec:
+ cfg.write("# Enable python module builds\n")
+ cfg.write(cmake_cache_entry("ENABLE_PYTHON", "ON"))
+ cfg.write("# python from spack \n")
+ cfg.write(cmake_cache_entry("PYTHON_EXECUTABLE",
+ spec['python'].command.path))
+ # install module to standard style site packages dir
+ # so we can support spack activate
+ cfg.write(cmake_cache_entry("PYTHON_MODULE_INSTALL_PREFIX",
+ site_packages_dir))
+ else:
+ cfg.write(cmake_cache_entry("ENABLE_PYTHON", "OFF"))
+
+ if "+doc" in spec:
+ cfg.write(cmake_cache_entry("ENABLE_DOCS", "ON"))
+
+ cfg.write("# sphinx from spack \n")
+ sphinx_build_exe = join_path(spec['py-sphinx'].prefix.bin,
+ "sphinx-build")
+ cfg.write(cmake_cache_entry("SPHINX_EXECUTABLE", sphinx_build_exe))
+
+ cfg.write("# doxygen from uberenv\n")
+ doxygen_exe = spec['doxygen'].command.path
+ cfg.write(cmake_cache_entry("DOXYGEN_EXECUTABLE", doxygen_exe))
+ else:
+ cfg.write(cmake_cache_entry("ENABLE_DOCS", "OFF"))
+
+ #######################
+ # MPI
+ #######################
+
+ cfg.write("# MPI Support\n")
+
+ if "+mpi" in spec:
+ cfg.write(cmake_cache_entry("ENABLE_MPI", "ON"))
+ cfg.write(cmake_cache_entry("MPI_C_COMPILER", spec['mpi'].mpicc))
+ cfg.write(cmake_cache_entry("MPI_CXX_COMPILER",
+ spec['mpi'].mpicxx))
+ cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER",
+ spec['mpi'].mpifc))
+ else:
+ cfg.write(cmake_cache_entry("ENABLE_MPI", "OFF"))
+
+ #######################
+ # CUDA
+ #######################
+
+ cfg.write("# CUDA Support\n")
+
+ if "+cuda" in spec:
+ cfg.write(cmake_cache_entry("ENABLE_CUDA", "ON"))
+ else:
+ cfg.write(cmake_cache_entry("ENABLE_CUDA", "OFF"))
+
+ #######################
+ # VTK-h
+ #######################
+
+ cfg.write("# vtk-h support \n")
+
+ if "+vtkh" in spec:
+ cfg.write("# tbb from spack\n")
+ cfg.write(cmake_cache_entry("TBB_DIR", spec['tbb'].prefix))
+
+ cfg.write("# vtk-m from spack\n")
+ cfg.write(cmake_cache_entry("VTKM_DIR", spec['vtkm'].prefix))
+
+ cfg.write("# vtk-h from spack\n")
+ cfg.write(cmake_cache_entry("VTKH_DIR", spec['vtkh'].prefix))
+ else:
+ cfg.write("# vtk-h not built by spack \n")
+
+ #######################
+ # Adios
+ #######################
+
+ cfg.write("# adios support\n")
+
+ if "+adios" in spec:
+ cfg.write(cmake_cache_entry("ADIOS_DIR", spec['adios'].prefix))
+ else:
+ cfg.write("# adios not built by spack \n")
+
+ cfg.write("##################################\n")
+ cfg.write("# end spack generated host-config\n")
+ cfg.write("##################################\n")
+ cfg.close()
+
+ host_cfg_fname = os.path.abspath(host_cfg_fname)
+ tty.info("spack generated conduit host-config file: " + host_cfg_fname)
+ return host_cfg_fname
diff --git a/var/spack/repos/builtin/packages/asciidoc/package.py b/var/spack/repos/builtin/packages/asciidoc/package.py
index 552030d965..885fc02404 100644
--- a/var/spack/repos/builtin/packages/asciidoc/package.py
+++ b/var/spack/repos/builtin/packages/asciidoc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Asciidoc(Package):
+class Asciidoc(AutotoolsPackage):
"""A presentable text document format for writing articles, UNIX man
pages and other small to medium sized documents."""
@@ -38,9 +38,3 @@ class Asciidoc(Package):
depends_on('libxslt')
depends_on('docbook-xml')
depends_on('docbook-xsl')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/aspa/package.py b/var/spack/repos/builtin/packages/aspa/package.py
new file mode 100644
index 0000000000..3686ffe4ea
--- /dev/null
+++ b/var/spack/repos/builtin/packages/aspa/package.py
@@ -0,0 +1,71 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Aspa(MakefilePackage):
+ """A fundamental premise in ExMatEx is that scale-bridging performed in
+ heterogeneous MPMD materials science simulations will place important
+ demands upon the exascale ecosystem that need to be identified and
+ quantified.
+ """
+ tags = ['proxy-app']
+ homepage = "http://www.exmatex.org/aspa.html"
+ url = "https://github.com/exmatex/ASPA/archive/master.tar.gz"
+
+ version('master', git='https://github.com/exmatex/ASPA.git',
+ description='master')
+ variant('mpi', default=True, description='Build with MPI Support')
+
+ depends_on('lapack')
+ depends_on('blas')
+ depends_on('mpi', when='+mpi')
+ depends_on('hdf5')
+
+ @property
+ def build_targets(self):
+ targets = [
+ '--directory=exec',
+ '--file=Makefile',
+ 'LIBS={0} {1} {2}'.format(self.spec['lapack'].libs.ld_flags,
+ self.spec['blas'].libs.ld_flags,
+ self.spec['hdf5'].libs.ld_flags),
+ 'CXX={0}'.format(self.spec['mpi'].mpicxx)
+ ]
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+ mkdirp(prefix.input)
+ install('exec/aspa', prefix.bin)
+ install('exec/README', prefix.doc)
+ install('exec/aspa.inp', prefix.input)
+ install('exec/kriging_model_centers.txt', prefix.input)
+ install('exec/point_data.txt', prefix.input)
+ install('exec/value_data.txt', prefix.input)
+ for files in glob.glob('doc/*.*'):
+ install(files, prefix.doc)
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..c24a50ef39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/aspell/package.py
@@ -0,0 +1,85 @@
+##############################################################################
+# 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/spack/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 ExtensionError, 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):
+ extensions_layout = kwargs.get("extensions_layout",
+ spack.store.extensions)
+ if extensions_layout is not spack.store.extensions:
+ raise ExtensionError(
+ 'aspell does not support non-global extensions')
+
+ 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):
+ extensions_layout = kwargs.get("extensions_layout",
+ spack.store.extensions)
+ if extensions_layout is not spack.store.extensions:
+ raise ExtensionError(
+ 'aspell does not support non-global extensions')
+
+ 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..5a4b1c82d8
--- /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/spack/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..38d6caeabd
--- /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/spack/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..84a798d41a
--- /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/spack/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')
diff --git a/var/spack/repos/builtin/packages/assimp/package.py b/var/spack/repos/builtin/packages/assimp/package.py
new file mode 100644
index 0000000000..dd9b414772
--- /dev/null
+++ b/var/spack/repos/builtin/packages/assimp/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Assimp(CMakePackage):
+ """Open Asset Import Library (Assimp) is a portable Open Source library to
+ import various well-known 3D model formats in a uniform manner."""
+
+ homepage = "https://www.assimp.org"
+ url = "https://github.com/assimp/assimp/archive/v3.3.1.tar.gz"
+
+ version('4.0.1', '23a6301c728a413aafbfa1cca19ba91f')
+
+ depends_on('boost')
+
+ def cmake_args(self):
+ args = ['-DASSIMP_BUILD_TESTS=OFF']
+ return args
diff --git a/var/spack/repos/builtin/packages/astra/package.py b/var/spack/repos/builtin/packages/astra/package.py
index e32e70cada..694a394c69 100644
--- a/var/spack/repos/builtin/packages/astra/package.py
+++ b/var/spack/repos/builtin/packages/astra/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/astral/astral.sh b/var/spack/repos/builtin/packages/astral/astral.sh
new file mode 100644
index 0000000000..3f530d7f4e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/astral/astral.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the astral jar file
+java $JAVA_ARGS $JAVA_OPTS -jar astral.jar "$@"
diff --git a/var/spack/repos/builtin/packages/astral/package.py b/var/spack/repos/builtin/packages/astral/package.py
new file mode 100644
index 0000000000..11d8b0ed23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/astral/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+
+
+class Astral(Package):
+ """ASTRAL is a tool for estimating an unrooted species tree given a set of
+ unrooted gene trees."""
+
+ homepage = "https://github.com/smirarab/ASTRAL"
+ url = "https://github.com/smirarab/ASTRAL/archive/v4.10.7.tar.gz"
+
+ version('4.10.7', '38c81020570254e3f5c75d6c3c27fc6d')
+
+ depends_on('java', type=('build', 'run'))
+
+ phases = ['build', 'install']
+
+ def build(self, spec, prefix):
+ make = Executable('./make.sh')
+ make()
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install_tree('lib', prefix.tools.lib)
+ jar_file = 'astral.{v}.jar'.format(v=self.version)
+ install(jar_file, prefix.tools)
+
+ script_sh = join_path(os.path.dirname(__file__), "astral.sh")
+ script = prefix.bin.astral
+ install(script_sh, script)
+ set_executable(script)
+
+ java = self.spec['java'].prefix.bin.java
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('astral.jar', join_path(prefix.tools, jar_file),
+ script, **kwargs)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('ASTRAL_HOME', self.prefix.tools)
diff --git a/var/spack/repos/builtin/packages/astyle/package.py b/var/spack/repos/builtin/packages/astyle/package.py
index 16c59469fa..62e7204168 100644
--- a/var/spack/repos/builtin/packages/astyle/package.py
+++ b/var/spack/repos/builtin/packages/astyle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,18 +32,25 @@ class Astyle(MakefilePackage):
"""
homepage = "http://astyle.sourceforge.net/"
- url = "http://downloads.sourceforge.net/project/astyle/astyle/astyle%202.04/astyle_2.04_linux.tar.gz"
+ # homepage is dead use Gentoo Mirror
+ # url = "http://downloads.sourceforge.net/project/astyle/astyle/astyle%202.04/astyle_2.04_linux.tar.gz"
+ url = "http://distfiles.gentoo.org/distfiles/astyle_3.0.1_linux.tar.gz"
+ maintainers = ['davydden']
+
+ version('3.0.1', 'c301f09679efa2e1eb6e6b5fd33788b4')
+ version('2.06', 'ff588e7fcede824591cf5b9085df109d')
version('2.05.1', '4142d178047d7040da3e0e2f1b030a1a')
- version('2.04', '30b1193a758b0909d06e7ee8dd9627f6')
+ version('2.04', '30b1193a758b0909d06e7ee8dd9627f6')
parallel = False
+ @property
def build_directory(self):
return join_path(self.stage.source_path, 'build', self.compiler.name)
def edit(self, spec, prefix):
- makefile = join_path(self.build_directory(), 'Makefile')
+ makefile = join_path(self.build_directory, 'Makefile')
filter_file(r'^CXX\s*=.*', 'CXX=%s' % spack_cxx, makefile)
# strangely enough install -o $(USER) -g $(USER) stoped working on OSX
if sys.platform == 'darwin':
diff --git a/var/spack/repos/builtin/packages/atk/package.py b/var/spack/repos/builtin/packages/atk/package.py
index 0a7d48774d..93ce88bb8a 100644
--- a/var/spack/repos/builtin/packages/atk/package.py
+++ b/var/spack/repos/builtin/packages/atk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Atk(Package):
+class Atk(AutotoolsPackage):
"""ATK provides the set of accessibility interfaces that are
implemented by other toolkits and applications. Using the ATK
interfaces, accessibility tools have full access to view and
@@ -38,13 +38,15 @@ class Atk(Package):
depends_on('glib')
depends_on('pkg-config', type='build')
+ depends_on('gobject-introspection')
def url_for_version(self, version):
"""Handle atk's version-based custom URLs."""
url = 'http://ftp.gnome.org/pub/gnome/sources/atk'
return url + '/%s/atk-%s.tar.xz' % (version.up_to(2), version)
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
+ run_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/atlas/package.py b/var/spack/repos/builtin/packages/atlas/package.py
index 51f0fced2b..7f5652bad4 100644
--- a/var/spack/repos/builtin/packages/atlas/package.py
+++ b/var/spack/repos/builtin/packages/atlas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,10 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import os
+
from spack import *
-from spack.package_test import *
-from spack.util.executable import Executable
-import os.path
+from spack.package_test import compile_c_and_execute, compare_output_file
class Atlas(Package):
@@ -54,7 +54,13 @@ class Atlas(Package):
url='http://sourceforge.net/projects/math-atlas/files/Developer%20%28unstable%29/3.11.34/atlas3.11.34.tar.bz2')
variant('shared', default=True, description='Builds shared library')
- variant('pthread', default=False, description='Use multithreaded libraries')
+
+ variant(
+ 'threads', default='none',
+ description='Multithreading support',
+ values=('pthreads', 'none'),
+ multi=False
+ )
provides('blas')
provides('lapack')
@@ -110,14 +116,15 @@ class Atlas(Package):
make('shared_all')
make("install")
- self.install_test()
+ if self.run_tests:
+ self.install_test()
@property
- def blas_libs(self):
+ def libs(self):
# libsatlas.[so,dylib,dll ] contains all serial APIs (serial lapack,
# serial BLAS), and all ATLAS symbols needed to support them. Whereas
# libtatlas.[so,dylib,dll ] is parallel (multithreaded) version.
- is_threaded = '+pthread' in self.spec
+ is_threaded = self.spec.satisfies('threads=pthreads')
if '+shared' in self.spec:
to_find = ['libtatlas'] if is_threaded else ['libsatlas']
shared = True
@@ -135,10 +142,6 @@ class Atlas(Package):
to_find, root=self.prefix, shared=shared, recurse=True
)
- @property
- def lapack_libs(self):
- return self.blas_libs
-
def install_test(self):
source_file = join_path(os.path.dirname(self.module.__file__),
'test_cblas_dgemm.c')
@@ -146,7 +149,7 @@ class Atlas(Package):
'test_cblas_dgemm.output')
include_flags = ["-I%s" % self.spec.prefix.include]
- link_flags = self.lapack_libs.ld_flags.split()
+ link_flags = self.libs.ld_flags.split()
output = compile_c_and_execute(source_file, include_flags, link_flags)
compare_output_file(output, blessed_file)
diff --git a/var/spack/repos/builtin/packages/atompaw/package.py b/var/spack/repos/builtin/packages/atompaw/package.py
index 17d0ef8209..c86a5c5de5 100644
--- a/var/spack/repos/builtin/packages/atompaw/package.py
+++ b/var/spack/repos/builtin/packages/atompaw/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -49,7 +49,7 @@ class Atompaw(Package):
def install(self, spec, prefix):
options = ['--prefix=%s' % prefix]
- linalg = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ linalg = spec['lapack'].libs + spec['blas'].libs
options.extend([
"--with-linalg-libs=%s" % linalg.ld_flags,
"--enable-libxc",
diff --git a/var/spack/repos/builtin/packages/atop/package.py b/var/spack/repos/builtin/packages/atop/package.py
index e3a9d464a9..6c59ee4dbe 100644
--- a/var/spack/repos/builtin/packages/atop/package.py
+++ b/var/spack/repos/builtin/packages/atop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,6 +32,9 @@ class Atop(Package):
version('2.2-3', '034dc1544f2ec4e4d2c739d320dc326d')
+ depends_on('zlib')
+ depends_on('ncurses')
+
def install(self, spec, prefix):
make()
mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/augustus/package.py b/var/spack/repos/builtin/packages/augustus/package.py
new file mode 100644
index 0000000000..d79cde02c5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/augustus/package.py
@@ -0,0 +1,72 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Augustus(MakefilePackage):
+ """AUGUSTUS is a program that predicts genes in eukaryotic
+ genomic sequences"""
+
+ homepage = "http://bioinf.uni-greifswald.de/augustus/"
+ url = "http://bioinf.uni-greifswald.de/augustus/binaries/augustus-3.3.tar.gz"
+
+ version('3.3', '9ebe494df78ebf6a43091cfc8551050c')
+ version('3.2.3', 'b8c47ea8d0c45aa7bb9a82626c8ff830',
+ url='http://bioinf.uni-greifswald.de/augustus/binaries/old/augustus-3.2.3.tar.gz')
+
+ depends_on('bamtools')
+ depends_on('gsl')
+ depends_on('boost')
+ depends_on('zlib')
+
+ def edit(self, spec, prefix):
+ with working_dir(join_path('auxprogs', 'filterBam', 'src')):
+ makefile = FileFilter('Makefile')
+ makefile.filter('BAMTOOLS = .*', 'BAMTOOLS = %s' % self.spec[
+ 'bamtools'].prefix)
+ makefile.filter('INCLUDES = *',
+ 'INCLUDES = -I$(BAMTOOLS)/include/bamtools ')
+ makefile.filter('LIBS = -lbamtools -lz',
+ 'LIBS = $(BAMTOOLS)/lib/bamtools'
+ '/libbamtools.a -lz')
+ with working_dir(join_path('auxprogs', 'bam2hints')):
+ makefile = FileFilter('Makefile')
+ makefile.filter('# Variable definition',
+ 'BAMTOOLS = %s' % self.spec['bamtools'].prefix)
+ makefile.filter('INCLUDES = /usr/include/bamtools',
+ 'INCLUDES = $(BAMTOOLS)/include/bamtools')
+ makefile.filter('LIBS = -lbamtools -lz',
+ 'LIBS = $(BAMTOOLS)/lib/bamtools'
+ '/libbamtools.a -lz')
+
+ def install(self, spec, prefix):
+ install_tree('bin', join_path(self.spec.prefix, 'bin'))
+ install_tree('config', join_path(self.spec.prefix, 'config'))
+ install_tree('scripts', join_path(self.spec.prefix, 'scripts'))
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('AUGUSTUS_CONFIG_PATH', join_path(
+ self.prefix, 'config'))
+ run_env.prepend_path('PATH', join_path(self.prefix, 'scripts'))
diff --git a/var/spack/repos/builtin/packages/autoconf/package.py b/var/spack/repos/builtin/packages/autoconf/package.py
index d812350ae8..f178a6e264 100644
--- a/var/spack/repos/builtin/packages/autoconf/package.py
+++ b/var/spack/repos/builtin/packages/autoconf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,7 +36,32 @@ class Autoconf(AutotoolsPackage):
version('2.59', 'd4d45eaa1769d45e59dcb131a4af17a0')
version('2.13', '9de56d4a161a723228220b0f425dc711')
- depends_on('m4@1.4.6:', type='build')
+ # Note: m4 is not a pure build-time dependency of autoconf. m4 is
+ # needed when autoconf runs, not only when autoconf is built.
+ depends_on('m4@1.4.6:', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+
+ build_directory = 'spack-build'
+
+ def patch(self):
+ # The full perl shebang might be too long; we have to fix this here
+ # because autom4te is called during the build
+ filter_file('^#! @PERL@ -w',
+ '#! /usr/bin/env perl',
+ 'bin/autom4te.in')
+
+ @run_after('install')
+ def filter_sbang(self):
+ # We have to do this after install because otherwise the install
+ # target will try to rebuild the binaries (filter_file updates the
+ # timestamps)
+ perl = join_path(self.spec['perl'].prefix.bin, 'perl')
+
+ # Revert sbang, so Spack's sbang hook can fix it up
+ filter_file('^#! /usr/bin/env perl',
+ '#! {0} -w'.format(perl),
+ '{0}/autom4te'.format(self.prefix.bin),
+ backup=False)
def _make_executable(self, name):
return Executable(join_path(self.prefix.bin, name))
diff --git a/var/spack/repos/builtin/packages/autodock-vina/main.patch b/var/spack/repos/builtin/packages/autodock-vina/main.patch
new file mode 100644
index 0000000000..aafd780f64
--- /dev/null
+++ b/var/spack/repos/builtin/packages/autodock-vina/main.patch
@@ -0,0 +1,29 @@
+--- autodock_vina_1_1_2/src/main/main.cpp 2011-05-11 15:35:00.000000000 -0500
++++ autodock_vina_1_1_2/src/main/main.cpp 2017-09-11 10:06:44.939452217 -0500
+@@ -47,7 +47,7 @@
+ using boost::filesystem::path;
+
+ path make_path(const std::string& str) {
+- return path(str, boost::filesystem::native);
++ return path(str);
+ }
+
+ void doing(int verbosity, const std::string& str, tee& log) {
+@@ -661,7 +661,7 @@
+ cpu, seed, verbosity, max_modes_sz, energy_range, log);
+ }
+ catch(file_error& e) {
+- std::cerr << "\n\nError: could not open \"" << e.name.native_file_string() << "\" for " << (e.in ? "reading" : "writing") << ".\n";
++ std::cerr << "\n\nError: could not open \"" << e.name.filename() << "\" for " << (e.in ? "reading" : "writing") << ".\n";
+ return 1;
+ }
+ catch(boost::filesystem::filesystem_error& e) {
+@@ -673,7 +673,7 @@
+ return 1;
+ }
+ catch(parse_error& e) {
+- std::cerr << "\n\nParse error on line " << e.line << " in file \"" << e.file.native_file_string() << "\": " << e.reason << '\n';
++ std::cerr << "\n\nParse error on line " << e.line << " in file \"" << e.file.filename() << "\": " << e.reason << '\n';
+ return 1;
+ }
+ catch(std::bad_alloc&) {
diff --git a/var/spack/repos/builtin/packages/autodock-vina/package.py b/var/spack/repos/builtin/packages/autodock-vina/package.py
new file mode 100644
index 0000000000..255839e894
--- /dev/null
+++ b/var/spack/repos/builtin/packages/autodock-vina/package.py
@@ -0,0 +1,72 @@
+##############################################################################
+# 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/spack/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 *
+from shutil import copyfile
+from shutil import copymode
+import sys
+
+
+class AutodockVina(MakefilePackage):
+ """AutoDock Vina is an open-source program for doing molecular docking"""
+
+ homepage = "http://vina.scripps.edu/"
+ url = "http://vina.scripps.edu/download/autodock_vina_1_1_2.tgz"
+
+ version('1_1_2', 'b467b71ee77dd155b65b1c5364e4220f')
+
+ depends_on('boost@1.65.0')
+
+ # Replacing depecrated function call of boost with current function call
+ patch('main.patch')
+ patch('split.patch')
+
+ @property
+ def build_directory(self):
+ if sys.platform == "darwin":
+ return join_path('build', 'mac', 'release')
+ else:
+ return join_path('build', 'linux', 'release')
+
+ def edit(self, spec, prefix):
+ with working_dir(self.build_directory):
+ makefile = FileFilter('Makefile')
+ makefile.filter('BOOST_INCLUDE = .*', 'BOOST_INCLUDE = %s' %
+ self.spec['boost'].prefix.include)
+ makefile.filter('C_PLATFORM=.*', 'C_PLATFORM=-pthread')
+ makefile.filter('GPP=.*', 'GPP=%s' % spack_cc)
+ mcp = FileFilter('../../makefile_common')
+ mcp.filter('LIBS = ', 'LIBS = -l stdc++ -lm ')
+
+ def build(self, spec, prefix):
+ with working_dir(self.build_directory):
+ make()
+
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ mkdirp(prefix.bin)
+ copyfile("vina", join_path(prefix.bin, "vina"))
+ copymode("vina", join_path(prefix.bin, "vina"))
+ copyfile("vina_split", join_path(prefix.bin, "vina_split"))
+ copymode("vina_split", join_path(prefix.bin, "vina_split"))
diff --git a/var/spack/repos/builtin/packages/autodock-vina/split.patch b/var/spack/repos/builtin/packages/autodock-vina/split.patch
new file mode 100644
index 0000000000..e369d62216
--- /dev/null
+++ b/var/spack/repos/builtin/packages/autodock-vina/split.patch
@@ -0,0 +1,29 @@
+--- autodock_vina_1_1_2/src/split/split.cpp 2011-05-11 15:35:00.000000000 -0500
++++ autodock_vina_1_1_2/src/split/split.cpp 2017-09-11 10:06:44.933452243 -0500
+@@ -38,7 +38,7 @@
+ using boost::filesystem::path;
+
+ path make_path(const std::string& str) {
+- return path(str, boost::filesystem::native);
++ return path(str);
+ }
+
+ std::string default_prefix(const std::string& input_name, const std::string& add) {
+@@ -208,7 +208,7 @@
+ write_multimodel_pdbqt(tmp, ligand_prefix, flex_prefix);
+ }
+ catch(file_error& e) {
+- std::cerr << "\n\nError: could not open \"" << e.name.native_file_string() << "\" for " << (e.in ? "reading" : "writing") << ".\n";
++ std::cerr << "\n\nError: could not open \"" << e.name.filename() << "\" for " << (e.in ? "reading" : "writing") << ".\n";
+ return 1;
+ }
+ catch(boost::filesystem::filesystem_error& e) {
+@@ -220,7 +220,7 @@
+ return 1;
+ }
+ catch(parse_error& e) {
+- std::cerr << "\n\nParse error on line " << e.line << " in file \"" << e.file.native_file_string() << "\": " << e.reason << '\n';
++ std::cerr << "\n\nParse error on line " << e.line << " in file \"" << e.file.filename() << "\": " << e.reason << '\n';
+ return 1;
+ }
+ catch(std::bad_alloc&) {
diff --git a/var/spack/repos/builtin/packages/autogen/package.py b/var/spack/repos/builtin/packages/autogen/package.py
new file mode 100644
index 0000000000..4198ab1589
--- /dev/null
+++ b/var/spack/repos/builtin/packages/autogen/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 Autogen(AutotoolsPackage):
+ """AutoGen is a tool designed to simplify the creation and maintenance of
+ programs that contain large amounts of repetitious text. It is especially
+ valuable in programs that have several blocks of text that must be kept
+ synchronized."""
+
+ homepage = "https://www.gnu.org/software/autogen/index.html"
+ url = "https://ftp.gnu.org/gnu/autogen/rel5.18.12/autogen-5.18.12.tar.gz"
+ list_url = "https://ftp.gnu.org/gnu/autogen"
+ list_depth = 1
+
+ version('5.18.12', '551d15ccbf5b5fc5658da375d5003389')
+
+ variant('xml', default=True, description='Enable XML support')
+
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ depends_on('guile@1.8:2.0')
+ depends_on('libxml2', when='+xml')
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ # `make check` fails without this
+ # Adding a gettext dependency does not help
+ '--disable-nls',
+ ]
+
+ if '+xml' in spec:
+ args.append('--with-libxml2={0}'.format(spec['libxml2'].prefix))
+ else:
+ args.append('--without-libxml2')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/automaded/package.py b/var/spack/repos/builtin/packages/automaded/package.py
index 7e586b2991..7b227afb9d 100644
--- a/var/spack/repos/builtin/packages/automaded/package.py
+++ b/var/spack/repos/builtin/packages/automaded/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Automaded(Package):
+class Automaded(CMakePackage):
"""AutomaDeD (Automata-based Debugging for Dissimilar parallel
tasks) is a tool for automatic diagnosis of performance and
correctness problems in MPI applications. It creates
@@ -45,9 +45,7 @@ class Automaded(Package):
depends_on('mpi')
depends_on('boost')
depends_on('callpath')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8:', type='build')
- def install(self, spec, prefix):
- cmake("-DSTATE_TRACKER_WITH_CALLPATH=ON", *std_cmake_args)
- make()
- make("install")
+ def cmake_args(self):
+ return ['-DSTATE_TRACKER_WITH_CALLPATH=ON']
diff --git a/var/spack/repos/builtin/packages/automake/package.py b/var/spack/repos/builtin/packages/automake/package.py
index 6c0a47ff95..2140612b7f 100644
--- a/var/spack/repos/builtin/packages/automake/package.py
+++ b/var/spack/repos/builtin/packages/automake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,13 +29,24 @@ class Automake(AutotoolsPackage):
"""Automake -- make file builder part of autotools"""
homepage = 'http://www.gnu.org/software/automake/'
- url = 'http://ftp.gnu.org/gnu/automake/automake-1.14.tar.gz'
+ url = 'http://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz'
+ version('1.15.1', '95df3f2d6eb8f81e70b8cb63a93c8853')
version('1.15', '716946a105ca228ab545fc37a70df3a3')
version('1.14.1', 'd052a3e884631b9c7892f2efce542d75')
version('1.11.6', '0286dc30295b62985ca51919202ecfcc')
depends_on('autoconf', type='build')
+ depends_on('perl', type=('build', 'run'))
+
+ build_directory = 'spack-build'
+
+ def patch(self):
+ # The full perl shebang might be too long
+ for file in ('aclocal', 'automake'):
+ filter_file('^#!@PERL@ -w',
+ '#!/usr/bin/env perl',
+ 't/wrap/{0}.in'.format(file))
def _make_executable(self, name):
return Executable(join_path(self.prefix.bin, name))
diff --git a/var/spack/repos/builtin/packages/bamtools/package.py b/var/spack/repos/builtin/packages/bamtools/package.py
index 7bb1985003..a45cf38b80 100644
--- a/var/spack/repos/builtin/packages/bamtools/package.py
+++ b/var/spack/repos/builtin/packages/bamtools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,23 +23,25 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
-class Bamtools(Package):
+class Bamtools(CMakePackage):
"""C++ API & command-line toolkit for working with BAM data."""
homepage = "https://github.com/pezmaster31/bamtools"
url = "https://github.com/pezmaster31/bamtools/archive/v2.4.0.tar.gz"
+ version('2.4.1', '41cadf513f2744256851accac2bc7baa')
version('2.4.0', '6139d00c1b1fe88fe15d094d8a74d8b9')
version('2.3.0', 'd327df4ba037d6eb8beef65d7da75ebc')
version('2.2.3', '6eccd3e45e4ba12a68daa3298998e76d')
- depends_on('cmake', type='build')
+ depends_on('zlib', type='link')
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
-
- make()
- make('install')
+ def cmake_args(self):
+ args = []
+ rpath = self.rpath
+ rpath.append(os.path.join(self.prefix.lib, "bamtools"))
+ args.append("-DCMAKE_INSTALL_RPATH=%s" % ':'.join(rpath))
+ return args
diff --git a/var/spack/repos/builtin/packages/bamutil/libstatgen-issue-9.patch b/var/spack/repos/builtin/packages/bamutil/libstatgen-issue-9.patch
new file mode 100644
index 0000000000..23435f7c3c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bamutil/libstatgen-issue-9.patch
@@ -0,0 +1,11 @@
+--- a/libStatGen/general/PedigreeLoader.cpp 2017-05-29 11:08:07.627528417 -0700
++++ b/libStatGen/general/PedigreeLoader.cpp 2017-05-29 11:08:36.247547411 -0700
+@@ -636,7 +636,7 @@
+ return 2;
+ default :
+ {
+- bool result = atoi(code);
++ int result = atoi(code);
+
+ if (result != 0 && result != 1 && result != 2)
+ {
diff --git a/var/spack/repos/builtin/packages/bamutil/package.py b/var/spack/repos/builtin/packages/bamutil/package.py
new file mode 100644
index 0000000000..d739fe1f84
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bamutil/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Bamutil(MakefilePackage):
+ """bamUtil is a repository that contains several programs
+ that perform operations on SAM/BAM files. All of these programs
+ are built into a single executable, bam.
+ """
+
+ homepage = "http://genome.sph.umich.edu/wiki/BamUtil"
+ url = "http://genome.sph.umich.edu/w/images/7/70/BamUtilLibStatGen.1.0.13.tgz"
+
+ version('1.0.13', '08b7d0bb1d60be104a11f0e54ddf4a79')
+
+ # Looks like this will be fixed in 1.0.14.
+ # https://github.com/statgen/libStatGen/issues/9
+ patch('libstatgen-issue-9.patch', when='@1.0.13:')
+
+ parallel = False
+
+ @property
+ def install_targets(self):
+ return ['install', 'INSTALLDIR={0}'.format(self.prefix.bin)]
diff --git a/var/spack/repos/builtin/packages/bash-completion/package.py b/var/spack/repos/builtin/packages/bash-completion/package.py
index 666a1bef13..2e59e6247e 100644
--- a/var/spack/repos/builtin/packages/bash-completion/package.py
+++ b/var/spack/repos/builtin/packages/bash-completion/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,10 +25,10 @@
from spack import *
-class BashCompletion(Package):
+class BashCompletion(AutotoolsPackage):
"""Programmable completion functions for bash."""
homepage = "https://github.com/scop/bash-completion"
- url = "https://github.com/scop/bash-completion/archive/2.3.tar.gz"
+ url = "https://github.com/scop/bash-completion/archive/2.3.tar.gz"
version('2.3', '67e50f5f3c804350b43f2b664c33dde811d24292')
version('develop', git='https://github.com/scop/bash-completion.git')
@@ -41,16 +41,9 @@ class BashCompletion(Package):
# Other dependencies
depends_on('bash@4.1:', type='run')
- def install(self, spec, prefix):
- make_args = ['--prefix=%s' % prefix]
-
- autoreconf('-i')
- configure(*make_args)
- make()
- # make("check") # optional, requires dejagnu and tcllib
- make("install",
- parallel=False)
-
+ @run_after('install')
+ def show_message_to_user(self):
+ prefix = self.prefix
# Guidelines for individual user as provided by the author at
# https://github.com/scop/bash-completion
print('=====================================================')
@@ -59,6 +52,6 @@ class BashCompletion(Package):
print('')
print('# Use bash-completion, if available')
print('[[ $PS1 && -f %s/share/bash-completion/bash_completion ]] && \ ' % prefix) # NOQA: ignore=E501
- print(' . %s/share/bash-completion/bash_completion' % prefix)
+ print(' . %s/share/bash-completion/bash_completion' % prefix)
print('')
print('=====================================================')
diff --git a/var/spack/repos/builtin/packages/bash/package.py b/var/spack/repos/builtin/packages/bash/package.py
index e0cd114635..478edccd99 100644
--- a/var/spack/repos/builtin/packages/bash/package.py
+++ b/var/spack/repos/builtin/packages/bash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,21 +25,27 @@
from spack import *
-class Bash(Package):
+class Bash(AutotoolsPackage):
"""The GNU Project's Bourne Again SHell."""
homepage = "https://www.gnu.org/software/bash/"
- url = "ftp://ftp.gnu.org/gnu/bash/bash-4.3.tar.gz"
+ url = "https://ftp.gnu.org/gnu/bash/bash-4.4.tar.gz"
+ version('4.4', '148888a7c95ac23705559b6f477dfe25')
version('4.3', '81348932d5da294953e15d4814c74dd1')
- depends_on('readline')
+ depends_on('ncurses')
+ depends_on('readline@5.0:')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix,
- '--with-curses',
- '--with-installed-readline=%s' % spec['readline'].prefix)
+ def configure_args(self):
+ spec = self.spec
- make()
- make("tests")
- make("install")
+ return [
+ 'LIBS=-lncursesw',
+ '--with-curses',
+ '--enable-readline',
+ '--with-installed-readline={0}'.format(spec['readline'].prefix),
+ ]
+
+ def check(self):
+ make('tests')
diff --git a/var/spack/repos/builtin/packages/bats/package.py b/var/spack/repos/builtin/packages/bats/package.py
new file mode 100644
index 0000000000..4ee05c5a1c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bats/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 Bats(Package):
+ """Bats is a TAP-compliant testing framework for Bash."""
+
+ homepage = "https://github.com/sstephenson/bats"
+ url = "https://github.com/sstephenson/bats/archive/v0.4.0.tar.gz"
+
+ version('0.4.0', 'aeeddc0b36b8321930bf96fce6ec41ee')
+
+ def install(self, spec, prefix):
+ bash = which("bash")
+ bash('install.sh', prefix)
diff --git a/var/spack/repos/builtin/packages/bazel/package.py b/var/spack/repos/builtin/packages/bazel/package.py
index 94ac73cbd2..ff9817be97 100644
--- a/var/spack/repos/builtin/packages/bazel/package.py
+++ b/var/spack/repos/builtin/packages/bazel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,26 +32,36 @@ class Bazel(Package):
"""Bazel is Google's own build tool"""
homepage = "https://www.bazel.io"
- url = "https://github.com/bazelbuild/bazel/archive/0.3.1.tar.gz"
+ url = "https://github.com/bazelbuild/bazel/releases/download/0.5.0/bazel-0.5.0-dist.zip"
+ version('0.4.5', '2b737be42678900470ae9e48c975ac5b2296d9ae23c007bf118350dbe7c0552b')
+ version('0.4.4', '5e7c52b89071efc41277e2f0057d258f')
version('0.3.1', '5c959467484a7fc7dd2e5e4a1e8e866b')
version('0.3.0', '33a2cb457d28e1bee9282134769b9283')
version('0.2.3', '393a491d690e43caaba88005efe6da91')
version('0.2.2b', '75081804f073cbd194da1a07b16cba5f')
version('0.2.2', '644bc4ea7f429d835e74f255dc1054e6')
- depends_on('jdk@8:')
+ depends_on('java@8:')
+ depends_on('zip')
+
patch('fix_env_handling.patch')
patch('link.patch')
patch('cc_configure.patch')
+ def url_for_version(self, version):
+ if version >= Version('0.4.1'):
+ return 'https://github.com/bazelbuild/bazel/releases/download/{0}/bazel-{0}-dist.zip'.format(version)
+ else:
+ return 'https://github.com/bazelbuild/bazel/archive/{0}.tar.gz'.format(version)
+
def install(self, spec, prefix):
bash = which('bash')
bash('-c', './compile.sh')
mkdir(prefix.bin)
install('output/bazel', prefix.bin)
- def setup_dependent_package(self, module, dep_spec):
+ def setup_dependent_package(self, module, dependent_spec):
class BazelExecutable(Executable):
"""Special callable executable object for bazel so the user can
specify parallel or not on a per-invocation basis. Using
@@ -82,8 +92,8 @@ class Bazel(Package):
return super(BazelExecutable, self).__call__(*args, **kwargs)
jobs = cpu_count()
- if not dep_spec.package.parallel:
+ if not dependent_spec.package.parallel:
jobs = 1
- elif dep_spec.package.make_jobs:
- jobs = dep_spec.package.make_jobs
+ elif dependent_spec.package.make_jobs:
+ jobs = dependent_spec.package.make_jobs
module.bazel = BazelExecutable('bazel', 'build', jobs)
diff --git a/var/spack/repos/builtin/packages/bbcp/package.py b/var/spack/repos/builtin/packages/bbcp/package.py
index 5d5e64a390..f72b4fcb12 100644
--- a/var/spack/repos/builtin/packages/bbcp/package.py
+++ b/var/spack/repos/builtin/packages/bbcp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/bbmap/package.py b/var/spack/repos/builtin/packages/bbmap/package.py
new file mode 100644
index 0000000000..15d7d880c3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bbmap/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Bbmap(Package):
+ """Short read aligner for DNA and RNA-seq data."""
+
+ homepage = "http://sourceforge.net/projects/bbmap/"
+ url = "https://downloads.sourceforge.net/project/bbmap/BBMap_37.36.tar.gz"
+
+ version('37.36', '1e1086e1fae490a7d03c5a065b1c262f')
+
+ depends_on('java')
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/bcftools/package.py b/var/spack/repos/builtin/packages/bcftools/package.py
index a1b4a06dbb..b1cccc1f21 100644
--- a/var/spack/repos/builtin/packages/bcftools/package.py
+++ b/var/spack/repos/builtin/packages/bcftools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,9 +34,15 @@ class Bcftools(Package):
homepage = "http://samtools.github.io/bcftools/"
url = "https://github.com/samtools/bcftools/releases/download/1.3.1/bcftools-1.3.1.tar.bz2"
+ version('1.6', 'c4dba1e8cb55db0f94b4c47724b4f9fa')
+ version('1.4', '50ccf0a073bd70e99cdb3c8be830416e')
version('1.3.1', '575001e9fca37cab0c7a7287ad4b1cdb')
+ version('1.2', '8044bed8fce62f7072fc6835420f0906')
- depends_on('zlib')
+ depends_on('htslib@1.6', when='@1.6')
+ depends_on('htslib@1.4', when='@1.4')
+ depends_on('htslib@1.3.1', when='@1.3.1')
+ depends_on('htslib@1.2', when='@1.2')
def install(self, spec, prefix):
make("prefix=%s" % prefix, "all")
diff --git a/var/spack/repos/builtin/packages/bcl2fastq2/cmake-macros.patch b/var/spack/repos/builtin/packages/bcl2fastq2/cmake-macros.patch
new file mode 100644
index 0000000000..a799ef68e5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bcl2fastq2/cmake-macros.patch
@@ -0,0 +1,10 @@
+--- a/src/cmake/bcl2fastq_redist_macros.cmake 2017-05-11 15:03:27.652495488 -0700
++++ b/src/cmake/bcl2fastq_redist_macros.cmake 2017-05-11 15:06:38.326745889 -0700
+@@ -30,6 +30,7 @@
+ message(" Found: ${libname}, correct version ${version}")
+ message(" ${${libname}_UPPER}_INCLUDE_DIR = ${${${libname}_UPPER}_INCLUDE_DIR}")
+ message(" ${${libname}_UPPER}_LIBRARIES = ${${${libname}_UPPER}_LIBRARIES}")
++ set (HAVE_${${libname}_UPPER} true CACHE BOOL "package" FORCE)
+ else("${${${libname}_UPPER}_VERSION_STRING}" STREQUAL "${version}")
+ message(" Not found: ${libname}, incorrect version ( ${${${libname}_UPPER}_VERSION} )")
+ set(${${libname}_UPPER}_FOUND "FALSE")
diff --git a/var/spack/repos/builtin/packages/bcl2fastq2/cxxConfigure-cmake.patch b/var/spack/repos/builtin/packages/bcl2fastq2/cxxConfigure-cmake.patch
new file mode 100644
index 0000000000..4452bb31c1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bcl2fastq2/cxxConfigure-cmake.patch
@@ -0,0 +1,12 @@
+--- a/src/cmake/cxxConfigure.cmake 2017-05-11 16:55:14.745107845 -0700
++++ b/src/cmake/cxxConfigure.cmake 2017-05-11 17:16:39.355981745 -0700
+@@ -101,6 +101,9 @@
+ if((NOT HAVE_LIBXML2) OR (NOT HAVE_LIBXSLT))
+ find_package_version(LibXml2 ${BCL2FASTQ_LIBXML2_VERSION})
+ find_package_version(LibXslt ${BCL2FASTQ_LIBXSLT_VERSION})
++ # macro isn't ONLY for redist, see its definition...
++ string(REGEX REPLACE "/include$" "" LIBEXSLT_HINT ${LIBXSLT_INCLUDE_DIR})
++ find_library_redist(LIBEXSLT ${LIBEXSLT_HINT} libexslt/exslt.h exslt)
+ endif((NOT HAVE_LIBXML2) OR (NOT HAVE_LIBXSLT))
+
+ if((NOT HAVE_LIBXML2) OR (NOT HAVE_LIBXSLT))
diff --git a/var/spack/repos/builtin/packages/bcl2fastq2/package.py b/var/spack/repos/builtin/packages/bcl2fastq2/package.py
new file mode 100644
index 0000000000..173bb050ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bcl2fastq2/package.py
@@ -0,0 +1,110 @@
+##############################################################################
+# 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/spack/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 *
+import os
+import shutil
+import llnl.util.tty as tty
+
+
+# This application uses cmake to build, but they wrap it with a
+# configure script that performs dark magic. This package does it
+# their way.
+class Bcl2fastq2(Package):
+ """The bcl2fastq2 Conversion Software converts base
+ call (BCL) files from a sequencing run into FASTQ
+ files."""
+
+ homepage = "https://support.illumina.com/downloads/bcl2fastq-conversion-software-v2-18.html"
+
+ version('2.19.1.403', 'baba7a02767fd868e87cb36781d2be26')
+ version('2.18.0.12', 'fbe06492117f65609c41be0c27e3215c')
+ # 2.17.1.14 is no longer distributed. If you have a copy of the
+ # source tarball, you can drop it into a local mirror w/ the name
+ # mirror/bcl2fastq2/bcl2fastq2-2.17.1.14.zip and go from there.
+ version('2.17.1.14', '7426226c6db095862e636b95c38608d3')
+
+ depends_on('boost@1.54.0')
+ depends_on('cmake@2.8.9:')
+ depends_on('libxml2@2.7.8')
+ depends_on('libxslt@1.1.26~crypto')
+ depends_on('libgcrypt')
+ depends_on('zlib')
+
+ # Their cmake macros don't set the flag when they find a library
+ # that makes them happy.
+ patch('cmake-macros.patch')
+ # After finding the libxslt bits, cmake still needs to wire in the
+ # libexslt bits.
+ patch('cxxConfigure-cmake.patch')
+
+ root_cmakelists_dir = 'src'
+
+ # v2.17.1.14 and v2.18.0.12 were available via HTTP.
+ # v2.19.1.403 is only available via ftp.
+ # who knows what the future will hold.
+ def url_for_version(self, version):
+ if version.string == '2.19.1.403':
+ return "ftp://webdata2:webdata2@ussd-ftp.illumina.com/downloads/software/bcl2fastq/bcl2fastq2-v2.19.1-tar.zip"
+ else:
+ url = "https://support.illumina.com/content/dam/illumina-support/documents/downloads/software/bcl2fastq/bcl2fastq2-v{0}-tar.zip"
+ # - required to change the version from dots to dashes.
+ return url.format(version.dashed)
+
+ # Illumina tucks the source inside a gzipped tarball inside a zip
+ # file. We let the normal Spack expansion bit unzip the zip file,
+ # then follow it with a function untars the tarball after Spack's
+ # done it's bit.
+ def do_stage(self, mirror_only=False):
+ # wrap (decorate) the standard expand_archive step with a
+ # helper, then call the real do_stage().
+ self.stage.expand_archive = self.unpack_it(self.stage.expand_archive)
+ super(Bcl2fastq2, self).do_stage(mirror_only)
+
+ def unpack_it(self, f):
+ def wrap():
+ f() # call the original expand_archive()
+ with working_dir(self.stage.path):
+ if os.path.isdir('bcl2fastq'):
+ tty.msg("The tarball has already been unpacked")
+ else:
+ tty.msg("Unpacking bcl2fastq2 tarball")
+ tty.msg("cwd sez: {0}".format(os.getcwd()))
+ tarball = 'bcl2fastq2-v{0}.tar.gz'.format(
+ self.version.dotted)
+ shutil.move(join_path('spack-expanded-archive', tarball),
+ '.')
+ os.rmdir('spack-expanded-archive')
+ tar = which('tar')
+ tar('-xf', tarball)
+ tty.msg("Finished unpacking bcl2fastq2 tarball")
+ return wrap
+
+ def install(self, spec, prefix):
+ bash = which('bash')
+ bash("src/configure", "--prefix={0}".format(prefix),
+ "--with-cmake={0}".format(join_path(spec['cmake'].prefix.bin,
+ "cmake")))
+ make()
+ make("install")
diff --git a/var/spack/repos/builtin/packages/bdftopcf/package.py b/var/spack/repos/builtin/packages/bdftopcf/package.py
index 095f0c1bd4..a85bcf5307 100644
--- a/var/spack/repos/builtin/packages/bdftopcf/package.py
+++ b/var/spack/repos/builtin/packages/bdftopcf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Bdftopcf(Package):
+class Bdftopcf(AutotoolsPackage):
"""bdftopcf is a font compiler for the X server and font server. Fonts
in Portable Compiled Format can be read by any architecture, although
the file is structured to allow one particular architecture to read
@@ -41,10 +41,6 @@ class Bdftopcf(Package):
depends_on('libxfont')
depends_on('pkg-config@0.9.0:', type='build')
+ depends_on('xproto', type='build')
+ depends_on('fontsproto', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/bdw-gc/package.py b/var/spack/repos/builtin/packages/bdw-gc/package.py
index 5120266319..7971dae506 100644
--- a/var/spack/repos/builtin/packages/bdw-gc/package.py
+++ b/var/spack/repos/builtin/packages/bdw-gc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,14 @@
from spack import *
-class BdwGc(Package):
+class BdwGc(AutotoolsPackage):
"""The Boehm-Demers-Weiser conservative garbage collector is a garbage
collecting replacement for C malloc or C++ new."""
homepage = "http://www.hboehm.info/gc/"
- url = "http://www.hboehm.info/gc/gc_source/gc-7.4.4.tar.gz"
+ url = "http://www.hboehm.info/gc/gc_source/gc-7.6.0.tar.gz"
+ version('7.6.0', 'bf46ccbdaccfa3186c2ab87191c8855a')
version('7.4.4', '96d18b0448a841c88d56e4ab3d180297')
variant('libatomic-ops', default=True,
@@ -39,15 +40,12 @@ class BdwGc(Package):
depends_on('libatomic-ops', when='+libatomic-ops')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
+
config_args = [
- '--prefix={0}'.format(prefix),
'--with-libatomic-ops={0}'.format(
'yes' if '+libatomic-ops' in spec else 'no')
]
- configure(*config_args)
-
- make()
- make('check')
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/bear/package.py b/var/spack/repos/builtin/packages/bear/package.py
index f52050d7b9..f3f46b1025 100644
--- a/var/spack/repos/builtin/packages/bear/package.py
+++ b/var/spack/repos/builtin/packages/bear/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,14 @@
from spack import *
-class Bear(Package):
+class Bear(CMakePackage):
"""Bear is a tool that generates a compilation database for clang tooling
from non-cmake build systems."""
homepage = "https://github.com/rizsotto/Bear"
url = "https://github.com/rizsotto/Bear/archive/2.0.4.tar.gz"
+ version('2.2.0', '87250cc3a9a697e7d1e8972253a35259')
version('2.0.4', 'fd8afb5e8e18f8737ba06f90bd77d011')
- depends_on('cmake', type='build')
- depends_on("python")
-
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
-
- make("all")
- make("install")
+ depends_on('python')
+ depends_on('cmake@2.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/beast2/package.py b/var/spack/repos/builtin/packages/beast2/package.py
new file mode 100644
index 0000000000..88066116a2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/beast2/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Beast2(Package):
+ """BEAST is a cross-platform program for Bayesian inference using MCMC
+ of molecular sequences. It is entirely orientated towards rooted,
+ time-measured phylogenies inferred using strict or relaxed molecular
+ clock models. It can be used as a method of reconstructing phylogenies
+ but is also a framework for testing evolutionary hypotheses without
+ conditioning on a single tree topology."""
+
+ homepage = "http://beast2.org/"
+ url = "https://github.com/CompEvol/beast2/releases/download/v2.4.6/BEAST.v2.4.6.Linux.tgz"
+
+ version('2.4.6', 'b446f4ab121df9b991f7bb7ec94c8217')
+
+ depends_on('java')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('BEAST', self.prefix)
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('examples', join_path(self.prefix, 'examples'))
+ install_tree('images', join_path(self.prefix, 'images'))
+ install_tree('lib', prefix.lib)
+ install_tree('templates', join_path(self.prefix, 'templates'))
diff --git a/var/spack/repos/builtin/packages/bedtools2/package.py b/var/spack/repos/builtin/packages/bedtools2/package.py
index 46f3185154..5956491f1b 100644
--- a/var/spack/repos/builtin/packages/bedtools2/package.py
+++ b/var/spack/repos/builtin/packages/bedtools2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,6 +36,7 @@ class Bedtools2(Package):
version('2.26.0', '52227e7efa6627f0f95d7d734973233d')
version('2.25.0', '534fb4a7bf0d0c3f05be52a0160d8e3d')
+ version('2.23.0', '4fa3671b3a3891eefd969ad3509222e3')
depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/beforelight/package.py b/var/spack/repos/builtin/packages/beforelight/package.py
index 37a91f5614..457c547a16 100644
--- a/var/spack/repos/builtin/packages/beforelight/package.py
+++ b/var/spack/repos/builtin/packages/beforelight/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Beforelight(Package):
+class Beforelight(AutotoolsPackage):
"""The beforelight program is a sample implementation of a screen saver
for X servers supporting the MIT-SCREEN-SAVER extension. It is only
recommended for use as a code sample, as it does not include features
@@ -42,9 +42,3 @@ class Beforelight(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/gbenchmark/package.py b/var/spack/repos/builtin/packages/benchmark/package.py
index 1c54f60243..8c4dc6ec1f 100644
--- a/var/spack/repos/builtin/packages/gbenchmark/package.py
+++ b/var/spack/repos/builtin/packages/benchmark/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,25 @@
from spack import *
-class Gbenchmark(CMakePackage):
+class Benchmark(CMakePackage):
"""A microbenchmark support library"""
homepage = "https://github.com/google/benchmark"
- url = "https://github.com/google/benchmark/archive/v1.0.0.tar.gz"
+ url = "https://github.com/google/benchmark/archive/v1.1.0.tar.gz"
- version('1.1.0', '8c539bbe2a212618fa87b6c38fba087100b6e4ae')
- version('1.0.0', '4f778985dce02d2e63262e6f388a24b595254a93')
+ version('develop', branch='master',
+ git='https://github.com/google/benchmark.git')
- def build_type(self):
- return "Release"
+ # first properly installed CMake config packages in
+ # 1.2.0 release: https://github.com/google/benchmark/issues/363
+ version('1.2.0', '48d0b090cd7a84af2c4a28c8dc963c74')
+ version('1.1.0', '66b2a23076cf70739525be0092fc3ae3')
+ version('1.0.0', '1474ff826f8cd68067258db75a0835b8')
+
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo',
+ 'MinSizeRel', 'Coverage'))
def patch(self):
filter_file(
@@ -48,12 +56,3 @@ class Gbenchmark(CMakePackage):
r'##### add_cxx_compiler_flag(-Werror',
'CMakeLists.txt'
)
-
- def cmake_args(self, spec, prefix):
- if self.compiler.name == 'intel':
- return [
- "-DCMAKE_CXX_FLAGS=-no-ansi-alias -fno-strict-aliasing",
- "-DCMAKE_C_FLAGS=-no-ansi-alias -fno-strict-aliasing",
- "-DBENCHMARK_ENABLE_TESTING=OFF"
- ]
- return []
diff --git a/var/spack/repos/builtin/packages/berkeley-db/package.py b/var/spack/repos/builtin/packages/berkeley-db/package.py
new file mode 100644
index 0000000000..3962ef3472
--- /dev/null
+++ b/var/spack/repos/builtin/packages/berkeley-db/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 BerkeleyDb(AutotoolsPackage):
+ """Oracle Berkeley DB"""
+
+ homepage = "http://www.oracle.com/technetwork/database/database-technologies/berkeleydb/overview/index.html"
+ url = "http://download.oracle.com/berkeley-db/db-5.3.28.tar.gz"
+
+ version('5.3.28', 'b99454564d5b4479750567031d66fe24')
+ version('6.0.35', 'c65a4d3e930a116abaaf69edfc697f25')
+ version('6.1.29', '7f4d47302dfec698fe088e5285c9098e')
+ version('6.2.32', '33491b4756cb44b91c3318b727e71023')
+
+ configure_directory = 'dist'
+ build_directory = 'spack-build'
+
+ def url_for_version(self, version):
+ # newer version need oracle login, so get them from gentoo mirror
+ return 'http://distfiles.gentoo.org/distfiles/db-{0}.tar.gz'.format(version)
+
+ def configure_args(self):
+ return ['--disable-static', '--enable-cxx', '--enable-stl']
diff --git a/var/spack/repos/builtin/packages/bertini/package.py b/var/spack/repos/builtin/packages/bertini/package.py
index 7dd17a062e..dc3e746eae 100644
--- a/var/spack/repos/builtin/packages/bertini/package.py
+++ b/var/spack/repos/builtin/packages/bertini/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Bertini(Package):
+class Bertini(AutotoolsPackage):
"""Bertini is a general-purpose solver, written in C, that was created
for research about polynomial continuation. It solves for the numerical
solution of systems of polynomial equations using homotopy continuation."""
@@ -42,9 +42,3 @@ class Bertini(Package):
depends_on('gmp')
depends_on('mpfr')
depends_on('mpi', when='+mpi')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/bib2xhtml/package.py b/var/spack/repos/builtin/packages/bib2xhtml/package.py
index b356038180..3c9bab772e 100644
--- a/var/spack/repos/builtin/packages/bib2xhtml/package.py
+++ b/var/spack/repos/builtin/packages/bib2xhtml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,9 +33,6 @@ class Bib2xhtml(Package):
version('3.0-15-gf506', 'a26ba02fe0053bbbf2277bdf0acf8645')
- def url_for_version(self, v):
- return ('http://www.spinellis.gr/sw/textproc/bib2xhtml/bib2xhtml-v%s.tar.gz' % v)
-
def install(self, spec, prefix):
# Add the bst include files to the install directory
bst_include = join_path(prefix.share, 'bib2xhtml')
diff --git a/var/spack/repos/builtin/packages/bigreqsproto/package.py b/var/spack/repos/builtin/packages/bigreqsproto/package.py
index 61fd9c5121..e271e12777 100644
--- a/var/spack/repos/builtin/packages/bigreqsproto/package.py
+++ b/var/spack/repos/builtin/packages/bigreqsproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Bigreqsproto(Package):
+class Bigreqsproto(AutotoolsPackage):
"""Big Requests Extension.
This extension defines a protocol to enable the use of requests
@@ -38,8 +38,3 @@ class Bigreqsproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch b/var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch
deleted file mode 100644
index f48291a6c9..0000000000
--- a/var/spack/repos/builtin/packages/binutils/binutilskrell-2.24.patch
+++ /dev/null
@@ -1,52 +0,0 @@
---- binutils-2.24/libiberty/Makefile.in 2013-11-04 10:33:40.000000000 -0500
-+++ binutils-2.24-fixes/libiberty/Makefile.in 2014-10-17 16:22:31.413655000 -0400
-@@ -66,6 +66,7 @@
- MAKEOVERRIDES =
-
- TARGETLIB = ./libiberty.a
-+TARGETLIBPIC = ./libiberty_pic.a
- TESTLIB = ./testlib.a
-
- LIBOBJS = @LIBOBJS@
-@@ -355,27 +356,27 @@
- # since it will be passed the multilib flags.
- MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
- install_to_libdir: all
-- if test -n "${target_header_dir}"; then \
-- ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
-- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \
-- ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ); \
-- mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB); \
-- case "${target_header_dir}" in \
-- /*) thd=${target_header_dir};; \
-- *) thd=${includedir}/${target_header_dir};; \
-- esac; \
-- ${mkinstalldirs} $(DESTDIR)$${thd}; \
-- for h in ${INSTALLED_HEADERS}; do \
-- ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
-- done; \
-- fi
-+ ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
-+ $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \
-+ $(INSTALL_DATA) pic/$(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIBPIC)n; \
-+ ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ); \
-+ ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIBPIC)n ;$(RANLIB) $(TARGETLIBPIC)n ); \
-+ mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB); \
-+ mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIBPIC)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIBPIC); \
-+ ${mkinstalldirs} $(DESTDIR)$${includedir}; \
-+ for h in ${INSTALLED_HEADERS}; do \
-+ ${INSTALL_DATA} $$h $(DESTDIR)$${includedir}; \
-+ done;
- @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
- install_to_tooldir: all
- ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
-+ $(INSTALL_DATA) pic/$(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIBPIC)n
- ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
-+ ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIBPIC)n; $(RANLIB) $(TARGETLIBPIC)n )
- mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
-+ mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIBPIC)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIBPIC)
- @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
- # required-list was used when building a shared bfd/opcodes/libiberty
diff --git a/var/spack/repos/builtin/packages/binutils/package.py b/var/spack/repos/builtin/packages/binutils/package.py
index bf49ca9405..c3c521bad8 100644
--- a/var/spack/repos/builtin/packages/binutils/package.py
+++ b/var/spack/repos/builtin/packages/binutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,12 +25,13 @@
from spack import *
-class Binutils(Package):
+class Binutils(AutotoolsPackage):
"""GNU binutils, which contain the linker, assembler, objdump and others"""
homepage = "http://www.gnu.org/software/binutils/"
- url = "https://ftp.gnu.org/gnu/binutils/binutils-2.25.tar.bz2"
+ url = "https://ftp.gnu.org/gnu/binutils/binutils-2.28.tar.bz2"
+ version('2.28', '9e8340c96626b469a603c15c9d843727')
version('2.27', '2869c9bf3e60ee97c74ac2a6bf4e9d68')
version('2.26', '64146a0faa3b411ba774f47d41de239f')
version('2.25', 'd9f3303f802a5b6b0bb73a335ab89d66')
@@ -38,25 +39,26 @@ class Binutils(Package):
version('2.23.2', '4f8fa651e35ef262edc01d60fb45702e')
version('2.20.1', '2b9dc8f2b7dbd5ec5992c6e29de0b764')
- depends_on('m4', type='build')
- depends_on('flex', type='build')
- depends_on('bison', type='build')
-
- # Add a patch that creates binutils libiberty_pic.a which is preferred by
- # OpenSpeedShop and cbtf-krell
- variant('krellpatch', default=False,
- description="build with openspeedshop based patch.")
+ variant('plugins', default=False,
+ description="enable plugins, needed for gold linker")
variant('gold', default=True, description="build the gold linker")
- patch('binutilskrell-2.24.patch', when='@2.24+krellpatch')
+ variant('libiberty', default=False, description='Also install libiberty.')
patch('cr16.patch')
patch('update_symbol-2.26.patch', when='@2.26')
- variant('libiberty', default=False, description='Also install libiberty.')
+ depends_on('zlib')
+
+ depends_on('m4', type='build')
+ depends_on('flex', type='build')
+ depends_on('bison', type='build')
+ depends_on('gettext')
+
+ def configure_args(self):
+ spec = self.spec
- def install(self, spec, prefix):
configure_args = [
- '--prefix=%s' % prefix,
+ '--with-system-zlib',
'--disable-dependency-tracking',
'--disable-werror',
'--enable-interwork',
@@ -64,14 +66,16 @@ class Binutils(Package):
'--enable-shared',
'--enable-64-bit-bfd',
'--enable-targets=all',
- '--with-sysroot=/']
+ '--with-sysroot=/',
+ ]
if '+gold' in spec:
configure_args.append('--enable-gold')
+ if '+plugins' in spec:
+ configure_args.append('--enable-plugins')
+
if '+libiberty' in spec:
configure_args.append('--enable-install-libiberty')
- configure(*configure_args)
- make()
- make("install")
+ return configure_args
diff --git a/var/spack/repos/builtin/packages/bioawk/package.py b/var/spack/repos/builtin/packages/bioawk/package.py
new file mode 100644
index 0000000000..386aa16953
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bioawk/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 *
+from shutil import copyfile
+from shutil import copymode
+
+
+class Bioawk(MakefilePackage):
+ """Bioawk is an extension to Brian Kernighan's awk, adding the support of
+ several common biological data formats, including optionally gzip'ed
+ BED, GFF, SAM, VCF, FASTA/Q and TAB-delimited formats with column names.
+ """
+
+ homepage = "https://github.com/lh3/bioawk"
+ url = "https://github.com/lh3/bioawk/archive/v1.0.zip"
+
+ version('1.0', 'e423942689f944369de270900978be28')
+
+ depends_on('zlib')
+ depends_on('bison', type=('build'))
+
+ parallel = False
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ copyfile("bioawk", join_path(prefix.bin, "bioawk"))
+ copymode("bioawk", join_path(prefix.bin, "bioawk"))
+ copyfile("maketab", join_path(prefix.bin, "maketab"))
+ copymode("maketab", join_path(prefix.bin, "maketab"))
diff --git a/var/spack/repos/builtin/packages/bison/package.py b/var/spack/repos/builtin/packages/bison/package.py
index 70795f05cc..1cc2aacfaf 100644
--- a/var/spack/repos/builtin/packages/bison/package.py
+++ b/var/spack/repos/builtin/packages/bison/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,22 +23,26 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from spack.operating_systems.mac_os import macOS_version
+import sys
-class Bison(Package):
+class Bison(AutotoolsPackage):
"""Bison is a general-purpose parser generator that converts
an annotated context-free grammar into a deterministic LR or
generalized LR (GLR) parser employing LALR(1) parser tables."""
homepage = "http://www.gnu.org/software/bison/"
- url = "http://ftp.gnu.org/gnu/bison/bison-3.0.tar.gz"
+ url = "http://ftp.gnu.org/gnu/bison/bison-3.0.4.tar.gz"
version('3.0.4', 'a586e11cd4aff49c3ff6d3b6a4c9ccf8')
+ version('2.7', 'ded660799e76fb1667d594de1f7a0da9')
- depends_on("m4", type='build')
+ depends_on('m4', type=('build', 'run'))
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
+ patch('pgi.patch', when='@3.0.4')
- make()
- make("install")
+ if sys.platform == 'darwin' and macOS_version() >= Version('10.13'):
+ patch('secure_snprintf.patch', level=0, when='@3.0.4')
+
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/bison/pgi.patch b/var/spack/repos/builtin/packages/bison/pgi.patch
new file mode 100644
index 0000000000..8aeaa96a51
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bison/pgi.patch
@@ -0,0 +1,10 @@
+--- a/lib/config.in.h
++++ b/lib/config.in.h
+@@ -2182,6 +2182,7 @@
+ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+ : (199901L <= __STDC_VERSION__ \
+ && !defined __HP_cc \
++ && !defined __PGI \
+ && !(defined __SUNPRO_C && __STDC__))) \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+ # define _GL_INLINE inline
diff --git a/var/spack/repos/builtin/packages/bison/secure_snprintf.patch b/var/spack/repos/builtin/packages/bison/secure_snprintf.patch
new file mode 100644
index 0000000000..0dff749f2a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bison/secure_snprintf.patch
@@ -0,0 +1,15 @@
+With format string strictness, High Sierra also enforces that %n isn't used
+in dynamic format strings, but we should just disable its use on darwin in
+general.
+
+--- lib/vasnprintf.c.orig 2017-06-22 15:19:15.000000000 -0700
++++ lib/vasnprintf.c 2017-06-22 15:20:20.000000000 -0700
+@@ -4869,7 +4869,7 @@ VASNPRINTF (DCHAR_T *resultbuf, size_t *
+ #endif
+ *fbp = dp->conversion;
+ #if USE_SNPRINTF
+-# if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
++# if !defined(__APPLE__) && !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__))
+ fbp[1] = '%';
+ fbp[2] = 'n';
+ fbp[3] = '\0';
diff --git a/var/spack/repos/builtin/packages/bitmap/package.py b/var/spack/repos/builtin/packages/bitmap/package.py
index 55fdacefd5..2ea4613a53 100644
--- a/var/spack/repos/builtin/packages/bitmap/package.py
+++ b/var/spack/repos/builtin/packages/bitmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Bitmap(Package):
+class Bitmap(AutotoolsPackage):
"""bitmap, bmtoa, atobm - X bitmap (XBM) editor and converter utilities."""
homepage = "http://cgit.freedesktop.org/xorg/app/bitmap"
@@ -43,9 +43,3 @@ class Bitmap(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/blast-plus/blast-make-fix2.5.0.diff b/var/spack/repos/builtin/packages/blast-plus/blast-make-fix2.5.0.diff
new file mode 100644
index 0000000000..5611a0e83b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/blast-plus/blast-make-fix2.5.0.diff
@@ -0,0 +1,22 @@
+--- ncbi-blast-2.5.0+-src/c++/src/build-system/Makefile.in.top 2014-11-12 17:41:55.000000000 +0100
++++ MakeFile 2016-12-19 18:00:58.000000000 +0100
+@@ -1,4 +1,4 @@
+-# $Id: Makefile.in.top 451817 2014-11-12 16:41:55Z ucko $
++# $Id$
+ # Top-level meta-makefile that simplifies building even further.
+
+ # include @builddir@/Makefile.mk
+@@ -49,9 +49,10 @@
+ for x in *.a; do \
+ $(LN_S) "$$x" "`$(BASENAME) \"$$x\" .a`-static.a"; \
+ done
+- cd $(includedir0) && find * -name CVS -prune -o -print |\
+- cpio -pd $(pincludedir)
+- $(INSTALL) -m 644 $(incdir)/* $(pincludedir)
++ #for d in $(includedir0) $(incdir); do \
++ # cd $$d && find * -name .svn prune -o -print | \
++ # cpio -pd $(pincludedir) ; \
++ #done
+ ## set up appropriate build and status directories somewhere under $(libdir)?
+
+ install-gbench:
diff --git a/var/spack/repos/builtin/packages/blast-plus/package.py b/var/spack/repos/builtin/packages/blast-plus/package.py
new file mode 100644
index 0000000000..073eab24d1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/blast-plus/package.py
@@ -0,0 +1,221 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+#
+# This is a based largely on the Homebrew science formula:
+# https://github.com/Homebrew/homebrew-science/blob/master/blast.rb
+#
+# There s one tricky bit to be resolved:
+#
+# - HDF5 builds explode, blast's configure script tries to run a program that
+# uses a variable called 'HOST' but some other bit defines a macro called
+# HOST that's defined to a string. Hilarity ensues.
+#
+#
+from spack import *
+
+
+class BlastPlus(AutotoolsPackage):
+ """Basic Local Alignment Search Tool."""
+
+ homepage = "http://blast.ncbi.nlm.nih.gov/"
+ url = "https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/2.6.0/ncbi-blast-2.6.0+-src.tar.gz"
+
+ version('2.6.0', 'c8ce8055b10c4d774d995f88c7cc6225')
+ version('2.2.30', 'f8e9a5eb368173142fe6867208b73715')
+
+ # homebrew sez: Fixed upstream in future version > 2.6
+ # But this bug sez that it will be fixed in 2.6
+ # https://github.com/Homebrew/homebrew-science/pull/4740
+ # The 2.6.0 src still matches the "before" bit of the patch
+ # so it's probably still "needed".
+ # On the other hand, the `find` command is broken and there
+ # aren't any .svn dirs in the tree, so I've updated their patch
+ # to just comment out the block.
+ patch('blast-make-fix2.5.0.diff', when="@2.5.0:2.6.0")
+
+ # See https://github.com/Homebrew/homebrew-science/issues/2337#issuecomment-170011511
+ @when('@:2.2.31')
+ def patch(self):
+ filter_file("2.95* | 2.96* | 3.* | 4.* )",
+ "2.95* | 2.96* | 3.* | 4.* | 5.* )",
+ "c++/src/build-system/configure",
+ string=True)
+
+ # No...
+ # depends_on :mysql => :optional
+
+ variant('static', default=False,
+ description='Build with static linkage')
+ variant('jpeg', default=True,
+ description='Build with jpeg support')
+ variant('png', default=True,
+ description='Build with png support')
+ variant('freetype', default=True,
+ description='Build with freetype support')
+ # variant('hdf5', default=True,
+ # description='Build with hdf5 support')
+ variant('gnutls', default=True,
+ description='Build with gnutls support')
+ variant('openssl', default=True,
+ description='Build with openssl support')
+ variant('zlib', default=True,
+ description='Build with zlib support')
+ variant('bzip2', default=True,
+ description='Build with bzip2 support')
+ variant('lzo', default=True,
+ description='Build with lzo support')
+ variant('pcre', default=True,
+ description='Build with pcre support')
+ variant('perl', default=True,
+ description='Build with perl support')
+ variant('python', default=True,
+ description='Build with python support')
+
+ depends_on('jpeg', when='+jpeg')
+ depends_on('libpng', when='+png')
+ depends_on('freetype', when='+freetype')
+ # depends_on('hdf5', when='+hdf5')
+ depends_on('gnutls', when='+gnutls')
+ depends_on('openssl', when='+openssl')
+ depends_on('zlib', when='+zlib')
+ depends_on('bzip2', when='+bzip2')
+ depends_on('lzo', when='+lzo')
+ depends_on('pcre', when='+pcre')
+
+ depends_on('python', when='+python')
+ depends_on('perl', when='+perl')
+
+ configure_directory = 'c++'
+
+ def configure_args(self):
+ spec = self.spec
+
+ config_args = [
+ '--with-bin-release',
+ '--without-debug',
+ '--with-mt',
+ '--with-64',
+ '--without-boost',
+ ]
+
+ if '+static' in spec:
+ config_args.append('--with-static')
+ # FIXME
+ # args << "--with-static-exe" unless OS.linux?
+ # args << "--with-dll" if build.with? "dll"
+ else:
+ config_args.extend([
+ '--with-dll',
+ '--without-static',
+ '--without-static-exe'
+ ])
+
+ if '+jpeg' in spec:
+ config_args.append(
+ '--with-jpeg={0}'.format(self.spec['jpeg'].prefix)
+ )
+ else:
+ config_args.append('--without-jpeg')
+
+ if '+png' in spec:
+ config_args.append(
+ '--with-png={0}'.format(self.spec['libpng'].prefix)
+ )
+ else:
+ config_args.append('--without-png')
+
+ if '+freetype' in spec:
+ config_args.append(
+ '--with-freetype={0}'.format(self.spec['freetype'].prefix)
+ )
+ else:
+ config_args.append('--without-freetype')
+
+ config_args.append('--without-hdf5')
+ # if '+hdf5' in spec:
+ # # FIXME
+ # config_args.append(
+ # '--with-hdf5={0}'.format(self.spec['hdf5'].prefix)
+ # )
+ # else:
+ # config_args.append('--without-hdf5')
+
+ if '+zlib' in spec:
+ config_args.append(
+ '--with-z={0}'.format(self.spec['zlib'].prefix)
+ )
+ else:
+ config_args.append('--without-z')
+
+ if '+bzip2' in spec:
+ config_args.append(
+ '--with-bz2={0}'.format(self.spec['bzip2'].prefix)
+ )
+ else:
+ config_args.append('--without-bz2')
+
+ if '+lzo' in spec:
+ config_args.append(
+ '--with-lzo={0}'.format(self.spec['lzo'].prefix)
+ )
+ else:
+ config_args.append('--without-lzo')
+
+ if '+gnutls' in spec:
+ config_args.append(
+ '--with-gnutls={0}'.format(self.spec['gnutls'].prefix)
+ )
+ else:
+ config_args.append('--without-gnutls')
+
+ if '+openssl' in spec:
+ config_args.append(
+ '--with-openssl={0}'.format(self.spec['openssl'].prefix)
+ )
+ else:
+ config_args.append('--without-openssl')
+
+ if '+pcre' in spec:
+ config_args.append(
+ '--with-pcre={0}'.format(self.spec['pcre'].prefix)
+ )
+ else:
+ config_args.append('--without-pcre')
+
+ if '+python' in spec:
+ config_args.append(
+ '--with-python={0}'.format(self.spec['python'].home)
+ )
+ else:
+ config_args.append('--without-python')
+
+ if '+perl' in spec:
+ config_args.append(
+ '--with-perl={0}'.format(self.spec['perl'].prefix)
+ )
+ else:
+ config_args.append('--without-python')
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/blat/package.py b/var/spack/repos/builtin/packages/blat/package.py
new file mode 100644
index 0000000000..60a33bbdff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/blat/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Blat(Package):
+ """BLAT (BLAST-like alignment tool) is a pairwise sequence
+ alignment algorithm."""
+
+ homepage = "https://genome.ucsc.edu/FAQ/FAQblat.html"
+ url = "https://users.soe.ucsc.edu/~kent/src/blatSrc35.zip"
+
+ version('35', '16e546b8843b85e0b0f2fa603cd78724')
+
+ depends_on('libpng')
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('MACHTYPE', 'x86_64')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ make("BINDIR=%s" % prefix.bin)
diff --git a/var/spack/repos/builtin/packages/blaze/package.py b/var/spack/repos/builtin/packages/blaze/package.py
new file mode 100644
index 0000000000..2f175ff7d5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/blaze/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# 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/spack/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 Blaze(Package):
+ """Blaze is an open-source, high-performance C++ math library for dense and
+ sparse arithmetic. With its state-of-the-art Smart Expression Template
+ implementation Blaze combines the elegance and ease of use of a
+ domain-specific language with HPC-grade performance, making it one of the
+ most intuitive and fastest C++ math libraries available.
+ """
+
+ homepage = "https://bitbucket.org/blaze-lib/blaze/overview"
+ url = "https://bitbucket.org/blaze-lib/blaze/downloads/blaze-3.1.tar.gz"
+
+ version('3.2', '47bd4a4f1b6292f5a6f71ed9d5287480')
+ version('3.1', '2938e015f0d274e8d62ee5c4c0c1e9f3')
+ version('3.0', '0c4cefb0be7b5a27ed8a377941be1ab1')
+ version('2.6', 'f7b515eeffd5cce92eb02dc6f8905f4d')
+ version('2.5', '53a862763c275046ff0a8f07dfd3985b')
+ version('2.4', '7cf2e963a73d3c95ced0f7eaa0ae3677')
+ version('2.3', '2f8ca52d23447ac75a03bb43b12ef774')
+ version('2.2', '686a514108d7f3c6c7325ed57c171a59')
+ version('2.1', 'e5e419a2b35f0a36cd9d7527a250c56a')
+ version('2.0', 'aeb6a865e9e3810ee55456f961458a8e')
+ version('1.5', '5b77b605ee5ad35631bb3039737142c9')
+ version('1.4', '3f06d710161954ccae0975d87f1069ca')
+ version('1.3', 'ebd7f91fc5fca4108bfd16a86f9abd82')
+ version('1.2', 'b1511324456c3f70fce198a2b63e71ef')
+ version('1.1', '5e52ebe68217f2e50d66dfdb9803d51e')
+ version('1.0', 'a46508a2965ace9d89ded30a386d9548')
+
+ def install(self, spec, prefix):
+ install_tree('blaze', join_path(prefix.include, 'blaze'))
diff --git a/var/spack/repos/builtin/packages/bliss/package.py b/var/spack/repos/builtin/packages/bliss/package.py
index a81a806807..6604c2dc9a 100644
--- a/var/spack/repos/builtin/packages/bliss/package.py
+++ b/var/spack/repos/builtin/packages/bliss/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/blitz/package.py b/var/spack/repos/builtin/packages/blitz/package.py
index d6fd31d637..2cb9d8f5ab 100644
--- a/var/spack/repos/builtin/packages/blitz/package.py
+++ b/var/spack/repos/builtin/packages/blitz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/bml/package.py b/var/spack/repos/builtin/packages/bml/package.py
new file mode 100644
index 0000000000..ee4b805d1b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bml/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Bml(CMakePackage):
+ """The basic matrix library (bml) is a collection of various matrix data
+ formats (in dense and sparse) and their associated algorithms for basic
+ matrix operations."""
+
+ homepage = "http://lanl.github.io/bml/"
+ url = "https://github.com/lanl/bml/tarball/v1.2.2"
+
+ version('1.2.2', 'c86959cb0188e9d0a9a2cbad03b2782d')
+ version('1.1.0', '271adecee08aee678be9eeceee06b6fb')
+ version('develop', git='https://github.com/lanl/bml', branch='master')
+
+ variant('shared', default=True, description='Build shared libs')
+ variant('mpi', default=False, description='Build with MPI Support')
+
+ conflicts('+mpi', when='@:1.2.2')
+
+ depends_on("blas")
+ depends_on("lapack")
+ depends_on('mpi', when='+mpi')
+
+ def cmake_args(self):
+ args = [
+ '-DBUILD_SHARED_LIBS={0}'.format(
+ 'ON' if '+shared' in self.spec else 'OFF')
+ ]
+ spec = self.spec
+ if '+mpi' in spec:
+ args.append('-DBML_MPI=True')
+ args.append('-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc)
+ args.append('-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx)
+ args.append('-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc)
+ else:
+ args.append('-DBML_MPI=False')
+ return args
diff --git a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch
new file mode 100644
index 0000000000..925592e321
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi.patch
@@ -0,0 +1,290 @@
+diff -uNr boost_1_63_0/boost/mpl/assert.hpp boost_1_63_0/boost/mpl/assert.hpp
+--- boost_1_63_0/boost/mpl/assert.hpp 2016-12-22 07:33:17.000000000 -0500
++++ boost_1_63_0/boost/mpl/assert.hpp 2017-05-31 20:09:43.704689605 -0400
+@@ -56,7 +56,7 @@
+ // and GCC (which issues "unused variable" warnings when static constants are used
+ // at a function scope)
+ #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) \
+- || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0)
++ || (BOOST_MPL_CFG_GCC != 0) || (BOOST_MPL_CFG_GPU != 0) || defined(__PGI)
+ # define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) enum { expr }
+ #else
+ # define BOOST_MPL_AUX_ASSERT_CONSTANT(T, expr) BOOST_STATIC_CONSTANT(T, expr)
+diff -uNr boost_1_63_0/boost/type_traits/is_floating_point.hpp boost_1_63_0/boost/type_traits/is_floating_point.hpp
+--- boost_1_63_0/boost/type_traits/is_floating_point.hpp 2016-12-22 07:33:20.000000000 -0500
++++ boost_1_63_0/boost/type_traits/is_floating_point.hpp 2017-05-31 20:12:50.187001957 -0400
+@@ -20,8 +20,9 @@
+ template<> struct is_floating_point<float> : public true_type{};
+ template<> struct is_floating_point<double> : public true_type{};
+ template<> struct is_floating_point<long double> : public true_type{};
+-
+-#if defined(BOOST_HAS_FLOAT128)
++
++// In PGI compiler, __float128 is a typedef, not its own type.
++#if defined(BOOST_HAS_FLOAT128) && !defined(__PGI)
+ template<> struct is_floating_point<__float128> : public true_type{};
+ #endif
+
+diff -uNr boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp
+--- boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp 2016-12-22 07:33:20.000000000 -0500
++++ boost_1_63_0/boost/spirit/home/lex/lexer/lexertl/functor.hpp 2017-05-31 20:11:12.365788989 -0400
+@@ -98,11 +98,7 @@
+ };
+
+ public:
+- functor()
+-#if defined(__PGI)
+- : eof()
+-#endif
+- {}
++ functor() {}
+
+ #if BOOST_WORKAROUND(BOOST_MSVC, <= 1310)
+ // somehow VC7.1 needs this (meaningless) assignment operator
+diff -uNr boost_1_63_0/boost/cstdint.hpp boost_1_63_0/boost/cstdint.hpp
+--- boost_1_63_0/boost/cstdint.hpp 2016-12-22 07:33:14.000000000 -0500
++++ boost_1_63_0/boost/cstdint.hpp 2017-05-31 20:04:52.821068853 -0400
+@@ -367,9 +367,6 @@
+ #include <stddef.h>
+ #endif
+
+-// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
+-#if !defined(__PGIC__)
+-
+ #if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
+ || (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
+ || defined(__CYGWIN__) \
+@@ -393,8 +390,6 @@
+
+ #endif
+
+-#endif // !defined(__PGIC__)
+-
+ #endif // BOOST_CSTDINT_HPP
+
+
+diff -uNr boost_1_63_0/libs/filesystem/src/operations.cpp boost_1_63_0/libs/filesystem/src/operations.cpp
+--- boost_1_63_0/libs/filesystem/src/operations.cpp 2016-12-22 07:33:15.000000000 -0500
++++ boost_1_63_0/libs/filesystem/src/operations.cpp 2017-05-31 20:06:26.492231150 -0400
+@@ -2051,10 +2051,6 @@
+ return ok;
+ }
+
+-#if defined(__PGI) && defined(__USE_FILE_OFFSET64)
+-#define dirent dirent64
+-#endif
+-
+ error_code dir_itr_first(void *& handle, void *& buffer,
+ const char* dir, string& target,
+ fs::file_status &, fs::file_status &)
+diff -uNr boost_1_63_0/tools/build/src/engine/boehm_gc/configure boost_1_63_0/tools/build/src/engine/boehm_gc/configure
+--- boost_1_63_0/tools/build/src/engine/boehm_gc/configure 2016-12-22 07:33:21.000000000 -0500
++++ boost_1_63_0/tools/build/src/engine/boehm_gc/configure 2017-05-31 13:02:25.089265415 -0400
+@@ -9286,7 +9286,7 @@
+ lt_prog_compiler_pic='-KPIC'
+ lt_prog_compiler_static='-static'
+ ;;
+- pgcc* | pgf77* | pgf90* | pgf95*)
++ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl='-Wl,'
+@@ -9722,7 +9722,7 @@
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+- pgcc*) # Portland Group C compiler
++ pgcc* | pgc++*) # Portland Group C compiler
+ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+@@ -13421,7 +13421,7 @@
+ export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
+ whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+- pgCC*)
++ pgc++*)
+ # Portland Group C++ compiler
+ archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+@@ -14098,7 +14098,7 @@
+ lt_prog_compiler_pic_CXX='-KPIC'
+ lt_prog_compiler_static_CXX='-static'
+ ;;
+- pgCC*)
++ pgc++*)
+ # Portland Group C++ compiler.
+ lt_prog_compiler_wl_CXX='-Wl,'
+ lt_prog_compiler_pic_CXX='-fpic'
+@@ -15812,7 +15812,7 @@
+ lt_prog_compiler_pic_F77='-KPIC'
+ lt_prog_compiler_static_F77='-static'
+ ;;
+- pgcc* | pgf77* | pgf90* | pgf95*)
++ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_F77='-Wl,'
+@@ -16248,7 +16248,7 @@
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+- pgcc*) # Portland Group C compiler
++ pgcc* | pgc++*) # Portland Group C compiler
+ whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+@@ -18386,7 +18386,7 @@
+ lt_prog_compiler_pic_GCJ='-KPIC'
+ lt_prog_compiler_static_GCJ='-static'
+ ;;
+- pgcc* | pgf77* | pgf90* | pgf95*)
++ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ lt_prog_compiler_wl_GCJ='-Wl,'
+@@ -18822,7 +18822,7 @@
+ if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+ tmp_addflag=
+ case $cc_basename,$host_cpu in
+- pgcc*) # Portland Group C compiler
++ pgcc* | pgc++*) # Portland Group C compiler
+ whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
+ tmp_addflag=' $pic_flag'
+ ;;
+diff -uNr boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4
+--- boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 2016-12-22 07:33:21.000000000 -0500
++++ boost_1_63_0/tools/build/src/engine/boehm_gc/libtool.m4 2017-05-31 13:02:56.629643895 -0400
+@@ -3325,7 +3325,7 @@
+ _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
+ _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
+ ;;
+- pgCC*)
++ pgc++*)
+ # Portland Group C++ compiler
+ _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+@@ -4977,7 +4977,7 @@
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+- pgCC*)
++ pgc++*)
+ # Portland Group C++ compiler.
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
+@@ -5225,7 +5225,7 @@
+ _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
+ _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
+ ;;
+- pgcc* | pgf77* | pgf90* | pgf95*)
++ pgcc* | pgc++* | pgf77* | pgf90* | pgf95*)
+ # Portland Group compilers (*not* the Pentium gcc compiler,
+ # which looks to be a dead project)
+ _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
+diff -uNr boost_1_63_0/tools/build/src/tools/pgi.jam boost_1_63_0/tools/build/src/tools/pgi.jam
+--- boost_1_63_0/tools/build/src/tools/pgi.jam 2016-12-22 07:33:21.000000000 -0500
++++ boost_1_63_0/tools/build/src/tools/pgi.jam 2017-05-31 20:25:19.726296130 -0400
+@@ -25,7 +25,7 @@
+ {
+ local condition = [ common.check-init-parameters pgi : version $(version) ] ;
+
+- local l_command = [ common.get-invocation-command pgi : pgCC : $(command) ] ;
++ local l_command = [ common.get-invocation-command pgi : pgc++ : $(command) ] ;
+
+ common.handle-options pgi : $(condition) : $(l_command) : $(options) ;
+
+@@ -36,17 +36,10 @@
+ flags pgi.compile DEFINES $(condition) :
+ [ feature.get-values <define> : $(options) ] : unchecked ;
+
+- # IOV_MAX support
+- flags pgi.compile DEFINES $(condition) : __need_IOV_MAX : unchecked ;
+-
+ # set link flags
+ flags pgi.link FINDLIBS-ST : [
+ feature.get-values <find-static-library> : $(options) ] : unchecked ;
+
+- # always link lib rt to resolve clock_gettime()
+- flags pgi.link FINDLIBS-SA : rt [
+- feature.get-values <find-shared-library> : $(options) ] : unchecked ;
+-
+ gcc.init-link-flags pgi gnu $(condition) ;
+ }
+
+@@ -56,18 +49,19 @@
+ generators.register-fortran-compiler pgi.compile.fortran : FORTRAN : OBJ : <toolset>pgi ;
+
+ # Declare flags and actions for compilation
+-flags pgi.compile OPTIONS : -Kieee ;
+-flags pgi.compile OPTIONS <link>shared : -fpic -fPIC ;
++flags pgi.compile OPTIONS <link>shared : -fpic ;
+ flags pgi.compile OPTIONS <debug-symbols>on : -gopt ;
+-flags pgi.compile OPTIONS <profiling>on : -xprofile=tcov ;
+-flags pgi.compile OPTIONS <optimization>speed : -fast -Mx,8,0x10000000 ;
+-flags pgi.compile OPTIONS <optimization>space : -xO2 -xspace ;
+-# flags pgi.compile OPTIONS <threading>multi : -mt ;
++flags pgi.compile OPTIONS <optimization>off : -O0 ;
++flags pgi.compile OPTIONS <optimization>speed : -fast ;
++flags pgi.compile OPTIONS <optimization>space : -fast ;
+
+ flags pgi.compile OPTIONS <warnings>off : -Minform=severe ;
+ flags pgi.compile OPTIONS <warnings>on : -Minform=warn ;
++flags pgi.compile OPTIONS <warnings-as-errors>on : -Werror ;
+
+ flags pgi.compile.c++ OPTIONS <inlining>off : -INLINE:none ;
++flags pgi.compile.c++ OPTIONS <rtti>off : --no_rtti ;
++flags pgi.compile.c++ OPTIONS <exception-handling>off : --no_exceptions ;
+
+ flags pgi.compile OPTIONS <cflags> ;
+ flags pgi.compile.c++ OPTIONS <cxxflags> ;
+@@ -95,9 +89,8 @@
+ flags pgi.link OPTIONS <debug-symbols>on : -gopt ;
+ # Strip the binary when no debugging is needed
+ flags pgi.link OPTIONS <debug-symbols>off : -s ;
+-flags pgi.link OPTIONS <profiling>on : -xprofile=tcov ;
+ flags pgi.link OPTIONS <linkflags> ;
+-flags pgi.link OPTIONS <link>shared : -fpic -fPIC ;
++flags pgi.link OPTIONS <link>shared : -fpic ;
+ flags pgi.link LINKPATH <library-path> ;
+ flags pgi.link FINDLIBS-ST <find-static-library> ;
+ flags pgi.link FINDLIBS-SA <find-shared-library> ;
+@@ -107,24 +100,14 @@
+ flags pgi.link LINK-RUNTIME <runtime-link>shared : dynamic ;
+ flags pgi.link RPATH <dll-path> ;
+
+-# On gcc, there are separate options for dll path at runtime and
+-# link time. On Solaris, there's only one: -R, so we have to use
+-# it, even though it's bad idea.
+-flags pgi.link RPATH <xdll-path> ;
+-
+ rule link ( targets * : sources * : properties * )
+ {
+ SPACE on $(targets) = " " ;
+ }
+
+-# reddish can only link statically and, somehow, the presence of -Bdynamic on the link line
+-# marks the executable as a dynamically linked exec even though no dynamic libraries are supplied.
+-# Yod on redstorm refuses to load an executable that is dynamically linked.
+-# removing the dynamic link options should get us where we need to be on redstorm.
+-# "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME)
+ actions link bind LIBRARIES
+ {
+- "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -Bstatic -l$(FINDLIBS-ST) -Bdynamic -l$(FINDLIBS-SA) -B$(LINK-RUNTIME)
++ "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-ST) -l$(FINDLIBS-SA)
+ }
+
+ # Slight mods for dlls
+@@ -133,11 +116,10 @@
+ SPACE on $(targets) = " " ;
+ }
+
+-# "$(CONFIG_COMMAND)" $(OPTIONS) -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" -h$(<[1]:D=) -G "$(>)" "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME)
+
+ actions link.dll bind LIBRARIES
+ {
+- "$(CONFIG_COMMAND)" $(OPTIONS) -shared -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" -Wl,-h -Wl,$(<[1]:D=) "$(LIBRARIES)" -Bdynamic -l$(FINDLIBS-SA) -Bstatic -l$(FINDLIBS-ST) -B$(LINK-RUNTIME)
++ "$(CONFIG_COMMAND)" $(OPTIONS) -shared -L"$(LINKPATH)" -R"$(RPATH)" -o "$(<)" "$(>)" "$(LIBRARIES)" -l$(FINDLIBS-SA) -l$(FINDLIBS-ST)
+ }
+
+ actions updated together piecemeal pgi.archive
diff --git a/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch
new file mode 100644
index 0000000000..3bfb989f80
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boost/boost_1.63.0_pgi_17.4_workaround.patch
@@ -0,0 +1,250 @@
+diff -uNr boost_1_63_0/boost/archive/archive_exception.hpp boost_1_63_0/boost/archive/archive_exception.hpp
+--- boost_1_63_0/boost/archive/archive_exception.hpp 2016-12-22 07:33:19.000000000 -0500
++++ boost_1_63_0/boost/archive/archive_exception.hpp 2017-06-01 22:07:26.013983567 -0400
+@@ -42,13 +42,6 @@
+ class BOOST_SYMBOL_VISIBLE archive_exception :
+ public virtual std::exception
+ {
+-private:
+- char m_buffer[128];
+-protected:
+- BOOST_ARCHIVE_DECL unsigned int
+- append(unsigned int l, const char * a);
+- BOOST_ARCHIVE_DECL
+- archive_exception() BOOST_NOEXCEPT;
+ public:
+ typedef enum {
+ no_exception, // initialized without code
+@@ -90,6 +83,15 @@
+ BOOST_ARCHIVE_DECL archive_exception(archive_exception const &) BOOST_NOEXCEPT ;
+ virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
+ virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW ;
++protected:
++ BOOST_ARCHIVE_DECL unsigned int
++ append(unsigned int l, const char * a);
++ BOOST_ARCHIVE_DECL
++ archive_exception() BOOST_NOEXCEPT;
++private:
++ char m_buffer[128];
++ BOOST_ARCHIVE_DECL void
++ pgi_bug_workaround_init(archive_exception *, const char *, const char *);
+ };
+
+ }// namespace archive
+diff -uNr boost_1_63_0/boost/archive/xml_archive_exception.hpp boost_1_63_0/boost/archive/xml_archive_exception.hpp
+--- boost_1_63_0/boost/archive/xml_archive_exception.hpp 2016-12-22 07:33:19.000000000 -0500
++++ boost_1_63_0/boost/archive/xml_archive_exception.hpp 2017-05-31 21:02:03.373700156 -0400
+@@ -47,6 +47,9 @@
+ );
+ BOOST_ARCHIVE_DECL xml_archive_exception(xml_archive_exception const &) ;
+ virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ;
++private:
++ BOOST_ARCHIVE_DECL void
++ pgi_bug_workaround_init_xml(xml_archive_exception *, exception_code, const char *, const char *);
+ };
+
+ }// namespace archive
+diff -uNr boost_1_63_0/libs/serialization/src/archive_exception.cpp boost_1_63_0/libs/serialization/src/archive_exception.cpp
+--- boost_1_63_0/libs/serialization/src/archive_exception.cpp 2016-12-22 07:33:19.000000000 -0500
++++ boost_1_63_0/libs/serialization/src/archive_exception.cpp 2017-06-01 22:06:14.193128909 -0400
+@@ -37,83 +37,90 @@
+ }
+
+ BOOST_ARCHIVE_DECL
+-archive_exception::archive_exception(
+- exception_code c,
+- const char * e1,
+- const char * e2
+-) BOOST_NOEXCEPT :
+- code(c)
++void
++archive_exception::pgi_bug_workaround_init(archive_exception *new_object, const char *e1, const char *e2)
+ {
+ unsigned int length = 0;
+- switch(code){
++ switch(new_object->code){
+ case no_exception:
+- length = append(length, "uninitialized exception");
++ length = new_object->append(length, "uninitialized exception");
+ break;
+- case unregistered_class:
+- length = append(length, "unregistered class");
++ case archive_exception::unregistered_class:
++ length = new_object->append(length, "unregistered class");
+ if(NULL != e1){
+- length = append(length, " - ");
+- length = append(length, e1);
++ length = new_object->append(length, " - ");
++ length = new_object->append(length, e1);
+ }
+ break;
+ case invalid_signature:
+- length = append(length, "invalid signature");
++ length = new_object->append(length, "invalid signature");
+ break;
+ case unsupported_version:
+- length = append(length, "unsupported version");
++ length = new_object->append(length, "unsupported version");
+ break;
+ case pointer_conflict:
+- length = append(length, "pointer conflict");
++ length = new_object->append(length, "pointer conflict");
+ break;
+ case incompatible_native_format:
+- length = append(length, "incompatible native format");
++ length = new_object->append(length, "incompatible native format");
+ if(NULL != e1){
+- length = append(length, " - ");
+- length = append(length, e1);
++ length = new_object->append(length, " - ");
++ length = new_object->append(length, e1);
+ }
+ break;
+ case array_size_too_short:
+- length = append(length, "array size too short");
++ length = new_object->append(length, "array size too short");
+ break;
+ case input_stream_error:
+- length = append(length, "input stream error");
++ length = new_object->append(length, "input stream error");
+ break;
+ case invalid_class_name:
+- length = append(length, "class name too long");
++ length = new_object->append(length, "class name too long");
+ break;
+ case unregistered_cast:
+- length = append(length, "unregistered void cast ");
+- length = append(length, (NULL != e1) ? e1 : "?");
+- length = append(length, "<-");
+- length = append(length, (NULL != e2) ? e2 : "?");
++ length = new_object->append(length, "unregistered void cast ");
++ length = new_object->append(length, (NULL != e1) ? e1 : "?");
++ length = new_object->append(length, "<-");
++ length = new_object->append(length, (NULL != e2) ? e2 : "?");
+ break;
+ case unsupported_class_version:
+- length = append(length, "class version ");
+- length = append(length, (NULL != e1) ? e1 : "<unknown class>");
++ length = new_object->append(length, "class version ");
++ length = new_object->append(length, (NULL != e1) ? e1 : "<unknown class>");
+ break;
+ case other_exception:
+ // if get here - it indicates a derived exception
+ // was sliced by passing by value in catch
+- length = append(length, "unknown derived exception");
++ length = new_object->append(length, "unknown derived exception");
+ break;
+ case multiple_code_instantiation:
+- length = append(length, "code instantiated in more than one module");
++ length = new_object->append(length, "code instantiated in more than one module");
+ if(NULL != e1){
+- length = append(length, " - ");
+- length = append(length, e1);
++ length = new_object->append(length, " - ");
++ length = new_object->append(length, e1);
+ }
+ break;
+ case output_stream_error:
+- length = append(length, "output stream error");
++ length = new_object->append(length, "output stream error");
+ break;
+ default:
+ BOOST_ASSERT(false);
+- length = append(length, "programming error");
++ length = new_object->append(length, "programming error");
+ break;
+ }
+ }
+
+ BOOST_ARCHIVE_DECL
++archive_exception::archive_exception(
++ exception_code c,
++ const char * e1,
++ const char * e2
++) BOOST_NOEXCEPT :
++ code(c)
++{
++ pgi_bug_workaround_init(this, e1, e2);
++}
++
++BOOST_ARCHIVE_DECL
+ archive_exception::archive_exception(archive_exception const & oth) BOOST_NOEXCEPT :
+ std::exception(oth),
+ code(oth.code)
+diff -uNr boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp
+--- boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp 2016-12-22 07:33:19.000000000 -0500
++++ boost_1_63_0/libs/serialization/src/xml_archive_exception.cpp 2017-05-31 20:58:15.650876427 -0400
+@@ -26,41 +26,48 @@
+ namespace archive {
+
+ BOOST_ARCHIVE_DECL
++void
++xml_archive_exception::pgi_bug_workaround_init_xml(xml_archive_exception *new_object, exception_code c, const char *e1, const char *e2)
++{
++ switch(c){
++ case xml_archive_parsing_error:
++ new_object->append(0, "unrecognized XML syntax");
++ break;
++ case xml_archive_tag_mismatch:{
++ unsigned int l;
++ l = new_object->append(0, "XML start/end tag mismatch");
++ if(NULL != e1){
++ l = new_object->append(l, " - ");
++ new_object->append(l, e1);
++ }
++ break;
++ }
++ case xml_archive_tag_name_error:
++ new_object->append(0, "Invalid XML tag name");
++ break;
++ default:
++ BOOST_ASSERT(false);
++ new_object->append(0, "programming error");
++ break;
++ }
++}
++
++BOOST_ARCHIVE_DECL
+ xml_archive_exception::xml_archive_exception(
+ exception_code c,
+ const char * e1,
+ const char * e2
+ ) :
+ archive_exception(other_exception, e1, e2)
+- {
+- switch(c){
+- case xml_archive_parsing_error:
+- archive_exception::append(0, "unrecognized XML syntax");
+- break;
+- case xml_archive_tag_mismatch:{
+- unsigned int l;
+- l = archive_exception::append(0, "XML start/end tag mismatch");
+- if(NULL != e1){
+- l = archive_exception::append(l, " - ");
+- archive_exception::append(l, e1);
+- }
+- break;
+- }
+- case xml_archive_tag_name_error:
+- archive_exception::append(0, "Invalid XML tag name");
+- break;
+- default:
+- BOOST_ASSERT(false);
+- archive_exception::append(0, "programming error");
+- break;
+- }
+- }
++{
++ pgi_bug_workaround_init_xml(this, c, e1, e2);
++}
+
+ BOOST_ARCHIVE_DECL
+ xml_archive_exception::xml_archive_exception(xml_archive_exception const & oth) :
+ archive_exception(oth)
+- {
+- }
++{
++}
+
+ BOOST_ARCHIVE_DECL xml_archive_exception::~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW {}
+
diff --git a/var/spack/repos/builtin/packages/boost/boost_10125.patch b/var/spack/repos/builtin/packages/boost/call_once_variadic.patch
index 71cfaa871e..f143644a70 100644
--- a/var/spack/repos/builtin/packages/boost/boost_10125.patch
+++ b/var/spack/repos/builtin/packages/boost/call_once_variadic.patch
@@ -1,3 +1,5 @@
+diff --git a/boost/thread/pthread/once.hpp b/boost/thread/pthread/once.hpp
+index ccfb051..0bef038 100644
--- a/boost/thread/pthread/once.hpp
+++ b/boost/thread/pthread/once.hpp
@@ -42,7 +42,7 @@ namespace boost
@@ -27,6 +29,8 @@
template<typename Function, class ...ArgTypes>
+diff --git a/boost/thread/pthread/once_atomic.hpp b/boost/thread/pthread/once_atomic.hpp
+index 9e2f876..923f07b 100644
--- a/boost/thread/pthread/once_atomic.hpp
+++ b/boost/thread/pthread/once_atomic.hpp
@@ -115,7 +115,7 @@ namespace boost
@@ -38,6 +42,8 @@
template<typename Function, class ...ArgTypes>
inline void call_once(once_flag& flag, BOOST_THREAD_RV_REF(Function) f, BOOST_THREAD_RV_REF(ArgTypes)... args)
+diff --git a/boost/thread/win32/once.hpp b/boost/thread/win32/once.hpp
+index cafcfd4..9b37b31 100644
--- a/boost/thread/win32/once.hpp
+++ b/boost/thread/win32/once.hpp
@@ -227,7 +227,7 @@ namespace boost
diff --git a/var/spack/repos/builtin/packages/boost/package.py b/var/spack/repos/builtin/packages/boost/package.py
index 738e8a0e35..6134456188 100644
--- a/var/spack/repos/builtin/packages/boost/package.py
+++ b/var/spack/repos/builtin/packages/boost/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,6 @@
from spack import *
import sys
import os
-from glob import glob
class Boost(Package):
@@ -40,8 +39,22 @@ class Boost(Package):
homepage = "http://www.boost.org"
url = "http://downloads.sourceforge.net/project/boost/boost/1.55.0/boost_1_55_0.tar.bz2"
list_url = "http://sourceforge.net/projects/boost/files/boost/"
- list_depth = 2
-
+ list_depth = 1
+
+ version('develop',
+ git='https://github.com/boostorg/boost.git',
+ branch='develop',
+ submodules=True)
+
+ version('1.65.1', '41d7542ce40e171f3f7982aff008ff0d',
+ url='https://dl.bintray.com/boostorg/release/1.65.1/source/boost_1_65_1.tar.bz2')
+ version('1.65.0', '5512d3809801b0a1b9dd58447b70915d',
+ url='https://dl.bintray.com/boostorg/release/1.65.0/source/boost_1_65_0.tar.bz2')
+ # NOTE: 1.64.0 seems fine for *most* applications, but if you need
+ # +python and +mpi, there seem to be errors with out-of-date
+ # API calls from mpi/python.
+ # See: https://github.com/spack/spack/issues/3963
+ version('1.64.0', '93eecce2abed9d2442c9676914709349')
version('1.63.0', '1c837ecd990bb022d07e7aab32b09847')
version('1.62.0', '5fb94629535c19e48703bdb2b2e9490f')
version('1.61.0', '6095876341956f65f9d35939ccea1a9f')
@@ -120,6 +133,10 @@ class Boost(Package):
description="Build the Boost Graph library")
variant('taggedlayout', default=False,
description="Augment library names with build options")
+ variant('versionedlayout', default=False,
+ description="Augment library layout with versioned subdirs")
+ variant('clanglibcpp', default=False,
+ description='Compile with clang libc++ instead of libstdc++')
depends_on('icu4c', when='+icu')
depends_on('python', when='+python')
@@ -127,21 +144,29 @@ class Boost(Package):
depends_on('bzip2', when='+iostreams')
depends_on('zlib', when='+iostreams')
+ conflicts('+taggedlayout', when='+versionedlayout')
+
# Patch fix from https://svn.boost.org/trac/boost/ticket/11856
patch('boost_11856.patch', when='@1.60.0%gcc@4.4.7')
+ # Patch fix from https://svn.boost.org/trac/boost/ticket/11120
+ patch('python_jam.patch', when='@1.56.0: ^python@3:')
+ patch('python_jam_pre156.patch', when='@:1.55.0 ^python@3:')
+
+ # Patch fix for IBM XL compiler
+ patch('xl_1_62_0_le.patch', when='@1.62.0%xl_r')
+ patch('xl_1_62_0_le.patch', when='@1.62.0%xl')
+
# Patch fix from https://svn.boost.org/trac/boost/ticket/10125
- patch('boost_10125.patch', when='@1.55.0%gcc@5.0:5.9')
+ patch('call_once_variadic.patch', when='@1.55.0:1.55.9999%gcc@5.0:5.9')
+
+ # Patch fix for PGI compiler
+ patch('boost_1.63.0_pgi.patch', when='@1.63.0%pgi')
+ patch('boost_1.63.0_pgi_17.4_workaround.patch', when='@1.63.0%pgi@17.4')
def url_for_version(self, version):
- """
- Handle Boost's weird URLs,
- which write the version two different ways.
- """
- parts = [str(p) for p in Version(version)]
- dots = ".".join(parts)
- underscores = "_".join(parts)
- return "http://downloads.sourceforge.net/project/boost/boost/%s/boost_%s.tar.bz2" % (dots, underscores)
+ url = "http://downloads.sourceforge.net/project/boost/boost/{0}/boost_{1}.tar.bz2"
+ return url.format(version.dotted, version.underscored)
def determine_toolset(self, spec):
if spec.satisfies("platform=darwin"):
@@ -149,11 +174,14 @@ class Boost(Package):
toolsets = {'g++': 'gcc',
'icpc': 'intel',
- 'clang++': 'clang'}
+ 'clang++': 'clang',
+ 'xlc++': 'xlcpp',
+ 'xlc++_r': 'xlcpp',
+ 'pgc++': 'pgi'}
if spec.satisfies('@1.47:'):
toolsets['icpc'] += '-linux'
- for cc, toolset in toolsets.iteritems():
+ for cc, toolset in toolsets.items():
if cc in self.compiler.cxx_names:
return toolset
@@ -161,23 +189,11 @@ class Boost(Package):
return 'gcc'
def bjam_python_line(self, spec):
- from os.path import dirname, splitext
- pydir = 'python%s.%s*' % spec['python'].version.version[:2]
- incs = join_path(spec['python'].prefix.include, pydir, "pyconfig.h")
- incs = glob(incs)
- incs = " ".join([dirname(u) for u in incs])
-
- pylib = 'libpython%s.%s*' % spec['python'].version.version[:2]
- all_libs = join_path(spec['python'].prefix.lib, pylib)
- libs = [u for u in all_libs if splitext(u)[1] == dso_suffix]
- if len(libs) == 0:
- libs = [u for u in all_libs if splitext(u)[1] == '.a']
-
- libs = " ".join(libs)
- return 'using python : %s : %s : %s : %s ;\n' % (
+ return 'using python : {0} : {1} : {2} : {3} ;\n'.format(
spec['python'].version.up_to(2),
- join_path(spec['python'].prefix.bin, 'python'),
- incs, libs
+ spec['python'].command.path,
+ spec['python'].headers.directories[0],
+ spec['python'].libs[0]
)
def determine_bootstrap_options(self, spec, withLibs, options):
@@ -186,8 +202,7 @@ class Boost(Package):
options.append("--with-libraries=%s" % ','.join(withLibs))
if '+python' in spec:
- options.append('--with-python=%s' %
- join_path(spec['python'].prefix.bin, 'python'))
+ options.append('--with-python=%s' % spec['python'].command.path)
with open('user-config.jam', 'w') as f:
# Boost may end up using gcc even though clang+gfortran is set in
@@ -202,8 +217,21 @@ class Boost(Package):
spack_cxx))
if '+mpi' in spec:
- f.write('using mpi : %s ;\n' %
- join_path(spec['mpi'].prefix.bin, 'mpicxx'))
+
+ # Use the correct mpi compiler. If the compiler options are
+ # empty or undefined, Boost will attempt to figure out the
+ # correct options by running "${mpicxx} -show" or something
+ # similar, but that doesn't work with the Cray compiler
+ # wrappers. Since Boost doesn't use the MPI C++ bindings,
+ # that can be used as a compiler option instead.
+
+ mpi_line = 'using mpi : %s' % spec['mpi'].mpicxx
+
+ if 'platform=cray' in spec:
+ mpi_line += ' : <define>MPICH_SKIP_MPICXX'
+
+ f.write(mpi_line + ' ;\n')
+
if '+python' in spec:
f.write(self.bjam_python_line(spec))
@@ -238,6 +266,8 @@ class Boost(Package):
if '+taggedlayout' in spec:
layout = 'tagged'
+ elif '+versionedlayout' in spec:
+ layout = 'versioned'
else:
if len(threadingOpts) > 1:
raise RuntimeError("Cannot build both single and " +
@@ -260,6 +290,10 @@ class Boost(Package):
# https://svn.boost.org/trac/boost/ticket/12496
if spec.satisfies('%clang'):
options.extend(['pch=off'])
+ if '+clanglibcpp' in spec:
+ options.extend(['toolset=clang',
+ 'cxxflags="-stdlib=libc++"',
+ 'linkflags="-stdlib=libc++"'])
return threadingOpts
@@ -306,7 +340,6 @@ class Boost(Package):
if not spec.satisfies('@1.43.0:'):
withLibs.remove('random')
if '+graph' in spec and '+mpi' in spec:
- withLibs.remove('graph')
withLibs.append('graph_parallel')
# to make Boost find the user-config.jam
@@ -323,7 +356,11 @@ class Boost(Package):
b2name = './b2' if spec.satisfies('@1.47:') else './bjam'
b2 = Executable(b2name)
- b2_options = ['-j', '%s' % make_jobs]
+ jobs = make_jobs
+ # in 1.59 max jobs became dynamic
+ if jobs > 64 and spec.satisfies('@:1.58'):
+ jobs = 64
+ b2_options = ['-j', '%s' % jobs]
threadingOpts = self.determine_b2_options(spec, b2_options)
diff --git a/var/spack/repos/builtin/packages/boost/python_jam.patch b/var/spack/repos/builtin/packages/boost/python_jam.patch
new file mode 100644
index 0000000000..70054ba4ed
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boost/python_jam.patch
@@ -0,0 +1,42 @@
+diff --git a/tools/build/src/tools/python.jam b/tools/build/src/tools/python.jam
+index 90377ea..123f66a 100644
+--- a/tools/build/src/tools/python.jam
++++ b/tools/build/src/tools/python.jam
+@@ -493,6 +493,10 @@ local rule probe ( python-cmd )
+ sys.$(s) = [ SUBST $(output) \\<$(s)=([^$(nl)]+) $1 ] ;
+ }
+ }
++ # Try to get python abiflags
++ full-cmd = $(python-cmd)" -c \"from sys import abiflags; print(abiflags, end='')\"" ;
++
++ sys.abiflags = [ SHELL $(full-cmd) ] ;
+ return $(output) ;
+ }
+ }
+@@ -502,7 +506,7 @@ local rule probe ( python-cmd )
+ # have a value based on the information given.
+ #
+ local rule compute-default-paths ( target-os : version ? : prefix ? :
+- exec-prefix ? )
++ exec-prefix ? : abiflags ? )
+ {
+ exec-prefix ?= $(prefix) ;
+
+@@ -539,7 +543,7 @@ local rule compute-default-paths ( target-os : version ? : prefix ? :
+ }
+ else
+ {
+- includes ?= $(prefix)/include/python$(version) ;
++ includes ?= $(prefix)/include/python$(version)$(abiflags) ;
+
+ local lib = $(exec-prefix)/lib ;
+ libraries ?= $(lib)/python$(version)/config $(lib) ;
+@@ -783,7 +787,7 @@ local rule configure ( version ? : cmd-or-prefix ? : includes * : libraries ? :
+ exec-prefix = $(sys.exec_prefix) ;
+
+ compute-default-paths $(target-os) : $(sys.version) :
+- $(sys.prefix) : $(sys.exec_prefix) ;
++ $(sys.prefix) : $(sys.exec_prefix) : $(sys.abiflags) ;
+
+ version = $(sys.version) ;
+ interpreter-cmd ?= $(cmd) ;
diff --git a/var/spack/repos/builtin/packages/boost/python_jam_pre156.patch b/var/spack/repos/builtin/packages/boost/python_jam_pre156.patch
new file mode 100644
index 0000000000..b5c6404983
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boost/python_jam_pre156.patch
@@ -0,0 +1,42 @@
+diff --git a/tools/build/v2/tools/python.jam b/tools/build/v2/tools/python.jam
+index 90377ea..123f66a 100644
+--- a/tools/build/v2/tools/python.jam
++++ b/tools/build/v2/tools/python.jam
+@@ -493,6 +493,10 @@ local rule probe ( python-cmd )
+ sys.$(s) = [ SUBST $(output) \\<$(s)=([^$(nl)]+) $1 ] ;
+ }
+ }
++ # Try to get python abiflags
++ full-cmd = $(python-cmd)" -c \"from sys import abiflags; print(abiflags, end='')\"" ;
++
++ sys.abiflags = [ SHELL $(full-cmd) ] ;
+ return $(output) ;
+ }
+ }
+@@ -502,7 +506,7 @@ local rule probe ( python-cmd )
+ # have a value based on the information given.
+ #
+ local rule compute-default-paths ( target-os : version ? : prefix ? :
+- exec-prefix ? )
++ exec-prefix ? : abiflags ? )
+ {
+ exec-prefix ?= $(prefix) ;
+
+@@ -539,7 +543,7 @@ local rule compute-default-paths ( target-os : version ? : prefix ? :
+ }
+ else
+ {
+- includes ?= $(prefix)/include/python$(version) ;
++ includes ?= $(prefix)/include/python$(version)$(abiflags) ;
+
+ local lib = $(exec-prefix)/lib ;
+ libraries ?= $(lib)/python$(version)/config $(lib) ;
+@@ -783,7 +787,7 @@ local rule configure ( version ? : cmd-or-prefix ? : includes * : libraries ? :
+ exec-prefix = $(sys.exec_prefix) ;
+
+ compute-default-paths $(target-os) : $(sys.version) :
+- $(sys.prefix) : $(sys.exec_prefix) ;
++ $(sys.prefix) : $(sys.exec_prefix) : $(sys.abiflags) ;
+
+ version = $(sys.version) ;
+ interpreter-cmd ?= $(cmd) ;
diff --git a/var/spack/repos/builtin/packages/boost/xl_1_62_0_le.patch b/var/spack/repos/builtin/packages/boost/xl_1_62_0_le.patch
new file mode 100644
index 0000000000..fd0eba345b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boost/xl_1_62_0_le.patch
@@ -0,0 +1,787 @@
+diff -uNr boost_1_62_0/boost/accumulators/statistics/p_square_cumulative_distribution.hpp boost_1_62_0/boost/accumulators/statistics/p_square_cumulative_distribution.hpp
+--- boost_1_62_0/boost/accumulators/statistics/p_square_cumulative_distribution.hpp 2015-03-23 13:17:14.000000000 -0400
++++ boost_1_62_0/boost/accumulators/statistics/p_square_cumulative_distribution.hpp 2016-01-08 13:29:52.612408601 -0500
+@@ -10,7 +10,7 @@
+
+ #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+ # pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp")
+-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
++#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # warning "This header is deprecated. Please use: boost/accumulators/statistics/p_square_cumul_dist.hpp"
+ #endif
+
+diff -uNr boost_1_62_0/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp boost_1_62_0/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp
+--- boost_1_62_0/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp 2015-03-23 13:17:14.000000000 -0400
++++ boost_1_62_0/boost/accumulators/statistics/weighted_p_square_cumulative_distribution.hpp 2016-01-08 13:29:52.649942984 -0500
+@@ -10,7 +10,7 @@
+
+ #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+ # pragma message ("Warning: This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp")
+-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
++#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # warning "This header is deprecated. Please use: boost/accumulators/statistics/weighted_p_square_cumul_dist.hpp"
+ #endif
+
+diff -uNr boost_1_62_0/boost/asio/detail/pop_options.hpp boost_1_62_0/boost/asio/detail/pop_options.hpp
+--- boost_1_62_0/boost/asio/detail/pop_options.hpp 2015-03-23 16:24:12.000000000 -0400
++++ boost_1_62_0/boost/asio/detail/pop_options.hpp 2016-01-08 13:29:52.725151630 -0500
+@@ -107,7 +107,7 @@
+
+ // MPW MrCpp or SCpp
+
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+
+ // IBM Visual Age
+
+diff -uNr boost_1_62_0/boost/asio/detail/push_options.hpp boost_1_62_0/boost/asio/detail/push_options.hpp
+--- boost_1_62_0/boost/asio/detail/push_options.hpp 2015-03-23 16:24:12.000000000 -0400
++++ boost_1_62_0/boost/asio/detail/push_options.hpp 2016-01-08 13:29:52.779979004 -0500
+@@ -114,7 +114,7 @@
+
+ // MPW MrCpp or SCpp
+
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+
+ // IBM Visual Age
+
+diff -uNr boost_1_62_0/boost/asio/impl/src.cpp boost_1_62_0/boost/asio/impl/src.cpp
+--- boost_1_62_0/boost/asio/impl/src.cpp 2015-03-23 16:24:12.000000000 -0400
++++ boost_1_62_0/boost/asio/impl/src.cpp 2016-01-08 13:29:52.855662358 -0500
+@@ -17,7 +17,7 @@
+ #elif defined(__GNUC__) \
+ || defined(__HP_aCC) \
+ || defined(__SUNPRO_CC) \
+- || defined(__IBMCPP__)
++ || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # warning "This file is deprecated."
+ # warning "Please #include <boost/asio/impl/src.hpp> instead."
+ #endif
+diff -uNr boost_1_62_0/boost/bind/bind.hpp boost_1_62_0/boost/bind/bind.hpp
+--- boost_1_62_0/boost/bind/bind.hpp 2015-05-03 18:08:08.000000000 -0400
++++ boost_1_62_0/boost/bind/bind.hpp 2016-01-08 13:29:52.921370966 -0500
+@@ -1970,7 +1970,7 @@
+ typedef void type;
+ };
+
+-#if !defined(__IBMCPP__) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION
++#if !(defined(__IBMCPP__) && !defined(__ibmxl__)) || __IBMCPP_FUNC_CV_TMPL_ARG_DEDUCTION
+
+ template< class R, class T > struct add_cref< R (T::*) () const, 1 >
+ {
+diff -uNr boost_1_62_0/boost/config/requires_threads.hpp boost_1_62_0/boost/config/requires_threads.hpp
+--- boost_1_62_0/boost/config/requires_threads.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/config/requires_threads.hpp 2016-01-08 13:29:53.028994548 -0500
+@@ -70,7 +70,7 @@
+ // HP aCC
+ # error "Compiler threading support is not turned on. Please set the correct command line options for threading: -mt"
+
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+ // IBM Visual Age
+ # error "Compiler threading support is not turned on. Please compile the code with the xlC_r compiler"
+
+diff -uNr boost_1_62_0/boost/config/select_compiler_config.hpp boost_1_62_0/boost/config/select_compiler_config.hpp
+--- boost_1_62_0/boost/config/select_compiler_config.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/config/select_compiler_config.hpp 2016-01-08 13:29:53.495533933 -0500
+@@ -96,7 +96,7 @@
+ // IBM XL C/C++ for Linux (Little Endian)
+ # define BOOST_COMPILER_CONFIG "boost/config/compiler/xlcpp.hpp"
+
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+ // IBM Visual Age or IBM XL C/C++ for Linux (Big Endian)
+ # define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp"
+
+diff -uNr boost_1_62_0/boost/config/select_platform_config.hpp boost_1_62_0/boost/config/select_platform_config.hpp
+--- boost_1_62_0/boost/config/select_platform_config.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/config/select_platform_config.hpp 2016-01-08 13:29:53.575187839 -0500
+@@ -53,7 +53,7 @@
+ // MacOS
+ # define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp"
+
+-#elif defined(__IBMCPP__) || defined(_AIX)
++#elif (defined(__IBMCPP__) && !defined(__ibmxl__)) || defined(_AIX)
+ // IBM
+ # define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp"
+
+diff -uNr boost_1_62_0/boost/config/select_stdlib_config.hpp boost_1_62_0/boost/config/select_stdlib_config.hpp
+--- boost_1_62_0/boost/config/select_stdlib_config.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/config/select_stdlib_config.hpp 2016-01-08 13:29:53.626526177 -0500
+@@ -37,7 +37,7 @@
+ // #include if they know whose std lib they are using.
+ #if !defined(__LIBCOMO__) && !defined(__STD_RWCOMPILER_H__) && !defined(_RWSTD_VER)\
+ && !defined(_LIBCPP_VERSION) && !defined(__GLIBCPP__) && !defined(__GLIBCXX__)\
+- && !defined(__STL_CONFIG_H) && !defined(__MSL_CPP__) && !defined(__IBMCPP__)\
++ && !defined(__STL_CONFIG_H) && !defined(__MSL_CPP__) && !(defined(__IBMCPP__) && !defined(__ibmxl__) )\
+ && !defined(MSIPL_COMPILE_H) && !defined(_YVALS) && !defined(_CPPLIB_VER)
+ #include <utility>
+ #endif
+@@ -66,7 +66,7 @@
+ // MSL standard lib:
+ # define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp"
+
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+ // take the default VACPP std lib
+ # define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp"
+
+@@ -74,7 +74,7 @@
+ // Modena C++ standard library
+ # define BOOST_STDLIB_CONFIG "boost/config/stdlib/modena.hpp"
+
+-#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
++#elif (defined(_YVALS) && !(defined(__IBMCPP__) && !defined(__ibmxl__) )) || defined(_CPPLIB_VER)
+ // Dinkumware Library (this has to appear after any possible replacement libraries):
+ # define BOOST_STDLIB_CONFIG "boost/config/stdlib/dinkumware.hpp"
+
+diff -uNr boost_1_62_0/boost/core/explicit_operator_bool.hpp boost_1_62_0/boost/core/explicit_operator_bool.hpp
+--- boost_1_62_0/boost/core/explicit_operator_bool.hpp 2015-07-20 05:32:52.000000000 -0400
++++ boost_1_62_0/boost/core/explicit_operator_bool.hpp 2016-01-08 13:29:53.895509554 -0500
+@@ -78,7 +78,7 @@
+
+ namespace detail {
+
+-#if !defined(_MSC_VER) && !defined(__IBMCPP__)
++#if !defined(_MSC_VER) && !(defined(__IBMCPP__) && !defined(__ibmxl__))
+
+ struct unspecified_bool
+ {
+diff -uNr boost_1_62_0/boost/cstdint.hpp boost_1_62_0/boost/cstdint.hpp
+--- boost_1_62_0/boost/cstdint.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/cstdint.hpp 2016-01-08 13:29:53.969672718 -0500
+@@ -54,7 +54,7 @@
+ // this is triggered with GCC, because it defines __cplusplus < 199707L
+ # define BOOST_NO_INT64_T
+ # endif
+-# elif defined(__FreeBSD__) || defined(__IBMCPP__) || defined(_AIX)
++# elif defined(__FreeBSD__) || (defined(__IBMCPP__) && !defined(__ibmxl__))|| defined(_AIX)
+ # include <inttypes.h>
+ # else
+ # include <stdint.h>
+diff -uNr boost_1_62_0/boost/current_function.hpp boost_1_62_0/boost/current_function.hpp
+--- boost_1_62_0/boost/current_function.hpp 2015-01-30 18:08:49.000000000 -0500
++++ boost_1_62_0/boost/current_function.hpp 2016-01-08 13:29:54.012897946 -0500
+@@ -40,7 +40,7 @@
+
+ # define BOOST_CURRENT_FUNCTION __FUNCSIG__
+
+-#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && (__IBMCPP__ >= 500))
++#elif (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 600)) || (defined(__IBMCPP__) && !defined(__ibmxl__) && (__IBMCPP__ >= 500))
+
+ # define BOOST_CURRENT_FUNCTION __FUNCTION__
+
+diff -uNr boost_1_62_0/boost/detail/container_fwd.hpp boost_1_62_0/boost/detail/container_fwd.hpp
+--- boost_1_62_0/boost/detail/container_fwd.hpp 2015-04-01 11:49:11.000000000 -0400
++++ boost_1_62_0/boost/detail/container_fwd.hpp 2016-01-08 13:29:54.062758504 -0500
+@@ -70,12 +70,12 @@
+ # elif defined(__MSL_CPP__)
+ // MSL standard lib:
+ # define BOOST_DETAIL_NO_CONTAINER_FWD
+-# elif defined(__IBMCPP__)
++# elif defined(__IBMCPP__) && !defined(__ibmxl__)
+ // The default VACPP std lib, forward declaration seems to be fine.
+ # elif defined(MSIPL_COMPILE_H)
+ // Modena C++ standard library
+ # define BOOST_DETAIL_NO_CONTAINER_FWD
+-# elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
++# elif (defined(_YVALS) && !(defined(__IBMCPP__) && !defined(__ibmxl__))) || defined(_CPPLIB_VER)
+ // Dinkumware Library (this has to appear after any possible replacement
+ // libraries)
+ # else
+diff -uNr boost_1_62_0/boost/detail/workaround.hpp boost_1_62_0/boost/detail/workaround.hpp
+--- boost_1_62_0/boost/detail/workaround.hpp 2015-08-04 07:44:49.000000000 -0400
++++ boost_1_62_0/boost/detail/workaround.hpp 2016-01-09 13:56:47.218685439 -0500
+@@ -85,7 +85,7 @@
+ #else
+ #define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0
+ #endif
+-#ifndef __IBMCPP__
++#if !defined(__IBMCPP__) || defined(__ibmxl__)
+ #define __IBMCPP___WORKAROUND_GUARD 1
+ #else
+ #define __IBMCPP___WORKAROUND_GUARD 0
+diff -uNr boost_1_62_0/boost/foreach.hpp boost_1_62_0/boost/foreach.hpp
+--- boost_1_62_0/boost/foreach.hpp 2015-03-04 15:36:38.000000000 -0500
++++ boost_1_62_0/boost/foreach.hpp 2016-01-09 13:58:39.495427757 -0500
+@@ -55,7 +55,7 @@
+ || BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1400)) \
+ || BOOST_WORKAROUND(BOOST_INTEL_WIN, BOOST_TESTED_AT(1400)) \
+ || (BOOST_WORKAROUND(__GNUC__, == 3) && (__GNUC_MINOR__ <= 3) && defined(__APPLE_CC__)) \
+- || BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) \
++ || (BOOST_WORKAROUND(__IBMCPP__, BOOST_TESTED_AT(600)) && (__IBMCPP__ < 1300)) \
+ || BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3206)) \
+ || BOOST_WORKAROUND(__SUNPRO_CC, >= 0x5100) \
+ || BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590))
+diff -uNr boost_1_62_0/boost/functional/hash/detail/float_functions.hpp boost_1_62_0/boost/functional/hash/detail/float_functions.hpp
+--- boost_1_62_0/boost/functional/hash/detail/float_functions.hpp 2015-01-24 09:37:21.000000000 -0500
++++ boost_1_62_0/boost/functional/hash/detail/float_functions.hpp 2016-01-08 13:29:54.116374393 -0500
+@@ -47,7 +47,7 @@
+ #elif defined(__MSL_CPP__)
+ // MSL standard lib:
+ # define BOOST_HASH_CONFORMANT_FLOATS 0
+-#elif defined(__IBMCPP__)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__)
+ // VACPP std lib (probably conformant for much earlier version).
+ # if __IBMCPP__ >= 1210
+ # define BOOST_HASH_CONFORMANT_FLOATS 1
+@@ -57,7 +57,7 @@
+ #elif defined(MSIPL_COMPILE_H)
+ // Modena C++ standard library
+ # define BOOST_HASH_CONFORMANT_FLOATS 0
+-#elif (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
++#elif (defined(_YVALS) && !(defined(__IBMCPP__) && !defined(__ibmxl__))) || defined(_CPPLIB_VER)
+ // Dinkumware Library (this has to appear after any possible replacement libraries):
+ # if _CPPLIB_VER >= 405
+ # define BOOST_HASH_CONFORMANT_FLOATS 1
+diff -uNr boost_1_62_0/boost/graph/edmunds_karp_max_flow.hpp boost_1_62_0/boost/graph/edmunds_karp_max_flow.hpp
+--- boost_1_62_0/boost/graph/edmunds_karp_max_flow.hpp 2014-08-03 15:46:30.000000000 -0400
++++ boost_1_62_0/boost/graph/edmunds_karp_max_flow.hpp 2016-01-08 13:29:54.165330185 -0500
+@@ -10,7 +10,7 @@
+
+ #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+ # pragma message ("Warning: This header is deprecated. Please use: boost/graph/edmonds_karp_max_flow.hpp")
+-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
++#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || (defined(__IBMCPP__) && !defined(__ibmxl__))
+ # warning "This header is deprecated. Please use: boost/graph/edmonds_karp_max_flow.hpp"
+ #endif
+
+diff -uNr boost_1_62_0/boost/intrusive/detail/parent_from_member.hpp boost_1_62_0/boost/intrusive/detail/parent_from_member.hpp
+--- boost_1_62_0/boost/intrusive/detail/parent_from_member.hpp 2015-07-21 17:39:18.000000000 -0400
++++ boost_1_62_0/boost/intrusive/detail/parent_from_member.hpp 2016-01-08 13:29:54.266801426 -0500
+@@ -71,7 +71,7 @@
+
+ //This works with gcc, msvc, ac++, ibmcpp
+ #elif defined(__GNUC__) || defined(__HP_aCC) || defined(BOOST_INTEL) || \
+- defined(__IBMCPP__) || defined(__DECCXX)
++ defined(__IBMCPP__) && !defined(__ibmxl__) || defined(__DECCXX)
+ const Parent * const parent = 0;
+ const char *const member = static_cast<const char*>(static_cast<const void*>(&(parent->*ptr_to_member)));
+ return std::ptrdiff_t(member - static_cast<const char*>(static_cast<const void*>(parent)));
+diff -uNr boost_1_62_0/boost/iostreams/detail/add_facet.hpp boost_1_62_0/boost/iostreams/detail/add_facet.hpp
+--- boost_1_62_0/boost/iostreams/detail/add_facet.hpp 2015-01-25 14:33:40.000000000 -0500
++++ boost_1_62_0/boost/iostreams/detail/add_facet.hpp 2016-01-08 13:29:54.290652933 -0500
+@@ -23,7 +23,7 @@
+ #if (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION)) && \
+ defined(_STLP_NO_OWN_IOSTREAMS) \
+ /**/
+-# if (defined(_YVALS) && !defined(__IBMCPP__)) || defined(_CPPLIB_VER)
++# if (defined(_YVALS) && !(defined(__IBMCPP__) && !defined(__ibmxl__))) || defined(_CPPLIB_VER)
+ # define BOOST_IOSTREMS_STLPORT_WITH_OLD_DINKUMWARE
+ # endif
+ #endif
+diff -uNr boost_1_62_0/boost/iostreams/positioning.hpp boost_1_62_0/boost/iostreams/positioning.hpp
+--- boost_1_62_0/boost/iostreams/positioning.hpp 2015-01-25 14:33:40.000000000 -0500
++++ boost_1_62_0/boost/iostreams/positioning.hpp 2016-01-08 13:29:54.321832608 -0500
+@@ -82,7 +82,7 @@
+ // Converts a std::fpos_t to a stream_offset
+ inline stream_offset fpos_t_to_offset(std::fpos_t pos)
+ {
+-# if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64) || defined(__IBMCPP__)
++# if defined(_POSIX_) || (_INTEGRAL_MAX_BITS >= 64) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ return pos;
+ # else
+ return _FPOSOFF(pos);
+@@ -92,7 +92,7 @@
+ // Extracts the member _Fpos from a std::fpos
+ inline std::fpos_t streampos_to_fpos_t(std::streampos pos)
+ {
+-# if defined (_CPPLIB_VER) || defined(__IBMCPP__)
++# if defined (_CPPLIB_VER) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ return pos.seekpos();
+ # else
+ return pos.get_fpos_t();
+diff -uNr boost_1_62_0/boost/math/tools/config.hpp boost_1_62_0/boost/math/tools/config.hpp
+--- boost_1_62_0/boost/math/tools/config.hpp 2015-05-05 08:32:10.000000000 -0400
++++ boost_1_62_0/boost/math/tools/config.hpp 2016-01-08 13:29:54.360466863 -0500
+@@ -43,7 +43,7 @@
+ # define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)
+ # include <float.h>
+ #endif
+-#ifdef __IBMCPP__
++#if defined(__IBMCPP__) && !defined(__ibmxl__)
+ //
+ // For reasons I don't unserstand, the tests with IMB's compiler all
+ // pass at long double precision, but fail with real_concept, those tests
+@@ -98,7 +98,7 @@
+ # define BOOST_MATH_CONTROL_FP _control87(MCW_EM,MCW_EM)
+ #endif
+
+-#ifdef __IBMCPP__
++#if defined(__IBMCPP__) && !defined(__ibmxl__)
+ # define BOOST_MATH_NO_DEDUCED_FUNCTION_POINTERS
+ #endif
+
+@@ -336,7 +336,7 @@
+ # endif
+ #endif
+
+-#if ((defined(__linux__) && !defined(__UCLIBC__) && !defined(BOOST_MATH_HAVE_FIXED_GLIBC)) || defined(__QNX__) || defined(__IBMCPP__)) && !defined(BOOST_NO_FENV_H)
++#if ((defined(__linux__) && !defined(__UCLIBC__) && !defined(BOOST_MATH_HAVE_FIXED_GLIBC)) || defined(__QNX__) || (defined(__IBMCPP__) && !defined(__ibmxl__))) && !defined(BOOST_NO_FENV_H)
+ //
+ // This code was introduced in response to this glibc bug: http://sourceware.org/bugzilla/show_bug.cgi?id=2445
+ // Basically powl and expl can return garbage when the result is small and certain exception flags are set
+diff -uNr boost_1_62_0/boost/math/tools/tuple.hpp boost_1_62_0/boost/math/tools/tuple.hpp
+--- boost_1_62_0/boost/math/tools/tuple.hpp 2015-05-05 08:32:10.000000000 -0400
++++ boost_1_62_0/boost/math/tools/tuple.hpp 2016-01-08 13:29:54.575224775 -0500
+@@ -27,7 +27,7 @@
+
+ }}
+
+-#elif (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || defined(__IBMCPP__)
++#elif (defined(__BORLANDC__) && (__BORLANDC__ <= 0x600)) || defined(__IBMCPP__) && !defined(__ibmxl__)
+
+ #include <boost/tuple/tuple.hpp>
+ #include <boost/tuple/tuple_comparison.hpp>
+diff -uNr boost_1_62_0/boost/preprocessor/config/config.hpp boost_1_62_0/boost/preprocessor/config/config.hpp
+--- boost_1_62_0/boost/preprocessor/config/config.hpp 2015-07-17 07:45:08.000000000 -0400
++++ boost_1_62_0/boost/preprocessor/config/config.hpp 2016-01-10 01:51:46.139445697 -0500
+@@ -43,7 +43,7 @@
+ # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_DMC())
+ # elif defined(__BORLANDC__) && __BORLANDC__ >= 0x581
+ # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_STRICT())
+-# elif defined(__BORLANDC__) || defined(__IBMC__) || defined(__IBMCPP__) || defined(__SUNPRO_CC)
++# elif defined(__BORLANDC__) || defined(__IBMC__) && !defined(__ibmxl__) || defined(__IBMCPP__) && !defined(__ibmxl__) || defined(__SUNPRO_CC)
+ # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_BCC())
+ # elif defined(_MSC_VER) && !defined(__clang__)
+ # define BOOST_PP_CONFIG_FLAGS() (BOOST_PP_CONFIG_MSVC())
+@@ -73,7 +73,7 @@
+ # define BOOST_PP_VARIADICS_MSVC 0
+ # if !defined BOOST_PP_VARIADICS
+ # /* variadic support explicitly disabled for all untested compilers */
+-# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5120 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI
++# if defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || ( defined __SUNPRO_CC && __SUNPRO_CC < 0x5120 ) || defined __HP_aCC && !defined __EDG__ || defined __MRC__ || defined __SC__ || (defined __IBMCPP__ && !defined __ibmxl__ ) || defined __PGI
+ # define BOOST_PP_VARIADICS 0
+ # /* VC++ (C/C++) */
+ # elif defined _MSC_VER && _MSC_VER >= 1400 && (!defined __EDG__ || defined(__INTELLISENSE__)) && !defined __clang__
+@@ -92,7 +92,7 @@
+ # elif !BOOST_PP_VARIADICS + 1 < 2
+ # undef BOOST_PP_VARIADICS
+ # define BOOST_PP_VARIADICS 1
+-# if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__INTELLISENSE__) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || defined __IBMCPP__ || defined __PGI))
++# if defined _MSC_VER && _MSC_VER >= 1400 && (defined(__INTELLISENSE__) || !(defined __EDG__ || defined __GCCXML__ || defined __CUDACC__ || defined __PATHSCALE__ || defined __clang__ || defined __DMC__ || defined __CODEGEARC__ || defined __BORLANDC__ || defined __MWERKS__ || defined __SUNPRO_CC || defined __HP_aCC || defined __MRC__ || defined __SC__ || (defined __IBMCPP__ && !defined __ibmxl__ ) || defined __PGI))
+ # undef BOOST_PP_VARIADICS_MSVC
+ # define BOOST_PP_VARIADICS_MSVC 1
+ # endif
+diff -uNr boost_1_62_0/boost/preprocessor/seq/elem.hpp boost_1_62_0/boost/preprocessor/seq/elem.hpp
+--- boost_1_62_0/boost/preprocessor/seq/elem.hpp 2015-07-17 07:45:08.000000000 -0400
++++ boost_1_62_0/boost/preprocessor/seq/elem.hpp 2016-01-10 01:53:11.941880189 -0500
+@@ -35,7 +35,7 @@
+ # define BOOST_PP_SEQ_ELEM_III(im) BOOST_PP_SEQ_ELEM_IV(im)
+ # define BOOST_PP_SEQ_ELEM_IV(x, _) x
+ # else
+-# if defined(__IBMC__) || defined(__IBMCPP__)
++# if defined(__IBMC__) && !defined(__ibmxl__) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM_ ## i, seq))
+ # else
+ # define BOOST_PP_SEQ_ELEM_I(i, seq) BOOST_PP_SEQ_ELEM_II(BOOST_PP_SEQ_ELEM_ ## i seq)
+diff -uNr boost_1_62_0/boost/preprocessor/seq/size.hpp boost_1_62_0/boost/preprocessor/seq/size.hpp
+--- boost_1_62_0/boost/preprocessor/seq/size.hpp 2015-07-17 07:45:08.000000000 -0400
++++ boost_1_62_0/boost/preprocessor/seq/size.hpp 2016-01-10 01:53:59.736320846 -0500
+@@ -22,7 +22,7 @@
+ # elif BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG() || BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_MSVC()
+ # define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_SEQ_SIZE_I(seq)
+ # define BOOST_PP_SEQ_SIZE_I(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+-# elif defined(__IBMC__) || defined(__IBMCPP__)
++# elif defined(__IBMC__) && !defined(__ibmxl__) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_0, seq))
+ # else
+ # define BOOST_PP_SEQ_SIZE(seq) BOOST_PP_CAT(BOOST_PP_SEQ_SIZE_, BOOST_PP_SEQ_SIZE_0 seq)
+diff -uNr boost_1_62_0/boost/regex/icu.hpp boost_1_62_0/boost/regex/icu.hpp
+--- boost_1_62_0/boost/regex/icu.hpp 2015-02-14 08:22:25.000000000 -0500
++++ boost_1_62_0/boost/regex/icu.hpp 2016-01-08 13:29:54.840564509 -0500
+@@ -243,7 +243,7 @@
+ //
+ namespace re_detail{
+
+-#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !defined(__IBMCPP__)
++#if !defined(BOOST_NO_MEMBER_TEMPLATES) && !(defined(__IBMCPP__) && !defined(__ibmxl__))
+ template <class InputIterator>
+ inline u32regex do_make_u32regex(InputIterator i,
+ InputIterator j,
+diff -uNr boost_1_62_0/boost/regex/v4/cpp_regex_traits.hpp boost_1_62_0/boost/regex/v4/cpp_regex_traits.hpp
+--- boost_1_62_0/boost/regex/v4/cpp_regex_traits.hpp 2015-02-14 08:22:25.000000000 -0500
++++ boost_1_62_0/boost/regex/v4/cpp_regex_traits.hpp 2016-01-08 13:29:54.936872839 -0500
+@@ -275,7 +275,7 @@
+ // we need to start by initialising our syntax map so we know which
+ // character is used for which purpose:
+ #ifndef BOOST_NO_STD_MESSAGES
+-#ifndef __IBMCPP__
++#if !defined(__IBMCPP__) || defined(__ibmxl__)
+ typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
+ #else
+ typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
+@@ -702,7 +702,7 @@
+ void cpp_regex_traits_implementation<charT>::init()
+ {
+ #ifndef BOOST_NO_STD_MESSAGES
+-#ifndef __IBMCPP__
++#if !defined(__IBMCPP__) || defined(__ibmxl__)
+ typename std::messages<charT>::catalog cat = static_cast<std::messages<char>::catalog>(-1);
+ #else
+ typename std::messages<charT>::catalog cat = reinterpret_cast<std::messages<char>::catalog>(-1);
+diff -uNr boost_1_62_0/boost/serialization/force_include.hpp boost_1_62_0/boost/serialization/force_include.hpp
+--- boost_1_62_0/boost/serialization/force_include.hpp 2015-05-23 14:51:06.000000000 -0400
++++ boost_1_62_0/boost/serialization/force_include.hpp 2016-01-08 13:29:55.027329880 -0500
+@@ -37,7 +37,7 @@
+ # define BOOST_DLLEXPORT __declspec(dllexport)
+ # elif defined(__GNUC__) && (__GNUC__ >= 3)
+ # define BOOST_USED __attribute__ ((__used__))
+-# elif defined(__IBMCPP__) && (__IBMCPP__ >= 1110)
++# elif defined(__IBMCPP__) && !defined(__ibmxl__) && (__IBMCPP__ >= 1110)
+ # define BOOST_USED __attribute__ ((__used__))
+ # elif defined(__INTEL_COMPILER) && (BOOST_INTEL_CXX_VERSION >= 800)
+ # define BOOST_USED __attribute__ ((__used__))
+diff -uNr boost_1_62_0/boost/signal.hpp boost_1_62_0/boost/signal.hpp
+--- boost_1_62_0/boost/signal.hpp 2015-04-01 13:32:16.000000000 -0400
++++ boost_1_62_0/boost/signal.hpp 2016-01-08 13:29:55.079443080 -0500
+@@ -13,7 +13,7 @@
+ #ifndef BOOST_SIGNALS_NO_DEPRECATION_WARNING
+ # if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+ # pragma message ("Warning: Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING.")
+-# elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
++# elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # warning "Boost.Signals is no longer being maintained and is now deprecated. Please switch to Boost.Signals2. To disable this warning message, define BOOST_SIGNALS_NO_DEPRECATION_WARNING."
+ # endif
+ #endif
+diff -uNr boost_1_62_0/boost/spirit.hpp boost_1_62_0/boost/spirit.hpp
+--- boost_1_62_0/boost/spirit.hpp 2015-07-14 18:38:56.000000000 -0400
++++ boost_1_62_0/boost/spirit.hpp 2016-01-08 13:29:55.145408036 -0500
+@@ -14,7 +14,7 @@
+ #if BOOST_VERSION >= 103800
+ #if defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
+ # pragma message ("Warning: This header is deprecated. Please use: boost/spirit/include/classic.hpp")
+-#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__)
++#elif defined(__GNUC__) || defined(__HP_aCC) || defined(__SUNPRO_CC) || defined(__IBMCPP__) && !defined(__ibmxl__)
+ # warning "This header is deprecated. Please use: boost/spirit/include/classic.hpp"
+ #endif
+ #endif
+diff -uNr boost_1_62_0/boost/thread/detail/platform.hpp boost_1_62_0/boost/thread/detail/platform.hpp
+--- boost_1_62_0/boost/thread/detail/platform.hpp 2015-04-18 05:56:34.000000000 -0400
++++ boost_1_62_0/boost/thread/detail/platform.hpp 2016-01-08 13:29:55.225161873 -0500
+@@ -37,7 +37,7 @@
+ #elif defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)
+ # define BOOST_THREAD_MACOS
+ //# define BOOST_THREAD_WAIT_BUG boost::posix_time::microseconds(1000)
+-#elif defined(__IBMCPP__) || defined(_AIX)
++#elif defined(__IBMCPP__) && !defined(__ibmxl__) || defined(_AIX)
+ # define BOOST_THREAD_AIX
+ #elif defined(__amigaos__)
+ # define BOOST_THREAD_AMIGAOS
+diff -uNr boost_1_62_0/boost/tr1/detail/config.hpp boost_1_62_0/boost/tr1/detail/config.hpp
+--- boost_1_62_0/boost/tr1/detail/config.hpp 2014-02-20 08:26:34.000000000 -0500
++++ boost_1_62_0/boost/tr1/detail/config.hpp 2016-01-08 13:29:55.295115823 -0500
+@@ -10,7 +10,7 @@
+
+ #if (defined(__GNUC__) && !(defined(linux) || defined(__linux) || defined(__linux__))) \
+ || (!defined(__FreeBSD__) && defined(__GNUC__)) \
+- || (!defined(_AIX) && defined(__IBMCPP__) && (__IBMCPP__ >= 800))
++ || (!defined(_AIX) && defined(__IBMCPP__) && !defined(__ibmxl__) && (__IBMCPP__ >= 800))
+ // Disable use of #include_next on Linux as typically we are installed in a
+ // directory that is searched *after* the std lib include path.
+ #if !defined(BOOST_HAS_INCLUDE_NEXT)
+diff -uNr boost_1_62_0/boost/type_traits/extent.hpp boost_1_62_0/boost/type_traits/extent.hpp
+--- boost_1_62_0/boost/type_traits/extent.hpp 2015-05-21 13:51:23.000000000 -0400
++++ boost_1_62_0/boost/type_traits/extent.hpp 2016-01-08 13:29:55.455420729 -0500
+@@ -80,7 +80,7 @@
+ BOOST_STATIC_CONSTANT(std::size_t, value = R);
+ };
+
+-#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) && !defined(__MWERKS__)
++#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !(defined(__IBMCPP__) && !defined(__ibmxl__)) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840)) && !defined(__MWERKS__)
+ template <class T, std::size_t N>
+ struct extent_imp<T[], N>
+ {
+diff -uNr boost_1_62_0/boost/type_traits/is_array.hpp boost_1_62_0/boost/type_traits/is_array.hpp
+--- boost_1_62_0/boost/type_traits/is_array.hpp 2016-07-11 13:30:44.296134002 -0400
++++ boost_1_62_0/boost/type_traits/is_array.hpp 2016-07-11 13:30:28.084752131 -0400
+@@ -28,7 +28,7 @@
+ template <class T, std::size_t N> struct is_array<T const[N]> : public true_type{};
+ template <class T, std::size_t N> struct is_array<T volatile[N]> : public true_type{};
+ template <class T, std::size_t N> struct is_array<T const volatile[N]> : public true_type{};
+-#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
++#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !(defined(__IBMCPP__) && !defined(__ibmxl__)) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+ template <class T> struct is_array<T[]> : public true_type{};
+ template <class T> struct is_array<T const[]> : public true_type{};
+ template <class T> struct is_array<T const volatile[]> : public true_type{};
+diff -uNr boost_1_62_0/boost/type_traits/is_convertible.hpp boost_1_62_0/boost/type_traits/is_convertible.hpp
+--- boost_1_62_0/boost/type_traits/is_convertible.hpp 2015-05-21 13:51:23.000000000 -0400
++++ boost_1_62_0/boost/type_traits/is_convertible.hpp 2016-01-08 13:29:55.605870032 -0500
+@@ -152,7 +152,7 @@
+ };
+
+ #elif (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 245) && !defined(__ICL)) \
+- || defined(__IBMCPP__) || defined(__HP_aCC)
++ || defined(__IBMCPP__) && !defined(__ibmxl__) || defined(__HP_aCC)
+ //
+ // This is *almost* an ideal world implementation as it doesn't rely
+ // on undefined behaviour by passing UDT's through (...).
+diff -uNr boost_1_62_0/boost/type_traits/rank.hpp boost_1_62_0/boost/type_traits/rank.hpp
+--- boost_1_62_0/boost/type_traits/rank.hpp 2015-05-21 13:51:23.000000000 -0400
++++ boost_1_62_0/boost/type_traits/rank.hpp 2016-01-08 13:29:55.675140771 -0500
+@@ -49,7 +49,7 @@
+ BOOST_STATIC_CONSTANT(std::size_t, value = (::boost::detail::rank_imp<T, N+1>::value));
+ };
+
+-#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
++#if !BOOST_WORKAROUND(__BORLANDC__, < 0x600) && !(defined(__IBMCPP__) && !defined(__ibmxl__)) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+ template <class T, std::size_t N>
+ struct rank_imp<T[], N>
+ {
+diff -uNr boost_1_62_0/boost/type_traits/remove_all_extents.hpp boost_1_62_0/boost/type_traits/remove_all_extents.hpp
+--- boost_1_62_0/boost/type_traits/remove_all_extents.hpp 2015-05-21 13:51:23.000000000 -0400
++++ boost_1_62_0/boost/type_traits/remove_all_extents.hpp 2016-01-08 13:29:55.746149995 -0500
+@@ -22,7 +22,7 @@
+ template <class T, std::size_t N> struct remove_all_extents<T const[N]> : public remove_all_extents<T const>{};
+ template <class T, std::size_t N> struct remove_all_extents<T volatile[N]> : public remove_all_extents<T volatile>{};
+ template <class T, std::size_t N> struct remove_all_extents<T const volatile[N]> : public remove_all_extents<T const volatile>{};
+-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
++#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !(defined(__IBMCPP__) && !defined(__ibmxl__)) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+ template <class T> struct remove_all_extents<T[]> : public remove_all_extents<T>{};
+ template <class T> struct remove_all_extents<T const[]> : public remove_all_extents<T const>{};
+ template <class T> struct remove_all_extents<T volatile[]> : public remove_all_extents<T volatile>{};
+diff -uNr boost_1_62_0/boost/type_traits/remove_extent.hpp boost_1_62_0/boost/type_traits/remove_extent.hpp
+--- boost_1_62_0/boost/type_traits/remove_extent.hpp 2015-05-21 13:51:23.000000000 -0400
++++ boost_1_62_0/boost/type_traits/remove_extent.hpp 2016-01-10 02:18:53.967902075 -0500
+@@ -22,7 +22,7 @@
+ template <typename T, std::size_t N> struct remove_extent<T const[N]> { typedef T const type; };
+ template <typename T, std::size_t N> struct remove_extent<T volatile [N]> { typedef T volatile type; };
+ template <typename T, std::size_t N> struct remove_extent<T const volatile [N]> { typedef T const volatile type; };
+-#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !defined(__IBMCPP__) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
++#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x610)) && !(defined(__IBMCPP__) && !defined(__ibmxl__)) && !BOOST_WORKAROUND(__DMC__, BOOST_TESTED_AT(0x840))
+ template <typename T> struct remove_extent<T[]> { typedef T type; };
+ template <typename T> struct remove_extent<T const[]> { typedef T const type; };
+ template <typename T> struct remove_extent<T volatile[]> { typedef T volatile type; };
+diff -uNr boost_1_62_0/bootstrap.sh boost_1_62_0/bootstrap.sh
+--- boost_1_62_0/bootstrap.sh 2015-08-11 10:00:14.000000000 -0400
++++ boost_1_62_0/bootstrap.sh 2016-01-08 12:17:34.671934715 -0500
+@@ -195,7 +195,7 @@
+ if test "x$TOOLSET" = x; then
+ guessed_toolset=`$my_dir/tools/build/src/engine/build.sh --guess-toolset`
+ case $guessed_toolset in
+- acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp )
++ acc | darwin | gcc | como | mipspro | pathscale | pgi | qcc | vacpp | xlcpp )
+ TOOLSET=$guessed_toolset
+ ;;
+
+diff -uNr boost_1_62_0/libs/atomic/test/Jamfile.v2 boost_1_62_0/libs/atomic/test/Jamfile.v2
+--- boost_1_62_0/libs/atomic/test/Jamfile.v2 2015-01-25 10:50:58.000000000 -0500
++++ boost_1_62_0/libs/atomic/test/Jamfile.v2 2016-01-08 12:23:33.758048088 -0500
+@@ -17,6 +17,7 @@
+ <target-os>windows:<define>BOOST_USE_WINDOWS_H
+ <target-os>windows:<define>_WIN32_WINNT=0x0500
+ <toolset>gcc,<target-os>windows:<linkflags>"-lkernel32"
++ <toolset>xlcpp:<linkflags>"-latomic"
+ ;
+
+ test-suite atomic
+diff -uNr boost_1_62_0/libs/context/build/Jamfile.v2 boost_1_62_0/libs/context/build/Jamfile.v2
+--- boost_1_62_0/libs/context/build/Jamfile.v2 2015-06-29 11:08:22.000000000 -0400
++++ boost_1_62_0/libs/context/build/Jamfile.v2 2016-01-08 12:24:40.614024908 -0500
+@@ -99,6 +99,11 @@
+ cpp -x assembler-with-cpp "$(>)" | as --64 -o "$(<)"
+ }
+
++actions gaspower64
++{
++ cpp -x assembler-with-cpp "$(>)" | as -a64 -o "$(<)"
++}
++
+ actions gasx32
+ {
+ cpp -x assembler-with-cpp "$(>)" | as --x32 -o "$(<)"
+@@ -442,9 +447,9 @@
+ # POWERPC_64
+ # POWERPC_64/SYSV/ELF
+ alias asm_context_sources
+- : [ make asm/make_ppc64_sysv_elf_gas.o : asm/make_ppc64_sysv_elf_gas.S : @gas64 ]
+- [ make asm/jump_ppc64_sysv_elf_gas.o : asm/jump_ppc64_sysv_elf_gas.S : @gas64 ]
+- [ make asm/ontop_ppc64_sysv_elf_gas.o : asm/ontop_ppc64_sysv_elf_gas.S : @gas64 ]
++ : [ make asm/make_ppc64_sysv_elf_gas.o : asm/make_ppc64_sysv_elf_gas.S : @gaspower64 ]
++ [ make asm/jump_ppc64_sysv_elf_gas.o : asm/jump_ppc64_sysv_elf_gas.S : @gaspower64 ]
++ [ make asm/ontop_ppc64_sysv_elf_gas.o : asm/ontop_ppc64_sysv_elf_gas.S : @gaspower64 ]
+ : <abi>sysv
+ <address-model>64
+ <architecture>power
+diff -uNr boost_1_62_0/libs/foreach/test/Jamfile.v2 boost_1_62_0/libs/foreach/test/Jamfile.v2
+--- boost_1_62_0/libs/foreach/test/Jamfile.v2 2015-03-04 15:36:38.000000000 -0500
++++ boost_1_62_0/libs/foreach/test/Jamfile.v2 2016-01-08 12:25:51.293898849 -0500
+@@ -8,9 +8,9 @@
+ project : requirements <toolset>msvc:<asynch-exceptions>on ;
+
+ test-suite "foreach"
+- : [ run stl_byval.cpp ]
++ : [ run stl_byval.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi ]
+ [ run stl_byref.cpp ]
+- [ run stl_byval_r.cpp ]
++ [ run stl_byval_r.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi ]
+ [ run stl_byref_r.cpp ]
+ [ run array_byval.cpp ]
+ [ run array_byref.cpp ]
+@@ -25,12 +25,12 @@
+ [ run pair_byval_r.cpp ]
+ [ run pair_byref_r.cpp ]
+ [ run user_defined.cpp ]
+- [ run call_once.cpp ]
++ [ run call_once.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi ]
+ [ run rvalue_const.cpp ]
+ [ run rvalue_nonconst.cpp ]
+ [ run rvalue_const_r.cpp ]
+ [ run rvalue_nonconst_r.cpp ]
+- [ run dependent_type.cpp ]
++ [ run dependent_type.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi ]
+ [ run misc.cpp ]
+ [ compile noncopyable.cpp ]
+ ;
+diff -uNr boost_1_62_0/libs/geometry/test/algorithms/set_operations/intersection/Jamfile.v2 boost_1_62_0/libs/geometry/test/algorithms/set_operations/intersection/Jamfile.v2
+--- boost_1_62_0/libs/geometry/test/algorithms/set_operations/intersection/Jamfile.v2 2015-08-03 08:51:49.000000000 -0400
++++ boost_1_62_0/libs/geometry/test/algorithms/set_operations/intersection/Jamfile.v2 2016-01-08 12:29:08.081503553 -0500
+@@ -16,7 +16,7 @@
+
+ test-suite boost-geometry-algorithms-intersection
+ :
+- [ run intersection.cpp : : : <define>BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE
++ [ run intersection.cpp : : : <define>BOOST_GEOMETRY_TEST_ONLY_ONE_TYPE <toolset>xlcpp:<cxxflags>-qfloat=nomaf
+ : algorithms_intersection ]
+ [ run intersection_areal_areal_linear.cpp : : : : algorithms_intersection_areal_areal_linear ]
+ [ run intersection_linear_linear.cpp : : : : algorithms_intersection_linear_linear ]
+diff -uNr boost_1_62_0/libs/lockfree/test/Jamfile.v2 boost_1_62_0/libs/lockfree/test/Jamfile.v2
+--- boost_1_62_0/libs/lockfree/test/Jamfile.v2 2015-06-11 12:00:57.000000000 -0400
++++ boost_1_62_0/libs/lockfree/test/Jamfile.v2 2016-01-08 12:38:25.909320596 -0500
+@@ -29,6 +29,7 @@
+ : # requirements
+ <toolset>acc:<linkflags>-lrt
+ <toolset>acc-pa_risc:<linkflags>-lrt
++ <toolset>xlcpp:<linkflags>-latomic
+ <target-os>windows,<toolset>gcc:<linkflags>"-lole32 -loleaut32 -lpsapi -ladvapi32"
+ <host-os>hpux,<toolset>gcc:<linkflags>"-Wl,+as,mpas"
+ <library>../../thread/build//boost_thread/
+diff -uNr boost_1_62_0/libs/spirit/test/Jamfile boost_1_62_0/libs/spirit/test/Jamfile
+--- boost_1_62_0/libs/spirit/test/Jamfile 2015-07-14 18:38:56.000000000 -0400
++++ boost_1_62_0/libs/spirit/test/Jamfile 2016-01-08 12:52:18.540491314 -0500
+@@ -218,9 +218,9 @@
+ [ run karma/sequence1.cpp : : : : karma_sequence1 ]
+ [ run karma/sequence2.cpp : : : : karma_sequence2 ]
+ [ run karma/stream.cpp : : : : karma_stream ]
+- [ run karma/symbols1.cpp : : : : karma_symbols1 ]
+- [ run karma/symbols2.cpp : : : : karma_symbols2 ]
+- [ run karma/symbols3.cpp : : : : karma_symbols3 ]
++ [ run karma/symbols1.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi : karma_symbols1 ]
++ [ run karma/symbols2.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi : karma_symbols2 ]
++ [ run karma/symbols3.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi : karma_symbols3 ]
+ [ run karma/tricky_alignment.cpp : : : : karma_tricky_alignment ]
+ [ run karma/uint_radix.cpp : : : : karma_uint_radix ]
+ [ run karma/utree1.cpp : : : : karma_utree1 ]
+diff -uNr boost_1_62_0/libs/test/test/Jamfile.v2 boost_1_62_0/libs/test/test/Jamfile.v2
+--- boost_1_62_0/libs/test/test/Jamfile.v2 2015-07-21 17:41:49.000000000 -0400
++++ boost_1_62_0/libs/test/test/Jamfile.v2 2016-01-08 12:53:36.068217432 -0500
+@@ -47,6 +47,7 @@
+ <toolset>gcc:<cxxflags>-Wno-variadic-macros
+ <toolset>clang:<cxxflags>-Wno-c99-extensions
+ <toolset>clang:<cxxflags>-Wno-variadic-macros
++ <toolset>xlcpp:<cxxflags>-std=c++11
+ # <toolset>gcc:<cxxflags>--coverage
+ <warnings>all
+ $(extra-options)
+diff -uNr boost_1_62_0/libs/type_index/test/Jamfile.v2 boost_1_62_0/libs/type_index/test/Jamfile.v2
+--- boost_1_62_0/libs/type_index/test/Jamfile.v2 2015-07-30 16:00:41.000000000 -0400
++++ boost_1_62_0/libs/type_index/test/Jamfile.v2 2016-01-08 12:54:28.968296112 -0500
+@@ -13,9 +13,9 @@
+
+ # Making own `nortti` that is link compatible.
+ # We explicitly define BOOST_NO_RTTI because it sometimes can not be detected by build system.
+-nortti = <toolset>gcc:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>clang:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>intel:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>darwin:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>msvc:<cxxflags>/GR- ;
++nortti = <toolset>gcc:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>clang:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>intel:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>darwin:"<cxxflags>-fno-rtti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>msvc:<cxxflags>/GR- <toolset>xlcpp:"<cxxflags>-qnortti -DBOOST_NO_RTTI -DBOOST_NO_TYPEID" ;
+
+-norttidefines = <toolset>gcc:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>clang:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>intel:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>darwin:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>msvc:<cxxflags>-DBOOST_NO_RTTI ;
++norttidefines = <toolset>gcc:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>clang:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>intel:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>darwin:"<cxxflags>-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" <toolset>msvc:<cxxflags>-DBOOST_NO_RTTI <toolset>xlcpp:<cxxflags>"-DBOOST_NO_RTTI -DBOOST_NO_TYPEID" ;
+
+
+ # Making libraries that CANNOT work between rtti-on/rtti-off modules
+diff -uNr boost_1_62_0/libs/utility/test/Jamfile.v2 boost_1_62_0/libs/utility/test/Jamfile.v2
+--- boost_1_62_0/libs/utility/test/Jamfile.v2 2015-02-27 01:26:11.000000000 -0500
++++ boost_1_62_0/libs/utility/test/Jamfile.v2 2016-01-08 12:54:59.380260948 -0500
+@@ -33,7 +33,7 @@
+ [ run string_view_test1.cpp unit_test_framework ]
+ [ run string_view_test2.cpp unit_test_framework ]
+ [ run string_view_test_io.cpp unit_test_framework ]
+- [ run ../value_init_test.cpp ]
++ [ run ../value_init_test.cpp : : : <toolset>xlcpp:<cxxflags>-qalias=noansi ]
+ [ run ../value_init_workaround_test.cpp ]
+ [ run ../initialized_test.cpp ]
+ [ compile-fail ../value_init_test_fail1.cpp ]
+diff -uNr boost_1_62_0/tools/build/src/engine/boehm_gc/os_dep.c boost_1_62_0/tools/build/src/engine/boehm_gc/os_dep.c
+--- boost_1_62_0/tools/build/src/engine/boehm_gc/os_dep.c 2015-08-11 09:53:51.000000000 -0400
++++ boost_1_62_0/tools/build/src/engine/boehm_gc/os_dep.c 2016-01-10 01:57:04.489001841 -0500
+@@ -503,7 +503,7 @@
+
+ # include <stddef.h>
+
+-# if !defined(__IBMC__) && !defined(__WATCOMC__) /* e.g. EMX */
++# if !(defined(__IBMC__) && !defined(__ibmxl__)) && !defined(__WATCOMC__) /* e.g. EMX */
+
+ struct exe_hdr {
+ unsigned short magic_number;
+diff -uNr boost_1_62_0/tools/build/src/tools/xlcpp.jam boost_1_62_0/tools/build/src/tools/xlcpp.jam
+--- boost_1_62_0/tools/build/src/tools/xlcpp.jam 2015-08-11 09:53:51.000000000 -0400
++++ boost_1_62_0/tools/build/src/tools/xlcpp.jam 2016-01-20 15:09:00.897879191 -0500
+@@ -41,7 +41,7 @@
+
+ # Declare flags
+ flags xlcpp CFLAGS <optimization>off : -qNOOPTimize ;
+-flags xlcpp CFLAGS <optimization>speed : ;
++flags xlcpp CFLAGS <optimization>speed : ;
+ flags xlcpp CFLAGS <optimization>space : -O2 -qcompact ;
+
+ # Discretionary inlining (not recommended)
+@@ -51,8 +51,8 @@
+ flags xlcpp CFLAGS <inlining>full : ;
+
+ # Exception handling
+-flags xlcpp C++FLAGS <exception-handling>off : -qnoeh ;
+-flags xlcpp C++FLAGS <exception-handling>on : -qeh ;
++flags xlcpp C++FLAGS <exception-handling>off : -fno-exceptions ;
++flags xlcpp C++FLAGS <exception-handling>on : -fexceptions ;
+
+ # Run-time Type Identification
+ flags xlcpp C++FLAGS <rtti>off : -qnortti ;
+@@ -108,6 +108,8 @@
+ flags xlcpp HDRS <include> ;
+ flags xlcpp STDHDRS <sysinclude> ;
+ flags xlcpp.link OPTIONS <linkflags> ;
++flags xlcpp.link RPATH_LINK <xdll-path> ;
++flags xlcpp.link RPATH <xdll-path> ;
+ flags xlcpp ARFLAGS <arflags> ;
+
+ flags xlcpp LIBPATH <library-path> ;
+@@ -116,10 +118,10 @@
+ flags xlcpp FINDLIBS <find-static-library> ;
+
+ # Select the compiler name according to the threading model.
+-flags xlcpp VA_C_COMPILER <threading>single : xlc ;
+-flags xlcpp VA_C_COMPILER <threading>multi : xlc ;
+-flags xlcpp VA_CXX_COMPILER <threading>single : xlC ;
+-flags xlcpp VA_CXX_COMPILER <threading>multi : xlC ;
++flags xlcpp VA_C_COMPILER <threading>single : xlc ;
++flags xlcpp VA_C_COMPILER <threading>multi : xlc_r ;
++flags xlcpp VA_CXX_COMPILER <threading>single : xlC ;
++flags xlcpp VA_CXX_COMPILER <threading>multi : xlC_r ;
+
+ SPACE = " " ;
+
+@@ -127,12 +129,12 @@
+
+ actions xlcpp.link bind NEEDLIBS
+ {
+- $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
++ $(VA_CXX_COMPILER) $(EXE-LINKFLAGS) $(LINKFLAGS) -Wl,-R$(SPACE)-Wl,"$(RPATH)" -Wl,-rpath-link$(SPACE)-Wl,"$(RPATH_LINK)" -o "$(<[1])" -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
+ }
+
+ actions xlcpp.link.dll bind NEEDLIBS
+ {
+- xlC -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
++ $(VA_CXX_COMPILER) -G $(LINKFLAGS) -o "$(<[1])" $(HAVE_SONAME)-Wl,-soname$(SPACE)-Wl,$(<[-1]:D=) -L$(LIBPATH) -L$(STDLIBPATH) "$(>)" "$(NEEDLIBS)" "$(NEEDLIBS)" -l$(FINDLIBS) $(OPTIONS) $(USER_OPTIONS)
+ }
+
+ actions xlcpp.compile.c
diff --git a/var/spack/repos/builtin/packages/boostmplcartesianproduct/package.py b/var/spack/repos/builtin/packages/boostmplcartesianproduct/package.py
new file mode 100644
index 0000000000..7ddc65b439
--- /dev/null
+++ b/var/spack/repos/builtin/packages/boostmplcartesianproduct/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Boostmplcartesianproduct(Package):
+ """Cartesian_product is an extension to the Boost.MPL library and as such
+ requires a version of the Boost libraries on your system.
+ """
+
+ homepage = "http://www.organicvectory.com/index.php?option=com_content&view=article&id=75:boostmplcartesianproduct&catid=42:boost&Itemid=78"
+ url = "https://github.com/quinoacomputing/BoostMPLCartesianProduct/tarball/20161205"
+
+ version('20161205', 'b0c8534ee807484ffd161723cbc8fc04')
+
+ def install(self, spec, prefix):
+ install_tree('boost/mpl', join_path(prefix.include, 'boost', 'mpl'))
diff --git a/var/spack/repos/builtin/packages/bowtie/package.py b/var/spack/repos/builtin/packages/bowtie/package.py
new file mode 100644
index 0000000000..8958352bd1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bowtie/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Bowtie(MakefilePackage):
+ """Bowtie is an ultrafast, memory-efficient short read aligner
+ for short DNA sequences (reads) from next-gen sequencers."""
+
+ homepage = "https://sourceforge.net/projects/bowtie-bio/"
+ url = "https://downloads.sourceforge.net/project/bowtie-bio/bowtie/1.2.0/bowtie-1.2-source.zip"
+
+ version('1.2', '6d97f0ea1a65af11d17cc270cfac4af9')
+
+ variant('tbb', default=False, description='Use Intel thread building block')
+
+ depends_on('tbb', when='+tbb')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ makefile.filter('CC = .*', 'CC = ' + env['CC'])
+ makefile.filter('CXX = .*', 'CPP = ' + env['CXX'])
+
+ def build(self, spec, prefix):
+ if '+tbb' in spec:
+ make()
+ else:
+ make('NO_TBB=1')
+
+ def install(self, spec, prefix):
+ make('prefix={0}'.format(self.prefix), 'install')
diff --git a/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.2.5.patch
index 290be39c73..290be39c73 100644
--- a/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.5.patch
+++ b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.2.5.patch
diff --git a/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.0.patch b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.0.patch
new file mode 100644
index 0000000000..58bcee6572
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.0.patch
@@ -0,0 +1,16 @@
+--- Makefile.orig 2017-10-19 16:22:27.589185696 -0700
++++ Makefile 2017-10-19 16:23:26.094227199 -0700
+@@ -25,10 +25,10 @@
+ bindir = $(prefix)/bin
+
+ INC =
+-GCC_PREFIX = $(shell dirname `which gcc`)
++GCC_PREFIX =
+ GCC_SUFFIX =
+-CC ?= $(GCC_PREFIX)/gcc$(GCC_SUFFIX)
+-CPP ?= $(GCC_PREFIX)/g++$(GCC_SUFFIX)
++CC = cc
++CPP = c++
+ CXX ?= $(CPP)
+ HEADERS = $(wildcard *.h)
+ BOWTIE_MM = 1
diff --git a/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.1.patch b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.1.patch
new file mode 100644
index 0000000000..006ebccb9e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bowtie2/bowtie2-2.3.1.patch
@@ -0,0 +1,17 @@
+--- Makefile.orig 2017-03-24 20:43:00.304532976 -0700
++++ Makefile 2017-03-24 20:48:59.644532037 -0700
+@@ -26,10 +26,10 @@
+
+ INC =
+-LIBS = -lreadline -ltermcap -lz
++LIBS = -lreadline -lz
+-GCC_PREFIX = $(shell dirname `which gcc`)
++GCC_PREFIX =
+ GCC_SUFFIX =
+-CC ?= $(GCC_PREFIX)/gcc$(GCC_SUFFIX)
+-CPP ?= $(GCC_PREFIX)/g++$(GCC_SUFFIX)
++CC = cc
++CPP = c++
+ CXX ?= $(CPP)
+ HEADERS = $(wildcard *.h)
+ BOWTIE_MM = 1
diff --git a/var/spack/repos/builtin/packages/bowtie2/package.py b/var/spack/repos/builtin/packages/bowtie2/package.py
index a8a1a34ed4..677020f60f 100644
--- a/var/spack/repos/builtin/packages/bowtie2/package.py
+++ b/var/spack/repos/builtin/packages/bowtie2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,12 +27,49 @@ from glob import glob
class Bowtie2(Package):
- """Description"""
+ """Bowtie 2 is an ultrafast and memory-efficient tool for aligning
+ sequencing reads to long reference sequences"""
+
homepage = "bowtie-bio.sourceforge.net/bowtie2/index.shtml"
- version('2.2.5', '51fa97a862d248d7ee660efc1147c75f',
- url="http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.2.5/bowtie2-2.2.5-source.zip")
+ url = "http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.3.1/bowtie2-2.3.1-source.zip"
+
+ version('2.3.1', 'b4efa22612e98e0c23de3d2c9f2f2478')
+ version('2.3.0', '3ab33f30f00f3c30fec1355b4e569ea2')
+ version('2.2.5', '51fa97a862d248d7ee660efc1147c75f')
+
+ depends_on('tbb', when='@2.3.0:')
+ depends_on('readline', when='@2.3.1:')
+ depends_on('perl', type='run')
+ depends_on('python', type='run')
+ depends_on('zlib', when='@2.3.1:')
+
+ patch('bowtie2-2.2.5.patch', when='@2.2.5', level=0)
+ patch('bowtie2-2.3.1.patch', when='@2.3.1', level=0)
+ patch('bowtie2-2.3.0.patch', when='@2.3.0', level=0)
+
+ # seems to have trouble with 6's -std=gnu++14
+ conflicts('%gcc@6:')
+
+ @run_before('install')
+ def filter_sbang(self):
+ """Run before install so that the standard Spack sbang install hook
+ can fix up the path to the perl|python binary.
+ """
+
+ with working_dir(self.stage.source_path):
+ kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
+
+ match = '^#!/usr/bin/env perl'
+ perl = self.spec['perl'].command
+ substitute = "#!{perl}".format(perl=perl)
+ files = ['bowtie2', ]
+ filter_file(match, substitute, *files, **kwargs)
- patch('bowtie2-2.5.patch', when='@2.2.5', level=0)
+ match = '^#!/usr/bin/env python'
+ python = self.spec['python'].command
+ substitute = "#!{python}".format(python=python)
+ files = ['bowtie2-build', 'bowtie2-inspect']
+ filter_file(match, substitute, *files, **kwargs)
def install(self, spec, prefix):
make()
diff --git a/var/spack/repos/builtin/packages/boxlib/package.py b/var/spack/repos/builtin/packages/boxlib/package.py
index 8d46014d3b..833a027c29 100644
--- a/var/spack/repos/builtin/packages/boxlib/package.py
+++ b/var/spack/repos/builtin/packages/boxlib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,12 +36,19 @@ class Boxlib(CMakePackage):
depends_on('mpi')
+ variant('dims',
+ default='3',
+ values=('1', '2', '3'),
+ multi=False,
+ description='Number of spatial dimensions'
+ )
+
def cmake_args(self):
spec = self.spec
options = []
options.extend([
- # '-DBL_SPACEDIM=3',
+ '-DBL_SPACEDIM=%d' % int(spec.variants['dims'].value),
'-DENABLE_POSITION_INDEPENDENT_CODE=ON',
'-DENABLE_FBASELIB=ON',
'-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
diff --git a/var/spack/repos/builtin/packages/bpp-core/package.py b/var/spack/repos/builtin/packages/bpp-core/package.py
index f716a2ee05..96a775cb60 100644
--- a/var/spack/repos/builtin/packages/bpp-core/package.py
+++ b/var/spack/repos/builtin/packages/bpp-core/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class BppCore(Package):
+class BppCore(CMakePackage):
"""Bio++ core library."""
homepage = "http://biopp.univ-montp2.fr/wiki/index.php/Installation"
@@ -33,9 +33,7 @@ class BppCore(Package):
version('2.2.0', '5789ed2ae8687d13664140cd77203477')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.6:', type='build')
- def install(self, spec, prefix):
- cmake('-DBUILD_TESTING=FALSE', '.', *std_cmake_args)
- make()
- make('install')
+ def cmake_args(self):
+ return ['-DBUILD_TESTING=FALSE']
diff --git a/var/spack/repos/builtin/packages/bpp-phyl/package.py b/var/spack/repos/builtin/packages/bpp-phyl/package.py
index 4ff77f1540..3453f85a9d 100644
--- a/var/spack/repos/builtin/packages/bpp-phyl/package.py
+++ b/var/spack/repos/builtin/packages/bpp-phyl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class BppPhyl(Package):
+class BppPhyl(CMakePackage):
"""Bio++ phylogeny library."""
homepage = "http://biopp.univ-montp2.fr/wiki/index.php/Installation"
@@ -33,11 +33,9 @@ class BppPhyl(Package):
version('2.2.0', '5c40667ec0bf37e0ecaba321be932770')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.6:', type='build')
depends_on('bpp-core')
depends_on('bpp-seq')
- def install(self, spec, prefix):
- cmake('-DBUILD_TESTING=FALSE', '.', *std_cmake_args)
- make()
- make('install')
+ def cmake_args(self):
+ return ['-DBUILD_TESTING=FALSE']
diff --git a/var/spack/repos/builtin/packages/bpp-seq/package.py b/var/spack/repos/builtin/packages/bpp-seq/package.py
index 15c99da2b1..bd3219523f 100644
--- a/var/spack/repos/builtin/packages/bpp-seq/package.py
+++ b/var/spack/repos/builtin/packages/bpp-seq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class BppSeq(Package):
+class BppSeq(CMakePackage):
"""Bio++ seq library."""
homepage = "http://biopp.univ-montp2.fr/wiki/index.php/Installation"
@@ -33,10 +33,8 @@ class BppSeq(Package):
version('2.2.0', '44adef0ff4d5ca4e69ccf258c9270633')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.6:', type='build')
depends_on('bpp-core')
- def install(self, spec, prefix):
- cmake('-DBUILD_TESTING=FALSE', '.', *std_cmake_args)
- make()
- make('install')
+ def cmake_args(self):
+ return ['-DBUILD_TESTING=FALSE']
diff --git a/var/spack/repos/builtin/packages/bpp-suite/package.py b/var/spack/repos/builtin/packages/bpp-suite/package.py
index d15030622e..13fc341cfa 100644
--- a/var/spack/repos/builtin/packages/bpp-suite/package.py
+++ b/var/spack/repos/builtin/packages/bpp-suite/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class BppSuite(Package):
+class BppSuite(CMakePackage):
"""BppSuite is a suite of ready-to-use programs for phylogenetic and
sequence analysis."""
@@ -34,13 +34,8 @@ class BppSuite(Package):
version('2.2.0', 'd8b29ad7ccf5bd3a7beb701350c9e2a4')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.6:', type='build')
depends_on('texinfo', type='build')
depends_on('bpp-core')
depends_on('bpp-seq')
depends_on('bpp-phyl')
-
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/braker/package.py b/var/spack/repos/builtin/packages/braker/package.py
new file mode 100644
index 0000000000..97fe9f710a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/braker/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Braker(Package):
+ """BRAKER is a pipeline for unsupervised RNA-Seq-based genome annotation
+ that combines the advantages of GeneMark-ET and AUGUSTUS"""
+
+ homepage = "http://exon.gatech.edu/braker1.html"
+ url = "http://bioinf.uni-greifswald.de/augustus/binaries/BRAKER1_v1.11.tar.gz"
+
+ version('1.11', '297efe4cabdd239b710ac2c45d81f6a5')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('augustus')
+ depends_on('genemark-et')
+ depends_on('bamtools')
+ depends_on('samtools')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.lib)
+ install('braker.pl', prefix.bin)
+ install('filterGenemark.pl', prefix.bin)
+ install('filterIntronsFindStrand.pl', prefix.bin)
+ install('helpMod.pm', prefix.lib)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PERL5LIB', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/branson/package.py b/var/spack/repos/builtin/packages/branson/package.py
new file mode 100644
index 0000000000..7eedf7135e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/branson/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Branson(CMakePackage):
+ """Branson's purpose is to study different algorithms for parallel Monte
+ Carlo transport. Currently it contains particle passing and mesh passing
+ methods for domain decomposition."""
+
+ homepage = "https://github.com/lanl/branson"
+ url = "https://github.com/lanl/branson/archive/1.01.zip"
+
+ tags = ['proxy-app']
+
+ version('develop', git='https://github.com/lanl/branson', branch='develop')
+ version('1.01', 'cf7095a887a8dd7d417267615bd0452a')
+
+ depends_on('mpi')
+ depends_on('boost')
+ depends_on('metis')
+ depends_on('parmetis')
+
+ root_cmakelists_dir = 'src'
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+ args.append('-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc)
+ args.append('-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx)
+ args.append('-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc)
+ return args
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ mkdir(prefix.doc)
+ install('spack-build/BRANSON', prefix.bin)
+ install('LICENSE.txt', prefix.doc)
+ install('README.md', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/brigand/package.py b/var/spack/repos/builtin/packages/brigand/package.py
new file mode 100644
index 0000000000..4c946d4f66
--- /dev/null
+++ b/var/spack/repos/builtin/packages/brigand/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Brigand(Package):
+ """
+ Brigand Meta-programming library
+ """
+
+ homepage = "https://github.com/edouarda/brigand"
+ url = "https://github.com/edouarda/brigand/archive/1.0.0.tar.gz"
+
+ version('master', git='https://github.com/edouarda/brigand.git',
+ branch='master')
+ version('1.3.0', '0bea9713b3b712229aed289e218d577b')
+ version('1.2.0', '32c0f73e7e666d33ff123334f5c9c92f')
+ version('1.1.0', '073b7c8e2cbda3a81bbeb1ea5b9ca0eb')
+ version('1.0.0', 'eeab3d437090f0bb7bc4eb69a5cd9c49')
+
+ def install(self, spec, prefix):
+ install_tree('include', prefix.include)
diff --git a/var/spack/repos/builtin/packages/bsseeker2/package.py b/var/spack/repos/builtin/packages/bsseeker2/package.py
new file mode 100644
index 0000000000..48b2fc1e6f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bsseeker2/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Bsseeker2(Package):
+ """A versatile aligning pipeline for bisulfite sequencing data."""
+
+ homepage = "http://pellegrini.mcdb.ucla.edu/BS_Seeker2"
+ url = "https://github.com/BSSeeker/BSseeker2/archive/v2.1.2.tar.gz"
+
+ version('2.1.2', '5f7f0ef4071711e56b59c5c16b7f34a7')
+
+ depends_on('python@2.6:2.999', type=('build', 'run'))
+ depends_on('py-pysam', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('Antisense.py', prefix.bin)
+ install_tree('bs_index', prefix.bin.bs_index)
+ install('bs_seeker2-build.py', prefix.bin)
+ install_tree('bs_utils', prefix.bin.bs_utils)
+ install_tree('galaxy', prefix.bin.galaxy)
+ install_tree('bs_align', prefix.bin.bs_align)
+ install('bs_seeker2-align.py', prefix.bin)
+ install('bs_seeker2-call_methylation.py', prefix.bin)
+ install('FilterReads.py', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/bucky/package.py b/var/spack/repos/builtin/packages/bucky/package.py
new file mode 100644
index 0000000000..eeac2ab2b6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/bucky/package.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/spack/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 Bucky(MakefilePackage):
+ """BUCKy is a free program to combine molecular data from multiple loci.
+ BUCKy estimates the dominant history of sampled individuals, and how
+ much of the genome supports each relationship, using Bayesian
+ concordance analysis."""
+
+ homepage = "http://www.stat.wisc.edu/~ane/bucky/index.html"
+ url = "http://dstats.net/download/http://www.stat.wisc.edu/~ane/bucky/v1.4/bucky-1.4.4.tgz"
+
+ version('1.4.4', 'f0c910dd1d411d112637826519943a6d')
+
+ # Compilation requires gcc
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ build_directory = 'src'
+
+ def install(self, spec, prefix):
+ with working_dir('src'):
+ mkdirp(prefix.bin)
+ install('bucky', prefix.bin)
+ install('mbsum', prefix.bin)
+ install_tree('data', prefix.data)
+ install_tree('doc', prefix.doc)
+ install_tree('scripts', prefix.scripts)
diff --git a/var/spack/repos/builtin/packages/busco/package.py b/var/spack/repos/builtin/packages/busco/package.py
new file mode 100644
index 0000000000..2b50abb40a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/busco/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 Busco(PythonPackage):
+ """Assesses genome assembly and annotation completeness with Benchmarking
+ Universal Single-Copy Orthologs"""
+
+ homepage = "http://busco.ezlab.org/"
+ url = "https://gitlab.com/ezlab/busco"
+
+ version('3.0.1', git='https://gitlab.com/ezlab/busco.git', commit='078252e00399550d7b0e8941cd4d986c8e868a83')
+ version('2.0.1', git='https://gitlab.com/ezlab/busco.git', commit='89aa1ab2527f03a87a214ca90a504ad236582a11')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('blast-plus')
+ depends_on('hmmer')
+ depends_on('augustus')
+
+ def build(self, spec, prefix):
+ if self.spec.satisfies('@2.0.1'):
+ pass
+
+ def install(self, spec, prefix):
+ if self.spec.satisfies('@3.0.1'):
+ with working_dir('scripts'):
+ mkdirp(prefix.bin)
+ install('generate_plot.py', prefix.bin)
+ install('run_BUSCO.py', prefix.bin)
+ install_tree('config', prefix.config)
+ args = self.install_args(spec, prefix)
+ self.setup_py('install', *args)
+ if self.spec.satisfies('@2.0.1'):
+ mkdirp(prefix.bin)
+ install('BUSCO.py', prefix.bin)
+ install('BUSCO_plot.py', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/butter/package.py b/var/spack/repos/builtin/packages/butter/package.py
new file mode 100644
index 0000000000..602f68c5b5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/butter/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Butter(Package):
+ """butter: Bowtie UTilizing iTerative placEment of Repetitive small rnas.
+ A wrapper for bowtie to produce small RNA-seq alignments where
+ multimapped small RNAs tend to be placed near regions of confidently
+ high density."""
+
+ homepage = "https://github.com/MikeAxtell/butter"
+ url = "https://github.com/MikeAxtell/butter/archive/v0.3.3.tar.gz"
+
+ version('0.3.3', '806ff3cb7afc1d8b75126404056c629d')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('samtools')
+ depends_on('bowtie')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('butter', prefix.bin)
+ install('bam2wig', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/bwa/package.py b/var/spack/repos/builtin/packages/bwa/package.py
index bb6763629b..7f260fcdc9 100644
--- a/var/spack/repos/builtin/packages/bwa/package.py
+++ b/var/spack/repos/builtin/packages/bwa/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,14 @@ class Bwa(Package):
homepage = "http://github.com/lh3/bwa"
url = "https://github.com/lh3/bwa/releases/download/v0.7.15/bwa-0.7.15.tar.bz2"
- version('0.7.15', 'fcf470a46a1dbe2f96a1c5b87c530554')
+ version('0.7.17', '82cba7ef695538e6a38b9d4156837381',
+ url="https://github.com/lh3/bwa/releases/download/v0.7.17/bwa-0.7.17.tar.bz2")
+ version('0.7.15', 'fcf470a46a1dbe2f96a1c5b87c530554',
+ url="https://github.com/lh3/bwa/releases/download/v0.7.15/bwa-0.7.15.tar.bz2")
+ version('0.7.13', 'f094f609438511766c434178a3635ab4',
+ url="https://github.com/lh3/bwa/releases/download/v0.7.13/bwa-0.7.13.tar.bz2")
+ version('0.7.12', 'e24a587baaad411d5da89516ad7a261a',
+ url='https://github.com/lh3/bwa/archive/0.7.12.tar.gz')
depends_on('zlib')
@@ -48,5 +55,5 @@ class Bwa(Package):
mkdirp(prefix.doc)
install('README.md', prefix.doc)
install('NEWS.md', prefix.doc)
- mkdirp(prefix.man1)
- install('bwa.1', prefix.man1)
+ mkdirp(prefix.man.man1)
+ install('bwa.1', prefix.man.man1)
diff --git a/var/spack/repos/builtin/packages/byobu/package.py b/var/spack/repos/builtin/packages/byobu/package.py
new file mode 100644
index 0000000000..90f91db9e3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/byobu/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Byobu(AutotoolsPackage):
+ """Byobu: Text-based window manager and terminal multiplexer."""
+
+ homepage = "http://www.byobu.co"
+ url = "https://launchpad.net/byobu/trunk/5.123/+download/byobu_5.123.orig.tar.gz"
+
+ version('5.123', '961e0072c01c78c9ce4c20d1aa1b0dc4')
+
+ depends_on('tmux', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/bzip2/package.py b/var/spack/repos/builtin/packages/bzip2/package.py
index 9e5894a6a8..d44e97207f 100644
--- a/var/spack/repos/builtin/packages/bzip2/package.py
+++ b/var/spack/repos/builtin/packages/bzip2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,15 +34,31 @@ class Bzip2(Package):
homepage = "http://www.bzip.org"
url = "http://www.bzip.org/1.0.6/bzip2-1.0.6.tar.gz"
+ list_url = "http://www.bzip.org/downloads.html"
version('1.0.6', '00b516f4704d4a7cb50a1d97e6e8e15b')
+ variant('shared', default=True, description='Enables the build of shared libraries.')
+
+ # override default implementation
+ @property
+ def libs(self):
+ shared = '+shared' in self.spec
+ return find_libraries(
+ 'libbz2', root=self.prefix, shared=shared, recurse=True
+ )
+
def patch(self):
# bzip2 comes with two separate Makefiles for static and dynamic builds
# Tell both to use Spack's compiler wrapper instead of GCC
filter_file(r'^CC=gcc', 'CC=cc', 'Makefile')
filter_file(r'^CC=gcc', 'CC=cc', 'Makefile-libbz2_so')
+ # The Makefiles use GCC flags that are incompatible with PGI
+ if self.compiler.name == 'pgi':
+ filter_file('-Wall -Winline', '-Minform=inform', 'Makefile')
+ filter_file('-Wall -Winline', '-Minform=inform', 'Makefile-libbz2_so') # noqa
+
# Patch the link line to use RPATHs on macOS
if 'darwin' in self.spec.architecture:
v = self.spec.version
@@ -71,27 +87,30 @@ class Bzip2(Package):
def install(self, spec, prefix):
# Build the dynamic library first
- make('-f', 'Makefile-libbz2_so')
+ if '+shared' in spec:
+ make('-f', 'Makefile-libbz2_so')
+
# Build the static library and everything else
make()
make('install', 'PREFIX={0}'.format(prefix))
- install('bzip2-shared', join_path(prefix.bin, 'bzip2'))
+ if '+shared' in spec:
+ install('bzip2-shared', join_path(prefix.bin, 'bzip2'))
- v1, v2, v3 = (self.spec.version.up_to(i) for i in (1, 2, 3))
- if 'darwin' in self.spec.architecture:
- lib = 'libbz2.dylib'
- lib1, lib2, lib3 = ('libbz2.{0}.dylib'.format(v)
- for v in (v1, v2, v3))
- else:
- lib = 'libbz2.so'
- lib1, lib2, lib3 = ('libbz2.so.{0}'.format(v)
- for v in (v1, v2, v3))
-
- install(lib3, join_path(prefix.lib, lib3))
- with working_dir(prefix.lib):
- for l in (lib, lib1, lib2):
- symlink(lib3, l)
+ v1, v2, v3 = (self.spec.version.up_to(i) for i in (1, 2, 3))
+ if 'darwin' in self.spec.architecture:
+ lib = 'libbz2.dylib'
+ lib1, lib2, lib3 = ('libbz2.{0}.dylib'.format(v)
+ for v in (v1, v2, v3))
+ else:
+ lib = 'libbz2.so'
+ lib1, lib2, lib3 = ('libbz2.so.{0}'.format(v)
+ for v in (v1, v2, v3))
+
+ install(lib3, join_path(prefix.lib, lib3))
+ with working_dir(prefix.lib):
+ for l in (lib, lib1, lib2):
+ symlink(lib3, l)
with working_dir(prefix.bin):
force_remove('bunzip2', 'bzcat')
diff --git a/var/spack/repos/builtin/packages/c-blosc/package.py b/var/spack/repos/builtin/packages/c-blosc/package.py
index 4ebf3811a5..8bc5a76ef7 100644
--- a/var/spack/repos/builtin/packages/c-blosc/package.py
+++ b/var/spack/repos/builtin/packages/c-blosc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,25 +28,35 @@ import sys
from spack import *
-class CBlosc(Package):
+class CBlosc(CMakePackage):
"""Blosc, an extremely fast, multi-threaded, meta-compressor library"""
homepage = "http://www.blosc.org"
- url = "https://github.com/Blosc/c-blosc/archive/v1.9.2.tar.gz"
+ url = "https://github.com/Blosc/c-blosc/archive/v1.11.1.tar.gz"
- version('1.9.2', 'dd2d83069d74b36b8093f1c6b49defc5')
- version('1.9.1', '7d708d3daadfacf984a87b71b1734ce2')
- version('1.9.0', 'e4c1dc8e2c468e5cfa2bf05eeee5357a')
- version('1.8.1', 'd73d5be01359cf271e9386c90dcf5b05')
- version('1.8.0', '5b92ecb287695ba20cc33d30bf221c4f')
+ version('1.11.1', 'e236550640afa50155f3881f2d300206')
+ version('1.9.2', 'dd2d83069d74b36b8093f1c6b49defc5')
+ version('1.9.1', '7d708d3daadfacf984a87b71b1734ce2')
+ version('1.9.0', 'e4c1dc8e2c468e5cfa2bf05eeee5357a')
+ version('1.8.1', 'd73d5be01359cf271e9386c90dcf5b05')
+ version('1.8.0', '5b92ecb287695ba20cc33d30bf221c4f')
- depends_on("cmake", type='build')
- depends_on("snappy")
- depends_on("zlib")
+ variant('avx2', default=True, description='Enable AVX2 support')
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
+ depends_on('cmake@2.8.10:', type='build')
+ depends_on('snappy')
+ depends_on('zlib')
- make()
- make("install")
+ def cmake_args(self):
+ args = []
+
+ if '+avx2' in self.spec:
+ args.append('-DDEACTIVATE_AVX2=OFF')
+ else:
+ args.append('-DDEACTIVATE_AVX2=ON')
+
+ return args
+
+ @run_after('install')
+ def darwin_fix(self):
if sys.platform == 'darwin':
- fix_darwin_install_name(prefix.lib)
+ fix_darwin_install_name(self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/caffe/package.py b/var/spack/repos/builtin/packages/caffe/package.py
new file mode 100644
index 0000000000..730b293adb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/caffe/package.py
@@ -0,0 +1,103 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 Caffe(CMakePackage):
+ """Caffe is a deep learning framework made with expression, speed, and
+ modularity in mind. It is developed by the Berkeley Vision and Learning
+ Center (BVLC) and by community contributors."""
+
+ homepage = "http://caffe.berkeleyvision.org"
+ url = "https://github.com/BVLC/caffe/archive/1.0.tar.gz"
+
+ version('1.0', '5fbb0e32e7cd8de3de46e6fe6e4cd2b5')
+ version('rc5', '692bd3580b7576485cde6b1e03eb5a6d')
+ version('rc4', 'd86eeb38b1400097d32ffcabdec75b55')
+ version('rc3', '84e39223115753b48312a8bf48c31f59')
+ version('rc2', 'c331932e34b5e2f5022fcc34c419080f')
+
+ variant('cuda', default=False,
+ description='Builds with support for GPUs via CUDA and cuDNN')
+ variant('opencv', default=True,
+ description='Build with OpenCV support')
+ variant('leveldb', default=True,
+ description="Build with levelDB")
+ variant('lmdb', default=True,
+ description="Build with lmdb")
+ variant('python', default=False,
+ description='Build python wrapper and caffe python layer')
+ variant('matlab', default=False,
+ description='Build Matlab wrapper')
+
+ depends_on('boost')
+ depends_on('boost +python', when='+python')
+ depends_on('cuda', when='+cuda')
+ depends_on('blas')
+ depends_on('protobuf')
+ depends_on('glog')
+ depends_on('gflags')
+ depends_on('hdf5')
+
+ # Optional dependencies
+ depends_on('opencv@3.2.0+core+highgui+imgproc', when='+opencv')
+ depends_on('leveldb', when='+leveldb')
+ depends_on('lmdb', when='+lmdb')
+ depends_on('python@2.7:', when='+python')
+ depends_on('py-numpy@1.7:', when='+python', type=('build', 'run'))
+ depends_on('matlab', when='+matlab')
+
+ extends('python', when='+python')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = ['-DBLAS={0}'.format('open' if spec['blas'].name == 'openblas'
+ else spec['blas'].name),
+ '-DCPU_ONLY=%s' % ('~cuda' in spec),
+ '-DUSE_CUDNN=%s' % ('+cuda' in spec),
+ '-DBUILD_python=%s' % ('+python' in spec),
+ '-DBUILD_python_layer=%s' % ('+python' in spec),
+ '-DBUILD_matlab=%s' % ('+matlab' in spec),
+ '-DUSE_OPENCV=%s' % ('+opencv' in spec),
+ '-DUSE_LEVELDB=%s' % ('+leveldb' in spec),
+ '-DUSE_LMDB=%s' % ('+lmdb' in spec),
+ '-DGFLAGS_ROOT_DIR=%s' % spec['gflags'].prefix,
+ '-DGLOG_ROOT_DIR=%s' % spec['glog'].prefix,
+ ]
+
+ if spec.satisfies('^openblas'):
+ env['OpenBLAS_HOME'] = spec['openblas'].prefix
+
+ if spec.satisfies('+lmdb'):
+ env['LMDB_DIR'] = spec['lmdb'].prefix
+
+ if spec.satisfies('+leveldb'):
+ env['LEVELDB_ROOT'] = spec['leveldb'].prefix
+
+ if spec.satisfies('+python'):
+ version = spec['python'].version.up_to(1)
+ args.append('-Dpython_version=%s' % version)
+
+ return args
diff --git a/var/spack/repos/builtin/packages/cairo/package.py b/var/spack/repos/builtin/packages/cairo/package.py
index 9df93ccddb..ec04e5ed38 100644
--- a/var/spack/repos/builtin/packages/cairo/package.py
+++ b/var/spack/repos/builtin/packages/cairo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,6 +40,7 @@ class Cairo(AutotoolsPackage):
depends_on('libxext', when='+X')
depends_on('libxrender', when='+X')
depends_on('libxcb', when='+X')
+ depends_on('python', when='+X', type='build')
depends_on("libpng")
depends_on("glib")
depends_on("pixman")
@@ -50,4 +51,8 @@ class Cairo(AutotoolsPackage):
def configure_args(self):
args = ["--disable-trace", # can cause problems with libiberty
"--enable-tee"]
+ if '+X' in self.spec:
+ args.extend(["--enable-xlib", "--enable-xcb"])
+ else:
+ args.extend(["--disable-xlib", "--disable-xcb"])
return args
diff --git a/var/spack/repos/builtin/packages/caliper/package.py b/var/spack/repos/builtin/packages/caliper/package.py
index c9d4a41bc2..e3fff54e6f 100644
--- a/var/spack/repos/builtin/packages/caliper/package.py
+++ b/var/spack/repos/builtin/packages/caliper/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,11 +24,15 @@
##############################################################################
from spack import *
+import sys
-class Caliper(Package):
- """Caliper is a generic context annotation system. It gives programmers the
- ability to provide arbitrary program context information to (performance)
- tools at runtime.
+
+class Caliper(CMakePackage):
+ """Caliper is a program instrumentation and performance measurement
+ framework. It provides data collection mechanisms and a source-code
+ annotation API for a variety of performance engineering use cases,
+ e.g., performance profiling, tracing, monitoring, and
+ auto-tuning.
"""
homepage = "https://github.com/LLNL/Caliper"
@@ -36,15 +40,47 @@ class Caliper(Package):
version('master', git='https://github.com/LLNL/Caliper.git')
- variant('mpi', default=True, description='Enable MPI function wrappers.')
+ variant('mpi', default=True,
+ description='Enable MPI wrappers')
+ variant('dyninst', default=False,
+ description='Enable symbol translation support with dyninst')
+ # libunwind has some issues on Mac
+ variant('callpath', default=sys.platform != 'darwin',
+ description='Enable callpath service (requires libunwind)')
+ # pthread_self() signature is incompatible with PAPI_thread_init() on Mac
+ variant('papi', default=sys.platform != 'darwin',
+ description='Enable PAPI service')
+ # gotcha doesn't work on Mac
+ variant('gotcha', default=sys.platform != 'darwin',
+ description='Enable GOTCHA support')
- depends_on('libunwind')
- depends_on('papi')
+ depends_on('dyninst', when='+dyninst')
+ depends_on('papi', when='+papi')
depends_on('mpi', when='+mpi')
+ depends_on('libunwind', when='+callpath')
+
depends_on('cmake', type='build')
+ depends_on('python', type='build')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DBUILD_TESTING=Off',
+ '-DWITH_DOCS=Off',
+ '-DWITH_TEST_APPS=Off',
+ '-DWITH_DYNINST=%s' % ('On' if '+dyninst' in spec else 'Off'),
+ '-DWITH_CALLPATH=%s' % ('On' if '+callpath' in spec else 'Off'),
+ '-DWITH_GOTCHA=%s' % ('On' if '+gotcha' in spec else 'Off'),
+ '-DWITH_PAPI=%s' % ('On' if '+papi' in spec else 'Off'),
+ '-DWITH_MPI=%s' % ('On' if '+mpi' in spec else 'Off')
+ ]
+
+ if '+papi' in spec:
+ args.append('-DPAPI_PREFIX=%s' % spec['papi'].prefix)
+
+ if '+mpi' in spec:
+ args.append('-DMPI_C_COMPILER=%s' % spec['mpi'].mpicc)
+ args.append('-DMPI_CXX_COMPILER=%s' % spec['mpi'].mpicxx)
- def install(self, spec, prefix):
- with working_dir('build', create=True):
- cmake('..', *std_cmake_args)
- make()
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/callpath/package.py b/var/spack/repos/builtin/packages/callpath/package.py
index f8227fa49e..a9cb2bf420 100644
--- a/var/spack/repos/builtin/packages/callpath/package.py
+++ b/var/spack/repos/builtin/packages/callpath/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,25 +25,31 @@
from spack import *
-class Callpath(Package):
+class Callpath(CMakePackage):
"""Library for representing callpaths consistently in
distributed-memory performance tools."""
homepage = "https://github.com/llnl/callpath"
url = "https://github.com/llnl/callpath/archive/v1.0.1.tar.gz"
+ version('1.0.4', '39d2e06bfa316dec1085b874092e4b08')
version('1.0.2', 'b1994d5ee7c7db9d27586fc2dcf8f373')
version('1.0.1', '0047983d2a52c5c335f8ba7f5bab2325')
- depends_on("libelf")
- depends_on("libdwarf")
- depends_on("dyninst")
- depends_on("adept-utils")
- depends_on("mpi")
- depends_on('cmake', type='build')
+ depends_on('elf', type='link')
+ depends_on('libdwarf')
+ depends_on('dyninst')
+ depends_on('adept-utils')
+ depends_on('mpi')
+ depends_on('cmake@2.8:', type='build')
- def install(self, spec, prefix):
+ def cmake_args(self):
# TODO: offer options for the walker used.
- cmake('.', "-DCALLPATH_WALKER=dyninst", *std_cmake_args)
- make()
- make("install")
+ args = ["-DCALLPATH_WALKER=dyninst"]
+
+ if self.spec.satisfies("^dyninst@9.3.0:"):
+ std_flag = self.compiler.cxx11_flag
+ args.append("-DCMAKE_CXX_FLAGS='{0} -fpermissive'".format(
+ std_flag))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/candle-benchmarks/package.py b/var/spack/repos/builtin/packages/candle-benchmarks/package.py
new file mode 100644
index 0000000000..7e5650c6f3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/candle-benchmarks/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 CandleBenchmarks(Package):
+ """ECP-CANDLE Benchmarks"""
+
+ homepage = "https://github.com/ECP-CANDLE/Benchmarks"
+ url = "https://github.com/ECP-CANDLE/Benchmarks/archive/v1.0.tar.gz"
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('1.0', '6eced30dc15374bc9f90a86d0396e470')
+
+ depends_on('python@2.7:')
+ depends_on('py-theano +gpu', type=('build', 'run'))
+ depends_on('py-keras', type=('build', 'run'))
+ depends_on('py-matplotlib +image', type=('build', 'run'))
+ depends_on('py-tqdm', type=('build', 'run'))
+ depends_on('py-scikit-learn', type=('build', 'run'))
+ depends_on('opencv@3.2.0: +core +highgui +imgproc +jpeg +png +tiff +zlib +python -dnn')
+ depends_on('py-mdanalysis', type=('build', 'run'))
+ depends_on('py-mpi4py', type=('build', 'run'))
+
+ # see #3244, but use external for now
+ # depends_on('tensorflow')
+
+ def install(self, spec, prefix):
+ install_tree(self.stage.source_path, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cantera/package.py b/var/spack/repos/builtin/packages/cantera/package.py
index 5cd9fcdd17..03dece3af8 100644
--- a/var/spack/repos/builtin/packages/cantera/package.py
+++ b/var/spack/repos/builtin/packages/cantera/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,134 +26,147 @@ from spack import *
import os
-class Cantera(Package):
+class Cantera(SConsPackage):
"""Cantera is a suite of object-oriented software tools for problems
involving chemical kinetics, thermodynamics, and/or transport processes."""
homepage = "http://www.cantera.org/docs/sphinx/html/index.html"
- url = "https://github.com/Cantera/cantera/archive/v2.2.1.tar.gz"
+ url = "https://github.com/Cantera/cantera/archive/v2.3.0.tar.gz"
+ version('2.3.0', 'aebbd8d891cb1623604245398502b72e')
version('2.2.1', '9d1919bdef39ddec54485fc8a741a3aa')
- variant('lapack', default=True,
- description='Build with external BLAS/LAPACK libraries')
- variant('threadsafe', default=True,
- description='Build threadsafe, requires Boost')
- variant('sundials', default=True,
- description='Build with external Sundials')
variant('python', default=False,
description='Build the Cantera Python module')
variant('matlab', default=False,
description='Build the Cantera Matlab toolbox')
# Required dependencies
- depends_on('scons', type='build')
-
- # Recommended dependencies
- depends_on('blas', when='+lapack')
- depends_on('lapack', when='+lapack')
- depends_on('boost', when='+threadsafe')
- depends_on('sundials', when='+sundials') # must be compiled with -fPIC
+ depends_on('fmt@3.0.0:3.0.2', when='@2.3.0:')
+ depends_on('googletest', when='@2.3.0:')
+ depends_on('eigen', when='@2.3.0:')
+ depends_on('boost')
+ depends_on('sundials') # must be compiled with -fPIC
+ depends_on('blas')
+ depends_on('lapack')
# Python module dependencies
extends('python', when='+python')
+ depends_on('py-cython', when='+python', type='build')
depends_on('py-numpy', when='+python', type=('build', 'run'))
depends_on('py-scipy', when='+python', type=('build', 'run'))
- depends_on('py-cython', when='+python', type=('build', 'run'))
depends_on('py-3to2', when='+python', type=('build', 'run'))
# TODO: these "when" specs don't actually work
- # depends_on('py-unittest2', when='+python^python@2.6')
- # depends_on('py-unittest2py3k', when='+python^python@3.1')
+ # depends_on('py-unittest2', when='+python^python@2.6', type=('build', 'run')) # noqa
+ # depends_on('py-unittest2py3k', when='+python^python@3.1', type=('build', 'run')) # noqa
# Matlab toolbox dependencies
- # TODO: add Matlab package
- # TODO: allow packages to extend multiple other packages
- # extends('matlab', when='+matlab')
+ extends('matlab', when='+matlab')
+
+ def build_args(self, spec, prefix):
+ # Valid args can be found by running `scons help`
- def install(self, spec, prefix):
- # Required options
- options = [
+ # Required args
+ args = [
+ 'build',
'prefix={0}'.format(prefix),
- 'CC={0}'.format(os.environ['CC']),
- 'CXX={0}'.format(os.environ['CXX']),
- 'F77={0}'.format(os.environ['F77']),
- 'FORTRAN={0}'.format(os.environ['FC']),
- 'cc_flags=-fPIC',
+ 'VERBOSE=yes',
+ 'CC={0}'.format(spack_cc),
+ 'CXX={0}'.format(spack_cxx),
+ 'FORTRAN={0}'.format(spack_fc),
+ 'cc_flags={0}'.format(self.compiler.pic_flag),
# Allow Spack environment variables to propagate through to SCons
'env_vars=all'
]
- # BLAS/LAPACK support
- if '+lapack' in spec:
- lapack_blas = spec['lapack'].lapack_libs + spec['blas'].blas_libs
- options.extend([
- 'blas_lapack_libs={0}'.format(','.join(lapack_blas.names)),
- 'blas_lapack_dir={0}'.format(spec['lapack'].prefix.lib)
+ if spec.satisfies('@:2.2.1'):
+ args.append('F77={0}'.format(spack_f77))
+
+ # fmt support
+ if spec.satisfies('@2.3.0:'):
+ args.append('system_fmt=y')
+
+ # Googletest support
+ if spec.satisfies('@2.3.0:'):
+ args.append('system_googletest=y')
+
+ # Eigen support
+ if spec.satisfies('@2.3.0:'):
+ args.extend([
+ 'system_eigen=y',
+ 'extra_inc_dirs={0}'.format(
+ join_path(spec['eigen'].prefix.include, 'eigen{0}'.format(
+ spec['eigen'].version.up_to(1)))),
])
- # Threadsafe build, requires Boost
- if '+threadsafe' in spec:
- options.extend([
+ # BLAS/LAPACK support
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ args.extend([
+ 'blas_lapack_libs={0}'.format(','.join(lapack_blas.names)),
+ 'blas_lapack_dir={0}'.format(spec['lapack'].prefix.lib)
+ ])
+
+ # Boost support
+ if spec.satisfies('@2.3.0:'):
+ args.append('boost_inc_dir={0}'.format(
+ spec['boost'].prefix.include))
+ else:
+ args.extend([
'build_thread_safe=yes',
'boost_inc_dir={0}'.format(spec['boost'].prefix.include),
- 'boost_lib_dir={0}'.format(spec['boost'].prefix.lib)
+ 'boost_lib_dir={0}'.format(spec['boost'].prefix.lib),
])
- else:
- options.append('build_thread_safe=no')
# Sundials support
- if '+sundials' in spec:
- options.extend([
+ if spec.satisfies('@2.3.0:'):
+ args.append('system_sundials=y')
+ else:
+ args.extend([
'use_sundials=y',
- 'sundials_include={0}'.format(spec['sundials'].prefix.include),
- 'sundials_libdir={0}'.format(spec['sundials'].prefix.lib),
'sundials_license={0}'.format(
- join_path(spec['sundials'].prefix, 'LICENSE'))
+ spec['sundials'].prefix.LICENSE)
])
- else:
- options.append('use_sundials=n')
+
+ args.extend([
+ 'sundials_include={0}'.format(spec['sundials'].prefix.include),
+ 'sundials_libdir={0}'.format(spec['sundials'].prefix.lib),
+ ])
# Python module
if '+python' in spec:
- options.extend([
+ args.extend([
'python_package=full',
- 'python_cmd={0}'.format(
- join_path(spec['python'].prefix.bin, 'python')),
- 'python_array_home={0}'.format(spec['py-numpy'].prefix)
+ 'python_cmd={0}'.format(spec['python'].command.path),
])
- if spec['python'].satisfies('@3'):
- options.extend([
+ if spec['python'].satisfies('@3:'):
+ args.extend([
'python3_package=y',
- 'python3_cmd={0}'.format(
- join_path(spec['python'].prefix.bin, 'python')),
- 'python3_array_home={0}'.format(spec['py-numpy'].prefix)
+ 'python3_cmd={0}'.format(spec['python'].command.path),
])
else:
- options.append('python3_package=n')
+ args.append('python3_package=n')
else:
- options.append('python_package=none')
- options.append('python3_package=n')
+ args.append('python_package=none')
+ args.append('python3_package=n')
# Matlab toolbox
if '+matlab' in spec:
- options.extend([
+ args.extend([
'matlab_toolbox=y',
'matlab_path={0}'.format(spec['matlab'].prefix)
])
else:
- options.append('matlab_toolbox=n')
+ args.append('matlab_toolbox=n')
- scons('build', *options)
+ return args
- if '+python' in spec:
+ def test(self):
+ if '+python' in self.spec:
# Tests will always fail if Python dependencies aren't built
# In addition, 3 of the tests fail when run in parallel
scons('test', parallel=False)
- scons('install')
-
- self.filter_compilers()
-
+ @run_after('install')
def filter_compilers(self):
"""Run after install to tell the Makefile and SConstruct files to use
the compilers that Spack built the package with.
diff --git a/var/spack/repos/builtin/packages/canu/package.py b/var/spack/repos/builtin/packages/canu/package.py
new file mode 100644
index 0000000000..0198246e72
--- /dev/null
+++ b/var/spack/repos/builtin/packages/canu/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Canu(MakefilePackage):
+ """A single molecule sequence assembler for genomes large and
+ small."""
+
+ homepage = "http://canu.readthedocs.io/"
+ url = "https://github.com/marbl/canu/archive/v1.5.tar.gz"
+
+ version('1.5', '65df275baa28ecf11b15dfd7343361e3')
+
+ depends_on('gnuplot', type='run')
+ depends_on('jdk', type='run')
+ depends_on('perl', type='run')
+
+ build_directory = 'src'
+
+ def patch(self):
+ # Use our perl, not whatever is in the environment
+ perl = self.spec['perl'].prefix.bin.perl
+ filter_file(r'^#!/usr/bin/env perl',
+ '#!{0}'.format(perl),
+ 'src/pipelines/canu.pl')
+
+ def install(self, spec, prefix):
+ # replicate the Makefile logic here:
+ # https://github.com/marbl/canu/blob/master/src/Makefile#L344
+ uname = which('uname')
+ ostype = uname(output=str).strip()
+ machinetype = uname('-m', output=str).strip()
+ if machinetype == 'x86_64':
+ machinetype = 'amd64'
+ target_dir = '{0}-{1}'.format(ostype, machinetype)
+ bin = join_path(target_dir, 'bin')
+
+ install_tree(bin, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cap3/package.py b/var/spack/repos/builtin/packages/cap3/package.py
new file mode 100644
index 0000000000..13568b40cd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cap3/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Cap3(Package):
+ """CAP3 is DNA Sequence Assembly Program"""
+
+ homepage = "http://seq.cs.iastate.edu/"
+ url = "http://seq.cs.iastate.edu/CAP3/cap3.linux.x86_64.tar"
+
+ version('2015-02-11', '5393d937978ecc5f18fcb741140e1f02',
+ url='http://seq.cs.iastate.edu/CAP3/cap3.linux.x86_64.tar')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('cap3', prefix.bin)
+ install('formcon', prefix.bin)
+ mkdirp(prefix.doc)
+ install('doc', prefix.doc)
+ install('aceform', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/cares/package.py b/var/spack/repos/builtin/packages/cares/package.py
new file mode 100644
index 0000000000..ab3691be16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cares/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Cares(CMakePackage):
+ """c-ares: A C library for asynchronous DNS requests"""
+
+ homepage = "https://c-ares.haxx.se"
+ url = "https://github.com/c-ares/c-ares/archive/cares-1_13_0.tar.gz"
+
+ version('develop', branch='master',
+ git='https://github.com/c-ares/c-ares.git')
+
+ version('1.13.0', 'cdb21052a7eb85261da22f83c0654cfd')
+
+ def url_for_version(self, version):
+ url = "https://github.com/c-ares/c-ares/archive/cares-{0}.tar.gz"
+ return url.format(version.underscored)
diff --git a/var/spack/repos/builtin/packages/cask/package.py b/var/spack/repos/builtin/packages/cask/package.py
index b48365b61d..e1ffe284e7 100644
--- a/var/spack/repos/builtin/packages/cask/package.py
+++ b/var/spack/repos/builtin/packages/cask/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/catch/package.py b/var/spack/repos/builtin/packages/catch/package.py
index 8d2b0a1b24..37e8d69aaf 100644
--- a/var/spack/repos/builtin/packages/catch/package.py
+++ b/var/spack/repos/builtin/packages/catch/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,23 @@ class Catch(Package):
homepage = "https://github.com/philsquared/Catch"
url = "https://github.com/philsquared/Catch/archive/v1.3.0.tar.gz"
+ version('1.9.4', '110b9173d7f766487fed5b710836c7216a781568')
+ version('1.9.3', 'dc0cd0b344d8ccb1190ac3447efcb49c9b43d497')
+ version('1.9.2', '0580f57edd2b33ec671488dc7b6151f9e360c8c9')
+ version('1.9.1', '10784fc4c3786dfc3bd222fb3f9b048b6d68f186')
+ version('1.9.0', '62f07506d4a381d1730d494b71cff0396b9eb3d6')
+ version('1.8.2', '45a7598a8e5c47bc09fb73eec205ffe0885983dc')
+ version('1.8.1', 'd4e302f712fb7e75ce6f05b436dbaf21dca40030')
+ version('1.8.0', '26064092b5682c9c997b04015ed1565f0e198827')
+ version('1.7.2', '13018db2f0f0395456f695b0d0fbc490662e3467')
+ version('1.7.1', 'f82e11a5cdfef2d36b5687ff5970d383f9e76490')
+ version('1.7.0', 'fe39f5b3eb07a5dd0e3f84a1335ceca7de8982e6')
+ version('1.6.1', '7d46961a3131655b986123f8a1f439a04a0af623')
+ version('1.6.0', '890a3b21085d796e13c3bfaf4b6c6f1d06e4a52e')
+ version('1.5.9', '8bc32146a5a2789cd3d3ce2893772e32f412f1b1')
+ version('1.5.0', 'c87397846ea5126febd39f513b413e32f9ed552b')
+ version('1.4.0', 'c165406968fbfb46949885da571cd528c62c4d9a')
+ version('1.3.5', '31553ba6e4bd0cc61e0507d6754847e354699284')
version('1.3.0', 'e13694aaff72817d02af8ed27d077cd261b6e857')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/cbench/package.py b/var/spack/repos/builtin/packages/cbench/package.py
new file mode 100644
index 0000000000..c090907af7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cbench/package.py
@@ -0,0 +1,92 @@
+##############################################################################
+# 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/spack/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 Cbench(MakefilePackage):
+ """Cbench is intended as a relatively straightforward toolbox of tests,
+ benchmarks, applications, utilities, and framework to hold them together
+ with the goal to facilitate scalable testing, benchmarking, and analysis
+ of a Linux parallel compute cluster."""
+
+ homepage = "https://sourceforge.net/projects/cbench/"
+ url = "https://sourceforge.net/projects/cbench/files/cbench/1.3.0/cbench_release_1.3.0.tar.gz/download"
+ list_url = "https://sourceforge.net/projects/cbench/files/cbench/"
+ list_depth = 1
+
+ version('1.3.0', '2fb112876fdc96165d14e019b4a26f2e')
+
+ depends_on('mpi')
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('fftw')
+
+ # The following compilers are not supported by Cbench:
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%nag')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ def edit(self, spec, prefix):
+ # The location of the Cbench source tree
+ env['CBENCHOME'] = self.stage.source_path
+
+ # The location that will contain all of your tests and their results
+ env['CBENCHTEST'] = prefix
+
+ # The location of the system MPI tree
+ env['MPIHOME'] = spec['mpi'].prefix
+
+ # Pick the compiler collection/chain you want to compile with.
+ # Examples include: intel, gcc, pgi.
+ env['COMPILERCOLLECTION'] = self.compiler.name
+
+ # Linking flags for BLAS/LAPACK and FFTW
+ env['BLASLIB'] = spec['blas'].libs.ld_flags
+ env['LAPACKLIB'] = spec['lapack'].libs.ld_flags
+ env['FFTWLIB'] = spec['fftw'].libs.ld_flags
+
+ # The number of make jobs (commands) to run simultaneously
+ env['JOBS'] = str(make_jobs)
+
+ @run_before('build')
+ @on_package_attributes(run_tests=True)
+ def test_blas_linkage(self):
+ """Quick test to ensure that BLAS linkage is working correctly."""
+
+ make('-C', 'opensource/maketests', 'clean')
+ make('-C', 'opensource/maketests', 'dummy_blas')
+ make('-C', 'opensource/maketests', 'linkstatus')
+
+ def install(self, spec, prefix):
+ # Install binaries in $CBENCHOME/bin
+ make('install')
+
+ # This creates a testing tree (if one doesn't already exist) and
+ # copies the binaries from `$CBENCHOME/bin` to `$CBENCHTEST/bin`.
+ # This allows you to use the testing tree independently of the
+ # source tree in the future.
+ make('installtests')
diff --git a/var/spack/repos/builtin/packages/cblas/package.py b/var/spack/repos/builtin/packages/cblas/package.py
index 0828141307..05a3ddb43e 100644
--- a/var/spack/repos/builtin/packages/cblas/package.py
+++ b/var/spack/repos/builtin/packages/cblas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py b/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py
new file mode 100644
index 0000000000..42f40c63ea
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cbtf-argonavis-gui/package.py
@@ -0,0 +1,97 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+##########################################################################
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# 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 GNU General Public License for more
+# details.
+#
+# You should have received a copy of the GNU 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 CbtfArgonavisGui(QMakePackage):
+ """CBTF Argo Navis GUI project contains the GUI that views OpenSpeedShop
+ performance information by loading in the Sqlite database files.
+ """
+ homepage = "http://sourceforge.net/p/cbtf/wiki/Home/"
+
+ version('0.8.1', branch='master',
+ git='https://github.com/OpenSpeedShop/cbtf-argonavis-gui.git')
+
+ depends_on("cmake@3.0.2", type='build')
+ depends_on("openspeedshop+cuda gui='qt4'")
+ depends_on('qt@4.8.6:')
+ depends_on("boost@1.50.0:1.59.0")
+ depends_on("cbtf")
+ depends_on("cbtf-krell")
+ depends_on("cbtf-argonavis")
+ depends_on("cuda")
+ depends_on("mrnet@5.0.1:+lwthreads")
+ depends_on("xerces-c@3.1.1:")
+ depends_on("graphviz")
+ depends_on("qtgraph")
+
+ parallel = False
+
+ def setup_environment(self, spack_env, run_env):
+ """Set up the compile and runtime environments for a package."""
+ spack_env.set('BOOSTROOT', self.spec['boost'].prefix)
+ spack_env.set('CBTF_ROOT', self.spec['cbtf'].prefix)
+ spack_env.set('CBTF_KRELL_ROOT', self.spec['cbtf-krell'].prefix)
+ spack_env.set('CBTF_ARGONAVIS_ROOT',
+ self.spec['cbtf-argonavis'].prefix)
+ spack_env.set('OSS_CBTF_ROOT', self.spec['openspeedshop'].prefix)
+ spack_env.set('GRAPHVIZ_ROOT', self.spec['graphviz'].prefix)
+ spack_env.set('QTGRAPHLIB_ROOT', self.spec['qtgraph'].prefix)
+ spack_env.set('KRELL_ROOT_MRNET', self.spec['mrnet'].prefix)
+ spack_env.set('KRELL_ROOT_XERCES', self.spec['xerces-c'].prefix)
+ spack_env.set('INSTALL_ROOT', self.spec.prefix)
+
+ # The implementor of qtgraph has set up the library and include
+ # paths in a non-conventional way. We reflect that here.
+ run_env.prepend_path(
+ 'LD_LIBRARY_PATH', join_path(
+ self.spec['qtgraph'].prefix.lib64,
+ '{0}'.format(self.spec['qt'].version.up_to(3))))
+ # The openspeedshop libraries are needed to actually load the
+ # performance information into the GUI.
+ run_env.prepend_path(
+ 'LD_LIBRARY_PATH', self.spec['openspeedshop'].prefix.lib64)
+
+ def qmake_args(self):
+ options = ['-o', 'Makefile', 'openss-gui.pro']
+ return options
diff --git a/var/spack/repos/builtin/packages/cbtf-argonavis/package.py b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
index 3d8572232c..a335754537 100644
--- a/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-argonavis/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
##########################################################################
-# Copyright (c) 2015-2016 Krell Institute. All Rights Reserved.
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
@@ -43,20 +43,19 @@
from spack import *
-class CbtfArgonavis(Package):
+class CbtfArgonavis(CMakePackage):
"""CBTF Argo Navis project contains the CUDA collector and supporting
libraries that was done as a result of a DOE SBIR grant.
"""
homepage = "http://sourceforge.net/p/cbtf/wiki/Home/"
- # Mirror access template example
- # url = "file:/home/jeg/OpenSpeedShop_ROOT/SOURCES/cbtf-argonavis-1.6.tar.gz"
- # version('1.6', '0fafa0008478405c2c2319450f174ed4')
-
version('1.8', branch='master',
git='https://github.com/OpenSpeedShop/cbtf-argonavis.git')
+ variant('build_type', default='None', values=('None'),
+ description='CMake build type')
+
depends_on("cmake@3.0.2:", type='build')
depends_on("boost@1.50.0:1.59.0")
depends_on("papi")
@@ -67,73 +66,27 @@ class CbtfArgonavis(Package):
parallel = False
- def adjustBuildTypeParams_cmakeOptions(self, spec, cmakeOptions):
- # Sets build type parameters into cmakeOptions the options that will
- # enable the cbtf-krell built type settings
+ build_directory = 'build_cbtf_argonavis'
+ def cmake_args(self):
+ spec = self.spec
compile_flags = "-O2 -g"
- BuildTypeOptions = []
- # Set CMAKE_BUILD_TYPE to what cbtf-krell wants it to be, not the
- # stdcmakeargs
- for word in cmakeOptions[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_CXX_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_C_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_VERBOSE_MAKEFILE'):
- cmakeOptions.remove(word)
- BuildTypeOptions.extend([
- '-DCMAKE_VERBOSE_MAKEFILE=ON',
- '-DCMAKE_BUILD_TYPE=None',
+ cmake_args = [
'-DCMAKE_CXX_FLAGS=%s' % compile_flags,
- '-DCMAKE_C_FLAGS=%s' % compile_flags
- ])
-
- cmakeOptions.extend(BuildTypeOptions)
-
- def install(self, spec, prefix):
-
- # Look for package installation information in the cbtf and cbtf-krell
- # prefixes
- cmake_prefix_path = join_path(
- spec['cbtf'].prefix) + ':' + join_path(spec['cbtf-krell'].prefix)
-
- with working_dir('CUDA'):
- with working_dir('build', create=True):
-
- cmakeOptions = []
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DCMAKE_PREFIX_PATH=%s' % cmake_prefix_path,
- '-DCUDA_DIR=%s' % spec['cuda'].prefix,
- '-DCUDA_INSTALL_PATH=%s' % spec['cuda'].prefix,
- '-DCUDA_TOOLKIT_ROOT_DIR=%s' % spec['cuda'].prefix,
- '-DCUPTI_DIR=%s' % join_path(
- spec['cuda'].prefix + '/extras/CUPTI'),
- '-DCUPTI_ROOT=%s' % join_path(
- spec['cuda'].prefix + '/extras/CUPTI'),
- '-DPAPI_ROOT=%s' % spec['papi'].prefix,
- '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
- '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
- '-DBOOST_ROOT=%s' % spec['boost'].prefix,
- '-DBoost_DIR=%s' % spec['boost'].prefix,
- '-DBOOST_LIBRARYDIR=%s' % spec['boost'].prefix.lib,
- '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
- '-DBoost_NO_SYSTEM_PATHS=ON'])
-
- # Add in the standard cmake arguments
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the standard cmake arguments to what we want the build
- # type, etc to be
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- # Invoke cmake
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DCUDA_DIR=%s' % spec['cuda'].prefix,
+ '-DCUDA_INSTALL_PATH=%s' % spec['cuda'].prefix,
+ '-DCUDA_TOOLKIT_ROOT_DIR=%s' % spec['cuda'].prefix,
+ '-DCUPTI_DIR=%s' % spec['cuda'].prefix.extras.CUPTI,
+ '-DCUPTI_ROOT=%s' % spec['cuda'].prefix.extras.CUPTI,
+ '-DPAPI_ROOT=%s' % spec['papi'].prefix,
+ '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
+ '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
+ '-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DBoost_DIR=%s' % spec['boost'].prefix,
+ '-DBOOST_LIBRARYDIR=%s' % spec['boost'].prefix.lib,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
+ '-DBoost_NO_SYSTEM_PATHS=ON']
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/cbtf-krell/package.py b/var/spack/repos/builtin/packages/cbtf-krell/package.py
index 3f36942e9a..1716d83188 100644
--- a/var/spack/repos/builtin/packages/cbtf-krell/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-krell/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
##########################################################################
-# Copyright (c) 2015-2016 Krell Institute. All Rights Reserved.
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
@@ -43,7 +43,7 @@
from spack import *
-class CbtfKrell(Package):
+class CbtfKrell(CMakePackage):
"""CBTF Krell project contains the Krell Institute contributions to the
CBTF project. These contributions include many performance data
collectors and support libraries as well as some example tools
@@ -52,10 +52,6 @@ class CbtfKrell(Package):
"""
homepage = "http://sourceforge.net/p/cbtf/wiki/Home/"
- # optional mirror access template
- # url = "file:/home/jeg/cbtf-krell-1.6.tar.gz"
- # version('1.6', 'edeb61cd488f16e7b124f77db9ce762d')
-
version('1.8', branch='master',
git='https://github.com/OpenSpeedShop/cbtf-krell.git')
@@ -72,16 +68,18 @@ class CbtfKrell(Package):
description="Build mpi experiment collector for mpich2 MPI.")
variant('mpich', default=False,
description="Build mpi experiment collector for mpich MPI.")
+ variant('build_type', default='None', values=('None'),
+ description='CMake build type')
# Dependencies for cbtf-krell
depends_on("cmake@3.0.2:", type='build')
# For binutils service
- depends_on("binutils@2.24+krellpatch")
+ depends_on("binutils")
# collectionTool
depends_on("boost@1.50.0:1.59.0")
- depends_on("dyninst@9.2.0")
+ depends_on("dyninst@9.3.2")
depends_on("mrnet@5.0.1:+lwthreads")
depends_on("xerces-c@3.1.1:")
@@ -91,6 +89,7 @@ class CbtfKrell(Package):
depends_on("libmonitor+krellpatch")
depends_on("libunwind")
depends_on("papi")
+ depends_on("llvm-openmp-ompt@towards_tr4+standalone")
# MPI Installations
# These have not worked either for build or execution, commenting out for
@@ -104,31 +103,7 @@ class CbtfKrell(Package):
parallel = False
- def adjustBuildTypeParams_cmakeOptions(self, spec, cmakeOptions):
- # Sets build type parameters into cmakeOptions the options that will
- # enable the cbtf-krell built type settings
-
- compile_flags = "-O2 -g"
- BuildTypeOptions = []
- # Set CMAKE_BUILD_TYPE to what cbtf-krell wants it to be, not the
- # stdcmakeargs
- for word in cmakeOptions[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_CXX_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_C_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_VERBOSE_MAKEFILE'):
- cmakeOptions.remove(word)
- BuildTypeOptions.extend([
- '-DCMAKE_VERBOSE_MAKEFILE=ON',
- '-DCMAKE_BUILD_TYPE=None',
- '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
- '-DCMAKE_C_FLAGS=%s' % compile_flags
- ])
-
- cmakeOptions.extend(BuildTypeOptions)
+ build_directory = 'build_cbtf_krell'
def set_mpi_cmakeOptions(self, spec, cmakeOptions):
# Appends to cmakeOptions the options that will enable the appropriate
@@ -157,135 +132,28 @@ class CbtfKrell(Package):
cmakeOptions.extend(MPIOptions)
- def install(self, spec, prefix):
+ def cmake_args(self):
+ spec = self.spec
+
+ compile_flags = "-O2 -g"
# Add in paths for finding package config files that tell us
# where to find these packages
- # cmake_prefix_path = \
- # join_path(spec['cbtf'].prefix) + ':' + \
- # join_path(spec['dyninst'].prefix)
- # '-DCMAKE_PREFIX_PATH=%s' % cmake_prefix_path
-
- # Build cbtf-krell with cmake
- with working_dir('build_cbtf_krell', create=True):
- cmakeOptions = []
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
- '-DBINUTILS_DIR=%s' % spec['binutils'].prefix,
- '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
- '-DLIBUNWIND_DIR=%s' % spec['libunwind'].prefix,
- '-DPAPI_DIR=%s' % spec['papi'].prefix,
- '-DBOOST_DIR=%s' % spec['boost'].prefix,
- '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
- '-DDYNINST_DIR=%s' % spec['dyninst'].prefix,
- '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix])
-
- # Add any MPI implementations coming from variant settings
- self.set_mpi_cmakeOptions(spec, cmakeOptions)
-
- # Add in the standard cmake arguments
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the standard cmake arguments to what we want the build
- # type, etc to be
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- # Invoke cmake
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
-
- # if '+cray' in spec:
- # if 'cray' in self.spec.architecture:
- # if '+runtime' in spec:
- # with working_dir('build_cbtf_cray_runtime', create=True):
- # python_vers='%d.%d' % spec['python'].version[:2]
- # cmake .. \
- # -DCMAKE_BUILD_TYPE=Debug \
- # -DTARGET_OS="cray" \
- # -DRUNTIME_ONLY="true" \
- # -DCMAKE_INSTALL_PREFIX=${CBTF_KRELL_PREFIX} \
- # -DCMAKE_PREFIX_PATH=${CBTF_ROOT} \
- # -DCBTF_DIR=${CBTF_ROOT} \
- # -DBOOST_ROOT=${BOOST_INSTALL_PREFIX} \
- # -DXERCESC_DIR=${XERCESC_INSTALL_PREFIX} \
- # -DBINUTILS_DIR=${KRELL_ROOT} \
- # -DLIBMONITOR_DIR=${KRELL_ROOT_COMPUTE} \
- # -DLIBUNWIND_DIR=${KRELL_ROOT_COMPUTE} \
- # -DPAPI_DIR=${PAPI_ROOT} \
- # -DDYNINST_DIR=${DYNINST_CN_ROOT} \
- # -DMRNET_DIR=${MRNET_INSTALL_PREFIX} \
- # -DMPICH2_DIR=/opt/cray/mpt/7.0.1/gni/mpich2-gnu/48
- # else:
- # with working_dir('build_cbtf_cray_frontend', create=True):
- # python_vers='%d.%d' % spec['python'].version[:2]
- # cmake .. \
- # -DCMAKE_BUILD_TYPE=Debug \
- # -DCMAKE_INSTALL_PREFIX=${CBTF_KRELL_PREFIX} \
- # -DCMAKE_PREFIX_PATH=${CBTF_ROOT} \
- # -DCBTF_DIR=${CBTF_ROOT} \
- # -DRUNTIME_TARGET_OS="cray" \
- # -DCBTF_KRELL_CN_RUNTIME_DIR=${CBTF_KRELL_CN_RUNTIME_ROOT} \
- # -DCBTF_CN_RUNTIME_DIR=${CBTF_CN_RUNTIME_ROOT} \
- # -DLIBMONITOR_CN_RUNTIME_DIR=${LIBMONITOR_CN_ROOT} \
- # -DLIBUNWIND_CN_RUNTIME_DIR=${LIBUNWIND_CN_ROOT} \
- # -DPAPI_CN_RUNTIME_DIR=${PAPI_CN_ROOT} \
- # -DXERCESC_CN_RUNTIME_DIR=/${XERCESC_CN_ROOT} \
- # -DMRNET_CN_RUNTIME_DIR=${MRNET_CN_ROOT} \
- # -DBOOST_CN_RUNTIME_DIR=${BOOST_CN_ROOT} \
- # -DDYNINST_CN_RUNTIME_DIR=${DYNINST_CN_ROOT} \
- # -DBOOST_ROOT=/${KRELL_ROOT} \
- # -DXERCESC_DIR=/${KRELL_ROOT} \
- # -DBINUTILS_DIR=/${KRELL_ROOT} \
- # -DLIBMONITOR_DIR=${KRELL_ROOT} \
- # -DLIBUNWIND_DIR=${KRELL_ROOT} \
- # -DPAPI_DIR=${PAPI_ROOT} \
- # -DDYNINST_DIR=${KRELL_ROOT} \
- # -DMRNET_DIR=${KRELL_ROOT} \
- # -DMPICH2_DIR=/opt/cray/mpt/7.0.1/gni/mpich2-gnu/48
- # fi
-#
-# make("clean")
-# make()
-# make("install")
-#
-# elif '+mic' in spec:
-# if '+runtime' in spec:
-# with working_dir('build_cbtf_mic_runtime', create=True):
-# python_vers='%d.%d' % spec['python'].version[:2]
-# cmake .. \
-#
-# else:
-# with working_dir('build_cbtf_cray_frontend', create=True):
-# python_vers='%d.%d' % spec['python'].version[:2]
-# cmake .. \
-# fi
-#
-# else:
-# # Build cbtf-krell with cmake
-# with working_dir('build_cbtf_krell', create=True):
-# cmake('..',
-# '-DCMAKE_BUILD_TYPE=Debug',
-# '-DCMAKE_INSTALL_PREFIX=%s' % prefix,
-# '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
-# '-DBINUTILS_DIR=%s' % spec['binutils'].prefix,
-# '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
-# '-DLIBUNWIND_DIR=%s'% spec['libunwind'].prefix,
-# '-DPAPI_DIR=%s' % spec['papi'].prefix,
-# '-DBOOST_DIR=%s' % spec['boost'].prefix,
-# '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
-# '-DDYNINST_DIR=%s' % spec['dyninst'].prefix,
-# '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
-# '-DOPENMPI_DIR=%s' % openmpi_prefix_path,
-# '-DCMAKE_PREFIX_PATH=%s' % cmake_prefix_path,
-# *std_cmake_args)
-#
-# make("clean")
-# make()
-# make("install")
-#
-# fi
-#
+ cmake_args = [
+ '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
+ '-DBINUTILS_DIR=%s' % spec['binutils'].prefix,
+ '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
+ '-DLIBUNWIND_DIR=%s' % spec['libunwind'].prefix,
+ '-DPAPI_DIR=%s' % spec['papi'].prefix,
+ '-DBOOST_DIR=%s' % spec['boost'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
+ '-DDYNINST_DIR=%s' % spec['dyninst'].prefix,
+ '-DLIBIOMP_DIR=%s' % spec['llvm-openmp-ompt'].prefix,
+ '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix]
+
+ # Add any MPI implementations coming from variant settings
+ self.set_mpi_cmakeOptions(spec, cmake_args)
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/cbtf-lanl/package.py b/var/spack/repos/builtin/packages/cbtf-lanl/package.py
index 1545c7bf8b..19b00e00df 100644
--- a/var/spack/repos/builtin/packages/cbtf-lanl/package.py
+++ b/var/spack/repos/builtin/packages/cbtf-lanl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
##########################################################################
-# Copyright (c) 2015-2016 Krell Institute. All Rights Reserved.
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
@@ -43,18 +43,17 @@
from spack import *
-class CbtfLanl(Package):
+class CbtfLanl(CMakePackage):
"""CBTF LANL project contains a memory tool and data center type system
command monitoring tool."""
homepage = "http://sourceforge.net/p/cbtf/wiki/Home/"
- # Mirror access template example
- # url = "file:/g/g24/jeg/cbtf-lanl-1.6.tar.gz"
- # version('1.6', 'c3f78f967b0a42c6734ce4be0e602426')
-
version('1.8', branch='master',
git='http://git.code.sf.net/p/cbtf-lanl/cbtf-lanl')
+ variant('build_type', default='None', values=('None'),
+ description='CMake build type')
+
depends_on("cmake@3.0.2:", type='build')
# Dependencies for cbtf-krell
depends_on("mrnet@5.0.1:+lwthreads")
@@ -64,61 +63,21 @@ class CbtfLanl(Package):
parallel = False
- def adjustBuildTypeParams_cmakeOptions(self, spec, cmakeOptions):
- # Sets build type parameters into cmakeOptions the options that will
- # enable the cbtf-krell built type settings
-
- compile_flags = "-O2 -g"
- BuildTypeOptions = []
- # Set CMAKE_BUILD_TYPE to what cbtf-krell wants it to be, not the
- # stdcmakeargs
- for word in cmakeOptions[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_CXX_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_C_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_VERBOSE_MAKEFILE'):
- cmakeOptions.remove(word)
- BuildTypeOptions.extend([
- '-DCMAKE_VERBOSE_MAKEFILE=ON',
- '-DCMAKE_BUILD_TYPE=None',
- '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
- '-DCMAKE_C_FLAGS=%s' % compile_flags
- ])
-
- cmakeOptions.extend(BuildTypeOptions)
+ build_directory = 'build_cbtf_lanl'
- def install(self, spec, prefix):
+ def cmake_args(self):
- # Add in paths for finding package config files that tell us where to
- # find these packages
- cmake_prefix_path = join_path(
- spec['cbtf'].prefix) + ':' + join_path(spec['cbtf-krell'].prefix)
-
- with working_dir('build', create=True):
- cmakeOptions = []
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
- '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
- '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
- '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
- '-DCMAKE_PREFIX_PATH=%s' % cmake_prefix_path,
- '-DCMAKE_MODULE_PATH=%s' % join_path(
- prefix.share, 'KrellInstitute', 'cmake')])
-
- # Add in the standard cmake arguments
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the standard cmake arguments to what we want the build
- # type, etc to be
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- # Invoke cmake
- cmake('..', *cmakeOptions)
+ spec = self.spec
+ compile_flags = "-O2 -g"
- make("clean")
- make()
- make("install")
+ cmake_args = [
+ '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
+ '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
+ '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
+ '-DCMAKE_MODULE_PATH=%s' % join_path(
+ prefix.share, 'KrellInstitute', 'cmake')]
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/cbtf/package.py b/var/spack/repos/builtin/packages/cbtf/package.py
index 7c9626c90e..2f0b3b275d 100644
--- a/var/spack/repos/builtin/packages/cbtf/package.py
+++ b/var/spack/repos/builtin/packages/cbtf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
##########################################################################
-# Copyright (c) 2015-2016 Krell Institute. All Rights Reserved.
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
@@ -43,7 +43,7 @@
from spack import *
-class Cbtf(Package):
+class Cbtf(CMakePackage):
"""CBTF project contains the base code for CBTF that supports creating
components, component networks and the support to connect these
components and component networks into sequential and distributed
@@ -52,16 +52,14 @@ class Cbtf(Package):
"""
homepage = "http://sourceforge.net/p/cbtf/wiki/Home"
- # Mirror access template example
- # url = "file:/home/jeg/cbtf-1.6.tar.gz"
- # version('1.6', 'c1ef4e5aa4e470dffb042abdba0b9987')
-
# Use when the git repository is available
version('1.8', branch='master',
git='https://github.com/OpenSpeedShop/cbtf.git')
variant('runtime', default=False,
description="build only the runtime libraries and collectors.")
+ variant('build_type', default='None', values=('None'),
+ description='CMake build type')
depends_on("cmake@3.0.2:", type='build')
depends_on("boost@1.50.0:1.59.0")
@@ -72,82 +70,42 @@ class Cbtf(Package):
parallel = False
- def adjustBuildTypeParams_cmakeOptions(self, spec, cmakeOptions):
- # Sets build type parameters into cmakeOptions the options that will
- # enable the cbtf-krell built type settings
-
- compile_flags = "-O2 -g"
- BuildTypeOptions = []
- # Set CMAKE_BUILD_TYPE to what cbtf-krell wants it to be, not the
- # stdcmakeargs
- for word in cmakeOptions[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_CXX_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_C_FLAGS'):
- cmakeOptions.remove(word)
- BuildTypeOptions.extend([
- '-DCMAKE_BUILD_TYPE=None',
- '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
- '-DCMAKE_C_FLAGS=%s' % compile_flags
- ])
-
- cmakeOptions.extend(BuildTypeOptions)
-
- def install(self, spec, prefix):
- with working_dir('build', create=True):
-
- # Boost_NO_SYSTEM_PATHS Set to TRUE to suppress searching
- # in system paths (or other locations outside of BOOST_ROOT
- # or BOOST_INCLUDEDIR). Useful when specifying BOOST_ROOT.
- # Defaults to OFF.
+ build_directory = 'build_cbtf'
- if '+runtime' in spec:
- # Install message tag include file for use in Intel MIC
- # cbtf-krell build
- # FIXME
- cmakeOptions = []
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DBoost_NO_SYSTEM_PATHS=TRUE',
- '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
- '-DBOOST_ROOT=%s' % spec['boost'].prefix,
- '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
- '-DCMAKE_MODULE_PATH=%s' % join_path(
- prefix.share, 'KrellInstitute', 'cmake')])
+ def cmake_args(self):
- # Add in the standard cmake arguments
- cmakeOptions.extend(std_cmake_args)
+ spec = self.spec
- # Adjust the standard cmake arguments to what we want the build
- # type, etc to be
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
+ # Boost_NO_SYSTEM_PATHS Set to TRUE to suppress searching
+ # in system paths (or other locations outside of BOOST_ROOT
+ # or BOOST_INCLUDEDIR). Useful when specifying BOOST_ROOT.
+ # Defaults to OFF.
- # Invoke cmake
- cmake('..', *cmakeOptions)
-
- else:
- cmakeOptions = []
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DBoost_NO_SYSTEM_PATHS=TRUE',
- '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
- '-DBOOST_ROOT=%s' % spec['boost'].prefix,
- '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
- '-DCMAKE_MODULE_PATH=%s' % join_path(
- prefix.share, 'KrellInstitute', 'cmake')])
-
- # Add in the standard cmake arguments
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the standard cmake arguments to what we want the build
- # type, etc to be
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- # Invoke cmake
- cmake('..', *cmakeOptions)
+ compile_flags = "-O2 -g"
- make("clean")
- make()
- make("install")
+ if '+runtime' in spec:
+ # Install message tag include file for use in Intel MIC
+ # cbtf-krell build
+ # FIXME
+ cmake_args = [
+ '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DRUNTIME_ONLY=TRUE',
+ '-DBoost_NO_SYSTEM_PATHS=TRUE',
+ '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
+ '-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
+ '-DCMAKE_MODULE_PATH=%s' % join_path(
+ prefix.share, 'KrellInstitute', 'cmake')]
+ else:
+ cmake_args = [
+ '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DBoost_NO_SYSTEM_PATHS=TRUE',
+ '-DXERCESC_DIR=%s' % spec['xerces-c'].prefix,
+ '-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix,
+ '-DCMAKE_MODULE_PATH=%s' % join_path(
+ prefix.share, 'KrellInstitute', 'cmake')]
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/ccache/package.py b/var/spack/repos/builtin/packages/ccache/package.py
index 69b590629e..44b45fbea9 100644
--- a/var/spack/repos/builtin/packages/ccache/package.py
+++ b/var/spack/repos/builtin/packages/ccache/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,12 +31,13 @@ class Ccache(AutotoolsPackage):
again."""
homepage = "https://ccache.samba.org/"
- url = "https://www.samba.org/ftp/ccache/ccache-3.3.3.tar.gz"
+ url = "https://www.samba.org/ftp/ccache/ccache-3.3.4.tar.gz"
+ version('3.3.4', '61326f1edac7cd211a7018458dfe2d86')
version('3.3.3', 'ea1f95303749b9ac136c617d1b333eef')
version('3.3.2', 'b966d56603e1fad2bac22930e5f01830')
version('3.3.1', '7102ef024cff09d353b3f4c48379b40b')
- version('3.3' , 'b7ac8fdd556f93831618483325fbb1ef')
+ version('3.3', 'b7ac8fdd556f93831618483325fbb1ef')
version('3.2.9', '8f3f6e15e75a0e6020166927d41bd0b3')
depends_on('gperf')
diff --git a/var/spack/repos/builtin/packages/cctools/package.py b/var/spack/repos/builtin/packages/cctools/package.py
new file mode 100644
index 0000000000..997a6ba6df
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cctools/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 Cctools(AutotoolsPackage):
+ """The Cooperative Computing Tools (cctools) enable large scale
+ distributed computations to harness hundreds to thousands of
+ machines from clusters, clouds, and grids.
+ """
+
+ homepage = "https://github.com/cooperative-computing-lab/cctools"
+ url = "https://github.com/cooperative-computing-lab/cctools/archive/release/6.1.1.tar.gz"
+
+ version('6.1.1', '9b43cdb3aceebddc1608c77184590619')
+
+ depends_on('openssl')
+ depends_on('perl+shared', type=('build', 'run'))
+ depends_on('python@:3', type=('build', 'run'))
+ depends_on('readline')
+ depends_on('swig')
+ # depends_on('xrootd')
+ depends_on('zlib')
+
+ # Generally SYS_foo is defined to __NR_foo (sys/syscall.h) which
+ # is then defined to a syscall number (asm/unistd_64.h). Certain
+ # CentOS systems have SYS_memfd_create defined to
+ # __NR_memfd_create but are missing the second definition.
+ # This is a belt and suspenders solution to the problem.
+ def patch(self):
+ before = '#if defined(__linux__) && defined(SYS_memfd_create)'
+ after = '#if defined(__linux__) && defined(SYS_memfd_create) && defined(__NR_memfd_create)' # noqa: E501
+ f = 'dttools/src/memfdexe.c'
+ kwargs = {'ignore_absent': False, 'backup': True, 'string': True}
+ filter_file(before, after, f, **kwargs)
+
+ def configure_args(self):
+ args = []
+ # disable these bits
+ for p in ['mysql', 'python3', 'xrootd']:
+ args.append('--with-{0}-path=no'.format(p))
+ # point these bits at the Spack installations
+ for p in ['openssl', 'perl', 'python', 'readline', 'swig', 'zlib']:
+ args.append('--with-{0}-path={1}'.format(p, self.spec[p].prefix))
+ return args
diff --git a/var/spack/repos/builtin/packages/cdbfasta/package.py b/var/spack/repos/builtin/packages/cdbfasta/package.py
new file mode 100644
index 0000000000..f3aafbe20a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cdbfasta/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Cdbfasta(MakefilePackage):
+ """Fast indexing and retrieval of fasta records from flat file databases"""
+
+ homepage = "https://github.com/gpertea/cdbfasta"
+ url = "https://github.com/gpertea/cdbfasta"
+
+ version('2017-03-16', git='https://github.com/gpertea/cdbfasta.git', commit='b3e481fe02dfbc767a3842bcb1b687c60376a5e8')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('cdbfasta', prefix.bin)
+ install('cdbyank', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cdd/package.py b/var/spack/repos/builtin/packages/cdd/package.py
index 4a0a0aefef..cf720577ea 100644
--- a/var/spack/repos/builtin/packages/cdd/package.py
+++ b/var/spack/repos/builtin/packages/cdd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ class Cdd(Package):
a general convex polyhedron given by a system of linear
inequalities"""
homepage = "https://www.inf.ethz.ch/personal/fukudak/cdd_home/cdd.html"
- url = "ftp://ftp.ifor.math.ethz.ch/pub/fukuda/cdd/cdd-061a.tar.gz"
+ url = "http://www.cs.mcgill.ca/~fukuda/download/cdd/cdd-061a.tar.gz"
version('0.61a', '22c24a7a9349dd7ec0e24531925a02d9')
@@ -42,7 +42,7 @@ class Cdd(Package):
patch("Makefile.spack.patch")
def url_for_version(self, version):
- url = "ftp://ftp.ifor.math.ethz.ch/pub/fukuda/cdd/cdd-{0}.tar.gz"
+ url = "http://www.cs.mcgill.ca/~fukuda/download/cdd/cdd-{0}.tar.gz"
return url.format(version.joined)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/cddlib/package.py b/var/spack/repos/builtin/packages/cddlib/package.py
index ced5f46d1f..360089272e 100644
--- a/var/spack/repos/builtin/packages/cddlib/package.py
+++ b/var/spack/repos/builtin/packages/cddlib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,24 +26,14 @@
from spack import *
-class Cddlib(Package):
+class Cddlib(AutotoolsPackage):
"""The C-library cddlib is a C implementation of the Double Description
Method of Motzkin et al. for generating all vertices (i.e. extreme points)
and extreme rays of a general convex polyhedron in R^d given by a system
of linear inequalities"""
- homepage = "https://www.inf.ethz.ch/personal/fukudak/cdd_home/"
- # This is the original download url. It is currently down [2016-08-23],
- # but should be reinstated or updated once the issue is resolved.
- # url = "ftp://ftp.ifor.math.ethz.ch/pub/fukuda/cdd/cddlib-094h.tar.gz"
- url = "http://pkgs.fedoraproject.org/lookaside/pkgs/cddlib/cddlib-094h.tar.gz/1467d270860bbcb26d3ebae424690e7c/cddlib-094h.tar.gz"
- def url_for_version(self, version):
- # Since the commit id is part of the version, we can't
- # auto-generate the string, and we need to explicitly list all
- # known versions here. Currently, there is only one version.
- if str(version) == '0.94h':
- return "http://pkgs.fedoraproject.org/lookaside/pkgs/cddlib/cddlib-094h.tar.gz/1467d270860bbcb26d3ebae424690e7c/cddlib-094h.tar.gz"
- raise InstallError("Unsupported version %s" % str(version))
+ homepage = "https://www.inf.ethz.ch/personal/fukudak/cdd_home/"
+ url = "ftp://ftp.math.ethz.ch/users/fukudak/cdd/cddlib-094h.tar.gz"
version('0.94h', '1467d270860bbcb26d3ebae424690e7c')
@@ -52,7 +42,6 @@ class Cddlib(Package):
depends_on("gmp")
depends_on("libtool", type="build")
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def url_for_version(self, version):
+ url = "ftp://ftp.math.ethz.ch/users/fukudak/cdd/cddlib-{0}.tar.gz"
+ return url.format(version.joined)
diff --git a/var/spack/repos/builtin/packages/cdhit/package.py b/var/spack/repos/builtin/packages/cdhit/package.py
new file mode 100644
index 0000000000..64f4940606
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cdhit/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Cdhit(MakefilePackage):
+ """CD-HIT is a very widely used program for clustering and comparing
+ protein or nucleotide sequences."""
+
+ homepage = "http://cd-hit.org/"
+ url = "https://github.com/weizhongli/cdhit/archive/V4.6.8.tar.gz"
+
+ version('4.6.8', 'bdd73ec0cceab6653aab7b31b57c5a8b')
+
+ variant('openmp', default=True, description='Compile with multi-threading support')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def build(self, spec, prefix):
+ mkdirp(prefix.bin)
+ if '~openmp' in spec:
+ make('openmp=no')
+ else:
+ make()
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('PREFIX', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cdo/package.py b/var/spack/repos/builtin/packages/cdo/package.py
index 775dc31cf3..ccf0769ff1 100644
--- a/var/spack/repos/builtin/packages/cdo/package.py
+++ b/var/spack/repos/builtin/packages/cdo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,93 +25,116 @@
from spack import *
-class Cdo(Package):
+class Cdo(AutotoolsPackage):
"""CDO is a collection of command line Operators to manipulate and analyse
- Climate and NWP model Data. """
+ Climate and NWP model Data.
+ """
- homepage = "https://code.zmaw.de/projects/cdo"
+ homepage = 'https://code.mpimet.mpg.de/projects/cdo'
+ url = 'https://code.mpimet.mpg.de/attachments/download/12760/cdo-1.7.2.tar.gz'
+ list_url = 'https://code.mpimet.mpg.de/projects/cdo/files'
- version('1.7.2', 'f08e4ce8739a4f2b63fc81a24db3ee31', url='https://code.zmaw.de/attachments/download/12760/cdo-1.7.2.tar.gz')
- version('1.6.9', 'bf0997bf20e812f35e10188a930e24e2', url='https://code.zmaw.de/attachments/download/10198/cdo-1.6.9.tar.gz')
+ version('1.9.1', 'e60a89f268ba24cee5c461f2c217829e')
+ version('1.9.0', '2d88561b3b4a880df0422a62e5027e40')
+ version('1.8.2', '6a2e2f99b7c67ee9a512c40a8d4a7121')
+ version('1.7.2', 'f08e4ce8739a4f2b63fc81a24db3ee31')
- variant('szip', default=True, description='Enable szip compression for GRIB1')
- variant('hdf5', default=False, description='Enable HDF5 support')
variant('netcdf', default=True, description='Enable NetCDF support')
+ variant('grib2', default='eccodes', values=('eccodes', 'grib-api', 'none'),
+ description='Specify GRIB2 backend')
+ variant('external-grib1', default=False,
+ description='Ignore the built-in support and use the external '
+ 'GRIB2 backend for GRIB1 files')
+ variant('szip', default=True,
+ description='Enable szip compression for GRIB1')
+ variant('hdf5', default=True, description='Enable HDF5 support')
+
variant('udunits2', default=True, description='Enable UDUNITS2 support')
- variant('grib', default=True, description='Enable GRIB_API support')
variant('libxml2', default=True, description='Enable libxml2 support')
- variant('proj', default=True, description='Enable PROJ library for cartographic projections')
- variant('curl', default=True, description='Enable curl support')
- variant('fftw', default=True, description='Enable support for fftw3')
- variant('magics', default=True, description='Enable Magics library support')
+ variant('proj', default=True,
+ description='Enable PROJ library for cartographic projections')
+ variant('curl', default=False, description='Enable curl support')
+ variant('fftw3', default=True, description='Enable support for fftw3')
+ variant('magics', default=False,
+ description='Enable Magics library support')
+ variant('openmp', default=True, description='Enable OpenMP support')
- depends_on('szip', when='+szip')
depends_on('netcdf', when='+netcdf')
+ # In this case CDO does not depend on hdf5 directly but we need the backend
+ # of netcdf to be thread safe.
+ depends_on('hdf5+threadsafe', when='+netcdf')
+
+ depends_on('grib-api', when='grib2=grib-api')
+ depends_on('eccodes', when='grib2=eccodes')
+
+ depends_on('szip', when='+szip')
+
depends_on('hdf5+threadsafe', when='+hdf5')
+
depends_on('udunits2', when='+udunits2')
- depends_on('grib-api', when='+grib')
depends_on('libxml2', when='+libxml2')
depends_on('proj', when='+proj')
depends_on('curl', when='+curl')
- depends_on('fftw', when='+fftw')
- depends_on('magics', when='+magics')
+ depends_on('fftw@3:', when='+fftw3')
+ depends_on('magics', when='+magics')
+ depends_on('libuuid')
- def install(self, spec, prefix):
- config_args = ["--prefix=" + prefix,
- "--enable-shared",
- "--enable-static"]
+ conflicts('grib2=eccodes', when='@:1.8',
+ msg='Eccodes is supported starting version 1.9.0')
+ conflicts('+szip', when='+external-grib1 grib2=none',
+ msg='The configuration does not support GRIB1')
- if '+szip' in spec:
- config_args.append('--with-szlib=' + spec['szip'].prefix)
- else:
- config_args.append('--without-szlib')
+ def configure_args(self):
+ config_args = self.with_or_without('netcdf', activation_value='prefix')
- if '+hdf5' in spec:
- config_args.append('--with-hdf5=' + spec['hdf5'].prefix)
+ if self.spec.variants['grib2'].value == 'eccodes':
+ config_args.append('--with-eccodes=' +
+ self.spec['eccodes'].prefix)
+ config_args.append('--without-grib_api')
+ elif self.spec.variants['grib2'].value == 'grib-api':
+ config_args.append('--with-grib_api=' +
+ self.spec['grib-api'].prefix)
+ if self.spec.satisfies('@1.9:'):
+ config_args.append('--without-eccodes')
else:
- config_args.append('--without-hdf5')
+ config_args.append('--without-grib_api')
+ if self.spec.satisfies('@1.9:'):
+ config_args.append('--without-eccodes')
- if '+netcdf' in spec:
- config_args.append('--with-netcdf=' + spec['netcdf'].prefix)
+ if '+external-grib1' in self.spec:
+ config_args.append('--disable-cgribex')
else:
- config_args.append('--without-netcdf')
+ config_args.append('--enable-cgribex')
- if '+udunits2' in spec:
- config_args.append('--with-udunits2=' + spec['udunits2'].prefix)
+ if '+szip' in self.spec:
+ config_args.append('--with-szlib=' + self.spec['szip'].prefix)
else:
- config_args.append('--without-udunits2')
+ config_args.append('--without-szlib')
- if '+grib' in spec:
- config_args.append('--with-grib_api=' + spec['grib-api'].prefix)
- else:
- config_args.append('--without-grib_api')
+ config_args += self.with_or_without('hdf5',
+ activation_value='prefix')
- if '+libxml2' in spec:
- config_args.append('--with-libxml2=' + spec['libxml2'].prefix)
- else:
- config_args.append('--without-libxml2')
+ config_args += self.with_or_without('udunits2',
+ activation_value='prefix')
- if '+proj' in spec:
- config_args.append('--with-proj=' + spec['proj'].prefix)
- else:
- config_args.append('--without-proj')
+ config_args += self.with_or_without('libxml2',
+ activation_value='prefix')
- if '+curl' in spec:
- config_args.append('--with-curl=' + spec['curl'].prefix)
- else:
- config_args.append('--without-curl')
+ config_args += self.with_or_without('proj',
+ activation_value='prefix')
- if '+fftw' in spec:
- config_args.append('--with-fftw3')
- else:
- config_args.append('--without-fftw3')
+ config_args += self.with_or_without('curl',
+ activation_value='prefix')
- if '+magics' in spec:
- config_args.append('--with-magics=' + spec['magics'].prefix)
- else:
- config_args.append('--without-magics')
+ config_args += self.with_or_without('magics',
+ activation_value='prefix')
+
+ config_args += self.with_or_without('fftw3')
+
+ config_args += self.enable_or_disable('openmp')
- configure(*config_args)
+ # Workaround for a problem in CDO
+ if self.spec.satisfies('@1.9:+hdf5^hdf5+mpi'):
+ config_args.append('CXX=' + self.spec['mpi'].mpicxx)
- make()
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/cereal/Boost.patch b/var/spack/repos/builtin/packages/cereal/Boost.patch
new file mode 100644
index 0000000000..fdc2a72208
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cereal/Boost.patch
@@ -0,0 +1,14 @@
+--- old/sandbox/CMakeLists.txt
++++ new/sandbox/CMakeLists.txt
+@@ -4,9 +4,11 @@
+ add_executable(sandbox_json sandbox_json.cpp)
+ add_executable(sandbox_rtti sandbox_rtti.cpp)
+
++if(Boost_FOUND)
+ add_executable(sandbox_vs sandbox_vs.cpp)
+ target_link_libraries(sandbox_vs sandbox_vs_dll)
+ include_directories(sandbox_shared_lib)
++endif(Boost_FOUND)
+
+ if(Boost_FOUND)
+ add_executable(performance performance.cpp)
diff --git a/var/spack/repos/builtin/packages/cereal/Boost2.patch b/var/spack/repos/builtin/packages/cereal/Boost2.patch
new file mode 100644
index 0000000000..f8edb2c479
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cereal/Boost2.patch
@@ -0,0 +1,10 @@
+--- old/unittests/CMakeLists.txt
++++ new/unittests/CMakeLists.txt
+@@ -1,4 +1,7 @@
+ file(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)
++if(NOT Boost_FOUND)
++ list(REMOVE_ITEM TESTS boost_variant.cpp)
++endif(Boost_FOUND)
+
+ # A semi-colon separated list of test sources that should not be automatically built with doctest
+ set(SPECIAL_TESTS "portability_test.cpp")
diff --git a/var/spack/repos/builtin/packages/cereal/package.py b/var/spack/repos/builtin/packages/cereal/package.py
index 0ce6ec593c..637257053e 100644
--- a/var/spack/repos/builtin/packages/cereal/package.py
+++ b/var/spack/repos/builtin/packages/cereal/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,11 +23,9 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-import shutil
-class Cereal(Package):
+class Cereal(CMakePackage):
"""cereal is a header-only C++11 serialization library. cereal takes
arbitrary data types and reversibly turns them into different
representations, such as compact binary encodings, XML, or
@@ -39,6 +37,7 @@ class Cereal(Package):
homepage = "http://uscilab.github.io/cereal/"
url = "https://github.com/USCiLab/cereal/archive/v1.1.2.tar.gz"
+ version('1.2.2', '4c56c7b9499dba79404250ef9a040481')
version('1.2.1', '64476ed74c19068ee543b53ad3992261')
version('1.2.0', 'e372c9814696481dbdb7d500e1410d2b')
version('1.1.2', '34d4ad174acbff005c36d4d10e48cbb9')
@@ -47,26 +46,17 @@ class Cereal(Package):
version('1.0.0', 'd1bacca70a95cec0ddbff68b0871296b')
version('0.9.1', '8872d4444ff274ce6cd1ed364d0fc0ad')
- patch("Werror.patch")
+ patch("Boost.patch")
+ patch("Boost2.patch", when="@1.2.2:")
+ patch("pointers.patch")
depends_on('cmake@2.6.2:', type='build')
- def install(self, spec, prefix):
- # Don't use -Werror
- filter_file(r'-Werror', '', 'CMakeLists.txt')
-
- # configure
+ def cmake_args(self):
# Boost is only used for self-tests, which we are not running (yet?)
- cmake('.', '-DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE', *std_cmake_args)
-
- # Build
- make()
-
- # Install
- shutil.rmtree(join_path(prefix, 'doc'), ignore_errors=True)
- shutil.rmtree(join_path(prefix, 'include'), ignore_errors=True)
- shutil.rmtree(join_path(prefix, 'lib'), ignore_errors=True)
- shutil.copytree('doc', join_path(prefix, 'doc'), symlinks=True)
- shutil.copytree('include', join_path(prefix, 'include'), symlinks=True)
- # Create empty directory to avoid linker warnings later
- os.mkdir(join_path(prefix, 'lib'))
+ return [
+ '-DCMAKE_DISABLE_FIND_PACKAGE_Boost=TRUE',
+ '-DSKIP_PORTABILITY_TEST=TRUE',
+ '-DJUST_INSTALL_CEREAL=On',
+ '-DWITH_WERROR=Off',
+ ]
diff --git a/var/spack/repos/builtin/packages/cereal/Werror.patch b/var/spack/repos/builtin/packages/cereal/pointers.patch
index d39eaaffdb..39d17a2d54 100644
--- a/var/spack/repos/builtin/packages/cereal/Werror.patch
+++ b/var/spack/repos/builtin/packages/cereal/pointers.patch
@@ -1,17 +1,3 @@
---- old/sandbox/CMakeLists.txt
-+++ new/sandbox/CMakeLists.txt
-@@ -4,9 +4,11 @@
- add_executable(sandbox_json sandbox_json.cpp)
- add_executable(sandbox_rtti sandbox_rtti.cpp)
-
-+if(Boost_FOUND)
- add_executable(sandbox_vs sandbox_vs.cpp)
- target_link_libraries(sandbox_vs sandbox_vs_dll)
- include_directories(sandbox_shared_lib)
-+endif(Boost_FOUND)
-
- if(Boost_FOUND)
- add_executable(performance performance.cpp)
--- old/include/cereal/types/common.hpp
+++ new/include/cereal/types/common.hpp
@@ -106,14 +106,16 @@
diff --git a/var/spack/repos/builtin/packages/cfitsio/package.py b/var/spack/repos/builtin/packages/cfitsio/package.py
index 79af31ae21..49d71cdcab 100644
--- a/var/spack/repos/builtin/packages/cfitsio/package.py
+++ b/var/spack/repos/builtin/packages/cfitsio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,39 @@
from spack import *
-class Cfitsio(Package):
+class Cfitsio(AutotoolsPackage):
"""CFITSIO is a library of C and Fortran subroutines for reading and writing
data files in FITS (Flexible Image Transport System) data format.
"""
homepage = 'http://heasarc.gsfc.nasa.gov/fitsio/'
+ url = 'http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio3410.tar.gz'
+ version('3.410', '8a4a66fcdd816aae41768baa0b025552')
version('3.370', 'abebd2d02ba5b0503c633581e3bfa116')
+ variant('bzip2', default=True, description='Enable bzip2 support')
+ variant('shared', default=True, description='Build shared libraries')
+
+ depends_on('bzip2', when='+bzip2')
+
def url_for_version(self, version):
- url = 'ftp://heasarc.gsfc.nasa.gov/software/fitsio/c/cfitsio{0}.tar.gz'
+ url = 'http://heasarc.gsfc.nasa.gov/FTP/software/fitsio/c/cfitsio{0}.tar.gz'
return url.format(version.joined)
- def install(self, spec, prefix):
- configure('--prefix=' + prefix)
- make()
- make('install')
+ def configure_args(self):
+ spec = self.spec
+ extra_args = []
+ if '+bzip2' in spec:
+ extra_args.append('--with-bzip2=%s' % spec['bzip2'].prefix),
+ return extra_args
+
+ @property
+ def build_targets(self):
+ targets = ['all']
+
+ # Build shared if variant is set.
+ if '+shared' in self.spec:
+ targets += ['shared']
+
+ return targets
diff --git a/var/spack/repos/builtin/packages/cgal/package.py b/var/spack/repos/builtin/packages/cgal/package.py
index a16572246b..8961ee48bc 100644
--- a/var/spack/repos/builtin/packages/cgal/package.py
+++ b/var/spack/repos/builtin/packages/cgal/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Cgal(Package):
+class Cgal(CMakePackage):
"""The Computational Geometry Algorithms Library (CGAL) is a C++ library
that aims to provide easy access to efficient and reliable algorithms in
computational geometry. CGAL is used in various areas needing geometric
@@ -35,14 +35,16 @@ class Cgal(Package):
homepage = 'http://www.cgal.org/'
url = 'https://github.com/CGAL/cgal/archive/releases/CGAL-4.7.tar.gz'
+ version('4.9.1', 'df6517df3320bf6c9de2e1b0361738b9')
version('4.9', '7b628db3e5614347f776c046b7666089')
version('4.7', '4826714810f3b4c65cac96b90fb03b67')
version('4.6.3', 'e8ee2ecc8d2b09b94a121c09257b576d')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
# ---- See "7 CGAL Libraries" at:
# http://doc.cgal.org/latest/Manual/installation.html
@@ -57,6 +59,8 @@ class Cgal(Package):
variant('demos', default=False,
description='Build CGAL demos')
+ depends_on('cmake@2.8.11:', type='build')
+
# Essential Third Party Libraries
depends_on('boost+thread+system')
depends_on('gmp')
@@ -81,18 +85,12 @@ class Cgal(Package):
# depends_on('esbtl')
# depends_on('intel-tbb')
- # Build dependencies
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
+ def cmake_args(self):
# Installation instructions:
# http://doc.cgal.org/latest/Manual/installation.html
+ spec = self.spec
- options = std_cmake_args + [
- # CGAL supports only Release and Debug build type. Any
- # other build type will raise an error at configure time
- '-DCMAKE_BUILD_TYPE:STRING=%s' %
- ('Debug' if '+debug' in spec else 'Release'),
+ return [
'-DBUILD_SHARED_LIBS:BOOL=%s' %
('ON' if '+shared' in spec else 'OFF'),
'-DWITH_CGAL_Core:BOOL=%s' %
@@ -100,9 +98,5 @@ class Cgal(Package):
'-DWITH_CGAL_ImageIO:BOOL=%s' %
('YES' if '+imageio' in spec else 'NO'),
'-DWITH_CGAL_Qt5:BOOL=%s' %
- ('YES' if '+demos' in spec else 'NO')]
-
- with working_dir('spack-build', create=True):
- cmake('..', *options)
- make()
- make('install')
+ ('YES' if '+demos' in spec else 'NO'),
+ ]
diff --git a/var/spack/repos/builtin/packages/cgm/package.py b/var/spack/repos/builtin/packages/cgm/package.py
index 5a998d471c..8f2fa13f9a 100644
--- a/var/spack/repos/builtin/packages/cgm/package.py
+++ b/var/spack/repos/builtin/packages/cgm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,30 +25,48 @@
from spack import *
-class Cgm(Package):
+class Cgm(AutotoolsPackage):
"""The Common Geometry Module, Argonne (CGMA) is a code library
which provides geometry functionality used for mesh generation and
other applications."""
- homepage = "http://trac.mcs.anl.gov/projects/ITAPS/wiki/CGM"
- url = "http://ftp.mcs.anl.gov/pub/fathom/cgm13.1.1.tar.gz"
+ homepage = "http://sigma.mcs.anl.gov/cgm-library"
+ url = "http://ftp.mcs.anl.gov/pub/fathom/cgm-16.0.tar.gz"
+ version('16.0', 'a68aa5954d82502ff75d5eb91a29a01c')
version('13.1.1', '4e8dbc4ba8f65767b29f985f7a23b01f')
version('13.1.0', 'a6c7b22660f164ce893fb974f9cb2028')
version('13.1', '95f724bda04919fc76818a5b7bc0b4ed')
- depends_on("mpi")
+ variant("mpi", default=True, description='enable mpi support')
+ variant("oce", default=False, description='enable oce geometry kernel')
+ variant("debug", default=False, description='enable debug symbols')
+ variant("shared", default=False, description='enable shared builds')
- def patch(self):
- filter_file('^(#include "CGMParallelConventions.h")',
- '//\1',
- 'geom/parallel/CGMReadParallel.cpp')
+ depends_on('mpi', when='+mpi')
+ depends_on('oce+X11', when='+oce')
- def install(self, spec, prefix):
- configure("--with-mpi",
- "--prefix=%s" % prefix,
- "CFLAGS=-static",
- "CXXFLAGS=-static",
- "FCFLAGS=-static")
+ def configure_args(self):
+ spec = self.spec
+ args = []
- make()
- make("install")
+ if '+mpi' in spec:
+ args.extend([
+ "--with-mpi",
+ "CC={0}".format(spec['mpi'].mpicc),
+ "CXX={0}".format(spec['mpi'].mpicxx)
+ ])
+ else:
+ args.append("--without-mpi")
+
+ if '+oce' in spec:
+ args.append("--with-occ={0}".format(spec['oce'].prefix))
+ else:
+ args.append("--without-occ")
+
+ if '+debug' in spec:
+ args.append("--enable-debug")
+
+ if '+shared' in spec:
+ args.append("--enable-shared")
+
+ return args
diff --git a/var/spack/repos/builtin/packages/cgns/package.py b/var/spack/repos/builtin/packages/cgns/package.py
index ba3fd7f821..c9d46dc8e9 100644
--- a/var/spack/repos/builtin/packages/cgns/package.py
+++ b/var/spack/repos/builtin/packages/cgns/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Cgns(Package):
+class Cgns(CMakePackage):
"""The CFD General Notation System (CGNS) provides a general, portable,
and extensible standard for the storage and retrieval of computational
fluid dynamics (CFD) analysis data."""
@@ -37,11 +37,14 @@ class Cgns(Package):
variant('hdf5', default=True, description='Enable HDF5 interface')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8:', type='build')
depends_on('hdf5', when='+hdf5')
- def install(self, spec, prefix):
- cmake_args = std_cmake_args[:]
+ parallel = False
+
+ def cmake_args(self):
+ spec = self.spec
+ cmake_args = []
if self.compiler.f77 and self.compiler.fc:
cmake_args.append('-DCGNS_ENABLE_FORTRAN=ON')
@@ -51,23 +54,10 @@ class Cgns(Package):
if '+hdf5' in spec:
cmake_args.extend([
'-DCGNS_ENABLE_HDF5=ON',
- '-DHDF5_NEEDS_ZLIB=ON'
+ '-DHDF5_DIR=%s' % spec['hdf5'].prefix
])
- if spec.satisfies('^hdf5+mpi'):
- cmake_args.append('-DHDF5_NEEDS_MPI=ON')
- else:
- cmake_args.append('-DHDF5_NEEDS_MPI=OFF')
-
- if spec.satisfies('^hdf5+szip'):
- cmake_args.append('-DHDF5_NEEDS_SZIP=ON')
- else:
- cmake_args.append('-DHDF5_NEEDS_SZIP=OFF')
else:
cmake_args.append('-DCGNS_ENABLE_HDF5=OFF')
- with working_dir('spack-build', create=True):
- cmake('..', *cmake_args)
-
- make()
- make('install')
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/charm/package.py b/var/spack/repos/builtin/packages/charm/package.py
index 7072e37cd3..b5568920d9 100644
--- a/var/spack/repos/builtin/packages/charm/package.py
+++ b/var/spack/repos/builtin/packages/charm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -53,16 +53,12 @@ class Charm(Package):
# Communication mechanisms (choose exactly one)
# TODO: Support Blue Gene/Q PAMI, Cray GNI, Cray shmem, CUDA
- variant("mpi", default=True,
- description="Use MPI as communication mechanism")
- variant("multicore", default=False,
- description="Disable inter-node communication")
- variant("net", default=False,
- description="Use net communication mechanism")
- variant("netlrts", default=True,
- description="Use netlrts communication mechanism")
- variant("verbs", default=False,
- description="Use Infiniband as communication mechanism")
+ variant(
+ 'backend',
+ default='mpi',
+ values=('mpi', 'multicore', 'net', 'netlrts', 'verbs'),
+ description='Set the backend to use'
+ )
# Other options
# Something is off with PAPI -- there are build errors. Maybe
@@ -73,37 +69,17 @@ class Charm(Package):
"Enable SMP parallelism (does not work with +multicore)"))
variant("tcp", default=False,
description="Use TCP as transport mechanism (requires +net)")
+ variant("shared", default=True, description="Enable shared link support")
# Note: We could add variants for AMPI, LIBS, bigemulator, msa, Tau
- # Note: We could support shared libraries
- depends_on("mpi", when="+mpi")
+ depends_on('mpi', when='backend=mpi')
depends_on("papi", when="+papi")
def install(self, spec, prefix):
target = "charm++"
- # Note: Turn this into a multi-valued variant, once these
- # exist in Spack
- if sum(["+mpi" in spec,
- "+multicore" in spec,
- "+net" in spec,
- "+netlrts" in spec,
- "+verbs" in spec]) != 1:
- raise InstallError(
- "Exactly one communication mechanism "
- "(+mpi, +multicore, +net, +netlrts, or +verbs) "
- "must be enabled")
- if "+mpi" in spec:
- comm = "mpi"
- if "+multicore" in spec:
- comm = "multicore"
- if "+net" in spec:
- comm = "net"
- if "+netlrts" in spec:
- comm = "netlrts"
- if "+verbs" in spec:
- comm = "verbs"
+ comm = spec.variants['backend'].value
plat = sys.platform
if plat.startswith("linux"):
@@ -139,30 +115,46 @@ class Charm(Package):
# We assume that Spack's compiler wrappers make this work. If
# not, then we need to query the compiler vendor from Spack
# here.
- compiler = "gcc"
-
- options = [compiler,
- "--with-production", # Note: turn this into a variant
- "-j%d" % make_jobs,
- "--destination=%s" % prefix]
- if "+mpi" in spec:
- options.append("--basedir=%s" % spec["mpi"].prefix)
+ compiler = os.path.basename(self.compiler.cc)
+
+ options = [compiler]
+ if compiler == 'icc':
+ options.append('ifort')
+
+ options.extend([
+ "--with-production", # Note: turn this into a variant
+ "-j%d" % make_jobs,
+ "--destination=%s" % prefix])
+
+ if 'backend=mpi' in spec:
+ # in intelmpi <prefix>/include and <prefix>/lib fails so --basedir
+ # cannot be used
+ options.extend([
+ '--incdir={0}'.format(incdir)
+ for incdir in spec["mpi"].headers.directories
+ ])
+ options.extend([
+ '--libdir={0}'.format(libdir)
+ for libdir in spec["mpi"].libs.directories
+ ])
if "+papi" in spec:
options.extend(["papi", "--basedir=%s" % spec["papi"].prefix])
if "+smp" in spec:
- if "+multicore" in spec:
+ if 'backend=multicore' in spec:
# This is a Charm++ limitation; it would lead to a
# build error
raise InstallError("Cannot combine +smp with +multicore")
options.append("smp")
if "+tcp" in spec:
- if "+net" not in spec:
+ if 'backend=net' not in spec:
# This is a Charm++ limitation; it would lead to a
# build error
raise InstallError(
"The +tcp variant requires "
- "the +net communication mechanism")
+ "the backend=net communication mechanism")
options.append("tcp")
+ if "+shared" in spec:
+ options.append("--build-shared")
# Call "make" via the build script
# Note: This builds Charm++ in the "tmp" subdirectory of the
@@ -185,6 +177,6 @@ class Charm(Package):
shutil.copy2(filepath, tmppath)
os.remove(filepath)
os.rename(tmppath, filepath)
- except:
+ except (IOError, OSError):
pass
shutil.rmtree(join_path(prefix, "tmp"))
diff --git a/var/spack/repos/builtin/packages/check/package.py b/var/spack/repos/builtin/packages/check/package.py
new file mode 100644
index 0000000000..c87a982fa5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/check/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Check(AutotoolsPackage):
+ """Check is a unit testing framework for C. It features a simple interface
+ for defining unit tests, putting little in the way of the developer. Tests
+ are run in a separate address space, so both assertion failures and code
+ errors that cause segmentation faults or other signals can be caught. Test
+ results are reportable in the following: Subunit, TAP, XML, and a generic
+ logging format."""
+
+ homepage = "https://libcheck.github.io/check/index.html"
+ url = "https://downloads.sourceforge.net/project/check/check/0.10.0/check-0.10.0.tar.gz"
+
+ version('0.10.0', '53c5e5c77d090e103a17f3ed7fd7d8b8')
diff --git a/var/spack/repos/builtin/packages/chlorop/chlorop.patch b/var/spack/repos/builtin/packages/chlorop/chlorop.patch
new file mode 100644
index 0000000000..6d49dc53d0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/chlorop/chlorop.patch
@@ -0,0 +1,36 @@
+--- a/chlorop 2006-03-20 06:24:22.000000000 -0600
++++ b/chlorop 2017-07-24 10:51:27.000366706 -0500
+@@ -9,8 +9,6 @@
+ STARTDIR=`pwd`
+
+ ### GENERAL SETTINGS, CUSTOMIZE +++++++++++++++++++++++++++++++++++++++++++++++
+-# Substitute your chosen location for ChloroP software:
+-CHLOROP=/usr/cbs/packages/chlorop/currdist/chlorop-1.1
+
+ # Substitute paste:
+ PASTE=paste
+@@ -43,7 +41,7 @@
+ # other settings:
+ #CHLOROTMPNAME=res`date '+%y%m%d%H%M%S'`.$$
+ CHLOROTMPNAME=res.$$
+-CHLOROTMP=tmp/$CHLOROTMPNAME
++CHLOROTMP=$CHLOROTMP/$CHLOROTMPNAME
+ SCRIPTS=bin
+ SYN=syn
+ ETC=etc
+@@ -80,12 +78,12 @@
+ ### get the infile ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ INFILE=$*
+
+-mkdir $CHLOROP/$CHLOROTMP || { echo Cannot create temporary directory; exit 1; }
++mkdir -p $CHLOROTMP || { echo Cannot create temporary directory; exit 1; }
+
+ ### prepare input file in HOW and fasta format ++++++++++++++++++++++++++++++++
+ $AWK -f $CHLOROP/$SCRIPTS/in2how+fasta.awk -v informat=$INFORMAT \
+- -v howout=$CHLOROP/$CHLOROTMP/infile.how \
+- -v fastaout=$CHLOROP/$CHLOROTMP/infile.fasta $INFILE
++ -v howout=$CHLOROTMP/infile.how \
++ -v fastaout=$CHLOROTMP/infile.fasta $INFILE
+ INFILE=$CHLOROTMP/infile.how
+
+ ### change to working directory +++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/var/spack/repos/builtin/packages/chlorop/package.py b/var/spack/repos/builtin/packages/chlorop/package.py
new file mode 100644
index 0000000000..2bccd6d951
--- /dev/null
+++ b/var/spack/repos/builtin/packages/chlorop/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 *
+import distutils.dir_util
+import os
+
+
+class Chlorop(Package):
+ """Chlorop predicts the presence of chloroplast transit peptides
+ in protein sequences and the location of potential cTP cleavage
+ sites. You will need to obtain the tarball by visiting the
+ URL and completing the form. You can then either run spack
+ install with the tarball in the directory, or add it to a
+ mirror. You will need to set the CHLOROTMP environment variable
+ to the full path of the directory you want chlorop to use as
+ a temporary directory."""
+
+ homepage = "http://www.cbs.dtu.dk/services/ChloroP/"
+ url = "file://{0}/chlorop-1.1.Linux.tar.gz".format(os.getcwd())
+
+ version('1.1', 'eb0ba6b28dfa735163ad5fc70e30139e46e33f6ae27f87666a7167a4ac5f71d9')
+
+ depends_on('awk', type='run')
+ patch('chlorop.patch')
+
+ def install(self, spec, prefix):
+ os.rename('chlorop', 'bin/chlorop')
+ distutils.dir_util.copy_tree(".", prefix)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('CHLOROP', self.prefix)
diff --git a/var/spack/repos/builtin/packages/chombo/Make.defs.local.template.patch b/var/spack/repos/builtin/packages/chombo/Make.defs.local.template.patch
new file mode 100644
index 0000000000..cc72659445
--- /dev/null
+++ b/var/spack/repos/builtin/packages/chombo/Make.defs.local.template.patch
@@ -0,0 +1,23 @@
+*** lib/mk/Make.defs.local.template 2017-05-02 16:00:16.000000000 -0700
+--- lib/mk/Make.defs.local.template.patched 2017-05-02 18:50:36.000000000 -0700
+***************
+*** 129,135 ****
+--- 129,137 ----
+ #HDFMPILIBFLAGS= -L<hdf_parallel_dir>/lib -lhdf5 -lz
+ #USE_MF =
+ #USE_MT =
++ #USE_LAPACK =
+ #USE_SETVAL =
++ #USE_TIMER =
+ #CH_AR =
+ #CH_CPP =
+ #DOXYGEN =
+***************
+*** 151,155 ****
+--- 153,158 ----
+ #ldoptflags =
+ #ldprofflags =
+ #syslibflags =
++ #lapackincflags =
+
+ #end -- dont change this line
diff --git a/var/spack/repos/builtin/packages/chombo/hdf5-16api.patch b/var/spack/repos/builtin/packages/chombo/hdf5-16api.patch
new file mode 100644
index 0000000000..6525061886
--- /dev/null
+++ b/var/spack/repos/builtin/packages/chombo/hdf5-16api.patch
@@ -0,0 +1,12 @@
+*** lib/src/BoxTools/HDF5Portable.H 2017-05-02 13:57:57.000000000 -0700
+--- lib/src/BoxTools/HDF5Portable.H.patched 2017-05-02 13:55:30.000000000 -0700
+***************
+*** 15,20 ****
+--- 15,21 ----
+ extern "C"
+ {
+ #ifdef CH_USE_HDF5
++ #define H5_USE_16_API
+ #include <hdf5.h>
+ #else
+ typedef long hid_t;
diff --git a/var/spack/repos/builtin/packages/chombo/package.py b/var/spack/repos/builtin/packages/chombo/package.py
new file mode 100644
index 0000000000..8dd5155199
--- /dev/null
+++ b/var/spack/repos/builtin/packages/chombo/package.py
@@ -0,0 +1,140 @@
+##############################################################################
+# 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/spack/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 *
+from shutil import copyfile
+import glob
+
+
+class Chombo(MakefilePackage):
+ """The Chombo package provides a set of tools for implementing finite
+ difference and finite-volume methods for the solution of partial
+ differential equations on block-structured adaptively refined
+ logically rectangular (i.e. Cartesian) grids."""
+
+ homepage = "https://commons.lbl.gov/display/chombo"
+ url = "http://bitbucket.org/drhansj/chombo-xsdk.git"
+
+ # Use whatever path Brian V. and Terry L. agreed upon, but preserve version
+ version('3.2', git='http://bitbucket.org/drhansj/chombo-xsdk.git', commit='71d856c')
+ version('develop', git='http://bitbucket.org/drhansj/chombo-xsdk.git', tag='master')
+# version('3.2', svn='https://anag-repo.lbl.gov/svn/Chombo/release/3.2')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+ variant('hdf5', default=True, description='Enable HDF5 support')
+ variant('dims',
+ default='3',
+ values=('1', '2', '3', '4', '5', '6'),
+ multi=False,
+ description='Number of PDE dimensions [1-6]'
+ )
+
+ patch('hdf5-16api.patch', when='@3.2', level=0)
+ patch('Make.defs.local.template.patch', when='@3.2', level=0)
+
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('gmake', type='build')
+ depends_on('mpi', when='+mpi')
+ depends_on('hdf5', when='+hdf5')
+ depends_on('hdf5+mpi', when='+mpi+hdf5')
+
+ def edit(self, spec, prefix):
+
+ # Set fortran name mangling in Make.defs
+ defs_file = FileFilter('./lib/mk/Make.defs')
+ defs_file.filter('^\s*#\s*cppcallsfort\s*=\s*',
+ 'cppcallsfort = -DCH_FORT_UNDERSCORE')
+
+ # Set remaining variables in Make.defs.local
+ # Make.defs.local.template.patch ensures lines for USE_TIMER,
+ # USE_LAPACK and lapackincflags are present
+ copyfile('./lib/mk/Make.defs.local.template',
+ './lib/mk/Make.defs.local')
+
+ defs_file = FileFilter('./lib/mk/Make.defs.local')
+
+ # Unconditional settings
+ defs_file.filter('^\s*#\s*DEBUG\s*=\s*', 'DEBUG = FALSE')
+ defs_file.filter('^\s*#\s*OPT\s*=\s*', 'OPT = TRUE')
+ defs_file.filter('^\s*#\s*PIC\s*=\s*', 'PIC = TRUE')
+ # timer code frequently fails compiles. So disable it.
+ defs_file.filter('^\s*#\s*USE_TIMER\s*=\s*', 'USE_TIMER = FALSE')
+
+ # LAPACK setup
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ defs_file.filter('^\s*#\s*USE_LAPACK\s*=\s*', 'USE_LAPACK = TRUE')
+ defs_file.filter(
+ '^\s*#\s*lapackincflags\s*=\s*',
+ 'lapackincflags = -I%s' % spec['lapack'].prefix.include)
+ defs_file.filter(
+ '^\s*#\s*syslibflags\s*=\s*',
+ 'syslibflags = %s' % lapack_blas.ld_flags)
+
+ # Compilers and Compiler flags
+ defs_file.filter('^\s*#\s*CXX\s*=\s*', 'CXX = %s' % spack_cxx)
+ defs_file.filter('^\s*#\s*FC\s*=\s*', 'FC = %s' % spack_fc)
+ if '+mpi' in spec:
+ defs_file.filter(
+ '^\s*#\s*MPICXX\s*=\s*',
+ 'MPICXX = %s' % self.spec['mpi'].mpicxx)
+
+ # Conditionally determined settings
+ defs_file.filter(
+ '^\s*#\s*MPI\s*=\s*',
+ 'MPI = %s' % ('TRUE' if '+mpi' in spec else 'FALSE'))
+ defs_file.filter(
+ '^\s*#\s*DIM\s*=\s*',
+ 'DIM = %s' % spec.variants['dims'].value)
+
+ # HDF5 settings
+ if '+hdf5' in spec:
+ defs_file.filter('^\s*#\s*USE_HDF5\s*=\s*', 'USE_HDF5 = TRUE')
+ defs_file.filter(
+ '^\s*#\s*HDFINCFLAGS\s*=.*',
+ 'HDFINCFLAGS = -I%s' % spec['hdf5'].prefix.include)
+ defs_file.filter(
+ '^\s*#\s*HDFLIBFLAGS\s*=.*',
+ 'HDFLIBFLAGS = %s' % spec['hdf5'].libs.ld_flags)
+ if '+mpi' in spec:
+ defs_file.filter(
+ '^\s*#\s*HDFMPIINCFLAGS\s*=.*',
+ 'HDFMPIINCFLAGS = -I%s' % spec['hdf5'].prefix.include)
+ defs_file.filter(
+ '^\s*#\s*HDFMPILIBFLAGS\s*=.*',
+ 'HDFMPILIBFLAGS = %s' % spec['hdf5'].libs.ld_flags)
+
+ def build(self, spec, prefix):
+ with working_dir('lib'):
+ gmake('all')
+
+ def install(self, spec, prefix):
+ with working_dir('lib'):
+ install_tree('include', prefix.include)
+ libfiles = glob.glob('lib*.a')
+ libfiles += glob.glob('lib*.so')
+ libfiles += glob.glob('lib*.dylib')
+ mkdirp(prefix.lib)
+ for lib in libfiles:
+ install(lib, prefix.lib)
diff --git a/var/spack/repos/builtin/packages/cityhash/package.py b/var/spack/repos/builtin/packages/cityhash/package.py
index 85d948cc57..67ee8561a3 100644
--- a/var/spack/repos/builtin/packages/cityhash/package.py
+++ b/var/spack/repos/builtin/packages/cityhash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,10 +23,9 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-from spack.util.environment import *
-class Cityhash(Package):
+class Cityhash(AutotoolsPackage):
"""CityHash, a family of hash functions for strings."""
homepage = "https://github.com/google/cityhash"
@@ -37,8 +36,5 @@ class Cityhash(Package):
version('master', branch='master',
git='https://github.com/google/cityhash.git')
- def install(self, spec, prefix):
- configure('--enable-sse4.2', '--prefix=%s' % prefix)
-
- make()
- make("install")
+ def configure_args(self):
+ return ['--enable-sse4.2']
diff --git a/var/spack/repos/builtin/packages/clamr/package.py b/var/spack/repos/builtin/packages/clamr/package.py
new file mode 100644
index 0000000000..3608c64ca2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/clamr/package.py
@@ -0,0 +1,78 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Clamr(CMakePackage):
+ """The CLAMR code is a cell-based adaptive mesh refinement (AMR)
+ mini-app developed as a testbed for hybrid algorithm development
+ using MPI and OpenCL GPU code.
+ """
+
+ homepage = "https://github.com/lanl/CLAMR"
+ url = "https://github.com/lanl/CLAMR.git"
+ tags = ['proxy-app']
+
+ version('master', git='https://github.com/lanl/CLAMR.git')
+
+ variant(
+ 'graphics', default='opengl',
+ values=('opengl', 'mpe', 'none'),
+ description='Build with specified graphics support')
+ variant(
+ 'precision', default='mixed',
+ values=('single', 'mixed', 'full'),
+ description='single, mixed, or full double precision values')
+
+ depends_on('mpi')
+ depends_on('mpe', when='graphics=mpe')
+
+ def cmake_args(self):
+ spec = self.spec
+ cmake_args = []
+ if 'graphics=none' in spec:
+ cmake_args.append('-DGRAPHICS_TYPE=None')
+ elif 'graphics=mpe' in spec:
+ cmake_args.append('-DGRAPHICS_TYPE=MPE')
+ else:
+ cmake_args.append('-DGRAPHICS_TYPE=OpenGL')
+
+ if 'precision=full' in spec:
+ cmake_args.append('-DPRECISION_TYPE=full_precision')
+ elif 'precision=single' in spec:
+ cmake_args.append('-DPRECISION_TYPE=minimum_precision')
+ else:
+ cmake_args.append('-DPRECISION_TYPE=mixed_precision')
+
+ # if MIC, then -DMIC_NATIVE=yes
+ return cmake_args
+
+ def install(self, spec, prefix):
+ install('README', prefix)
+ install('LICENSE', prefix)
+ install_tree('docs', join_path(prefix, 'docs'))
+ install_tree('tests', join_path(prefix, 'tests'))
+ with working_dir(self.build_directory):
+ make('install')
diff --git a/var/spack/repos/builtin/packages/cleaveland4/package.py b/var/spack/repos/builtin/packages/cleaveland4/package.py
new file mode 100644
index 0000000000..910ef7cb12
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cleaveland4/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Cleaveland4(Package):
+ """CleaveLand4: Analysis of degradome data to find sliced miRNA and siRNA
+ targets"""
+
+ homepage = "https://github.com/MikeAxtell/CleaveLand4"
+ url = "https://github.com/MikeAxtell/CleaveLand4/archive/v4.4.tar.gz"
+
+ version('4.4', 'cf62a1de715a612fc8bd5a62364e69db')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('perl-math-cdf', type=('build', 'run'))
+ depends_on('bowtie')
+ depends_on('viennarna')
+ depends_on('r', type=('build', 'run'))
+ depends_on('samtools')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('CleaveLand4.pl', prefix.bin)
+ with working_dir('GSTAr_v1-0'):
+ install('GSTAr.pl', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cleverleaf/package.py b/var/spack/repos/builtin/packages/cleverleaf/package.py
index 3bd1f0b5d0..0e40d3ff4c 100644
--- a/var/spack/repos/builtin/packages/cleverleaf/package.py
+++ b/var/spack/repos/builtin/packages/cleverleaf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Cleverleaf(Package):
+class Cleverleaf(CMakePackage):
"""CleverLeaf is a hydrodynamics mini-app that extends CloverLeaf with
Adaptive Mesh Refinement using the SAMRAI toolkit from Lawrence
Livermore National Laboratory. The primary goal of CleverLeaf is
@@ -40,12 +40,7 @@ class Cleverleaf(Package):
version('develop', git='https://github.com/UK-MAC/CleverLeaf_ref.git',
branch='develop')
- depends_on("samrai@3.8.0:")
- depends_on("hdf5+mpi")
- depends_on("boost")
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake(*std_cmake_args)
- make()
- make("install")
+ depends_on('samrai@3.8.0:')
+ depends_on('hdf5+mpi')
+ depends_on('boost')
+ depends_on('cmake@3.1:', type='build')
diff --git a/var/spack/repos/builtin/packages/clfft/package.py b/var/spack/repos/builtin/packages/clfft/package.py
new file mode 100644
index 0000000000..d626e8964a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/clfft/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Clfft(CMakePackage):
+ """a software library containing FFT functions written in OpenCL"""
+
+ homepage = "https://github.com/clMathLibraries/clFFT"
+ url = "https://github.com/clMathLibraries/clFFT/archive/v2.12.2.tar.gz"
+
+ version('2.12.2', '9104d85f9f2f3c58dd8efc0e4b06496f')
+
+ variant('client', default=True,
+ description='build client and callback client')
+
+ depends_on('opencl@1.2:')
+ depends_on('boost@1.33.0:', when='+client')
+
+ root_cmakelists_dir = 'src'
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DBUILD_CLIENT:BOOL={0}'.format((
+ 'ON' if '+client' in spec else 'OFF')),
+ '-DBUILD_CALLBACK_CLIENT:BOOL={0}'.format((
+ 'ON' if '+client' in spec else 'OFF'))
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/clhep/package.py b/var/spack/repos/builtin/packages/clhep/package.py
index 02a9da9e27..f1f1d2db96 100644
--- a/var/spack/repos/builtin/packages/clhep/package.py
+++ b/var/spack/repos/builtin/packages/clhep/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,13 +26,23 @@
from spack import *
-class Clhep(Package):
+class Clhep(CMakePackage):
"""CLHEP is a C++ Class Library for High Energy Physics. """
homepage = "http://proj-clhep.web.cern.ch/proj-clhep/"
url = "http://proj-clhep.web.cern.ch/proj-clhep/DISTRIBUTION/tarFiles/clhep-2.2.0.5.tgz"
- list_url = "https://proj-clhep.web.cern.ch/proj-clhep/DISTRIBUTION/"
+ list_url = "https://proj-clhep.web.cern.ch/proj-clhep/"
+ list_depth = 1
+ version('2.3.4.4', '8b8a33d0d19213b60d6c22ce5fc93761')
+ version('2.3.4.3', '6941279f70d69492fff1aa955f3f2562')
+ version('2.3.4.2', '1e7a9046c9ad0b347d6812f8031191da')
+ version('2.3.4.1', '5ae85571ff3d8b2c481c3f95ea89b751')
+ version('2.3.4.0', 'dd899d0791a823221927f97edf190348')
+ version('2.3.3.2', '8b9f8d7f4dccec6d058b3a078f66b6a3')
+ version('2.3.3.1', '456ef9d262ef4e776af984bfbe2f48c7')
+ version('2.3.3.0', '3637eaa6750606e589e52c9e155a382e')
version('2.3.2.2', '567b304b0fa017e1e9fbf199f456ebe9')
+ version('2.3.2.1', '064903cb5c23b54f520d04ca6230b901')
version('2.3.1.1', '16efca7641bc118c9d217cc96fe90bf5')
version('2.3.1.0', 'b084934fc26a4182a08c09c292e19161')
version('2.3.0.0', 'a00399a2ca867f2be902c22fc71d7e2e')
@@ -40,7 +50,6 @@ class Clhep(Package):
version('2.2.0.5', '1584e8ce6ebf395821aed377df315c7c')
version('2.2.0.4', '71d2c7c2e39d86a0262e555148de01c1')
- variant('debug', default=False, description="Switch to the debug version of CLHEP.")
variant('cxx11', default=True, description="Compile using c++11 dialect.")
variant('cxx14', default=False, description="Compile using c++14 dialect.")
@@ -53,29 +62,26 @@ class Clhep(Package):
'%s/%s/CLHEP/CMakeLists.txt'
% (self.stage.path, self.spec.version))
- def install(self, spec, prefix):
- # Handle debug
- # Pull out the BUILD_TYPE so we can change it (Release is default)
- cmake_args = [arg for arg in std_cmake_args if 'BUILD_TYPE' not in arg]
- build_type = 'Debug' if '+debug' in spec else 'MinSizeRel'
- cmake_args.extend(['-DCMAKE_BUILD_TYPE=' + build_type])
+ root_cmakelists_dir = 'CLHEP'
+
+ def cmake_args(self):
+ spec = self.spec
+ cmake_args = []
if '+cxx11' in spec:
- env['CXXFLAGS'] = self.compiler.cxx11_flag
+ if 'CXXFLAGS' in env and env['CXXFLAGS']:
+ env['CXXFLAGS'] += ' ' + self.compiler.cxx11_flag
+ else:
+ env['CXXFLAGS'] = self.compiler.cxx11_flag
cmake_args.append('-DCLHEP_BUILD_CXXSTD=' +
self.compiler.cxx11_flag)
if '+cxx14' in spec:
- env['CXXFLAGS'] = self.compiler.cxx14_flag
+ if 'CXXFLAGS' in env and env['CXXFLAGS']:
+ env['CXXFLAGS'] += ' ' + self.compiler.cxx14_flag
+ else:
+ env['CXXFLAGS'] = self.compiler.cxx14_flag
cmake_args.append('-DCLHEP_BUILD_CXXSTD=' +
self.compiler.cxx14_flag)
- # Note that the tar file is unusual in that there's a
- # CLHEP directory (addtional layer)
- cmake_args.append("../CLHEP")
-
- # Run cmake in a build directory
- with working_dir('build', create=True):
- cmake(*cmake_args)
- make()
- make("install")
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/cloc/package.py b/var/spack/repos/builtin/packages/cloc/package.py
new file mode 100644
index 0000000000..a5f7f1ecf5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cloc/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Cloc(Package):
+ """Count, or compute differences of, physical lines of source code in the
+ given files (may be archives such as compressed tarballs or zip files)
+ and/or recursively below the given directories."""
+ homepage = "https://github.com/AlDanial/cloc/"
+ url = "https://github.com/AlDanial/cloc/releases/download/1.74/cloc-1.74.tar.gz"
+
+ version('1.74', '1372da13a83862c186aa0b6b0c9b86f5')
+
+ depends_on('perl')
+
+ def install(self, spec, prefix):
+ # rewrite the script's #! line to call the perl dependency
+ shbang = '#!' + spec['perl'].command.path
+ filter_file(r'^#!/usr/bin/env perl', shbang, 'cloc')
+ filter_file(r'^#!/usr/bin/env perl', shbang, 'sqlite_formatter')
+
+ # cloc doesn't have a build system. We have to do our own install here.
+ mkdirp(prefix.bin)
+ install('cloc', join_path(prefix.bin, "cloc"))
+ install('sqlite_formatter', join_path(prefix.bin, "sqlite_formatter"))
+ install('./LICENSE', "%s" % prefix)
+ install('./README.md', "%s" % prefix)
diff --git a/var/spack/repos/builtin/packages/cloog/package.py b/var/spack/repos/builtin/packages/cloog/package.py
index a979ae83fc..b8fad45331 100644
--- a/var/spack/repos/builtin/packages/cloog/package.py
+++ b/var/spack/repos/builtin/packages/cloog/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/cloverleaf/package.py b/var/spack/repos/builtin/packages/cloverleaf/package.py
new file mode 100644
index 0000000000..1f23d5398c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cloverleaf/package.py
@@ -0,0 +1,110 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import glob
+
+from spack import *
+
+
+class Cloverleaf(MakefilePackage):
+ """Proxy Application. CloverLeaf is a miniapp that solves the
+ compressible Euler equations on a Cartesian grid,
+ using an explicit, second-order accurate method.
+ """
+
+ homepage = "http://uk-mac.github.io/CloverLeaf"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/CloverLeaf/CloverLeaf-1.1.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.1', '65652b30a64eb237ec844a6fdd4cd518')
+
+ variant('build', default='ref', description='Type of Parallelism Build',
+ values=('cuda', 'mpi_only', 'openacc_cray',
+ 'openmp_only', 'ref', 'serial'))
+
+ depends_on('mpi', when='build=cuda')
+ depends_on('mpi', when='build=mpi_only')
+ depends_on('mpi', when='build=openacc_cray')
+ depends_on('mpi', when='build=ref')
+ depends_on('cuda', when='build=cuda')
+
+ @property
+ def type_of_build(self):
+ build = 'ref'
+
+ if 'build=cuda' in self.spec:
+ build = 'CUDA'
+ elif 'build=mpi_only' in self.spec:
+ build = 'MPI'
+ elif 'build=openacc_cray' in self.spec:
+ build = 'OpenACC_CRAY'
+ elif 'build=openmp_only' in self.spec:
+ build = 'OpenMP'
+ elif 'build=serial' in self.spec:
+ build = 'Serial'
+
+ return build
+
+ @property
+ def build_targets(self):
+ targets = ['--directory=CloverLeaf_{0}'.format(self.type_of_build)]
+
+ if 'mpi' in self.spec:
+ targets.append('MPI_COMPILER={0}'.format(self.spec['mpi'].mpifc))
+ targets.append('C_MPI_COMPILER={0}'.format(self.spec['mpi'].mpicc))
+ else:
+ targets.append('MPI_COMPILER=f90')
+ targets.append('C_MPI_COMPILER=cc')
+
+ if '%gcc' in self.spec:
+ targets.append('COMPILER=GNU')
+ elif '%cce' in self.spec:
+ targets.append('COMPILER=CRAY')
+ elif '%intel' in self.spec:
+ targets.append('COMPILER=INTEL')
+ elif '%pgi' in self.spec:
+ targets.append('COMPILER=PGI')
+ elif '%xl' in self.spec:
+ targets.append('COMPILER=XLF')
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc.tests)
+
+ install('README.md', prefix.doc)
+ install('documentation.txt', prefix.doc)
+
+ install('CloverLeaf_{0}/clover_leaf'.format(self.type_of_build),
+ prefix.bin)
+ install('CloverLeaf_{0}/clover.in'.format(self.type_of_build),
+ prefix.bin)
+
+ for f in glob.glob(
+ 'CloverLeaf_{0}/*.in'.format(self.type_of_build)):
+ install(f, prefix.doc.tests)
diff --git a/var/spack/repos/builtin/packages/cloverleaf3d/package.py b/var/spack/repos/builtin/packages/cloverleaf3d/package.py
new file mode 100644
index 0000000000..0d00922325
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cloverleaf3d/package.py
@@ -0,0 +1,93 @@
+#############################################################################
+# 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/spack/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
+##############################################################################
+
+import glob
+
+from spack import *
+
+
+class Cloverleaf3d(MakefilePackage):
+ """Proxy Application. CloverLeaf3D is 3D version of the
+ CloverLeaf mini-app. CloverLeaf is a mini-app that solves
+ the compressible Euler equations on a Cartesian grid,
+ using an explicit, second-order accurate method.
+ """
+
+ homepage = "http://uk-mac.github.io/CloverLeaf3D/"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/CloverLeaf3D/CloverLeaf3D-1.0.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.0', '2e86cadd7612487f9da4ddeb1a6de939')
+
+ variant('openacc', default=False, description='Enable OpenACC Support')
+
+ depends_on('mpi')
+
+ @property
+ def type_of_build(self):
+ build = 'ref'
+
+ if '+openacc' in self.spec:
+ build = 'OpenACC'
+
+ return build
+
+ @property
+ def build_targets(self):
+ targets = [
+ 'MPI_COMPILER={0}'.format(self.spec['mpi'].mpifc),
+ 'C_MPI_COMPILER={0}'.format(self.spec['mpi'].mpicc),
+ '--directory=CloverLeaf3D_{0}'.format(self.type_of_build)
+ ]
+
+ if '%gcc' in self.spec:
+ targets.append('COMPILER=GNU')
+ elif '%cce' in self.spec:
+ targets.append('COMPILER=CRAY')
+ elif '%intel' in self.spec:
+ targets.append('COMPILER=INTEL')
+ elif '%pgi' in self.spec:
+ targets.append('COMPILER=PGI')
+ elif '%xl' in self.spec:
+ targets.append('COMPILER=XLF')
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc.samples)
+
+ install('README.md', prefix.doc)
+
+ install('CloverLeaf3D_{0}/clover_leaf'.format(self.type_of_build),
+ prefix.bin)
+ install('CloverLeaf3D_{0}/clover.in'.format(self.type_of_build),
+ prefix.bin)
+
+ for f in glob.glob(
+ 'CloverLeaf3D_{0}/*.in'.format(self.type_of_build)):
+ install(f, prefix.doc.samples)
diff --git a/var/spack/repos/builtin/packages/clustalo/package.py b/var/spack/repos/builtin/packages/clustalo/package.py
new file mode 100644
index 0000000000..5f3911ac29
--- /dev/null
+++ b/var/spack/repos/builtin/packages/clustalo/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Clustalo(AutotoolsPackage):
+ """Clustal Omega: the last alignment program you'll ever need."""
+
+ homepage = "http://www.clustal.org/omega/"
+ url = "http://www.clustal.org/omega/clustal-omega-1.2.4.tar.gz"
+
+ version('1.2.4', '6c0459f4c463a30e942ce7e0efc91422')
+
+ depends_on('argtable')
diff --git a/var/spack/repos/builtin/packages/clustalw/package.py b/var/spack/repos/builtin/packages/clustalw/package.py
new file mode 100644
index 0000000000..478fb702ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/clustalw/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/spack/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 Clustalw(AutotoolsPackage):
+ """Multiple alignment of nucleic acid and protein sequences."""
+
+ homepage = "http://www.clustal.org/clustal2/"
+ url = "http://www.clustal.org/download/2.1/clustalw-2.1.tar.gz"
+
+ version('2.1', '144df8440a0ae083d5167616c8ceeb41')
diff --git a/var/spack/repos/builtin/packages/cmake/package.py b/var/spack/repos/builtin/packages/cmake/package.py
index 60c95b9184..150936d1cb 100644
--- a/var/spack/repos/builtin/packages/cmake/package.py
+++ b/var/spack/repos/builtin/packages/cmake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,8 +31,14 @@ class Cmake(Package):
homepage = 'https://www.cmake.org'
url = 'https://cmake.org/files/v3.4/cmake-3.4.3.tar.gz'
list_url = 'https://cmake.org/files/'
- list_depth = 2
-
+ list_depth = 1
+
+ version('3.9.4', '33769e001bdcd788f565bf378692e5ae')
+ version('3.9.0', '180e23b4c9b55915d271b315297f6951')
+ version('3.8.2', 'b5dff61f6a7f1305271ab3f6ae261419')
+ version('3.8.1', 'e8ef820ddf7a650845252bca846696e7')
+ version('3.8.0', 'f28cba717ba38ad82a488daed8f45b5b')
+ version('3.7.2', '79bd7e65cd81ea3aa2619484ad6ff25a')
version('3.7.1', 'd031d5a06e9f1c5367cdfc56fbd2a1c8')
version('3.6.1', 'd6dd661380adacdb12f41b926ec99545')
version('3.6.0', 'aa40fbecf49d99c083415c2411d12db9')
@@ -59,71 +65,74 @@ class Cmake(Package):
depends_on('bzip2', when='~ownlibs')
depends_on('xz', when='~ownlibs')
depends_on('libarchive', when='~ownlibs')
+ depends_on('libuv@1.0.0:', when='~ownlibs')
+ depends_on('rhash', when='@3.8.0:~ownlibs')
depends_on('qt', when='+qt')
depends_on('python@2.7.11:', when='+doc', type='build')
depends_on('py-sphinx', when='+doc', type='build')
- depends_on('openssl', when='+openssl')
+ depends_on('openssl', when='+openssl')
+ depends_on('openssl@:1.0.99', when='@:3.6.9+openssl')
depends_on('ncurses', when='+ncurses')
# Cannot build with Intel, should be fixed in 3.6.2
# https://gitlab.kitware.com/cmake/cmake/issues/16226
patch('intel-c-gnu11.patch', when='@3.6.0:3.6.1')
- def url_for_version(self, version):
- """Handle CMake's version-based custom URLs."""
- return 'https://cmake.org/files/v%s/cmake-%s.tar.gz' % (
- version.up_to(2), version)
-
- def validate(self, spec):
- """
- Checks if incompatible versions of qt were specified
+ conflicts('+qt', when='^qt@5.4.0') # qt-5.4.0 has broken CMake modules
- :param spec: spec of the package
- :raises RuntimeError: in case of inconsistencies
- """
+ phases = ['bootstrap', 'build', 'install']
- if '+qt' in spec and spec.satisfies('^qt@5.4.0'):
- msg = 'qt-5.4.0 has broken CMake modules.'
- raise RuntimeError(msg)
+ def url_for_version(self, version):
+ """Handle CMake's version-based custom URLs."""
+ url = 'https://cmake.org/files/v{0}/cmake-{1}.tar.gz'
+ return url.format(version.up_to(2), version)
- def install(self, spec, prefix):
- # Consistency check
- self.validate(spec)
-
- options = [
- '--prefix={0}'.format(prefix),
- '--parallel={0}'.format(make_jobs)]
- if spec.satisfies("@3.2:"):
- options.append(
- # jsoncpp requires CMake to build
- # use CMake-provided library to avoid circular dependency
- '--no-system-jsoncpp'
- )
+ def bootstrap_args(self):
+ spec = self.spec
+ args = [
+ '--prefix={0}'.format(self.prefix),
+ '--parallel={0}'.format(make_jobs)
+ ]
if '+ownlibs' in spec:
# Build and link to the CMake-provided third-party libraries
- options.append('--no-system-libs')
+ args.append('--no-system-libs')
else:
# Build and link to the Spack-installed third-party libraries
- options.append('--system-libs')
+ args.append('--system-libs')
+
+ if spec.satisfies('@3.2:'):
+ # jsoncpp requires CMake to build
+ # use CMake-provided library to avoid circular dependency
+ args.append('--no-system-jsoncpp')
if '+qt' in spec:
- options.append('--qt-gui')
+ args.append('--qt-gui')
else:
- options.append('--no-qt-gui')
+ args.append('--no-qt-gui')
if '+doc' in spec:
- options.append('--sphinx-html')
- options.append('--sphinx-man')
+ args.append('--sphinx-html')
+ args.append('--sphinx-man')
if '+openssl' in spec:
- options.append('--')
- options.append('-DCMAKE_USE_OPENSSL=ON')
+ args.append('--')
+ args.append('-DCMAKE_USE_OPENSSL=ON')
+ return args
+
+ def bootstrap(self, spec, prefix):
bootstrap = Executable('./bootstrap')
- bootstrap(*options)
+ bootstrap(*self.bootstrap_args())
+ def build(self, spec, prefix):
make()
- if self.run_tests:
- make('test') # some tests fail, takes forever
+
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
+ def test(self):
+ # Some tests fail, takes forever
+ make('test')
+
+ def install(self, spec, prefix):
make('install')
diff --git a/var/spack/repos/builtin/packages/cmocka/package.py b/var/spack/repos/builtin/packages/cmocka/package.py
index 274b78379a..7598532476 100644
--- a/var/spack/repos/builtin/packages/cmocka/package.py
+++ b/var/spack/repos/builtin/packages/cmocka/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,15 @@
from spack import *
-class Cmocka(Package):
+class Cmocka(CMakePackage):
"""Unit-testing framework in pure C"""
homepage = "https://cmocka.org/"
- url = "https://cmocka.org/files/1.0/cmocka-1.0.1.tar.xz"
+ url = "https://cmocka.org/files/1.1/cmocka-1.1.1.tar.xz"
+ version('1.1.1', '6fbff4e42589566eda558db98b97623e')
+ version('1.1.0', '59c9aa5735d9387fb591925ec53523ec')
version('1.0.1', 'ed861e501a21a92b2af63e466df2015e')
- parallel = False
-
- depends_on('cmake', type='build')
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
+ depends_on('cmake@2.6.0:', type='build')
- make()
- make("install")
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/cmor/package.py b/var/spack/repos/builtin/packages/cmor/package.py
index b5debf9537..59a0330324 100644
--- a/var/spack/repos/builtin/packages/cmor/package.py
+++ b/var/spack/repos/builtin/packages/cmor/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -46,10 +46,10 @@ class Cmor(AutotoolsPackage):
depends_on('hdf5@:1.8')
extends('python', when='+python')
- depends_on('python@:2.7', when='+python')
+ depends_on('python@:2.8', when='+python')
depends_on('py-numpy', type=('build', 'run'), when='+python')
- @AutotoolsPackage.precondition('configure')
+ @run_before('configure')
def validate(self):
if '+fortran' in self.spec and not self.compiler.fc:
msg = 'cannot build a fortran variant without a fortran compiler'
diff --git a/var/spack/repos/builtin/packages/cnmem/package.py b/var/spack/repos/builtin/packages/cnmem/package.py
index 0c62023952..7b068e1ede 100644
--- a/var/spack/repos/builtin/packages/cnmem/package.py
+++ b/var/spack/repos/builtin/packages/cnmem/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,10 @@
from spack import *
-class Cnmem(Package):
+class Cnmem(CMakePackage):
"""CNMem mempool for CUDA devices"""
homepage = "https://github.com/NVIDIA/cnmem"
version('git', git='https://github.com/NVIDIA/cnmem.git', branch="master")
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
- make()
- make('install')
+ depends_on('cmake@2.8.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/cnpy/package.py b/var/spack/repos/builtin/packages/cnpy/package.py
new file mode 100644
index 0000000000..7c868b62b4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cnpy/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/spack/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 Cnpy(CMakePackage):
+ """cnpy: library to read/write .npy and .npz files in C/C++."""
+
+ homepage = "https://github.com/rogersce/cnpy"
+ url = "https://github.com/rogersce/cnpy"
+
+ version('master', git='https://github.com/rogersce/cnpy.git', branch="master")
diff --git a/var/spack/repos/builtin/packages/cns-nospec/package.py b/var/spack/repos/builtin/packages/cns-nospec/package.py
new file mode 100644
index 0000000000..f4b56d7596
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cns-nospec/package.py
@@ -0,0 +1,109 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class CnsNospec(MakefilePackage):
+ """A simple, explicit, stencil-based test code for integrating
+ the compressible Navier-Stokes equations. The code uses
+ 8th order finite differences in space and a 3rd order,
+ low-storage TVD RK algorithm in time."""
+
+ homepage = "https://ccse.lbl.gov/ExaCT/index.html"
+ url = "https://ccse.lbl.gov/ExaCT/CNS_Nospec.tgz"
+ tags = ['proxy-app']
+
+ version('master', '14ff5be62539d829b30b17281688ee3f')
+
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('debug', default=False, description='Build with debugging')
+ variant('omp', default=False, description='Build with OpenMP support')
+ variant('prof', default=False, description='Build with profiling')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('gmake', type='build')
+
+ build_directory = 'MiniApps/CNS_NoSpec'
+
+ def edit(self, spec, prefix):
+ def_file = FileFilter('Tools/F_mk/GMakedefs.mak')
+ def_file.filter('tdir = t/.*', 'tdir := t/$(suf)')
+ def_file.filter('hdir = t/.*', 'hdir := t/html')
+ def_file.filter('include $(BOXLIB_HOME)/Tools/F_mk/GMakeMPI.mak', '#')
+
+ if '+mpi' in spec:
+ def_file.filter('FC.*:=.*', 'FC = {0}'.format(spec['mpi'].mpifc))
+ def_file.filter('F90.*:=.*', 'F90 = {0}'.format(spec['mpi'].mpifc))
+ def_file.filter(
+ 'mpi_include_dir =.*',
+ 'mpi_include_dir = {0}'.format(spec['mpi'].prefix.include))
+ def_file.filter(
+ 'mpi_lib_dir =.*',
+ 'mpi_lib_dir = {0}'.format(spec['mpi'].prefix.lib))
+
+ with working_dir(self.build_directory):
+ makefile = FileFilter('GNUmakefile')
+ if '+mpi' in spec:
+ makefile.filter('MPI .*', 'MPI := t')
+ if '+debug' in spec:
+ makefile.filter('NDEBUG.*', '#')
+ if '+omp' in spec:
+ makefile.filter('OMP.*', 'OMP := t')
+ if '+prof' in spec:
+ makefile.filter('PROF.*', 'PROF := t')
+
+ if self.compiler.name == 'gcc':
+ makefile.filter('COMP .*', 'COMP = gfortran')
+ if self.compiler.name == 'intel':
+ makefile.filter('COMP .*', 'COMP = Intel')
+ if self.compiler.name == 'pgi':
+ makefile.filter('COMP .*', 'COMP = PGI')
+ if self.compiler.name == 'xl':
+ makefile.filter('COMP .*', 'COMP = IBM')
+ if self.compiler.name == 'cce':
+ makefile.filter('COMP .*', 'COMP = Cray')
+
+ @property
+ def build_targets(self):
+ spec = self.spec
+ if '+mpi' in spec:
+ return ['CC = {0}'.format(spec['mpi'].mpicc),
+ 'CXX = {0}'.format(spec['mpi'].mpicxx)]
+ else:
+ return []
+
+ def build(self, spec, prefix):
+ with working_dir(self.build_directory):
+ gmake()
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ files = glob.glob(join_path(self.build_directory, '*.exe'))
+ for f in files:
+ install(f, prefix.bin)
+ install('README.txt', prefix)
+ install('license.txt', prefix)
+ install(join_path(self.build_directory, 'README'), prefix)
diff --git a/var/spack/repos/builtin/packages/cntk/build.patch b/var/spack/repos/builtin/packages/cntk/build.patch
new file mode 100644
index 0000000000..7ae6101db3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cntk/build.patch
@@ -0,0 +1,386 @@
+From 6ee89684a8e7b509f977bab00573c73563df4bc6 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Wed, 5 Apr 2017 16:52:54 +0800
+Subject: [PATCH 1/1] Refine the build process to allow reuse pre-installed
+ packages: multiverso 1bit-sgd kaldi openfst.
+
+---
+ Makefile | 69 +++++++++++++++---------------
+ configure | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 178 insertions(+), 35 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 0586fd94b..bbd75e08c 100644
+--- a/Makefile
++++ b/Makefile
+@@ -25,14 +25,18 @@
+ # If not specified, GPU will not be enabled
+ # CUB_PATH= path to NVIDIA CUB installation, so $(CUB_PATH)/cub/cub.cuh exists
+ # defaults to /usr/local/cub-1.4.1
+-# CUDNN_PATH= path to NVIDIA cuDNN installation so $(CUDNN_PATH)/cuda/include/cudnn.h exists
++# CUDNN_PATH= path to NVIDIA cuDNN installation so $(CUDNN_PATH)/include/cudnn.h exists
+ # CuDNN version needs to be 5.0 or higher.
+ # KALDI_PATH= Path to Kaldi
+ # If not specified, Kaldi plugins will not be built
++# OPENFST_PATH= Path to OpenFST
++# OpenFST is required by Kaldi Reader.
+ # OPENCV_PATH= path to OpenCV 3.1.0 installation, so $(OPENCV_PATH) exists
+ # defaults to /usr/local/opencv-3.1.0
+ # PROTOBUF_PATH= path to Protocol Buffers 3.1.0 installation, so $(PROTOBUF_PATH) exists
+ # defaults to /usr/local/protobuf-3.1.0
++# MULTIVERSO_PATH= path to Multiverso installation or source code, so $(MULTIVERSO_PATH) exists
++# defaults to Source/Multiverso
+ # LIBZIP_PATH= path to libzip installation, so $(LIBZIP_PATH) exists
+ # defaults to /usr/local/
+ # BOOST_PATH= path to Boost installation, so $(BOOST_PATH)/include/boost/test/unit_test.hpp
+@@ -149,8 +153,8 @@ ifdef CUDA_PATH
+
+ # Set up cuDNN if needed
+ ifdef CUDNN_PATH
+- INCLUDEPATH += $(CUDNN_PATH)/cuda/include
+- LIBPATH += $(CUDNN_PATH)/cuda/lib64
++ INCLUDEPATH += $(CUDNN_PATH)/include
++ LIBPATH += $(CUDNN_PATH)/lib64
+ LIBS_LIST += cudnn
+ COMMON_FLAGS +=-DUSE_CUDNN
+ endif
+@@ -188,16 +192,11 @@ ifeq ("$(MATHLIB)","openblas")
+ CPPFLAGS += -DUSE_OPENBLAS
+ endif
+
+-
++# Set up kaldi and openfst for Kaldi2Reader if needed
+ ifdef KALDI_PATH
+- ########## Copy includes and defines from $(KALDI_PATH)/src/kaldi.mk ##########
+- FSTROOT = $(KALDI_PATH)/tools/openfst
+- ATLASINC = $(KALDI_PATH)/tools/ATLAS/include
+-
+- INCLUDEPATH += $(KALDI_PATH)/src $(ATLASINC) $(FSTROOT)/include
++ INCLUDEPATH += $(KALDI_PATH)/include $(OPENFST_PATH)/incldue
+ CPPFLAGS += -DKALDI_DOUBLEPRECISION=0 -DHAVE_POSIX_MEMALIGN -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_ATLAS -DHAVE_OPENFST_GE_10400
+-
+- KALDI_LIBPATH += $(KALDI_PATH)/src/lib
++ KALDI_LIBPATH += $(KALDI_PATH)/lib $(OPENFST_PATH)/lib
+ KALDI_LIBS_LIST := kaldi-util kaldi-matrix kaldi-base kaldi-hmm kaldi-cudamatrix kaldi-nnet kaldi-lat
+ KALDI_LIBS := $(addprefix -l,$(KALDI_LIBS_LIST))
+ endif
+@@ -316,7 +315,7 @@ SRC += $(PP_SRC)
+ $(PERF_PROFILER_LIB): $(PP_OBJ)
+ @echo $(SEPARATOR)
+ @echo creating $@ for $(ARCH) with build type $(BUILDTYPE)
+- @mkdir -p $(dir $@)
++ -@mkdir -p $(dir $@)
+ $(CXX) $(LDFLAGS) -shared $(patsubst %,$(RPATH)%, $(ORIGINDIR)) -o $@ $^
+
+
+@@ -920,17 +919,13 @@ endif
+
+ ifeq ("$(CNTK_ENABLE_1BitSGD)","true")
+
+-ifeq (,$(wildcard Source/1BitSGD/*.h))
+- $(error Build with 1bit-SGD was requested but cannot find the code. Please check https://github.com/Microsoft/CNTK/wiki/Enabling-1bit-SGD for instructions)
+-endif
+-
+- INCLUDEPATH += $(SOURCEDIR)/1BitSGD
++ INCLUDEPATH += $(ONEBITSGD_PATH)
+
+ COMMON_FLAGS += -DCNTK_PARALLEL_TRAINING_SUPPORT
+ # temporarily adding to 1bit, need to work with others to fix it
+ endif
+
+-
++
+ ########################################
+ # ASGD(multiverso) setup
+ ########################################
+@@ -938,13 +933,9 @@ endif
+
+ ifeq ("$(CNTK_ENABLE_ASGD)","true")
+
+-ifeq (,$(wildcard Source/Multiverso/include/multiverso/*.h))
+- $(error Build with Multiverso was requested but cannot find the code. Please check https://github.com/Microsoft/CNTK/wiki/Multiple-GPUs-and-machines#24-data-parallel-asgd to learn more.)
+-endif
+-
+ lMULTIVERSO:=-lmultiverso
+
+-INCLUDEPATH += $(SOURCEDIR)/Multiverso/include
++INCLUDEPATH += $(MULTIVERSO_PATH)/include
+ COMMON_FLAGS += -DASGD_PARALLEL_SUPPORT
+
+ MULTIVERSO_LIB:=$(LIBDIR)/libmultiverso.so
+@@ -958,11 +949,16 @@ MULTIVERSO_CMAKE_BUILDTYPE=Debug
+ endif
+
+ # TODO need to align Multiverso OpenMP with the one we use (libiomp). For now, disabled.
+-$(MULTIVERSO_LIB):
++$(MULTIVERSO_LIB):
++ifneq ("$(wildcard $(MULTIVERSO_PATH)/lib/libmultiverso.so)","")
++ # reuse pre-installed multiverso library to $(LIBDIR) then skip building $(MULTIVERSO_LIB) when possible
++ @mkdir -p $(LIBDIR)
++ cp $(MULTIVERSO_PATH)/lib/libmultiverso.so $(LIBDIR)
++else
+ @echo "Build Multiverso lib"
+ @mkdir -p $(LIBDIR)
+ @mkdir -p $(BINDIR)
+- @mkdir -p $(SOURCEDIR)/Multiverso/build/$(BUILDTYPE)
++ @mkdir -p $(MULTIVERSO_PATH)/build/$(BUILDTYPE)
+ @cmake -DCMAKE_VERBOSE_MAKEFILE=TRUE \
+ -DCMAKE_CXX_COMPILER=$(CXX) \
+ -DOpenMP_CXX_FLAGS="" \
+@@ -976,17 +972,22 @@ $(MULTIVERSO_LIB):
+ -DCMAKE_BUILD_TYPE=$(MULTIVERSO_CMAKE_BUILDTYPE) \
+ -B./Source/Multiverso/build/$(BUILDTYPE) -H./Source/Multiverso
+ @make VERBOSE=1 -C ./Source/Multiverso/build/$(BUILDTYPE) -j multiverso
++endif
+
+ UNITTEST_MULTIVERSO_SRC = \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_array.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_blob.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_kv.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_message.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_multiverso.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_node.cpp \
+- $(SOURCEDIR)/Multiverso/Test/unittests/test_sync.cpp \
+-
+-UNITTEST_MULTIVERSO_OBJ := $(patsubst %.cpp, $(OBJDIR)/%.o, $(UNITTEST_MULTIVERSO_SRC))
++ $(MULTIVERSO_PATH)/Test/unittests/test_array.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_blob.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_kv.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_message.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_multiverso.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_node.cpp \
++ $(MULTIVERSO_PATH)/Test/unittests/test_sync.cpp \
++
++UNITTEST_MULTIVERSO_OBJ := $(patsubst $(MULTIVERSO_PATH)/Test/unittests/%.cpp, $(OBJDIR)/Source/Multiverso/Test/unittests/%.o, $(UNITTEST_MULTIVERSO_SRC))
++
++$(OBJDIR)/Source/Multiverso/Test/unittests/%.o: $(MULTIVERSO_PATH)/Test/unittests/%.cpp
++ -@ mkdir -p $(OBJDIR)/Source/Multiverso/Test/unittests
++ $(CXX) -c $< -o $@ $(COMMON_FLAGS) $(CPPFLAGS) $(CXXFLAGS) $(INCLUDEPATH:%=-I%)
+
+ UNITTEST_MULTIVERSO := $(BINDIR)/multiversotests
+
+diff --git a/configure b/configure
+index 2c2e5cee7..c9c0072c9 100755
+--- a/configure
++++ b/configure
+@@ -41,6 +41,14 @@ boost_check=include/boost/test/unit_test.hpp
+ protobuf_path=
+ protobuf_check=lib/libprotobuf.a
+
++# Multiverso library
++multiverso_path=
++multiverso_check=include/multiverso/multiverso.h
++
++# 1bitsgd library
++onebitsgd_path=
++onebitsgd_check=BlockMomentumSGD.h
++
+ # MPI library
+ mpi_path=
+ mpi_check=include/mpi.h
+@@ -49,6 +57,10 @@ have_kaldi=no
+ kaldi_path=
+ kaldi_check=src/kaldi.mk
+
++have_openfst=no
++openfst_path=
++openfst_check=include/fst/fst.h
++
+ have_buildtype=no
+ buildtype=
+ default_buildtype=release
+@@ -67,7 +79,7 @@ cub_check=cub/cub.cuh
+
+ have_cudnn=no
+ cudnn_path=
+-cudnn_check=cuda/include/cudnn.h
++cudnn_check=include/cudnn.h
+
+ have_opencv=no
+ opencv_path=
+@@ -112,6 +124,7 @@ default_boost="boost-1.60.0"
+ default_cudas="cuda-8.0 cuda-7.5"
+ default_nccls="nccl"
+ default_kaldis="kaldi-trunk kaldi-c024e8aa"
++default_openfst="openfst-1.6"
+ default_gdk_includes="include/nvidia/gdk"
+ default_gdk_nvml_libs="src/gdk/nvml/lib"
+ default_cubs="cub-1.4.1"
+@@ -121,6 +134,8 @@ default_protobuf="protobuf-3.1.0"
+ default_libzips="libzip-1.1.2"
+ default_swig="swig-3.0.10"
+ default_mpi="mpi"
++default_multiverso=Source/Multiverso
++default_onebitsgd=Source/1BitSGD
+
+ function default_paths ()
+ {
+@@ -178,6 +193,16 @@ function find_protobuf ()
+ find_dir "$default_protobuf" "$protobuf_check"
+ }
+
++function find_multiverso ()
++{
++ find_dir "$default_multiverso" "$multiverso_check"
++}
++
++function find_onebitsgd ()
++{
++ find_dir "$default_onebitsgd" "$onebitsgd_check"
++}
++
+ function find_nccl ()
+ {
+ find_dir "$default_nccls" "$nccl_check"
+@@ -193,6 +218,11 @@ function find_kaldi ()
+ find_dir "$default_kaldis" "$kaldi_check"
+ }
+
++function find_openfst ()
++{
++ find_dir "$default_openfst" "$openfst_check"
++}
++
+ function find_gdk_include ()
+ {
+ find_dir "$default_gdk_includes" "$gdk_include_check"
+@@ -751,6 +784,46 @@ do
+ fi
+ fi
+ ;;
++ --with-multiverso*)
++ if test x$optarg = x
++ then
++ multiverso_path=$(find_multiverso)
++ if test x$multiverso_path = x
++ then
++ echo "Cannot find Multiverso directory"
++ echo "Please specify a value for --with-multiverso"
++ exit 1
++ fi
++ else
++ if test $(check_dir $optarg $multiverso_check) = yes
++ then
++ multiverso_path=$optarg
++ else
++ echo "Invalid Multiverso directory $optarg"
++ exit 1
++ fi
++ fi
++ ;;
++ --with-1bitsgd*)
++ if test x$optarg = x
++ then
++ onebitsgd_path=$(find_onebitsgd)
++ if test x$onebitsgd_path = x
++ then
++ echo "Cannot find 1BitSGD directory"
++ echo "Please specify a value for --with-1bitsgd"
++ exit 1
++ fi
++ else
++ if test $(check_dir $optarg $onebitsgd_check) = yes
++ then
++ onebitsgd_path=$optarg
++ else
++ echo "Invalid 1BitSGD directory $optarg"
++ exit 1
++ fi
++ fi
++ ;;
+ --with-buildtype*)
+ have_buildtype=yes
+ case $optarg in
+@@ -784,6 +857,27 @@ do
+ fi
+ fi
+ ;;
++ --with-openfst*)
++ have_openfst=yes
++ if test x$optarg = x
++ then
++ openfst_path=$(find_openfst)
++ if test x$openfst_path = x
++ then
++ echo "Cannot find openfst directory"
++ echo "Please specify a value for --with-openfst"
++ exit 1
++ fi
++ else
++ if test $(check_dir $optarg $openfst_check)
++ then
++ openfst_path=$optarg
++ else
++ echo "Invalid openfst directory $optarg"
++ exit 1
++ fi
++ fi
++ ;;
+ --with-opencv*)
+ have_opencv=yes
+ if test x$optarg = x
+@@ -1049,6 +1143,48 @@ then
+ fi
+ fi
+
++if test x$kaldi_path != x && test x$openfst_path = x
++then
++ openfst_path=$(find_openfst)
++ if test x$openfst_path = x
++ then
++ echo CNTK KaldiReader requires OpenFST library. Please check
++ echo https://github.com/Microsoft/CNTK/blob/master/Source/Readers/KaldiReaderReadme
++ echo to learn more.
++ exit 1
++ else
++ echo Found OpenFST library at $openfst_path
++ fi
++fi
++
++if test $enable_1bitsgd = yes && test x$onebitsgd_path = x
++then
++ onebitsgd_path=$(find_onebitsgd)
++ if test x$onebitsgd_path = x
++ then
++ echo Cannot locate 1BitSGD library. See
++ echo https://github.com/Microsoft/CNTK/wiki/Enabling-1bit-SGD
++ echo for installation instructions.
++ exit 1
++ else
++ echo Found 1BitSGD library at $onebitsgd_path
++ fi
++fi
++
++if test $enable_asgd = yes && test x$multiverso_path = x
++then
++ multiverso_path=$(find_multiverso)
++ if test x$multiverso_path = x
++ then
++ echo Build with Multiverso was requested but cannot find the code. Please check
++ echo https://github.com/Microsoft/CNTK/wiki/Multiple-GPUs-and-machines#24-data-parallel-asgd
++ echo to learn more.
++ exit 1
++ else
++ echo Found Multiverso library at $multiverso_path
++ fi
++fi
++
+ if test x$mpi_path = x
+ then
+ mpi_path=$(find_mpi)
+@@ -1123,6 +1259,12 @@ fi
+ if test x$protobuf_path != x; then
+ echo PROTOBUF_PATH=$protobuf_path >> $config
+ fi
++if test x$multiverso_path != x; then
++ echo MULTIVERSO_PATH=$multiverso_path >> $config
++fi
++if test x$onebitsgd_path != x; then
++ echo ONEBITSGD_PATH=$onebitsgd_path >> $config
++fi
+ if test x$mpi_path != x; then
+ echo MPI_PATH=$mpi_path >> $config
+ fi
+--
+2.11.1
+
diff --git a/var/spack/repos/builtin/packages/cntk/kaldireader-openblas.patch b/var/spack/repos/builtin/packages/cntk/kaldireader-openblas.patch
new file mode 100644
index 0000000000..75bd4146e7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cntk/kaldireader-openblas.patch
@@ -0,0 +1,32 @@
+From a5cdb4fdce55813b79e3ee6300f282ba6d7b6b85 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Fri, 14 Apr 2017 12:40:44 +0800
+Subject: [PATCH 1/1] Replace ATLAS with OpenBLAS in KaldiReader.
+
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index bbd75e08c..909457963 100644
+--- a/Makefile
++++ b/Makefile
+@@ -189,13 +189,13 @@ ifeq ("$(MATHLIB)","openblas")
+ INCLUDEPATH += $(OPENBLAS_PATH)/include
+ LIBPATH += $(OPENBLAS_PATH)/lib
+ LIBS_LIST += openblas m pthread
+- CPPFLAGS += -DUSE_OPENBLAS
++ CPPFLAGS += -DUSE_OPENBLAS -DHAVE_OPENBLAS
+ endif
+
+ # Set up kaldi and openfst for Kaldi2Reader if needed
+ ifdef KALDI_PATH
+ INCLUDEPATH += $(KALDI_PATH)/include $(OPENFST_PATH)/incldue
+- CPPFLAGS += -DKALDI_DOUBLEPRECISION=0 -DHAVE_POSIX_MEMALIGN -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_ATLAS -DHAVE_OPENFST_GE_10400
++ CPPFLAGS += -DKALDI_DOUBLEPRECISION=0 -DHAVE_POSIX_MEMALIGN -DHAVE_EXECINFO_H=1 -DHAVE_CXXABI_H -DHAVE_OPENFST_GE_10400
+ KALDI_LIBPATH += $(KALDI_PATH)/lib $(OPENFST_PATH)/lib
+ KALDI_LIBS_LIST := kaldi-util kaldi-matrix kaldi-base kaldi-hmm kaldi-cudamatrix kaldi-nnet kaldi-lat
+ KALDI_LIBS := $(addprefix -l,$(KALDI_LIBS_LIST))
+--
+2.11.1
+
diff --git a/var/spack/repos/builtin/packages/cntk/lock-file.patch b/var/spack/repos/builtin/packages/cntk/lock-file.patch
new file mode 100644
index 0000000000..0e0a7811e7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cntk/lock-file.patch
@@ -0,0 +1,20 @@
+diff --git a/Source/Common/CrossProcessMutex.h b/Source/Common/CrossProcessMutex.h
+index 2f3ce70..f0fcd42 100644
+--- a/Source/Common/CrossProcessMutex.h
++++ b/Source/Common/CrossProcessMutex.h
+@@ -127,9 +127,13 @@ class CrossProcessMutex
+
+ public:
+ CrossProcessMutex(const std::string& name)
+- : m_fd(-1),
+- m_fileName("/var/lock/" + name)
++ : m_fd(-1)
+ {
++ const char * const envLockDir = getenv("CNTK_LOCK_DIR");
++ if (envLockDir != NULL)
++ m_fileName = envLockDir + ('/' + name);
++ else
++ m_fileName = "/var/lock/" + name;
+ }
+
+ // Acquires the mutex. If 'wait' is true and mutex is acquired by someone else then
diff --git a/var/spack/repos/builtin/packages/cntk/package.py b/var/spack/repos/builtin/packages/cntk/package.py
new file mode 100644
index 0000000000..b55c547e10
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cntk/package.py
@@ -0,0 +1,123 @@
+##############################################################################
+# 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/spack/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 Cntk(Package):
+ """The Microsoft Cognitive Toolkit is a unified deep-learning toolkit
+ that describes neural networks as a series of computational steps
+ via a directed graph."""
+
+ homepage = "https://www.microsoft.com/en-us/research/product/cognitive-toolkit"
+ url = "https://github.com/Microsoft/CNTK/archive/v2.0.tar.gz"
+
+ version('master', git='https://github.com/Microsoft/CNTK.git', branch='master')
+ version('2.0', '8038780f1169ceea578e5ef4d69e4c6f')
+
+ variant('opencv', default=False, description="Enable OpenCV support.")
+ variant('kaldi', default=False, description="Enable Kaldi support.")
+ variant('asgd', default=True, description="Enable DataParallelASGD powered by Multiverso.")
+ variant('1bitsgd', default=False, description="Enable 1bitsgd support.")
+ variant('cuda', default=False, description="Enable CUDA support.")
+ variant('debug', default=False, description="Debug build.")
+
+ depends_on('libzip')
+ depends_on('openblas')
+ depends_on('mpi')
+ depends_on('boost')
+ depends_on('protobuf')
+ # CNTK depends on kaldi@c02e8.
+ # See https://github.com/Microsoft/CNTK/blob/master/Tools/docker/CNTK-CPUOnly-Image/Dockerfile#L105-L125
+ depends_on('kaldi@c024e8', when='+kaldi')
+ depends_on('opencv', when='+opencv')
+ depends_on('cuda', when='+cuda')
+ depends_on('cub@1.4.1', when='+cuda')
+ depends_on('cudnn@5.1', when='+cuda')
+ depends_on('nccl', when='+cuda')
+ depends_on('cntk1bitsgd@c8b77d', when='+1bitsgd')
+ depends_on('multiverso@143187', when='+asgd')
+
+ # Patch CNTN's build process to use libs installed outside CNTK source tree
+ # multiverso, kaldi, openfst
+ patch('build.patch')
+ # Patch to fix BLAS inconsistency between CNTK and KaldiReader
+ patch('kaldireader-openblas.patch')
+ # Patch to change behaviour of lock file - https://github.com/Microsoft/CNTK/issues/62
+ patch('lock-file.patch')
+
+ def install(self, spec, prefix):
+ args = []
+
+ args.append('--with-mpi=' + spec['mpi'].prefix)
+ args.append('--with-openblas=' + spec['openblas'].prefix)
+ args.append('--with-libzip=' + spec['libzip'].prefix)
+ args.append('--with-boost=' + spec['boost'].prefix)
+ args.append('--with-protobuf=' + spec['protobuf'].prefix)
+
+ if '+debug' in spec:
+ args.append('--with-buildtype=debug')
+ else:
+ args.append('--with-buildtype=release')
+
+ if '+1bitsgd' in spec:
+ args.append('--1bitsgd=yes')
+ args.append('--with-1bitsgd={0}/include'
+ .format(spec['cntk1bitsgd'].prefix))
+
+ if '+asgd' in spec:
+ args.append('--asgd=yes')
+ args.append('--with-multiverso={0}'
+ .format(spec['multiverso'].prefix))
+ else:
+ args.append('--asgd=no')
+
+ if '+opencv' in spec:
+ args.append('--with-opencv=' + spec['opencv'].prefix)
+
+ if '+kaldi' in spec:
+ args.append('--with-kaldi=' + spec['kaldi'].prefix)
+ args.append('--with-openfst=' + spec['openfst'].prefix)
+
+ if '+cuda' in spec:
+ args.append('--cuda=yes')
+ args.append('--with-cuda={0}'.format(spec['cuda'].prefix))
+ args.append('--with-cub={0}'
+ .format(spec['cub'].prefix.include))
+ args.append('--with-cudnn={0}'
+ .format(spec['cudnn'].prefix))
+ args.append('--with-nccl={0}'.format(spec['nccl'].prefix))
+ args.append('--with-gdk-include={0}'
+ .format(spec['cuda'].prefix.include))
+ args.append('--with-gdk-nvml-lib={0}/stubs'
+ .format(spec['cuda'].prefix.lib64))
+
+ configure(*args)
+
+ make()
+
+ install_tree('bin', prefix.bin)
+ install_tree('lib', prefix.lib)
+ install_tree('Examples', join_path(prefix, 'Examples'))
+ install_tree('Tutorials', join_path(prefix, 'Tutorials'))
diff --git a/var/spack/repos/builtin/packages/cntk1bitsgd/package.py b/var/spack/repos/builtin/packages/cntk1bitsgd/package.py
new file mode 100644
index 0000000000..6d30792b09
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cntk1bitsgd/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 *
+from os import listdir
+
+
+class Cntk1bitsgd(Package):
+ """CNTK1bitSGD is the header-only
+ 1-bit stochastic gradient descent (1bit-SGD) library for
+ the Computational Network Toolkit (CNTK)."""
+
+ homepage = "https://github.com/CNTK-components/CNTK1bitSGD"
+
+ version('master', git='https://github.com/CNTK-components/CNTK1bitSGD.git')
+ version('c8b77d', git='https://github.com/CNTK-components/CNTK1bitSGD.git',
+ commit='c8b77d6e325a4786547b27624890276c1483aed1')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.include)
+ for file in listdir('.'):
+ if file.endswith('.h'):
+ install(file, prefix.include)
diff --git a/var/spack/repos/builtin/packages/codar-cheetah/package.py b/var/spack/repos/builtin/packages/codar-cheetah/package.py
new file mode 100644
index 0000000000..de39fb2a79
--- /dev/null
+++ b/var/spack/repos/builtin/packages/codar-cheetah/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+
+
+class CodarCheetah(Package):
+ """CODAR Cheetah:
+ The CODAR Experiment Harness for Exascale science applications.
+ """
+
+ homepage = "https://github.com/CODARcode/cheetah"
+ url = "https://github.com/CODARcode/cheetah/archive/v0.1.tar.gz"
+
+ version('0.1', '6918021f74fa7a2f1de26c0bb31a63ef')
+ version('develop', git='https://github.com/CODARcode/cheetah.git',
+ branch='master')
+
+ depends_on('python@3:', type=('build', 'run'))
+ depends_on('savanna')
+
+ def install(self, spec, prefix):
+ copy_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/coevp/package.py b/var/spack/repos/builtin/packages/coevp/package.py
new file mode 100644
index 0000000000..655f91062e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/coevp/package.py
@@ -0,0 +1,89 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Coevp(MakefilePackage):
+ """CoEVP is a scale-bridging proxy application for embedded viscoplasticity
+ applications. It is created and maintained by The Exascale Co-Design Center
+ for Materials in Extreme Environments (ExMatEx). The code is intended to
+ serve as a vehicle for co-design by allowing others to extend and/or
+ reimplement it as needed to test performance of new architectures,
+ programming models, etc.
+ Due to the size and complexity of the studied models, as well as
+ restrictions on distribution, the currently available LULESH proxy
+ application provides the coarse-scale model implementation and the ASPA
+ proxy application provides the adaptive sampling support."""
+
+ homepage = 'https://github.com/exmatex/CoEVP'
+
+ version('develop', git='https://github.com/exmatex/CoEVP.git',
+ branch='master')
+
+ variant('mpi', default=True, description='Build with MPI Support')
+ variant('silo', default=False, description='Build with silo Support')
+ variant('flann', default=False, description='Build with flann Support')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('silo', when='+silo')
+ depends_on('flann@1.8.1', when='+flann')
+ depends_on('lapack')
+
+ tags = ['proxy-app']
+
+ @property
+ def build_targets(self):
+ targets = []
+ if '+mpi' in self.spec:
+ targets.append('COEVP_MPI=yes')
+ else:
+ targets.append('COEVP_MPI=no')
+ if '+flann' in self.spec:
+ targets.append('FLANN=yes')
+ targets.append('FLANN_TARGET=')
+ targets.append('FLANN_LOC={0}'.format(
+ join_path(self.spec['flann'].prefix.include, 'flann')))
+ else:
+ targets.append('FLANN=no')
+ targets.append('REDIS=no')
+ if '+silo' in self.spec:
+ targets.append('SILO=yes')
+ targets.append('SILO_TARGET=')
+ targets.append('SILO_LOC={0}'.format(self.spec['silo'].prefix))
+ else:
+ targets.append('SILO=no')
+ targets.append('TWEMPROXY=no')
+ targets.append('LAPACK=%s' % self.spec['lapack'].libs.ld_flags)
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ mkdir(prefix.doc)
+ install('LULESH/lulesh', prefix.bin)
+ install('COPYRIGHT', prefix.doc)
+ install('README.md', prefix.doc)
+ install('CoEVP.pdf', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/cohmm/package.py b/var/spack/repos/builtin/packages/cohmm/package.py
new file mode 100644
index 0000000000..70e87c70ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cohmm/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Cohmm(MakefilePackage):
+ """An anticipated important use-case for next-generation supercomputing
+ is multiscale modeling, in which continuum equations for large-scale
+ material deformation are augmented with high-fidelity, fine-scale
+ simulations that provide constitutive data on demand.
+ """
+ tags = ['proxy-app']
+
+ homepage = "http://www.exmatex.org/cohmm.html"
+ url = "https://github.com/exmatex/CoHMM/archive/sad.tar.gz"
+
+ version('develop', git='https://github.com/exmatex/CoHMM.git',
+ branch='sad')
+
+ variant('openmp', default=True, description='Build with OpenMP Support')
+ variant('gnuplot', default=True, description='Enable gnu plot Support')
+ depends_on('gnuplot', when='+gnuplot')
+
+ def edit(self, spec, prefix):
+ if '+openmp' in spec:
+ filter_file('DO_OPENMP = O.*', 'DO_OPENMP = ON', 'Makefile')
+ if '+gnuplot' in spec:
+ filter_file('DO_GNUPLOT = O.*', 'DO_GNUPLOT = ON', 'Makefile')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.input)
+ mkdirp(prefix.doc)
+ install('cohmm', prefix.bin)
+ install('README.md', prefix.doc)
+ install('LICENSE.md', prefix.doc)
+ for files in glob.glob('input/*.*'):
+ install(files, prefix.input)
diff --git a/var/spack/repos/builtin/packages/coinhsl/package.py b/var/spack/repos/builtin/packages/coinhsl/package.py
new file mode 100644
index 0000000000..a97c0274d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/coinhsl/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Coinhsl(AutotoolsPackage):
+ """CoinHSL is a collection of linear algebra libraries (KB22, MA27,
+ MA28, MA54, MA57, MA64, MA77, MA86, MA97, MC19, MC34, MC64, MC68,
+ MC69, MC78, MC80, OF01, ZB01, ZB11) bundled for use with IPOPT and
+ other applications that use these HSL routines.
+
+ Note: CoinHSL is licensed software. You will need to request a
+ license from Research Councils UK and download a .tar.gz archive
+ of CoinHSL yourself. Spack will search your current directory for
+ the download file. Alternatively, add this file to a mirror so
+ that Spack can find it. For instructions on how to set up a
+ mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ # NOTE(oxberry1@llnl.gov): an HTTPS version of the URL below does not
+ # exist
+ homepage = "http://www.hsl.rl.ac.uk/ipopt/"
+ url = "file://{0}/coinhsl-archive-2014.01.17.tar.gz".format(os.getcwd())
+
+ version('2014.01.17', '9eb3dd40ed034814ed8dfee75b281180c1d9d2ae')
diff --git a/var/spack/repos/builtin/packages/comd/package.py b/var/spack/repos/builtin/packages/comd/package.py
new file mode 100644
index 0000000000..ad7689beee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/comd/package.py
@@ -0,0 +1,112 @@
+##############################################################################
+# 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/spack/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 *
+import shutil
+
+
+class Comd(MakefilePackage):
+ """CoMD is a reference implementation of classical molecular dynamics
+ algorithms and workloads as used in materials science. It is created and
+ maintained by The Exascale Co-Design Center for Materials in Extreme
+ Environments (ExMatEx). The code is intended to serve as a vehicle for
+ co-design by allowing others to extend and/or reimplement it as needed to
+ test performance of new architectures, programming models, etc. New
+ versions of CoMD will be released to incorporate the lessons learned from
+ the co-design process."""
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ homepage = "http://www.exmatex.org/comd.html"
+ url = "https://github.com/ECP-copa/CoMD/archive/v1.1.tar.gz"
+
+ version('1.1', '5051310a8d2c93cccba63de40bcfaa78')
+ version('develop', git='https://github.com/ECP-copa/CoMD', branch='master')
+
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('openmp', default=False, description='Build with OpenMP support')
+ variant('precision', default=True, description='Toggle Precesion Options')
+ variant('graphs', default=True, description='Enable graph visuals')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('graphviz', when='+graphs')
+
+ conflicts('+openmp', when='+mpi')
+
+ def edit(self, spec, prefix):
+ with working_dir('src-mpi') or working_dir('src-openmp'):
+ shutil.copy('Makefile.vanilla', 'Makefile')
+
+ @property
+ def build_targets(self):
+ targets = []
+ cflags = ' -std=c99 '
+ optflags = ' -g -O5 '
+ clib = ' -lm '
+ comd_variant = 'CoMD'
+ cc = spack_cc
+
+ if '+openmp' in self.spec:
+ targets.append('--directory=src-openmp')
+ comd_variant += '-openmp'
+ cflags += ' -fopenmp '
+ if '+mpi' in self.spec:
+ comd_variant += '-mpi'
+ targets.append('CC = {0}'.format(self.spec['mpi'].mpicc))
+ else:
+ targets.append('CC = {0}'.format('spack_cc'))
+
+ else:
+ targets.append('--directory=src-mpi')
+ if '~mpi' in self.spec:
+ comd_variant += '-serial'
+ targets.append('CC = {0}'.format(cc))
+ else:
+ comd_variant += '-mpi'
+ targets.append('CC = {0}'.format(self.spec['mpi'].mpicc))
+ if '+mpi' in self.spec:
+ cflags += '-DDO_MPI'
+ targets.append(
+ 'INCLUDES = {0}'.format(self.spec['mpi'].prefix.include))
+
+ if '+precision' in self.spec:
+ cflags += ' -DDOUBLE '
+ else:
+ cflags += ' -DSINGLE '
+
+ targets.append('CoMD_VARIANT = {0}'.format(comd_variant))
+ targets.append('CFLAGS = {0}'.format(cflags))
+ targets.append('OPTFLAGS = {0}'.format(optflags))
+ targets.append('C_LIB = {0}'.format(clib))
+
+ return targets
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('examples', prefix.examples)
+ install_tree('pots', prefix.pots)
+ mkdirp(prefix.doc)
+ install('README.md', prefix.doc)
+ install('LICENSE.md', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/compiz/package.py b/var/spack/repos/builtin/packages/compiz/package.py
index ec21f5b4f2..5387483879 100644
--- a/var/spack/repos/builtin/packages/compiz/package.py
+++ b/var/spack/repos/builtin/packages/compiz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Compiz(Package):
+class Compiz(AutotoolsPackage):
"""compiz - OpenGL window and compositing manager.
Compiz is an OpenGL compositing manager that use
@@ -55,9 +55,3 @@ class Compiz(Package):
depends_on('libpng')
depends_on('glib')
depends_on('gconf')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/compositeproto/package.py b/var/spack/repos/builtin/packages/compositeproto/package.py
index 1b3fbda0af..b4a041e7a2 100644
--- a/var/spack/repos/builtin/packages/compositeproto/package.py
+++ b/var/spack/repos/builtin/packages/compositeproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Compositeproto(Package):
+class Compositeproto(AutotoolsPackage):
"""Composite Extension.
This package contains header files and documentation for the composite
@@ -38,8 +38,3 @@ class Compositeproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/conduit/package.py b/var/spack/repos/builtin/packages/conduit/package.py
index 9715542126..6793a391c3 100644
--- a/var/spack/repos/builtin/packages/conduit/package.py
+++ b/var/spack/repos/builtin/packages/conduit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,6 +28,7 @@ import socket
import os
import llnl.util.tty as tty
+from os import environ as env
def cmake_cache_entry(name, value):
@@ -35,7 +36,7 @@ def cmake_cache_entry(name, value):
Helper that creates CMake cache entry strings used in
'host-config' files.
"""
- return 'set("{0}" "{1}" CACHE PATH "")\n\n'.format(name, value)
+ return 'set({0} "{1}" CACHE PATH "")\n\n'.format(name, value)
class Conduit(Package):
@@ -45,12 +46,19 @@ class Conduit(Package):
coupling between packages in-core, serialization, and I/O tasks."""
homepage = "http://software.llnl.gov/conduit"
- url = "https://github.com/LLNL/conduit/archive/v0.2.1.tar.gz"
+ url = "https://github.com/LLNL/conduit/releases/download/v0.3.0/conduit-v0.3.0-src-with-blt.tar.gz"
- version('0.2.1', 'cd2b42c76f70ac3546582b6da77c6028')
- version('0.2.0', 'd595573dedf55514c11d7391092fd760')
+ version('0.3.0', '6396f1d1ca16594d7c66d4535d4f898e')
+ # note: checksums on github automatic release source tars changed ~9/17
+ version('0.2.1', 'ed7358af3463ba03f07eddd6a6e626ff')
+ version('0.2.0', 'a7b398d493fd71b881a217993a9a29d4')
- version('master', git='https://github.com/LLNL/conduit.git')
+ maintainers = ['cyrush']
+
+ version('master',
+ git='https://github.com/LLNL/conduit.git',
+ branch="master",
+ submodules=True)
###########################################################################
# package variants
@@ -67,7 +75,7 @@ class Conduit(Package):
# variants for comm and i/o
variant("mpi", default=True, description="Build Conduit MPI Support")
variant("hdf5", default=True, description="Build Conduit HDF5 support")
- variant("silo", default=True, description="Build Conduit Silo support")
+ variant("silo", default=False, description="Build Conduit Silo support")
# variants for dev-tools (docs, etc)
variant("doc", default=False, description="Build Conduit's documentation")
@@ -79,31 +87,34 @@ class Conduit(Package):
#######################
# CMake
#######################
- # cmake 3.3.1 is the version we tested
- depends_on("cmake@3.3.1", when="+cmake")
+ # cmake 3.8.2 or newer
+ depends_on("cmake@3.8.2:", when="+cmake")
#######################
# Python
#######################
+ # we need a shared version of python b/c linking with static python lib
+ # causes duplicate state issues when running compiled python modules.
+ depends_on("python+shared")
extends("python", when="+python")
# TODO: blas and lapack are disabled due to build
# issues Cyrus experienced on OSX 10.11.6
- depends_on("py-numpy~blas~lapack", when="+python")
+ depends_on("py-numpy~blas~lapack", when="+python", type=('build', 'run'))
#######################
# I/O Packages
#######################
# TODO: cxx variant is disabled due to build issue Cyrus
# experienced on BGQ. When on, the static build tries
- # to link agains shared libs.
+ # to link against shared libs.
#
# we are not using hdf5's mpi or fortran features.
- depends_on("hdf5~cxx~mpi~fortran", when="+shared")
- depends_on("hdf5~shared~cxx~mpi~fortran", when="~shared")
+ depends_on("hdf5~cxx~mpi~fortran", when="+hdf5+shared")
+ depends_on("hdf5~shared~cxx~mpi~fortran", when="+hdf5~shared")
# we are not using silo's fortran features
- depends_on("silo~fortran", when="+shared")
- depends_on("silo~shared~fortran", when="~shared")
+ depends_on("silo~fortran", when="+silo+shared")
+ depends_on("silo~shared~fortran", when="+silo~shared")
#######################
# MPI
@@ -113,9 +124,25 @@ class Conduit(Package):
#######################
# Documentation related
#######################
- depends_on("py-sphinx", when="+python+doc")
+ depends_on("py-sphinx", when="+python+doc", type='build')
depends_on("doxygen", when="+doc")
+ def url_for_version(self, version):
+ """
+ Provide proper url
+ """
+ v = str(version)
+ if v == "0.2.0":
+ return "https://github.com/LLNL/conduit/archive/v0.2.0.tar.gz"
+ elif v == "0.2.1":
+ return "https://github.com/LLNL/conduit/archive/v0.2.1.tar.gz"
+ elif v == "0.3.0":
+ # conduit uses BLT (https://github.com/llnl/blt) as a submodule,
+ # since github does not automatically package source from
+ # submodules, conduit provides a custom src tarball
+ return "https://github.com/LLNL/conduit/releases/download/v0.3.0/conduit-v0.3.0-src-with-blt.tar.gz"
+ return url
+
def install(self, spec, prefix):
"""
Build and install Conduit.
@@ -125,7 +152,7 @@ class Conduit(Package):
cmake_args = []
# if we have a static build, we need to avoid any of
# spack's default cmake settings related to rpaths
- # (see: https://github.com/LLNL/spack/issues/2658)
+ # (see: https://github.com/spack/spack/issues/2658)
if "+shared" in spec:
cmake_args.extend(std_cmake_args)
else:
@@ -174,13 +201,13 @@ class Conduit(Package):
##############################################
if "+cmake" in spec:
- cmake_exe = join_path(spec['cmake'].prefix.bin, "cmake")
+ cmake_exe = spec['cmake'].command.path
else:
cmake_exe = which("cmake")
if cmake_exe is None:
msg = 'failed to find CMake (and cmake variant is off)'
raise RuntimeError(msg)
- cmake_exe = cmake_exe.command
+ cmake_exe = cmake_exe.path
host_cfg_fname = "%s-%s-%s.cmake" % (socket.gethostname(),
sys_type,
@@ -224,21 +251,15 @@ class Conduit(Package):
cfg.write("# Python Support\n")
if "+python" in spec:
- python_exe = join_path(spec['python'].prefix.bin, "python")
cfg.write("# Enable python module builds\n")
cfg.write(cmake_cache_entry("ENABLE_PYTHON", "ON"))
cfg.write("# python from spack \n")
- cfg.write(cmake_cache_entry("PYTHON_EXECUTABLE", python_exe))
+ cfg.write(cmake_cache_entry("PYTHON_EXECUTABLE",
+ spec['python'].command.path))
# install module to standard style site packages dir
# so we can support spack activate
- py_ver_short = "python{0}".format(spec["python"].version.up_to(2))
- pym_prefix = join_path("${CMAKE_INSTALL_PREFIX}",
- "lib",
- py_ver_short,
- "site-packages")
- # use pym_prefix as the install path
cfg.write(cmake_cache_entry("PYTHON_MODULE_INSTALL_PREFIX",
- pym_prefix))
+ site_packages_dir))
else:
cfg.write(cmake_cache_entry("ENABLE_PYTHON", "OFF"))
@@ -251,7 +272,7 @@ class Conduit(Package):
cfg.write(cmake_cache_entry("SPHINX_EXECUTABLE", sphinx_build_exe))
cfg.write("# doxygen from uberenv\n")
- doxygen_exe = join_path(spec['doxygen'].prefix.bin, "doxygen")
+ doxygen_exe = spec['doxygen'].command.path
cfg.write(cmake_cache_entry("DOXYGEN_EXECUTABLE", doxygen_exe))
else:
cfg.write(cmake_cache_entry("ENABLE_DOCS", "OFF"))
@@ -265,11 +286,8 @@ class Conduit(Package):
if "+mpi" in spec:
cfg.write(cmake_cache_entry("ENABLE_MPI", "ON"))
cfg.write(cmake_cache_entry("MPI_C_COMPILER", spec['mpi'].mpicc))
- # we use `mpicc` as `MPI_CXX_COMPILER` b/c we don't want to
- # introduce linking deps to the MPI C++ libs (we aren't using
- # C++ features of MPI) -- this happens with some versions of
- # OpenMPI
- cfg.write(cmake_cache_entry("MPI_CXX_COMPILER", spec['mpi'].mpicc))
+ cfg.write(cmake_cache_entry("MPI_CXX_COMPILER",
+ spec['mpi'].mpicxx))
cfg.write(cmake_cache_entry("MPI_Fortran_COMPILER",
spec['mpi'].mpifc))
else:
diff --git a/var/spack/repos/builtin/packages/constype/package.py b/var/spack/repos/builtin/packages/constype/package.py
index dcf88fdd55..731217b527 100644
--- a/var/spack/repos/builtin/packages/constype/package.py
+++ b/var/spack/repos/builtin/packages/constype/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Constype(Package):
+class Constype(AutotoolsPackage):
"""constype prints on the standard output the Sun code for the type of
display that the specified device is.
@@ -39,9 +39,3 @@ class Constype(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/converge/package.py b/var/spack/repos/builtin/packages/converge/package.py
index 429be8542d..7a17436ed3 100644
--- a/var/spack/repos/builtin/packages/converge/package.py
+++ b/var/spack/repos/builtin/packages/converge/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,11 @@
# 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 distutils.dir_util import copy_tree
+import glob
import os
+from spack import *
+
class Converge(Package):
"""CONVERGE is a revolutionary computational fluid dynamics (CFD) program
@@ -37,27 +38,64 @@ class Converge(Package):
parameters. This grid generation method completely eliminates the need to
manually generate a grid. In addition, CONVERGE offers many other features
to expedite the setup process and to ensure that your simulations are as
- computationally efficient as possible.
-
- Note: CONVERGE is licensed software. You will need to create an account on
- the CONVERGE homepage and download CONVERGE yourself. Spack will search
- your current directory for the download file. Alternatively, add this file
- to a mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+ computationally efficient as possible."""
homepage = "https://www.convergecfd.com/"
- url = "file://%s/converge_install_2.3.16.tar.gz" % os.getcwd()
+ url = "https://download.convergecfd.com/download/CONVERGE_2.4/Full_Solver_Packages/converge_install_2.4.10.tar.gz"
+
+ # In order to view available versions, you need to register for an account:
+ # https://download.convergecfd.com/wp-login.php?action=register
- version('2.3.16', '8b80f1e73a63181c427c7732ad279986')
+ version('2.4.10', '53f5bd4bfb39005bebae46b8d6ee3ce6')
+ version('2.3.23', '2913c3e440f82db069051f8822115e5e')
+ version('2.2.0', 'd949cfe338c83ee736ca0be8f77df6bf',
+ url="https://download.convergecfd.com/download/CONVERGE_2.2/Full_Solver_Packages/converge_install_2.2.0_042916.tar.gz")
+ version('2.1.0', '327a917d46aa3bc8dee9511375ce112c',
+ url="https://download.convergecfd.com/download/CONVERGE_2.1/Full_Solver_Packages/converge_install_2.1.0_111615.tar.gz")
+ version('2.0.0', '06f017521c3abc1a922b136e83d606dd',
+ url="https://download.convergecfd.com/download/CONVERGE_2.0/Full_Solver_Packages/converge_install_2.0.0_090214.tar.gz")
variant('mpi', default=True, description='Build with MPI support')
- # The Converge Getting Started Guide recommends:
- # MPICH: 3.1.4
- # HP-MPI: 2.0.3+
- # OpenMPI: 1.6.*
+ # The following MPI libraries are compatible with CONVERGE:
+ #
+ # +--------------+---------+---------+---------+---------+---------+
+ # | MPI Packages | v2.0 | v2.1 | v2.2 | v2.3 | v2.4 |
+ # +--------------+---------+---------+---------+---------+---------+
+ # | HP-MPI | 2.0.3+ | 2.0.3+ | 2.0.3+ | 2.0.3+ | |
+ # | Intel MPI | | | | | 17.0.98 |
+ # | MPICH | ?.?.? | ?.?.? | 1.2.1 | 3.1.4 | ?.?.? |
+ # | MVAPICH2 | ?.?.? | | | | |
+ # | Open MPI | 1.0-1.4 | 1.0-1.4 | 1.5-1.8 | 1.5-1.8 | 1.10 |
+ # | Platform MPI | | | 9.1.2 | 9.1.2 | 9.1.2 |
+ # +--------------+---------+---------+---------+---------+---------+
+ #
+ # NOTE: HP-MPI was bought out by Platform MPI
+ #
+ # These version requirements are more strict than for most packages.
+ # Since the tarball comes with pre-compiled executables,
+ # the version of libmpi.so must match exactly, or else
+ # you will end up with missing libraries and symbols.
+
depends_on('mpi', when='+mpi')
+ # FIXME: Concretization is currently broken, so this causes:
+ # $ spack spec converge
+ # to crash. You must explicitly state what MPI version you want:
+ # $ spack spec converge@2.4.10 +mpi ^openmpi@:1.10
+ #
+ # TODO: Add version ranges for other MPI libraries
+ depends_on('openmpi@1.10.0:1.10.999', when='@2.4.0:2.4.999+mpi^openmpi')
+ depends_on('openmpi@1.5:1.8', when='@2.2:2.3+mpi^openmpi')
+ depends_on('openmpi@:1.4', when='@:2.1+mpi^openmpi')
+
+ # TODO: Add packages for hp-mpi and platform-mpi
+ # conflicts('^hp-mpi', when='@2.4:')
+ conflicts('^intel-mpi', when='@:2.3')
+ conflicts('^intel-parallel-studio+mpi', when='@:2.3')
+ # conflicts('^platform-mpi', when='@:2.1')
+ conflicts('^spectrum-mpi')
+
# Licensing
license_required = True
license_comment = '#'
@@ -65,5 +103,138 @@ class Converge(Package):
license_vars = ['RLM_LICENSE']
license_url = 'http://www.reprisesoftware.com/RLM_License_Administration.pdf'
+ def url_for_version(self, version):
+ url = "https://download.convergecfd.com/download/CONVERGE_{0}/Full_Solver_Packages/converge_install_{1}.tar.gz"
+ return url.format(version.up_to(2), version)
+
def install(self, spec, prefix):
- copy_tree('.', prefix)
+ # 2.0.0
+ # converge -> converge-2.0.0-hpmpi-090214
+ # converge-2.0.0-hpmpi-090214 -> libmpi.so.1, libmpio.so.1
+ # converge-2.0.0-mpich2-090214 -> libmpich.so.1.2
+ # converge-2.0.0-mvapich-090214 -> libibumad.so.1
+ # converge-2.0.0-openmpi-090214 -> libmpi.so.0
+ # converge-2.0.0-serial-090214
+ # make_surface
+ # post_convert
+
+ # 2.1.0
+ # converge -> converge-2.1.0-hpmpi-111615
+ # converge-2.1.0-hpmpi-111615 -> libmpi.so.1, libmpio.so.1
+ # converge-2.1.0-mpich2-111615 -> libmpich.so.1.2
+ # converge-2.1.0-openmpi-111615 -> libmpi.so.0
+ # converge-2.1.0-serial-111615
+ # make_surface
+ # post_convert
+
+ # 2.2.0
+ # converge -> converge-2.2.0-hpmpi-042916
+ # converge-2.2.0-hpmpi-042916 -> libmpi.so.1, libmpio.so.1
+ # converge-2.2.0-mpich2-042916
+ # converge-2.2.0-openmpi-042916 -> libmpi.so.1
+ # converge-2.2.0-pmpi-042916 -> libmpi.so.1, libmpio.so.1
+ # converge-2.2.0-serial-042916
+ # make_surface
+ # post_convert
+
+ # 2.3.23
+ # converge-2.3.23-hpmpi-linux-64 -> libmpi.so.1, libmpio.so.1
+ # converge-2.3.23-mpich2-linux-64 -> libmpi.so.12
+ # converge-2.3.23-openmpi-linux-64 -> libmpi.so.1
+ # converge-2.3.23-pmpi-linux-64 -> libmpi.so.1, libmpio.so.1
+ # converge-2.3.23-serial-linux-64
+ # make_surface_64
+ # post_convert_mpich_64 -> libmpi.so.12
+ # post_convert_ompi_64 -> libmpi.so.1
+ # post_convert_pmpi_64 -> libmpi.so.1, libmpio.so.1
+ # post_convert_serial_64
+
+ # 2.4.10
+ # converge-2.4.10-intel -> libmpi.so.12, libmpifort.so.12
+ # converge-2.4.10-mpich -> libmpi.so.12
+ # converge-2.4.10-ompi -> libmpi.so.12
+ # converge-2.4.10-pmpi -> libmpi.so.1, libmpio.so.1
+ # converge-2.4.10-serial
+ # make_surface_64
+ # post_convert_mpich_64 -> libmpi.so.12
+ # post_convert_ompi_64 -> libmpi.so.1
+ # post_convert_pmpi_64 -> libmpi.so.1
+ # post_convert_serial_64
+
+ # The CONVERGE tarball comes with binaries for several MPI libraries.
+ # Only install the binary that matches the MPI we are building with.
+ with working_dir('l_x86_64/bin'):
+ if '~mpi' in spec:
+ converge = glob.glob('converge-*-serial*')
+ post_convert = glob.glob('post_convert_serial*')
+ elif 'hp-mpi' in spec:
+ converge = glob.glob('converge-*-hpmpi*')
+ # No HP-MPI version of post_convert
+ post_convert = glob.glob('post_convert_serial*')
+ elif 'intel-mpi' in spec or 'intel-parallel-studio+mpi' in spec:
+ converge = glob.glob('converge-*-intel*')
+ # No Intel MPI version of post_convert
+ post_convert = glob.glob('post_convert_serial*')
+ elif 'mpich' in spec:
+ converge = glob.glob('converge-*-mpich*')
+ post_convert = glob.glob('post_convert_mpich*')
+ elif 'mvapich2' in spec:
+ converge = glob.glob('converge-*-mvapich*')
+ # MVAPICH2 hasn't been supported since CONVERGE
+ # came with a single serial post_convert
+ post_convert = glob.glob('post_convert')
+ elif 'openmpi' in spec:
+ converge = glob.glob('converge-*-o*mpi*')
+ post_convert = glob.glob('post_convert_o*mpi*')
+ elif 'platform-mpi' in spec:
+ converge = glob.glob('converge-*-pmpi*')
+ post_convert = glob.glob('post_convert_pmpi*')
+ else:
+ raise InstallError('Unsupported MPI provider')
+
+ make_surface = glob.glob('make_surface*')
+
+ # Old versions of CONVERGE come with a single serial post_convert
+ if not post_convert:
+ post_convert = glob.glob('post_convert')
+
+ # Make sure glob actually found something
+ if not converge:
+ raise InstallError('converge executable not found')
+ if not post_convert:
+ raise InstallError('post_convert executable not found')
+ if not make_surface:
+ raise InstallError('make_surface executable not found')
+
+ # Make sure glob didn't find multiple matches
+ if len(converge) > 1:
+ raise InstallError('multiple converge executables found')
+ if len(post_convert) > 1:
+ raise InstallError('multiple post_convert executables found')
+ if len(make_surface) > 1:
+ raise InstallError('multiple make_surface executables found')
+
+ converge = converge[0]
+ post_convert = post_convert[0]
+ make_surface = make_surface[0]
+
+ mkdir(prefix.bin)
+
+ # Install the executables
+ install(converge, join_path(prefix.bin, converge))
+ install(post_convert, join_path(prefix.bin, post_convert))
+ install(make_surface, join_path(prefix.bin, make_surface))
+
+ with working_dir(prefix.bin):
+ # Create generic symlinks to all executables
+ if not os.path.exists('converge'):
+ os.symlink(converge, 'converge')
+ if not os.path.exists('post_convert'):
+ os.symlink(post_convert, 'post_convert')
+ if not os.path.exists('make_surface'):
+ os.symlink(make_surface, 'make_surface')
+
+ def setup_environment(self, spack_env, run_env):
+ # CONVERGE searches for a valid license file in:
+ # $CONVERGE_ROOT/license/license.lic
+ run_env.set('CONVERGE_ROOT', self.prefix)
diff --git a/var/spack/repos/builtin/packages/coreutils/package.py b/var/spack/repos/builtin/packages/coreutils/package.py
index 94cfa11341..fa4298a42a 100644
--- a/var/spack/repos/builtin/packages/coreutils/package.py
+++ b/var/spack/repos/builtin/packages/coreutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,16 @@
from spack import *
-class Coreutils(Package):
+class Coreutils(AutotoolsPackage):
"""The GNU Core Utilities are the basic file, shell and text
manipulation utilities of the GNU operating system. These are
the core utilities which are expected to exist on every
operating system.
"""
homepage = "http://www.gnu.org/software/coreutils/"
- url = "http://ftp.gnu.org/gnu/coreutils/coreutils-8.23.tar.xz"
+ url = "http://ftp.gnu.org/gnu/coreutils/coreutils-8.26.tar.xz"
+ version('8.26', 'd5aa2072f662d4118b9f4c63b94601a6')
version('8.23', 'abed135279f87ad6762ce57ff6d89c41')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/corset/package.py b/var/spack/repos/builtin/packages/corset/package.py
new file mode 100644
index 0000000000..7b5ef695cb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/corset/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Corset(Package):
+ """Corset is a command-line software program to go from a de novo
+ transcriptome assembly to gene-level counts."""
+
+ homepage = "https://github.com/Oshlack/Corset/wiki"
+ url = "https://github.com/Oshlack/Corset/releases/download/version-1.06/corset-1.06-linux64.tar.gz"
+
+ version('1.06', '0a6d0bb1f2d1bdbcb8b47656a7f12f23')
+
+ def url_for_version(self, version):
+ url = 'https://github.com/Oshlack/Corset/releases/download/version-{0}/corset-{0}-linux64.tar.gz'
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('corset', prefix.bin)
+ install('corset_fasta_ID_changer', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cosmomc/Makefile.patch b/var/spack/repos/builtin/packages/cosmomc/Makefile.patch
new file mode 100644
index 0000000000..f7241af3d0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cosmomc/Makefile.patch
@@ -0,0 +1,26 @@
+--- a/Makefile
++++ b/Makefile
+@@ -7,8 +7,7 @@
+
+ rebuild: clean delete cosmomc
+
+-cosmomc: BUILD ?= MPI
+-cosmomc_debug: BUILD ?= MPI
++BUILD ?= MPI
+
+ getdist: ./source/*.*90
+ cd ./source && make getdist BUILD=$(BUILD)
+--- a/source/Makefile
++++ b/source/Makefile
+@@ -57,11 +57,7 @@
+ #commented above is (I think) for Mac; this is standard linux (sudo apt-get install liblapack-dev)
+ LAPACKL = -lblas -llapack
+
+-#march native does not work on Mac, otherwise use (comment out if your cluster is inhomogeneous)
+-ifneq ($(shell uname -s),Darwin)
+-#native optimization does not work on Mac
+ FFLAGS+=-march=native
+-endif
+
+ endif
+
diff --git a/var/spack/repos/builtin/packages/cosmomc/errorstop.patch b/var/spack/repos/builtin/packages/cosmomc/errorstop.patch
new file mode 100644
index 0000000000..b23e925daf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cosmomc/errorstop.patch
@@ -0,0 +1,11 @@
+--- a/camb/constants.f90
++++ b/camb/constants.f90
+@@ -87,7 +87,7 @@
+ global_error_message=''
+ end if
+ if (present(id)) then
+- if (id==0) error stop('Error id must be non-zero')
++ if (id==0) error stop
+ global_error_flag=id
+ else
+ global_error_flag=-1
diff --git a/var/spack/repos/builtin/packages/cosmomc/package.py b/var/spack/repos/builtin/packages/cosmomc/package.py
new file mode 100644
index 0000000000..c3788c53ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cosmomc/package.py
@@ -0,0 +1,210 @@
+##############################################################################
+# 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/spack/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 *
+import fnmatch
+import os
+
+
+class Cosmomc(Package):
+ """CosmoMC is a Fortran 2008 Markov-Chain Monte-Carlo (MCMC) engine
+ for exploring cosmological parameter space, together with
+ Fortran and python code for analysing Monte-Carlo samples and
+ importance sampling (plus a suite of scripts for building grids
+ of runs, plotting and presenting results)."""
+
+ homepage = "http://cosmologist.info/cosmomc/"
+ url = "https://github.com/cmbant/CosmoMC/archive/Nov2016.tar.gz"
+
+ version('2016.11', '98620cb746352f68fb0c1196e9a070ac')
+ version('2016.06', '92dc651d1407cca6ea9228992165f5cb')
+
+ def url_for_version(self, version):
+ names = {'2016.11': "Nov2016",
+ '2016.06': "June2016"}
+ return ("https://github.com/cmbant/CosmoMC/archive/%s.tar.gz" %
+ names[str(version)])
+
+ variant('mpi', default=True, description='Enable MPI support')
+ variant('planck', default=False,
+ description='Enable Planck Likelihood code and baseline data')
+ variant('python', default=True, description='Enable Python bindings')
+
+ extends('python', when='+python')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('planck-likelihood', when='+planck')
+ depends_on('py-matplotlib', type=('build', 'run'), when='+python')
+ depends_on('py-numpy', type=('build', 'run'), when='+python')
+ depends_on('py-pandas', type=('build', 'run'), when='+python')
+ depends_on('py-scipy', type=('build', 'run'), when='+python')
+ depends_on('py-six', type=('build', 'run'), when='+python')
+ depends_on('python @2.7:2.999,3.4:', type=('build', 'run'), when='+python')
+
+ patch('Makefile.patch')
+ patch('errorstop.patch')
+
+ parallel = False
+
+ def install(self, spec, prefix):
+ # Clean up environment to avoid configure problems
+ os.environ.pop('LINKMPI', '')
+ os.environ.pop('NERSC_HOST', '')
+ os.environ.pop('NONCLIKLIKE', '')
+ os.environ.pop('PICO', '')
+ os.environ.pop('PRECISION', '')
+ os.environ.pop('RECOMBINATION', '')
+ os.environ.pop('WMAP', '')
+
+ # Set up Planck data if requested
+ clikdir = join_path('data', 'clik')
+ try:
+ os.remove(clikdir)
+ except OSError:
+ pass
+ if '+planck' in spec:
+ os.symlink(join_path(os.environ['CLIK_DATA'], 'plc_2.0'), clikdir)
+ else:
+ os.environ.pop('CLIK_DATA', '')
+ os.environ.pop('CLIK_PATH', '')
+ os.environ.pop('CLIK_PLUGIN', '')
+
+ # Choose compiler
+ # Note: Instead of checking the compiler vendor, we should
+ # rewrite the Makefile to use Spack's options all the time
+ if spec.satisfies('%gcc'):
+ if not spec.satisfies('%gcc@6:'):
+ raise InstallError(
+ "When using GCC, "
+ "CosmoMC requires version gcc@6: for building")
+ choosecomp = 'ifortErr=1' # choose gfortran
+ elif spec.satisfies('%intel'):
+ if not spec.satifies('%intel@14:'):
+ raise InstallError(
+ "When using the Intel compiler, "
+ "CosmoMC requires version intel@14: for building")
+ choosecomp = 'ifortErr=0' # choose ifort
+ else:
+ raise InstallError("Only GCC and Intel compilers are supported")
+
+ # Configure MPI
+ if '+mpi' in spec:
+ wantmpi = 'BUILD=MPI'
+ mpif90 = 'MPIF90C=%s' % spec['mpi'].mpifc
+ else:
+ wantmpi = 'BUILD=NOMPI'
+ mpif90 = 'MPIF90C='
+
+ # Choose BLAS and LAPACK
+ lapack = ("LAPACKL=%s" %
+ (spec['lapack'].libs + spec['blas'].libs).ld_flags)
+
+ # Build
+ make(choosecomp, wantmpi, mpif90, lapack)
+
+ # Install
+ mkdirp(prefix.bin)
+ install('cosmomc', prefix.bin)
+ root = join_path(prefix.share, 'cosmomc')
+ mkdirp(root)
+ entries = [
+ 'batch1',
+ 'batch2',
+ 'batch3',
+ 'camb',
+ 'chains',
+ 'clik_latex.paramnames',
+ 'clik_units.paramnames',
+ 'cosmomc.cbp',
+ 'data',
+ 'distgeneric.ini',
+ 'distparams.ini',
+ 'disttest.ini',
+ 'docs',
+ 'job_script',
+ 'job_script_MOAB',
+ 'job_script_SLURM',
+ 'paramnames',
+ 'params_generic.ini',
+ 'planck_covmats',
+ 'scripts',
+ # don't copy 'source'
+ 'test.ini',
+ 'test_pico.ini',
+ 'test_planck.ini',
+ 'tests',
+ ]
+ if '+python' in spec:
+ entries += ['python']
+ for entry in entries:
+ if os.path.isfile(entry):
+ install(entry, root)
+ else:
+ install_tree(entry, join_path(root, entry))
+ for dirpath, dirnames, filenames in os.walk(prefix):
+ for filename in fnmatch.filter(filenames, '*~'):
+ os.remove(os.path.join(dirpath, filename))
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ prefix = self.prefix
+ spec = self.spec
+
+ os.environ.pop('LINKMPI', '')
+ os.environ.pop('NERSC_HOST', '')
+ os.environ.pop('NONCLIKLIKE', '')
+ os.environ.pop('PICO', '')
+ os.environ.pop('PRECISION', '')
+ os.environ.pop('RECOMBINATION', '')
+ os.environ.pop('WMAP', '')
+
+ os.environ.pop('COSMOMC_LOCATION', '')
+ os.environ.pop('PLC_LOCATION', '')
+
+ os.environ.pop('CLIKPATH', '')
+ os.environ.pop('PLANCKLIKE', '')
+
+ exe = spec['cosmomc'].command.path
+ args = []
+ if '+mpi' in spec:
+ # Add mpirun prefix
+ args = ['-np', '1', exe]
+ exe = join_path(spec['mpi'].prefix.bin, 'mpiexec')
+ cosmomc = Executable(exe)
+ with working_dir('spack-check', create=True):
+ for entry in [
+ 'camb',
+ 'chains',
+ 'data',
+ 'paramnames',
+ 'planck_covmats',
+ ]:
+ os.symlink(join_path(prefix.share, 'cosmomc', entry), entry)
+ inifile = join_path(prefix.share, 'cosmomc', 'test.ini')
+ cosmomc(*(args + [inifile]))
+ if '+planck' in spec:
+ inifile = join_path(prefix.share, 'cosmomc', 'test_planck.ini')
+ cosmomc(*(args + [inifile]))
diff --git a/var/spack/repos/builtin/packages/cosp2/package.py b/var/spack/repos/builtin/packages/cosp2/package.py
new file mode 100644
index 0000000000..2bd69e73d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cosp2/package.py
@@ -0,0 +1,74 @@
+##############################################################################
+# 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/spack/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 *
+import shutil
+
+
+class Cosp2(MakefilePackage):
+ """Proxy Application. CoSP2 represents a sparse linear algebra
+ parallel algorithm for calculating the density matrix in electronic
+ tructure theory. The algorithm is based on a recursive second-order
+ Fermi-Operator expansion method (SP2) and is tailored for density
+ functional based tight-binding calculations of non-metallic systems.
+ """
+
+ tags = ['proxy-app']
+
+ homepage = "http://www.exmatex.org/cosp2.html"
+ url = "https://github.com/exmatex/CoSP2/archive/master.tar.gz"
+
+ version('master', git='https://github.com/exmatex/CoSP2.git',
+ description='master')
+
+ variant('double', default=True,
+ description='Build with double precision.')
+ variant('mpi', default=True, description='Build with MPI Support')
+
+ depends_on('mpi', when='+mpi')
+
+ build_directory = 'src-mpi'
+
+ def edit(self, spec, prefix):
+ cc = spack_cc
+
+ if '+mpi' in spec:
+ cc = spec['mpi'].mpicc
+
+ with working_dir(self.build_directory):
+ makefile = FileFilter('Makefile.vanilla')
+ makefile.filter(r'^CC\s*=.*', 'CC = {0}'.format(cc))
+
+ if '+double' in spec:
+ filter_file('DOUBLE_PRECISION = O.*', 'DOUBLE_PRECISION = OFF',
+ 'Makefile.vanilla')
+ shutil.copy('Makefile.vanilla', 'Makefile')
+
+ def install(self, spec, prefix):
+ install_tree('bin/', prefix.bin)
+ install_tree('examples/', prefix.examples)
+ install_tree('doc/', prefix.doc)
+ install('src-mpi/Doxyfile', prefix.doc)
+ install('README.md', prefix.doc)
+ install('LICENSE.md', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/cp2k/package.py b/var/spack/repos/builtin/packages/cp2k/package.py
index 3a175ea1a2..53eb29f336 100644
--- a/var/spack/repos/builtin/packages/cp2k/package.py
+++ b/var/spack/repos/builtin/packages/cp2k/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,6 +37,7 @@ class Cp2k(Package):
homepage = 'https://www.cp2k.org'
url = 'https://sourceforge.net/projects/cp2k/files/cp2k-3.0.tar.bz2'
+ version('4.1', 'b0534b530592de15ac89828b1541185e')
version('3.0', 'c05bc47335f68597a310b1ed75601d35')
variant('mpi', default=True, description='Enable MPI support')
@@ -47,14 +48,18 @@ class Cp2k(Package):
depends_on('lapack')
depends_on('blas')
depends_on('fftw')
- depends_on('libint@:1.2', when='@3.0')
+ depends_on('libint@:1.2', when='@3.0,4.1')
- depends_on('mpi', when='+mpi')
+ depends_on('mpi@2:', when='+mpi')
depends_on('scalapack', when='+mpi')
depends_on('plumed+shared+mpi', when='+plumed+mpi')
depends_on('plumed+shared~mpi', when='+plumed~mpi')
- depends_on('pexsi', when='+mpi')
- depends_on('wannier90', when='+mpi')
+ depends_on('pexsi+fortran', when='+mpi')
+
+ # Apparently cp2k@4.1 needs an "experimental" version of libwannier.a
+ # which is only available contacting the developer directly. See INSTALL
+ # in the stage of cp2k@4.1
+ depends_on('wannier90', when='@3.0+mpi')
depends_on('elpa', when='+mpi')
# TODO : add dependency on libsmm, libxsmm
@@ -75,32 +80,58 @@ class Cp2k(Package):
optflags = {
'gcc': ['-O2',
'-ffast-math',
- '-ffree-form',
- '-ffree-line-length-none',
'-ftree-vectorize',
'-funroll-loops',
'-mtune=native'],
'intel': ['-O2',
'-pc64',
- '-unroll',
- '-heap-arrays 64']
+ '-unroll']
}
+
+ dflags = ['-DNDEBUG']
+
cppflags = [
'-D__FFTW3',
'-D__LIBINT',
- '-I' + spec['fftw'].prefix.include
+ '-D__LIBINT_MAX_AM=6',
+ '-D__LIBDERIV_MAX_AM1=5',
+ spec['fftw'].headers.cpp_flags
]
+
+ if '^mpi@3:' in spec:
+ cppflags.append('-D__MPI_VERSION=3')
+ elif '^mpi@2:' in spec:
+ cppflags.append('-D__MPI_VERSION=2')
+
+ if '^intel-mkl' in spec:
+ cppflags.append('-D__FFTSG')
+
+ cflags = copy.deepcopy(optflags[self.spec.compiler.name])
+ cxxflags = copy.deepcopy(optflags[self.spec.compiler.name])
fcflags = copy.deepcopy(optflags[self.spec.compiler.name])
fcflags.extend([
- '-I' + spec['fftw'].prefix.include
+ '-ffree-form',
+ '-ffree-line-length-none',
+ spec['fftw'].headers.cpp_flags
])
- fftw = find_libraries(['libfftw3'], root=spec['fftw'].prefix.lib)
+
+ if '%intel' in spec:
+ cflags.append('-fp-model precise')
+ cxxflags.append('-fp-model precise')
+ fcflags.extend(['-fp-model source', '-heap-arrays 64'])
+
+ fftw = find_libraries('libfftw3', root=spec['fftw'].prefix.lib)
ldflags = [fftw.search_flags]
+
+ if 'superlu-dist@4.3' in spec:
+ ldflags = ['-Wl,--allow-multiple-definition'] + ldflags
+
libs = [
join_path(spec['libint'].prefix.lib, 'libint.so'),
join_path(spec['libint'].prefix.lib, 'libderiv.so'),
join_path(spec['libint'].prefix.lib, 'libr12.so')
]
+
if '+plumed' in self.spec:
# Include Plumed.inc in the Makefile
mkf.write('include {0}\n'.format(
@@ -111,6 +142,7 @@ class Cp2k(Package):
'Plumed.inc')
))
# Add required macro
+ dflags.extend(['-D__PLUMED2'])
cppflags.extend(['-D__PLUMED2'])
libs.extend([
join_path(self.spec['plumed'].prefix.lib,
@@ -125,18 +157,20 @@ class Cp2k(Package):
# ${CPP} <file>.F > <file>.f90
#
# and use `-fpp` instead
- mkf.write('CPP = # {0.compiler.cc} -P\n'.format(self))
- mkf.write('AR = xiar -r\n')
+ mkf.write('CPP = # {0.compiler.cc} -P\n\n'.format(self))
+ mkf.write('AR = xiar -r\n\n')
else:
- mkf.write('CPP = {0.compiler.cc} -E\n'.format(self))
- mkf.write('AR = ar -r\n')
+ mkf.write('CPP = {0.compiler.cc} -E\n\n'.format(self))
+ mkf.write('AR = ar -r\n\n')
fc = self.compiler.fc if '~mpi' in spec else self.spec['mpi'].mpifc
mkf.write('FC = {0}\n'.format(fc))
mkf.write('LD = {0}\n'.format(fc))
# Intel
if '%intel' in self.spec:
cppflags.extend([
- '-D__INTEL_COMPILER',
+ '-D__INTEL',
+ '-D__HAS_ISO_C_BINDING',
+ '-D__USE_CP2K_TRACE',
'-D__MKL'
])
fcflags.extend([
@@ -149,25 +183,28 @@ class Cp2k(Package):
cppflags.extend([
'-D__parallel',
'-D__LIBPEXSI',
- '-D__WANNIER90',
'-D__ELPA3',
'-D__SCALAPACK'
])
+ if 'wannier90' in spec:
+ cppflags.append('-D__WANNIER90')
+
fcflags.extend([
+ # spec['elpa:fortran'].headers.cpp_flags
'-I' + join_path(
spec['elpa'].prefix,
'include',
'elpa-{0}'.format(str(spec['elpa'].version)),
'modules'
),
+ # spec[pexsi:fortran].headers.cpp_flags
'-I' + join_path(spec['pexsi'].prefix, 'fortran')
])
- scalapack = spec['scalapack'].scalapack_libs
+ scalapack = spec['scalapack'].libs
ldflags.append(scalapack.search_flags)
libs.extend([
join_path(spec['elpa'].prefix.lib,
'libelpa.{0}'.format(dso_suffix)),
- join_path(spec['wannier90'].prefix.lib, 'libwannier.a'),
join_path(spec['pexsi'].prefix.lib, 'libpexsi.a'),
join_path(spec['superlu-dist'].prefix.lib,
'libsuperlu_dist.a'),
@@ -180,21 +217,40 @@ class Cp2k(Package):
'libmetis.{0}'.format(dso_suffix)
),
])
+
+ if 'wannier90' in spec:
+ wannier = join_path(
+ spec['wannier90'].prefix.lib, 'libwannier.a'
+ )
+ libs.append(wannier)
+
libs.extend(scalapack)
- libs.extend(self.spec['mpi'].mpicxx_shared_libs)
+ libs.extend(self.spec['mpi:cxx'].libs)
libs.extend(self.compiler.stdcxx_libs)
# LAPACK / BLAS
- lapack = spec['lapack'].lapack_libs
- blas = spec['blas'].blas_libs
+ lapack = spec['lapack'].libs
+ blas = spec['blas'].libs
ldflags.append((lapack + blas).search_flags)
libs.extend([str(x) for x in (fftw, lapack, blas)])
+ dflags.extend(cppflags)
+ cflags.extend(cppflags)
+ cxxflags.extend(cppflags)
+ fcflags.extend(cppflags)
+
# Write compiler flags to file
- mkf.write('CPPFLAGS = {0}\n'.format(' '.join(cppflags)))
- mkf.write('FCFLAGS = {0}\n'.format(' '.join(fcflags)))
- mkf.write('LDFLAGS = {0}\n'.format(' '.join(ldflags)))
- mkf.write('LIBS = {0}\n'.format(' '.join(libs)))
+ mkf.write('DFLAGS = {0}\n\n'.format(' '.join(dflags)))
+ mkf.write('CPPFLAGS = {0}\n\n'.format(' '.join(cppflags)))
+ mkf.write('CFLAGS = {0}\n\n'.format(' '.join(cflags)))
+ mkf.write('CXXFLAGS = {0}\n\n'.format(' '.join(cxxflags)))
+ mkf.write('FCFLAGS = {0}\n\n'.format(' '.join(fcflags)))
+ mkf.write('LDFLAGS = {0}\n\n'.format(' '.join(ldflags)))
+ if '%intel' in spec:
+ mkf.write('LDFLAGS_C = {0}\n\n'.format(
+ ' '.join(ldflags) + ' -nofor_main')
+ )
+ mkf.write('LIBS = {0}\n\n'.format(' '.join(libs)))
with working_dir('makefiles'):
# Apparently the Makefile bases its paths on PWD
diff --git a/var/spack/repos/builtin/packages/cppad/package.py b/var/spack/repos/builtin/packages/cppad/package.py
index 1ec31bbeef..3b503fe1c8 100644
--- a/var/spack/repos/builtin/packages/cppad/package.py
+++ b/var/spack/repos/builtin/packages/cppad/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,16 +29,11 @@ class Cppad(CMakePackage):
"""A Package for Differentiation of C++ Algorithms."""
homepage = "https://www.coin-or.org/CppAD/"
+ url = "http://www.coin-or.org/download/source/CppAD/cppad-20170114.gpl.tgz"
version('20170114', '565a534dc813fa1289764222cd8c11ea')
version('develop', git='https://github.com/coin-or/CppAD.git')
- depends_on('cmake', type='build')
-
- def url_for_version(self, version):
- """Handle version-based custom URLs."""
- return "http://www.coin-or.org/download/source/CppAD/cppad-%s.gpl.tgz" % (version)
-
def cmake_args(self):
# This package does not obey CMAKE_INSTALL_PREFIX
args = [
diff --git a/var/spack/repos/builtin/packages/cppcheck/package.py b/var/spack/repos/builtin/packages/cppcheck/package.py
index fd48fcb7e3..a9933920a9 100644
--- a/var/spack/repos/builtin/packages/cppcheck/package.py
+++ b/var/spack/repos/builtin/packages/cppcheck/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,18 +23,23 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
+import shutil
class Cppcheck(Package):
"""A tool for static C/C++ code analysis."""
homepage = "http://cppcheck.sourceforge.net/"
- url = "http://downloads.sourceforge.net/project/cppcheck/cppcheck/1.68/cppcheck-1.68.tar.bz2"
+ url = "https://downloads.sourceforge.net/project/cppcheck/cppcheck/1.78/cppcheck-1.78.tar.bz2"
+ version('1.78', 'f02d0ee0a4e71023703c6c5efff6cf9d')
+ version('1.72', '2bd36f91ae0191ef5273bb7f6dc0d72e')
version('1.68', 'c015195f5d61a542f350269030150708')
def install(self, spec, prefix):
# cppcheck does not have a configure script
- make()
+ make("CFGDIR=%s" % os.path.join(prefix, 'cfg'))
# manually install the final cppcheck binary
mkdirp(prefix.bin)
install('cppcheck', prefix.bin)
+ shutil.copytree('cfg', os.path.join(prefix, 'cfg'))
diff --git a/var/spack/repos/builtin/packages/cpprestsdk/package.py b/var/spack/repos/builtin/packages/cpprestsdk/package.py
new file mode 100644
index 0000000000..a92b49c7a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cpprestsdk/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Cpprestsdk(CMakePackage):
+ """The C++ REST SDK is a Microsoft project for cloud-based client-server
+ communication in native code using a modern asynchronous C++ API design.
+ This project aims to help C++ developers connect to and interact with
+ services. """
+
+ homepage = "https://github.com/Microsoft/cpprestsdk"
+ url = "https://github.com/Microsoft/cpprestsdk/archive/v2.9.1.tar.gz"
+
+ version('2.9.1', 'c3dd67d8cde8a65c2e994e2ede4439a2')
+
+ depends_on('boost')
+
+ root_cmakelists_dir = 'Release'
diff --git a/var/spack/repos/builtin/packages/cppunit/package.py b/var/spack/repos/builtin/packages/cppunit/package.py
index 78956798b5..ef6fa6ee24 100644
--- a/var/spack/repos/builtin/packages/cppunit/package.py
+++ b/var/spack/repos/builtin/packages/cppunit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/cppzmq/package.py b/var/spack/repos/builtin/packages/cppzmq/package.py
new file mode 100644
index 0000000000..689e3924de
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cppzmq/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Cppzmq(CMakePackage):
+ """C++ binding for 0MQ"""
+
+ homepage = "http://www.zeromq.org"
+ url = "https://github.com/zeromq/cppzmq/archive/v4.2.2.tar.gz"
+
+ version('develop', branch='master',
+ git='https://github.com/zeromq/cppzmq.git')
+
+ version('4.2.2', 'bd809b47296e77fe9f192bd9dafd5cc3')
+
+ depends_on('cmake@3.0.0:', type='build')
+ depends_on('zeromq@4.2.2')
diff --git a/var/spack/repos/builtin/packages/cram/package.py b/var/spack/repos/builtin/packages/cram/package.py
index bef26cdcbd..73a8584572 100644
--- a/var/spack/repos/builtin/packages/cram/package.py
+++ b/var/spack/repos/builtin/packages/cram/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,13 @@
from spack import *
-class Cram(Package):
+class Cram(CMakePackage):
"""Cram runs many small MPI jobs inside one large MPI job."""
homepage = "https://github.com/llnl/cram"
url = "http://github.com/llnl/cram/archive/v1.0.1.tar.gz"
version('1.0.1', 'c73711e945cf5dc603e44395f6647f5e')
- extends('python')
- depends_on("mpi")
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake(".", *std_cmake_args)
- make()
- make("install")
+ extends('python@2.7:')
+ depends_on('mpi')
+ depends_on('cmake@2.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/cryptopp/package.py b/var/spack/repos/builtin/packages/cryptopp/package.py
index c92f262a9a..c8fe6968a7 100644
--- a/var/spack/repos/builtin/packages/cryptopp/package.py
+++ b/var/spack/repos/builtin/packages/cryptopp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,6 +36,7 @@ class Cryptopp(Package):
"""
homepage = "http://www.cryptopp.com"
+ url = "http://www.cryptopp.com/cryptopp563.zip"
version('5.6.3', '3c5b70e2ec98b7a24988734446242d07')
version('5.6.2', '7ed022585698df48e65ce9218f6c6a67')
diff --git a/var/spack/repos/builtin/packages/cscope/package.py b/var/spack/repos/builtin/packages/cscope/package.py
index 73017ffc57..d7e7d29935 100644
--- a/var/spack/repos/builtin/packages/cscope/package.py
+++ b/var/spack/repos/builtin/packages/cscope/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,5 +33,10 @@ class Cscope(AutotoolsPackage):
version('15.8b', '8f9409a238ee313a96f9f87fe0f3b176')
- # Can be configured to use flex (not necessary)
- # ./configure --with-flex
+ depends_on('ncurses')
+
+ depends_on('flex', type='build')
+ depends_on('bison', type='build')
+ depends_on('pkg-config', type='build')
+
+ build_targets = ['CURSES_LIBS=-lncursesw']
diff --git a/var/spack/repos/builtin/packages/csdp/package.py b/var/spack/repos/builtin/packages/csdp/package.py
new file mode 100644
index 0000000000..a242f3b0c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/csdp/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Csdp(MakefilePackage):
+ """CSDP is a library of routines that implements a predictor corrector
+ variant of the semidefinite programming algorithm of Helmberg, Rendl,
+ Vanderbei, and Wolkowicz"""
+
+ homepage = "https://projects.coin-or.org/Csdp"
+ url = "http://www.coin-or.org/download/source/Csdp/Csdp-6.1.1.tgz"
+
+ version('6.1.1', '8388e8988e337bb5c1291068828de801')
+
+ depends_on('atlas')
+
+ def edit(self, spec, prefix):
+ mkdirp(prefix.bin)
+ makefile = FileFilter('Makefile')
+ makefile.filter('/usr/local/bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cub/package.py b/var/spack/repos/builtin/packages/cub/package.py
new file mode 100644
index 0000000000..1ca42f8e91
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cub/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Cub(Package):
+ """CUB is a C++ header library of cooperative threadblock primitives
+ and other utilities for CUDA kernel programming."""
+
+ homepage = "https://nvlabs.github.com/cub"
+ url = "https://github.com/NVlabs/cub/archive/1.6.4.zip"
+
+ version('1.7.1', '028ac43922a4538596338ad5aef0f0c4')
+ version('1.6.4', '924fc12c0efb17264c3ad2d611ed1c51')
+ version('1.4.1', '74a36eb84e5b5f0bf54aa3df39f660b2')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.include)
+ install_tree('cub', join_path(prefix.include, 'cub'))
diff --git a/var/spack/repos/builtin/packages/cube/package.py b/var/spack/repos/builtin/packages/cube/package.py
index 9cea3c40e8..4f1f643bf2 100644
--- a/var/spack/repos/builtin/packages/cube/package.py
+++ b/var/spack/repos/builtin/packages/cube/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Cube(Package):
+class Cube(AutotoolsPackage):
"""Cube the profile viewer for Score-P and Scalasca profiles. It displays a
multi-dimensional performance space consisting of the dimensions:
- performance metric
@@ -36,26 +36,31 @@ class Cube(Package):
homepage = "http://www.scalasca.org/software/cube-4.x/download.html"
url = "http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz"
- version('4.3.4', '50f73060f55311cb12c5b3cb354d59fa',
- url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.4.tar.gz')
- version('4.3.3', '07e109248ed8ffc7bdcce614264a2909',
- url='http://apps.fz-juelich.de/scalasca/releases/cube/4.3/dist/cube-4.3.3.tar.gz')
- version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20',
- url="http://apps.fz-juelich.de/scalasca/releases/cube/4.2/dist/cube-4.2.3.tar.gz")
+ version('4.3.5', 'e5dce986e3c6381ea3a5fcb66c553adc')
+ version('4.3.4', '50f73060f55311cb12c5b3cb354d59fa')
+ version('4.3.3', '07e109248ed8ffc7bdcce614264a2909')
+
+ version('4.2.3', '8f95b9531f5a8f8134f279c2767c9b20')
variant('gui', default=False, description='Build CUBE GUI')
depends_on('zlib')
- depends_on('qt@4.6:', when='+gui')
- def install(self, spec, prefix):
- configure_args = ["--prefix=%s" % prefix,
- "--without-paraver"]
+ depends_on('qt@5:', when='@4.3.0:4.3.999 +gui')
+ depends_on('qt@4.8:', when='@4.2.0:4.2.999 +gui')
+
+ def url_for_version(self, version):
+ return 'http://apps.fz-juelich.de/scalasca/releases/cube/{0}/dist/cube-{1}.tar.gz'.format(version.up_to(2), version)
+
+ def configure_args(self):
+ spec = self.spec
+
+ configure_args = ['--enable-shared']
- # TODO : need to handle cross compiling build
if '+gui' not in spec:
configure_args.append('--without-gui')
- configure(*configure_args)
- make()
- make("install", parallel=False)
+ return configure_args
+
+ def install(self, spec, prefix):
+ make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/cuda-memtest/package.py b/var/spack/repos/builtin/packages/cuda-memtest/package.py
new file mode 100644
index 0000000000..d7a4e2a04a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cuda-memtest/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 CudaMemtest(CMakePackage):
+ """Maintained and updated fork of cuda_memtest.
+
+ original homepage: http://sourceforge.net/projects/cudagpumemtest .
+
+ This software tests GPU memory for hardware errors and soft errors
+ using CUDA or OpenCL.
+ """
+
+ homepage = "https://github.com/ComputationalRadiationPhysics/cuda_memtest"
+ url = "https://github.com/ComputationalRadiationPhysics/cuda_memtest.git"
+
+ version('master', branch='dev',
+ git='https://github.com/ComputationalRadiationPhysics/cuda_memtest.git')
+
+ depends_on('cmake@2.8.5:', type='build')
+ # depends_on('nvml', when='+nvml')
+ depends_on('cuda@5.0:')
diff --git a/var/spack/repos/builtin/packages/cuda/package.py b/var/spack/repos/builtin/packages/cuda/package.py
index ed8518f98f..e54501d8fe 100644
--- a/var/spack/repos/builtin/packages/cuda/package.py
+++ b/var/spack/repos/builtin/packages/cuda/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,7 +24,6 @@
##############################################################################
from spack import *
from glob import glob
-import os
class Cuda(Package):
@@ -32,33 +31,26 @@ class Cuda(Package):
by NVIDIA. It enables dramatic increases in computing performance by
harnessing the power of the graphics processing unit (GPU).
- Note: NVIDIA does not provide a download URL for CUDA so you will
- need to download it yourself. Go to
- https://developer.nvidia.com/cuda-downloads and select your Operating
- System, Architecture, Distribution, and Version. For the Installer
- Type, select runfile and click Download. Spack will search your
- current directory for this file. Alternatively, add this file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html.
-
Note: This package does not currently install the drivers necessary
to run CUDA. These will need to be installed manually. See:
http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux for
- details.
-
- """
+ details."""
homepage = "http://www.nvidia.com/object/cuda_home_new.html"
+ version('9.0.176', '7a00187b2ce5c5e350e68882f42dd507', expand=False,
+ url="https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda_9.0.176_384.81_linux-run")
+ version('8.0.61', '33e1bd980e91af4e55f3ef835c103f9b', expand=False,
+ url="https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda_8.0.61_375.26_linux-run")
version('8.0.44', '6dca912f9b7e2b7569b0074a41713640', expand=False,
- url="file://%s/cuda_8.0.44_linux.run" % os.getcwd())
+ url="https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run")
version('7.5.18', '4b3bcecf0dfc35928a0898793cf3e4c6', expand=False,
- url="file://%s/cuda_7.5.18_linux.run" % os.getcwd())
+ url="http://developer.download.nvidia.com/compute/cuda/7.5/Prod/local_installers/cuda_7.5.18_linux.run")
version('6.5.14', '90b1b8f77313600cc294d9271741f4da', expand=False,
- url="file://%s/cuda_6.5.14_linux_64.run" % os.getcwd())
+ url="http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run")
def install(self, spec, prefix):
- runfile = glob(os.path.join(self.stage.path, 'cuda*.run'))[0]
+ runfile = glob(join_path(self.stage.path, 'cuda*run'))[0]
chmod = which('chmod')
chmod('+x', runfile)
runfile = which(runfile)
@@ -70,8 +62,9 @@ class Cuda(Package):
# for details.
runfile(
- '--silent', # disable interactive prompts
- '--verbose', # create verbose log file
- '--toolkit', # install CUDA Toolkit
+ '--silent', # disable interactive prompts
+ '--verbose', # create verbose log file
+ '--override', # override compiler version checks
+ '--toolkit', # install CUDA Toolkit
'--toolkitpath=%s' % prefix
)
diff --git a/var/spack/repos/builtin/packages/cudnn/package.py b/var/spack/repos/builtin/packages/cudnn/package.py
new file mode 100644
index 0000000000..53af7f9635
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cudnn/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+
+
+class Cudnn(Package):
+ """NVIDIA cuDNN is a GPU-accelerated library of primitives for deep
+ neural networks"""
+
+ homepage = "https://developer.nvidia.com/cudnn"
+
+ version('6.0', 'a08ca487f88774e39eb6b0ef6507451d',
+ url='http://developer.download.nvidia.com/compute/redist/cudnn/v6.0/cudnn-8.0-linux-x64-v6.0.tgz')
+ version('5.1', '406f4ac7f7ee8aa9e41304c143461a69',
+ url='http://developer.download.nvidia.com/compute/redist/cudnn/v5.1/cudnn-8.0-linux-x64-v5.1.tgz')
+
+ depends_on('cuda@8:')
+
+ def install(self, spec, prefix):
+ copy_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/cufflinks/package.py b/var/spack/repos/builtin/packages/cufflinks/package.py
new file mode 100644
index 0000000000..97197258dd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cufflinks/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Cufflinks(Package):
+ """Cufflinks assembles transcripts, estimates their abundances, and tests
+ for differential expression and regulation in RNA-Seq samples."""
+
+ homepage = "http://cole-trapnell-lab.github.io/cufflinks"
+ url = "http://cole-trapnell-lab.github.io/cufflinks/assets/downloads/cufflinks-2.2.1.Linux_x86_64.tar.gz"
+
+ version('2.2.1', '7e693d182dcfda8aeef8523219ea9ea7')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('cuffcompare', prefix.bin)
+ install('cuffdiff', prefix.bin)
+ install('cufflinks', prefix.bin)
+ install('cuffmerge', prefix.bin)
+ install('cuffnorm', prefix.bin)
+ install('cuffquant', prefix.bin)
+ install('gffread', prefix.bin)
+ install('gtf_to_sam', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/cups/package.py b/var/spack/repos/builtin/packages/cups/package.py
new file mode 100644
index 0000000000..b674bd637a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cups/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Cups(AutotoolsPackage):
+ """CUPS is the standards-based, open source printing system developed by
+ Apple Inc. for macOS and other UNIX-like operating systems. CUPS uses the
+ Internet Printing Protocol (IPP) to support printing to local and network
+ printers. This provides the core CUPS libraries, not a complete CUPS
+ install."""
+
+ homepage = "https://www.cups.org/"
+ url = "https://github.com/apple/cups/releases/download/v2.2.3/cups-2.2.3-source.tar.gz"
+
+ version('2.2.3', '006a8156680a516e43c59034e31df8bf')
+
+ depends_on('gnutls')
+
+ def configure_args(self):
+ args = ['--enable-gnutls', '--with-components=core']
+ return args
diff --git a/var/spack/repos/builtin/packages/curl/package.py b/var/spack/repos/builtin/packages/curl/package.py
index a22ac52714..c12e50b71c 100644
--- a/var/spack/repos/builtin/packages/curl/package.py
+++ b/var/spack/repos/builtin/packages/curl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,18 @@
from spack import *
-class Curl(Package):
+class Curl(AutotoolsPackage):
"""cURL is an open source command line tool and library for
transferring data with URL syntax"""
homepage = "http://curl.haxx.se"
- url = "http://curl.haxx.se/download/curl-7.46.0.tar.bz2"
+ # URL must remain http:// so Spack can bootstrap curl
+ url = "http://curl.haxx.se/download/curl-7.54.0.tar.bz2"
+ version('7.56.0', 'e0caf257103e0c77cee5be7e9ac66ca4')
+ version('7.54.0', '89bb7ba87384dfbf4f1a3f953da42458')
+ version('7.53.1', 'fb1f03a142236840c1a77c035fa4c542')
+ version('7.52.1', 'dd014df06ff1d12e173de86873f9f77a')
version('7.50.3', 'bd177fd6deecce00cfa7b5916d831c5e')
version('7.50.2', '6e161179f7af4b9f8b6ea21420132719')
version('7.50.1', '015f6a0217ca6f2c5442ca406476920b')
@@ -43,13 +48,15 @@ class Curl(Package):
version('7.43.0', '11bddbb452a8b766b932f859aaeeed39')
version('7.42.1', '296945012ce647b94083ed427c1877a8')
- depends_on("openssl")
- depends_on("zlib")
+ depends_on('openssl')
+ depends_on('zlib')
+ depends_on('nghttp2')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix,
- '--with-zlib=%s' % spec['zlib'].prefix,
- '--with-ssl=%s' % spec['openssl'].prefix)
+ def configure_args(self):
+ spec = self.spec
- make()
- make("install")
+ return [
+ '--with-zlib={0}'.format(spec['zlib'].prefix),
+ '--with-ssl={0}'.format(spec['openssl'].prefix),
+ '--with-http2={0}'.format(spec['nghttp2'].prefix),
+ ]
diff --git a/var/spack/repos/builtin/packages/cvs/package.py b/var/spack/repos/builtin/packages/cvs/package.py
new file mode 100644
index 0000000000..58943886bf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/cvs/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Cvs(AutotoolsPackage):
+ """CVS a very traditional source control system"""
+ homepage = "http://www.nongnu.org/cvs/"
+ url = "https://ftp.gnu.org/non-gnu/cvs/source/feature/1.12.13/cvs-1.12.13.tar.bz2"
+
+ version('1.12.13', '93a8dacc6ff0e723a130835713235863f1f5ada9')
+
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/czmq/package.py b/var/spack/repos/builtin/packages/czmq/package.py
index ef6374619b..799b577398 100644
--- a/var/spack/repos/builtin/packages/czmq/package.py
+++ b/var/spack/repos/builtin/packages/czmq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,16 +23,15 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class Czmq(Package):
+class Czmq(AutotoolsPackage):
""" A C interface to the ZMQ library """
homepage = "http://czmq.zeromq.org"
- url = "https://github.com/zeromq/czmq/archive/v3.0.2.tar.gz"
+ url = "https://github.com/zeromq/czmq/archive/v4.0.2.tar.gz"
- version('3.0.2', '23e9885f7ee3ce88d99d0425f52e9be1',
- url='https://github.com/zeromq/czmq/archive/v3.0.2.tar.gz')
+ version('4.0.2', 'a65317a3fb8238cf70e3e992e381f9cc')
+ version('3.0.2', '23e9885f7ee3ce88d99d0425f52e9be1')
depends_on('libtool', type='build')
depends_on('automake', type='build')
@@ -40,22 +39,9 @@ class Czmq(Package):
depends_on('pkg-config', type='build')
depends_on('zeromq')
- def install(self, spec, prefix):
- # Work around autogen.sh oddities
- # bash = which("bash")
- # bash("./autogen.sh")
- mkdirp("config")
- autoreconf = which("autoreconf")
- autoreconf("--install", "--verbose", "--force",
- "-I", "config",
- "-I", os.path.join(spec['pkg-config'].prefix,
- "share", "aclocal"),
- "-I", os.path.join(spec['automake'].prefix,
- "share", "aclocal"),
- "-I", os.path.join(spec['libtool'].prefix,
- "share", "aclocal"),
- )
- configure("--prefix=%s" % prefix)
-
- make()
- make("install")
+ def configure_args(self):
+ config_args = []
+ if 'clang' in self.compiler.name:
+ config_args.append("CFLAGS=-Wno-gnu")
+ config_args.append("CXXFLAS=-Wno-gnu")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/dakota/package.py b/var/spack/repos/builtin/packages/dakota/package.py
index e8f7d0889b..b90fb5641a 100644
--- a/var/spack/repos/builtin/packages/dakota/package.py
+++ b/var/spack/repos/builtin/packages/dakota/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Dakota(Package):
+class Dakota(CMakePackage):
"""The Dakota toolkit provides a flexible, extensible interface between
analysis codes and iterative systems analysis methods. Dakota
contains algorithms for:
@@ -46,12 +46,9 @@ class Dakota(Package):
homepage = 'https://dakota.sandia.gov/'
url = 'https://dakota.sandia.gov/sites/default/files/distributions/public/dakota-6.3-public.src.tar.gz'
- _url_str = 'https://dakota.sandia.gov/sites/default/files/distributions/public/dakota-{version}-public.src.tar.gz'
version('6.3', '05a58d209fae604af234c894c3f73f6d')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
variant('shared', default=True,
description='Enables the build of shared libraries')
variant('mpi', default=True, description='Activates MPI support')
@@ -62,31 +59,20 @@ class Dakota(Package):
depends_on('python')
depends_on('boost')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8.9:', type='build')
- def url_for_version(self, version):
- return Dakota._url_str.format(version=version)
+ def cmake_args(self):
+ spec = self.spec
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
-
- options.extend([
- '-DCMAKE_BUILD_TYPE:STRING=%s' % (
- 'Debug' if '+debug' in spec else 'Release'),
+ args = [
'-DBUILD_SHARED_LIBS:BOOL=%s' % (
- 'ON' if '+shared' in spec else 'OFF')])
+ 'ON' if '+shared' in spec else 'OFF'),
+ ]
if '+mpi' in spec:
- options.extend([
+ args.extend([
'-DDAKOTA_HAVE_MPI:BOOL=ON',
- '-DMPI_CXX_COMPILER:STRING=%s' % join_path(
- spec['mpi'].prefix.bin, 'mpicxx')])
-
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
+ '-DMPI_CXX_COMPILER:STRING=%s' % join_path(spec['mpi'].mpicxx),
+ ])
- with working_dir(build_directory, create=True):
- cmake(source_directory, *options)
- make()
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/daligner/package.py b/var/spack/repos/builtin/packages/daligner/package.py
new file mode 100644
index 0000000000..91322b5b3a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/daligner/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Daligner(MakefilePackage):
+ """Daligner: The Dazzler "Overlap" Module."""
+
+ homepage = "https://github.com/thegenemyers/DALIGNER"
+ url = "https://github.com/thegenemyers/DALIGNER/archive/V1.0.tar.gz"
+
+ version('1.0', 'f1b4c396ae062caa4c0e6423ba0725ef')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': True}
+ makefile.filter('cp $(ALL) ~/bin',
+ 'cp $(ALL) {0}'.format(prefix.bin),
+ **kwargs)
+ # He changed the Makefile in commit dae119.
+ # You'll need this instead if/when he cuts a new release
+ # or if you try to build from the tip of master.
+ # makefile.filter('DEST_DIR = .*',
+ # 'DEST_DIR = {0}'.format(prefix.bin))
+ # or pass DEST_DIR in to the make
+
+ @run_before('install')
+ def make_prefix_dot_bin(self):
+ mkdir(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/damageproto/package.py b/var/spack/repos/builtin/packages/damageproto/package.py
index 84e0fac311..06d8815bb4 100644
--- a/var/spack/repos/builtin/packages/damageproto/package.py
+++ b/var/spack/repos/builtin/packages/damageproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Damageproto(Package):
+class Damageproto(AutotoolsPackage):
"""X Damage Extension.
This package contains header files and documentation for the X Damage
@@ -38,8 +38,3 @@ class Damageproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/damselfly/package.py b/var/spack/repos/builtin/packages/damselfly/package.py
index a37728c92b..c98ad5ca7b 100644
--- a/var/spack/repos/builtin/packages/damselfly/package.py
+++ b/var/spack/repos/builtin/packages/damselfly/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Damselfly(Package):
+class Damselfly(CMakePackage):
"""Damselfly is a model-based parallel network simulator."""
homepage = "https://github.com/llnl/damselfly"
url = "https://github.com/llnl/damselfly"
@@ -33,10 +33,4 @@ class Damselfly(Package):
version('1.0', '05cf7e2d8ece4408c0f2abb7ab63fd74c0d62895',
git='https://github.com/llnl/damselfly.git', tag='v1.0')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('-DCMAKE_BUILD_TYPE=release', '..', *std_cmake_args)
- make()
- make('install')
+ depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/darshan-runtime/package.py b/var/spack/repos/builtin/packages/darshan-runtime/package.py
index a031374381..7be03f19c1 100644
--- a/var/spack/repos/builtin/packages/darshan-runtime/package.py
+++ b/var/spack/repos/builtin/packages/darshan-runtime/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,7 @@ class DarshanRuntime(Package):
systems where you intend to instrument MPI applications."""
homepage = "http://www.mcs.anl.gov/research/projects/darshan/"
- url = "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
+ url = "http://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
version('3.1.0', '439d717323e6265b2612ed127886ae52')
version('3.0.0', '732577fe94238936268d74d7d74ebd08')
diff --git a/var/spack/repos/builtin/packages/darshan-util/package.py b/var/spack/repos/builtin/packages/darshan-util/package.py
index 47b0497ca8..35d3ddb97a 100644
--- a/var/spack/repos/builtin/packages/darshan-util/package.py
+++ b/var/spack/repos/builtin/packages/darshan-util/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,7 @@ class DarshanUtil(Package):
log files produced by Darshan (runtime)."""
homepage = "http://www.mcs.anl.gov/research/projects/darshan/"
- url = "ftp://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
+ url = "http://ftp.mcs.anl.gov/pub/darshan/releases/darshan-3.1.0.tar.gz"
version('3.1.0', '439d717323e6265b2612ed127886ae52')
version('3.0.0', '732577fe94238936268d74d7d74ebd08')
diff --git a/var/spack/repos/builtin/packages/dash/package.py b/var/spack/repos/builtin/packages/dash/package.py
new file mode 100644
index 0000000000..9c79be238e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dash/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Dash(AutotoolsPackage):
+ """The Debian Almquist Shell."""
+
+ homepage = "https://git.kernel.org/pub/scm/utils/dash/dash.git"
+ url = "https://git.kernel.org/pub/scm/utils/dash/dash.git/snapshot/dash-0.5.9.1.tar.gz"
+ list_url = homepage
+
+ version('0.5.9.1', '0d800da0b8ddbefa1468978d314b7d09')
+
+ depends_on('libedit', type='link')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ def configure_args(self):
+ # Compile with libedit support
+ # This allows the use of arrow keys at the command line
+ # See https://askubuntu.com/questions/704688
+ return ['--with-libedit']
diff --git a/var/spack/repos/builtin/packages/datamash/package.py b/var/spack/repos/builtin/packages/datamash/package.py
index 85adeca996..b72a1c21bb 100644
--- a/var/spack/repos/builtin/packages/datamash/package.py
+++ b/var/spack/repos/builtin/packages/datamash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Datamash(Package):
+class Datamash(AutotoolsPackage):
"""GNU datamash is a command-line program which performs basic numeric,
textual and statistical operations on input textual data files.
"""
@@ -38,7 +38,4 @@ class Datamash(Package):
version('1.0.6', 'ff26fdef0f343cb695cf1853e14a1a5b')
version('1.0.5', '9a29549dc7feca49fdc5fab696614e11')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make("install")
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/dataspaces/package.py b/var/spack/repos/builtin/packages/dataspaces/package.py
new file mode 100644
index 0000000000..37121c2b47
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dataspaces/package.py
@@ -0,0 +1,91 @@
+##############################################################################
+# 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/spack/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 *
+import six
+
+
+def is_string(x):
+ """validate a string"""
+ try:
+ return isinstance(x, six.string_types)
+ except ValueError:
+ return False
+
+
+class Dataspaces(AutotoolsPackage):
+ """an extreme scale data management framework."""
+
+ homepage = "http://www.dataspaces.org"
+ url = "http://personal.cac.rutgers.edu/TASSL/projects/data/downloads/dataspaces-1.6.2.tar.gz"
+
+ version('develop', git='https://github.com/melrom/dataspaces.git',
+ branch='master')
+ version('1.6.2', '73caa4920b6f2c0c6d6cb87640ff04be')
+
+ variant('dimes',
+ default=False,
+ description='enabled DIMES transport mode')
+ variant('cray-drc',
+ default=False,
+ description='using Cray Dynamic Credentials library')
+ variant('gni-cookie',
+ default='0x5420000',
+ description='Cray UGNI communication token',
+ values=is_string)
+ variant('ptag',
+ default='250',
+ description='Cray UGNI protection tag',
+ values=is_string)
+ variant('mpi',
+ default=True,
+ description='Use MPI for collective communication')
+
+ depends_on('m4', type='build')
+ depends_on('automake', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('libtool', type='build')
+ depends_on('mpi', when='+mpi')
+
+ def autoreconf(spec, prefix, self):
+ bash = which('bash')
+ bash('./autogen.sh')
+
+ def configure_args(self):
+ args = []
+ cookie = self.spec.variants['gni-cookie'].value
+ ptag = self.spec.variants['ptag'].value
+ if self.spec.satisfies('+dimes'):
+ args.append('--enable-dimes')
+ if self.spec.satisfies('+cray-drc'):
+ args.append('--enable-drc')
+ else:
+ args.append('--with-gni-cookie=%s' % cookie)
+ args.append('--with-gni-ptag=%s' % ptag)
+ if self.spec.satisfies('+mpi'):
+ args.append('CC=%s' % self.spec['mpi'].mpicc)
+ args.append('FC=%s' % self.spec['mpi'].mpifc)
+ return args
diff --git a/var/spack/repos/builtin/packages/dbus/package.py b/var/spack/repos/builtin/packages/dbus/package.py
index fdca68f53f..4d55665a4e 100644
--- a/var/spack/repos/builtin/packages/dbus/package.py
+++ b/var/spack/repos/builtin/packages/dbus/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/dealii/package.py b/var/spack/repos/builtin/packages/dealii/package.py
index 66267b2d9a..8f3e5d80ea 100644
--- a/var/spack/repos/builtin/packages/dealii/package.py
+++ b/var/spack/repos/builtin/packages/dealii/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,27 +32,36 @@ class Dealii(CMakePackage):
homepage = "https://www.dealii.org"
url = "https://github.com/dealii/dealii/releases/download/v8.4.1/dealii-8.4.1.tar.gz"
+ maintainers = ['davydden', 'jppelteret']
+
# Don't add RPATHs to this package for the full build DAG.
# only add for immediate deps.
transitive_rpaths = False
+ version('8.5.1', '39b9ebd6ab083d63cfc9044319aaa2ee')
+ version('8.5.0', 'ef999cc310b007559a6343bf5b1759bc')
version('8.4.2', '84c6bd3f250d3e0681b645d24cb987a7')
version('8.4.1', 'efbaf16f9ad59cfccad62302f36c3c1d')
version('8.4.0', 'ac5dbf676096ff61e092ce98c80c2b00')
version('8.3.0', 'fc6cdcb16309ef4bea338a4f014de6fa')
version('8.2.1', '71c728dbec14f371297cd405776ccf08')
version('8.1.0', 'aa8fadc2ce5eb674f44f997461bf668d')
- version('develop', git='https://github.com/dealii/dealii.git')
+ version('develop', git='https://github.com/dealii/dealii.git', branch='master')
variant('mpi', default=True, description='Compile with MPI')
+ variant('assimp', default=False,
+ description='Compile with Assimp')
variant('arpack', default=True,
description='Compile with Arpack and PArpack (only with MPI)')
+ variant('adol-c', default=False,
+ description='Compile with Adol-c')
variant('doc', default=False,
description='Compile with documentation')
variant('gsl', default=True, description='Compile with GSL')
variant('hdf5', default=True,
description='Compile with HDF5 (only with MPI)')
variant('metis', default=True, description='Compile with Metis')
+ variant('nanoflann', default=False, description='Compile with Nanoflann')
variant('netcdf', default=True,
description='Compile with Netcdf (only with MPI)')
variant('oce', default=True, description='Compile with OCE')
@@ -60,6 +69,8 @@ class Dealii(CMakePackage):
description='Compile with P4est (only with MPI)')
variant('petsc', default=True,
description='Compile with Petsc (only with MPI)')
+ variant('sundials', default=False,
+ description='Compile with Sundials')
variant('slepc', default=True,
description='Compile with Slepc (only with Petsc and MPI)')
variant('trilinos', default=True,
@@ -68,6 +79,13 @@ class Dealii(CMakePackage):
description='Compile with Python bindings')
variant('int64', default=False,
description='Compile with 64 bit indices support')
+ variant('optflags', default=False,
+ description='Compile using additional optimization flags')
+ variant('build_type', default='DebugRelease',
+ description='The build type to build',
+ values=('Debug', 'Release', 'DebugRelease'))
+ variant('cuda', default=False,
+ description='Build with CUDA')
# required dependencies, light version
depends_on("blas")
@@ -75,21 +93,26 @@ class Dealii(CMakePackage):
# https://github.com/dealii/dealii/issues/1591
# Require at least 1.59
# +python won't affect @:8.4.2
- depends_on("boost@1.59.0:+thread+system+serialization+iostreams",
+ # FIXME: once concretizer can unite unconditional and
+ # conditional dependencies, simplify to:
+ # depends_on("boost@1.59.0+thread+system+serialization+iostreams")
+ # depends_on("boost+mpi", when='+mpi')
+ # depends_on("boost+python", when='+python')
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams",
when='@:8.4.2~mpi')
- depends_on("boost@1.59.0:+thread+system+serialization+iostreams+mpi",
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams+mpi",
when='@:8.4.2+mpi')
# since @8.5.0: (and @develop) python bindings are introduced:
- depends_on("boost@1.59.0:+thread+system+serialization+iostreams",
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams",
when='@8.5.0:~mpi~python')
- depends_on("boost@1.59.0:+thread+system+serialization+iostreams+mpi",
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams+mpi",
when='@8.5.0:+mpi~python')
- depends_on("boost@1.59.0:+thread+system+serialization+iostreams+python",
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams+python",
when='@8.5.0:~mpi+python')
- depends_on(
- "boost@1.59.0:+thread+system+serialization+iostreams+mpi+python",
- when='@8.5.0:+mpi+python')
- depends_on("bzip2")
+ depends_on("boost@1.59.0:1.63,1.66:+thread+system+serialization+iostreams+mpi+python",
+ when='@8.5.0:+mpi+python')
+ # bzip2 is not needed since 9.0
+ depends_on("bzip2", when='@:8.99')
depends_on("lapack")
depends_on("muparser")
depends_on("suite-sparse")
@@ -98,37 +121,60 @@ class Dealii(CMakePackage):
# optional dependencies
depends_on("mpi", when="+mpi")
+ depends_on("adol-c@2.6.4:", when='@9.0:+adol-c')
depends_on("arpack-ng+mpi", when='+arpack+mpi')
+ depends_on("assimp", when='@9.0:+assimp')
depends_on("doxygen+graphviz", when='+doc')
depends_on("graphviz", when='+doc')
depends_on("gsl", when='@8.5.0:+gsl')
depends_on("hdf5+mpi", when='+hdf5+mpi')
- depends_on("metis@5:", when='+metis')
+ depends_on("cuda@8:", when='+cuda')
+ depends_on("cmake@3.9:", when='+cuda')
+ # FIXME: concretizer bug. The two lines mimic what comes from PETSc
+ # but we should not need it
+ depends_on("metis@5:+int64+real64", when='+metis+int64')
+ depends_on("metis@5:~int64+real64", when='+metis~int64')
+ depends_on("nanoflann", when="@9.0:+nanoflann")
depends_on("netcdf+mpi", when="+netcdf+mpi")
depends_on("netcdf-cxx", when='+netcdf+mpi')
depends_on("oce", when='+oce')
depends_on("p4est", when='+p4est+mpi')
- depends_on("petsc+mpi", when='@8.4.2:+petsc+mpi~int64')
+ depends_on("petsc+mpi~int64", when='+petsc+mpi~int64')
+ depends_on("petsc+mpi+int64", when='+petsc+mpi+int64')
+ depends_on("petsc@:3.6.4", when='@:8.4.1+petsc+mpi')
depends_on('python', when='@8.5.0:+python')
- depends_on("slepc", when='@8.4.2:+slepc+petsc+mpi~int64')
- depends_on("petsc@:3.6.4+mpi", when='@:8.4.1+petsc+mpi~int64')
- depends_on("slepc@:3.6.3", when='@:8.4.1+slepc+petsc+mpi~int64')
- depends_on("trilinos", when='+trilinos+mpi')
+ depends_on("slepc", when='+slepc+petsc+mpi')
+ depends_on("slepc@:3.6.3", when='@:8.4.1+slepc+petsc+mpi')
+ depends_on("slepc~arpack", when='+slepc+petsc+mpi+int64')
+ depends_on("sundials~pthread", when='@9.0:+sundials')
+ depends_on("trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado+teuchos", when='+trilinos+mpi~int64')
+ depends_on("trilinos+amesos+aztec+epetra+ifpack+ml+muelu+sacado+teuchos~hypre", when="+trilinos+mpi+int64")
- def build_type(self):
- # CMAKE_BUILD_TYPE should be DebugRelease | Debug | Release
- return 'DebugRelease'
+ # check that the combination of variants makes sense
+ conflicts('+assimp', when='@:8.5.1')
+ conflicts('+nanoflann', when='@:8.5.1')
+ conflicts('+sundials', when='@:8.5.1')
+ conflicts('+adol-c', when='@:8.5.1')
+ conflicts('+gsl', when='@:8.4.2')
+ conflicts('+python', when='@:8.4.2')
+ conflicts('+cuda', when='%gcc@6:')
+ for p in ['+arpack', '+hdf5', '+netcdf', '+p4est', '+petsc',
+ '+slepc', '+trilinos']:
+ conflicts(p, when='~mpi')
def cmake_args(self):
spec = self.spec
options = []
+ # release flags
+ cxx_flags_release = []
+ # debug and release flags
+ cxx_flags = []
- lapack_blas = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
options.extend([
'-DDEAL_II_COMPONENT_EXAMPLES=ON',
'-DDEAL_II_WITH_THREADS:BOOL=ON',
'-DBOOST_DIR=%s' % spec['boost'].prefix,
- '-DBZIP2_DIR=%s' % spec['bzip2'].prefix,
# CMake's FindBlas/Lapack may pickup system's blas/lapack instead
# of Spack's. Be more specific to avoid this.
# Note that both lapack and blas are provided in -DLAPACK_XYZ.
@@ -139,9 +185,31 @@ class Dealii(CMakePackage):
'-DMUPARSER_DIR=%s' % spec['muparser'].prefix,
'-DUMFPACK_DIR=%s' % spec['suite-sparse'].prefix,
'-DTBB_DIR=%s' % spec['tbb'].prefix,
- '-DZLIB_DIR=%s' % spec['zlib'].prefix
+ '-DZLIB_DIR=%s' % spec['zlib'].prefix,
+ '-DDEAL_II_ALLOW_BUNDLED=OFF'
])
+ if spec.satisfies('@:8.99'):
+ options.extend([
+ # Cmake may still pick up system's bzip2, fix this:
+ '-DBZIP2_FOUND=true',
+ '-DBZIP2_INCLUDE_DIRS=%s' % spec['bzip2'].prefix.include,
+ '-DBZIP2_LIBRARIES=%s' % spec['bzip2'].libs.joined(';')
+ ])
+
+ # Set recommended flags for maximum (matrix-free) performance, see
+ # https://groups.google.com/forum/?fromgroups#!topic/dealii/3Yjy8CBIrgU
+ if spec.satisfies('%gcc'):
+ cxx_flags_release.extend(['-O3'])
+ cxx_flags.extend(['-march=native'])
+ elif spec.satisfies('%intel'):
+ cxx_flags_release.extend(['-O3'])
+ cxx_flags.extend(['-march=native'])
+ elif spec.satisfies('%clang'):
+ cxx_flags_release.extend(['-O3', '-ffp-contract=fast'])
+ cxx_flags.extend(['-march=native'])
+
+ # Python bindings
if spec.satisfies('@8.5.0:'):
options.extend([
'-DDEAL_II_COMPONENT_PYTHON_BINDINGS=%s' %
@@ -158,6 +226,18 @@ class Dealii(CMakePackage):
'-DDEAL_II_DOCHTML_RELDIR=share/deal.II/doc'
])
+ # CUDA
+ # FIXME -DDEAL_II_CUDA_FLAGS="-arch=sm_60"
+ if '+cuda' in spec:
+ options.extend([
+ '-DDEAL_II_WITH_CUDA=ON',
+ '-DDEAL_II_WITH_CXX14=OFF'
+ ])
+ else:
+ options.extend([
+ '-DDEAL_II_WITH_CUDA=OFF',
+ ])
+
# MPI
if '+mpi' in spec:
options.extend([
@@ -174,7 +254,8 @@ class Dealii(CMakePackage):
# Optional dependencies for which library names are the same as CMake
# variables:
for library in (
- 'gsl', 'hdf5', 'p4est', 'petsc', 'slepc', 'trilinos', 'metis'):
+ 'gsl', 'hdf5', 'p4est', 'petsc', 'slepc', 'trilinos', 'metis',
+ 'sundials', 'nanoflann'):
if library in spec:
options.extend([
'-D%s_DIR=%s' % (library.upper(), spec[library].prefix),
@@ -185,6 +266,17 @@ class Dealii(CMakePackage):
'-DDEAL_II_WITH_%s:BOOL=OFF' % library.upper()
])
+ # adol-c
+ if '+adol-c' in spec:
+ options.extend([
+ '-DADOLC_DIR=%s' % spec['adol-c'].prefix,
+ '-DDEAL_II_WITH_ADOLC=ON'
+ ])
+ else:
+ options.extend([
+ '-DDEAL_II_WITH_ADOLC=OFF'
+ ])
+
# doxygen
options.extend([
'-DDEAL_II_COMPONENT_DOCUMENTATION=%s' %
@@ -192,7 +284,7 @@ class Dealii(CMakePackage):
])
# arpack
- if '+arpack' in spec:
+ if '+arpack' in spec and '+mpi' in spec:
options.extend([
'-DARPACK_DIR=%s' % spec['arpack-ng'].prefix,
'-DDEAL_II_WITH_ARPACK=ON',
@@ -203,8 +295,19 @@ class Dealii(CMakePackage):
'-DDEAL_II_WITH_ARPACK=OFF'
])
+ # Assimp
+ if '+assimp' in spec:
+ options.extend([
+ '-DDEAL_II_WITH_ASSIMP=ON',
+ '-DASSIMP_DIR=%s' % spec['assimp'].prefix
+ ])
+ else:
+ options.extend([
+ '-DDEAL_II_WITH_ASSIMP=OFF'
+ ])
+
# since Netcdf is spread among two, need to do it by hand:
- if '+netcdf' in spec:
+ if '+netcdf' in spec and '+mpi' in spec:
# take care of lib64 vs lib installed lib locations:
if os.path.isdir(spec['netcdf-cxx'].prefix.lib):
netcdfcxx_lib_dir = spec['netcdf-cxx'].prefix.lib
@@ -247,7 +350,16 @@ class Dealii(CMakePackage):
'-DDEAL_II_WITH_64BIT_INDICES=%s' % ('+int64' in spec)
])
+ # collect CXX flags:
+ if len(cxx_flags_release) > 0 and '+optflags' in spec:
+ options.extend([
+ '-DCMAKE_CXX_FLAGS_RELEASE:STRING=%s' % (
+ ' '.join(cxx_flags_release)),
+ '-DCMAKE_CXX_FLAGS:STRING=%s' % (
+ ' '.join(cxx_flags))
+ ])
+
return options
- def setup_environment(self, spack_env, env):
- env.set('DEAL_II_DIR', self.prefix)
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('DEAL_II_DIR', self.prefix)
diff --git a/var/spack/repos/builtin/packages/dejagnu/package.py b/var/spack/repos/builtin/packages/dejagnu/package.py
new file mode 100644
index 0000000000..7b083d00b4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dejagnu/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Dejagnu(AutotoolsPackage):
+ """DejaGnu is a framework for testing other programs. Its purpose
+ is to provide a single front end for all tests."""
+
+ homepage = "https://www.gnu.org/software/dejagnu/"
+ url = "http://mirror.team-cymru.org/gnu/dejagnu/dejagnu-1.6.tar.gz"
+
+ version('1.6', '1fdc2eb0d592c4f89d82d24dfdf02f0b')
+ version('1.4.4', '053f18fd5d00873de365413cab17a666')
+
+ depends_on('expect')
+ depends_on('tcl@8.5:')
+
+ # DejaGnu 1.4.4 cannot be built in parallel
+ # `make check` also fails but this can be ignored
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/delly2/package.py b/var/spack/repos/builtin/packages/delly2/package.py
new file mode 100644
index 0000000000..e922d2c566
--- /dev/null
+++ b/var/spack/repos/builtin/packages/delly2/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Delly2(MakefilePackage):
+ """Delly2 is an integrated structural variant prediction method that can
+ discover, genotype and visualize deletions, tandem duplications,
+ inversions and translocations at single-nucleotide resolution in
+ short-read massively parallel sequencing data.."""
+
+ homepage = "https://github.com/dellytools/delly"
+ url = "https://github.com/dellytools/delly"
+
+ version('2017-08-03', commit='e32a9cd55c7e3df5a6ae4a91f31a0deb354529fc',
+ git='https://github.com/dellytools/delly.git')
+
+ depends_on('htslib')
+ depends_on('boost')
+ depends_on('bcftools')
+
+ def edit(self, spec, prefix):
+ # Only want to build delly source, not submodules. Build fails
+ # using provided submodules, succeeds with existing spack recipes.
+ makefile = FileFilter('Makefile')
+ makefile.filter('HTSLIBSOURCES =', '#HTSLIBSOURCES')
+ makefile.filter('BOOSTSOURCES =', '#BOOSTSOURCES')
+ makefile.filter('SEQTK_ROOT ?=', '#SEQTK_ROOT')
+ makefile.filter('BOOST_ROOT ?=', '#BOOST_ROOT')
+ makefile.filter('cd src', '# cd src')
+ makefile.filter('.htslib ', '')
+ makefile.filter('.bcftools ', '')
+ makefile.filter('.boost ', '')
+ makefile.filter('.htslib:', '# .htslib:')
+ makefile.filter('.bcftools:', '# .bcftools:')
+ makefile.filter('.boost:', '# .boost:')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('src'):
+ install('delly', prefix.bin)
+ install('dpe', prefix.bin)
+ install('cov', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/dia/package.py b/var/spack/repos/builtin/packages/dia/package.py
index 94cd75656d..59abc88b15 100644
--- a/var/spack/repos/builtin/packages/dia/package.py
+++ b/var/spack/repos/builtin/packages/dia/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,18 +33,24 @@ class Dia(Package):
version('0.97.3', '0e744a0f6a6c4cb6a089e4d955392c3c')
depends_on('intltool', type='build')
- depends_on('gtkplus@2.6.0:')
- depends_on('cairo')
- # depends_on('libart') # optional dependency, not yet supported by spack.
- depends_on('libpng')
+ depends_on('gtkplus@2.6.0:+X')
depends_on('libxslt')
depends_on('python')
depends_on('swig')
- # depends_on('py-gtk') # optional dependency, not yet supported by spack.
+ depends_on('libsm')
+ depends_on('libuuid')
+ depends_on('libxinerama')
+ depends_on('libxrender')
+ depends_on('libxml2')
+ depends_on('freetype')
+
+ # TODO: Optional dependencies, not yet supported by Spack
+ # depends_on('libart')
+ # depends_on('py-pygtk', type=('build', 'run'))
def url_for_version(self, version):
"""Handle Dia's version-based custom URLs."""
- return 'https://ftp.gnome.org/pub/gnome/source/dia/%s/dia-%s.tar.xz' % (version.up_to(2), version)
+ return 'https://ftp.gnome.org/pub/gnome/sources/dia/%s/dia-%s.tar.xz' % (version.up_to(2), version)
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/dialign-tx/package.py b/var/spack/repos/builtin/packages/dialign-tx/package.py
new file mode 100644
index 0000000000..009793216f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dialign-tx/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 DialignTx(MakefilePackage):
+ """DIALIGN-TX: greedy and progressive approaches for segment-based
+ multiple sequence alignment"""
+
+ homepage = "http://dialign-tx.gobics.de/"
+ url = "http://dialign-tx.gobics.de/DIALIGN-TX_1.0.2.tar.gz"
+
+ version('1.0.2', '8ccfb1d91136157324d1e513f184ca29')
+
+ build_directory = 'source'
+
+ conflicts('%gcc@6:')
+
+ def edit(self, spec, prefix):
+ with working_dir(self.build_directory):
+ makefile = FileFilter('Makefile')
+ makefile.filter(' -march=i686 ', ' ')
+ makefile.filter('CC=gcc', 'CC=%s' % spack_cc)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir(self.build_directory):
+ install('dialign-tx', prefix.bin)
+ # t-coffee recognizes as dialign-t
+ install('dialign-tx', join_path(prefix.bin, 'dialign-t'))
diff --git a/var/spack/repos/builtin/packages/direnv/package.py b/var/spack/repos/builtin/packages/direnv/package.py
new file mode 100644
index 0000000000..83ec1db935
--- /dev/null
+++ b/var/spack/repos/builtin/packages/direnv/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Direnv(Package):
+ """direnv is an environment switcher for the shell."""
+
+ homepage = "https://direnv.net/"
+ url = "https://github.com/direnv/direnv/archive/v2.11.3.tar.gz"
+
+ version('2.11.3', '5b9728e2dabed232b4932849647fd6e5')
+
+ depends_on('go', type='build')
+
+ def install(self, spec, prefix):
+ make('install', "DESTDIR=%s" % prefix)
diff --git a/var/spack/repos/builtin/packages/discovar/package.py b/var/spack/repos/builtin/packages/discovar/package.py
new file mode 100644
index 0000000000..e0521d3e95
--- /dev/null
+++ b/var/spack/repos/builtin/packages/discovar/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Discovar(AutotoolsPackage):
+ """DISCOVAR is a variant caller and small genome assembler."""
+
+ homepage = "https://software.broadinstitute.org/software/discovar/blog/"
+ url = "ftp://ftp.broadinstitute.org/pub/crd/Discovar/latest_source_code/discovar-52488.tar.gz"
+
+ version('52488', 'e72a0b9363e25c99d8e8729c0be98364')
+
+ conflicts('%gcc@6:')
diff --git a/var/spack/repos/builtin/packages/dlpack/package.py b/var/spack/repos/builtin/packages/dlpack/package.py
new file mode 100644
index 0000000000..69dd99b5a0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dlpack/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 Dlpack(Package):
+ """DLPack is an RFC for common tensor and operator guidelines
+ in deep learning systems."""
+
+ homepage = "https://github.com/sjtuhpcc/dlpack"
+
+ version('master', git='https://github.com/dmlc/dlpack.git', branch='master')
+
+ def install(self, spec, prefix):
+ install_tree('include', prefix.include)
diff --git a/var/spack/repos/builtin/packages/dmlc-core/cmake.patch b/var/spack/repos/builtin/packages/dmlc-core/cmake.patch
new file mode 100644
index 0000000000..4bb41eee24
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dmlc-core/cmake.patch
@@ -0,0 +1,21 @@
+From 82f2bde92e1f1bf35bdf7b93cacb0aa72d9f096b Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Fri, 18 Aug 2017 23:16:05 +0800
+Subject: [PATCH] Patch CMakeLists.txt to install make/ dir into destination.
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f038dcb..ed01b82 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -134,6 +134,7 @@ endif()
+ install(TARGETS dmlc ARCHIVE DESTINATION lib LIBRARY DESTINATION lib)
+ install(DIRECTORY include DESTINATION .)
+ install(DIRECTORY doc DESTINATION .)
++install(DIRECTORY make DESTINATION .)
+
+ # ---[ Linter target
+ if(MSVC)
diff --git a/var/spack/repos/builtin/packages/dmlc-core/package.py b/var/spack/repos/builtin/packages/dmlc-core/package.py
new file mode 100644
index 0000000000..f463acb836
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dmlc-core/package.py
@@ -0,0 +1,57 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class DmlcCore(CMakePackage):
+ """DMLC-Core is the backbone library to support all DMLC projects,
+ offers the bricks to build efficient and scalable
+ distributed machine learning libraries."""
+
+ homepage = "https://github.com/dmlc/dmlc-core"
+ url = "https://github.com/dmlc/dmlc-core.git"
+
+ version('master', git='https://github.com/dmlc/dmlc-core.git')
+ version('20170508', git='https://github.com/dmlc/dmlc-core.git',
+ commit='a6c5701219e635fea808d264aefc5b03c3aec314')
+
+ variant('openmp', default=False, description='Enable OpenMP support')
+
+ patch('cmake.patch')
+
+ def patch(self):
+ filter_file('export CC = gcc', '', 'make/config.mk', string=True)
+ filter_file('export CXX = g++', '', 'make/config.mk', string=True)
+ filter_file('export MPICXX = mpicxx', '',
+ 'make/config.mk', string=True)
+ filter_file(r'^USE_OPENMP\s*=.*',
+ 'USE_OPENMP=%s' % ('1' if '+openmp' in self.spec else '0'),
+ 'make/config.mk')
+
+ def cmake_args(self):
+ spec = self.spec
+ return [
+ '-DUSE_OPENMP=%s' % ('ON' if '+openmp' in spec else 'OFF'),
+ ]
diff --git a/var/spack/repos/builtin/packages/dmxproto/package.py b/var/spack/repos/builtin/packages/dmxproto/package.py
index 34213bba5f..b668dc9b58 100644
--- a/var/spack/repos/builtin/packages/dmxproto/package.py
+++ b/var/spack/repos/builtin/packages/dmxproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Dmxproto(Package):
+class Dmxproto(AutotoolsPackage):
"""Distributed Multihead X (DMX) Extension.
This extension defines a protocol for clients to access a front-end proxy
@@ -39,8 +39,3 @@ class Dmxproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/docbook-xml/package.py b/var/spack/repos/builtin/packages/docbook-xml/package.py
index f1e1a08c8f..c91473a669 100644
--- a/var/spack/repos/builtin/packages/docbook-xml/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,10 +42,6 @@ class DocbookXml(Package):
else:
install(src, dst)
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
- catalog = os.path.join(self.spec.prefix, 'catalog.xml')
- spack_env.set('XML_CATALOG_FILES', catalog, separator=' ')
-
def setup_environment(self, spack_env, run_env):
catalog = os.path.join(self.spec.prefix, 'catalog.xml')
run_env.set('XML_CATALOG_FILES', catalog, separator=' ')
diff --git a/var/spack/repos/builtin/packages/docbook-xsl/package.py b/var/spack/repos/builtin/packages/docbook-xsl/package.py
index 5de9cecdbb..1f3d774b82 100644
--- a/var/spack/repos/builtin/packages/docbook-xsl/package.py
+++ b/var/spack/repos/builtin/packages/docbook-xsl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -44,10 +44,6 @@ class DocbookXsl(Package):
else:
install(src, dst)
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
- catalog = os.path.join(self.spec.prefix, 'catalog.xml')
- spack_env.set('XML_CATALOG_FILES', catalog, separator=' ')
-
def setup_environment(self, spack_env, run_env):
catalog = os.path.join(self.spec.prefix, 'catalog.xml')
run_env.set('XML_CATALOG_FILES', catalog, separator=' ')
diff --git a/var/spack/repos/builtin/packages/dos2unix/package.py b/var/spack/repos/builtin/packages/dos2unix/package.py
new file mode 100644
index 0000000000..2457f9b9e6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/dos2unix/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Dos2unix(MakefilePackage):
+ """DOS/Mac to Unix and vice versa text file format converter."""
+
+ homepage = "https://waterlan.home.xs4all.nl/dos2unix.html"
+ url = "https://waterlan.home.xs4all.nl/dos2unix/dos2unix-7.3.4.tar.gz"
+
+ version('7.3.4', '04428e77e2ead8a92c1492ba8977f1d1')
+
+ def install(self, spec, prefix):
+ make('prefix={0}'.format(prefix), 'install')
diff --git a/var/spack/repos/builtin/packages/double-conversion/package.py b/var/spack/repos/builtin/packages/double-conversion/package.py
new file mode 100644
index 0000000000..e4f4803a24
--- /dev/null
+++ b/var/spack/repos/builtin/packages/double-conversion/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 DoubleConversion(CMakePackage):
+ """This project (double-conversion) provides binary-decimal and decimal-binary
+ routines for IEEE doubles.
+
+ The library consists of efficient conversion routines that have been
+ extracted from the V8 JavaScript engine. The code has been refactored
+ and improved so that it can be used more easily in other projects.
+
+ There is extensive documentation in src/double-conversion.h. Other examples
+ can be found in test/cctest/test-conversions.cc.
+ """
+
+ homepage = "https://github.com/google/double-conversion"
+ url = "https://github.com/google/double-conversion/archive/v2.0.1.zip"
+
+ version('2.0.1', '5be77f780841af528e92986d46620b1e')
+ version('2.0.0', '045f7927246c368b57dcdb844ec61211')
+ version('1.1.5', 'ddf782373e2630c07b2691c31cee0b24')
+ version('1.1.4', '5df72704406d93cd54c73d73f02e2744')
+ version('1.1.3', 'b312152c8c66c80449d5e0325b94502e')
+
+ def cmake_args(self):
+ return ['-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true']
diff --git a/var/spack/repos/builtin/packages/doxygen/package.py b/var/spack/repos/builtin/packages/doxygen/package.py
index 560e6aa95f..61cfdf8a89 100644
--- a/var/spack/repos/builtin/packages/doxygen/package.py
+++ b/var/spack/repos/builtin/packages/doxygen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Doxygen(Package):
+class Doxygen(CMakePackage):
"""Doxygen is the de facto standard tool for generating documentation
from annotated C++ sources, but it also supports other popular programming
languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba,
@@ -49,9 +49,3 @@ class Doxygen(Package):
# optional dependencies
depends_on("graphviz", when="+graphviz", type='run')
-
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/dri2proto/package.py b/var/spack/repos/builtin/packages/dri2proto/package.py
index d05e7ea231..00c4cc812d 100644
--- a/var/spack/repos/builtin/packages/dri2proto/package.py
+++ b/var/spack/repos/builtin/packages/dri2proto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Dri2proto(Package):
+class Dri2proto(AutotoolsPackage):
"""Direct Rendering Infrastructure 2 Extension.
This extension defines a protocol to securely allow user applications to
@@ -39,8 +39,3 @@ class Dri2proto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/dri3proto/package.py b/var/spack/repos/builtin/packages/dri3proto/package.py
index cd2594d5da..5f4604789d 100644
--- a/var/spack/repos/builtin/packages/dri3proto/package.py
+++ b/var/spack/repos/builtin/packages/dri3proto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Dri3proto(Package):
+class Dri3proto(AutotoolsPackage):
"""Direct Rendering Infrastructure 3 Extension.
This extension defines a protocol to securely allow user applications to
@@ -39,8 +39,3 @@ class Dri3proto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/dtcmp/package.py b/var/spack/repos/builtin/packages/dtcmp/package.py
index e59e246d47..c64fa540fa 100644
--- a/var/spack/repos/builtin/packages/dtcmp/package.py
+++ b/var/spack/repos/builtin/packages/dtcmp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,6 +32,7 @@ class Dtcmp(Package):
homepage = "https://github.com/hpc/dtcmp"
url = "https://github.com/hpc/dtcmp/releases/download/v1.0.3/dtcmp-1.0.3.tar.gz"
+ version('1.1.0', 'af5c73f7d3a9afd90a22d0df85471d2f')
version('1.0.3', 'cdd8ccf71e8ff67de2558594a7fcd317')
depends_on('mpi')
diff --git a/var/spack/repos/builtin/packages/dyninst/package.py b/var/spack/repos/builtin/packages/dyninst/package.py
index 420ab0fc68..8a18b99940 100644
--- a/var/spack/repos/builtin/packages/dyninst/package.py
+++ b/var/spack/repos/builtin/packages/dyninst/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,13 +33,8 @@ class Dyninst(Package):
url = "https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz"
list_url = "http://www.dyninst.org/downloads/dyninst-8.x"
- # version 9.2.1b was the latest git commit when trying to port to a
- # ppc64le system to get fixes in computeAddrWidth independent of
- # endianness. This version can be removed if the next release includes
- # this change. The actual commit was
- # b8596ad4023ec40ac07e669ff8ea3ec06e262703
- version('9.2.1b', git='https://github.com/dyninst/dyninst.git',
- commit='859cb778e20b619443c943c96dd1851da763142b')
+ version('9.3.2', 'a2bf03b6d1d424853e80d39b13e9c229')
+ version('9.3.0', 'edde7847dc673ca69bd59412af572450')
version('9.2.0', 'ad023f85e8e57837ed9de073b59d6bab',
url="https://github.com/dyninst/dyninst/archive/v9.2.0.tar.gz")
version('9.1.0', '5c64b77521457199db44bec82e4988ac',
@@ -54,7 +49,8 @@ class Dyninst(Package):
variant('stat_dysect', default=False,
description="patch for STAT's DySectAPI")
- depends_on("libelf")
+ depends_on("elf@0", type='link', when='@:9.2.99')
+ depends_on("elf@1", type='link', when='@9.3.0:')
depends_on("libdwarf")
depends_on("boost@1.42:")
depends_on('cmake', type='build')
@@ -70,7 +66,7 @@ class Dyninst(Package):
make("install")
return
- libelf = spec['libelf'].prefix
+ libelf = spec['elf'].prefix
libdwarf = spec['libdwarf'].prefix
with working_dir('spack-build', create=True):
diff --git a/var/spack/repos/builtin/packages/ea-utils/package.py b/var/spack/repos/builtin/packages/ea-utils/package.py
new file mode 100644
index 0000000000..181248a401
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ea-utils/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 EaUtils(MakefilePackage):
+ """Command-line tools for processing biological sequencing data. Barcode
+ demultiplexing, adapter trimming, etc. Primarily written to support an
+ Illumina based pipeline - but should work with any FASTQs."""
+
+ homepage = "http://expressionanalysis.github.io/ea-utils/"
+ url = "https://github.com/ExpressionAnalysis/ea-utils/archive/1.04.807.tar.gz"
+
+ version('1.04.807', '5972b9f712920603b7527f46c0063a09')
+
+ depends_on('subversion')
+ depends_on('zlib')
+ depends_on('gsl')
+ depends_on('bamtools')
+ # perl module required for make check, which is included in the default
+ # target
+ depends_on('perl', type='build')
+
+ build_directory = 'clipper'
+
+ def edit(self, spec, prefix):
+ with working_dir('clipper'):
+ makefile = FileFilter('Makefile')
+ makefile.filter('/usr', prefix)
diff --git a/var/spack/repos/builtin/packages/easybuild/package.py b/var/spack/repos/builtin/packages/easybuild/package.py
new file mode 100644
index 0000000000..4fa7eb99fb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/easybuild/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# This file is part of Spack.
+# Created by Kenneth Hoste, kenneth.hoste@gmail.com
+#
+# For details, see https://github.com/spack/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 Easybuild(PythonPackage):
+ """EasyBuild is a software build and installation framework
+ for (scientific) software on HPC systems.
+ """
+
+ homepage = 'http://hpcugent.github.io/easybuild/'
+ url = 'https://pypi.io/packages/source/e/easybuild/easybuild-3.1.2.tar.gz'
+
+ version('3.1.2', 'c2d901c2a71f51b24890fa69c3a46383')
+
+ depends_on('py-easybuild-framework@3.1.2', when='@3.1.2', type='run')
+ depends_on('py-easybuild-easyblocks@3.1.2', when='@3.1.2', type='run')
+ depends_on('py-easybuild-easyconfigs@3.1.2', when='@3.1.2', type='run')
diff --git a/var/spack/repos/builtin/packages/ebms/package.py b/var/spack/repos/builtin/packages/ebms/package.py
new file mode 100644
index 0000000000..252be1bd3d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ebms/package.py
@@ -0,0 +1,69 @@
+#############################################################################
+# 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/spack/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 *
+
+
+class Ebms(MakefilePackage):
+ """This is a miniapp for the Energy Banding Monte Carlo (EBMC)
+ neutron transportation simulation code. It is adapted from a
+ similar miniapp provided by Andrew Siegel, whose algorithm is
+ described in [1], where only one process in a compute node
+ is used, and the compute nodes are divided into memory nodes
+ and tracking nodes. Memory nodes do not participate in particle
+ tracking. Obviously, there is a lot of resource waste in this design.
+ """
+
+ homepage = "https://github.com/ANL-CESAR/EBMS"
+ url = "https://github.com/ANL-CESAR/EBMS/archive/master.tar.gz"
+
+ version('develop', git='https://github.com/ANL-CESAR/EBMS.git')
+
+ variant('mpi', default=True, description='Build with MPI support')
+
+ depends_on('mpi', when='+mpi')
+
+ tags = ['proxy-app']
+
+ @property
+ def build_targets(self):
+
+ targets = []
+
+ cflags = '-g -O3 -std=gnu99'
+
+ if '+mpi' in self.spec:
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+
+ targets.append('CFLAGS={0}'.format(cflags))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('ebmc-iallgather', prefix.bin)
+ install('ebmc-rget', prefix.bin)
+ install_tree('run', join_path(prefix, 'run'))
+ install_tree('inputs', join_path(prefix, 'inputs'))
diff --git a/var/spack/repos/builtin/packages/eccodes/enable_only_jasper.patch b/var/spack/repos/builtin/packages/eccodes/enable_only_jasper.patch
new file mode 100644
index 0000000000..9f7dc22ac5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/eccodes/enable_only_jasper.patch
@@ -0,0 +1,26 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bf4d78b..ea2f3e9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -162,8 +162,6 @@ if( ENABLE_JPG )
+ set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH}) # Restore CMAKE_PREFIX_PATH
+ set(CMAKE_WARN_DEPRECATED ON) # Remove suppression
+
+- find_package( OpenJPEG )
+-
+ if( JASPER_FOUND )
+ list( APPEND ECCODES_TPLS Jasper )
+ set( HAVE_JPEG 1 )
+@@ -172,12 +170,6 @@ if( ENABLE_JPG )
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" JASPER_VERSION_MAJOR "${JASPER_VERSION_STRING}")
+ endif()
+
+- if( OPENJPEG_FOUND )
+- list( APPEND ECCODES_TPLS OpenJPEG )
+- set( HAVE_JPEG 1 )
+- set( HAVE_LIBOPENJPEG 1 )
+- endif()
+-
+ endif()
+
+
diff --git a/var/spack/repos/builtin/packages/eccodes/enable_only_openjpeg.patch b/var/spack/repos/builtin/packages/eccodes/enable_only_openjpeg.patch
new file mode 100644
index 0000000000..7bf8b7b59f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/eccodes/enable_only_openjpeg.patch
@@ -0,0 +1,32 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index bf4d78b..3ae50ba 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -151,27 +151,8 @@ set( HAVE_LIBOPENJPEG 0 )
+
+ if( ENABLE_JPG )
+
+- # Note: This is a deprecated feature but we need it to find Jasper at ECMWF.
+- # ecbuild_add_extra_search_paths modifies CMAKE_PREFIX_PATH
+- # which can affect future package discovery if not undone by the caller.
+- # The current CMAKE_PREFIX_PATH is backed up as _CMAKE_PREFIX_PATH
+- #
+- set(CMAKE_WARN_DEPRECATED OFF) # Suppress deprecation message
+- ecbuild_add_extra_search_paths( jasper )
+- find_package( Jasper )
+- set(CMAKE_PREFIX_PATH ${_CMAKE_PREFIX_PATH}) # Restore CMAKE_PREFIX_PATH
+- set(CMAKE_WARN_DEPRECATED ON) # Remove suppression
+-
+ find_package( OpenJPEG )
+
+- if( JASPER_FOUND )
+- list( APPEND ECCODES_TPLS Jasper )
+- set( HAVE_JPEG 1 )
+- set( HAVE_LIBJASPER 1 )
+- # Extract Jasper's major version number to enable conditional code. See ECC-396
+- string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" JASPER_VERSION_MAJOR "${JASPER_VERSION_STRING}")
+- endif()
+-
+ if( OPENJPEG_FOUND )
+ list( APPEND ECCODES_TPLS OpenJPEG )
+ set( HAVE_JPEG 1 )
diff --git a/var/spack/repos/builtin/packages/eccodes/package.py b/var/spack/repos/builtin/packages/eccodes/package.py
new file mode 100644
index 0000000000..3843ce2ddc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/eccodes/package.py
@@ -0,0 +1,94 @@
+##############################################################################
+# 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/spack/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 Eccodes(CMakePackage):
+ """ecCodes is a package developed by ECMWF for processing meteorological
+ data in GRIB (1/2), BUFR (3/4) and GTS header formats."""
+
+ homepage = "https://software.ecmwf.int/wiki/display/ECC/ecCodes+Home"
+ url = "https://software.ecmwf.int/wiki/download/attachments/45757960/eccodes-2.2.0-Source.tar.gz?api=v2"
+ list_url = "https://software.ecmwf.int/wiki/display/ECC/Releases"
+
+ version('2.5.0', '5a7e92c58418d855082fa573efd352aa')
+ version('2.2.0', 'b27e6f0a3eea5b92dac37372e4c45a62')
+
+ variant('netcdf', default=False,
+ description='Enable GRIB to NetCDF conversion tool')
+ variant('jp2k', default='openjpeg', values=('openjpeg', 'jasper', 'none'),
+ description='Specify JPEG2000 decoding/encoding backend')
+ variant('png', default=False,
+ description='Enable PNG support for decoding/encoding')
+ variant('aec', default=False,
+ description='Enable Adaptive Entropy Coding for decoding/encoding')
+ variant('pthreads', default=False,
+ description='Enable POSIX threads')
+ variant('openmp', default=False,
+ description='Enable OpenMP threads')
+ variant('memfs', default=False,
+ description='Enable memory based access to definitions/samples')
+ variant('python', default=False,
+ description='Enable the Python interface')
+ variant('fortran', default=True, description='Enable the Fortran support')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'Production'))
+
+ depends_on('netcdf', when='+netcdf')
+ depends_on('openjpeg', when='jp2k=openjpeg')
+ depends_on('jasper', when='jp2k=jasper')
+ depends_on('libpng', when='+png')
+ depends_on('libaec', when='+aec')
+ depends_on('python@:2', when='+python')
+ depends_on('py-numpy', when='+python', type=('build', 'run'))
+ extends('python', when='+python')
+
+ conflicts('+openmp', when='+pthreads',
+ msg='Cannot enable both POSIX threads and OMP')
+
+ # The following enforces linking against the specified JPEG2000 backend.
+ patch('enable_only_openjpeg.patch', when='jp2k=openjpeg')
+ patch('enable_only_jasper.patch', when='jp2k=jasper')
+
+ def cmake_args(self):
+ variants = ['+netcdf', '+png', '+aec', '+pthreads',
+ '+openmp', '+memfs', '+python', '+fortran']
+ options = ['NETCDF', 'PNG', 'AEC', 'ECCODES_THREADS',
+ 'ECCODES_OMP_THREADS', 'MEMFS', 'PYTHON', 'FORTRAN']
+
+ args = map(lambda var, opt:
+ "-DENABLE_%s=%s" %
+ (opt, 'ON' if var in self.spec else 'OFF'),
+ variants,
+ options)
+
+ if self.spec.variants['jp2k'].value == 'none':
+ args.append('-DENABLE_JPG=OFF')
+ else:
+ args.append('-DENABLE_JPG=ON')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py b/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py
new file mode 100644
index 0000000000..ee1a881aff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ecp-proxy-apps/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+from spack import *
+
+
+class EcpProxyApps(Package):
+ """This is a collection of packages that represents the official suite of
+ DOE/ECP proxy applications. This is a Spack bundle package that
+ installs the ECP proxy application suite.
+ """
+
+ homepage = "https://exascaleproject.github.io/proxy-apps"
+
+ # Dummy url
+ url = 'https://github.com/exascaleproject/proxy-apps/archive/v1.0.tar.gz'
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('1.0', '5a26b184f506afeb7d221f15c0e8f153')
+
+ depends_on('amg@1.0', when='@1.0')
+ depends_on('candle-benchmarks@1.0', when='@1.0')
+ depends_on('comd@1.1', when='@1.0')
+ depends_on('laghos@1.0', when='@1.0')
+ depends_on('macsio@1.0', when='@1.0')
+ depends_on('miniamr@1.4.0', when='@1.0')
+ depends_on('minife@2.1.0', when='@1.0')
+ depends_on('minitri@1.0', when='@1.0')
+ depends_on('nekbone@17.0', when='@1.0')
+ depends_on('sw4lite@1.0', when='@1.0')
+ depends_on('swfft@1.0', when='@1.0')
+ depends_on('xsbench@14', when='@1.0')
+
+ # Dummy install for now, will be removed when metapackage is available
+ def install(self, spec, prefix):
+ with open(os.path.join(spec.prefix, 'package-list.txt'), 'w') as out:
+ for dep in spec.dependencies(deptype='build'):
+ out.write("%s\n" % dep.format(
+ format_string='${PACKAGE} ${VERSION}'))
+ os.symlink(dep.prefix, os.path.join(spec.prefix, dep.name))
+ out.close()
diff --git a/var/spack/repos/builtin/packages/editres/package.py b/var/spack/repos/builtin/packages/editres/package.py
index 52ad33b133..1bba68d305 100644
--- a/var/spack/repos/builtin/packages/editres/package.py
+++ b/var/spack/repos/builtin/packages/editres/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Editres(Package):
+class Editres(AutotoolsPackage):
"""Dynamic resource editor for X Toolkit applications."""
homepage = "http://cgit.freedesktop.org/xorg/app/editres"
@@ -40,9 +40,3 @@ class Editres(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/eigen/package.py b/var/spack/repos/builtin/packages/eigen/package.py
index 1d7df47b21..9e7d8c392e 100644
--- a/var/spack/repos/builtin/packages/eigen/package.py
+++ b/var/spack/repos/builtin/packages/eigen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,23 +25,21 @@
from spack import *
-class Eigen(Package):
+class Eigen(CMakePackage):
"""Eigen is a C++ template library for linear algebra matrices,
vectors, numerical solvers, and related algorithms.
"""
homepage = 'http://eigen.tuxfamily.org/'
- url = 'https://bitbucket.org/eigen/eigen/get/3.2.7.tar.bz2'
+ url = 'https://bitbucket.org/eigen/eigen/get/3.3.3.tar.bz2'
+ version('3.3.3', 'b2ddade41040d9cf73b39b4b51e8775b')
version('3.3.1', 'edb6799ef413b0868aace20d2403864c')
version('3.2.10', 'a85bb68c82988648c3d53ba9768d7dcbcfe105f8')
version('3.2.9', '59ab81212f8eb2534b1545a9b42c38bf618a0d71')
version('3.2.8', '64f4aef8012a424c7e079eaf0be71793ab9bc6e0')
version('3.2.7', 'cc1bacbad97558b97da6b77c9644f184')
- variant('debug', default=False,
- description='Builds the library in debug mode')
-
variant('metis', default=True, description='Enables metis backend')
variant('scotch', default=True, description='Enables scotch backend')
variant('fftw', default=True, description='Enables FFTW backend')
@@ -49,28 +47,14 @@ class Eigen(Package):
description='Enables SuiteSparse support')
variant('mpfr', default=True,
description='Enables support for multi-precisions FP via mpfr')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo'))
# TODO : dependency on googlehash, superlu, adolc missing
- depends_on('cmake', type='build')
depends_on('metis@5:', when='+metis')
depends_on('scotch', when='+scotch')
depends_on('fftw', when='+fftw')
depends_on('suite-sparse', when='+suitesparse')
- depends_on('mpfr@2.3.0:', when="+mpfr")
- depends_on('gmp', when="+mpfr")
-
- def install(self, spec, prefix):
-
- options = []
- options.extend(std_cmake_args)
-
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
-
- if '+debug' in spec:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
-
- with working_dir(build_directory, create=True):
- cmake(source_directory, *options)
- make()
- make("install")
+ depends_on('mpfr@2.3.0:', when='+mpfr')
+ depends_on('gmp', when='+mpfr')
diff --git a/var/spack/repos/builtin/packages/elemental/cmake_0.87.7.patch b/var/spack/repos/builtin/packages/elemental/cmake_0.87.7.patch
new file mode 100644
index 0000000000..a33f5ef0b6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/elemental/cmake_0.87.7.patch
@@ -0,0 +1,22 @@
+diff --git a/cmake/configure_files/ElementalConfig.cmake.in b/cmake/configure_files/ElementalConfig.cmake.in
+index d37649f..8511d81 100644
+--- a/cmake/configure_files/ElementalConfig.cmake.in
++++ b/cmake/configure_files/ElementalConfig.cmake.in
+@@ -1,6 +1,8 @@
+ set(Elemental_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include")
+ set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@MPI_CXX_INCLUDE_PATH@")
+-set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@QD_INCLUDES@")
++IF(@QD_FOUND@)
++ set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@QD_INCLUDES@")
++ENDIF()
+ set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@MPC_INCLUDES@")
+ set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@MPFR_INCLUDES@")
+ set(Elemental_INCLUDE_DIRS "${Elemental_INCLUDE_DIRS};@GMP_INCLUDES@")
+@@ -13,6 +15,6 @@ set(Elemental_LINK_FLAGS "@EL_LINK_FLAGS@")
+ set(Elemental_DEFINITIONS "@Qt5Widgets_DEFINITIONS@")
+
+ # Our library dependencies (contains definitions for IMPORTED targets)
+-include("@CMAKE_INSTALL_PREFIX@/CMake/ElementalTargets.cmake")
++include("${CMAKE_CURRENT_LIST_DIR}/ElementalTargets.cmake")
+
+ set(Elemental_LIBRARIES El)
diff --git a/var/spack/repos/builtin/packages/elemental/elemental_cublas.patch b/var/spack/repos/builtin/packages/elemental/elemental_cublas.patch
new file mode 100644
index 0000000000..9cf9b6e6b5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/elemental/elemental_cublas.patch
@@ -0,0 +1,668 @@
+diff -Naur a/include/El/blas_like/level3.hpp b/include/El/blas_like/level3.hpp
+--- a/include/El/blas_like/level3.hpp 2017-06-08 07:30:43.180249917 -0700
++++ b/include/El/blas_like/level3.hpp 2017-06-08 07:35:27.325434602 -0700
+@@ -31,6 +31,10 @@
+ }
+ using namespace GemmAlgorithmNS;
+
++void GemmUseGPU(int min_M, int min_N, int min_K);
++
++void GemmUseCPU();
++
+ template<typename T>
+ void Gemm
+ ( Orientation orientA, Orientation orientB,
+diff -Naur a/include/El/core/imports/blas.hpp b/include/El/core/imports/blas.hpp
+--- a/include/El/core/imports/blas.hpp 2017-06-08 07:30:43.522016908 -0700
++++ b/include/El/core/imports/blas.hpp 2017-06-08 07:35:06.834030908 -0700
+@@ -916,4 +916,63 @@
+ } // namespace blas
+ } // namespace El
+
++
++#if defined(EL_USE_CUBLAS)
++
++namespace El {
++
++#ifdef EL_USE_64BIT_BLAS_INTS
++typedef long long int BlasInt;
++#else
++typedef int BlasInt;
++#endif
++
++namespace cublas {
++
++// NOTE: templated routines are custom and not wrappers
++
++// Level 3 BLAS
++// ============
++template<typename T>
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const T& alpha,
++ const T* A, BlasInt ALDim,
++ const T* B, BlasInt BLDim,
++ const T& beta,
++ T* C, BlasInt CLDim );
++
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const float& alpha,
++ const float* A, BlasInt ALDim,
++ const float* B, BlasInt BLDim,
++ const float& beta,
++ float* C, BlasInt CLDim );
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const double& alpha,
++ const double* A, BlasInt ALDim,
++ const double* B, BlasInt BLDim,
++ const double& beta,
++ double* C, BlasInt CLDim );
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const scomplex& alpha,
++ const scomplex* A, BlasInt ALDim,
++ const scomplex* B, BlasInt BLDim,
++ const scomplex& beta,
++ scomplex* C, BlasInt CLDim );
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const dcomplex& alpha,
++ const dcomplex* A, BlasInt ALDim,
++ const dcomplex* B, BlasInt BLDim,
++ const dcomplex& beta,
++ dcomplex* C, BlasInt CLDim );
++
++} // namespace cublas
++} // namespace El
++#endif
++
+ #endif // ifndef EL_IMPORTS_BLAS_DECL_HPP
+diff -Naur a/src/blas_like/level3/Gemm.cpp b/src/blas_like/level3/Gemm.cpp
+--- a/src/blas_like/level3/Gemm.cpp 2017-06-08 07:30:44.307096427 -0700
++++ b/src/blas_like/level3/Gemm.cpp 2017-06-08 07:34:23.062863489 -0700
+@@ -16,6 +16,20 @@
+
+ namespace El {
+
++char gemm_cpu_gpu_switch = 'c';
++int min_M = 0, min_N = 0, min_K = 0;
++
++void GemmUseGPU(int _min_M, int _min_N, int _min_K) {
++ gemm_cpu_gpu_switch = 'g';
++ min_M = _min_M;
++ min_N = _min_N;
++ min_K = _min_K;
++}
++
++void GemmUseCPU() {
++ gemm_cpu_gpu_switch = 'c';
++}
++
+ template<typename T>
+ void Gemm
+ ( Orientation orientA, Orientation orientB,
+@@ -59,11 +73,30 @@
+ const Int k = ( orientA == NORMAL ? A.Width() : A.Height() );
+ if( k != 0 )
+ {
++#if defined(EL_USE_CUBLAS)
++ if (gemm_cpu_gpu_switch == 'g' &&
++ m >= min_M &&
++ n >= min_N &&
++ k >= min_K) {
++ cublas::Gemm
++ ( transA, transB, m, n, k,
++ alpha, A.LockedBuffer(), A.LDim(),
++ B.LockedBuffer(), B.LDim(),
++ beta, C.Buffer(), C.LDim() );
++ } else {
++ blas::Gemm
++ ( transA, transB, m, n, k,
++ alpha, A.LockedBuffer(), A.LDim(),
++ B.LockedBuffer(), B.LDim(),
++ beta, C.Buffer(), C.LDim() );
++ }
++#else
+ blas::Gemm
+ ( transA, transB, m, n, k,
+ alpha, A.LockedBuffer(), A.LDim(),
+ B.LockedBuffer(), B.LDim(),
+ beta, C.Buffer(), C.LDim() );
++#endif
+ }
+ else
+ {
+diff -Naur a/src/core/imports/blas/Gemm.hpp b/src/core/imports/blas/Gemm.hpp
+--- a/src/core/imports/blas/Gemm.hpp 2017-06-08 07:30:45.090529967 -0700
++++ b/src/core/imports/blas/Gemm.hpp 2017-06-08 07:34:46.503009958 -0700
+@@ -41,6 +41,12 @@
+
+ } // extern "C"
+
++
++#if defined(EL_USE_CUBLAS)
++#include <cublas.h>
++#include <cub/util_allocator.cuh>
++#endif
++
+ namespace El {
+ namespace blas {
+
+@@ -515,3 +521,515 @@
+
+ } // namespace blas
+ } // namespace El
++
++
++#if EL_USE_CUBLAS
++
++#define USE_CUB 1
++
++namespace El {
++namespace cublas {
++
++#if USE_CUB
++cub::CachingDeviceAllocator g_allocator(true); // Caching allocator for device memory
++#endif
++
++template<typename T>
++void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const T& alpha,
++ const T* A, BlasInt ALDim,
++ const T* B, BlasInt BLDim,
++ const T& beta,
++ T* C, BlasInt CLDim )
++{
++ // put something here
++ printf("integer version \n");
++}
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Int& alpha,
++ const Int* A, BlasInt ALDim,
++ const Int* B, BlasInt BLDim,
++ const Int& beta,
++ Int* C, BlasInt CLDim );
++#ifdef EL_HAVE_QD
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const DoubleDouble& alpha,
++ const DoubleDouble* A, BlasInt ALDim,
++ const DoubleDouble* B, BlasInt BLDim,
++ const DoubleDouble& beta,
++ DoubleDouble* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const QuadDouble& alpha,
++ const QuadDouble* A, BlasInt ALDim,
++ const QuadDouble* B, BlasInt BLDim,
++ const QuadDouble& beta,
++ QuadDouble* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Complex<DoubleDouble>& alpha,
++ const Complex<DoubleDouble>* A, BlasInt ALDim,
++ const Complex<DoubleDouble>* B, BlasInt BLDim,
++ const Complex<DoubleDouble>& beta,
++ Complex<DoubleDouble>* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Complex<QuadDouble>& alpha,
++ const Complex<QuadDouble>* A, BlasInt ALDim,
++ const Complex<QuadDouble>* B, BlasInt BLDim,
++ const Complex<QuadDouble>& beta,
++ Complex<QuadDouble>* C, BlasInt CLDim );
++#endif
++#ifdef EL_HAVE_QUAD
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Quad& alpha,
++ const Quad* A, BlasInt ALDim,
++ const Quad* B, BlasInt BLDim,
++ const Quad& beta,
++ Quad* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Complex<Quad>& alpha,
++ const Complex<Quad>* A, BlasInt ALDim,
++ const Complex<Quad>* B, BlasInt BLDim,
++ const Complex<Quad>& beta,
++ Complex<Quad>* C, BlasInt CLDim );
++#endif
++#ifdef EL_HAVE_MPC
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const BigInt& alpha,
++ const BigInt* A, BlasInt ALDim,
++ const BigInt* B, BlasInt BLDim,
++ const BigInt& beta,
++ BigInt* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const BigFloat& alpha,
++ const BigFloat* A, BlasInt ALDim,
++ const BigFloat* B, BlasInt BLDim,
++ const BigFloat& beta,
++ BigFloat* C, BlasInt CLDim );
++template void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const Complex<BigFloat>& alpha,
++ const Complex<BigFloat>* A, BlasInt ALDim,
++ const Complex<BigFloat>* B, BlasInt BLDim,
++ const Complex<BigFloat>& beta,
++ Complex<BigFloat>* C, BlasInt CLDim );
++#endif
++
++void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const float& alpha,
++ const float* A, BlasInt ALDim,
++ const float* B, BlasInt BLDim,
++ const float& beta,
++ float* C, BlasInt CLDim )
++{
++ EL_DEBUG_CSE
++ EL_DEBUG_ONLY(
++ if( std::toupper(transA) == 'N' )
++ {
++ if( ALDim < Max(m,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",m=",m);
++ }
++ else
++ {
++ if( ALDim < Max(k,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",k=",k);
++ }
++
++ if( std::toupper(transB) == 'N' )
++ {
++ if( BLDim < Max(k,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",k=",k);
++ }
++ else
++ {
++ if( BLDim < Max(n,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",n=",n);
++ }
++
++ if( CLDim < Max(m,1) )
++ LogicError("CLDim was too small: CLDim=",CLDim,",m=",m);
++ )
++ const char fixedTransA = ( std::toupper(transA) == 'C' ? 'T' : transA );
++ const char fixedTransB = ( std::toupper(transB) == 'C' ? 'T' : transB );
++
++ const mpi::Comm comm;
++ const Int commRank = mpi::Rank( comm );
++ if (commRank == 0) {
++ //printf("calling cublas Sgemm: m %d n %d k %d\n", m, n, k);
++ }
++
++ BlasInt rowA, colA, rowB, colB, rowC, colC;
++ // device memory size for A, B and C
++ BlasInt sizeA, sizeB, sizeC;
++ float *devA=NULL, *devB=NULL, *devC=NULL;
++
++ rowA = fixedTransA == 'T' ? k : m;
++ colA = fixedTransA == 'T' ? m : k;
++ rowB = fixedTransB == 'T' ? n : k;
++ colB = fixedTransB == 'T' ? k : n;
++ rowC = m;
++ colC = n;
++ sizeA = rowA * colA;
++ sizeB = rowB * colB;
++ sizeC = rowC * colC;
++
++ cublasStatus stat;
++
++#if USE_CUB
++ CubDebugExit(g_allocator.DeviceAllocate((void**)&devA,
++ sizeof(float) * (sizeA+sizeB+sizeC) ));
++#else
++ stat = cublasAlloc(sizeA+sizeB+sizeC, sizeof(float), (void **) &devA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("Alloc A,B,C error\n"); }
++#endif
++
++ devB = devA + sizeA;
++ devC = devB + sizeB;
++
++ // copy matrix A, B and C to device
++ stat = cublasSetMatrix(rowA, colA, sizeof(float), A, ALDim, devA, rowA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix A error\n"); }
++
++ stat = cublasSetMatrix(rowB, colB, sizeof(float), B, BLDim, devB, rowB);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix B error\n"); }
++
++ if (beta != 0.0)
++ {
++ stat = cublasSetMatrix(rowC, colC, sizeof(float), C, CLDim, devC, rowC);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix C error\n"); }
++ }
++
++ // cublas<t>gemm
++ cublasSgemm
++ ( fixedTransA, fixedTransB, m, n, k,
++ alpha, devA, rowA, devB, rowB, beta, devC, rowC );
++
++ // copy matrix C to host
++ stat = cublasGetMatrix(rowC, colC, sizeof(float), devC, rowC, C, CLDim);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("GetMatrix C error\n"); }
++
++ // free
++#if USE_CUB
++ CubDebugExit(g_allocator.DeviceFree(devA));
++#else
++ cublasFree(devA);
++#endif
++ //printf("CUBLAS float done ...\n");
++}
++
++void Gemm
++( char transA, char transB,
++ BlasInt m, BlasInt n, BlasInt k,
++ const double& alpha,
++ const double* A, BlasInt ALDim,
++ const double* B, BlasInt BLDim,
++ const double& beta,
++ double* C, BlasInt CLDim )
++{
++ EL_DEBUG_CSE
++ EL_DEBUG_ONLY(
++ if( std::toupper(transA) == 'N' )
++ {
++ if( ALDim < Max(m,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",m=",m);
++ }
++ else
++ {
++ if( ALDim < Max(k,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",k=",k);
++ }
++
++ if( std::toupper(transB) == 'N' )
++ {
++ if( BLDim < Max(k,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",k=",k);
++ }
++ else
++ {
++ if( BLDim < Max(n,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",n=",n);
++ }
++
++ if( CLDim < Max(m,1) )
++ LogicError("CLDim was too small: CLDim=",CLDim,",m=",m);
++ )
++ const char fixedTransA = ( std::toupper(transA) == 'C' ? 'T' : transA );
++ const char fixedTransB = ( std::toupper(transB) == 'C' ? 'T' : transB );
++
++ const mpi::Comm comm;
++ const Int commRank = mpi::Rank( comm );
++ if (commRank == 0) {
++ //printf("calling cublas Dgemm: m %d n %d k %d\n", m, n, k);
++ }
++
++ BlasInt rowA, colA, rowB, colB, rowC, colC;
++ // device memory size for A, B and C
++ BlasInt sizeA, sizeB, sizeC;
++ double *devA=NULL, *devB=NULL, *devC=NULL;
++
++ rowA = fixedTransA == 'T' ? k : m;
++ colA = fixedTransA == 'T' ? m : k;
++ rowB = fixedTransB == 'T' ? n : k;
++ colB = fixedTransB == 'T' ? k : n;
++ rowC = m;
++ colC = n;
++ sizeA = rowA * colA;
++ sizeB = rowB * colB;
++ sizeC = rowC * colC;
++
++ cublasStatus stat;
++
++#if USE_CUB
++ CubDebugExit(g_allocator.DeviceAllocate((void**)&devA,
++ sizeof(double) * (sizeA+sizeB+sizeC) ));
++#else
++ stat = cublasAlloc(sizeA+sizeB+sizeC, sizeof(double), (void **) &devA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("Alloc A,B,C error\n"); }
++#endif
++
++ devB = devA + sizeA;
++ devC = devB + sizeB;
++
++ // copy matrix A, B and C to device
++ stat = cublasSetMatrix(rowA, colA, sizeof(double), A, ALDim, devA, rowA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix A error\n"); }
++
++ stat = cublasSetMatrix(rowB, colB, sizeof(double), B, BLDim, devB, rowB);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix B error\n"); }
++
++ if (beta != 0.0)
++ {
++ stat = cublasSetMatrix(rowC, colC, sizeof(double), C, CLDim, devC, rowC);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix C error\n"); }
++ }
++
++ // cublas<t>gemm
++ cublasDgemm
++ ( fixedTransA, fixedTransB, m, n, k,
++ alpha, devA, rowA, devB, rowB, beta, devC, rowC );
++
++ // copy matrix C to host
++ stat = cublasGetMatrix(rowC, colC, sizeof(double), devC, rowC, C, CLDim);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("GetMatrix C error\n"); }
++
++ // free
++#if USE_CUB
++ CubDebugExit(g_allocator.DeviceFree(devA));
++#else
++ cublasFree(devA);
++#endif
++ //printf("CUBLAS double done ...\n");
++}
++
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const scomplex& alpha,
++ const scomplex* A, BlasInt ALDim,
++ const scomplex* B, BlasInt BLDim,
++ const scomplex& beta,
++ scomplex* C, BlasInt CLDim )
++{
++ EL_DEBUG_CSE
++ EL_DEBUG_ONLY(
++ if( std::toupper(transA) == 'N' )
++ {
++ if( ALDim < Max(m,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",m=",m);
++ }
++ else
++ {
++ if( ALDim < Max(k,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",k=",k);
++ }
++
++ if( std::toupper(transB) == 'N' )
++ {
++ if( BLDim < Max(k,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",k=",k);
++ }
++ else
++ {
++ if( BLDim < Max(n,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",n=",n);
++ }
++
++ if( CLDim < Max(m,1) )
++ LogicError("CLDim was too small: CLDim=",CLDim,",m=",m);
++ )
++
++ const char fixedTransA = transA;
++ const char fixedTransB = transB;
++
++ const mpi::Comm comm;
++ const Int commRank = mpi::Rank( comm );
++ if (commRank == 0) {
++ //printf("calling cublas Cgemm: m %d n %d k %d\n", m, n, k);
++ }
++
++ BlasInt rowA, colA, rowB, colB, rowC, colC;
++ // device memory size for A, B and C
++ BlasInt sizeA, sizeB, sizeC;
++ cuComplex *devA=NULL, *devB=NULL, *devC=NULL;
++
++ rowA = fixedTransA == 'T' ? k : m;
++ colA = fixedTransA == 'T' ? m : k;
++ rowB = fixedTransB == 'T' ? n : k;
++ colB = fixedTransB == 'T' ? k : n;
++ rowC = m;
++ colC = n;
++ sizeA = rowA * colA;
++ sizeB = rowB * colB;
++ sizeC = rowC * colC;
++
++ cublasStatus stat;
++ stat = cublasAlloc(sizeA+sizeB+sizeC, sizeof(cuComplex), (void **) &devA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("Alloc A,B,C error\n"); }
++
++ devB = devA + sizeA;
++ devC = devB + sizeB;
++
++ // copy matrix A, B and C to device
++ stat = cublasSetMatrix(rowA, colA, sizeof(cuComplex), A, ALDim, devA, rowA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix A error\n"); }
++
++ stat = cublasSetMatrix(rowB, colB, sizeof(cuComplex), B, BLDim, devB, rowB);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix B error\n"); }
++
++ if (beta.real() != 0.0 || beta.imag() != 0.0)
++ {
++ stat = cublasSetMatrix(rowC, colC, sizeof(cuComplex), C, CLDim, devC, rowC);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix C error\n"); }
++ }
++
++ // cublas<t>gemm
++ cublasCgemm
++ ( fixedTransA, fixedTransB, m, n, k,
++ *((cuComplex*) &alpha), devA, rowA, devB, rowB, *((cuComplex*) &beta), devC, rowC );
++
++ // copy matrix C to host
++ stat = cublasGetMatrix(rowC, colC, sizeof(cuComplex), devC, rowC, C, CLDim);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("GetMatrix C error\n"); }
++
++ // free
++ cublasFree(devA);
++}
++
++void Gemm
++( char transA, char transB, BlasInt m, BlasInt n, BlasInt k,
++ const dcomplex& alpha,
++ const dcomplex* A, BlasInt ALDim,
++ const dcomplex* B, BlasInt BLDim,
++ const dcomplex& beta,
++ dcomplex* C, BlasInt CLDim )
++{
++ EL_DEBUG_CSE
++ EL_DEBUG_ONLY(
++ if( std::toupper(transA) == 'N' )
++ {
++ if( ALDim < Max(m,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",m=",m);
++ }
++ else
++ {
++ if( ALDim < Max(k,1) )
++ LogicError("ALDim was too small: ALDim=",ALDim,",k=",k);
++ }
++
++ if( std::toupper(transB) == 'N' )
++ {
++ if( BLDim < Max(k,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",k=",k);
++ }
++ else
++ {
++ if( BLDim < Max(n,1) )
++ LogicError("BLDim was too small: BLDim=",BLDim,",n=",n);
++ }
++
++ if( CLDim < Max(m,1) )
++ LogicError("CLDim was too small: CLDim=",CLDim,",m=",m);
++ )
++
++ const char fixedTransA = transA;
++ const char fixedTransB = transB;
++
++ const mpi::Comm comm;
++ const Int commRank = mpi::Rank( comm );
++ if (commRank == 0) {
++ //printf("calling cublas Zgemm: m %d n %d k %d\n", m, n, k);
++ }
++
++ BlasInt rowA, colA, rowB, colB, rowC, colC;
++ // device memory size for A, B and C
++ BlasInt sizeA, sizeB, sizeC;
++ cuDoubleComplex *devA=NULL, *devB=NULL, *devC=NULL;
++
++ rowA = fixedTransA == 'T' ? k : m;
++ colA = fixedTransA == 'T' ? m : k;
++ rowB = fixedTransB == 'T' ? n : k;
++ colB = fixedTransB == 'T' ? k : n;
++ rowC = m;
++ colC = n;
++ sizeA = rowA * colA;
++ sizeB = rowB * colB;
++ sizeC = rowC * colC;
++
++ cublasStatus stat;
++ stat = cublasAlloc(sizeA+sizeB+sizeC, sizeof(cuDoubleComplex), (void **) &devA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("Alloc A,B,C error\n"); }
++
++ devB = devA + sizeA;
++ devC = devB + sizeB;
++
++ // copy matrix A, B and C to device
++ stat = cublasSetMatrix(rowA, colA, sizeof(cuDoubleComplex), A, ALDim, devA, rowA);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix A error\n"); }
++
++ stat = cublasSetMatrix(rowB, colB, sizeof(cuDoubleComplex), B, BLDim, devB, rowB);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix B error\n"); }
++
++ if (beta.real() != 0.0 || beta.imag() != 0.0)
++ {
++ stat = cublasSetMatrix(rowC, colC, sizeof(cuDoubleComplex), C, CLDim, devC, rowC);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("SetMatrix C error\n"); }
++ }
++
++ cublasZgemm
++ ( fixedTransA, fixedTransB, m, n, k,
++ *((cuDoubleComplex*) &alpha), devA, rowA, devB, rowB, *((cuDoubleComplex*) &beta),
++ devC, rowC );
++
++ // copy matrix C to host
++ stat = cublasGetMatrix(rowC, colC, sizeof(cuDoubleComplex), devC, rowC, C, CLDim);
++ if (stat != CUBLAS_STATUS_SUCCESS) { RuntimeError("GetMatrix C error\n"); }
++
++ // free
++ cublasFree(devA);
++}
++
++} // namespace cublas
++} // namespace El
++
++#endif
++
diff --git a/var/spack/repos/builtin/packages/elemental/package.py b/var/spack/repos/builtin/packages/elemental/package.py
new file mode 100644
index 0000000000..14e376628c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/elemental/package.py
@@ -0,0 +1,172 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+from spack import *
+from spack.spec import UnsupportedCompilerError
+
+
+class Elemental(CMakePackage):
+ """Elemental: Distributed-memory dense and sparse-direct linear algebra
+ and optimization library."""
+
+ homepage = "http://libelemental.org"
+ url = "https://github.com/elemental/Elemental/archive/v0.87.6.tar.gz"
+
+ version('develop', git='https://github.com/elemental/Elemental.git', branch='master')
+ version('0.87.7', '6c1e7442021c59a36049e37ea69b8075')
+ version('0.87.6', '9fd29783d45b0a0e27c0df85f548abe9')
+
+ variant('shared', default=True,
+ description='Enables the build of shared libraries')
+ variant('hybrid', default=True,
+ description='Make use of OpenMP within MPI packing/unpacking')
+ variant('openmp_blas', default=False,
+ description='Use OpenMP for threading in the BLAS library')
+ variant('c', default=False,
+ description='Build C interface')
+ variant('python', default=False,
+ description='Install Python interface')
+ variant('parmetis', default=False,
+ description='Enable ParMETIS')
+ variant('quad', default=False,
+ description='Enable quad precision')
+ variant('int64', default=False,
+ description='Use 64bit integers')
+ variant('cublas', default=False,
+ description='Enable cuBLAS for local BLAS operations')
+ # When this variant is set remove the normal dependencies since
+ # Elemental has to build BLAS and ScaLAPACK internally
+ variant('int64_blas', default=False,
+ description='Use 64bit integers for BLAS.'
+ ' Requires local build of BLAS library.')
+ variant('scalapack', default=False,
+ description='Build with ScaLAPACK library')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
+ variant('blas', default='openblas', values=('openblas', 'mkl'),
+ description='Enable the use of OpenBlas/MKL')
+ variant('mpfr', default=False,
+ description='Support GNU MPFR\'s'
+ 'arbitrary-precision floating-point arithmetic')
+
+ # Note that #1712 forces us to enumerate the different blas variants
+ depends_on('blas', when='~openmp_blas ~int64_blas')
+ # Hack to forward variant to openblas package
+ # Allow Elemental to build internally when using 8-byte ints
+ depends_on('openblas threads=openmp', when='blas=openblas +openmp_blas ~int64_blas')
+
+ depends_on('intel-mkl', when="blas=mkl ~openmp_blas ~int64_blas")
+ depends_on('intel-mkl threads=openmp', when='blas=mkl +openmp_blas ~int64_blas')
+ depends_on('intel-mkl@2017.1 +openmp +ilp64', when='blas=mkl +openmp_blas +int64_blas')
+
+ # Note that this forces us to use OpenBLAS until #1712 is fixed
+ depends_on('lapack', when='blas=openblas ~openmp_blas')
+ depends_on('metis')
+ depends_on('metis +int64', when='+int64')
+ depends_on('mpi')
+ # Allow Elemental to build internally when using 8-byte ints
+ depends_on('scalapack', when='+scalapack ~int64_blas')
+ extends('python', when='+python')
+ depends_on('python@:2.8', when='+python')
+ depends_on('gmp', when='+mpfr')
+ depends_on('mpc', when='+mpfr')
+ depends_on('mpfr', when='+mpfr')
+
+ patch('elemental_cublas.patch', when='+cublas')
+ patch('cmake_0.87.7.patch', when='@0.87.7')
+
+ @property
+ def libs(self):
+ shared = True if '+shared' in self.spec else False
+ return find_libraries(
+ 'libEl', root=self.prefix, shared=shared, recurse=True
+ )
+
+ def cmake_args(self):
+ spec = self.spec
+
+ if '@:0.87.7' in spec and '%intel@:17.0.2' in spec:
+ raise UnsupportedCompilerError(
+ "Elemental {0} has a known bug with compiler: {1} {2}".format(
+ spec.version, spec.compiler.name, spec.compiler.version))
+
+ args = [
+ '-DCMAKE_INSTALL_MESSAGE:STRING=LAZY',
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+ '-DEL_PREFER_OPENBLAS:BOOL=TRUE',
+ '-DEL_DISABLE_SCALAPACK:BOOL=%s' % ('~scalapack' in spec),
+ '-DBUILD_SHARED_LIBS:BOOL=%s' % ('+shared' in spec),
+ '-DEL_HYBRID:BOOL=%s' % ('+hybrid' in spec),
+ '-DEL_C_INTERFACE:BOOL=%s' % ('+c' in spec),
+ '-DINSTALL_PYTHON_PACKAGE:BOOL=%s' % ('+python' in spec),
+ '-DEL_DISABLE_PARMETIS:BOOL=%s' % ('~parmetis' in spec),
+ '-DEL_DISABLE_QUAD:BOOL=%s' % ('~quad' in spec),
+ '-DEL_USE_64BIT_INTS:BOOL=%s' % ('+int64' in spec),
+ '-DEL_USE_64BIT_BLAS_INTS:BOOL=%s' % ('+int64_blas' in spec),
+ '-DEL_DISABLE_MPFR:BOOL=%s' % ('~mpfr' in spec)]
+
+ if self.spec.satisfies('%intel'):
+ ifort = env['SPACK_F77']
+ intel_bin = os.path.dirname(ifort)
+ intel_root = os.path.dirname(intel_bin)
+ libfortran = LibraryList('{0}/lib/intel64/libifcoremt.{1}'
+ .format(intel_root, dso_suffix))
+ elif self.spec.satisfies('%gcc'):
+ # see <stage_folder>/debian/rules as an example:
+ mpif77 = Executable(spec['mpi'].mpif77)
+ libfortran = LibraryList(mpif77('--print-file-name',
+ 'libgfortran.%s' % dso_suffix,
+ output=str))
+ if libfortran:
+ args.append('-DGFORTRAN_LIB=%s' % libfortran.libraries[0])
+
+ # If using 64bit int BLAS libraries, elemental has to build
+ # them internally
+ if '+int64_blas' in spec:
+ args.extend(['-DEL_BLAS_SUFFIX:STRING={0}'.format((
+ '_64_' if '+int64_blas' in spec else '_')),
+ '-DCUSTOM_BLAS_SUFFIX:BOOL=TRUE']),
+ if '+scalapack' in spec:
+ args.extend(['-DEL_LAPACK_SUFFIX:STRING={0}'.format((
+ '_64_' if '+int64_blas' in spec else '_')),
+ '-DCUSTOM_LAPACK_SUFFIX:BOOL=TRUE']),
+ else:
+ math_libs = (spec['lapack'].libs +
+ spec['blas'].libs)
+
+ if '+scalapack' in spec:
+ math_libs = spec['scalapack'].libs + math_libs
+
+ args.extend([
+ '-DMATH_LIBS:STRING={0}'.format(math_libs.ld_flags)])
+
+ if '+python' in spec:
+ args.extend([
+ '-DPYTHON_SITE_PACKAGES:STRING={0}'.format(site_packages_dir)])
+
+ return args
diff --git a/var/spack/repos/builtin/packages/elfutils/package.py b/var/spack/repos/builtin/packages/elfutils/package.py
index ef8c2433c9..2db5d71d3a 100644
--- a/var/spack/repos/builtin/packages/elfutils/package.py
+++ b/var/spack/repos/builtin/packages/elfutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Elfutils(Package):
+class Elfutils(AutotoolsPackage):
"""elfutils is a collection of various binary tools such as
eu-objdump, eu-readelf, and other utilities that allow you to
inspect and manipulate ELF files. Refer to Table 5.Tools Included
@@ -35,16 +35,23 @@ class Elfutils(Package):
homepage = "https://fedorahosted.org/elfutils/"
- version('0.163',
- git='git://git.fedorahosted.org/git/elfutils.git',
- tag='elfutils-0.163')
+ url = "https://sourceware.org/elfutils/ftp/0.168/elfutils-0.168.tar.bz2"
+ list_url = "https://sourceware.org/elfutils/ftp"
+ list_depth = 1
- provides('elf')
+ version('0.170', '03599aee98c9b726c7a732a2dd0245d5')
+ version('0.168', '52adfa40758d0d39e5d5c57689bf38d6')
+ version('0.163', '77ce87f259987d2e54e4d87b86cbee41', preferred=True)
- def install(self, spec, prefix):
- autoreconf = which('autoreconf')
- autoreconf('-if')
+ depends_on('flex', type='build')
+ depends_on('bison', type='build')
+ depends_on('gettext')
- configure('--prefix=%s' % prefix, '--enable-maintainer-mode')
- make()
- make("install")
+ provides('elf@1')
+
+ def configure_args(self):
+ # configure doesn't use LIBS correctly
+ gettext_lib = self.spec['gettext'].prefix.lib,
+ return [
+ 'LDFLAGS=-Wl,--no-as-needed -L%s -lintl' % gettext_lib,
+ '--enable-maintainer-mode']
diff --git a/var/spack/repos/builtin/packages/elk/package.py b/var/spack/repos/builtin/packages/elk/package.py
index acaf863935..6abebb4174 100644
--- a/var/spack/repos/builtin/packages/elk/package.py
+++ b/var/spack/repos/builtin/packages/elk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,11 +22,10 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import spack
from spack import *
-class Elk(Package):
+class Elk(MakefilePackage):
'''An all-electron full-potential linearised augmented-plane wave
(FP-LAPW) code with many advanced features.'''
@@ -60,7 +59,7 @@ class Elk(Package):
# Cannot be built in parallel
parallel = False
- def configure(self, spec):
+ def edit(self, spec, prefix):
# Dictionary of configuration options
config = {
'MAKE': 'make',
@@ -90,9 +89,9 @@ class Elk(Package):
blas = 'blas.a'
lapack = 'lapack.a'
if '+blas' in spec:
- blas = spec['blas'].blas_libs.joined()
+ blas = spec['blas'].libs.joined()
if '+lapack' in spec:
- lapack = spec['lapack'].lapack_libs.joined()
+ lapack = spec['lapack'].libs.joined()
# lapack must come before blas
config['LIB_LPK'] = ' '.join([lapack, blas])
@@ -110,8 +109,8 @@ class Elk(Package):
config['F90'] = spec['mpi'].mpifc
config['F77'] = spec['mpi'].mpif77
else:
- config['F90'] = join_path(spack.build_env_path, 'f90')
- config['F77'] = join_path(spack.build_env_path, 'f77')
+ config['F90'] = spack_fc
+ config['F77'] = spack_f77
config['SRC_MPI'] = 'mpi_stub.f90'
# OpenMP support
@@ -141,14 +140,8 @@ class Elk(Package):
inc.write('{0} = {1}\n'.format(key, config[key]))
def install(self, spec, prefix):
- # Elk only provides an interactive setup script
- self.configure(spec)
-
- make()
- make('test')
-
# The Elk Makefile does not provide an install target
- mkdirp(prefix.bin)
+ mkdir(prefix.bin)
install('src/elk', prefix.bin)
install('src/eos/eos', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/elpa/package.py b/var/spack/repos/builtin/packages/elpa/package.py
index b433bf40b0..3761f26cc0 100644
--- a/var/spack/repos/builtin/packages/elpa/package.py
+++ b/var/spack/repos/builtin/packages/elpa/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,24 +26,16 @@
from spack import *
-class Elpa(Package):
- """
- Eigenvalue solvers for Petaflop-Applications (ELPA)
- """
+class Elpa(AutotoolsPackage):
+ """Eigenvalue solvers for Petaflop-Applications (ELPA)"""
homepage = 'http://elpa.mpcdf.mpg.de/'
url = 'http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz'
- version(
- '2016.05.003',
- '88a9f3f3bfb63e16509dd1be089dcf2c',
- url='http://elpa.mpcdf.mpg.de/html/Releases/2016.05.003/elpa-2016.05.003.tar.gz'
- )
- version(
- '2015.11.001',
- 'de0f35b7ee7c971fd0dca35c900b87e6',
- url='http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz'
- )
+ version('2016.11.001.pre', '5656fd066cf0dcd071dbcaf20a639b37')
+ version('2016.05.004', 'c0dd3a53055536fc3a2a221e78d8b376', preferred=True)
+ version('2016.05.003', '88a9f3f3bfb63e16509dd1be089dcf2c')
+ version('2015.11.001', 'de0f35b7ee7c971fd0dca35c900b87e6')
variant('openmp', default=False, description='Activates OpenMP support')
@@ -52,30 +44,39 @@ class Elpa(Package):
depends_on('lapack')
depends_on('scalapack')
- def install(self, spec, prefix):
-
- options = [
- 'CC={0}'.format(self.spec['mpi'].mpicc),
- 'FC={0}'.format(self.spec['mpi'].mpifc),
- 'CXX={0}'.format(self.spec['mpi'].mpicxx),
- 'FCFLAGS={0}'.format(
- spec['lapack'].lapack_libs.joined()
- ),
- 'LDFLAGS={0}'.format(
- spec['lapack'].lapack_libs.joined()
- ),
- 'SCALAPACK_FCFLAGS={0}'.format(
- spec['scalapack'].scalapack_libs.joined()
- ),
- 'SCALAPACK_LDFLAGS={0}'.format(
- spec['scalapack'].scalapack_libs.joined()
- ),
- '--prefix={0}'.format(self.prefix)
- ]
-
- if '+openmp' in spec:
- options.append("--enable-openmp")
+ def url_for_version(self, version):
+ t = 'http://elpa.mpcdf.mpg.de/html/Releases/{0}/elpa-{0}.tar.gz'
+ if version < Version('2016.05.003'):
+ t = 'http://elpa.mpcdf.mpg.de/elpa-{0}.tar.gz'
+ return t.format(str(version))
+
+ # override default implementation which returns static lib
+ @property
+ def libs(self):
+
+ libname = 'libelpa_openmp' if '+openmp' in self.spec else 'libelpa'
+
+ return find_libraries(
+ libname, root=self.prefix, shared=True, recurse=True
+ )
+
+ build_directory = 'spack-build'
- configure(*options)
- make()
- make("install")
+ def setup_environment(self, spack_env, run_env):
+ # TODO: set optimum flags for platform+compiler combo, see
+ # https://github.com/hfp/xconfigure/tree/master/elpa
+ spec = self.spec
+
+ spack_env.set('CC', spec['mpi'].mpicc)
+ spack_env.set('FC', spec['mpi'].mpifc)
+ spack_env.set('CXX', spec['mpi'].mpicxx)
+
+ spack_env.append_flags('LDFLAGS', spec['lapack'].libs.search_flags)
+ spack_env.append_flags('LIBS', spec['lapack'].libs.link_flags)
+ spack_env.set('SCALAPACK_LDFLAGS', spec['scalapack'].libs.joined())
+
+ def configure_args(self):
+ options = []
+ if '+openmp' in self.spec:
+ options.append("--enable-openmp")
+ return options
diff --git a/var/spack/repos/builtin/packages/emacs/package.py b/var/spack/repos/builtin/packages/emacs/package.py
index 1f9caee24c..4b0d7a9689 100644
--- a/var/spack/repos/builtin/packages/emacs/package.py
+++ b/var/spack/repos/builtin/packages/emacs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,29 @@
from spack import *
-class Emacs(Package):
+class Emacs(AutotoolsPackage):
"""The Emacs programmable text editor."""
homepage = "https://www.gnu.org/software/emacs"
url = "http://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.gz"
+ version('25.3', '74ddd373dc52ac05ca7a8c63b1ddbf58')
+ version('25.2', '0a36d1cdbba6024d4dbbac027f87995f')
version('25.1', '95c12e6a9afdf0dcbdd7d2efa26ca42c')
version('24.5', 'd74b597503a68105e61b5b9f6d065b44')
variant('X', default=False, description="Enable an X toolkit")
- variant('toolkit', default='gtk',
- description="Select an X toolkit (gtk, athena)")
+ variant(
+ 'toolkit',
+ default='gtk',
+ values=('gtk', 'athena'),
+ description="Select an X toolkit (gtk, athena)"
+ )
+
+ depends_on('pkg-config@0.9.0:', type='build')
depends_on('ncurses')
+ depends_on('zlib')
depends_on('libtiff', when='+X')
depends_on('libpng', when='+X')
depends_on('libxpm', when='+X')
@@ -47,13 +56,11 @@ class Emacs(Package):
depends_on('libxaw', when='+X toolkit=athena')
depends_on('gtkplus+X', when='+X toolkit=gtk')
- def install(self, spec, prefix):
- args = []
+ def configure_args(self):
+ spec = self.spec
+
toolkit = spec.variants['toolkit'].value
if '+X' in spec:
- if toolkit not in ('gtk', 'athena'):
- raise InstallError("toolkit must be in (gtk, athena), not %s" %
- toolkit)
args = [
'--with-x',
'--with-x-toolkit={0}'.format(toolkit)
@@ -61,7 +68,4 @@ class Emacs(Package):
else:
args = ['--without-x']
- configure('--prefix={0}'.format(prefix), *args)
-
- make()
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/emboss/package.py b/var/spack/repos/builtin/packages/emboss/package.py
new file mode 100644
index 0000000000..fe3f18a0dc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/emboss/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Emboss(AutotoolsPackage):
+ """EMBOSS is a free Open Source software analysis package specially
+ developed for the needs of the molecular biology (e.g. EMBnet) user
+ community"""
+
+ homepage = "http://emboss.sourceforge.net/"
+ url = "ftp://emboss.open-bio.org/pub/EMBOSS/EMBOSS-6.6.0.tar.gz"
+
+ version('6.6.0', 'cc3fca80cb0618deb10fa0d29fe90e4b')
+
+ depends_on('libxpm')
+ depends_on('libgd')
+ depends_on('postgresql')
diff --git a/var/spack/repos/builtin/packages/encodings/package.py b/var/spack/repos/builtin/packages/encodings/package.py
index 67b21a6e07..f356b052fc 100644
--- a/var/spack/repos/builtin/packages/encodings/package.py
+++ b/var/spack/repos/builtin/packages/encodings/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/environment-modules/package.py b/var/spack/repos/builtin/packages/environment-modules/package.py
index 11ddb12876..ed84cea0a9 100644
--- a/var/spack/repos/builtin/packages/environment-modules/package.py
+++ b/var/spack/repos/builtin/packages/environment-modules/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,6 +35,8 @@ class EnvironmentModules(Package):
version('3.2.10', '8b097fdcb90c514d7540bb55a3cb90fb')
+ variant('X', default=True, description='Build with X functionality')
+
# Dependencies:
depends_on('tcl', type=('build', 'link', 'run'))
@@ -75,6 +77,9 @@ class EnvironmentModules(Package):
'CPPFLAGS=' + ' '.join(cpp_flags)
]
+ if '~X' in spec:
+ config_args = ['--without-x'] + config_args
+
configure(*config_args)
make()
make('install')
diff --git a/var/spack/repos/builtin/packages/es/package.py b/var/spack/repos/builtin/packages/es/package.py
new file mode 100644
index 0000000000..6a73488e8f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/es/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Es(AutotoolsPackage):
+
+ """Es is an extensible shell. The language was derived from the Plan 9
+ shell, rc, and was influenced by functional programming languages,
+ such as Scheme, and the Tcl embeddable programming language. This
+ implementation is derived from Byron Rakitzis's public domain
+ implementation of rc."""
+
+ homepage = "http://wryun.github.io/es-shell/"
+ url = "https://github.com/wryun/es-shell/releases/download/v0.9.1/es-0.9.1.tar.gz"
+
+ version('0.9.1', 'bf4db55b47bcc99892468b2e0aec0c9e')
+
+ depends_on('readline')
diff --git a/var/spack/repos/builtin/packages/esmf/gcc.patch b/var/spack/repos/builtin/packages/esmf/gcc.patch
new file mode 100644
index 0000000000..4b349b271f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/esmf/gcc.patch
@@ -0,0 +1,26 @@
+From 3706bf758012daebadef83d6575c477aeff9c89b Mon Sep 17 00:00:00 2001
+From: Walter Spector <wws@sgi.com>
+Date: Fri, 29 Apr 2016 12:57:16 -0700
+Subject: [PATCH] Fix a file open test in the Moab I/O code that gcc 6.1
+ noticed.
+
+---
+ src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp b/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
+index 1c44057..89e5f23 100644
+--- a/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
++++ b/src/Infrastructure/Mesh/src/Moab/io/ReadABAQUS.cpp
+@@ -105,7 +105,7 @@ void ReadABAQUS::reset()
+ ReadABAQUS::~ReadABAQUS()
+ {
+ mdbImpl->release_interface(readMeshIface);
+- if (NULL != abFile)
++ if (abFile.is_open())
+ abFile.close();
+ }
+
+--
+2.7.4
+
diff --git a/var/spack/repos/builtin/packages/esmf/mvapich2.patch b/var/spack/repos/builtin/packages/esmf/mvapich2.patch
new file mode 100644
index 0000000000..8352faae44
--- /dev/null
+++ b/var/spack/repos/builtin/packages/esmf/mvapich2.patch
@@ -0,0 +1,225 @@
+From 34de0ccf556ba75d35c9687dae5d9f666a1b2a18 Mon Sep 17 00:00:00 2001
+From: Walter Spector <wws@sgi.com>
+Date: Tue, 22 Nov 2016 10:57:53 -0800
+Subject: [PATCH] Detect and use libmpifort when available in mvaphich2
+ configurations.
+
+---
+ build_config/Darwin.absoft.default/build_rules.mk | 1 +
+ build_config/Darwin.g95.default/build_rules.mk | 1 +
+ build_config/Darwin.gfortran.default/build_rules.mk | 1 +
+ build_config/Darwin.gfortranclang.default/build_rules.mk | 1 +
+ build_config/Darwin.intel.default/build_rules.mk | 1 +
+ build_config/Darwin.nag.default/build_rules.mk | 1 +
+ build_config/Linux.absoft.default/build_rules.mk | 1 +
+ build_config/Linux.g95.default/build_rules.mk | 1 +
+ build_config/Linux.gfortran.default/build_rules.mk | 1 +
+ build_config/Linux.gfortranclang.default/build_rules.mk | 1 +
+ build_config/Linux.intel.default/build_rules.mk | 1 +
+ build_config/Linux.intelgcc.default/build_rules.mk | 1 +
+ build_config/Linux.lahey.default/build_rules.mk | 1 +
+ build_config/Linux.nag.default/build_rules.mk | 1 +
+ build_config/Linux.pgi.default/build_rules.mk | 1 +
+ scripts/libs.mvapich2f90 | 10 ++++++++++
+ 16 files changed, 25 insertions(+)
+ create mode 100755 scripts/libs.mvapich2f90
+
+diff --git a/build_config/Darwin.absoft.default/build_rules.mk b/build_config/Darwin.absoft.default/build_rules.mk
+index 059ff82..88a95fe 100644
+--- a/build_config/Darwin.absoft.default/build_rules.mk
++++ b/build_config/Darwin.absoft.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Darwin.g95.default/build_rules.mk b/build_config/Darwin.g95.default/build_rules.mk
+index 9789b26..a7bf89c 100644
+--- a/build_config/Darwin.g95.default/build_rules.mk
++++ b/build_config/Darwin.g95.default/build_rules.mk
+@@ -54,6 +54,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Darwin.gfortran.default/build_rules.mk b/build_config/Darwin.gfortran.default/build_rules.mk
+index 96a2a4f..2e05248 100644
+--- a/build_config/Darwin.gfortran.default/build_rules.mk
++++ b/build_config/Darwin.gfortran.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Darwin.gfortranclang.default/build_rules.mk b/build_config/Darwin.gfortranclang.default/build_rules.mk
+index da52f08..cf90636 100644
+--- a/build_config/Darwin.gfortranclang.default/build_rules.mk
++++ b/build_config/Darwin.gfortranclang.default/build_rules.mk
+@@ -56,6 +56,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Darwin.intel.default/build_rules.mk b/build_config/Darwin.intel.default/build_rules.mk
+index f6593f1..b851691 100644
+--- a/build_config/Darwin.intel.default/build_rules.mk
++++ b/build_config/Darwin.intel.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Darwin.nag.default/build_rules.mk b/build_config/Darwin.nag.default/build_rules.mk
+index 4ee8689..1dd172d 100644
+--- a/build_config/Darwin.nag.default/build_rules.mk
++++ b/build_config/Darwin.nag.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.absoft.default/build_rules.mk b/build_config/Linux.absoft.default/build_rules.mk
+index 7a2314e..43231c9 100644
+--- a/build_config/Linux.absoft.default/build_rules.mk
++++ b/build_config/Linux.absoft.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.g95.default/build_rules.mk b/build_config/Linux.g95.default/build_rules.mk
+index 5f45593..5d71e59 100644
+--- a/build_config/Linux.g95.default/build_rules.mk
++++ b/build_config/Linux.g95.default/build_rules.mk
+@@ -54,6 +54,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.gfortran.default/build_rules.mk b/build_config/Linux.gfortran.default/build_rules.mk
+index 47b55de..2954eab 100644
+--- a/build_config/Linux.gfortran.default/build_rules.mk
++++ b/build_config/Linux.gfortran.default/build_rules.mk
+@@ -61,6 +61,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.gfortranclang.default/build_rules.mk b/build_config/Linux.gfortranclang.default/build_rules.mk
+index 4c58349..6a68841 100644
+--- a/build_config/Linux.gfortranclang.default/build_rules.mk
++++ b/build_config/Linux.gfortranclang.default/build_rules.mk
+@@ -64,6 +64,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.intel.default/build_rules.mk b/build_config/Linux.intel.default/build_rules.mk
+index abb2873..55dd61a 100644
+--- a/build_config/Linux.intel.default/build_rules.mk
++++ b/build_config/Linux.intel.default/build_rules.mk
+@@ -60,6 +60,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.intelgcc.default/build_rules.mk b/build_config/Linux.intelgcc.default/build_rules.mk
+index 7c0e5c9..135c822 100644
+--- a/build_config/Linux.intelgcc.default/build_rules.mk
++++ b/build_config/Linux.intelgcc.default/build_rules.mk
+@@ -60,6 +60,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.lahey.default/build_rules.mk b/build_config/Linux.lahey.default/build_rules.mk
+index 9959bda..7a83264 100644
+--- a/build_config/Linux.lahey.default/build_rules.mk
++++ b/build_config/Linux.lahey.default/build_rules.mk
+@@ -57,6 +57,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ ESMF_F90DEFAULT = mpif90
+ ESMF_F90LINKERDEFAULT = mpicxx
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.nag.default/build_rules.mk b/build_config/Linux.nag.default/build_rules.mk
+index 0fd6435..41a7e60 100644
+--- a/build_config/Linux.nag.default/build_rules.mk
++++ b/build_config/Linux.nag.default/build_rules.mk
+@@ -53,6 +53,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/build_config/Linux.pgi.default/build_rules.mk b/build_config/Linux.pgi.default/build_rules.mk
+index f6380b1..052a1cb 100644
+--- a/build_config/Linux.pgi.default/build_rules.mk
++++ b/build_config/Linux.pgi.default/build_rules.mk
+@@ -80,6 +80,7 @@ ifeq ($(ESMF_COMM),mvapich2)
+ # Mvapich2 ---------------------------------------------------
+ ESMF_F90DEFAULT = mpif90
+ ESMF_CXXDEFAULT = mpicxx
++ESMF_CXXLINKLIBS += $(shell $(ESMF_DIR)/scripts/libs.mvapich2f90)
+ ESMF_MPIRUNDEFAULT = mpirun $(ESMF_MPILAUNCHOPTIONS)
+ ESMF_MPIMPMDRUNDEFAULT = mpiexec $(ESMF_MPILAUNCHOPTIONS)
+ else
+diff --git a/scripts/libs.mvapich2f90 b/scripts/libs.mvapich2f90
+new file mode 100755
+index 0000000..e4b6f27
+--- /dev/null
++++ b/scripts/libs.mvapich2f90
+@@ -0,0 +1,10 @@
++#!/bin/sh
++# this scripts determines the correct MVAPICH2 Fortran bindings library to
++# use when mpicxx is used for linking. If libmpifort, use it.
++PATHEXE=`which mpicxx`
++MVAPICH2_LIBDIR=`dirname ${PATHEXE}`/../lib*
++ls -1 ${MVAPICH2_LIBDIR} | grep mpifort > /dev/null 2>&1
++if [ $? = 0 ]; then
++ echo -lmpifort;
++fi
++
+--
+2.7.4
+
diff --git a/var/spack/repos/builtin/packages/esmf/package.py b/var/spack/repos/builtin/packages/esmf/package.py
new file mode 100644
index 0000000000..394e316751
--- /dev/null
+++ b/var/spack/repos/builtin/packages/esmf/package.py
@@ -0,0 +1,256 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Esmf(MakefilePackage):
+ """The Earth System Modeling Framework (ESMF) is high-performance, flexible
+ software infrastructure for building and coupling weather, climate, and
+ related Earth science applications. The ESMF defines an architecture for
+ composing complex, coupled modeling systems and includes data structures
+ and utilities for developing individual models."""
+
+ homepage = "https://www.earthsystemcog.org/projects/esmf/"
+ url = "http://www.earthsystemmodeling.org/esmf_releases/non_public/ESMF_7_0_1/esmf_7_0_1_src.tar.gz"
+
+ version('7.0.1', 'd3316ea79b032b8fb0cd40e5868a0261')
+
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('lapack', default=True, description='Build with LAPACK support')
+ variant('netcdf', default=True, description='Build with NetCDF support')
+ variant('pnetcdf', default=True, description='Build with pNetCDF support')
+ variant('xerces', default=True, description='Build with Xerces support')
+ variant('pio', default=True, description='Enable ParallelIO support')
+ variant('debug', default=False, description='Make a debuggable version of the library')
+
+ # Required dependencies
+ depends_on('zlib')
+ depends_on('libxml2')
+
+ # Optional dependencies
+ depends_on('mpi', when='+mpi')
+ depends_on('lapack@3:', when='+lapack')
+ depends_on('netcdf@3.6:', when='+netcdf')
+ depends_on('netcdf-fortran@3.6:', when='+netcdf')
+ depends_on('parallel-netcdf@1.2.0:', when='+pnetcdf')
+ depends_on('xerces-c@3.1.0:', when='+xerces')
+
+ # Testing dependencies
+ # depends_on('perl', type='test') # TODO: Add a test deptype
+
+ # Make esmf build with newer gcc versions
+ # https://sourceforge.net/p/esmf/esmf/ci/3706bf758012daebadef83d6575c477aeff9c89b/
+ patch('gcc.patch', when='@:7.0.99 %gcc@6:')
+
+ # Fix undefined reference errors with mvapich2
+ # https://sourceforge.net/p/esmf/esmf/ci/34de0ccf556ba75d35c9687dae5d9f666a1b2a18/
+ patch('mvapich2.patch', when='@:7.0.99')
+
+ # Make script from mvapich2.patch executable
+ @run_before('build')
+ @when('@:7.0.99')
+ def chmod_scripts(self):
+ chmod = which('chmod')
+ chmod('+x', 'scripts/libs.mvapich2f90')
+
+ def url_for_version(self, version):
+ return "http://www.earthsystemmodeling.org/esmf_releases/non_public/ESMF_{0}/esmf_{0}_src.tar.gz".format(version.underscored)
+
+ def edit(self, spec, prefix):
+ # Installation instructions can be found at:
+ # http://www.earthsystemmodeling.org/esmf_releases/last_built/ESMF_usrdoc/node9.html
+
+ # Unset any environment variables that may influence the installation.
+ for var in os.environ:
+ if var.startswith('ESMF_'):
+ os.environ.pop(var)
+
+ ######################################
+ # Build and Installation Directories #
+ ######################################
+
+ # The environment variable ESMF_DIR must be set to the full pathname
+ # of the top level ESMF directory before building the framework.
+ os.environ['ESMF_DIR'] = os.getcwd()
+
+ # This variable specifies the prefix of the installation path used
+ # with the install target.
+ os.environ['ESMF_INSTALL_PREFIX'] = prefix
+
+ # Installation subdirectories default to:
+ # bin/binO/Linux.gfortran.64.default.default
+ os.environ['ESMF_INSTALL_BINDIR'] = 'bin'
+ os.environ['ESMF_INSTALL_LIBDIR'] = 'lib'
+ os.environ['ESMF_INSTALL_MODDIR'] = 'mod'
+
+ ############
+ # Compiler #
+ ############
+
+ # ESMF_COMPILER must be set to select which Fortran and
+ # C++ compilers are being used to build the ESMF library.
+ if self.compiler.name == 'gcc':
+ os.environ['ESMF_COMPILER'] = 'gfortran'
+ elif self.compiler.name == 'intel':
+ os.environ['ESMF_COMPILER'] = 'intel'
+ elif self.compiler.name == 'clang':
+ os.environ['ESMF_COMPILER'] = 'gfortranclang'
+ elif self.compiler.name == 'nag':
+ os.environ['ESMF_COMPILER'] = 'nag'
+ elif self.compiler.name == 'pgi':
+ os.environ['ESMF_COMPILER'] = 'pgi'
+ else:
+ msg = "The compiler you are building with, "
+ msg += "'{0}', is not supported by ESMF."
+ raise InstallError(msg.format(self.compiler.name))
+
+ if '+mpi' in spec:
+ os.environ['ESMF_CXX'] = spec['mpi'].mpicxx
+ os.environ['ESMF_F90'] = spec['mpi'].mpifc
+ else:
+ os.environ['ESMF_CXX'] = os.environ['CXX']
+ os.environ['ESMF_F90'] = os.environ['FC']
+
+ # This environment variable controls the build option.
+ if '+debug' in spec:
+ # Build a debuggable version of the library.
+ os.environ['ESMF_BOPT'] = 'g'
+ else:
+ # Build an optimized version of the library.
+ os.environ['ESMF_BOPT'] = 'O'
+
+ #######
+ # MPI #
+ #######
+
+ # ESMF_COMM must be set to indicate which MPI implementation
+ # is used to build the ESMF library.
+ if '+mpi' in spec:
+ if '^mvapich2' in spec:
+ os.environ['ESMF_COMM'] = 'mvapich2'
+ elif '^mpich' in spec:
+ # FIXME: mpich or mpich2?
+ os.environ['ESMF_COMM'] = 'mpich2'
+ elif '^openmpi' in spec:
+ os.environ['ESMF_COMM'] = 'openmpi'
+ elif '^intel-parallel-studio+mpi' in spec:
+ os.environ['ESMF_COMM'] = 'intelmpi'
+ else:
+ # Force use of the single-processor MPI-bypass library.
+ os.environ['ESMF_COMM'] = 'mpiuni'
+
+ ##########
+ # LAPACK #
+ ##########
+
+ if '+lapack' in spec:
+ # A system-dependent external LAPACK/BLAS installation is used
+ # to satisfy the external dependencies of the LAPACK-dependent
+ # ESMF code.
+ os.environ['ESMF_LAPACK'] = 'system'
+
+ # FIXME: determine whether or not we need to set this
+ # Specifies the path where the LAPACK library is located.
+ # os.environ['ESMF_LAPACK_LIBPATH'] = spec['lapack'].prefix.lib
+
+ # Specifies the linker directive needed to link the LAPACK library
+ # to the application.
+ os.environ['ESMF_LAPACK_LIBS'] = spec['lapack'].libs.link_flags # noqa
+ else:
+ # Disables LAPACK-dependent code.
+ os.environ['ESMF_LAPACK'] = 'OFF'
+
+ ##########
+ # NetCDF #
+ ##########
+
+ if '+netcdf' in spec:
+ # ESMF provides the ability to read Grid and Mesh data in
+ # NetCDF format.
+ if spec.satisfies('^netcdf@4.2:'):
+ # ESMF_NETCDF_LIBS will be set to "-lnetcdff -lnetcdf".
+ # This option is useful for systems which have the Fortran
+ # and C bindings archived in seperate library files.
+ os.environ['ESMF_NETCDF'] = 'split'
+ else:
+ # ESMF_NETCDF_LIBS will be set to "-lnetcdf".
+ # This option is useful when the Fortran and C bindings
+ # are archived together in the same library file.
+ os.environ['ESMF_NETCDF'] = 'standard'
+
+ # FIXME: determine whether or not we need to set these.
+ # ESMF_NETCDF_INCLUDE
+ # ESMF_NETCDF_LIBPATH
+
+ ###################
+ # Parallel-NetCDF #
+ ###################
+
+ if '+pnetcdf' in spec:
+ # ESMF provides the ability to write Mesh weights
+ # using Parallel-NetCDF.
+
+ # When defined, enables the use of Parallel-NetCDF.
+ # ESMF_PNETCDF_LIBS will be set to "-lpnetcdf".
+ os.environ['ESMF_PNETCDF'] = 'standard'
+
+ # FIXME: determine whether or not we need to set these.
+ # ESMF_PNETCDF_INCLUDE
+ # ESMF_PNETCDF_LIBPATH
+
+ ##############
+ # ParallelIO #
+ ##############
+
+ if '+pio' in spec and '+mpi' in spec:
+ # ESMF provides the ability to read and write data in both binary
+ # and NetCDF formats through ParallelIO (PIO), a third-party IO
+ # software library that is integrated in the ESMF library.
+
+ # PIO-dependent features will be enabled and will use the
+ # PIO library that is included and built with ESMF.
+ os.environ['ESMF_PIO'] = 'internal'
+ else:
+ # Disables PIO-dependent code.
+ os.environ['ESMF_PIO'] = 'OFF'
+
+ ##########
+ # XERCES #
+ ##########
+
+ if '+xerces' in spec:
+ # ESMF provides the ability to read Attribute data in
+ # XML file format via the XERCES C++ library.
+
+ # ESMF_XERCES_LIBS will be set to "-lxerces-c".
+ os.environ['ESMF_XERCES'] = 'standard'
+
+ # FIXME: determine if the following are needed
+ # ESMF_XERCES_INCLUDE
+ # ESMF_XERCES_LIBPATH
+
+ def check(self):
+ make('check', parallel=False)
diff --git a/var/spack/repos/builtin/packages/espresso/dspev_drv_elpa.patch b/var/spack/repos/builtin/packages/espresso/dspev_drv_elpa.patch
new file mode 100644
index 0000000000..153bcf2ef5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/espresso/dspev_drv_elpa.patch
@@ -0,0 +1,42 @@
+diff -ruN LAXlib-orig/dspev_drv.f90 LAXlib/dspev_drv.f90
+--- a/LAXlib/dspev_drv.f90 2017-06-12 15:00:46.157372185 +0200
++++ b/LAXlib/dspev_drv.f90 2017-06-12 15:01:19.937371580 +0200
+@@ -708,11 +708,11 @@
+
+ #if defined(__ELPA_2016)
+ ! -> ELPA 2016.11.001_pre
+- ierr = elpa_get_communicators(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+- success = solve_evp_real_1stage(n, n, s, lds, w, vv, lds,SIZE(s,2),nb ,mpi_comm_rows, mpi_comm_cols, ortho_comm)
++ !ierr = elpa_get_communicators(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
++ !success = solve_evp_real_1stage(n, n, s, lds, w, vv, lds,SIZE(s,2),nb ,mpi_comm_rows, mpi_comm_cols, ortho_comm)
+ ! -> ELPA 2016.05.003
+- !ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+- !success = solve_evp_real_1stage(n, n, s, lds, w, vv, lds,SIZE(s,2),nb ,mpi_comm_rows, mpi_comm_cols)
++ ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
++ success = solve_evp_real_1stage(n, n, s, lds, w, vv, lds,SIZE(s,2),nb ,mpi_comm_rows, mpi_comm_cols)
+ #elif defined(__ELPA_2015)
+ ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+ ierr = solve_evp_real(n, n, s, lds, w, vv, lds,SIZE(s,2),nb ,mpi_comm_rows, mpi_comm_cols)
+diff -ruN LAXlib-orig/zhpev_drv.f90 LAXlib/zhpev_drv.f90
+--- a/LAXlib/zhpev_drv.f90 2017-06-12 15:00:46.157372185 +0200
++++ b/LAXlib/zhpev_drv.f90 2017-06-12 15:02:09.309370696 +0200
+@@ -1519,13 +1519,13 @@
+
+ #if defined(__ELPA_2016)
+ ! -> ELPA 2016.11.001_pre
+- ierr = elpa_get_communicators(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+- success = solve_evp_complex_1stage_double(n, n, h, size(h,1), w, v, size(h,1), size(h,2), nb, &
+- mpi_comm_rows, mpi_comm_cols, ortho_comm)
++ !ierr = elpa_get_communicators(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
++ !success = solve_evp_complex_1stage_double(n, n, h, size(h,1), w, v, size(h,1), size(h,2), nb, &
++ ! mpi_comm_rows, mpi_comm_cols, ortho_comm)
+ ! -> ELPA 2016.05.003
+- !ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+- !success = solve_evp_complex(n, n, h, size(h,1), w, v, size(h,1), size(h,2), nb, &
+- ! mpi_comm_rows, mpi_comm_cols)
++ ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
++ success = solve_evp_complex(n, n, h, size(h,1), w, v, size(h,1), size(h,2), nb, &
++ mpi_comm_rows, mpi_comm_cols)
+ #elif defined(__ELPA_2015)
+ ierr = get_elpa_row_col_comms(ortho_comm, my_prow, my_pcol,mpi_comm_rows, mpi_comm_cols)
+ ierr = solve_evp_complex(n, n, h, size(h,1), w, v, size(h,1), size(h,2), nb, &
diff --git a/var/spack/repos/builtin/packages/espresso/package.py b/var/spack/repos/builtin/packages/espresso/package.py
index d2c825513c..23014710a1 100644
--- a/var/spack/repos/builtin/packages/espresso/package.py
+++ b/var/spack/repos/builtin/packages/espresso/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,21 +22,29 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import glob
+import os.path
+
from spack import *
-import os
class Espresso(Package):
- """QE is an integrated suite of Open-Source computer codes for
- electronic-structure calculations and materials modeling at
- the nanoscale. It is based on density-functional theory, plane
- waves, and pseudopotentials.
+ """Quantum-ESPRESSO is an integrated suite of Open-Source computer codes
+ for electronic-structure calculations and materials modeling at the
+ nanoscale. It is based on density-functional theory, plane waves, and
+ pseudopotentials.
"""
homepage = 'http://quantum-espresso.org'
url = 'http://www.qe-forge.org/gf/download/frsrelease/204/912/espresso-5.3.0.tar.gz'
version(
+ '6.1.0',
+ 'db398edcad76e085f8c8a3f6ecb7aaab',
+ url='http://www.qe-forge.org/gf/download/frsrelease/240/1075/qe-6.1.tar.gz'
+ )
+
+ version(
'5.4.0',
'8bb78181b39bd084ae5cb7a512c1cfe7',
url='http://www.qe-forge.org/gf/download/frsrelease/211/968/espresso-5.4.0.tar.gz'
@@ -48,60 +56,109 @@ class Espresso(Package):
variant('scalapack', default=True, description='Enables scalapack support')
variant('elpa', default=True, description='Uses elpa as an eigenvalue solver')
+ # Support for HDF5 has been added starting in version 6.1.0 and is
+ # still experimental, therefore we default to False for the variant
+ variant('hdf5', default=False, description='Builds with HDF5 support')
+
depends_on('blas')
depends_on('lapack')
-
depends_on('mpi', when='+mpi')
- depends_on('fftw~mpi', when='~mpi')
- depends_on('fftw+mpi', when='+mpi')
- # TODO : + mpi needed to avoid false dependencies installation
depends_on('scalapack', when='+scalapack+mpi')
+ depends_on('fftw+mpi', when='+mpi')
+ depends_on('fftw~mpi', when='~mpi')
+ depends_on('elpa+openmp', when='+elpa+openmp')
+ depends_on('elpa~openmp', when='+elpa~openmp')
+ depends_on('hdf5', when='+hdf5')
+
+ patch('dspev_drv_elpa.patch', when='@6.1 ^elpa@2016.05.004')
+ patch('dspev_drv_elpa.patch', when='@6.1 ^elpa@2016.05.003')
+
+ # We can't ask for scalapack or elpa if we don't want MPI
+ conflicts(
+ '+scalapack',
+ when='~mpi',
+ msg='scalapack is a parallel library and needs MPI support'
+ )
+
+ conflicts(
+ '+elpa',
+ when='~mpi',
+ msg='elpa is a parallel library and needs MPI support'
+ )
+
+ # Elpa is formally supported by @:5.4.0, but QE configure searches
+ # for it in the wrong folders (or tries to download it within
+ # the build directory). Instead of patching Elpa to provide the
+ # folder QE expects as a link, we issue a conflict here.
+ conflicts('+elpa', when='@:5.4.0')
+ conflicts('+hdf5', when='@:5.4.0')
+
# Spurious problems running in parallel the Makefile
- # generated by qe configure
+ # generated by the configure
parallel = False
- def check_variants(self, spec):
- error = 'you cannot ask for \'+{variant}\' when \'+mpi\' is not active'
- if '+scalapack' in spec and '~mpi' in spec:
- raise RuntimeError(error.format(variant='scalapack'))
- if '+elpa' in spec and ('~mpi' in spec or '~scalapack' in spec):
- raise RuntimeError(error.format(variant='elpa'))
-
def install(self, spec, prefix):
- from glob import glob
- self.check_variants(spec)
- options = ['-prefix=%s' % prefix.bin]
+ prefix_path = prefix.bin if '@:5.4.0' in spec else prefix
+ options = ['-prefix={0}'.format(prefix_path)]
if '+mpi' in spec:
- options.append('--enable-parallel')
+ options.append('--enable-parallel=yes')
+ else:
+ options.append('--enable-parallel=no')
if '+openmp' in spec:
options.append('--enable-openmp')
if '+scalapack' in spec:
- options.append('--with-scalapack=yes')
+ scalapack_option = 'intel' if '^intel-mkl' in spec else 'yes'
+ options.append('--with-scalapack={0}'.format(scalapack_option))
if '+elpa' in spec:
- options.append('--with-elpa=yes')
+
+ # Spec for elpa
+ elpa = spec['elpa']
+
+ # Find where the Fortran module resides
+ elpa_module = find(elpa.prefix, 'elpa.mod')
+
+ # Compute the include directory from there: versions
+ # of espresso prior to 6.1 requires -I in front of the directory
+ elpa_include = '' if '@6.1:' in spec else '-I'
+ elpa_include += os.path.dirname(elpa_module[0])
+
+ options.extend([
+ '--with-elpa-include={0}'.format(elpa_include),
+ '--with-elpa-lib={0}'.format(elpa.libs[0])
+ ])
+
+ if '+hdf5' in spec:
+ options.append('--with-hdf5={0}'.format(spec['hdf5'].prefix))
# Add a list of directories to search
search_list = []
for dependency_spec in spec.dependencies():
- search_list.extend([dependency_spec.prefix.lib,
- dependency_spec.prefix.lib64])
+ search_list.extend([
+ dependency_spec.prefix.lib,
+ dependency_spec.prefix.lib64
+ ])
search_list = " ".join(search_list)
- options.append('LIBDIRS=%s' % search_list)
- options.append('F90=%s' % os.environ['FC'])
+
+ options.extend([
+ 'LIBDIRS={0}'.format(search_list),
+ 'F90={0}'.format(env['SPACK_FC']),
+ 'CC={0}'.format(env['SPACK_CC'])
+ ])
configure(*options)
+
make('all')
- if spec.satisfies('platform=darwin'):
+ if 'platform=darwin' in spec:
mkdirp(prefix.bin)
- for filename in glob("bin/*.x"):
+ for filename in glob.glob("bin/*.x"):
install(filename, prefix.bin)
else:
make('install')
diff --git a/var/spack/repos/builtin/packages/etsf-io/package.py b/var/spack/repos/builtin/packages/etsf-io/package.py
index c1e6f2eded..dc0dac415f 100644
--- a/var/spack/repos/builtin/packages/etsf-io/package.py
+++ b/var/spack/repos/builtin/packages/etsf-io/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/everytrace-example/package.py b/var/spack/repos/builtin/packages/everytrace-example/package.py
index 76b437a38a..cedcd684fc 100644
--- a/var/spack/repos/builtin/packages/everytrace-example/package.py
+++ b/var/spack/repos/builtin/packages/everytrace-example/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,5 +38,5 @@ class EverytraceExample(CMakePackage):
# Currently the only MPI this everytrace works with.
depends_on('openmpi')
- def setup_environment(self, spack_env, env):
- env.prepend_path('PATH', join_path(self.prefix, 'bin'))
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', join_path(self.prefix, 'bin'))
diff --git a/var/spack/repos/builtin/packages/everytrace/package.py b/var/spack/repos/builtin/packages/everytrace/package.py
index d884c7b165..96813672ad 100644
--- a/var/spack/repos/builtin/packages/everytrace/package.py
+++ b/var/spack/repos/builtin/packages/everytrace/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -47,5 +47,5 @@ class Everytrace(CMakePackage):
'-DUSE_MPI=%s' % ('YES' if '+mpi' in spec else 'NO'),
'-DUSE_FORTRAN=%s' % ('YES' if '+fortran' in spec else 'NO')]
- def setup_environment(self, spack_env, env):
- env.prepend_path('PATH', join_path(self.prefix, 'bin'))
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', join_path(self.prefix, 'bin'))
diff --git a/var/spack/repos/builtin/packages/evieext/package.py b/var/spack/repos/builtin/packages/evieext/package.py
index afc0245f50..a88764516e 100644
--- a/var/spack/repos/builtin/packages/evieext/package.py
+++ b/var/spack/repos/builtin/packages/evieext/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Evieext(Package):
+class Evieext(AutotoolsPackage):
"""Extended Visual Information Extension (XEVIE).
This extension defines a protocol for a client to determine information
@@ -38,8 +38,3 @@ class Evieext(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/exabayes/package.py b/var/spack/repos/builtin/packages/exabayes/package.py
new file mode 100644
index 0000000000..1529261397
--- /dev/null
+++ b/var/spack/repos/builtin/packages/exabayes/package.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/spack/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 Exabayes(AutotoolsPackage):
+ """ExaBayes is a software package for Bayesian tree inference. It is
+ particularly suitable for large-scale analyses on computer clusters."""
+
+ homepage = "https://sco.h-its.org/exelixis/web/software/exabayes/"
+ url = "https://sco.h-its.org/exelixis/resource/download/software/exabayes-1.5.tar.gz"
+
+ version('1.5', '6a734777b8f8eff0a520306500c8c419')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+
+ depends_on('mpi', when='+mpi')
+
+ # ExaBayes manual states the program succesfully compiles with GCC, version
+ # 4.6 or greater, and Clang, version 3.2 or greater. The build fails when
+ # GCC 7.1.0 is used.
+ conflicts('%gcc@:4.5.4, 7.1.0:')
+ conflicts('%clang@:3.1')
+ conflicts('^intel-mpi', when='+mpi')
+ conflicts('^intel-parallel-studio+mpi', when='+mpi')
+ conflicts('^mvapich2', when='+mpi')
+ conflicts('^spectrum-mpi', when='+mpi')
+
+ def configure_args(self):
+ args = []
+ if '+mpi' in self.spec:
+ args.append('--enable-mpi')
+ else:
+ args.append('--disable-mpi')
+ return args
diff --git a/var/spack/repos/builtin/packages/exampm/package.py b/var/spack/repos/builtin/packages/exampm/package.py
new file mode 100644
index 0000000000..eba2fbc442
--- /dev/null
+++ b/var/spack/repos/builtin/packages/exampm/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Exampm(CMakePackage):
+ """Exascale Material Point Method (MPM) Mini-App"""
+
+ homepage = "https://github.com/ECP-copa/ExaMPM"
+ url = "https://github.com/ECP-copa/ExaMPM"
+
+ version('develop', git='https://github.com/ECP-copa/ExaMPM',
+ branch='master')
+
+ tags = ['proxy-app']
diff --git a/var/spack/repos/builtin/packages/exasp2/package.py b/var/spack/repos/builtin/packages/exasp2/package.py
new file mode 100644
index 0000000000..aac5419893
--- /dev/null
+++ b/var/spack/repos/builtin/packages/exasp2/package.py
@@ -0,0 +1,94 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Exasp2(MakefilePackage):
+ """ExaSP2 is a reference implementation of typical linear algebra algorithms
+ and workloads for a quantum molecular dynamics (QMD) electronic structure
+ code. The algorithm is based on a recursive second-order Fermi-Operator
+ expansion method (SP2) and is tailored for density functional based
+ tight-binding calculations of material systems. The SP2 algorithm variants
+ are part of the Los Alamos Transferable Tight-binding for Energetics
+ (LATTE) code, based on a matrix expansion of the Fermi operator in a
+ recursive series of generalized matrix-matrix multiplications. It is
+ created and maintained by Co-Design Center for Particle Applications
+ (CoPA). The code is intended to serve as a vehicle for co-design by
+ allowing others to extend and/or reimplement as needed to test performance
+ of new architectures, programming models, etc."""
+
+ tags = ['proxy-app']
+
+ homepage = "https://github.com/ECP-copa/ExaSP2"
+
+ version('develop', git='https://github.com/ECP-copa/ExaSP2',
+ branch='master')
+
+ variant('mpi', default=True, description='Build With MPI Support')
+
+ depends_on('bml')
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('mpi', when='+mpi')
+ depends_on('bml@1.2.3:+mpi', when='+mpi')
+
+ build_directory = 'src'
+
+ @property
+ def build_targets(self):
+ targets = []
+ spec = self.spec
+ if '+mpi' in spec:
+ targets.append('PARALLEL=MPI')
+ targets.append('MPICC={0}'.format(spec['mpi'].mpicc))
+ targets.append('MPI_LIB=-L' + spec['mpi'].prefix.lib + ' -lmpi')
+ targets.append('MPI_INCLUDE=-I' + spec['mpi'].prefix.include)
+ else:
+ targets.append('PARALLEL=NONE')
+ # NOTE: no blas except for mkl has been properly tested. OpenBlas was
+ # briefly but not rigoruously tested. Using generic blas approach to
+ # meet Spack requirements
+ targets.append('BLAS=GENERIC_SPACKBLAS')
+ math_libs = str(spec['lapack'].libs)
+ math_libs += ' ' + str(spec['lapack'].libs)
+ targets.append('SPACKBLASLIBFLAGS=' + math_libs)
+ math_includes = spec['lapack'].prefix.include
+ math_includes += " -I" + spec['blas'].prefix.include
+ targets.append('SPACKBLASINCLUDES=' + math_includes)
+ # And BML
+ bmlLibDirs = spec['bml'].libs.directories[0]
+ targets.append('BML_PATH=' + bmlLibDirs)
+ targets.append('--file=Makefile.vanilla')
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ mkdir(prefix.doc)
+ if '+mpi' in self.spec:
+ install('bin/ExaSP2-parallel', prefix.bin)
+ else:
+ install('bin/ExaSP2-serial', prefix.bin)
+ install('LICENSE.md', prefix.doc)
+ install('README.md', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/exmcutils/package.py b/var/spack/repos/builtin/packages/exmcutils/package.py
new file mode 100644
index 0000000000..02010deaf3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/exmcutils/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Exmcutils(AutotoolsPackage):
+ """ExM C-Utils: Generic C utility library for ADLB/X and Swift/T"""
+
+ homepage = 'http://swift-lang.org/Swift-T'
+ url = 'http://swift-lang.github.io/swift-t-downloads/exmcutils-0.5.3.tar.gz'
+
+ version('0.5.3', '0e3ed6cc2991c684cd8f08db45c99a39')
+
+ # This package has no dependencies.
diff --git a/var/spack/repos/builtin/packages/exodusii/cmake-exodus.patch b/var/spack/repos/builtin/packages/exodusii/cmake-exodus.patch
deleted file mode 100644
index 014381de88..0000000000
--- a/var/spack/repos/builtin/packages/exodusii/cmake-exodus.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff --git a/cmake-exodus b/cmake-exodus
-index 67ccd34..9b749e3 100755
---- a/cmake-exodus
-+++ b/cmake-exodus
-@@ -1,3 +1,4 @@
-+#!/bin/bash
- EXTRA_ARGS=$@
-
- ### The following assumes you are building in a subdirectory of ACCESS Root
diff --git a/var/spack/repos/builtin/packages/exodusii/package.py b/var/spack/repos/builtin/packages/exodusii/package.py
index 67024673b2..d74137533c 100644
--- a/var/spack/repos/builtin/packages/exodusii/package.py
+++ b/var/spack/repos/builtin/packages/exodusii/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,11 +27,8 @@ from spack import *
# TODO: Add support for a C++11 enabled installation that filters out the
# TODO: "C++11-Disabled" flag (but only if the spec compiler supports C++11).
-# TODO: Use variant forwarding to forward the 'mpi' variant to the direct
-# TODO: dependencies 'hdf5' and 'netcdf'.
-
-class Exodusii(Package):
+class Exodusii(CMakePackage):
"""Exodus II is a C++/Fortran library developed to store and retrieve
data for finite element analyses. It's used for preprocessing
(problem definition), postprocessing (results visualization), and
@@ -52,18 +49,25 @@ class Exodusii(Package):
depends_on('mpi', when='+mpi')
# https://github.com/gsjaardema/seacas/blob/master/NetCDF-Mapping.md
- depends_on('netcdf maxdims=65536 maxvars=524288')
- depends_on('hdf5+shared')
+ depends_on('netcdf+mpi maxdims=65536 maxvars=524288', when='+mpi')
+ depends_on('netcdf~mpi maxdims=65536 maxvars=524288', when='~mpi')
+ depends_on('hdf5+shared+mpi', when='+mpi')
+ depends_on('hdf5+shared~mpi', when='~mpi')
- patch('cmake-exodus.patch')
+ def cmake_args(self):
+ spec = self.spec
- def install(self, spec, prefix):
cc_path = spec['mpi'].mpicc if '+mpi' in spec else self.compiler.cc
cxx_path = spec['mpi'].mpicxx if '+mpi' in spec else self.compiler.cxx
- config_args = std_cmake_args[:]
- config_args.extend([
+ options = [
# General Flags #
+ '-DSEACASProj_ENABLE_SEACASExodus=ON',
+ '-DSEACASProj_ENABLE_TESTS=ON',
+ '-DBUILD_SHARED_LIBS:BOOL=ON',
+ '-DTPL_ENABLE_Netcdf:BOOL=ON',
+ '-DHDF5_NO_SYSTEM_PATHS=ON',
+ '-DSEACASProj_SKIP_FORTRANCINTERFACE_VERIFY_TEST:BOOL=ON',
'-DSEACASProj_ENABLE_CXX11:BOOL=OFF',
'-DSEACASProj_ENABLE_Zoltan:BOOL=OFF',
'-DHDF5_ROOT:PATH={0}'.format(spec['hdf5'].prefix),
@@ -73,14 +77,6 @@ class Exodusii(Package):
'-DTPL_ENABLE_MPI={0}'.format('ON' if '+mpi' in spec else 'OFF'),
'-DCMAKE_C_COMPILER={0}'.format(cc_path),
'-DCMAKE_CXX_COMPILER={0}'.format(cxx_path),
- ])
-
- build_directory = join_path(self.stage.source_path, 'spack-build')
- source_directory = self.stage.source_path
-
- with working_dir(build_directory, create=True):
- mcmake = Executable(join_path(source_directory, 'cmake-exodus'))
- mcmake(*config_args)
+ ]
- make()
- make('install')
+ return options
diff --git a/var/spack/repos/builtin/packages/exonerate/package.py b/var/spack/repos/builtin/packages/exonerate/package.py
index 7921e64058..2dae693b72 100644
--- a/var/spack/repos/builtin/packages/exonerate/package.py
+++ b/var/spack/repos/builtin/packages/exonerate/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class Exonerate(Package):
"""Pairwise sequence alignment of DNA and proteins"""
homepage = "http://www.ebi.ac.uk/about/vertebrate-genomics/software/exonerate"
- url = "http://ftp.ebi.ac.uk/pub/software/vertebrategenomics/exonerate/exonerate-2.2.0.tar.gz"
+ url = "http://ftp.ebi.ac.uk/pub/software/vertebrategenomics/exonerate/exonerate-2.4.0.tar.gz"
version('2.4.0', '126fbade003b80b663a1d530c56f1904')
diff --git a/var/spack/repos/builtin/packages/expat/package.py b/var/spack/repos/builtin/packages/expat/package.py
index 13ac816ea5..a4ca544e57 100644
--- a/var/spack/repos/builtin/packages/expat/package.py
+++ b/var/spack/repos/builtin/packages/expat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,11 +23,33 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
class Expat(AutotoolsPackage):
"""Expat is an XML parser library written in C."""
+
homepage = "http://expat.sourceforge.net/"
- url = "http://downloads.sourceforge.net/project/expat/expat/2.2.0/expat-2.2.0.tar.bz2"
+ url = "https://sourceforge.net/projects/expat/files/expat/2.2.2/expat-2.2.2.tar.bz2"
+
+ # Version 2.2.2 introduced a requirement for a high quality
+ # entropy source. "Older" linux systems (aka CentOS 7) do not
+ # support get_random so we'll provide a high quality source via
+ # libbsd.
+ # There's no need for it in earlier versions, so 'conflict' if
+ # someone's asking for an older version and also libbsd.
+ # In order to install an older version, you'll need to add
+ # `~libbsd`.
+ variant('libbsd', default=sys.platform != 'darwin',
+ description="Use libbsd (for high quality randomness)")
+ depends_on('libbsd', when="@2.2.1:+libbsd")
+ version('2.2.2', '1ede9a41223c78528b8c5d23e69a2667')
version('2.2.0', '2f47841c829facb346eb6e3fab5212e2')
+
+ def configure_args(self):
+ spec = self.spec
+ args = []
+ if '+libbsd' in spec and '@2.2.1:' in spec:
+ args = ['--with-libbsd']
+ return args
diff --git a/var/spack/repos/builtin/packages/expect/expect_detect_tcl_private_header_os_x_mountain_lion.patch b/var/spack/repos/builtin/packages/expect/expect_detect_tcl_private_header_os_x_mountain_lion.patch
new file mode 100644
index 0000000000..31720eb743
--- /dev/null
+++ b/var/spack/repos/builtin/packages/expect/expect_detect_tcl_private_header_os_x_mountain_lion.patch
@@ -0,0 +1,23 @@
+Fix Tcl private header detection on macOS
+
+https://sourceforge.net/p/expect/patches/17/
+
+diff -Naur expect5.45.orig/tclconfig/tcl.m4 expect5.45/tclconfig/tcl.m4
+--- expect5.45.orig/tclconfig/tcl.m4 2010-11-09 11:42:10.000000000 -0800
++++ expect5.45/tclconfig/tcl.m4 2013-09-23 00:10:00.000000000 -0700
+@@ -3389,9 +3389,12 @@
+ # the framework's Headers and PrivateHeaders directories
+ case ${TCL_DEFS} in
+ *TCL_FRAMEWORK*)
+- if test -d "${TCL_BIN_DIR}/Headers" -a \
+- -d "${TCL_BIN_DIR}/PrivateHeaders"; then
+- TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
++ if test -d "${TCL_BIN_DIR}/Headers"; then
++ if test -d "${TCL_BIN_DIR}/PrivateHeaders"; then
++ TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/PrivateHeaders\" ${TCL_INCLUDES}"
++ elif test -d "${TCL_BIN_DIR}/Headers/tcl-private"; then
++ TCL_INCLUDES="-I\"${TCL_BIN_DIR}/Headers\" -I\"${TCL_BIN_DIR}/Headers/tcl-private\" ${TCL_INCLUDES}"
++ fi
+ else
+ TCL_INCLUDES="${TCL_INCLUDES} ${TCL_INCLUDE_SPEC} `echo "${TCL_INCLUDE_SPEC}" | sed -e 's/Headers/PrivateHeaders/'`"
+ fi
diff --git a/var/spack/repos/builtin/packages/expect/package.py b/var/spack/repos/builtin/packages/expect/package.py
new file mode 100644
index 0000000000..786539d025
--- /dev/null
+++ b/var/spack/repos/builtin/packages/expect/package.py
@@ -0,0 +1,79 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+import os
+
+
+class Expect(AutotoolsPackage):
+ """Expect is a tool for automating interactive applications such as
+ telnet, ftp, passwd, fsck, rlogin, tip, etc."""
+
+ homepage = "http://expect.sourceforge.net/"
+ url = "https://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download"
+
+ version('5.45', '44e1a4f4c877e9ddc5a542dfa7ecc92b')
+
+ depends_on('tcl')
+
+ depends_on('automake', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ force_autoreconf = True
+
+ patch('expect_detect_tcl_private_header_os_x_mountain_lion.patch', when='@5.45')
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ # Without this, expect binary and library are not installed
+ '--exec-prefix={0}'.format(self.prefix),
+ '--enable-threads',
+ '--enable-shared',
+ '--enable-64bit',
+ '--with-tcl={0}'.format(spec['tcl'].prefix.lib),
+ '--with-tclinclude={0}'.format(spec['tcl'].prefix.include),
+ ]
+
+ return args
+
+ @run_after('install')
+ def symlink_library(self):
+ """Expect installs libraries into:
+
+ lib/expect5.45/libexpect5.45.so
+
+ Create a symlink so that the library can be found in lib."""
+
+ target = join_path(self.prefix.lib, 'expect*', 'libexpect*')
+ target = glob.glob(target)[0]
+
+ link_name = os.path.basename(target)
+ link_name = join_path(self.prefix.lib, link_name)
+
+ symlink(target, link_name)
diff --git a/var/spack/repos/builtin/packages/extrae/package.py b/var/spack/repos/builtin/packages/extrae/package.py
index cb20a8109e..a13963655b 100644
--- a/var/spack/repos/builtin/packages/extrae/package.py
+++ b/var/spack/repos/builtin/packages/extrae/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -52,9 +52,9 @@ class Extrae(Package):
instrument the MPI programin model, and the following parallel
programming models either alone or in conjunction with MPI :
OpenMP, CUDA, OpenCL, pthread, OmpSs"""
- homepage = "http://www.bsc.es/computer-sciences/extrae"
- url = "http://www.bsc.es/ssl/apps/performanceTools/files/extrae-3.3.0.tar.bz2"
- version('3.3.0', 'f46e3f1a6086b5b3ac41c9585b42952d')
+ homepage = "https://tools.bsc.es/extrae"
+ url = "https://ftp.tools.bsc.es/extrae/extrae-3.4.1-src.tar.bz2"
+ version('3.4.1', '69001f5cfac46e445d61eeb567bc8844')
depends_on("mpi")
depends_on("dyninst")
@@ -62,8 +62,12 @@ class Extrae(Package):
depends_on("boost")
depends_on("libdwarf")
depends_on("papi")
- depends_on("libelf")
+ depends_on("elf", type="link")
depends_on("libxml2")
+
+ # gettext dependency added to find -lintl
+ # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
+ depends_on("gettext")
depends_on("binutils+libiberty")
def install(self, spec, prefix):
@@ -74,6 +78,16 @@ class Extrae(Package):
elif 'mvapich2' in spec:
mpi = spec['mvapich2']
+ extra_config_args = []
+
+ # This was added due to configure failure
+ # https://www.gnu.org/software/gettext/FAQ.html#integrating_undefined
+ extra_config_args.append('LDFLAGS=-lintl')
+
+ if spec.satisfies("^dyninst@9.3.0:"):
+ make.add_default_arg('CXXFLAGS=-std=c++11')
+ extra_config_args.append('CXXFLAGS=-std=c++11')
+
configure("--prefix=%s" % prefix,
"--with-mpi=%s" % mpi.prefix,
"--with-unwind=%s" % spec['libunwind'].prefix,
@@ -83,10 +97,11 @@ class Extrae(Package):
"--with-papi=%s" % spec['papi'].prefix,
"--with-dyninst-headers=%s" % spec[
'dyninst'].prefix.include,
- "--with-elf=%s" % spec['libelf'].prefix,
+ "--with-elf=%s" % spec['elf'].prefix,
"--with-xml-prefix=%s" % spec['libxml2'].prefix,
"--with-binutils=%s" % spec['binutils'].prefix,
- "--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib)
+ "--with-dyninst-libs=%s" % spec['dyninst'].prefix.lib,
+ *extra_config_args)
make()
make("install", parallel=False)
diff --git a/var/spack/repos/builtin/packages/exuberant-ctags/package.py b/var/spack/repos/builtin/packages/exuberant-ctags/package.py
index 10be30ab8b..4a4f56e270 100644
--- a/var/spack/repos/builtin/packages/exuberant-ctags/package.py
+++ b/var/spack/repos/builtin/packages/exuberant-ctags/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,9 @@
from spack import *
-class ExuberantCtags(Package):
+class ExuberantCtags(AutotoolsPackage):
"""The canonical ctags generator"""
homepage = "ctags.sourceforge.net"
url = "http://downloads.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz"
version('5.8', 'c00f82ecdcc357434731913e5b48630d')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/f90cache/package.py b/var/spack/repos/builtin/packages/f90cache/package.py
new file mode 100644
index 0000000000..ff18433912
--- /dev/null
+++ b/var/spack/repos/builtin/packages/f90cache/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 F90cache(AutotoolsPackage):
+ """f90cache is a compiler cache. It acts as a caching pre-processor to
+ Fortran compilers, using the -E compiler switch and a hash to detect
+ when a compilation can be satisfied from cache. This often results in a
+ great speedup in common compilations.
+ """
+ homepage = "https://perso.univ-rennes1.fr/edouard.canot/f90cache/"
+ url = "https://perso.univ-rennes1.fr/edouard.canot/f90cache/f90cache-0.99.tar.bz2"
+
+ version('0.99', 'e4767ae876203ed4f3e118e22204cdec')
diff --git a/var/spack/repos/builtin/packages/falcon/package.py b/var/spack/repos/builtin/packages/falcon/package.py
new file mode 100644
index 0000000000..d2ca55d443
--- /dev/null
+++ b/var/spack/repos/builtin/packages/falcon/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Falcon(PythonPackage):
+ """Falcon: a set of tools for fast aligning long reads for consensus
+ and assembly.
+
+ The Falcon tool kit is a set of simple code collection which I use
+ for studying efficient assembly algorithm for haploid and diploid genomes.
+ It has some back-end code implemented in C for speed and some simple
+ front-end written in Python for convenience."""
+
+ homepage = "https://github.com/PacificBiosciences/FALCON"
+ url = "https://github.com/PacificBiosciences/FALCON.git"
+
+ version('2017-05-30',
+ git='https://github.com/PacificBiosciences/FALCON.git',
+ commit='86cec6157291679095ea6080b0cde6561eccc041')
+
+ depends_on('py-setuptools', type='run')
+ depends_on('py-pypeflow', type='run')
+ depends_on('py-networkx@1.7:1.10', type=['build', 'run'])
+ depends_on('pacbio-dazz-db', type='run')
+ depends_on('pacbio-daligner', type='run')
+ depends_on('pacbio-dextractor', type='run')
+ depends_on('pacbio-damasker', type='run')
diff --git a/var/spack/repos/builtin/packages/farmhash/CMakeLists.txt b/var/spack/repos/builtin/packages/farmhash/CMakeLists.txt
new file mode 100644
index 0000000000..0286f29ad0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/farmhash/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 2.8.3)
+
+project(farmhash)
+
+set(FARMHASH_SRCS
+ "src/farmhash.h"
+ "src/farmhash.cc"
+)
+
+set(FARMHASH_INCLUDES
+ "src/farmhash.h"
+)
+
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
+
+add_library(farmhash ${FARMHASH_SRCS})
+add_definitions(-DFARMHASH_NO_BUILTIN_EXPECT)
+
+install(TARGETS farmhash
+ LIBRARY DESTINATION lib COMPONENT RuntimeLibraries
+ ARCHIVE DESTINATION lib COMPONENT Development)
+
+foreach(FARMHASH_INCLUDE ${FARMHASH_INCLUDES})
+ install(FILES ${FARMHASH_INCLUDE} DESTINATION include COMPONENT Development)
+endforeach()
diff --git a/var/spack/repos/builtin/packages/farmhash/package.py b/var/spack/repos/builtin/packages/farmhash/package.py
new file mode 100644
index 0000000000..071a43c1a2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/farmhash/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+from shutil import copyfile
+
+
+class Farmhash(CMakePackage):
+ """
+ FarmHash provides hash functions for strings and other data.
+ """
+
+ homepage = "https://github.com/google/farmhash"
+
+ version('92e897', git='https://github.com/google/farmhash.git',
+ commit='92e897b282426729f4724d91a637596c7e2fe28f')
+
+ def patch(self):
+ copyfile(join_path(os.path.dirname(__file__), "CMakeLists.txt"),
+ "CMakeLists.txt")
diff --git a/var/spack/repos/builtin/packages/fastjar/package.py b/var/spack/repos/builtin/packages/fastjar/package.py
new file mode 100644
index 0000000000..19af359e81
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastjar/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Fastjar(AutotoolsPackage):
+ """Fastjar is a version of Sun's 'jar' utility, written entirely in C."""
+
+ homepage = "http://savannah.nongnu.org/projects/fastjar/"
+ url = "http://download.savannah.gnu.org/releases/fastjar/fastjar-0.98.tar.gz"
+
+ version('0.98', 'd2d264d343d4d0e1575832cc1023c3bf')
+
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/fastmath/package.py b/var/spack/repos/builtin/packages/fastmath/package.py
new file mode 100644
index 0000000000..c91289afaa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastmath/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Fastmath(Package):
+ """FASTMath is a suite of ~15 numerical libraries frequently used together
+ in various SciDAC and CSE applications. The suite includes discretization
+ libraries for structured, AMR and unstructured grids as well as solver
+ libraries for ODE's, Time Integrators, Iterative, Non-Linear, and Direct
+ Solvers."""
+
+ homepage = "www.fastmath-scidac.org/"
+ url = "https://github.com/citibeth/dummy/tarball/v1.0"
+
+ version('1.0', 'e2b724dfcc31d735897971db91be89ff')
+
+ # BundlePackage
+ depends_on('boxlib dims=3')
+ depends_on('chombo@3.2')
+ depends_on('hypre~internal-superlu')
+ depends_on('mesquite')
+# depends_on('ml-trilinos') # hoping for stripped down install of just ml
+# depends_on('nox-trilinos') # hoping for stripped down install of just nox
+ depends_on('moab')
+ depends_on('mpi')
+ depends_on('arpack-ng')
+ depends_on('petsc')
+ depends_on('phasta')
+ depends_on('pumi')
+ depends_on('sundials')
+ depends_on('superlu-dist')
+ depends_on('trilinos')
+ depends_on('zoltan')
+
+ # Dummy install for now, will be removed when metapackage is available
+ def install(self, spec, prefix):
+ # Prevent the error message
+ # ==> Error: Install failed for fastmath. Nothing was installed!
+ # ==> Error: Installation process had nonzero exit code : 256
+ with open(join_path(spec.prefix, 'bundle-package.txt'), 'w') as out:
+ out.write('This is a bundle\n')
+ out.close()
diff --git a/var/spack/repos/builtin/packages/fastme/package.py b/var/spack/repos/builtin/packages/fastme/package.py
new file mode 100644
index 0000000000..a64cd3163c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastme/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Fastme(AutotoolsPackage):
+ """FastME is a distance based phylogeny reconstruction program that
+ works on distance matrices and, as of v2.0, sequence data. """
+
+ homepage = "http://www.atgc-montpellier.fr/fastme/"
+ url = "https://gite.lirmm.fr/atgc/FastME/repository/v2.1.5.1/archive.tar.gz"
+
+ version('2.1.5.1', '1059dcbd320bf4d6dd9328c582dd3d24283295026530fcfb26dbdbe068e3cd1d')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ force_autoreconf = True
diff --git a/var/spack/repos/builtin/packages/fastphase/package.py b/var/spack/repos/builtin/packages/fastphase/package.py
new file mode 100644
index 0000000000..857e13b3bd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastphase/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Fastphase(Package):
+ """Software for haplotype reconstruction, and estimating missing genotypes
+ from population data."""
+
+ homepage = "http://stephenslab.uchicago.edu/software.html"
+ url = "http://scheet.org/code/Linuxfp.tar.gz"
+
+ version('2016-03-30', 'b48731eed9b8d0a5a321f970c5c20d8c')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('fastPHASE', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/fastq-screen/package.py b/var/spack/repos/builtin/packages/fastq-screen/package.py
new file mode 100644
index 0000000000..81289a5cb1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastq-screen/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 FastqScreen(Package):
+ """FastQ Screen allows you to screen a library of sequences in FastQ format
+ against a set of sequence databases so you can see if the composition of
+ the library matches with what you expect."""
+
+ homepage = "https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/"
+ url = "https://www.bioinformatics.babraham.ac.uk/projects/fastq_screen/fastq_screen_v0.11.2.tar.gz"
+
+ version('0.11.2', 'ef79f16ee553aaa0ab2fc14ea11e5473')
+
+ depends_on('perl', type='run')
+ depends_on('perl-gd-graph', type='run')
+ depends_on('bowtie')
+ depends_on('bowtie2')
+ depends_on('bwa')
+ depends_on('samtools')
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/fastqc/package.py b/var/spack/repos/builtin/packages/fastqc/package.py
index e2a1b54210..9d20805907 100644
--- a/var/spack/repos/builtin/packages/fastqc/package.py
+++ b/var/spack/repos/builtin/packages/fastqc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,8 +34,9 @@ class Fastqc(Package):
url = "http://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v0.11.5.zip"
version('0.11.5', '3524f101c0ab0bae77c7595983170a76')
+ version('0.11.4', '104ff2e0e9aebf5bee1f6b068a059b0d')
- depends_on('jdk', type='run')
+ depends_on('java', type='run')
depends_on('perl') # for fastqc "script", any perl will do
patch('fastqc.patch', level=0)
@@ -53,8 +54,9 @@ class Fastqc(Package):
# In theory the 'run' dependency on 'jdk' above should take
# care of this for me. In practice, it does not.
- def setup_environment(self, spack_env, env):
+ def setup_environment(self, spack_env, run_env):
"""Add <prefix> to the path; the package has a script at the
top level.
"""
- env.prepend_path('PATH', join_path(self.spec['jdk'].prefix, 'bin'))
+ run_env.prepend_path('PATH', join_path(self.spec['java'].prefix,
+ 'bin'))
diff --git a/var/spack/repos/builtin/packages/fastqvalidator/package.py b/var/spack/repos/builtin/packages/fastqvalidator/package.py
new file mode 100644
index 0000000000..d91ea6d0ba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fastqvalidator/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 Fastqvalidator(MakefilePackage):
+ """The fastQValidator validates the format of fastq files."""
+
+ homepage = "http://genome.sph.umich.edu/wiki/FastQValidator"
+ url = "https://github.com/statgen/fastQValidator/archive/v0.1.1a.tar.gz"
+
+ version('2017-01-10', commit='6d619a34749e9d33c34ef0d3e0e87324ca77f320',
+ git='https://github.com/statgen/fastQValidator.git')
+
+ resource(
+ name='libStatGen',
+ git='https://github.com/statgen/libStatGen.git',
+ commit='9db9c23e176a6ce6f421a3c21ccadedca892ac0c'
+ )
+
+ @property
+ def build_targets(self):
+ return ['LIB_PATH_GENERAL={0}'.format(
+ join_path(self.stage.source_path, 'libStatGen'))]
+
+ @property
+ def install_targets(self):
+ return [
+ 'INSTALLDIR={0}'.format(self.prefix.bin),
+ 'LIB_PATH_GENERAL={0}'.format(
+ join_path(self.stage.source_path, 'libStatGen')),
+ 'install'
+ ]
diff --git a/var/spack/repos/builtin/packages/fastx-toolkit/package.py b/var/spack/repos/builtin/packages/fastx-toolkit/package.py
index 04b4d24b39..db9a1e1d6e 100644
--- a/var/spack/repos/builtin/packages/fastx-toolkit/package.py
+++ b/var/spack/repos/builtin/packages/fastx-toolkit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class FastxToolkit(Package):
+class FastxToolkit(AutotoolsPackage):
"""The FASTX-Toolkit is a collection of command line tools for
Short-Reads FASTA/FASTQ files preprocessing."""
@@ -36,8 +36,4 @@ class FastxToolkit(Package):
depends_on('libgtextutils')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
+ conflicts('%gcc@7.1.0:')
diff --git a/var/spack/repos/builtin/packages/fenics/package.py b/var/spack/repos/builtin/packages/fenics/package.py
index 4be94a96b8..d95c826c34 100644
--- a/var/spack/repos/builtin/packages/fenics/package.py
+++ b/var/spack/repos/builtin/packages/fenics/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fenics(Package):
+class Fenics(CMakePackage):
"""FEniCS is organized as a collection of interoperable components
that together form the FEniCS Project. These components include
the problem-solving environment DOLFIN, the form compiler FFC, the
@@ -35,9 +35,10 @@ class Fenics(Package):
homepage = "http://fenicsproject.org/"
url = "https://bitbucket.org/fenics-project/dolfin/downloads/dolfin-1.6.0.tar.gz"
-
base_url = "https://bitbucket.org/fenics-project/{pkg}/downloads/{pkg}-{version}.tar.gz"
+ python_components = ['ufl', 'ffc', 'fiat', 'instant']
+
variant('hdf5', default=True, description='Compile with HDF5')
variant('parmetis', default=True, description='Compile with ParMETIS')
variant('scotch', default=True, description='Compile with Scotch')
@@ -54,8 +55,12 @@ class Fenics(Package):
description='Enables the shared memory support')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
+ variant('doc', default=False,
+ description='Builds the documentation')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo',
+ 'MinSizeRel', 'Developer'))
# not part of spack list for now
# variant('petsc4py', default=True, description='Uses PETSc4py')
@@ -68,7 +73,7 @@ class Fenics(Package):
extends('python')
- depends_on('eigen@3.2.0:', type='build')
+ depends_on('eigen@3.2.0:')
depends_on('boost+filesystem+program_options+system+iostreams+timer+regex+chrono')
depends_on('mpi', when='+mpi')
@@ -88,7 +93,7 @@ class Fenics(Package):
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-sympy', type=('build', 'run'))
depends_on('swig@3.0.3:', type=('build', 'run'))
- depends_on('cmake@2.8.12:', type=('build', 'run'))
+ depends_on('cmake@2.8.12:', type='build')
depends_on('py-setuptools', type='build')
depends_on('py-sphinx@1.0.1:', when='+doc', type='build')
@@ -140,14 +145,10 @@ class Fenics(Package):
def cmake_is_on(self, option):
return 'ON' if option in self.spec else 'OFF'
- def install(self, spec, prefix):
- for package in ['ufl', 'ffc', 'fiat', 'instant']:
- with working_dir(join_path('depends', package)):
- setup_py('install', '--prefix=%s' % prefix)
-
- cmake_args = [
- '-DCMAKE_BUILD_TYPE:STRING={0}'.format(
- 'Debug' if '+debug' in spec else 'RelWithDebInfo'),
+ def cmake_args(self):
+ return [
+ '-DDOLFIN_ENABLE_DOCS:BOOL={0}'.format(
+ self.cmake_is_on('+doc')),
'-DBUILD_SHARED_LIBS:BOOL={0}'.format(
self.cmake_is_on('+shared')),
'-DDOLFIN_SKIP_BUILD_TESTS:BOOL=ON',
@@ -189,10 +190,14 @@ class Fenics(Package):
self.cmake_is_on('zlib')),
]
- cmake_args.extend(std_cmake_args)
-
- with working_dir('build', create=True):
- cmake('..', *cmake_args)
+ @run_after('build')
+ def build_python_components(self):
+ for package in self.python_components:
+ with working_dir(join_path('depends', package)):
+ setup_py('build')
- make()
- make('install')
+ @run_after('install')
+ def install_python_components(self):
+ for package in self.python_components:
+ with working_dir(join_path('depends', package)):
+ setup_py('install', '--prefix={0}'.format(self.prefix))
diff --git a/var/spack/repos/builtin/packages/ferret/package.py b/var/spack/repos/builtin/packages/ferret/package.py
index 15ddfcee16..33a6cfcb92 100644
--- a/var/spack/repos/builtin/packages/ferret/package.py
+++ b/var/spack/repos/builtin/packages/ferret/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,11 +31,10 @@ class Ferret(Package):
"""Ferret is an interactive computer visualization and analysis environment
designed to meet the needs of oceanographers and meteorologists
analyzing large and complex gridded data sets."""
- homepage = "http://ferret.noaa.gov/Ferret/"
- url = "ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.tar.gz"
+ homepage = "http://ferret.pmel.noaa.gov/Ferret/home"
+ url = "ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v696.tar.gz"
- version('6.96', '51722027c864369f41bab5751dfff8cc',
- url="ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.tar.gz")
+ version('6.96', '51722027c864369f41bab5751dfff8cc')
depends_on("hdf5~mpi~fortran")
depends_on("netcdf~mpi")
@@ -43,6 +42,10 @@ class Ferret(Package):
depends_on("readline")
depends_on("zlib")
+ def url_for_version(self, version):
+ return "ftp://ftp.pmel.noaa.gov/ferret/pub/source/fer_source.v{0}.tar.gz".format(
+ version.joined)
+
def patch(self):
hdf5_prefix = self.spec['hdf5'].prefix
netcdff_prefix = self.spec['netcdf-fortran'].prefix
@@ -95,7 +98,12 @@ class Ferret(Package):
ln('-sf',
libz_prefix + '/lib',
libz_prefix + '/lib64')
- os.environ['LDFLAGS'] = '-lquadmath'
+
+ if 'LDFLAGS' in env and env['LDFLAGS']:
+ env['LDFLAGS'] += ' ' + '-lquadmath'
+ else:
+ env['LDFLAGS'] = '-lquadmath'
+
with working_dir('FERRET', create=False):
os.environ['LD_X11'] = '-L/usr/lib/X11 -lX11'
os.environ['HOSTTYPE'] = 'x86_64-linux'
diff --git a/var/spack/repos/builtin/packages/ffmpeg/package.py b/var/spack/repos/builtin/packages/ffmpeg/package.py
new file mode 100644
index 0000000000..1a7e3b253b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ffmpeg/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Ffmpeg(AutotoolsPackage):
+ """FFmpeg is a complete, cross-platform solution to record,
+ convert and stream audio and video."""
+
+ homepage = "https://ffmpeg.org"
+ url = "http://ffmpeg.org/releases/ffmpeg-3.2.4.tar.bz2"
+
+ version('3.2.4', 'd3ebaacfa36c6e8145373785824265b4')
+
+ variant('shared', default=True,
+ description='build shared libraries')
+
+ depends_on('yasm@1.2.0:')
+
+ def configure_args(self):
+ spec = self.spec
+ config_args = ['--enable-pic']
+
+ if '+shared' in spec:
+ config_args.append('--enable-shared')
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/fftw/package.py b/var/spack/repos/builtin/packages/fftw/package.py
index 838f6ff744..e2fc311166 100644
--- a/var/spack/repos/builtin/packages/fftw/package.py
+++ b/var/spack/repos/builtin/packages/fftw/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fftw(Package):
+class Fftw(AutotoolsPackage):
"""FFTW is a C subroutine library for computing the discrete Fourier
transform (DFT) in one or more dimensions, of arbitrary input
size, and of both real and complex data (as well as of even/odd
@@ -35,17 +35,24 @@ class Fftw(Package):
homepage = "http://www.fftw.org"
url = "http://www.fftw.org/fftw-3.3.4.tar.gz"
+ list_url = "http://www.fftw.org/download.html"
+ version('3.3.6-pl2', '927e481edbb32575397eb3d62535a856')
version('3.3.5', '6cc08a3b9c7ee06fdd5b9eb02e06f569')
version('3.3.4', '2edab8c06b24feeb3b82bbb3ebf3e7b3')
+ version('2.1.5', '8d16a84f3ca02a785ef9eb36249ba433')
- patch('pfft-3.3.5.patch', when="@3.3.5+pfft_patches", level=0)
+ patch('pfft-3.3.5.patch', when="@3.3.5:+pfft_patches", level=0)
patch('pfft-3.3.4.patch', when="@3.3.4+pfft_patches", level=0)
+ patch('pgi-3.3.6-pl2.patch', when="@3.3.6-pl2%pgi", level=0)
variant(
'float', default=True,
description='Produces a single precision version of the library')
variant(
+ 'double', default=True,
+ description='Produces a double precision version of the library')
+ variant(
'long_double', default=True,
description='Produces a long double precision version of the library')
variant(
@@ -61,18 +68,31 @@ class Fftw(Package):
depends_on('mpi', when='+mpi')
depends_on('automake', type='build', when='+pfft_patches')
depends_on('autoconf', type='build', when='+pfft_patches')
+ depends_on('libtool', type='build', when='+pfft_patches')
- # TODO : add support for architecture specific optimizations as soon as
- # targets are supported
+ @property
+ def libs(self):
+ result = find_libraries(['libfftw3'], root=self.prefix, recurse=True)
+ return result
- def install(self, spec, prefix):
+ def autoreconf(self, spec, prefix):
+ if '+pfft_patches' in spec:
+ autoreconf = which('autoreconf')
+ autoreconf('-ifv')
+
+ def configure(self, spec, prefix):
+ # Base options
options = [
'--prefix={0}'.format(prefix),
'--enable-shared',
'--enable-threads'
]
+ if not self.compiler.f77 or not self.compiler.fc:
+ options.append("--disable-fortran")
+ if spec.satisfies('@:2'):
+ options.append('--enable-type-prefix')
- # Add support for OpenMP
+ # Variants that affect every precision
if '+openmp' in spec:
# Note: Apple's Clang does not support OpenMP.
if spec.satisfies('%clang'):
@@ -80,36 +100,76 @@ class Fftw(Package):
if ver.endswith('-apple'):
raise InstallError("Apple's clang does not support OpenMP")
options.append('--enable-openmp')
- if not self.compiler.f77 or not self.compiler.fc:
- options.append("--disable-fortran")
+ if spec.satisfies('@:2'):
+ # TODO: libtool strips CFLAGS, so 2.x libxfftw_threads
+ # isn't linked to the openmp library. Patch Makefile?
+ options.insert(0, 'CFLAGS=' + self.compiler.openmp_flag)
if '+mpi' in spec:
options.append('--enable-mpi')
- if '+pfft_patches' in spec:
- autoreconf = which('autoreconf')
- autoreconf('-ifv')
+ # SIMD support
+ # TODO: add support for more architectures
+ float_options = []
+ double_options = []
+ if 'x86_64' in spec.architecture and spec.satisfies('@3:'):
+ float_options.append('--enable-sse2')
+ double_options.append('--enable-sse2')
- configure(*options)
- make()
- if self.run_tests:
- make("check")
- make("install")
+ configure = Executable('../configure')
+ # Build double/float/long double/quad variants
+ if '+double' in spec:
+ with working_dir('double', create=True):
+ configure(*(options + double_options))
if '+float' in spec:
- configure('--enable-float', *options)
- make()
- if self.run_tests:
+ with working_dir('float', create=True):
+ configure('--enable-float', *(options + float_options))
+ if spec.satisfies('@3:+long_double'):
+ with working_dir('long-double', create=True):
+ configure('--enable-long-double', *options)
+ if spec.satisfies('@3:+quad'):
+ with working_dir('quad', create=True):
+ configure('--enable-quad-precision', *options)
+
+ def build(self, spec, prefix):
+ if '+double' in spec:
+ with working_dir('double'):
+ make()
+ if '+float' in spec:
+ with working_dir('float'):
+ make()
+ if '+long_double' in spec:
+ with working_dir('long-double'):
+ make()
+ if '+quad' in spec:
+ with working_dir('quad'):
+ make()
+
+ def check(self):
+ spec = self.spec
+ if '+double' in spec:
+ with working_dir('double'):
+ make("check")
+ if '+float' in spec:
+ with working_dir('float'):
make("check")
- make("install")
if '+long_double' in spec:
- configure('--enable-long-double', *options)
- make()
- if self.run_tests:
+ with working_dir('long-double'):
make("check")
- make("install")
if '+quad' in spec:
- configure('--enable-quad-precision', *options)
- make()
- if self.run_tests:
+ with working_dir('quad'):
make("check")
- make("install")
+
+ def install(self, spec, prefix):
+ if '+double' in spec:
+ with working_dir('double'):
+ make("install")
+ if '+float' in spec:
+ with working_dir('float'):
+ make("install")
+ if '+long_double' in spec:
+ with working_dir('long-double'):
+ make("install")
+ if '+quad' in spec:
+ with working_dir('quad'):
+ make("install")
diff --git a/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch b/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch
new file mode 100644
index 0000000000..1822db1231
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fftw/pgi-3.3.6-pl2.patch
@@ -0,0 +1,121 @@
+--- configure 2017-01-27 16:08:52.000000000 -0500
++++ configure 2017-05-08 22:34:32.358821182 -0400
+@@ -21744,117 +21744,7 @@
+
+ # Various other checks:
+ if test "x$acx_pthread_ok" = xyes; then
+- save_LIBS="$LIBS"
+- LIBS="$PTHREAD_LIBS $LIBS"
+- save_CFLAGS="$CFLAGS"
+- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+-
+- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
+-$as_echo_n "checking for joinable pthread attribute... " >&6; }
+- attr_name=unknown
+- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h. */
+-#include <pthread.h>
+-#ifdef F77_DUMMY_MAIN
+-
+-# ifdef __cplusplus
+- extern "C"
+-# endif
+- int F77_DUMMY_MAIN() { return 1; }
+-
+-#endif
+-int
+-main ()
+-{
+-int attr=$attr; return attr;
+- ;
+- return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
+- attr_name=$attr; break
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+- conftest$ac_exeext conftest.$ac_ext
+- done
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
+-$as_echo "$attr_name" >&6; }
+- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+-
+-cat >>confdefs.h <<_ACEOF
+-#define PTHREAD_CREATE_JOINABLE $attr_name
+-_ACEOF
+-
+- fi
+-
+- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
+-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
+- flag=no
+- case "${host_cpu}-${host_os}" in
+- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
+- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
+- esac
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
+-$as_echo "${flag}" >&6; }
+- if test "x$flag" != xno; then
+- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
+- fi
+-
+- LIBS="$save_LIBS"
+- CFLAGS="$save_CFLAGS"
+-
+- # More AIX lossage: must compile with xlc_r or cc_r
+- if test x"$GCC" != xyes; then
+- for ac_prog in xlc_r cc_r
+-do
+- # Extract the first word of "$ac_prog", so it can be a program name with args.
+-set dummy $ac_prog; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_prog_PTHREAD_CC+:} false; then :
+- $as_echo_n "(cached) " >&6
+-else
+- if test -n "$PTHREAD_CC"; then
+- ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
+-else
+-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+- IFS=$as_save_IFS
+- test -z "$as_dir" && as_dir=.
+- for ac_exec_ext in '' $ac_executable_extensions; do
+- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+- ac_cv_prog_PTHREAD_CC="$ac_prog"
+- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+- break 2
+- fi
+-done
+- done
+-IFS=$as_save_IFS
+-
+-fi
+-fi
+-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
+-if test -n "$PTHREAD_CC"; then
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
+-$as_echo "$PTHREAD_CC" >&6; }
+-else
+- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+- test -n "$PTHREAD_CC" && break
+-done
+-test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
+-
+- else
+- PTHREAD_CC=$CC
+- fi
+-else
+- PTHREAD_CC="$CC"
++ PTHREAD_CC="$CC"
+ fi
+
+
diff --git a/var/spack/repos/builtin/packages/fimpute/package.py b/var/spack/repos/builtin/packages/fimpute/package.py
new file mode 100644
index 0000000000..177ba05640
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fimpute/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Fimpute(Package):
+ """FImpute uses an overlapping sliding window approach to efficiently
+ exploit relationships or haplotype similarities between target and
+ reference individuals."""
+
+ homepage = "http://www.aps.uoguelph.ca/~msargol/fimpute/"
+ url = "http://www.aps.uoguelph.ca/~msargol/fimpute/FImpute_Linux.zip"
+
+ version('2014-01', 'df934a25c76dabef7d7afcb5b8058d98')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('FImpute', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/findutils/package.py b/var/spack/repos/builtin/packages/findutils/package.py
new file mode 100644
index 0000000000..3abd8e2728
--- /dev/null
+++ b/var/spack/repos/builtin/packages/findutils/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Findutils(AutotoolsPackage):
+ """The GNU Find Utilities are the basic directory searching
+ utilities of the GNU operating system."""
+
+ homepage = "https://www.gnu.org/software/findutils/"
+ url = "http://ftpmirror.gnu.org/findutils/findutils-4.6.0.tar.gz"
+
+ version('4.6.0', '9936aa8009438ce185bea2694a997fc1')
+ version('4.4.2', '351cc4adb07d54877fa15f75fb77d39f')
+ version('4.4.1', '5883f569dc021eee765f330bb7a3782d')
+ version('4.4.0', '49e769ac4382fae6f104f99d54d0a112')
+ version('4.2.33', 'b7e35aa175778c84942b1fee4144988b')
+ version('4.2.32', 'aaa6beeb41a6f04963dff58f24a55b96')
+ version('4.2.31', 'a0e31a0f18a49709bf5a449867c8049a')
+ version('4.2.30', 'c35ff6502e0b3514c99089cb5d333c25')
+ version('4.2.29', '24e76434ca74ba3c2c6ad621eb64e1ff')
+ version('4.2.28', 'f5fb3349354ee3d94fceb81dab5c71fd')
+ version('4.2.27', 'f1e0ddf09f28f8102ff3b90f3b5bc920')
+ version('4.2.26', '9ac4e62937b1fdc4eb643d1d4bf117d3')
+ version('4.2.25', 'e92fef6714ffa9972f28a1a423066921')
+ version('4.2.23', 'ecaff8b060e8d69c10eb2391a8032e26')
+ version('4.2.20', '7c8e12165b221dd67a19c00d780437a4')
+ version('4.2.18', '8aac2498435f3f1882678fb9ebda5c34')
+ version('4.2.15', 'a881b15aa7170aea045bf35cc92d48e7')
+ version('4.1.20', 'e90ce7222daadeb8616b8db461e17cbc')
+ version('4.1', '3ea8fe58ef5386da75f6c707713aa059')
diff --git a/var/spack/repos/builtin/packages/fio/package.py b/var/spack/repos/builtin/packages/fio/package.py
new file mode 100644
index 0000000000..1119961ad0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fio/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 Fio(AutotoolsPackage):
+ """Flexible I/O Tester."""
+
+ homepage = "https://github.com/axboe/fio"
+ url = "https://github.com/axboe/fio/archive/fio-2.19.tar.gz"
+
+ version('2.19', '67125b60210a4daa689a4626fc66c612')
+
+ variant('gui', default=False, description='Enable building of gtk gfio')
+ variant('doc', default=False, description='Generate documentation')
+
+ depends_on('gtkplus@2.18:', when='+gui')
+ depends_on('cairo', when='+gui')
+
+ depends_on('py-sphinx', type='build', when='+doc')
+
+ def configure_args(self):
+ config_args = []
+
+ if '+gui' in self.spec:
+ config_args.append('--enable-gfio')
+
+ return config_args
+
+ @run_after('build')
+ def build_docs(self):
+ if '+doc' in self.spec:
+ make('-C', 'doc', 'html')
+ make('-C', 'doc', 'man')
diff --git a/var/spack/repos/builtin/packages/fish/package.py b/var/spack/repos/builtin/packages/fish/package.py
index fb784b7571..922aca5eb8 100644
--- a/var/spack/repos/builtin/packages/fish/package.py
+++ b/var/spack/repos/builtin/packages/fish/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fish(Package):
+class Fish(AutotoolsPackage):
"""fish is a smart and user-friendly command line shell for OS X, Linux, and
the rest of the family.
"""
@@ -34,10 +34,6 @@ class Fish(Package):
url = "http://fishshell.com/files/2.2.0/fish-2.2.0.tar.gz"
list_url = "http://fishshell.com/"
- version('2.2.0', 'a76339fd14ce2ec229283c53e805faac48c3e99d9e3ede9d82c0554acfc7b77a')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
+ depends_on('ncurses')
- make()
- make("install")
+ version('2.2.0', 'a76339fd14ce2ec229283c53e805faac48c3e99d9e3ede9d82c0554acfc7b77a')
diff --git a/var/spack/repos/builtin/packages/fixesproto/package.py b/var/spack/repos/builtin/packages/fixesproto/package.py
index 64852b40e2..b98437b9ff 100644
--- a/var/spack/repos/builtin/packages/fixesproto/package.py
+++ b/var/spack/repos/builtin/packages/fixesproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fixesproto(Package):
+class Fixesproto(AutotoolsPackage):
"""X Fixes Extension.
The extension makes changes to many areas of the protocol to resolve
@@ -39,8 +39,3 @@ class Fixesproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/flac/package.py b/var/spack/repos/builtin/packages/flac/package.py
new file mode 100644
index 0000000000..2b95a5a6f2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flac/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Flac(AutotoolsPackage):
+ """Encoder/decoder for the Free Lossless Audio Codec"""
+
+ homepage = "https://xiph.org/flac/index.html"
+ url = "http://downloads.xiph.org/releases/flac/flac-1.3.2.tar.xz"
+
+ version('1.3.2', '454f1bfa3f93cc708098d7890d0499bd')
+ version('1.3.1', 'b9922c9a0378c88d3e901b234f852698')
+ version('1.3.0', '13b5c214cee8373464d3d65dee362cdd')
+
+ depends_on('libvorbis')
+ depends_on('id3lib')
diff --git a/var/spack/repos/builtin/packages/flang/package.py b/var/spack/repos/builtin/packages/flang/package.py
new file mode 100644
index 0000000000..fb84e9841d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flang/package.py
@@ -0,0 +1,82 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 *
+import os
+
+
+class Flang(CMakePackage):
+ """Flang is a Fortran compiler targeting LLVM."""
+ homepage = "https://github.com/flang-compiler/flang"
+ url = "https://github.com/flang-compiler/flang/flecsi/tarball/v1.0"
+
+ version('develop', git='https://github.com/flang-compiler/flang', branch='master')
+
+ depends_on(
+ "llvm+clang@4.0.1,5.0.0",
+ patches=[
+ patch('https://github.com/llvm-mirror/clang/pull/33.diff',
+ sha256='e46d7ab305e5e95c51f4656d9b52058143cd85d859b312b3c80e93a02d54b4a5',
+ when='@4.0.1', level=1, working_dir='tools/clang'),
+ patch('https://github.com/llvm-mirror/clang/pull/35.diff',
+ sha256='7f39555783993f78b75c380ca5ef167c1d8b88cc75c6542f6c94e0b6acfb7c5d',
+ when='@5.0.0', level=1, working_dir='tools/clang')
+ ]
+ )
+
+ def cmake_args(self):
+ options = [
+ '-DWITH_WERROR=OFF',
+ '-DCMAKE_C_COMPILER=%s' % os.path.join(
+ self.spec['llvm'].prefix.bin, 'clang'),
+ '-DCMAKE_CXX_COMPILER=%s' % os.path.join(
+ self.spec['llvm'].prefix.bin, 'clang++'),
+ '-DCMAKE_Fortran_COMPILER=%s' % os.path.join(
+ self.spec['llvm'].prefix.bin, 'flang'),
+ '-DFLANG_LIBOMP=%s' % find_libraries(
+ 'libomp', root=self.spec['llvm'].prefix.lib)
+ ]
+
+ return options
+
+ @run_after('install')
+ def post_install(self):
+ # we are installing flang in a path different from llvm, so we
+ # create a wrapper with -L for e.g. libflangrti.so and -I for
+ # e.g. iso_c_binding.mod. -B is needed to help flang to find
+ # flang1 and flang2. rpath_arg is needed so that executables
+ # generated by flang can find libflang later.
+ flang = os.path.join(self.spec.prefix.bin, 'flang')
+ with open(flang, 'w') as out:
+ out.write('#!/bin/bash\n')
+ out.write(
+ '{0} -I{1} -L{2} {3}{4} -B{5} "$@"\n'.format(
+ os.path.join(self.spec['llvm'].prefix.bin, 'flang'),
+ self.prefix.include, self.prefix.lib,
+ self.compiler.fc_rpath_arg, self.prefix.lib,
+ self.spec.prefix.bin))
+ out.close()
+ chmod = which('chmod')
+ chmod('+x', flang)
diff --git a/var/spack/repos/builtin/packages/flann/package.py b/var/spack/repos/builtin/packages/flann/package.py
new file mode 100644
index 0000000000..1ed996bd51
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flann/package.py
@@ -0,0 +1,149 @@
+##############################################################################
+# 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/spack/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 Flann(CMakePackage):
+ """FLANN is a library for performing fast approximate nearest neighbor
+ searches in high dimensional spaces. It contains a collection of
+ algorithms we found to work best for nearest neighbor search and a system
+ for automatically choosing the best algorithm and optimum parameters
+ depending on the dataset.
+
+ FLANN is written in C++ and contains bindings for the following languages:
+ C, MATLAB and Python.
+ """
+
+ homepage = "http://www.cs.ubc.ca/research/flann/"
+ url = "https://github.com/mariusmuja/flann/archive/1.9.1.tar.gz"
+
+ version('1.9.1', '73adef1c7bf8e8b978987e7860926ea6')
+ version('1.8.5', '02a81640b1e9c11796a0413976dc11f5')
+ version('1.8.4', '774b74580e3cbc5b0d45c6ec345a64ae')
+ version('1.8.1', '1f51500e172f5e11fbda05f033858eb6')
+ version('1.8.0', '473150f592c2997e32d5ce31fd3c19a2')
+
+ def url_for_version(self, version):
+ if version > Version('1.8.1'):
+ return "https://github.com/mariusmuja/flann/archive/{0}.tar.gz".format(version)
+ else:
+ return "https://github.com/mariusmuja/flann/archive/{0}-src.tar.gz".format(version)
+
+ # Options available in the CMakeLists.txt
+ # Language bindings
+ variant("python", default=False,
+ description="Build the Python bindings. "
+ "Module: pyflann.")
+ extends('python', when='+python')
+ variant("matlab", default=False, description="Build the Matlab bindings.")
+ # default to true for C because it's a C++ library, nothing extra needed
+ variant("c", default=True, description="Build the C bindings.")
+
+ # Must build C bindings for Python / Matlab
+ conflicts("+python", when="~c")
+ conflicts("+matlab", when="~c")
+
+ # Additional options
+ variant("cuda", default=False, description="Build the CUDA library.")
+ variant("examples", default=False, description="Build the examples.")
+ variant("doc", default=False, description="Build the documentation.")
+ variant("openmp", default=True, description="Use OpenMP multi-threading.")
+ # mpi and hdf5 are the bread and butter of this library, use 'em
+ variant("mpi", default=True, description="Use MPI.")
+ variant("hdf5", default=True, description="Enable HDF5 support.")
+
+ # Dependencies
+ extends("python", when="+python")
+ depends_on("py-numpy", when="+python", type=("build", "run"))
+ depends_on("matlab", when="+matlab", type=("build", "run"))
+ depends_on("cuda", when="+cuda")
+ depends_on("mpi", when="+mpi")
+ depends_on("hdf5", when="+hdf5")
+ # HDF5_IS_PARALLEL actually comes from hdf5+mpi
+ # https://github.com/mariusmuja/flann/blob/06a49513138009d19a1f4e0ace67fbff13270c69/CMakeLists.txt#L108-L112
+ depends_on("boost+mpi+system+serialization+thread", when="+mpi ^hdf5+mpi")
+
+ # Doc deps
+ depends_on("latex", when="+doc")
+
+ # Example uses hdf5.
+ depends_on("hdf5", when="+examples")
+
+ def patch(self):
+ # Fix up the python setup.py call inside the install(CODE
+ filter_file("setup.py install",
+ 'setup.py --no-user-cfg install --prefix=\\"{0}\\"'.format(
+ self.prefix
+ ),
+ "src/python/CMakeLists.txt")
+ # Fix the install location so that spack activate works
+ if '+python' in self.spec:
+ filter_file("share/flann/python",
+ site_packages_dir,
+ "src/python/CMakeLists.txt")
+ # Hack. Don't install setup.py
+ filter_file("install( FILES",
+ "# install( FILES",
+ "src/python/CMakeLists.txt", string=True)
+
+ # TODO: revisit after https://github.com/spack/spack/issues/1279
+ # depends_on('hdf5', type='test')
+ # depends_on('gtest', type='test')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ # Language bindings. Many default to true in CMakeLists, bypass all
+ c_bind = "ON" if "+c" in spec else "OFF"
+ args.append("-DBUILD_C_BINDINGS:BOOL={0}".format(c_bind))
+
+ py_bind = "ON" if "+python" in spec else "OFF"
+ args.append("-DBUILD_PYTHON_BINDINGS:BOOL={0}".format(py_bind))
+
+ mat_bind = "ON" if "+matlab" in spec else "OFF"
+ args.append("-DBUILD_MATLAB_BINDINGS:BOOL={0}".format(mat_bind))
+
+ # Extra options
+ cuda_lib = "ON" if "+cuda" in spec else "OFF"
+ args.append("-DBUILD_CUDA_LIB:BOOL={0}".format(cuda_lib))
+
+ examples = "ON" if "+examples" in spec else "OFF"
+ args.append("-DBUILD_EXAMPLES:BOOL={0}".format(examples))
+
+ use_openmp = "ON" if "+openmp" in spec else "OFF"
+ args.append("-DUSE_OPENMP:BOOL={0}".format(use_openmp))
+
+ use_mpi = "ON" if "+mpi" in spec else "OFF"
+ args.append("-DUSE_MPI:BOOL={0}".format(use_mpi))
+
+ # Configure the proper python executable
+ if "+python" in spec:
+ args.append(
+ "-DPYTHON_EXECUTABLE={0}".format(spec["python"].command.path)
+ )
+
+ return args
diff --git a/var/spack/repos/builtin/packages/flash/package.py b/var/spack/repos/builtin/packages/flash/package.py
new file mode 100644
index 0000000000..6c918feb1a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flash/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Flash(MakefilePackage):
+ """FLASH (Fast Length Adjustment of SHort reads) is a very
+ fast and accurate software tool to merge paired-end reads
+ from next-generation sequencing experiments."""
+
+ homepage = "https://ccb.jhu.edu/software/FLASH/"
+ url = "https://sourceforge.net/projects/flashpage/files/FLASH-1.2.11.tar.gz"
+
+ version('1.2.11', 'e4d355023a766afaaab2d62f912b605c')
+
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('flash', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/flecsale/package.py b/var/spack/repos/builtin/packages/flecsale/package.py
new file mode 100644
index 0000000000..1160ea642e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flecsale/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Flecsale(CMakePackage):
+ """Flecsale is an ALE code based on FleCSI"""
+ homepage = "https://github.com/laristra/flecsale"
+ url = "https://github.com/laristra/flecsale/tarball/v1.0"
+
+ version('develop', git='https://github.com/laristra/flecsale', branch='master', submodules=True)
+
+ variant('mpi', default=True,
+ description='Build on top of mpi conduit for mpi inoperability')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on("flecsi~mpi", when='~mpi')
+ depends_on("flecsi+mpi", when='+mpi')
+ depends_on("python")
+ depends_on("openssl")
+
+ def cmake_args(self):
+ options = [
+ '-DENABLE_UNIT_TESTS=ON'
+ '-DENABLE_OPENSSL=ON'
+ '-DENABLE_PYTHON=ON'
+ ]
+
+ if '+mpi' in self.spec:
+ options.extend([
+ '-DENABLE_MPI=ON',
+ '-DFLECSI_RUNTIME_MODEL=mpilegion'
+ ])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/flecsi/package.py b/var/spack/repos/builtin/packages/flecsi/package.py
new file mode 100644
index 0000000000..049b28d15d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/flecsi/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Flecsi(CMakePackage):
+ """FleCSI is a compile-time configurable framework designed to support
+ multi-physics application development. As such, FleCSI attempts to
+ provide a very general set of infrastructure design patterns that can
+ be specialized and extended to suit the needs of a broad variety of
+ solver and data requirements. Current support includes multi-dimensional
+ mesh topology, mesh geometry, and mesh adjacency information,
+ n-dimensional hashed-tree data structures, graph partitioning
+ interfaces,and dependency closures.
+ """
+ homepage = "http://flecsi.lanl.gov/"
+ url = "https://github.com/laristra/flecsi/tarball/v1.0"
+
+ version('develop', git='https://github.com/laristra/flecsi', branch='master', submodules=True)
+
+ variant('mpi', default=True,
+ description='Build on top of mpi conduit for mpi inoperability')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on("legion+shared", when='~mpi')
+ depends_on("legion+shared+mpi", when='+mpi')
+
+ def cmake_args(self):
+ options = ['-DENABLE_UNIT_TESTS=ON']
+
+ if '+mpi' in self.spec:
+ options.extend([
+ '-DENABLE_MPI=ON',
+ ])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/flex/package.py b/var/spack/repos/builtin/packages/flex/package.py
index 23b3c8b21a..8d5ffe11c3 100644
--- a/var/spack/repos/builtin/packages/flex/package.py
+++ b/var/spack/repos/builtin/packages/flex/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
class Flex(AutotoolsPackage):
@@ -31,19 +32,23 @@ class Flex(AutotoolsPackage):
homepage = "https://github.com/westes/flex"
url = "https://github.com/westes/flex/releases/download/v2.6.1/flex-2.6.1.tar.gz"
- # Problematic version:
+ version('2.6.4', '2882e3179748cc9f9c23ec593d6adc8d')
+ version('2.6.3', 'a5f65570cd9107ec8a8ec88f17b31bb1')
+ # Avoid flex '2.6.2' (major bug)
# See issue #2554; https://github.com/westes/flex/issues/113
- # version('2.6.2', 'cc6d76c333db7653d5caf423a3335239')
version('2.6.1', '05bcd8fb629e0ae130311e8a6106fa82')
version('2.6.0', '760be2ee9433e822b6eb65318311c19d')
version('2.5.39', '5865e76ac69c05699f476515592750d7')
+ variant('lex', default=True,
+ description="Provide symlinks for lex and libl")
+
depends_on('bison', type='build')
depends_on('gettext@0.19:', type='build')
depends_on('help2man', type='build')
# Older tarballs don't come with a configure script
- depends_on('m4', type='build', when='@:2.6.0')
+ depends_on('m4', type='build')
depends_on('autoconf', type='build', when='@:2.6.0')
depends_on('automake', type='build', when='@:2.6.0')
depends_on('libtool', type='build', when='@:2.6.0')
@@ -61,10 +66,19 @@ class Flex(AutotoolsPackage):
return url
- def autoreconf(self, spec, prefix):
- pass
+ @run_after('install')
+ def symlink_lex(self):
+ """Install symlinks for lex compatibility."""
+ if self.spec.satisfies('+lex'):
+ dso = dso_suffix
+ for dir, flex, lex in \
+ ((self.prefix.bin, 'flex', 'lex'),
+ (self.prefix.lib, 'libfl.a', 'libl.a'),
+ (self.prefix.lib, 'libfl.' + dso, 'libl.' + dso),
+ (self.prefix.lib64, 'libfl.a', 'libl.a'),
+ (self.prefix.lib64, 'libfl.' + dso, 'libl.' + dso)):
- @when('@:2.6.0')
- def autoreconf(self, spec, prefix):
- libtoolize('--install', '--force')
- autoreconf('--install', '--force')
+ if os.path.isdir(dir):
+ with working_dir(dir):
+ if (os.path.isfile(flex) and not os.path.lexists(lex)):
+ symlink(flex, lex)
diff --git a/var/spack/repos/builtin/packages/flint/package.py b/var/spack/repos/builtin/packages/flint/package.py
index c39b17db2c..630a57c9bd 100644
--- a/var/spack/repos/builtin/packages/flint/package.py
+++ b/var/spack/repos/builtin/packages/flint/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/fltk/package.py b/var/spack/repos/builtin/packages/fltk/package.py
index f29b64b02b..62fe84bb44 100644
--- a/var/spack/repos/builtin/packages/fltk/package.py
+++ b/var/spack/repos/builtin/packages/fltk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/flux/package.py b/var/spack/repos/builtin/packages/flux/package.py
index 7abd9f46bd..6bca4c541c 100644
--- a/var/spack/repos/builtin/packages/flux/package.py
+++ b/var/spack/repos/builtin/packages/flux/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,38 +30,51 @@ class Flux(AutotoolsPackage):
""" A next-generation resource manager (pre-alpha) """
homepage = "https://github.com/flux-framework/flux-core"
- url = "https://github.com/flux-framework/flux-core/releases/download/v0.6.0/flux-core-0.6.0.tar.gz"
+ url = "https://github.com/flux-framework/flux-core/releases/download/v0.8.0/flux-core-0.8.0.tar.gz"
- version('0.6.0', md5='d44a0f719744771d168edd205bd8e74e')
+ version('0.8.0', md5='9ee12974a8b2ab9a30533f69826f3bec')
version('master', branch='master',
git='https://github.com/flux-framework/flux-core')
variant('docs', default=True, description='Build flux manpages')
- # Also needs autotools, but should use the system version if available
depends_on("zeromq@4.0.4:")
depends_on("czmq@2.2:")
depends_on("hwloc")
depends_on("lua@5.1:5.1.99")
+ depends_on("lua-luaposix")
depends_on("munge")
- depends_on("libjson-c")
- depends_on("libxslt")
+ depends_on("libuuid")
depends_on("python")
- depends_on("py-cffi")
+ depends_on("py-cffi", type=('build', 'run'))
depends_on("jansson")
depends_on("asciidoc", type='build', when="+docs")
+ # Need autotools when building on master:
depends_on("autoconf", type='build', when='@master')
depends_on("automake", type='build', when='@master')
depends_on("libtool", type='build', when='@master')
+ def setup():
+ pass
+
+ @when('@master')
+ def setup(self):
+ # Allow git-describe to get last tag so flux-version works:
+ git = which('git')
+ git('pull', '--depth=50', '--tags')
+
def autoreconf(self, spec, prefix):
+ self.setup()
if os.path.exists('autogen.sh'):
# Bootstrap with autotools
bash = which('bash')
bash('./autogen.sh')
- bash('./autogen.sh') # yes, twice, intentionally
+
+ def setup_environment(self, spack_env, run_env):
+ # Ensure ./fluxometer.lua can be found during flux's make check
+ spack_env.append_path('LUA_PATH', './?.lua', separator=';')
def configure_args(self):
return ['--disable-docs'] if '+docs' not in self.spec else []
diff --git a/var/spack/repos/builtin/packages/fmt/package.py b/var/spack/repos/builtin/packages/fmt/package.py
new file mode 100644
index 0000000000..78b4bfd664
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fmt/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Fmt(CMakePackage):
+ """fmt (formerly cppformat) is an open-source formatting library.
+ It can be used as a safe alternative to printf or as a fast alternative
+ to C++ IOStreams."""
+
+ homepage = "http://fmtlib.net/latest/index.html"
+ url = "https://github.com/fmtlib/fmt/releases/download/4.0.0/fmt-4.0.0.zip"
+
+ version('4.0.0', '605b5abee11b83195191234f4f414cf1')
+ version('3.0.2', 'b190a7b8f2a5e522ee70cf339a53d3b2')
+ version('3.0.1', '14505463b838befe1513b09cae112715')
+ version('3.0.0', 'c099561e70fa194bb03b3fd5de2d3fd0')
+
+ depends_on('cmake@2.8.12:', type='build')
+
+ def cmake_args(self):
+ return [
+ '-DCMAKE_C_FLAGS={0}'.format(self.compiler.pic_flag),
+ '-DCMAKE_CXX_FLAGS={0}'.format(self.compiler.pic_flag),
+ ]
diff --git a/var/spack/repos/builtin/packages/foam-extend/package.py b/var/spack/repos/builtin/packages/foam-extend/package.py
index 67397a5b72..c6861da8d3 100644
--- a/var/spack/repos/builtin/packages/foam-extend/package.py
+++ b/var/spack/repos/builtin/packages/foam-extend/package.py
@@ -1,14 +1,16 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for our notice and the LGPL.
#
+# License
+# -------
# 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.
@@ -21,225 +23,173 @@
# 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
+#
+# Legal Notice
+# ------------
+# OPENFOAM is a trademark owned by OpenCFD Ltd
+# (producer and distributor of the OpenFOAM software via www.openfoam.com).
+# The trademark information must remain visible and unadulterated in this
+# file and via the "spack info" and comply with the term set by
+# http://openfoam.com/legal/trademark-policy.php
+#
+# This file is not part of OpenFOAM, nor does it constitute a component of an
+# OpenFOAM distribution.
+#
##############################################################################
-from spack import *
-from spack.environment import *
-
-import multiprocessing
+#
+# Notes
+# - mpi handling: WM_MPLIB=USER and provide wmake rules for special purpose
+# 'USER and 'USERMPI' mpi implementations.
+# The choice of 'USER' vs 'USERMPI' may change in the future.
+#
+# Changes
+# 2017-03-28 Mark Olesen <mark.olesen@esi-group.com>
+# - avoid installing intermediate targets.
+# - reworked to mirror the openfoam-com package.
+# If changes are needed here, consider if they need applying there too.
+#
+# Known issues
+# - Combining +parmgridgen with +float32 probably won't work.
+#
+##############################################################################
+import glob
+import re
+import shutil
import os
+from spack import *
+from spack.pkg.builtin.openfoam_com import OpenfoamArch
+from spack.pkg.builtin.openfoam_com import add_extra_files
+from spack.pkg.builtin.openfoam_com import write_environ
+from spack.pkg.builtin.openfoam_com import rewrite_environ_files
+
class FoamExtend(Package):
- """The foam-extend project is a fork of the OpenFOAM open source library
- for Computational Fluid Dynamics (CFD)."""
+ """The Extend Project is a fork of the OpenFOAM opensource library
+ for Computational Fluid Dynamics (CFD).
+ This offering is not approved or endorsed by OpenCFD Ltd,
+ producer and distributor of the OpenFOAM software via www.openfoam.com,
+ and owner of the OPENFOAM trademark.
+ """
homepage = "http://www.extend-project.de/"
+ version('4.0', git='http://git.code.sf.net/p/foam-extend/foam-extend-4.0')
version('3.2', git='http://git.code.sf.net/p/foam-extend/foam-extend-3.2')
version('3.1', git='http://git.code.sf.net/p/foam-extend/foam-extend-3.1')
version('3.0', git='http://git.code.sf.net/p/foam-extend/foam-extend-3.0')
- variant('paraview', default=False, description='Enable ParaFOAM')
- variant(
- 'scotch', default=True,
- description='Activate Scotch as a possible decomposition library')
- variant(
- 'ptscotch', default=True,
- description='Activate PT-Scotch as a possible decomposition library')
- variant(
- 'metis', default=True,
- description='Activate Metis as a possible decomposition library')
- variant(
- 'parmetis', default=True,
- description='Activate Parmetis as a possible decomposition library')
- variant(
- 'parmgridgen', default=True,
- description='Activate Parmgridgen support')
- variant(
- 'source', default=True,
- description='Installs also the source folder')
-
- supported_compilers = {'clang': 'Clang', 'gcc': 'Gcc', 'intel': 'Icc'}
-
+ # variant('int64', default=False,
+ # description='Compile with 64-bit label')
+ variant('float32', default=False,
+ description='Compile with 32-bit scalar (single-precision)')
+ variant('paraview', default=False,
+ description='Build paraview plugins (eg, paraFoam)')
+ variant('scotch', default=True,
+ description='With scotch for decomposition')
+ variant('ptscotch', default=True,
+ description='With ptscotch for decomposition')
+ variant('metis', default=True,
+ description='With metis for decomposition')
+ variant('parmetis', default=True,
+ description='With parmetis for decomposition')
+ variant('parmgridgen', default=True,
+ description='With parmgridgen support')
+ variant('source', default=True,
+ description='Install library/application sources and tutorials')
+
+ provides('openfoam')
depends_on('mpi')
depends_on('python')
- depends_on('flex')
depends_on('zlib')
+ depends_on('flex', type='build')
depends_on('cmake', type='build')
- depends_on('scotch ~ metis', when='~ptscotch+scotch')
- depends_on('scotch ~ metis + mpi', when='+ptscotch')
- depends_on('metis@5:', when='+metis')
- depends_on('parmetis', when='+parmetis')
- depends_on('parmgridgen', when='+parmgridgen')
-
- depends_on('paraview', when='+paraview')
-
- def set_arch(self):
- (sysname, nodename, release, version, machine) = os.uname()
-
- if self.compiler.name not in self.supported_compilers:
- raise RuntimeError('{0} is not a supported compiler \
- to compile OpenFOAM'.format(self.compiler.name))
-
- foam_compiler = self.supported_compilers[self.compiler.name]
- if sysname == 'Linux':
- arch = 'linux'
- if foam_compiler == 'Clang':
- raise RuntimeError('OS, compiler combination not\
- supported ({0} {1})'.format(sysname, foam_compiler))
- elif sysname == 'Darwin':
- if machine == 'x86_64':
- arch = 'darwinIntel'
- if foam_compiler == 'Icc':
- raise RuntimeError('OS, compiler combination not\
- supported ({0} {1})'.format(sysname, foam_compiler))
- else:
- raise RuntimeError('{0} {1} is not a \
- supported architecture'.format(sysname, machine))
+ depends_on('scotch~metis', when='~ptscotch+scotch')
+ depends_on('scotch~metis+mpi', when='+ptscotch')
+ depends_on('metis@5:', when='+metis')
+ depends_on('parmetis', when='+parmetis')
+ # mgridgen is statically linked
+ depends_on('parmgridgen', when='+parmgridgen', type='build')
+ depends_on('paraview@:5.0.1', when='+paraview')
- return (arch, foam_compiler)
+ # General patches
+ common = ['spack-Allwmake', 'README-spack']
+ assets = []
- def get_openfoam_environment(self):
- return EnvironmentModifications.from_sourcing_files(
- join_path(self.stage.source_path,
- 'etc/bashrc'))
+ # Some user config settings
+ config = {
+ 'label-size': False, # <- No int32/int64 support
+ 'mplib': 'USERMPI', # USER | USERMPI
+ }
- def patch(self):
- # change names to match the package and not the one patch in
- # the Third-Party of foam-extend
- if '+parmgridgen' in self.spec:
- filter_file(r'-lMGridGen',
- r'-lmgrid',
- 'src/dbns/Make/options')
+ # The openfoam architecture, compiler information etc
+ _foam_arch = None
- filter_file(
- r'-lMGridGen',
- r'-lmgrid',
- 'src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options') # noqa: E501
-
- # Get the wmake arch and compiler
- (arch, foam_compiler) = self.set_arch()
-
- prefs_dict = {
- 'compilerInstall': 'System',
- 'WM_COMPILER': foam_compiler,
- 'WM_ARCH_OPTION': '64',
- 'WM_PRECISION_OPTION': 'DP',
- 'WM_COMPILE_OPTION': 'SPACKOpt',
- 'WM_MPLIB': 'SPACK',
-
- 'CMAKE_DIR': self.spec['cmake'].prefix,
- 'CMAKE_BIN_DIR': self.spec['cmake'].prefix.bin,
- 'PYTHON_DIR': self.spec['python'].prefix,
- 'PYTHON_BIN_DIR': self.spec['python'].prefix.bin,
-
- 'FLEX_SYSTEM': 1,
- 'FLEX_DIR': self.spec['flex'].prefix,
-
- 'BISON_SYSTEM': 1,
- 'BISON_DIR': self.spec['flex'].prefix,
-
- 'ZLIB_SYSTEM': 1,
- 'ZLIB_DIR': self.spec['zlib'].prefix,
- }
+ # Content for etc/prefs.{csh,sh}
+ etc_prefs = {}
- if '+scotch' in self.spec or '+ptscotch' in self.spec:
- prefs_dict['SCOTCH_SYSTEM'] = 1
- prefs_dict['SCOTCH_DIR'] = self.spec['scotch'].prefix
- prefs_dict['SCOTCH_BIN_DIR'] = self.spec['scotch'].prefix.bin
- prefs_dict['SCOTCH_LIB_DIR'] = self.spec['scotch'].prefix.lib
- prefs_dict['SCOTCH_INCLUDE_DIR'] = \
- self.spec['scotch'].prefix.include
-
- if '+metis' in self.spec:
- prefs_dict['METIS_SYSTEM'] = 1
- prefs_dict['METIS_DIR'] = self.spec['metis'].prefix
- prefs_dict['METIS_BIN_DIR'] = self.spec['metis'].prefix.bin
- prefs_dict['METIS_LIB_DIR'] = self.spec['metis'].prefix.lib
- prefs_dict['METIS_INCLUDE_DIR'] = self.spec['metis'].prefix.include
-
- if '+parmetis' in self.spec:
- prefs_dict['PARMETIS_SYSTEM'] = 1
- prefs_dict['PARMETIS_DIR'] = self.spec['parmetis'].prefix
- prefs_dict['PARMETIS_BIN_DIR'] = self.spec['parmetis'].prefix.bin
- prefs_dict['PARMETIS_LIB_DIR'] = self.spec['parmetis'].prefix.lib
- prefs_dict['PARMETIS_INCLUDE_DIR'] = \
- self.spec['parmetis'].prefix.include
-
- if '+parmgridgen' in self.spec:
- prefs_dict['PARMGRIDGEN_SYSTEM'] = 1
- prefs_dict['PARMGRIDGEN_DIR'] = self.spec['parmgridgen'].prefix
- prefs_dict['PARMGRIDGEN_BIN_DIR'] = \
- self.spec['parmgridgen'].prefix.bin
- prefs_dict['PARMGRIDGEN_LIB_DIR'] = \
- self.spec['parmgridgen'].prefix.lib
- prefs_dict['PARMGRIDGEN_INCLUDE_DIR'] = \
- self.spec['parmgridgen'].prefix.include
+ # Content for etc/config.{csh,sh}/ files
+ etc_config = {}
- if '+paraview' in self.spec:
- prefs_dict['PARAVIEW_SYSTEM'] = 1
- prefs_dict['PARAVIEW_DIR'] = self.spec['paraview'].prefix
- prefs_dict['PARAVIEW_BIN_DIR'] = self.spec['paraview'].prefix.bin
- prefs_dict['QT_SYSTEM'] = 1
- prefs_dict['QT_DIR'] = self.spec['qt'].prefix
- prefs_dict['QT_BIN_DIR'] = self.spec['qt'].prefix.bin
-
- # write the prefs files to define the configuration needed,
- # only the prefs.sh is used by this script but both are
- # installed for end users
- with working_dir('.'):
- with open("etc/prefs.sh", "w") as fh:
- for key in sorted(prefs_dict):
- fh.write('export {0}={1}\n'.format(key, prefs_dict[key]))
-
- with open("etc/prefs.csh", "w") as fh:
- for key in sorted(prefs_dict):
- fh.write('setenv {0}={1}\n'.format(key, prefs_dict[key]))
-
- # Defining a different mpi and optimisation file to be able to
- # make wmake get spack info with minimum modifications on
- # configurations scripts
- mpi_info = [
- 'PFLAGS = -DOMPI_SKIP_MPICXX -DMPICH_IGNORE_CXX_SEEK',
- 'PINC = -I{0}'.format(self.spec['mpi'].prefix.include),
- 'PLIBS = -L{0} -lmpi'.format(self.spec['mpi'].prefix.lib)
- ]
+ phases = ['configure', 'build', 'install']
+ build_script = './spack-Allwmake' # <- Added by patch() method.
- arch_path = ''.join([arch, prefs_dict['WM_ARCH_OPTION'],
- foam_compiler])
- option_path = ''.join([arch_path,
- prefs_dict['WM_PRECISION_OPTION'],
- prefs_dict['WM_COMPILE_OPTION']])
- rule_path = join_path("wmake", "rules", arch_path)
- build_path = join_path(self.stage.source_path, 'lib', option_path)
- install_path = \
- join_path(self.prefix,
- 'foam-extend-{0}'.format(self.version.up_to(2)),
- option_path)
-
- rpaths_foam = ' '.join([
- '{0}{1}'.format(self.compiler.cxx_rpath_arg,
- install_path),
- '{0}{1}'.format(self.compiler.cxx_rpath_arg,
- build_path)
- ])
-
- compiler_flags = {
- 'DBUG': rpaths_foam,
- 'OPT': '-O3',
- }
+ #
+ # - End of definitions / setup -
+ #
- with working_dir(rule_path):
- with open('mplibSPACK', "w") as fh:
- fh.write('\n'.join(mpi_info))
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('FOAM_INST_DIR', os.path.dirname(self.projectdir)),
+ run_env.set('FOAM_PROJECT_DIR', self.projectdir)
+ run_env.set('WM_PROJECT_DIR', self.projectdir)
+ for d in ['wmake', self.archbin]: # bin already added automatically
+ run_env.prepend_path('PATH', join_path(self.projectdir, d))
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Provide location of the OpenFOAM project.
+ This is identical to the WM_PROJECT_DIR value, but we avoid that
+ variable since it would mask the normal OpenFOAM cleanup of
+ previous versions.
+ """
+ spack_env.set('FOAM_PROJECT_DIR', self.projectdir)
+
+ @property
+ def projectdir(self):
+ """Absolute location of project directory: WM_PROJECT_DIR/"""
+ return self.prefix # <- install directly under prefix
+
+ @property
+ def foam_arch(self):
+ if not self._foam_arch:
+ self._foam_arch = OpenfoamArch(self.spec, **self.config)
+ return self._foam_arch
+
+ @property
+ def archbin(self):
+ """Relative location of architecture-specific executables"""
+ return join_path('applications', 'bin', self.foam_arch)
+
+ @property
+ def archlib(self):
+ """Relative location of architecture-specific libraries"""
+ return join_path('lib', self.foam_arch)
- for comp in ['c', 'c++']:
- with open('{0}SPACKOpt'.format(comp), "w") as fh:
- for key, val in compiler_flags.iteritems():
- fh.write('{0}{1} = {2}\n'.format(comp, key, val))
+ def patch(self):
+ """Adjust OpenFOAM build for spack.
+ Where needed, apply filter as an alternative to normal patching."""
+ add_extra_files(self, self.common, self.assets)
+
+ # Adjust ParMGridGen - this is still a mess
+ files = [
+ 'src/dbns/Make/options',
+ 'src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options' # noqa: E501
+ ]
+ for f in files:
+ filter_file(r'-lMGridGen', r'-lmgrid', f, backup=False)
- _files_to_patch = [
+ # Adjust for flex version check
+ files = [
'src/thermophysicalModels/reactionThermo/chemistryReaders/chemkinReader/chemkinLexer.L', # noqa: E501
'src/surfMesh/surfaceFormats/stl/STLsurfaceFormatASCII.L', # noqa: E501
'src/meshTools/triSurface/triSurface/interfaces/STL/readSTLASCII.L', # noqa: E501
@@ -250,40 +200,188 @@ class FoamExtend(Package):
'applications/utilities/mesh/conversion/fluentMeshToFoam/fluentMeshToFoam.L', # noqa: E501
'applications/utilities/mesh/conversion/fluent3DMeshToElmer/fluent3DMeshToElmer.L' # noqa: E501
]
- for _file in _files_to_patch:
- filter_file(r'#if YY_FLEX_SUBMINOR_VERSION < 34',
- r'#if YY_FLEX_MAJOR_VERSION <= 2 && YY_FLEX_MINOR_VERSION <= 5 && YY_FLEX_SUBMINOR_VERSION < 34', # noqa: E501
- _file)
-
- def setup_environment(self, spack_env, run_env):
- with working_dir(self.stage.path):
- spack_env.set('FOAM_INST_DIR', os.path.abspath('.'))
-
- (arch, foam_compiler) = self.set_arch()
+ for f in files:
+ filter_file(
+ r'#if YY_FLEX_SUBMINOR_VERSION < 34',
+ r'#if YY_FLEX_MAJOR_VERSION <= 2 && YY_FLEX_MINOR_VERSION <= 5 && YY_FLEX_SUBMINOR_VERSION < 34', # noqa: E501
+ f, backup=False)
+
+ def configure(self, spec, prefix):
+ """Make adjustments to the OpenFOAM configuration files in their various
+ locations: etc/bashrc, etc/config.sh/FEATURE and customizations that
+ don't properly fit get placed in the etc/prefs.sh file (similiarly for
+ csh).
+ """
+ # Content for etc/prefs.{csh,sh}
+ self.etc_prefs = {
+ '000': { # Sort first
+ 'compilerInstall': 'System',
+ },
+ '001': {},
+ 'cmake': {
+ 'CMAKE_DIR': spec['cmake'].prefix,
+ 'CMAKE_BIN_DIR': spec['cmake'].prefix.bin,
+ },
+ 'python': {
+ 'PYTHON_DIR': spec['python'].home,
+ 'PYTHON_BIN_DIR': spec['python'].home.bin,
+ },
+ 'flex': {
+ 'FLEX_SYSTEM': 1,
+ 'FLEX_DIR': spec['flex'].prefix,
+ },
+ 'bison': {
+ 'BISON_SYSTEM': 1,
+ 'BISON_DIR': spec['flex'].prefix,
+ },
+ 'zlib': {
+ 'ZLIB_SYSTEM': 1,
+ 'ZLIB_DIR': spec['zlib'].prefix,
+ },
+ }
+ # Adjust configuration via prefs - sort second
+ self.etc_prefs['001'].update(self.foam_arch.foam_dict())
+
+ if '+scotch' in spec or '+ptscotch' in spec:
+ pkg = spec['scotch'].prefix
+ self.etc_prefs['scotch'] = {
+ 'SCOTCH_SYSTEM': 1,
+ 'SCOTCH_DIR': pkg,
+ 'SCOTCH_BIN_DIR': pkg.bin,
+ 'SCOTCH_LIB_DIR': pkg.lib,
+ 'SCOTCH_INCLUDE_DIR': pkg.include,
+ }
+
+ if '+metis' in spec:
+ pkg = spec['metis'].prefix
+ self.etc_prefs['metis'] = {
+ 'METIS_SYSTEM': 1,
+ 'METIS_DIR': pkg,
+ 'METIS_BIN_DIR': pkg.bin,
+ 'METIS_LIB_DIR': pkg.lib,
+ 'METIS_INCLUDE_DIR': pkg.include,
+ }
+
+ if '+parmetis' in spec:
+ pkg = spec['parmetis'].prefix
+ self.etc_prefs['parametis'] = {
+ 'PARMETIS_SYSTEM': 1,
+ 'PARMETIS_DIR': pkg,
+ 'PARMETIS_BIN_DIR': pkg.bin,
+ 'PARMETIS_LIB_DIR': pkg.lib,
+ 'PARMETIS_INCLUDE_DIR': pkg.include,
+ }
+
+ if '+parmgridgen' in spec:
+ pkg = spec['parmgridgen'].prefix
+ self.etc_prefs['parmgridgen'] = {
+ 'PARMGRIDGEN_SYSTEM': 1,
+ 'PARMGRIDGEN_DIR': pkg,
+ 'PARMGRIDGEN_BIN_DIR': pkg.bin,
+ 'PARMGRIDGEN_LIB_DIR': pkg.lib,
+ 'PARMGRIDGEN_INCLUDE_DIR': pkg.include,
+ }
- run_env.set('FOAM_INST_DIR', self.prefix)
+ if '+paraview' in self.spec:
+ self.etc_prefs['paraview'] = {
+ 'PARAVIEW_SYSTEM': 1,
+ 'PARAVIEW_DIR': spec['paraview'].prefix,
+ 'PARAVIEW_BIN_DIR': spec['paraview'].prefix.bin,
+ }
+ self.etc_prefs['qt'] = {
+ 'QT_SYSTEM': 1,
+ 'QT_DIR': spec['qt'].prefix,
+ 'QT_BIN_DIR': spec['qt'].prefix.bin,
+ }
+
+ # Write prefs files according to the configuration.
+ # Only need prefs.sh for building, but install both for end-users
+ write_environ(
+ self.etc_prefs,
+ posix=join_path('etc', 'prefs.sh'),
+ cshell=join_path('etc', 'prefs.csh'))
+
+ def build(self, spec, prefix):
+ """Build using the OpenFOAM Allwmake script, with a wrapper to source
+ its environment first.
+ Only build if the compiler is known to be supported.
+ """
+ self.foam_arch.has_rule(self.stage.source_path)
+ self.foam_arch.create_rules(self.stage.source_path, self)
+
+ args = []
+ if self.parallel: # Build in parallel? - pass via the environment
+ os.environ['WM_NCOMPPROCS'] = str(make_jobs)
+ builder = Executable(self.build_script)
+ builder(*args)
def install(self, spec, prefix):
- env_openfoam = self.get_openfoam_environment()
- env_openfoam.apply_modifications()
+ """Install under the projectdir"""
+ opts = str(self.foam_arch)
+
+ # Fairly ugly since intermediate targets are scattered inside sources
+ appdir = 'applications'
+ projdir = os.path.basename(self.projectdir)
+ mkdirp(self.projectdir, join_path(self.projectdir, appdir))
+ # Filtering: bashrc, cshrc
+ edits = {
+ 'WM_PROJECT_INST_DIR': os.path.dirname(self.projectdir),
+ 'WM_PROJECT_DIR': join_path('$WM_PROJECT_INST_DIR', projdir),
+ }
- if self.parallel:
- os.environ['WM_NCOMPPROCS'] = str(self.make_jobs) \
- if self.make_jobs else str(multiprocessing.cpu_count())
+ # All top-level files, except spack build info and possibly Allwmake
+ if '+source' in spec:
+ ignored = re.compile(r'^spack-.*')
+ else:
+ ignored = re.compile(r'^(Allclean|Allwmake|spack-).*')
- allwmake = Executable('./Allwmake')
- allwmake()
+ files = [
+ f for f in glob.glob("*")
+ if os.path.isfile(f) and not ignored.search(f)
+ ]
+ for f in files:
+ install(f, self.projectdir)
- install_path = \
- join_path(self.prefix,
- 'foam-extend-{0}'.format(self.version.up_to(2)))
+ # Install directories. install applications/bin directly
+ # Install 'etc' before 'bin' (for symlinks)
+ for d in ['etc', 'bin', 'wmake', 'lib', join_path(appdir, 'bin')]:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ symlinks=True)
if '+source' in spec:
- install_tree('src', join_path(install_path, 'src'))
- install_tree('tutorials', join_path(install_path, 'tutorials'))
-
- install_tree('lib', join_path(install_path, 'lib'))
- install_tree('bin', join_path(install_path, 'bin'))
- install_tree('applications', join_path(install_path, 'applications'))
- install_tree('etc', join_path(install_path, 'etc'))
- install_tree('wmake', join_path(install_path, 'wmake'))
+ subitem = join_path(appdir, 'Allwmake')
+ install(subitem, join_path(self.projectdir, subitem))
+
+ ignored = [opts] # Ignore intermediate targets
+ for d in ['src', 'tutorials']:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ ignore=shutil.ignore_patterns(*ignored),
+ symlinks=True)
+
+ for d in ['solvers', 'utilities']:
+ install_tree(
+ join_path(appdir, d),
+ join_path(self.projectdir, appdir, d),
+ ignore=shutil.ignore_patterns(*ignored),
+ symlinks=True)
+
+ etc_dir = join_path(self.projectdir, 'etc')
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path(etc_dir, 'bashrc'),
+ cshell=join_path(etc_dir, 'cshrc'))
+ self.install_links()
+
+ def install_links(self):
+ """Add symlinks into bin/, lib/ (eg, for other applications)"""
+ # Make build log visible - it contains OpenFOAM-specific information
+ with working_dir(self.projectdir):
+ os.symlink(
+ join_path('.spack', 'build.out'),
+ join_path('log.' + str(self.foam_arch)))
+
+# -----------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/folly/package.py b/var/spack/repos/builtin/packages/folly/package.py
new file mode 100644
index 0000000000..9dca4bd6cf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/folly/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Folly(AutotoolsPackage):
+ """Folly (acronymed loosely after Facebook Open Source Library) is a
+ library of C++11 components designed with practicality and efficiency
+ in mind.
+
+ Folly contains a variety of core library components used extensively at
+ Facebook. In particular, it's often a dependency of Facebook's other open
+ source C++ efforts and place where those projects can share code.
+ """
+
+ homepage = "https://github.com/facebook/folly"
+ url = "https://github.com/facebook/folly/archive/v2017.06.05.00.tar.gz"
+
+ version('2017.06.05.00', 'a25e8d646702c3e0c1400f591e485a33')
+ version('2016.11.14.00', '88550acdb4d4b331c0ca9922039c8727')
+ version('2016.11.07.00', '2f605b20ad539bccdbfd361daa92081e')
+ version('2016.10.31.00', 'ab3049302792f8470cef64f3a29eedec')
+ version('2016.10.24.00', '0445efb7c16b5c32dfbb173157e54866')
+ version('2016.10.17.00', 'b7e01934a45c5036fab8fdc70e9eaf4d')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('pkg-config', type='build')
+
+ # TODO: folly requires gcc 4.9+ and a version of boost compiled with
+ # TODO: C++14 support (but there's no neat way to check that these
+ # TODO: constraints are met right now)
+ depends_on('boost')
+
+ depends_on('gflags')
+ depends_on('glog')
+ depends_on('double-conversion')
+ depends_on('libevent')
+
+ configure_directory = 'folly'
diff --git a/var/spack/repos/builtin/packages/font-adobe-100dpi/package.py b/var/spack/repos/builtin/packages/font-adobe-100dpi/package.py
index bde6f352da..8efdebb802 100644
--- a/var/spack/repos/builtin/packages/font-adobe-100dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-adobe-100dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-adobe-75dpi/package.py b/var/spack/repos/builtin/packages/font-adobe-75dpi/package.py
index 380fcf363e..0b73bd1b9a 100644
--- a/var/spack/repos/builtin/packages/font-adobe-75dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-adobe-75dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-adobe-utopia-100dpi/package.py b/var/spack/repos/builtin/packages/font-adobe-utopia-100dpi/package.py
index 9782d259b5..7a61e04de5 100644
--- a/var/spack/repos/builtin/packages/font-adobe-utopia-100dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-adobe-utopia-100dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-adobe-utopia-75dpi/package.py b/var/spack/repos/builtin/packages/font-adobe-utopia-75dpi/package.py
index 9b687a7814..dddd546cad 100644
--- a/var/spack/repos/builtin/packages/font-adobe-utopia-75dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-adobe-utopia-75dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-adobe-utopia-type1/package.py b/var/spack/repos/builtin/packages/font-adobe-utopia-type1/package.py
index 14004e9883..0d03c12822 100644
--- a/var/spack/repos/builtin/packages/font-adobe-utopia-type1/package.py
+++ b/var/spack/repos/builtin/packages/font-adobe-utopia-type1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-alias/package.py b/var/spack/repos/builtin/packages/font-alias/package.py
index eb8c79fe2a..15a14bf2cb 100644
--- a/var/spack/repos/builtin/packages/font-alias/package.py
+++ b/var/spack/repos/builtin/packages/font-alias/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-arabic-misc/package.py b/var/spack/repos/builtin/packages/font-arabic-misc/package.py
index 8307d58d6e..20ca7a2df0 100644
--- a/var/spack/repos/builtin/packages/font-arabic-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-arabic-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-100dpi/package.py b/var/spack/repos/builtin/packages/font-bh-100dpi/package.py
index 1d488a6cd9..3472783671 100644
--- a/var/spack/repos/builtin/packages/font-bh-100dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-100dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-75dpi/package.py b/var/spack/repos/builtin/packages/font-bh-75dpi/package.py
index 22420dd887..bb5268208c 100644
--- a/var/spack/repos/builtin/packages/font-bh-75dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-75dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-100dpi/package.py b/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-100dpi/package.py
index 173195a557..6fe18e703b 100644
--- a/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-100dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-100dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-75dpi/package.py b/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-75dpi/package.py
index 9066823bc3..f44596b882 100644
--- a/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-75dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-lucidatypewriter-75dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-ttf/package.py b/var/spack/repos/builtin/packages/font-bh-ttf/package.py
index a10b88d355..83ad928c8b 100644
--- a/var/spack/repos/builtin/packages/font-bh-ttf/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-ttf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bh-type1/package.py b/var/spack/repos/builtin/packages/font-bh-type1/package.py
index fffc2e4095..594efb0460 100644
--- a/var/spack/repos/builtin/packages/font-bh-type1/package.py
+++ b/var/spack/repos/builtin/packages/font-bh-type1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bitstream-100dpi/package.py b/var/spack/repos/builtin/packages/font-bitstream-100dpi/package.py
index e8e11ae627..a5722733da 100644
--- a/var/spack/repos/builtin/packages/font-bitstream-100dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bitstream-100dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bitstream-75dpi/package.py b/var/spack/repos/builtin/packages/font-bitstream-75dpi/package.py
index 5dd033964b..8dcf9dfe2c 100644
--- a/var/spack/repos/builtin/packages/font-bitstream-75dpi/package.py
+++ b/var/spack/repos/builtin/packages/font-bitstream-75dpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bitstream-speedo/package.py b/var/spack/repos/builtin/packages/font-bitstream-speedo/package.py
index e746f241df..e2ae5fea3c 100644
--- a/var/spack/repos/builtin/packages/font-bitstream-speedo/package.py
+++ b/var/spack/repos/builtin/packages/font-bitstream-speedo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-bitstream-type1/package.py b/var/spack/repos/builtin/packages/font-bitstream-type1/package.py
index 65289685c3..c6699b7521 100644
--- a/var/spack/repos/builtin/packages/font-bitstream-type1/package.py
+++ b/var/spack/repos/builtin/packages/font-bitstream-type1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-cronyx-cyrillic/package.py b/var/spack/repos/builtin/packages/font-cronyx-cyrillic/package.py
index 07e1330fe6..829f28ee1e 100644
--- a/var/spack/repos/builtin/packages/font-cronyx-cyrillic/package.py
+++ b/var/spack/repos/builtin/packages/font-cronyx-cyrillic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-cursor-misc/package.py b/var/spack/repos/builtin/packages/font-cursor-misc/package.py
index 6fddc015e3..34479c7fc6 100644
--- a/var/spack/repos/builtin/packages/font-cursor-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-cursor-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-daewoo-misc/package.py b/var/spack/repos/builtin/packages/font-daewoo-misc/package.py
index 3dd3b59b14..9c346c3b8b 100644
--- a/var/spack/repos/builtin/packages/font-daewoo-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-daewoo-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-dec-misc/package.py b/var/spack/repos/builtin/packages/font-dec-misc/package.py
index 035ae3eb15..22c52a95da 100644
--- a/var/spack/repos/builtin/packages/font-dec-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-dec-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-ibm-type1/package.py b/var/spack/repos/builtin/packages/font-ibm-type1/package.py
index 34bbe85cfb..a8d06ef092 100644
--- a/var/spack/repos/builtin/packages/font-ibm-type1/package.py
+++ b/var/spack/repos/builtin/packages/font-ibm-type1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-isas-misc/package.py b/var/spack/repos/builtin/packages/font-isas-misc/package.py
index b0575f8ffc..86353f22ce 100644
--- a/var/spack/repos/builtin/packages/font-isas-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-isas-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-jis-misc/package.py b/var/spack/repos/builtin/packages/font-jis-misc/package.py
index a5bee3fe31..18723cc129 100644
--- a/var/spack/repos/builtin/packages/font-jis-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-jis-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-micro-misc/package.py b/var/spack/repos/builtin/packages/font-micro-misc/package.py
index 930a299beb..664cc158a7 100644
--- a/var/spack/repos/builtin/packages/font-micro-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-micro-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-misc-cyrillic/package.py b/var/spack/repos/builtin/packages/font-misc-cyrillic/package.py
index 4d25552732..52d2e0ca33 100644
--- a/var/spack/repos/builtin/packages/font-misc-cyrillic/package.py
+++ b/var/spack/repos/builtin/packages/font-misc-cyrillic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-misc-ethiopic/package.py b/var/spack/repos/builtin/packages/font-misc-ethiopic/package.py
index 6ccdc4e482..ed10f2ecad 100644
--- a/var/spack/repos/builtin/packages/font-misc-ethiopic/package.py
+++ b/var/spack/repos/builtin/packages/font-misc-ethiopic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-misc-meltho/package.py b/var/spack/repos/builtin/packages/font-misc-meltho/package.py
index eda84e2b32..beef19e00a 100644
--- a/var/spack/repos/builtin/packages/font-misc-meltho/package.py
+++ b/var/spack/repos/builtin/packages/font-misc-meltho/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-misc-misc/package.py b/var/spack/repos/builtin/packages/font-misc-misc/package.py
index c960d18b39..b818cd6a84 100644
--- a/var/spack/repos/builtin/packages/font-misc-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-misc-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-mutt-misc/package.py b/var/spack/repos/builtin/packages/font-mutt-misc/package.py
index a5d4cae060..0f303923b0 100644
--- a/var/spack/repos/builtin/packages/font-mutt-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-mutt-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-schumacher-misc/package.py b/var/spack/repos/builtin/packages/font-schumacher-misc/package.py
index 193fa2691e..66e8002877 100644
--- a/var/spack/repos/builtin/packages/font-schumacher-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-schumacher-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-screen-cyrillic/package.py b/var/spack/repos/builtin/packages/font-screen-cyrillic/package.py
index 5914a3c9de..71c2230d1f 100644
--- a/var/spack/repos/builtin/packages/font-screen-cyrillic/package.py
+++ b/var/spack/repos/builtin/packages/font-screen-cyrillic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-sony-misc/package.py b/var/spack/repos/builtin/packages/font-sony-misc/package.py
index 145ee20971..ccea5883ac 100644
--- a/var/spack/repos/builtin/packages/font-sony-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-sony-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-sun-misc/package.py b/var/spack/repos/builtin/packages/font-sun-misc/package.py
index dcf5b9e217..26e0c935ed 100644
--- a/var/spack/repos/builtin/packages/font-sun-misc/package.py
+++ b/var/spack/repos/builtin/packages/font-sun-misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-util/package.py b/var/spack/repos/builtin/packages/font-util/package.py
index 0b310117c6..4f55412457 100644
--- a/var/spack/repos/builtin/packages/font-util/package.py
+++ b/var/spack/repos/builtin/packages/font-util/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class FontUtil(Package):
+class FontUtil(AutotoolsPackage):
"""X.Org font package creation/installation utilities."""
homepage = "http://cgit.freedesktop.org/xorg/font/util"
@@ -35,9 +35,3 @@ class FontUtil(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/font-winitzki-cyrillic/package.py b/var/spack/repos/builtin/packages/font-winitzki-cyrillic/package.py
index 0af366c742..dade47b7d2 100644
--- a/var/spack/repos/builtin/packages/font-winitzki-cyrillic/package.py
+++ b/var/spack/repos/builtin/packages/font-winitzki-cyrillic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/font-xfree86-type1/package.py b/var/spack/repos/builtin/packages/font-xfree86-type1/package.py
index dceac106a9..2a4dfea233 100644
--- a/var/spack/repos/builtin/packages/font-xfree86-type1/package.py
+++ b/var/spack/repos/builtin/packages/font-xfree86-type1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/fontcacheproto/package.py b/var/spack/repos/builtin/packages/fontcacheproto/package.py
index 77feb87573..94e952de52 100644
--- a/var/spack/repos/builtin/packages/fontcacheproto/package.py
+++ b/var/spack/repos/builtin/packages/fontcacheproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Fontcacheproto(Package):
+class Fontcacheproto(AutotoolsPackage):
"""X.org FontcacheProto protocol headers."""
homepage = "http://cgit.freedesktop.org/xorg/proto/fontcacheproto"
url = "https://www.x.org/archive/individual/proto/fontcacheproto-0.1.3.tar.gz"
version('0.1.3', '5a91ab914ffbfbc856e6fcde52e6f3e3')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/fontconfig/package.py b/var/spack/repos/builtin/packages/fontconfig/package.py
index 4f79bbb6fc..8cfd5c0d54 100644
--- a/var/spack/repos/builtin/packages/fontconfig/package.py
+++ b/var/spack/repos/builtin/packages/fontconfig/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,19 +28,32 @@ from spack import *
class Fontconfig(AutotoolsPackage):
"""Fontconfig is a library for configuring/customizing font access"""
homepage = "http://www.freedesktop.org/wiki/Software/fontconfig/"
- url = "http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.11.1.tar.gz"
+ url = "http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.12.3.tar.gz"
+ version('2.12.3', 'aca0c734c1a38eb3ba12b2447dd90ab0')
+ version('2.12.1', 'ce55e525c37147eee14cc2de6cc09f6c')
version('2.11.1', 'e75e303b4f7756c2b16203a57ac87eba')
depends_on('freetype')
+ depends_on('gperf', type='build', when='@2.12.2:')
depends_on('libxml2')
depends_on('pkg-config', type='build')
- depends_on('font-util', type='build')
+ depends_on('font-util')
def configure_args(self):
font_path = join_path(self.spec['font-util'].prefix, 'share', 'fonts')
- return ["--prefix={0}".format(self.prefix),
- "--enable-libxml2",
- "--disable-docs",
- "--with-default-fonts={0}".format(font_path)]
+ return [
+ '--enable-libxml2',
+ '--disable-docs',
+ '--with-default-fonts={0}'.format(font_path)
+ ]
+
+ @run_after('install')
+ def system_fonts(self):
+ # point configuration file to system-install fonts
+ # gtk applications were failing to display text without this
+ config_file = join_path(self.prefix, 'etc', 'fonts', 'fonts.conf')
+ filter_file('<dir prefix="xdg">fonts</dir>',
+ '<dir prefix="xdg">fonts</dir><dir>/usr/share/fonts</dir>',
+ config_file)
diff --git a/var/spack/repos/builtin/packages/fontsproto/package.py b/var/spack/repos/builtin/packages/fontsproto/package.py
index c3771e18fa..c243f9de97 100644
--- a/var/spack/repos/builtin/packages/fontsproto/package.py
+++ b/var/spack/repos/builtin/packages/fontsproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fontsproto(Package):
+class Fontsproto(AutotoolsPackage):
"""X Fonts Extension."""
homepage = "http://cgit.freedesktop.org/xorg/proto/fontsproto"
@@ -35,8 +35,3 @@ class Fontsproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/fonttosfnt/package.py b/var/spack/repos/builtin/packages/fonttosfnt/package.py
index 016cab1ac8..145e619c54 100644
--- a/var/spack/repos/builtin/packages/fonttosfnt/package.py
+++ b/var/spack/repos/builtin/packages/fonttosfnt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fonttosfnt(Package):
+class Fonttosfnt(AutotoolsPackage):
"""Wrap a bitmap font in a sfnt (TrueType) wrapper."""
homepage = "http://cgit.freedesktop.org/xorg/app/fonttosfnt"
@@ -39,9 +39,3 @@ class Fonttosfnt(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/fpc/package.py b/var/spack/repos/builtin/packages/fpc/package.py
new file mode 100644
index 0000000000..905aae3314
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fpc/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 Fpc(Package):
+ """Free Pascal is a 32, 64 and 16 bit professional Pascal compiler."""
+
+ homepage = "https://www.freepascal.org/"
+ url = "https://downloads.sourceforge.net/project/freepascal/Linux/3.0.2/fpc-3.0.2.x86_64-linux.tar"
+
+ version('3.0.2', 'e5721c1843cff301c5b46abfee17c890')
+
+ def install(self, spec, prefix):
+ install = Executable('./install.sh')
+
+ # Questions:
+ #
+ # Install prefix:
+ # Install Textmode IDE (Y/n) ?
+ # Install documentation (Y/n) ?
+ # Install demos (Y/n) ?
+
+ install_answers = ['%s\n' % prefix, 'Y\n', 'Y\n', 'n\n']
+
+ install_answers_filename = 'spack-install.in'
+
+ with open(install_answers_filename, 'w') as f:
+ f.writelines(install_answers)
+
+ with open(install_answers_filename, 'r') as f:
+ install(input=f)
diff --git a/var/spack/repos/builtin/packages/freebayes/package.py b/var/spack/repos/builtin/packages/freebayes/package.py
new file mode 100644
index 0000000000..bd5c2b06a3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/freebayes/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Freebayes(MakefilePackage):
+ """Bayesian haplotype-based genetic polymorphism discovery and
+ genotyping."""
+
+ homepage = "https://github.com/ekg/freebayes"
+
+ version('1.1.0', git='https://github.com/ekg/freebayes.git',
+ commit='39e5e4bcb801556141f2da36aba1df5c5c60701f',
+ submodules=True)
+
+ depends_on('cmake', type='build')
+ depends_on('zlib')
+
+ parallel = False
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ b = prefix.bin
+ makefile.filter('cp bin/freebayes bin/bamleftalign /usr/local/bin/',
+ 'cp bin/freebayes bin/bamleftalign {0}'.format(b))
+
+ @run_before('install')
+ def make_prefix_dot_bin(self):
+ mkdir(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/freetype/package.py b/var/spack/repos/builtin/packages/freetype/package.py
index 4446ba5666..1ad65a9750 100644
--- a/var/spack/repos/builtin/packages/freetype/package.py
+++ b/var/spack/repos/builtin/packages/freetype/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,14 +32,15 @@ class Freetype(AutotoolsPackage):
of most vector and bitmap font formats."""
homepage = "https://www.freetype.org/index.html"
- url = "http://download.savannah.gnu.org/releases/freetype/freetype-2.7.tar.gz"
+ url = "http://download.savannah.gnu.org/releases/freetype/freetype-2.7.1.tar.gz"
+ version('2.7.1', '78701bee8d249578d83bb9a2f3aa3616')
version('2.7', '337139e5c7c5bd645fe130608e0fa8b5')
version('2.5.3', 'cafe9f210e45360279c730d27bf071e9')
depends_on('libpng')
depends_on('bzip2')
- depends_on('pkg-config@0.9.0:', type='build')
-
+ depends_on('pkg-config@0.24:', type='build')
+
def configure_args(self):
return ['--with-harfbuzz=no']
diff --git a/var/spack/repos/builtin/packages/fseq/package.py b/var/spack/repos/builtin/packages/fseq/package.py
new file mode 100644
index 0000000000..037aa4f648
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fseq/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Fseq(Package):
+ """F-Seq: A Feature Density Estimator for High-Throughput Sequence Tags"""
+
+ homepage = "http://fureylab.web.unc.edu/software/fseq/"
+ url = "http://fureylab.med.unc.edu/fseq/fseq_1.84.tgz"
+
+ version('1.84', 'f9124ad0f45c60f3a7eb74dde8c945b9')
+
+ depends_on('java', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('lib', prefix.lib)
+ install('mapviewToBed.pl', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/fsl/package.py b/var/spack/repos/builtin/packages/fsl/package.py
new file mode 100644
index 0000000000..2191be1ce3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/fsl/package.py
@@ -0,0 +1,102 @@
+##############################################################################
+# 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/spack/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 *
+from spack.environment import EnvironmentModifications
+import os
+import distutils.dir_util
+
+
+class Fsl(Package):
+ """FSL is a comprehensive library of analysis tools for FMRI, MRI and DTI
+ brain imaging data.
+
+ Note: A manual download is required for FSL.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://fsl.fmrib.ox.ac.uk"
+ url = "file://{0}/fsl-5.0.10-sources.tar.gz".format(os.getcwd())
+
+ version('5.0.10', '64823172a08aad679833240ba64c8e30')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('expat')
+ depends_on('libx11')
+ depends_on('mesa-glu')
+ depends_on('zlib')
+ depends_on('libpng')
+ depends_on('boost')
+ depends_on('sqlite')
+
+ conflicts('%gcc@6:', when='@5.0.10')
+
+ def patch(self):
+ # Uncomment lines in source file to allow building from source
+ with working_dir(join_path(self.stage.source_path, 'etc', 'fslconf')):
+ sourced = FileFilter('fsl.sh')
+ sourced.filter('#FSLCONFDIR', 'FSLCONFDIR')
+ sourced.filter('#FSLMACHTYPE', 'FSLMACHTYPE')
+ # Fix error in build script
+ buildscript = FileFilter('build')
+ buildscript.filter('mist-clean', 'mist')
+
+ def install(self, spec, prefix):
+ build = Executable('./build')
+ build()
+
+ distutils.dir_util.copy_tree(".", prefix)
+
+ def setup_environment(self, spack_env, run_env):
+ if not self.stage.source_path:
+ self.stage.fetch()
+ self.stage.expand_archive()
+
+ spack_env.set('FSLDIR', self.stage.source_path)
+
+ # Here, run-time environment variables are being set manually.
+ # Normally these would be added to the modulefile at build-time
+ # by sourcing fsl.sh, but incorrect paths were being set, pointing to
+ # the staging directory rather than the install directory.
+ run_env.set('FSLDIR', self.prefix)
+ run_env.set('FSLOUTPUTTYPE', 'NIFTI_GZ')
+ run_env.set('FSLMULTIFILEQUIT', 'TRUE')
+ run_env.set('FSLTCLSH', self.prefix.bin.fsltclsh)
+ run_env.set('FSLWISH', self.prefix.bin.fslwish)
+ run_env.set('FSLLOCKDIR', '')
+ run_env.set('FSLMACHINELIST', '')
+ run_env.set('FSLREMOTECALL', '')
+ run_env.set('FSLGECUDAQ', 'cuda.q')
+
+ run_env.prepend_path('PATH', self.prefix)
+
+ # Below is for sourcing purposes during building
+ fslsetup = join_path(self.stage.source_path, 'etc', 'fslconf',
+ 'fsl.sh')
+
+ if os.path.isfile(fslsetup):
+ spack_env.extend(EnvironmentModifications.from_sourcing_file(
+ fslsetup))
diff --git a/var/spack/repos/builtin/packages/fslsfonts/package.py b/var/spack/repos/builtin/packages/fslsfonts/package.py
index 6e46bd6b5a..ce5b04f0ee 100644
--- a/var/spack/repos/builtin/packages/fslsfonts/package.py
+++ b/var/spack/repos/builtin/packages/fslsfonts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fslsfonts(Package):
+class Fslsfonts(AutotoolsPackage):
"""fslsfonts produces a list of fonts served by an X font server."""
homepage = "http://cgit.freedesktop.org/xorg/app/fslsfonts"
@@ -38,9 +38,3 @@ class Fslsfonts(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/fstobdf/package.py b/var/spack/repos/builtin/packages/fstobdf/package.py
index 6358e33d2a..dd51473d41 100644
--- a/var/spack/repos/builtin/packages/fstobdf/package.py
+++ b/var/spack/repos/builtin/packages/fstobdf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Fstobdf(Package):
+class Fstobdf(AutotoolsPackage):
"""The fstobdf program reads a font from a font server and prints a BDF
file on the standard output that may be used to recreate the font.
This is useful in testing servers, debugging font metrics, and
@@ -42,9 +42,3 @@ class Fstobdf(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/funhpc/package.py b/var/spack/repos/builtin/packages/funhpc/package.py
new file mode 100644
index 0000000000..26863ae4f4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/funhpc/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 Funhpc(CMakePackage):
+ """FunHPC: Functional HPC Programming"""
+ homepage = "https://github.com/eschnett/FunHPC.cxx"
+ url = "https://github.com/eschnett/FunHPC.cxx/archive/version/0.1.0.tar.gz"
+
+ version('1.3.0', '71a1e57c4d882cdf001f29122edf7fc6')
+ version('1.2.0', 'ba2bbeea3091e999b6b85eaeb1b67a83')
+ version('1.1.1', '7b9ef638b02fffe35b75517e8eeff580')
+ version('1.1.0', '897bd968c42cd4f14f86fcf67da70444')
+ version('1.0.0', 'f34e71ccd5548b42672e692c913ba5ee')
+ version('0.1.1', 'f0248710f2de88ed2a595ad40d99997c')
+ version('0.1.0', '00f7dabc08ed1ab77858785ce0809f50')
+ version('develop',
+ git='https://github.com/eschnett/FunHPC.cxx', branch='master')
+
+ variant('pic', default=True,
+ description="Produce position-independent code")
+
+ depends_on('cereal')
+ depends_on('googletest')
+ depends_on('hwloc')
+ depends_on('jemalloc')
+ depends_on('mpi')
+ depends_on('qthreads')
+
+ def cmake_args(self):
+ spec = self.spec
+ options = ["-DGTEST_ROOT=%s" % spec['googletest'].prefix]
+ if '+pic' in spec:
+ options += ["-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true"]
+ return options
+
+ def check(self):
+ with working_dir(self.build_directory):
+ make("test", "CTEST_OUTPUT_ON_FAILURE=1")
diff --git a/var/spack/repos/builtin/packages/gapcloser/package.py b/var/spack/repos/builtin/packages/gapcloser/package.py
new file mode 100644
index 0000000000..b59b46af00
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gapcloser/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Gapcloser(Package):
+ """The GapCloser is designed to close the gaps emerging during the
+ scaffolding process"""
+
+ homepage = "https://sourceforge.net/projects/soapdenovo2/files/GapCloser/"
+ url = "https://downloads.sourceforge.net/project/soapdenovo2/GapCloser/bin/r6/GapCloser-bin-v1.12-r6.tgz"
+
+ version('1.12-r6', '42b4e4256bdc9f9f31a391a359256209')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('GapCloser', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/gapfiller/package.py b/var/spack/repos/builtin/packages/gapfiller/package.py
new file mode 100644
index 0000000000..43e6eeaac0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gapfiller/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Gapfiller(Package):
+ """GapFiller is a stand-alone program for closing gaps within
+ pre-assembled scaffolds.
+
+ Note: A manual download is required for GapFiller.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://www.baseclear.com/genomics/bioinformatics/basetools/gapfiller"
+
+ version('1.10', '54d5e2ada131a1305a66e41c0d380382')
+
+ def url_for_version(self, version):
+ return "file://{0}/39GapFiller_v{1}_linux-x86_64.tar.gz".format(
+ os.getcwd(), version.dashed)
+
+ depends_on('perl', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ install_tree('bowtie', prefix.bowtie)
+ install_tree('bwa', prefix.bwa)
+ install('GapFiller.pl', prefix)
diff --git a/var/spack/repos/builtin/packages/gasnet/package.py b/var/spack/repos/builtin/packages/gasnet/package.py
index 12ecd9fd6f..6b8a498671 100644
--- a/var/spack/repos/builtin/packages/gasnet/package.py
+++ b/var/spack/repos/builtin/packages/gasnet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gasnet(Package):
+class Gasnet(AutotoolsPackage):
"""GASNet is a language-independent, low-level networking layer
that provides network-independent, high-performance communication
primitives tailored for implementing parallel global address space
@@ -35,26 +35,49 @@ class Gasnet(Package):
homepage = "http://gasnet.lbl.gov"
url = "http://gasnet.lbl.gov/GASNet-1.24.0.tar.gz"
+ version('1.30.0', '2ddb1d8397d62acfd389095ca8da72f6')
+ version('1.28.2', '6ca0463dc2430570e40646c4d1e97b36')
+ version('1.28.0', 'b44446d951d3d8954aa1570e3556ba61')
version('1.24.0', 'c8afdf48381e8b5a7340bdb32ca0f41a')
- def install(self, spec, prefix):
- # TODO: don't use paths with @ in them.
- change_sed_delimiter('@', ';', 'configure')
+ variant('ibv', default=False, description="Support InfiniBand")
+ variant('mpi', default=True, description="Support MPI")
+ variant('aligned-segments', default=False,
+ description="Requirement to achieve aligned VM segments")
+ variant('pshm', default=True,
+ description="Support inter-process shared memory support")
+ variant('segment-mmap-max', default='16GB',
+ description="Upper bound for mmap-based GASNet segments")
- configure(
- "--prefix=%s" % prefix,
+ conflicts('+aligned-segments', when='+pshm')
+
+ depends_on('mpi', when='+mpi')
+
+ def configure_args(self):
+ args = [
# TODO: factor IB suport out into architecture description.
- "--enable-ibv",
- "--enable-udp",
- "--disable-mpi",
+ "--enable-ibv" if '+ibv' in self.spec else '--disable-ibv',
"--enable-par",
- "--enable-mpi-compat",
+ "--enable-smp",
+ "--enable-udp",
+ "--enable-smp-safe",
"--enable-segment-fast",
- "--disable-aligned-segments",
- # TODO: make option so Legion can request builds with/without this.
- # See the Legion webpage for details on when to/not to use.
- "--disable-pshm",
- "--with-segment-mmap-max=64MB")
-
- make()
- make("install")
+ "--enable-pshm" if '+pshm' in self.spec else "--disable-pshm",
+ "--with-segment-mmap-max={0}".format(
+ self.spec.variants['segment-mmap-max'].value),
+ # for consumers with shared libs
+ "CC=%s %s" % (spack_cc, self.compiler.pic_flag),
+ "CXX=%s %s" % (spack_cxx, self.compiler.pic_flag),
+ ]
+
+ if '+aligned-segments' in self.spec:
+ args.append('--enable-aligned-segments')
+ else:
+ args.append('--disable-aligned-segments')
+
+ if '+mpi' in self.spec:
+ args.extend(['--enable-mpi', '--enable-mpi-compat', "MPI_CC=%s %s"
+ % (self.spec['mpi'].mpicc, self.compiler.pic_flag)])
+ else:
+ args.extend(['--disable-mpi', '--disable-mpi-compat'])
+ return args
diff --git a/var/spack/repos/builtin/packages/gaussian/package.py b/var/spack/repos/builtin/packages/gaussian/package.py
new file mode 100644
index 0000000000..ef8c599b94
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gaussian/package.py
@@ -0,0 +1,71 @@
+##############################################################################
+# 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/spack/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 *
+import os
+import shutil
+
+
+class Gaussian(Package):
+ """Gaussian is a computer program for computational chemistry"""
+
+ homepage = "http://www.gaussian.com/"
+ url = "file://{0}/g09.tgz".format(os.getcwd())
+
+ version('09', '7d4c95b535e68e48af183920df427e4e')
+
+ def install(self, spec, prefix):
+ shutil.copytree(os.getcwd(), prefix.bin)
+ patch_install_files = ['flc',
+ 'linda8.2/opteron-linux/bin/flc',
+ 'linda8.2/opteron-linux/bin/LindaLauncher',
+ 'linda8.2/opteron-linux/bin/ntsnet',
+ 'linda8.2/opteron-linux/bin/pmbuild',
+ 'linda8.2/opteron-linux/bin/vntsnet',
+ 'ntsnet'
+ ]
+ for filename in patch_install_files:
+ if os.path.isfile(filename):
+ filter_file('/mf/frisch/g09', prefix.bin, join_path(prefix.bin,
+ filename), string='True')
+ patch_install_files = ['linda8.2/opteron-linux/bin/ntsnet',
+ 'linda8.2/opteron-linux/bin/vntsnet',
+ ]
+ for filename in patch_install_files:
+ if os.path.isfile(filename):
+ filter_file('/usr/bin/linda', prefix.bin, join_path(prefix.bin,
+ filename), string='True')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('g09root', self.prefix)
+ run_env.set('GAUSSIANHOME', self.prefix)
+ run_env.set('GAUSS_EXEDIR', self.prefix.bin)
+ run_env.set('G09_BASIS', join_path(self.prefix.bin, 'basis'))
+ run_env.set('GAUSS_LEXEDIR', join_path(self.prefix.bin,
+ 'linda-exe'))
+ run_env.set('GAUSS_ARCHDIR', join_path(self.prefix.bin, 'arch'))
+ run_env.set('GAUSS_BSDDIR', join_path(self.prefix.bin, 'bsd'))
+ run_env.prepend_path('LD_LIBRARY_PATH', join_path(self.prefix.bin,
+ 'linda8.2/opteron-linux/lib'))
+ run_env.prepend_path('LD_LIBRARY_PATH', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/gawk/package.py b/var/spack/repos/builtin/packages/gawk/package.py
index fbd0ae53bb..8f9f205ff6 100644
--- a/var/spack/repos/builtin/packages/gawk/package.py
+++ b/var/spack/repos/builtin/packages/gawk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -43,3 +43,13 @@ class Gawk(AutotoolsPackage):
url = "http://ftp.gnu.org/gnu/gawk/gawk-4.1.4.tar.xz"
version('4.1.4', '4e7dbc81163e60fd4f0b52496e7542c9')
+
+ depends_on('gettext')
+ depends_on('libsigsegv')
+ depends_on('readline')
+ depends_on('mpfr')
+ depends_on('gmp')
+
+ provides('awk')
+
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/gblocks/package.py b/var/spack/repos/builtin/packages/gblocks/package.py
new file mode 100644
index 0000000000..7e6401bc6d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gblocks/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Gblocks(Package):
+ """Gblocks is a computer program written in ANSI C language that eliminates
+ poorly aligned positions and divergent regions of an alignment of DNA or
+ protein sequences"""
+
+ homepage = "http://molevol.cmima.csic.es/castresana/Gblocks.html"
+ url = "http://molevol.cmima.csic.es/castresana/Gblocks/Gblocks_Linux64_0.91b.tar.Z"
+
+ version('0.91b', 'c2c752ae4cbfda0b8bf09e6662585252')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('Gblocks', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/gcc/darwin/apfs.patch b/var/spack/repos/builtin/packages/gcc/darwin/apfs.patch
new file mode 100644
index 0000000000..d1f9d56667
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/darwin/apfs.patch
@@ -0,0 +1,12 @@
+diff -uNr gcc-7.2.0.orig/libstdc++-v3/include/Makefile.in gcc-7.2.0/libstdc++-v3/include/Makefile.in
+--- gcc-7.2.0.orig/libstdc++-v3/include/Makefile.in 2017-07-25 14:05:07.000000000 -0400
++++ gcc-7.2.0/libstdc++-v3/include/Makefile.in 2017-09-02 12:22:08.000000000 -0400
+@@ -1764,6 +1764,8 @@
+ @GLIBCXX_HOSTED_TRUE@install-data-local: install-headers
+ @GLIBCXX_HOSTED_FALSE@install-data-local: install-freestanding-headers
+
++.NOTPARALLEL: install-headers
++
+ # This is a subset of the full install-headers rule. We only need <ciso646>,
+ # <cstddef>, <cfloat>, <limits>, <climits>, <cstdint>, <cstdlib>, <new>,
+ # <typeinfo>, <exception>, <initializer_list>, <cstdalign>, <cstdarg>,
diff --git a/var/spack/repos/builtin/packages/gcc/darwin/gcc-6.1.0-jit.patch b/var/spack/repos/builtin/packages/gcc/darwin/gcc-6.1.0-jit.patch
new file mode 100644
index 0000000000..8cc4405de4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/darwin/gcc-6.1.0-jit.patch
@@ -0,0 +1,21 @@
+# Fix for libgccjit.so linkage on Darwin
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64089
+# https://github.com/Homebrew/homebrew-core/issues/1872#issuecomment-225625332
+# https://github.com/Homebrew/homebrew-core/issues/1872#issuecomment-225626490
+
+# Stolen from Homebrew:
+# https://raw.githubusercontent.com/Homebrew/formula-patches/e9e0ee09389a54cc4c8fe1c24ebca3cd765ed0ba/gcc/6.1.0-jit.patch
+diff --git a/gcc/jit/Make-lang.in b/gcc/jit/Make-lang.in
+index 44d0750..4df2a9c 100644
+--- a/gcc/jit/Make-lang.in
++++ b/gcc/jit/Make-lang.in
+@@ -85,8 +85,7 @@ $(LIBGCCJIT_FILENAME): $(jit_OBJS) \
+ $(jit_OBJS) libbackend.a libcommon-target.a libcommon.a \
+ $(CPPLIB) $(LIBDECNUMBER) $(LIBS) $(BACKENDLIBS) \
+ $(EXTRA_GCC_OBJS) \
+- -Wl,--version-script=$(srcdir)/jit/libgccjit.map \
+- -Wl,-soname,$(LIBGCCJIT_SONAME)
++ -Wl,-install_name,$(LIBGCCJIT_SONAME)
+
+ $(LIBGCCJIT_SONAME_SYMLINK): $(LIBGCCJIT_FILENAME)
+ ln -sf $(LIBGCCJIT_FILENAME) $(LIBGCCJIT_SONAME_SYMLINK)
diff --git a/var/spack/repos/builtin/packages/gcc/darwin/gcc-7.1.0-headerpad.patch b/var/spack/repos/builtin/packages/gcc/darwin/gcc-7.1.0-headerpad.patch
new file mode 100644
index 0000000000..11ca2d0e4d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gcc/darwin/gcc-7.1.0-headerpad.patch
@@ -0,0 +1,19 @@
+# Use -headerpad_max_install_names in the build,
+# otherwise lto1 load commands cannot be edited on El Capitan
+
+# Stolen from Homebrew:
+# https://raw.githubusercontent.com/Homebrew/formula-patches/32cf103/gcc/7.1.0-headerpad.patch
+
+diff --git a/config/mh-darwin b/config/mh-darwin
+index 148b730..c2318b5 100644
+--- a/config/mh-darwin
++++ b/config/mh-darwin
+@@ -16,7 +16,7 @@ DARWIN_GCC_MDYNAMIC_NO_PIC := \
+ DARWIN_NO_PIE := `case ${host} in *-*-darwin[1][1-9]*) echo -Wl,-no_pie ;; esac;`
+
+ BOOT_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
+-BOOT_LDFLAGS += $(DARWIN_NO_PIE)
++BOOT_LDFLAGS += $(DARWIN_NO_PIE) -Wl,-headerpad_max_install_names
+
+ # Similarly, for cross-compilation.
+ STAGE1_CFLAGS += $(DARWIN_MDYNAMIC_NO_PIC)
diff --git a/var/spack/repos/builtin/packages/gcc/package.py b/var/spack/repos/builtin/packages/gcc/package.py
index 31da068d72..df7060e742 100644
--- a/var/spack/repos/builtin/packages/gcc/package.py
+++ b/var/spack/repos/builtin/packages/gcc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,25 +23,31 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from spack.operating_systems.mac_os import macOS_version
+from llnl.util import tty
-from contextlib import closing
-from glob import glob
+import glob
+import os
+import shutil
import sys
-from os.path import isfile
-class Gcc(Package):
- """The GNU Compiler Collection includes front ends for C, C++,
- Objective-C, Fortran, and Java."""
- homepage = "https://gcc.gnu.org"
+class Gcc(AutotoolsPackage):
+ """The GNU Compiler Collection includes front ends for C, C++, Objective-C,
+ Fortran, Ada, and Go, as well as libraries for these languages."""
- url = "http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.bz2"
+ homepage = 'https://gcc.gnu.org'
+ url = 'http://ftp.gnu.org/gnu/gcc/gcc-7.1.0/gcc-7.1.0.tar.bz2'
list_url = 'http://ftp.gnu.org/gnu/gcc/'
- list_depth = 2
+ list_depth = 1
+ version('7.2.0', 'ff370482573133a7fcdd96cd2f552292')
+ version('7.1.0', '6bf56a2bca9dac9dbbf8e8d1036964a8')
+ version('6.4.0', '11ba51a0cfb8471927f387c8895fe232')
version('6.3.0', '677a7623c7ef6ab99881bc4e048debb6')
version('6.2.0', '9768625159663b300ae4de2f4745fcc4')
version('6.1.0', '8fb6cb98b8459f5863328380fbf06bd1')
+ version('5.5.0', '0f70424213b4a1113c04ba66ddda0c1f')
version('5.4.0', '4c626ac2a83ef30dfb9260e6f59c2b30')
version('5.3.0', 'c9616fd448f980259c31de613e575719')
version('5.2.0', 'a51bcfeb3da7dd4c623e27207ed43467')
@@ -56,122 +62,231 @@ class Gcc(Package):
version('4.6.4', 'b407a3d1480c11667f293bfb1f17d1a4')
version('4.5.4', '27e459c2566b8209ab064570e1b378f7')
+ # Builds all default languages by default.
+ # Ada, Go, Jit, and Objective-C++ are not default languages.
+ # In that respect, the name 'all' is rather misleading.
+ variant('languages',
+ default='all',
+ values=('all', 'ada', 'brig', 'c', 'c++', 'fortran',
+ 'go', 'java', 'jit', 'lto', 'objc', 'obj-c++'),
+ multi=True,
+ description='Compilers and runtime libraries to build')
variant('binutils',
- default=sys.platform != 'darwin',
- description="Build via binutils")
- variant('gold',
- default=sys.platform != 'darwin',
- description="Build the gold linker plugin for ld-based LTO")
+ default=False,
+ description='Build via binutils')
variant('piclibs',
default=False,
- description="Build PIC versions of libgfortran.a and libstdc++.a")
+ description='Build PIC versions of libgfortran.a and libstdc++.a')
+ variant('strip',
+ default=False,
+ description='Strip executables to reduce installation size')
- depends_on("mpfr")
- depends_on("gmp")
- depends_on("mpc", when='@4.5:')
- depends_on("isl", when='@5.0:')
- depends_on("binutils~libiberty", when='+binutils ~gold')
- depends_on("binutils~libiberty+gold", when='+binutils +gold')
+ # https://gcc.gnu.org/install/prerequisites.html
+ depends_on('gmp@4.3.2:')
+ depends_on('mpfr@2.4.2:')
+ depends_on('mpc@0.8.1:', when='@4.5:')
+ depends_on('isl@0.14', when='@5:5.9')
+ depends_on('isl@0.15:', when='@6:')
+ depends_on('zlib', when='@6:')
+ depends_on('gnat', when='languages=ada')
+ depends_on('binutils~libiberty', when='+binutils')
+ depends_on('zip', type='build', when='languages=java')
+ depends_on('zip', type='build', when='@:6 languages=all')
# TODO: integrate these libraries.
- # depends_on("ppl")
- # depends_on("cloog")
+ # depends_on('ppl')
+ # depends_on('cloog')
+
+ # TODO: Add a 'test' deptype
+ # https://github.com/spack/spack/issues/1279
+ # depends_on('dejagnu@1.4.4', type='test')
+ # depends_on('expect', type='test')
+ # depends_on('tcl', type='test')
+ # depends_on('autogen@5.5.4:', type='test')
+ # depends_on('guile@1.4.1:', type='test')
+
+ # See https://golang.org/doc/install/gccgo#Releases
+ provides('golang', when='languages=go @4.6:')
+ provides('golang@:1', when='languages=go @4.7.1:')
+ provides('golang@:1.1', when='languages=go @4.8:')
+ provides('golang@:1.1.2', when='languages=go @4.8.2:')
+ provides('golang@:1.2', when='languages=go @4.9:')
+ provides('golang@:1.4', when='languages=go @5:')
+ provides('golang@:1.6.1', when='languages=go @6:')
+ provides('golang@:1.8', when='languages=go @7:')
+
+ # For a list of valid languages for a specific release,
+ # run the following command in the GCC source directory:
+ # $ grep ^language= gcc/*/config-lang.in
+ # See https://gcc.gnu.org/install/configure.html
+
+ # Support for processing BRIG 1.0 files was added in GCC 7
+ # BRIG is a binary format for HSAIL:
+ # (Heterogeneous System Architecture Intermediate Language).
+ # See https://gcc.gnu.org/gcc-7/changes.html
+ conflicts('languages=brig', when='@:6')
+
+ # BRIG does not seem to be supported on macOS
+ conflicts('languages=brig', when='platform=darwin')
+
+ # GCC 4.8 added a 'c' language. I'm sure C was always built,
+ # but this is the first version that accepts 'c' as a valid language.
+ conflicts('languages=c', when='@:4.7')
+
+ # GCC 4.6 added support for the Go programming language.
+ # See https://gcc.gnu.org/gcc-4.6/changes.html
+ conflicts('languages=go', when='@:4.5')
+
+ # Go is not supported on macOS
+ conflicts('languages=go', when='platform=darwin')
+
+ # The GCC Java frontend and associated libjava runtime library
+ # have been removed from GCC as of GCC 7.
+ # See https://gcc.gnu.org/gcc-7/changes.html
+ conflicts('languages=java', when='@7:')
+
+ # GCC 5 added the ability to build GCC as a Just-In-Time compiler.
+ # See https://gcc.gnu.org/gcc-5/changes.html
+ conflicts('languages=jit', when='@:4')
+
if sys.platform == 'darwin':
- patch('darwin/gcc-4.9.patch1', when='@4.9.3')
- patch('darwin/gcc-4.9.patch2', when='@4.9.3')
- else:
- provides('golang', when='@4.7.1:')
+ # Fix parallel build on APFS filesystem
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81797
+ if macOS_version() >= Version('10.13'):
+ patch('darwin/apfs.patch', when='@7.2.0')
+ patch('darwin/gcc-7.1.0-headerpad.patch', when='@5:')
+ patch('darwin/gcc-6.1.0-jit.patch', when='@5:')
+ patch('darwin/gcc-4.9.patch1', when='@4.9.0:4.9.3')
+ patch('darwin/gcc-4.9.patch2', when='@4.9.0:4.9.3')
patch('piclibs.patch', when='+piclibs')
patch('gcc-backport.patch', when='@4.7:4.9.2,5:5.3')
- def install(self, spec, prefix):
- # libjava/configure needs a minor fix to install into spack paths.
- filter_file(r"'@.*@'", "'@[[:alnum:]]*@'", 'libjava/configure',
- string=True)
+ build_directory = 'spack-build'
+
+ def url_for_version(self, version):
+ url = 'http://ftp.gnu.org/gnu/gcc/gcc-{0}/gcc-{0}.tar.{1}'
+ suffix = 'xz'
+
+ if version < Version('6.4.0') or version == Version('7.1.0'):
+ suffix = 'bz2'
- enabled_languages = set(('c', 'c++', 'fortran', 'java', 'objc'))
+ if version == Version('5.5.0'):
+ suffix = 'xz'
- if spec.satisfies("@4.7.1:") and sys.platform != 'darwin' and \
- not (spec.satisfies('@:4.9.3') and 'ppc64le' in spec.architecture):
- enabled_languages.add('go')
+ return url.format(version, suffix)
+
+ def patch(self):
+ spec = self.spec
+ prefix = self.spec.prefix
# Fix a standard header file for OS X Yosemite that
# is GCC incompatible by replacing non-GCC compliant macros
if 'yosemite' in spec.architecture:
- if isfile(r'/usr/include/dispatch/object.h'):
+ if os.path.isfile('/usr/include/dispatch/object.h'):
new_dispatch_dir = join_path(prefix, 'include', 'dispatch')
mkdirp(new_dispatch_dir)
- cp = which('cp')
new_header = join_path(new_dispatch_dir, 'object.h')
- cp(r'/usr/include/dispatch/object.h', new_header)
+ shutil.copyfile('/usr/include/dispatch/object.h', new_header)
filter_file(r'typedef void \(\^dispatch_block_t\)\(void\)',
'typedef void* dispatch_block_t',
new_header)
+ # Use installed libz
+ if self.version >= Version('6'):
+ filter_file('@zlibdir@',
+ '-L{0}'.format(spec['zlib'].prefix.lib),
+ 'gcc/Makefile.in')
+ filter_file('@zlibinc@',
+ '-I{0}'.format(spec['zlib'].prefix.include),
+ 'gcc/Makefile.in')
+
+ def configure_args(self):
+ spec = self.spec
+
# Generic options to compile GCC
- options = ["--prefix=%s" % prefix, "--libdir=%s/lib64" % prefix,
- "--disable-multilib",
- "--enable-languages=" + ','.join(enabled_languages),
- "--with-mpc=%s" % spec['mpc'].prefix, "--with-mpfr=%s" %
- spec['mpfr'].prefix, "--with-gmp=%s" % spec['gmp'].prefix,
- "--enable-lto", "--with-quad"]
+ options = [
+ '--disable-multilib',
+ '--enable-languages={0}'.format(
+ ','.join(spec.variants['languages'].value)),
+ '--with-mpfr={0}'.format(spec['mpfr'].prefix),
+ '--with-gmp={0}'.format(spec['gmp'].prefix),
+ '--enable-lto',
+ '--with-quad'
+ ]
+
+ # Use installed libz
+ if self.version >= Version('6'):
+ options.append('--with-system-zlib')
+
+ # Enabling language "jit" requires --enable-host-shared.
+ if 'languages=jit' in spec:
+ options.append('--enable-host-shared')
+
# Binutils
if spec.satisfies('+binutils'):
- static_bootstrap_flags = "-static-libstdc++ -static-libgcc"
+ static_bootstrap_flags = '-static-libstdc++ -static-libgcc'
binutils_options = [
- "--with-sysroot=/", "--with-stage1-ldflags=%s %s" %
- (self.rpath_args, static_bootstrap_flags),
- "--with-boot-ldflags=%s %s" %
- (self.rpath_args, static_bootstrap_flags), "--with-gnu-ld",
- "--with-ld=%s/bin/ld" % spec['binutils'].prefix,
- "--with-gnu-as",
- "--with-as=%s/bin/as" % spec['binutils'].prefix
+ '--with-sysroot=/',
+ '--with-stage1-ldflags={0} {1}'.format(
+ self.rpath_args, static_bootstrap_flags),
+ '--with-boot-ldflags={0} {1}'.format(
+ self.rpath_args, static_bootstrap_flags),
+ '--with-gnu-ld',
+ '--with-ld={0}/ld'.format(spec['binutils'].prefix.bin),
+ '--with-gnu-as',
+ '--with-as={0}/as'.format(spec['binutils'].prefix.bin),
]
options.extend(binutils_options)
- # Isl
+
+ # MPC
+ if 'mpc' in spec:
+ options.append('--with-mpc={0}'.format(spec['mpc'].prefix))
+
+ # ISL
if 'isl' in spec:
- isl_options = ["--with-isl=%s" % spec['isl'].prefix]
- options.extend(isl_options)
+ options.append('--with-isl={0}'.format(spec['isl'].prefix))
+ # macOS
if sys.platform == 'darwin':
- darwin_options = ["--with-build-config=bootstrap-debug"]
- options.extend(darwin_options)
-
- build_dir = join_path(self.stage.path, 'spack-build')
- configure = Executable(join_path(self.stage.source_path, 'configure'))
- with working_dir(build_dir, create=True):
- # Rest of install is straightforward.
- configure(*options)
- if sys.platform == 'darwin':
- make("bootstrap")
- else:
- make()
- make("install")
-
- self.write_rpath_specs()
+ options.append('--with-build-config=bootstrap-debug')
+
+ return options
+
+ @property
+ def build_targets(self):
+ if sys.platform == 'darwin':
+ return ['bootstrap']
+ return []
+
+ @property
+ def install_targets(self):
+ if '+strip' in self.spec:
+ return ['install-strip']
+ return ['install']
@property
def spec_dir(self):
- # e.g. lib64/gcc/x86_64-unknown-linux-gnu/4.9.2
- spec_dir = glob("%s/lib64/gcc/*/*" % self.prefix)
+ # e.g. lib/gcc/x86_64-unknown-linux-gnu/4.9.2
+ spec_dir = glob.glob('{0}/gcc/*/*'.format(self.prefix.lib))
return spec_dir[0] if spec_dir else None
+ @run_after('install')
def write_rpath_specs(self):
"""Generate a spec file so the linker adds a rpath to the libs
the compiler used to build the executable."""
if not self.spec_dir:
- tty.warn("Could not install specs for %s." %
- self.spec.format('$_$@'))
+ tty.warn('Could not install specs for {0}.'.format(
+ self.spec.format('$_$@')))
return
- gcc = Executable(join_path(self.prefix.bin, 'gcc'))
- lines = gcc('-dumpspecs', output=str).strip().split("\n")
+ gcc = self.spec['gcc'].command
+ lines = gcc('-dumpspecs', output=str).strip().split('\n')
specs_file = join_path(self.spec_dir, 'specs')
- with closing(open(specs_file, 'w')) as out:
+ with open(specs_file, 'w') as out:
for line in lines:
- out.write(line + "\n")
- if line.startswith("*link:"):
- out.write("-rpath %s/lib:%s/lib64 \\\n" %
- (self.prefix, self.prefix))
+ out.write(line + '\n')
+ if line.startswith('*link:'):
+ out.write('-rpath {0}:{1} '.format(
+ self.prefix.lib, self.prefix.lib64))
set_install_permissions(specs_file)
diff --git a/var/spack/repos/builtin/packages/gccmakedep/package.py b/var/spack/repos/builtin/packages/gccmakedep/package.py
index ed2530d89e..a8ece20f43 100644
--- a/var/spack/repos/builtin/packages/gccmakedep/package.py
+++ b/var/spack/repos/builtin/packages/gccmakedep/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gccmakedep(Package):
+class Gccmakedep(AutotoolsPackage):
"""X.org gccmakedep utilities."""
homepage = "https://cgit.freedesktop.org/xorg/util/gccmakedep/"
@@ -34,9 +34,3 @@ class Gccmakedep(Package):
version('1.0.3', '127ddb6131eb4a56fdf6644a63ade788')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/gccxml/darwin-gcc.patch b/var/spack/repos/builtin/packages/gccxml/darwin-gcc.patch
new file mode 100644
index 0000000000..55910cea1a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gccxml/darwin-gcc.patch
@@ -0,0 +1,11 @@
+--- gccxml/GCC/CMakeLists.txt 2017-04-05 11:25:32.000000000 +0200
++++ gccxml/GCC/CMakeLists.txt 2017-04-05 11:25:47.000000000 +0200
+@@ -19,7 +19,7 @@ SET(LIBRARY_OUTPUT_PATH "${GCC_BINARY_DI
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_ANSI_CFLAGS}")
+
+ IF(APPLE AND CMAKE_C_COMPILER_ID MATCHES "^(GNU|Clang)$")
+- SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-cpp-precomp")
++ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
+ ENDIF()
+
+ IF(CMAKE_C_COMPILER_ID MATCHES "^(Clang)$")
diff --git a/var/spack/repos/builtin/packages/gccxml/package.py b/var/spack/repos/builtin/packages/gccxml/package.py
new file mode 100644
index 0000000000..d7f75f8631
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gccxml/package.py
@@ -0,0 +1,36 @@
+#
+# 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/spack/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 Gccxml(CMakePackage):
+ """gccxml dumps an XML description of C++ source code using an extension of
+ the GCC C++ compiler."""
+
+ homepage = "http://gccxml.github.io"
+ url = "https://github.com/gccxml/gccxml/archive/v0.6.x.tar.gz"
+
+ version('develop', git='https://github.com/gccxml/gccxml.git', branch='master')
+ version('latest', git='https://github.com/gccxml/gccxml.git',
+ commit='3afa8ba5be6866e603dcabe80aff79856b558e24', preferred=True)
+
+ patch('darwin-gcc.patch', when='%gcc platform=darwin')
diff --git a/var/spack/repos/builtin/packages/gconf/package.py b/var/spack/repos/builtin/packages/gconf/package.py
index 3b3abc71ed..395ec2ff44 100644
--- a/var/spack/repos/builtin/packages/gconf/package.py
+++ b/var/spack/repos/builtin/packages/gconf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,11 @@
from spack import *
-class Gconf(Package):
+class Gconf(AutotoolsPackage):
"""GConf is a system for storing application preferences."""
homepage = "https://projects.gnome.org/gconf/"
- url = "ftp://ftp.gnome.org/pub/gnome/sources/GConf/3.2/GConf-3.2.6.tar.xz"
+ url = "http://ftp.gnome.org/pub/gnome/sources/GConf/3.2/GConf-3.2.6.tar.xz"
version('3.2.6', '2b16996d0e4b112856ee5c59130e822c')
@@ -43,9 +43,3 @@ class Gconf(Package):
# gobject-2.0 >= 2.7.0
# dbus-1 >= 1.0.0
# dbus-glib-1 >= 0.74
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/gdal/package.py b/var/spack/repos/builtin/packages/gdal/package.py
index b52b1f1038..044013c88d 100644
--- a/var/spack/repos/builtin/packages/gdal/package.py
+++ b/var/spack/repos/builtin/packages/gdal/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,7 +38,7 @@ class Gdal(Package):
homepage = "http://www.gdal.org/"
url = "http://download.osgeo.org/gdal/2.1.2/gdal-2.1.2.tar.xz"
list_url = "http://download.osgeo.org/gdal/"
- list_depth = 2
+ list_depth = 1
version('2.1.2', 'ae85b78888514c75e813d658cac9478e')
version('2.0.2', '940208e737c87d31a90eaae43d0efd65')
@@ -72,7 +72,7 @@ class Gdal(Package):
args.append("--prefix=%s" % prefix)
args.append("--with-liblzma=yes")
args.append("--with-zlib=%s" % spec['zlib'].prefix)
- args.append("--with-python=%s" % spec['python'].prefix.bin + "/python")
+ args.append("--with-python=%s" % spec['python'].command.path)
args.append("--without-libtool")
if '+geos' in spec:
diff --git a/var/spack/repos/builtin/packages/gdb/package.py b/var/spack/repos/builtin/packages/gdb/package.py
index f90e4e7ff0..dedefe5191 100644
--- a/var/spack/repos/builtin/packages/gdb/package.py
+++ b/var/spack/repos/builtin/packages/gdb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,6 +34,7 @@ class Gdb(Package):
homepage = "https://www.gnu.org/software/gdb"
url = "http://ftp.gnu.org/gnu/gdb/gdb-7.10.tar.gz"
+ version('7.12.1', '06c8f40521ed65fe36ebc2be29b56942')
version('7.11', 'f585059252836a981ea5db9a5f8ce97f')
version('7.10.1', 'b93a2721393e5fa226375b42d567d90b')
version('7.10', 'fa6827ad0fd2be1daa418abb11a54d86')
diff --git a/var/spack/repos/builtin/packages/gdbm/package.py b/var/spack/repos/builtin/packages/gdbm/package.py
new file mode 100644
index 0000000000..1e4a4831b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gdbm/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Gdbm(AutotoolsPackage):
+ """GNU dbm (or GDBM, for short) is a library of database functions
+ that use extensible hashing and work similar to the standard UNIX dbm.
+ These routines are provided to a programmer needing to create and
+ manipulate a hashed database."""
+
+ homepage = "http://www.gnu.org.ua/software/gdbm/gdbm.html"
+ url = "http://ftp.gnu.org/gnu/gdbm/gdbm-1.13.tar.gz"
+
+ version('1.13', '8929dcda2a8de3fd2367bdbf66769376')
+ version('1.12', '9ce96ff4c99e74295ea19040931c8fb9')
+ version('1.11', '72c832680cf0999caedbe5b265c8c1bd')
+ version('1.10', '88770493c2559dc80b561293e39d3570')
+ version('1.9.1', '59f6e4c4193cb875964ffbe8aa384b58')
+ version('1.9', '1f0e8e6691edd61bdd6b697b8c02528d')
+
+ depends_on("readline")
+
+ def configure_args(self):
+ config_args = [
+ '--enable-libgdbm-compat',
+ 'CC=%s' % spack_cc
+ ]
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
index 4d39086b06..63d24d64c4 100644
--- a/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
+++ b/var/spack/repos/builtin/packages/gdk-pixbuf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,14 +25,16 @@
from spack import *
-class GdkPixbuf(Package):
+class GdkPixbuf(AutotoolsPackage):
"""The Gdk Pixbuf is a toolkit for image loading and pixel buffer
manipulation. It is used by GTK+ 2 and GTK+ 3 to load and
manipulate images. In the past it was distributed as part of
GTK+ 2 but it was split off into a separate package in
preparation for the change to GTK+ 3."""
homepage = "https://developer.gnome.org/gdk-pixbuf/"
- url = "http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.31/gdk-pixbuf-2.31.1.tar.xz"
+ url = "http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/2.31/gdk-pixbuf-2.31.2.tar.xz"
+ list_url = "http://ftp.acc.umu.se/pub/gnome/sources/gdk-pixbuf/"
+ list_depth = 2
version('2.31.2', '6be6bbc4f356d4b79ab4226860ab8523')
@@ -42,8 +44,10 @@ class GdkPixbuf(Package):
depends_on("jpeg")
depends_on("libpng")
depends_on("libtiff")
+ depends_on("gobject-introspection")
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
+ run_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/geant4/package.py b/var/spack/repos/builtin/packages/geant4/package.py
index 239ef6d586..2b935673c4 100644
--- a/var/spack/repos/builtin/packages/geant4/package.py
+++ b/var/spack/repos/builtin/packages/geant4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,62 +24,73 @@
##############################################################################
from spack import *
+import platform
-class Geant4(Package):
+class Geant4(CMakePackage):
"""Geant4 is a toolkit for the simulation of the passage of particles
through matter. Its areas of application include high energy, nuclear
and accelerator physics, as well as studies in medical and space
science."""
homepage = "http://geant4.cern.ch/"
- url = "http://geant4.cern.ch/support/source/geant4.10.01.p03.tar.gz"
+ url = "http://geant4.cern.ch/support/source/geant4.10.01.p03.tar.gz"
+ version('10.02.p02', '6aae1d0fc743b0edc358c5c8fbe48657')
version('10.02.p01', 'b81f7082a15f6a34b720b6f15c6289cfe4ddbbbdcef0dc52719f71fac95f7f1c')
version('10.01.p03', '4fb4175cc0dabcd517443fbdccd97439')
- variant('qt', default=False, description='Enable Qt support')
+ variant('qt', default=True, description='Enable Qt support')
depends_on('cmake@3.5:', type='build')
+ depends_on("clhep@2.3.1.1~cxx11+cxx14", when="@10.02.p02")
depends_on("clhep@2.3.1.1~cxx11+cxx14", when="@10.02.p01")
depends_on("clhep@2.2.0.4~cxx11+cxx14", when="@10.01.p03")
depends_on("expat")
depends_on("zlib")
+ depends_on("vecgeom")
depends_on("xerces-c")
depends_on("qt@4.8:", when="+qt")
- def install(self, spec, prefix):
- cmake_args = list(std_cmake_args)
- cmake_args.append('-DXERCESC_ROOT_DIR:STRING=%s' %
- spec['xerces-c'].prefix)
- cmake_args.append('-DGEANT4_BUILD_CXXSTD=c++14')
-
- cmake_args += ['-DGEANT4_USE_GDML=ON',
- '-DGEANT4_USE_SYSTEM_EXPAT=ON',
- '-DGEANT4_USE_SYSTEM_ZLIB=ON',
- '-DGEANT4_USE_SYSTEM_CLHEP=ON']
-
- # fixme: turn off data for now and maybe each data set should
- # go into a separate package to cut down on disk usage between
- # different code versions using the same data versions.
- cmake_args.append('-DGEANT4_INSTALL_DATA=OFF')
-
- # http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch02s03.html
- # fixme: likely things that need addressing:
- # -DGEANT4_USE_OPENGL_X11=ON
+ def cmake_args(self):
+ spec = self.spec
+
+ options = [
+ '-DGEANT4_USE_GDML=ON',
+ '-DGEANT4_USE_SYSTEM_CLHEP=ON',
+ '-DGEANT4_USE_G3TOG4=ON',
+ '-DGEANT4_INSTALL_DATA=ON',
+ '-DGEANT4_BUILD_TLS_MODEL=global-dynamic',
+ '-DGEANT4_BUILD_MULTITHREADED=ON',
+ '-DGEANT4_USE_USOLIDS=ON',
+ '-DGEANT4_USE_SYSTEM_EXPAT=ON',
+ '-DGEANT4_USE_SYSTEM_ZLIB=ON',
+ '-DXERCESC_ROOT_DIR:STRING=%s' %
+ spec['xerces-c'].prefix,
+ '-DUSolids_DIR=%s' %
+ join_path(spec['vecgeom'].prefix, 'lib/CMake/USolids')]
+
+ arch = platform.system().lower()
+ if arch is not 'darwin':
+ options.append('-DGEANT4_USE_OPENGL_X11=ON')
+ options.append('-DGEANT4_USE_XM=ON')
+ options.append('-DGEANT4_USE_RAYTRACER_X11=ON')
+
+ if '+cxx11' in spec:
+ options.append('-DGEANT4_BUILD_CXXSTD=c++11')
+ if '+cxx14' or '+cxx1y' in spec:
+ options.append('-DGEANT4_BUILD_CXXSTD=c++14')
if '+qt' in spec:
- cmake_args.append('-DGEANT4_USE_QT=ON')
-
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
+ options.append('-DGEANT4_USE_QT=ON')
+ options.append(
+ '-DQT_QMAKE_EXECUTABLE=%s' %
+ spec['qt'].prefix + '/bin/qmake'
+ )
- with working_dir(build_directory, create=True):
- cmake(source_directory, *cmake_args)
- make()
- make("install")
+ return options
def url_for_version(self, version):
"""Handle Geant4's unusual version string."""
- return "http://geant4.cern.ch/support/source/geant4.%s.tar.gz" % version
+ return ("http://geant4.cern.ch/support/source/geant4.%s.tar.gz" % version)
diff --git a/var/spack/repos/builtin/packages/gearshifft/package.py b/var/spack/repos/builtin/packages/gearshifft/package.py
new file mode 100644
index 0000000000..8b6f5c8a31
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gearshifft/package.py
@@ -0,0 +1,74 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Gearshifft(CMakePackage):
+ """Benchmark Suite for Heterogenuous FFT Implementations"""
+
+ homepage = "https://github.com/mpicbg-scicomp/gearshifft"
+ url = "https://github.com/mpicbg-scicomp/gearshifft/archive/v0.2.0.tar.gz"
+
+ version('0.2.1-lw', 'c3208b767b24255b488a83e5d9e517ea')
+
+ variant('cufft', default=True,
+ description='Compile gearshifft_cufft')
+ # variant('clfft', default=True,
+ # description='Compile gearshifft_clfft')
+ variant('fftw', default=True,
+ description='Compile gearshifft_fftw')
+ variant('openmp', default=True,
+ description='use OpenMP parallel fftw libraries')
+ # variant('hcfft', default=True,
+ # description='Not implemented yet')
+
+ # depends_on C++14 compiler, e.g. GCC 5.0+
+ depends_on('cmake@2.8.0:', type='build')
+ depends_on('boost@1.56.0:')
+ depends_on('cuda@8.0:', when='+cufft')
+ # depends_on('opencl@1.2:', when='+clfft')
+ # depends_on('clfft@2.12.0:', when='+clfft')
+ depends_on('fftw@3.3.4:~mpi~openmp', when='+fftw~openmp')
+ depends_on('fftw@3.3.4:~mpi+openmp', when='+fftw+openmp')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DGEARSHIFFT_HCFFT:BOOL=OFF',
+ '-DGEARSHIFFT_FFTW_PTHREADS:BOOL=ON',
+ '-DGEARSHIFFT_CLFFT:BOOL=OFF'
+ ]
+ args.extend([
+ '-DGEARSHIFFT_FFTW:BOOL={0}'.format((
+ 'ON' if '+fftw' in spec else 'OFF')),
+ '-DGEARSHIFFT_FFTW_OPENMP:BOOL={0}'.format((
+ 'ON' if '+openmp' in spec else 'OFF')),
+ '-DGEARSHIFFT_CUFFT:BOOL={0}'.format((
+ 'ON' if '+cufft' in spec else 'OFF'))
+ # '-DGEARSHIFFT_CLFFT:BOOL={0}'.format((
+ # 'ON' if '+clfft' in spec else 'OFF'))
+ ])
+ return args
diff --git a/var/spack/repos/builtin/packages/gemmlowp/package.py b/var/spack/repos/builtin/packages/gemmlowp/package.py
new file mode 100644
index 0000000000..7cd3047716
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gemmlowp/package.py
@@ -0,0 +1,40 @@
+#############################################################################
+# 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/spack/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 Gemmlowp(Package):
+ """Google low-precision matrix multiplication library"""
+
+ homepage = "https://github.com/google/gemmlowp"
+ version('a6f29d9ac', git='https://github.com/google/gemmlowp.git',
+ commit='a6f29d8ac48d63293f845f2253eccbf86bc28321')
+
+ def install(self, spec, prefix):
+ header_directories = ('eight_bit_int_gemm', 'fixedpoint',
+ 'internal', 'meta', 'profiling', 'public')
+
+ for directory in header_directories:
+ install_tree(directory, join_path(prefix.include, directory))
diff --git a/var/spack/repos/builtin/packages/genemark-et/package.py b/var/spack/repos/builtin/packages/genemark-et/package.py
new file mode 100644
index 0000000000..faf5acce6a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/genemark-et/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 *
+import os
+import glob
+
+
+class GenemarkEt(Package):
+ """Gene Prediction in Bacteria, archaea, Metagenomes and
+ Metatranscriptomes."""
+
+ homepage = "http://topaz.gatech.edu/GeneMark"
+
+ version('4.33', '4ab7d7d3277a685dfb49e11bc5b493c3')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def url_for_version(self, version):
+ return "file://{0}/gm_et_linux_64.tar.gz".format(os.getcwd())
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('gmes_petap'):
+ install_tree('lib', prefix.lib)
+ files = glob.iglob('*')
+ for file in files:
+ if os.path.isfile(file):
+ install(file, prefix.bin)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PERL5LIB', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/genometools/package.py b/var/spack/repos/builtin/packages/genometools/package.py
new file mode 100644
index 0000000000..00f359e6d2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/genometools/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Genometools(MakefilePackage):
+ """genometools is a free collection of bioinformatics tools (in the realm
+ of genome informatics) combined into a single binary named gt."""
+
+ homepage = "http://genometools.org/"
+ url = "http://genometools.org/pub/genometools-1.5.9.tar.gz"
+
+ version('1.5.9', 'e400d69092f9f13db09b33f9dea39d2e')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('cairo')
+ depends_on('pango')
+
+ # build fails with gcc 7"
+ conflicts('%gcc@7.1.0:')
+
+ def install(self, spec, prefix):
+ make('install', 'prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/geos/package.py b/var/spack/repos/builtin/packages/geos/package.py
index 324186cfbc..f74e03ff57 100644
--- a/var/spack/repos/builtin/packages/geos/package.py
+++ b/var/spack/repos/builtin/packages/geos/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -60,9 +60,8 @@ class Geos(Package):
def install(self, spec, prefix):
args = ["--prefix=%s" % prefix]
# if '+python' in spec:
-# os.environ['PYTHON'] = join_path(spec['python'].prefix, 'bin',
-# 'python' if spec['python'].version[:1][0] <= 2 else 'python3')
-# os.environ['SWIG'] = join_path(spec['swig'].prefix, 'bin', 'swig')
+# os.environ['PYTHON'] = spec['python'].command.path
+# os.environ['SWIG'] = spec['swig'].command.path
#
# args.append("--enable-python")
diff --git a/var/spack/repos/builtin/packages/gettext/package.py b/var/spack/repos/builtin/packages/gettext/package.py
index cf260c3f8a..f25f3e7889 100644
--- a/var/spack/repos/builtin/packages/gettext/package.py
+++ b/var/spack/repos/builtin/packages/gettext/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,8 +25,9 @@
from spack import *
-class Gettext(Package):
+class Gettext(AutotoolsPackage):
"""GNU internationalization (i18n) and localization (l10n) library."""
+
homepage = "https://www.gnu.org/software/gettext/"
url = "http://ftpmirror.gnu.org/gettext/gettext-0.19.7.tar.xz"
@@ -60,16 +61,19 @@ class Gettext(Package):
depends_on('libunistring', when='+libunistring')
# depends_on('cvs')
- def install(self, spec, prefix):
+ patch('test-verify-parallel-make-check.patch', when='@:0.19.8.1')
+
+ def configure_args(self):
+ spec = self.spec
+
config_args = [
- '--prefix={0}'.format(prefix),
'--disable-java',
'--disable-csharp',
'--with-included-glib',
'--with-included-gettext',
'--with-included-libcroco',
'--without-emacs',
- '--with-lispdir=%s/emacs/site-lisp/gettext' % prefix.share,
+ '--with-lispdir=%s/emacs/site-lisp/gettext' % self.prefix.share,
'--without-cvs'
]
@@ -97,7 +101,4 @@ class Gettext(Package):
else:
config_args.append('--with-included-libunistring')
- configure(*config_args)
-
- make()
- make("install")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/gettext/test-verify-parallel-make-check.patch b/var/spack/repos/builtin/packages/gettext/test-verify-parallel-make-check.patch
new file mode 100644
index 0000000000..5f5aebcbfd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gettext/test-verify-parallel-make-check.patch
@@ -0,0 +1,61 @@
+2017-04-20 Bruno Haible <bruno@clisp.org>
+
+ verify tests: Fix spurious failure with parallel make.
+ * tests/test-verify.sh: Build test-verify-try.o, not test-verify.o.
+ * tests/test-verify-try.c: New file.
+ Reported by Adam James Stewart <ajstewart@anl.gov>.
+
+diff --git a/gettext-tools/gnulib-tests/test-verify.sh b/gettext-tools/gnulib-tests/test-verify.sh
+index 3e76761..1e75d55 100755
+--- a/gettext-tools/gnulib-tests/test-verify.sh
++++ b/gettext-tools/gnulib-tests/test-verify.sh
+@@ -7,8 +7,9 @@ unset MALLOC_PERTURB_
+
+ # Rather than figure out how to invoke the compiler with the right
+ # include path ourselves, we let make do it:
+-(cd "$initial_cwd_" && rm -f test-verify.o \
+- && $MAKE test-verify.o >/dev/null 2>&1) \
++(cd "$initial_cwd_" \
++ && rm -f test-verify-try.o \
++ && $MAKE test-verify-try.o >/dev/null 2>&1) \
+ || skip_ "cannot compile error-free"
+
+ # Now, prove that we encounter all expected compilation failures:
+@@ -16,8 +17,8 @@ unset MALLOC_PERTURB_
+ : >err
+ for i in 1 2 3 4 5; do
+ (cd "$initial_cwd_"
+- rm -f test-verify.o
+- $MAKE CFLAGS=-DEXP_FAIL=$i test-verify.o) >>out 2>>err \
++ rm -f test-verify-try.o
++ $MAKE CFLAGS=-DEXP_FAIL=$i test-verify-try.o) >>out 2>>err \
+ && { warn_ "compiler didn't detect verification failure $i"; fail=1; }
+ done
+
+diff --git a/gettext-tools/gnulib-tests/test-verify-try.c b/gettext-tools/gnulib-tests/test-verify-try.c
+new file mode 100644
+index 0000000..362fb01
+--- /dev/null
++++ b/tests/test-verify-try.c
+@@ -0,0 +1,21 @@
++/* Test the "verify" module.
++
++ Copyright (C) 2017 Free Software Foundation, Inc.
++
++ This program is free software: you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation; either version 3 of the License, or
++ (at your option) any later version.
++
++ 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
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>. */
++
++/* This is a separate source file, so that the execution of test-verify.sh
++ does not interfere with the building of the 'test-verify' program. */
++
++#include "test-verify.c"
diff --git a/var/spack/repos/builtin/packages/gflags/package.py b/var/spack/repos/builtin/packages/gflags/package.py
index 7e04c9b682..05a168d6fa 100644
--- a/var/spack/repos/builtin/packages/gflags/package.py
+++ b/var/spack/repos/builtin/packages/gflags/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gflags(Package):
+class Gflags(CMakePackage):
"""The gflags package contains a C++ library that implements
commandline flags processing. It includes built-in support for
standard types such as string and the ability to define flags
@@ -37,11 +37,7 @@ class Gflags(Package):
version('2.1.2', 'ac432de923f9de1e9780b5254884599f')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8.12:', type='build')
- def install(self, spec, prefix):
- cmake("-DCMAKE_INSTALL_PREFIX=" + prefix,
- "-DBUILD_SHARED_LIBS=ON")
- make()
- make("test")
- make("install")
+ def cmake_args(self):
+ return ['-DBUILD_SHARED_LIBS=ON']
diff --git a/var/spack/repos/builtin/packages/ghostscript-fonts/package.py b/var/spack/repos/builtin/packages/ghostscript-fonts/package.py
index 1bf3f857b0..9dc7e8cead 100644
--- a/var/spack/repos/builtin/packages/ghostscript-fonts/package.py
+++ b/var/spack/repos/builtin/packages/ghostscript-fonts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class GhostscriptFonts(Package):
"""Ghostscript Fonts"""
homepage = "http://ghostscript.com/"
- url = "ftp://ftp.imagemagick.org/pub/ImageMagick/delegates/ghostscript-fonts-std-8.11.tar.gz"
+ url = "https://www.imagemagick.org/download/delegates/ghostscript-fonts-std-8.11.tar.gz"
version('8.11', '6865682b095f8c4500c54b285ff05ef6')
diff --git a/var/spack/repos/builtin/packages/ghostscript/package.py b/var/spack/repos/builtin/packages/ghostscript/package.py
index f63ebac0c1..991f77199e 100644
--- a/var/spack/repos/builtin/packages/ghostscript/package.py
+++ b/var/spack/repos/builtin/packages/ghostscript/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,23 +23,59 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import shutil
-class Ghostscript(Package):
+class Ghostscript(AutotoolsPackage):
"""An interpreter for the PostScript language and for PDF."""
homepage = "http://ghostscript.com/"
- url = "http://downloads.ghostscript.com/public/old-gs-releases/ghostscript-9.18.tar.gz"
+ url = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs921/ghostscript-9.21.tar.gz"
+ version('9.21', '5f213281761d2750fcf27476c404d17f')
version('9.18', '33a47567d7a591c00a253caddd12a88a')
- parallel = False
+ depends_on('pkg-config', type='build')
+ depends_on('freetype@2.4.2:')
+ depends_on('jpeg')
+ depends_on('lcms')
+ depends_on('libpng')
depends_on('libtiff')
+ depends_on('zlib')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix),
- '--with-system-libtiff')
+ def url_for_version(self, version):
+ baseurl = "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs{0}/ghostscript-{1}.tar.gz"
+ return baseurl.format(version.joined, version.dotted)
+
+ def patch(self):
+ """Ghostscript comes with all of its dependencies vendored.
+ In order to build with Spack versions of these dependencies,
+ we have to remove these vendored dependencies.
+
+ Note that this approach is also recommended by Linux from Scratch:
+ http://www.linuxfromscratch.org/blfs/view/svn/pst/gs.html
+ """
+ directories = ['freetype', 'jpeg', 'lcms2', 'libpng', 'zlib']
+ for directory in directories:
+ shutil.rmtree(directory)
+
+ filter_file('ZLIBDIR=src',
+ 'ZLIBDIR={0}'.format(self.spec['zlib'].prefix.include),
+ 'configure.ac', 'configure',
+ string=True)
+ def configure_args(self):
+ return [
+ '--disable-compile-inits',
+ '--enable-dynamic',
+ '--with-system-libtiff',
+ ]
+
+ def build(self, spec, prefix):
make()
+ make('so')
+
+ def install(self, spec, prefix):
make('install')
+ make('soinstall')
diff --git a/var/spack/repos/builtin/packages/giflib/package.py b/var/spack/repos/builtin/packages/giflib/package.py
index 7082384b9b..3ab0d8453f 100644
--- a/var/spack/repos/builtin/packages/giflib/package.py
+++ b/var/spack/repos/builtin/packages/giflib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Giflib(Package):
+class Giflib(AutotoolsPackage):
"""The GIFLIB project maintains the giflib service library, which has
been pulling images out of GIFs since 1989."""
@@ -33,9 +33,3 @@ class Giflib(Package):
url = "https://downloads.sourceforge.net/project/giflib/giflib-5.1.4.tar.bz2"
version('5.1.4', '2c171ced93c0e83bb09e6ccad8e3ba2b')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/git-lfs/package.py b/var/spack/repos/builtin/packages/git-lfs/package.py
index 25e440ff6d..7e557dd0a8 100644
--- a/var/spack/repos/builtin/packages/git-lfs/package.py
+++ b/var/spack/repos/builtin/packages/git-lfs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,12 +35,14 @@ class GitLfs(Package):
homepage = "https://git-lfs.github.com"
git_url = "https://github.com/github/git-lfs.git"
+ version('2.3.0', git=git_url, tag='v2.3.0')
+ version('2.2.1', git=git_url, tag='v2.2.1')
+ version('2.0.2', git=git_url, tag='v2.0.2')
version('1.4.1', git=git_url, tag='v1.4.1')
version('1.3.1', git=git_url, tag='v1.3.1')
- # TODO: Implement this by following the instructions at this location:
+ # TODO: Add tests by following the instructions at this location:
# https://github.com/github/git-lfs/blob/master/CONTRIBUTING.md#building
- # variant('test', default=True, description='Build and run tests as part of the build.') # NOQA: E501
depends_on('go@1.5:', type='build')
depends_on('git@1.8.2:', type='run')
diff --git a/var/spack/repos/builtin/packages/git/package.py b/var/spack/repos/builtin/packages/git/package.py
index c7b239ef12..293f85974f 100644
--- a/var/spack/repos/builtin/packages/git/package.py
+++ b/var/spack/repos/builtin/packages/git/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,65 +24,178 @@
##############################################################################
import sys
from spack import *
+from distutils.dir_util import copy_tree
-class Git(Package):
+class Git(AutotoolsPackage):
"""Git is a free and open source distributed version control
- system designed to handle everything from small to very large
- projects with speed and efficiency."""
+ system designed to handle everything from small to very large
+ projects with speed and efficiency.
+ """
+
homepage = "http://git-scm.com"
- url = "https://github.com/git/git/tarball/v2.7.1"
+ url = "https://github.com/git/git/archive/v2.12.0.tar.gz"
+
+ # In order to add new versions here, add a new list entry with:
+ # * version: {version}
+ # * md5: the md5sum of the v{version}.tar.gz
+ # * md5_manpages: the md5sum of the corresponding manpage from
+ # https://www.kernel.org/pub/software/scm/git/git-manpages-{version}.tar.xz
+
+ releases = [
+ {
+ 'version': '2.14.1',
+ 'md5': 'e965a37b3d277f2e7e78f5b04de28e2a',
+ 'md5_manpages': 'da2e75ea3972b9e93fb47023e3bf1401',
+ },
+ {
+ 'version': '2.13.0',
+ 'md5': 'd0f14da0ef1d22f1ce7f7876fadcb39f',
+ 'md5_manpages': 'fda8d6d5314eb5a47e315405830f9970',
+ },
+ {
+ 'version': '2.12.2',
+ 'md5': 'f1a50c09ce8b5dd197f3c6c6d5ea8e75',
+ 'md5_manpages': '9358777e9a67e57427b03884c82311bd',
+ },
+ {
+ 'version': '2.12.1',
+ 'md5': 'a05c614c80ecd41e50699f1562e1130c',
+ 'md5_manpages': '8dfba0c9f51c6c23fb135d136c061c78',
+ },
+ {
+ 'version': '2.12.0',
+ 'md5': '11a440ce0ed02098adf554c797facfd3',
+ 'md5_manpages': '4d11e05068231e37d7e42935e9cc43a1',
+ },
+ {
+ 'version': '2.11.1',
+ 'md5': '2cf960f19e56f27248816809ae896794',
+ 'md5_manpages': 'ade1e458a34a89d03dda9a6de85976bd',
+ },
+ {
+ 'version': '2.11.0',
+ 'md5': 'c63fb83b86431af96f8e9722ebb3ca01',
+ 'md5_manpages': '72718851626e5b2267877cc2194a1ac9',
+ },
+ {
+ 'version': '2.9.3',
+ 'md5': 'b0edfc0f3cb046aec7ed68a4b7282a75',
+ 'md5_manpages': '337165a3b2bbe4814c73075cb6854ca2',
+ },
+ {
+ 'version': '2.9.2',
+ 'md5': '3ff8a9b30fd5c99a02e6d6585ab543fc',
+ 'md5_manpages': 'c4f415b4fc94cf75a1deb651ba769594',
+ },
+ {
+ 'version': '2.9.1',
+ 'md5': 'a5d806743a992300b45f734d1667ddd2',
+ 'md5_manpages': '2aa797ff70c704a563c910e04c0f620a',
+ },
+ {
+ 'version': '2.9.0',
+ 'md5': 'bf33a13c2adc05bc9d654c415332bc65',
+ 'md5_manpages': 'c840c968062251b768ba9852fd29054c',
+ },
+ {
+ 'version': '2.8.4',
+ 'md5': '86afb10254c3803894c9863fb5896bb6',
+ 'md5_manpages': '8340e772d60ccd04a5da88fa9c976dad',
+ },
+ {
+ 'version': '2.8.3',
+ 'md5': '0e19f31f96f9364fd247b8dc737dacfd',
+ 'md5_manpages': '553827e1b6c422ecc485499c1a1ae28d',
+ },
+ {
+ 'version': '2.8.2',
+ 'md5': '3d55550880af98f6e35c7f1d7c5aecfe',
+ 'md5_manpages': '33330463af27eb1238cbc2b4ca100b3a',
+ },
+ {
+ 'version': '2.8.1',
+ 'md5': '1308448d95afa41a4135903f22262fc8',
+ 'md5_manpages': '87bc202c6f6ae32c1c46c2dda3134ed1',
+ },
+ {
+ 'version': '2.8.0',
+ 'md5': 'eca687e46e9750121638f258cff8317b',
+ 'md5_manpages': 'd67a7db0f363e8c3b2960cd84ad0373f',
+ },
+ {
+ 'version': '2.7.3',
+ 'md5': 'fa1c008b56618c355a32ba4a678305f6',
+ 'md5_manpages': '97a525cca7fe38ff6bd7aaa4f0438896',
+ },
+ {
+ 'version': '2.7.1',
+ 'md5': 'bf0706b433a8dedd27a63a72f9a66060',
+ 'md5_manpages': '19881ca231f73dec91fb456d74943950',
+ },
+ ]
+
+ for release in releases:
+ version(release['version'], release['md5'])
+ resource(
+ name='git-manpages',
+ url="https://www.kernel.org/pub/software/scm/git/git-manpages-{0}.tar.xz".format(
+ release['version']),
+ md5=release['md5_manpages'],
+ placement='git-manpages',
+ when='@{0}'.format(release['version']))
- version('2.11.0', 'c63fb83b86431af96f8e9722ebb3ca01')
- version('2.9.3', 'b0edfc0f3cb046aec7ed68a4b7282a75')
- version('2.9.2', '3ff8a9b30fd5c99a02e6d6585ab543fc')
- version('2.9.1', 'a5d806743a992300b45f734d1667ddd2')
- version('2.9.0', 'bf33a13c2adc05bc9d654c415332bc65')
- version('2.8.4', '86afb10254c3803894c9863fb5896bb6')
- version('2.8.3', '0e19f31f96f9364fd247b8dc737dacfd')
- version('2.8.2', '3d55550880af98f6e35c7f1d7c5aecfe')
- version('2.8.1', '1308448d95afa41a4135903f22262fc8')
- version('2.8.0', 'eca687e46e9750121638f258cff8317b')
- version('2.7.3', 'fa1c008b56618c355a32ba4a678305f6')
- version('2.7.1', 'bf0706b433a8dedd27a63a72f9a66060')
+ depends_on('curl')
+ depends_on('expat')
+ depends_on('gettext')
+ depends_on('libiconv')
+ depends_on('openssl')
+ depends_on('pcre', when='@:2.13')
+ depends_on('pcre+jit', when='@2.14:')
+ depends_on('perl')
+ depends_on('zlib')
- # See here for info on vulnerable Git versions:
- # http://www.theregister.co.uk/2016/03/16/git_server_client_patch_now/
- # All the following are vulnerable
- # version('2.6.3', 'b711be7628a4a2c25f38d859ee81b423')
- # version('2.6.2', 'da293290da69f45a86a311ad3cd43dc8')
- # version('2.6.1', '4c62ee9c5991fe93d99cf2a6b68397fd')
- # version('2.6.0', 'eb76a07148d94802a1745d759716a57e')
- # version('2.5.4', '3eca2390cf1fa698b48e2a233563a76b')
- # version('2.2.1', 'ff41fdb094eed1ec430aed8ee9b9849c')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
- depends_on("autoconf", type='build')
- depends_on("curl")
- depends_on("expat")
- depends_on("gettext")
- depends_on("libiconv")
- depends_on("openssl")
- depends_on("pcre")
- depends_on("perl")
- depends_on("zlib")
+ def setup_environment(self, spack_env, run_env):
+ # This is done to avoid failures when git is an external package.
+ # In that case the node in the DAG gets truncated and git DOES NOT
+ # have a gettext dependency.
+ if 'gettext' in self.spec:
+ spack_env.append_flags('LDFLAGS', '-L{0} -lintl'.format(
+ self.spec['gettext'].prefix.lib))
- def install(self, spec, prefix):
- env['LDFLAGS'] = "-L%s" % spec['gettext'].prefix.lib + " -lintl"
- configure_args = [
- "--prefix=%s" % prefix,
- "--with-curl=%s" % spec['curl'].prefix,
- "--with-expat=%s" % spec['expat'].prefix,
- "--with-iconv=%s" % spec['libiconv'].prefix,
- "--with-libpcre=%s" % spec['pcre'].prefix,
- "--with-openssl=%s" % spec['openssl'].prefix,
- "--with-perl=%s" % join_path(spec['perl'].prefix.bin, 'perl'),
- "--with-zlib=%s" % spec['zlib'].prefix,
+ def configure_args(self):
+ spec = self.spec
+
+ return [
+ '--with-curl={0}'.format(spec['curl'].prefix),
+ '--with-expat={0}'.format(spec['expat'].prefix),
+ '--with-iconv={0}'.format(spec['libiconv'].prefix),
+ '--with-libpcre={0}'.format(spec['pcre'].prefix),
+ '--with-openssl={0}'.format(spec['openssl'].prefix),
+ '--with-perl={0}'.format(spec['perl'].command.path),
+ '--with-zlib={0}'.format(spec['zlib'].prefix),
]
- which('autoreconf')('-i')
- configure(*configure_args)
- if sys.platform == "darwin":
+ @run_after('configure')
+ def filter_rt(self):
+ if sys.platform == 'darwin':
# Don't link with -lrt; the system has no (and needs no) librt
filter_file(r' -lrt$', '', 'Makefile')
- make()
- make("install")
+
+ @run_after('install')
+ def install_completions(self):
+ copy_tree('contrib/completion', self.prefix.share)
+
+ @run_after('install')
+ def install_manpages(self):
+ prefix = self.prefix
+
+ with working_dir('git-manpages'):
+ install_tree('man1', prefix.share.man.man1)
+ install_tree('man5', prefix.share.man.man5)
+ install_tree('man7', prefix.share.man.man7)
diff --git a/var/spack/repos/builtin/packages/gl2ps/package.py b/var/spack/repos/builtin/packages/gl2ps/package.py
index d5e7b00027..fbe38d4bc9 100644
--- a/var/spack/repos/builtin/packages/gl2ps/package.py
+++ b/var/spack/repos/builtin/packages/gl2ps/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gl2ps(Package):
+class Gl2ps(CMakePackage):
"""GL2PS is a C library providing high quality vector output for any
OpenGL application."""
@@ -34,10 +34,37 @@ class Gl2ps(Package):
version('1.3.9', '377b2bcad62d528e7096e76358f41140')
- depends_on("libpng")
+ variant('png', default=True, description='Enable PNG support')
+ variant('zlib', default=True, description='Enable compression using ZLIB')
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
+ depends_on('cmake@2.4:', type='build')
- make()
- make("install")
+ # TODO: Add missing dependencies on OpenGL/Mesa and LaTeX
+
+ # X11 libraries:
+ depends_on('libice')
+ depends_on('libsm')
+ depends_on('libxau')
+ depends_on('libxdamage')
+ depends_on('libxdmcp')
+ depends_on('libxext')
+ depends_on('libxfixes')
+ depends_on('libxi')
+ depends_on('libxmu')
+ depends_on('libxt')
+ depends_on('libxxf86vm')
+ depends_on('libxcb')
+ depends_on('libdrm')
+ depends_on('expat')
+
+ depends_on('libpng', when='+png')
+ depends_on('zlib', when='+zlib')
+
+ def variant_to_bool(self, variant):
+ return 'ON' if variant in self.spec else 'OFF'
+
+ def cmake_args(self):
+ return [
+ '-DENABLE_PNG={0}'.format(self.variant_to_bool('+png')),
+ '-DENABLE_ZLIB={0}'.format(self.variant_to_bool('+zlib')),
+ ]
diff --git a/var/spack/repos/builtin/packages/glew/package.py b/var/spack/repos/builtin/packages/glew/package.py
index 5df7c8642f..4ba7eb5894 100644
--- a/var/spack/repos/builtin/packages/glew/package.py
+++ b/var/spack/repos/builtin/packages/glew/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/glib/no-Werror=format-security.patch b/var/spack/repos/builtin/packages/glib/no-Werror=format-security.patch
index cfcfe424be..3e70212b97 100644
--- a/var/spack/repos/builtin/packages/glib/no-Werror=format-security.patch
+++ b/var/spack/repos/builtin/packages/glib/no-Werror=format-security.patch
@@ -1,16 +1,13 @@
---- a/configure.ac 2016-08-16 11:57:34.000000000 -0400
-+++ b/configure.ac 2016-08-16 11:57:36.000000000 -0400
-@@ -3357,11 +3357,11 @@
- enable_compile_warnings=yes)
- AS_IF([test "x$enable_compile_warnings" = xyes], [
- CC_CHECK_FLAGS_APPEND([GLIB_WARN_CFLAGS], [CFLAGS], [\
+--- a/configure 2017-05-12 16:03:01.000000000 -0500
++++ b/configure 2017-05-12 16:01:58.000000000 -0500
+@@ -29273,8 +29273,8 @@
+ for flag in \
-Wall -Wstrict-prototypes -Werror=declaration-after-statement \
-Werror=missing-prototypes -Werror=implicit-function-declaration \
- -Werror=pointer-arith -Werror=init-self -Werror=format-security \
-- -Werror=format=2 -Werror=missing-include-dirs])
+- -Werror=format=2 -Werror=missing-include-dirs; do
+ -Werror=pointer-arith -Werror=init-self \
-+ -Werror=missing-include-dirs])
- ])
- AC_SUBST(GLIB_WARN_CFLAGS)
++ -Werror=missing-include-dirs; do
- #
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports flag $flag in envvar CFLAGS" >&5
+ $as_echo_n "checking if $CC supports flag $flag in envvar CFLAGS... " >&6; }
diff --git a/var/spack/repos/builtin/packages/glib/package.py b/var/spack/repos/builtin/packages/glib/package.py
index 4d8085baf2..5997987fa6 100644
--- a/var/spack/repos/builtin/packages/glib/package.py
+++ b/var/spack/repos/builtin/packages/glib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,30 +23,32 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class Glib(Package):
+class Glib(AutotoolsPackage):
"""The GLib package contains a low-level libraries useful for
providing data structure handling for C, portability wrappers
and interfaces for such runtime functionality as an event loop,
threads, dynamic loading and an object system."""
homepage = "https://developer.gnome.org/glib/"
- url = "http://ftp.gnome.org/pub/gnome/sources/glib/2.42/glib-2.42.1.tar.xz"
+ url = "https://ftp.gnome.org/pub/gnome/sources/glib/2.53/glib-2.53.1.tar.xz"
+ version('2.53.1', '3362ef4da713f834ea26904caf3a75f5')
+ version('2.49.7', '397ead3fcf325cb921d54e2c9e7dfd7a')
version('2.49.4', 'e2c87c03017b0cd02c4c73274b92b148')
version('2.48.1', '67bd3b75c9f6d5587b457dc01cdcd5bb')
version('2.42.1', '89c4119e50e767d3532158605ee9121a')
- depends_on('autoconf', type='build')
- depends_on('automake', type='build')
- depends_on('libtool', type='build')
- depends_on('pkg-config+internal_glib', type='build')
+ variant('libmount', default=False, description='Build with libmount support')
+
+ depends_on('pkg-config@0.16:+internal_glib', type='build')
depends_on('libffi')
depends_on('zlib')
depends_on('gettext')
+ depends_on('perl', type=('build', 'run'))
depends_on('pcre+utf', when='@2.48:')
+ depends_on('util-linux', when='+libmount')
# The following patch is needed for gcc-6.1
patch('g_date_strftime.patch', when='@2.42.1')
@@ -59,17 +61,21 @@ class Glib(Package):
url = 'http://ftp.gnome.org/pub/gnome/sources/glib'
return url + '/%s/glib-%s.tar.xz' % (version.up_to(2), version)
- def install(self, spec, prefix):
- autoreconf = which("autoreconf")
- autoreconf("--install", "--verbose", "--force",
- "-I", "config",
- "-I", os.path.join(spec['pkg-config'].prefix,
- "share", "aclocal"),
- "-I", os.path.join(spec['automake'].prefix,
- "share", "aclocal"),
- "-I", os.path.join(spec['libtool'].prefix,
- "share", "aclocal"),
- )
- configure("--prefix=%s" % prefix)
- make()
- make("install", parallel=False)
+ def configure_args(self):
+ spec = self.spec
+ args = []
+
+ if '+libmount' in spec:
+ args.append('--enable-libmount')
+ else:
+ args.append('--disable-libmount')
+
+ return args
+
+ @run_before('install')
+ def filter_sbang(self):
+ # Filter sbang before install so Spack's sbang hook can fix it up
+ perl = join_path(self.spec['perl'].prefix.bin, 'perl')
+ files = ['gobject/glib-mkenums']
+
+ filter_file('^#! /usr/bin/perl', '#!{0}'.format(perl), *files)
diff --git a/var/spack/repos/builtin/packages/glm/package.py b/var/spack/repos/builtin/packages/glm/package.py
index c565b3cae7..d2bf9da282 100644
--- a/var/spack/repos/builtin/packages/glm/package.py
+++ b/var/spack/repos/builtin/packages/glm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,9 @@
from spack import *
-class Glm(Package):
+class Glm(CMakePackage):
"""OpenGL Mathematics (GLM) is a header only C++ mathematics library for
- graphics software based on the OpenGL Shading Language (GLSL)
- specification.
-
+ graphics software based on the OpenGL Shading Language (GLSL) specification
"""
homepage = "https://github.com/g-truc/glm"
@@ -37,10 +35,4 @@ class Glm(Package):
version('0.9.7.1', '61af6639cdf652d1cdd7117190afced8')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
- make()
- make("install")
+ depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/global/package.py b/var/spack/repos/builtin/packages/global/package.py
index fedf41c829..040b7d6e71 100644
--- a/var/spack/repos/builtin/packages/global/package.py
+++ b/var/spack/repos/builtin/packages/global/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/globalarrays/ibm-xl.patch b/var/spack/repos/builtin/packages/globalarrays/ibm-xl.patch
new file mode 100644
index 0000000000..644e3a559a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/globalarrays/ibm-xl.patch
@@ -0,0 +1,250 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 2022280..dac3b7f 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -174,6 +174,15 @@ option (F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS "Set F77 macros" ON)
+ if (ENABLE_FORTRAN)
+ include( FortranCInterface )
+ FortranCInterface_HEADER(${CMAKE_SOURCE_DIR}/f2c_cmake.h MACRO_NAMESPACE F77_FUNC_)
++ add_custom_command(
++ OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.fh
++ COMMAND ${CMAKE_COMMAND} -D INPUT:PATH="${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.h" -D OUTPUT:PATH="${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.fh" -P ${PROJECT_SOURCE_DIR}/tools/f2c_cmake_fh_from_h.cmake DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.h
++ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.h
++ )
++ add_custom_target(
++ GenerateF2c_cmakeFH ALL
++ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/f2c_cmake.fh
++ )
+ else()
+ CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/cmake/f2c_dummy.h.in
+ ${CMAKE_SOURCE_DIR}/f2c_cmake.h )
+@@ -336,6 +345,15 @@ if (ENABLE_FORTRAN)
+ set (F77_IARGC IARGC)
+ set (F77_FLUSH flush)
+ set (HAVE_F77_FLUSH 1)
++ elseif (CMAKE_Fortran_COMPILER MATCHES "xlf.*")
++ message(STATUS "Using IBM XL Fortran compiler settings")
++ set (F90_MODULE )
++ set (F77_GETARG GETARG)
++ set (F77_GETARG_ARGS "i,s")
++ set (F77_GETARG_DECLS "intrinsic GETARG")
++ set (F77_IARGC IARGC)
++ set (F77_FLUSH flush_)
++ set (HAVE_F77_FLUSH 1)
+ endif()
+ else()
+ # need to set these variable even if only compiling C/C++
+diff --git a/cmake/config.h.in b/cmake/config.h.in
+index 3ce6a32..9ad868f 100644
+--- a/cmake/config.h.in
++++ b/cmake/config.h.in
+@@ -58,11 +58,11 @@
+
+ #cmakedefine01 F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS
+
+-/*#define F77_FUNC(name,NAME) F77_FUNC_GLOBAL(name,NAME)*/
+-/*#define F77_FUNC_(name,NAME) F77_FUNC_GLOBAL_(name,NAME)*/
++#define F77_FUNC(name,NAME) F77_FUNC_GLOBAL(name,NAME)
++#define F77_FUNC_(name,NAME) F77_FUNC_GLOBAL_(name,NAME)
+
+-#define F77_FUNC(name,NAME) name ## _
+-#define F77_FUNC_(name,NAME) name ## _
++/* #define F77_FUNC(name,NAME) name ## _ */
++/* #define F77_FUNC_(name,NAME) name ## _ */
+
+ #define FXX_MODULE ${F90_MODULE}
+ #define F77_GETARG ${F77_GETARG}
+diff --git a/tools/config_fh_from_h.cmake b/tools/config_fh_from_h.cmake
+index acdf776..fb10422 100644
+--- a/tools/config_fh_from_h.cmake
++++ b/tools/config_fh_from_h.cmake
+@@ -7,6 +7,13 @@ if (INPUT)
+ foreach (l in ${in0})
+ # Only retain lines that start with "#"
+ set(found "")
++ string(REGEX MATCH "^#include" found "${l}")
++ if (found)
++ # don't include f2c_cmake.h
++ set(out "#include \"f2c_cmake.fh\"\n")
++ continue ()
++ endif ()
++ set(found "")
+ string(REGEX MATCH "^#" found "${l}")
+ if (found)
+ set(out "${out}${l}\n")
+diff --git a/tools/f2c_cmake_fh_from_h.cmake b/tools/f2c_cmake_fh_from_h.cmake
+new file mode 100644
+index 0000000..acdf776
+--- /dev/null
++++ b/tools/f2c_cmake_fh_from_h.cmake
+@@ -0,0 +1,21 @@
++if (INPUT)
++ if (OUTPUT)
++ file(READ "${INPUT}" in0)
++# replace carriage returns with a semi-colon
++ string (REGEX REPLACE "\n" ";" in0 "${in0}")
++ set(out "")
++ foreach (l in ${in0})
++ # Only retain lines that start with "#"
++ set(found "")
++ string(REGEX MATCH "^#" found "${l}")
++ if (found)
++ set(out "${out}${l}\n")
++ endif ()
++ endforeach ()
++ file(WRITE "${OUTPUT}" "${out}")
++ else (OUTPUT)
++ message(ERROR "OUTPUT variable must be set")
++ endif (OUTPUT)
++else (INPUT)
++ message(ERROR "INPUT variable must be set")
++endif (INPUT)
+diff --git a/global/src/cnames.h b/global/src/cnames.h
+index efdec60..cadfd0a 100644
+--- a/global/src/cnames.h
++++ b/global/src/cnames.h
+@@ -2268,6 +2268,7 @@
+ #define nga_iupdate_ghosts_ F77_FUNC_(nga_iupdate_ghosts,NGA_IUPDATE_GHOSTS)
+ #define nga_supdate_ghosts_ F77_FUNC_(nga_supdate_ghosts,NGA_SUPDATE_GHOSTS)
+ #define nga_zupdate_ghosts_ F77_FUNC_(nga_zupdate_ghosts,NGA_ZUPDATE_GHOSTS)
++#define nga_update_ghosts_nb_ F77_FUNC_(nga_update_ghosts_nb, NGA_UPDATE_GHOSTS_NB)
+ #define ga_update6_ghosts_ F77_FUNC_(ga_update6_ghosts, GA_UPDATE6_GHOSTS)
+ #define ga_cupdate6_ghosts_ F77_FUNC_(ga_cupdate6_ghosts,GA_CUPDATE6_GHOSTS)
+ #define ga_dupdate6_ghosts_ F77_FUNC_(ga_dupdate6_ghosts,GA_DUPDATE6_GHOSTS)
+diff --git a/global/testing/perform.F b/global/testing/perform.F
+index b18146d..e1b9641 100644
+--- a/global/testing/perform.F
++++ b/global/testing/perform.F
+@@ -110,7 +110,7 @@ c
+ & ilo,ihi,jlo,jhi
+ write(6,*)'bytes loop get put',
+ & ' accumulate'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -145,7 +145,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, count, tg, 1d-6*bytes/tg,
+ & tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+diff --git a/global/testing/mir_perf1.F b/global/testing/mir_perf1.F
+index 074e838..3548552 100644
+--- a/global/testing/mir_perf1.F
++++ b/global/testing/mir_perf1.F
+@@ -133,7 +133,7 @@ c
+ & ' accumulate'
+ write(6,*)' bytes dim sec MB/s sec MB/s',
+ & ' sec MB/s'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -174,7 +174,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, chunk(loop), tg,
+ & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+@@ -388,7 +388,7 @@ c
+ & ' accumulate'
+ write(6,*)' bytes dim sec MB/s sec MB/s',
+ & ' sec MB/s'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -427,7 +427,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, chunk(loop), tg,
+ & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+diff --git a/global/testing/mir_perf2.F b/global/testing/mir_perf2.F
+index fb50398..3b3bed6 100644
+--- a/global/testing/mir_perf2.F
++++ b/global/testing/mir_perf2.F
+@@ -124,7 +124,7 @@ c
+ & ' accumulate'
+ write(6,*)' bytes dim sec MB/s sec MB/s',
+ & ' sec MB/s'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -163,7 +163,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, chunk(loop), tg,
+ & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+@@ -377,7 +377,7 @@ c
+ & ' accumulate'
+ write(6,*)' bytes dim sec MB/s sec MB/s',
+ & ' sec MB/s'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -416,7 +416,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, chunk(loop), tg,
+ & 1d-6*bytes/tg,tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+diff --git a/global/testing/perfmod.F b/global/testing/perfmod.F
+index ec3fe37..7770be7 100644
+--- a/global/testing/perfmod.F
++++ b/global/testing/perfmod.F
+@@ -119,7 +119,7 @@ c
+
+ write(6,*)'bytes loop get put',
+ & ' accumulate'
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ call ga_sync()
+ c
+@@ -157,7 +157,7 @@ c
+ if (me .eq. 0) then
+ write(6,77)bytes, count, tg, 1d-6*bytes/tg,
+ & tp, 1d-6*bytes/tp, ta, 1d-6*bytes/ta
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ enddo
+ c
+diff --git a/global/testing/sprsmatmult.F b/global/testing/sprsmatmult.F
+index 3fdeb3f..3682c3b 100644
+--- a/global/testing/sprsmatmult.F
++++ b/global/testing/sprsmatmult.F
+@@ -108,7 +108,7 @@ c
+ print *,'Comparing distributed multiply with serial multiply'
+ print *
+ #endif
+- call flush(6)
++ call F77_FLUSH(6)
+ endif
+ c
+ c*** Initialize the MA package
diff --git a/var/spack/repos/builtin/packages/globalarrays/package.py b/var/spack/repos/builtin/packages/globalarrays/package.py
new file mode 100644
index 0000000000..2473be5620
--- /dev/null
+++ b/var/spack/repos/builtin/packages/globalarrays/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC.
+# Produced at IBM.
+#
+# This file is part of Spack.
+# Created by Serban Maerean, serban@ibm.com, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/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 Globalarrays(CMakePackage):
+ """The Global Arrays (GA) toolkit provides a shared memory style
+ programming environment in the context of distributed array data
+ structures.
+ """
+
+ homepage = "http://hpc.pnl.gov/globalarrays/"
+ url = "https://github.com/GlobalArrays/ga"
+
+ version('master', git='https://github.com/GlobalArrays/ga', branch='master')
+
+ variant('i8', default=False, description='Build with 8 byte integers')
+
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('mpi')
+
+ patch('ibm-xl.patch', when='%xl')
+ patch('ibm-xl.patch', when='%xl_r')
+
+ def cmake_args(self):
+ options = []
+
+ options.extend([
+ '-DENABLE_FORTRAN=ON',
+ '-DENABLE_BLAS=ON',
+ ])
+
+ if self.compiler.name == 'xl' or self.compiler.name == 'xl_r':
+ # use F77 compiler if IBM XL
+ options.extend([
+ '-DCMAKE_Fortran_COMPILER=%s' % self.compiler.f77,
+ '-DCMAKE_Fortran_FLAGS=-qzerosize'
+ ])
+
+ if "+i8" in self.spec:
+ options.extend(['-DENABLE_I8=ON'])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/globus-toolkit/package.py b/var/spack/repos/builtin/packages/globus-toolkit/package.py
index 5cec13a5af..05944b2dd5 100644
--- a/var/spack/repos/builtin/packages/globus-toolkit/package.py
+++ b/var/spack/repos/builtin/packages/globus-toolkit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class GlobusToolkit(Package):
+class GlobusToolkit(AutotoolsPackage):
"""The Globus Toolkit is an open source software toolkit used for building
grids"""
@@ -33,8 +33,3 @@ class GlobusToolkit(Package):
url = "http://toolkit.globus.org/ftppub/gt6/installers/src/globus_toolkit-6.0.1470089956.tar.gz"
version('6.0.1470089956', 'b77fe3cc5a5844df995688b0e630d077')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/glog/package.py b/var/spack/repos/builtin/packages/glog/package.py
index 14f042732b..cc62b1250e 100644
--- a/var/spack/repos/builtin/packages/glog/package.py
+++ b/var/spack/repos/builtin/packages/glog/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,16 @@
from spack import *
-class Glog(Package):
+class Glog(CMakePackage):
"""C++ implementation of the Google logging module."""
homepage = "https://github.com/google/glog"
- url = "https://github.com/google/glog/archive/v0.3.3.tar.gz"
+ url = "https://github.com/google/glog/archive/v0.3.4.tar.gz"
+ version('0.3.4', 'df92e05c9d02504fb96674bc776a41cb')
version('0.3.3', 'c1f86af27bd9c73186730aa957607ed0')
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
+ depends_on('gflags')
+
+ def cmake_args(self):
+ return ['-DBUILD_SHARED_LIBS=TRUE']
diff --git a/var/spack/repos/builtin/packages/glpk/package.py b/var/spack/repos/builtin/packages/glpk/package.py
index 1b52643e59..7693ba7b9a 100644
--- a/var/spack/repos/builtin/packages/glpk/package.py
+++ b/var/spack/repos/builtin/packages/glpk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,30 +25,30 @@
from spack import *
-class Glpk(Package):
+class Glpk(AutotoolsPackage):
"""The GLPK (GNU Linear Programming Kit) package is intended for solving
- large-scale linear programming (LP), mixed integer programming
- (MIP), and other related problems. It is a set of routines written
- in ANSI C and organized in the form of a callable library
-
+ large-scale linear programming (LP), mixed integer programming
+ (MIP), and other related problems. It is a set of routines written
+ in ANSI C and organized in the form of a callable library.
"""
+
homepage = "https://www.gnu.org/software/glpk"
url = "http://ftp.gnu.org/gnu/glpk/glpk-4.57.tar.gz"
+ version('4.61', '3ce3e224a8b6e75a1a0b378445830f21')
version('4.57', '237531a54f73155842f8defe51aedb0f')
- variant('gmp', default=False,
- description='Activates support for GMP library')
+ variant(
+ 'gmp', default=False, description='Activates support for GMP library'
+ )
depends_on('gmp', when='+gmp')
- def install(self, spec, prefix):
+ def configure_args(self):
- options = ['--prefix=%s' % prefix]
+ options = []
- if '+gmp' in spec:
+ if '+gmp' in self.spec:
options.append('--with-gmp')
- configure(*options)
- make()
- make("install")
+ return options
diff --git a/var/spack/repos/builtin/packages/glproto/package.py b/var/spack/repos/builtin/packages/glproto/package.py
index 462e529067..eaaabc884b 100644
--- a/var/spack/repos/builtin/packages/glproto/package.py
+++ b/var/spack/repos/builtin/packages/glproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Glproto(Package):
+class Glproto(AutotoolsPackage):
"""OpenGL Extension to the X Window System.
This extension defines a protocol for the client to send 3D rendering
@@ -38,8 +38,3 @@ class Glproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/gmake/package.py b/var/spack/repos/builtin/packages/gmake/package.py
index ca296350a4..29042eaad6 100644
--- a/var/spack/repos/builtin/packages/gmake/package.py
+++ b/var/spack/repos/builtin/packages/gmake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,33 @@
from spack import *
-class Gmake(Package):
- """GNU Make."""
+class Gmake(AutotoolsPackage):
+ """GNU Make is a tool which controls the generation of executables and
+ other non-source files of a program from the program's source files."""
- homepage = "http://gnu.org/gnu/make"
- url = "ftp://ftp.gnu.org/gnu/make/make-4.0.tar.gz"
+ homepage = "https://www.gnu.org/software/make/"
+ url = "https://ftp.gnu.org/gnu/make/make-4.2.1.tar.gz"
- version('4.0', 'b5e558f981326d9ca1bfdb841640721a')
+ version('4.2.1', '7d0dcb6c474b258aab4d54098f2cf5a7')
+ version('4.0', 'b5e558f981326d9ca1bfdb841640721a')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
+ variant('guile', default=False, description='Support GNU Guile for embedded scripting')
- make()
- make('install')
- with working_dir(prefix.bin):
+ depends_on('guile', when='+guile')
+
+ build_directory = 'spack-build'
+
+ def configure_args(self):
+ args = []
+
+ if '+guile' in self.spec:
+ args.append('--with-guile')
+ else:
+ args.append('--without-guile')
+
+ return args
+
+ @run_after('install')
+ def symlink_gmake(self):
+ with working_dir(self.prefix.bin):
symlink('make', 'gmake')
diff --git a/var/spack/repos/builtin/packages/gmap-gsnap/package.py b/var/spack/repos/builtin/packages/gmap-gsnap/package.py
new file mode 100644
index 0000000000..7db09fb72d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gmap-gsnap/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class GmapGsnap(AutotoolsPackage):
+ """GMAP: A Genomic Mapping and Alignment Program for
+ mRNA and EST Sequences, and GSNAP: Genomic Short-read
+ Nucleotide Alignment Program"""
+
+ homepage = "http://research-pub.gene.com/gmap/"
+ url = "http://research-pub.gene.com/gmap/src/gmap-gsnap-2017-06-16.tar.gz"
+
+ version('2017-06-16', 'fcc91b8bdd4bf12ae3124de0c00db0c0')
diff --git a/var/spack/repos/builtin/packages/gmime/package.py b/var/spack/repos/builtin/packages/gmime/package.py
new file mode 100644
index 0000000000..d5d0e44d60
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gmime/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Gmime(AutotoolsPackage):
+ """GMime is a C/C++ library which may be used for the creation and
+ parsing of messages using the Multipurpose Internet Mail Extension (MIME).
+ """
+
+ homepage = "http://spruce.sourceforge.net/gmime/"
+ url = "https://download.gnome.org/sources/gmime/2.6/gmime-2.6.23.tar.xz"
+
+ version('2.6.23', '247072236d84bd0fbbff299d69bdf333')
+
+ depends_on('glib@2.18.0:')
+ depends_on('libgpg-error')
diff --git a/var/spack/repos/builtin/packages/gmp/package.py b/var/spack/repos/builtin/packages/gmp/package.py
index 45e8b8a452..0367a35200 100644
--- a/var/spack/repos/builtin/packages/gmp/package.py
+++ b/var/spack/repos/builtin/packages/gmp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class Gmp(AutotoolsPackage):
on signed integers, rational numbers, and floating-point numbers."""
homepage = "https://gmplib.org"
- url = "https://gmplib.org/download/gmp/gmp-6.0.0a.tar.bz2"
+ url = "https://ftp.gnu.org/gnu/gmp/gmp-6.1.2.tar.bz2"
version('6.1.2', '8ddbb26dc3bd4e2302984debba1406a5')
version('6.1.1', '4c175f86e11eb32d8bf9872ca3a8e11d')
@@ -38,8 +38,15 @@ class Gmp(AutotoolsPackage):
version('6.0.0a', 'b7ff2d88cae7f8085bd5006096eed470')
version('6.0.0', '6ef5869ae735db9995619135bd856b84')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
depends_on('m4', type='build')
+ # gmp's configure script seems to be broken; it sometimes misdetects
+ # shared library support. Regenerating it fixes the issue.
+ force_autoreconf = True
+
def configure_args(self):
args = ['--enable-cxx']
# This flag is necessary for the Intel build to pass `make check`
diff --git a/var/spack/repos/builtin/packages/gmsh/package.py b/var/spack/repos/builtin/packages/gmsh/package.py
index fffd448443..94794ed8a5 100644
--- a/var/spack/repos/builtin/packages/gmsh/package.py
+++ b/var/spack/repos/builtin/packages/gmsh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,14 +38,14 @@ class Gmsh(CMakePackage):
homepage = 'http://gmsh.info'
url = 'http://gmsh.info/src/gmsh-2.11.0-source.tgz'
+ version('3.0.1', '830b5400d9f1aeca79c3745c5c9fdaa2900cdb2fa319b664a5d26f7e615c749f')
+ version('2.16.0', 'e829eaf32ea02350a385202cc749341f2a3217c464719384b18f653edd028eea')
version('2.15.0', '992a4b580454105f719f5bc05441d3d392ab0b4b80d4ea07b61ca3bdc974070a')
version('2.12.0', '7fbd2ec8071e79725266e72744d21e902d4fe6fa9e7c52340ad5f4be5c159d09')
version('2.11.0', 'f15b6e7ac9ca649c9a74440e1259d0db')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds the library in debug mode')
variant('mpi', default=True,
description='Builds MPI support for parser and solver')
variant('fltk', default=False,
@@ -87,7 +87,7 @@ class Gmsh(CMakePackage):
options.append('-DENABLE_OS_SPECIFIC_INSTALL=OFF')
# Make sure GMSH picks up correct BlasLapack by providing linker flags
- blas_lapack = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ blas_lapack = spec['lapack'].libs + spec['blas'].libs
options.append(
'-DBLAS_LAPACK_LIBRARIES={0}'.format(blas_lapack.ld_flags))
@@ -126,9 +126,6 @@ class Gmsh(CMakePackage):
# Builds and installs static library
options.append('-DENABLE_BUILD_LIB:BOOL=ON')
- if '+debug' in spec:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
-
if '+mpi' in spec:
options.append('-DENABLE_MPI:BOOL=ON')
diff --git a/var/spack/repos/builtin/packages/gnat/package.py b/var/spack/repos/builtin/packages/gnat/package.py
new file mode 100644
index 0000000000..843d81d9e4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gnat/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Gnat(MakefilePackage):
+ """The GNAT Ada compiler. Ada is a modern programming language designed
+ for large, long-lived applications - and embedded systems in particular
+ - where reliability and efficiency are essential."""
+
+ homepage = "https://libre.adacore.com/tools/gnat-gpl-edition/"
+
+ # NOTE: This is a binary installer intended to bootstrap GCC's Ada compiler
+
+ # There may actually be a way to install GNAT from source. If you go to
+ # the GNAT Download page: https://libre.adacore.com/download/
+ # select "Free Software or Academic Development", select your platform,
+ # expand GNAT Ada, and expand Sources, you'll see links to download the
+ # source code for GNAT and all of its dependencies. Most of these
+ # dependencies are already in Spack.
+
+ # This is the GPL release for Linux x86-64
+ version('2016', '9741107cca1a6a4ddb0d5e8de824a90c', extension='tar.gz',
+ url="http://mirrors.cdn.adacore.com/art/5739cefdc7a447658e0b016b")
+
+ phases = ['install']
+
+ def install(self, spec, prefix):
+ make('ins-all', 'prefix={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/gnu-prolog/package.py b/var/spack/repos/builtin/packages/gnu-prolog/package.py
index 1e0487c654..819e57498a 100644
--- a/var/spack/repos/builtin/packages/gnu-prolog/package.py
+++ b/var/spack/repos/builtin/packages/gnu-prolog/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/gnupg/package.py b/var/spack/repos/builtin/packages/gnupg/package.py
new file mode 100644
index 0000000000..756f8404bc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gnupg/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Gnupg(AutotoolsPackage):
+ """GnuPG is a complete and free implementation of the OpenPGP
+ standard as defined by RFC4880 """
+
+ homepage = "https://gnupg.org/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/gnupg/gnupg-2.1.21.tar.bz2"
+
+ version('2.1.21', '685ebf4c3a7134ba0209c96b18b2f064')
+
+ depends_on('libgcrypt')
+ depends_on('libassuan')
+ depends_on('libksba')
+ depends_on('libgpg-error')
+ depends_on('npth')
+
+ def configure_args(self):
+ args = ['--with-npth-prefix=%s' % self.spec['npth'].prefix,
+ '--with-libgcrypt-prefix=%s' % self.spec['libgcrypt'].prefix,
+ '--with-libksba-prefixx=%s' % self.spec['libksba'].prefix,
+ '--with-libassuan-prefix=%s' % self.spec['libassuan'].prefix,
+ '--with-libpgp-error-prefix=%s' %
+ self.spec['libgpg-error'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/gnuplot/package.py b/var/spack/repos/builtin/packages/gnuplot/package.py
index 600b6d285f..1af9cbfb08 100644
--- a/var/spack/repos/builtin/packages/gnuplot/package.py
+++ b/var/spack/repos/builtin/packages/gnuplot/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,13 +22,11 @@
# 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 *
-
import os
-class Gnuplot(Package):
+class Gnuplot(AutotoolsPackage):
"""Gnuplot is a portable command-line driven graphing utility for Linux,
OS/2, MS Windows, OSX, VMS, and many other platforms. The source
code is copyrighted but freely distributed (i.e., you don't have
@@ -41,26 +39,104 @@ class Gnuplot(Package):
"""
homepage = "http://www.gnuplot.info"
- url = "http://downloads.sourceforge.net/project/gnuplot/gnuplot/5.0.1/gnuplot-5.0.1.tar.gz"
+ url = "http://downloads.sourceforge.net/project/gnuplot/gnuplot/5.0.6/gnuplot-5.0.6.tar.gz"
+ # There is a conflict in term.h between gnuplot and ncurses, which is a
+ # dependency of readline. Fix it with a small patch
+ patch('term_include.patch')
+
+ version('5.2.0', '0bd8f9af84c0ad2fa9de16772c366416')
+ version('5.0.7', '8eaafddb0b12795f82ed6dd2a6ebbe80')
+ version('5.0.6', '8ec46520a86a61163a701b00404faf1a')
+ version('5.0.5', 'c5e96fca73afbee4f57cbc1bfce6b3b8')
version('5.0.1', '79b4f9e203728f76b60b28bcd402d3c7')
+ variant('wx', default=False,
+ description='Activates wxWidgets terminal')
+ variant('gd', default=True,
+ description='Activates gd based terminal')
+ variant('cairo', default=True,
+ description='Activates cairo based terminal')
+ variant('X', default=False,
+ description='Build with X11')
+ variant('libcerf', default=True,
+ description='Build with libcerf support')
+ variant('pbm', default=False,
+ description='Enable PBM (Portable Bit Map) and other older bitmap terminals') # NOQA: ignore=E501
+
+ # required dependencies
depends_on('readline')
- depends_on('libcerf')
- depends_on('libgd')
- depends_on('cairo')
- depends_on('pango')
+ depends_on('pkg-config', type='build')
+ depends_on('libxpm')
+ depends_on('libiconv')
+
+ # optional dependencies:
+ depends_on('libcerf', when='+libcerf')
+ depends_on('libgd', when='+gd')
+ depends_on('cairo@1.2:', when='+cairo')
depends_on('wx', when='+wx')
+ depends_on('pango@1.10:', when='+wx')
+ depends_on('pango@1.10:', when='+cairo')
+
+ def configure_args(self):
+ # see https://github.com/Homebrew/homebrew-core/blob/master/Formula/gnuplot.rb
+ # and https://github.com/macports/macports-ports/blob/master/math/gnuplot/Portfile
+ spec = self.spec
+ options = [
+ '--disable-dependency-tracking',
+ '--disable-silent-rules',
+ # Per upstream: "--with-tutorial is horribly out of date."
+ '--without-tutorial',
+ '--with-readline=%s' % spec['readline'].prefix
+ ]
+
+ if '+pbm' in spec:
+ options.append('--with-bitmap-terminals')
+ else:
+ options.append('--without-bitmap-terminals')
+
+ if '+X' in spec:
+ # It seems there's an open bug for wxWidgets support
+ # See : http://sourceforge.net/p/gnuplot/bugs/1694/
+ os.environ['TERMLIBS'] = '-lX11'
+ options.append('--with-x')
+ else:
+ options.append('--without-x')
+
+ if '+wx' in spec:
+ options.append('--with-wx=%s' % spec['wx'].prefix)
+ else:
+ options.append('--disable-wxwidgets')
+
+ if '+gd' in spec:
+ options.append('--with-gd=%s' % spec['libgd'].prefix)
+ else:
+ options.append('--without-gd')
+
+ if '+cairo' in spec:
+ options.append('--with-cairo')
+ else:
+ options.append('--without-cairo')
+
+ if '+libcerf' in spec:
+ options.append('--with-libcerf')
+ else:
+ options.append('--without-libcerf')
+
+ # TODO: Enable pdflib-based pdf terminal
+ # '--with-pdf=%s' % spec['pdflib-lite'].prefix (or pdflib)
+ options.append('--without-pdf')
+
+ # TODO: Enable qt terminal qt@5.7
+ options.append('--with-qt=no')
- variant('wx', default=False, description='Activates wxWidgets terminal')
+ # TODO: Enable lua-based terminals
+ options.append('--without-lua')
- def install(self, spec, prefix):
- # It seems there's an open bug for wxWidgets support
- # See : http://sourceforge.net/p/gnuplot/bugs/1694/
- os.environ['TERMLIBS'] = '-lX11'
+ # TODO: --with-latex
+ options.append('--without-latex')
- options = ['--prefix=%s' % prefix]
+ # TODO: --with-aquaterm depends_on('aquaterm')
+ options.append('--without-aquaterm')
- configure(*options)
- make()
- make("install")
+ return options
diff --git a/var/spack/repos/builtin/packages/gnuplot/term_include.patch b/var/spack/repos/builtin/packages/gnuplot/term_include.patch
new file mode 100644
index 0000000000..64145a68c6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gnuplot/term_include.patch
@@ -0,0 +1,11 @@
+--- a/docs/doc2x.h 2017-03-10 13:55:51.719850190 -0500
++++ b/docs/doc2x.h 2017-03-10 13:56:17.569826925 -0500
+@@ -69,7 +69,7 @@
+ # ifdef ALL_TERM_DOC
+ # include "allterm.h"
+ # else
+-# include "term.h"
++# include "src/term.h"
+ # endif
+ NULL
+ };
diff --git a/var/spack/repos/builtin/packages/gnutls/package.py b/var/spack/repos/builtin/packages/gnutls/package.py
index 5f7b0daf9b..7f41eb3204 100644
--- a/var/spack/repos/builtin/packages/gnutls/package.py
+++ b/var/spack/repos/builtin/packages/gnutls/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,23 +25,66 @@
from spack import *
-class Gnutls(Package):
- """GnuTLS is a secure communications library implementing the SSL,
- TLS and DTLS protocols and technologies around them. It
- provides a simple C language application programming interface
- (API) to access the secure communications protocols as well as
- APIs to parse and write X.509, PKCS #12, OpenPGP and other
- required structures. It is aimed to be portable and efficient
- with focus on security and interoperability."""
+class Gnutls(AutotoolsPackage):
+ """GnuTLS is a secure communications library implementing the SSL, TLS
+ and DTLS protocols and technologies around them. It provides a simple C
+ language application programming interface (API) to access the secure
+ communications protocols as well as APIs to parse and write X.509, PKCS
+ #12, OpenPGP and other required structures. It is aimed to be portable
+ and efficient with focus on security and interoperability."""
homepage = "http://www.gnutls.org"
- url = "ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/gnutls-3.3.9.tar.xz"
+ url = "https://www.gnupg.org/ftp/gcrypt/gnutls/v3.5/gnutls-3.5.13.tar.xz"
- version('3.3.9', 'ff61b77e39d09f1140ab5a9cf52c58b6')
+ version('3.5.13', '4fd41ad86572933c2379b4cc321a0959')
+ version('3.5.10', '336c03a71ba90184ffd0388075dde504')
+ version('3.5.9', '0ab25eb6a1509345dd085bc21a387951')
+ version('3.3.9', 'ff61b77e39d09f1140ab5a9cf52c58b6')
- depends_on("nettle")
+ variant('zlib', default=True, description='Enable zlib compression support')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ # Note that version 3.3.9 of gnutls doesn't support nettle 3.0.
+ depends_on('nettle@:2.9', when='@3.3.9')
+ depends_on('nettle', when='@3.5:')
+ depends_on('zlib', when='+zlib')
+ depends_on('gettext')
+
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ build_directory = 'spack-build'
+
+ def url_for_version(self, version):
+ url = "https://www.gnupg.org/ftp/gcrypt/gnutls/v{0}/gnutls-{1}.tar.xz"
+ return url.format(version.up_to(2), version)
+
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ '--enable-static',
+ ]
+
+ if spec.satisfies('@3.5:'):
+ # use shipped libraries, might be turned into variants
+ args.append('--with-included-libtasn1')
+ args.append('--with-included-unistring')
+ args.append('--without-p11-kit') # p11-kit@0.23.1: ...
+
+ if '+zlib' in spec:
+ args.append('--with-zlib')
+ else:
+ args.append('--without-zlib')
+
+ if self.run_tests:
+ args.extend([
+ '--enable-tests',
+ '--enable-valgrind-tests',
+ '--enable-full-test-suite',
+ ])
+ else:
+ args.extend([
+ '--disable-tests',
+ '--disable-valgrind-tests',
+ '--disable-full-test-suite',
+ ])
+
+ return args
diff --git a/var/spack/repos/builtin/packages/go-bootstrap/package.py b/var/spack/repos/builtin/packages/go-bootstrap/package.py
index b497144f2f..0228aa74d9 100644
--- a/var/spack/repos/builtin/packages/go-bootstrap/package.py
+++ b/var/spack/repos/builtin/packages/go-bootstrap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -46,12 +46,12 @@ class GoBootstrap(Package):
# See: https://golang.org/doc/install/source#go14 and
# https://github.com/golang/go/issues/17545 and
# https://github.com/golang/go/issues/16352
+ version('1.4-bootstrap-20170531', 'd2cc61cb9f829b3510ee39c0c5568014',
+ url='https://storage.googleapis.com/golang/go1.4-bootstrap-20170531.tar.gz')
version('1.4-bootstrap-20161024', '76e42c8152e8560ded880a6d1d1f53cb',
url='https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz')
- variant('test', default=True, description='Build and run tests as part of the build.')
-
- provides('golang@:1.4-bootstrap-20161024')
+ provides('golang@:1.4-bootstrap-20170531')
depends_on('git', type=('build', 'link', 'run'))
@@ -67,15 +67,11 @@ class GoBootstrap(Package):
r'# \1\2\3',
)
- @when('@1.5.0:')
- def patch(self):
- pass
-
def install(self, spec, prefix):
env['CGO_ENABLED'] = '0'
bash = which('bash')
with working_dir('src'):
- bash('{0}.bash'.format('all' if '+test' in spec else 'make'))
+ bash('{0}.bash'.format('all' if self.run_tests else 'make'))
try:
os.makedirs(prefix)
@@ -87,7 +83,7 @@ class GoBootstrap(Package):
else:
shutil.copy2(f, os.path.join(prefix, f))
- def setup_dependent_environment(self, spack_env, run_env, dep_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
spack_env.set('GOROOT_BOOTSTRAP', self.spec.prefix)
def setup_environment(self, spack_env, run_env):
diff --git a/var/spack/repos/builtin/packages/go/package.py b/var/spack/repos/builtin/packages/go/package.py
index ad1436c0c3..b112ebe7d8 100644
--- a/var/spack/repos/builtin/packages/go/package.py
+++ b/var/spack/repos/builtin/packages/go/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,6 +42,11 @@ from spack import *
#
# - on CentOS 7 systems (and possibly others) you need to have the
# glibc package installed or various static cgo tests fail.
+#
+# - When building on a *large* machine (144 cores, 1.5TB RAM) I need
+# to run `ulimit -u 8192` to bump up the max number of user processes.
+# Failure to do so results in an explosion in one of the tests and an
+# epic stack trace....
class Go(Package):
@@ -51,11 +56,16 @@ class Go(Package):
extendable = True
+ version('1.9.2', '44105c865a1a810464df79233a05a568')
+ version('1.9.1', '27bce1ffb05f4f6bd90d90081e5d4169')
+ version('1.9', 'da2d44ea384076efec43ee1f8b7d45d2')
+ version('1.8.3', '64e9380e07bba907e26a00cf5fcbe77e')
+ version('1.8.1', '409dd21e7347dd1ea9efe64a700073cc')
+ version('1.8', '7743960c968760437b6e39093cfe6f67')
+ version('1.7.5', '506de2d870409e9003e1440bcfeb3a65')
version('1.7.4', '49c1076428a5d3b5ad7ac65233fcca2f')
version('1.6.4', 'b023240be707b34059d2c114d3465c92')
- variant('test', default=True, description='Build and run tests as part of the build.')
-
provides('golang')
depends_on('git', type=('build', 'link', 'run'))
@@ -67,7 +77,8 @@ class Go(Package):
patch('time_test.patch', when='@1.6.4:1.7.4')
# https://github.com/golang/go/issues/17986
- patch('misc-cgo-testcshared.patch', level=0, when='@1.6.4:1.7.4')
+ # The fix for this issue has been merged into the 1.8 tree.
+ patch('misc-cgo-testcshared.patch', level=0, when='@1.6.4:1.7.5')
# NOTE: Older versions of Go attempt to download external files that have
# since been moved while running the test suite. This patch modifies the
@@ -81,17 +92,10 @@ class Go(Package):
r'# \1\2\3',
)
- @when('@1.5.0:')
- def patch(self):
- pass
-
- def url_for_version(self, version):
- return "https://storage.googleapis.com/golang/go{0}.src.tar.gz".format(version)
-
def install(self, spec, prefix):
bash = which('bash')
with working_dir('src'):
- bash('{0}.bash'.format('all' if '+test' in spec else 'make'))
+ bash('{0}.bash'.format('all' if self.run_tests else 'make'))
try:
os.makedirs(prefix)
@@ -105,8 +109,12 @@ class Go(Package):
def setup_environment(self, spack_env, run_env):
spack_env.set('GOROOT_FINAL', self.spec.prefix)
+ # We need to set CC/CXX_FOR_TARGET, otherwise cgo will use the
+ # internal Spack wrappers and fail.
+ spack_env.set('CC_FOR_TARGET', self.compiler.cc)
+ spack_env.set('CXX_FOR_TARGET', self.compiler.cxx)
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""Called before go modules' install() methods.
In most cases, extensions will only need to set GOPATH and use go::
@@ -117,15 +125,15 @@ class Go(Package):
shutil.copytree('bin', os.path.join(prefix, '/bin'))
"""
# Add a go command/compiler for extensions
- module.go = Executable(join_path(self.spec.prefix.bin, 'go'))
+ module.go = self.spec['go'].command
- def setup_dependent_environment(self, spack_env, run_env, ext_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
if os.environ.get('GOROOT', False):
tty.warn('GOROOT is set, this is not recommended')
path_components = []
# Set GOPATH to include paths of dependencies
- for d in ext_spec.traverse():
+ for d in dependent_spec.traverse():
if d.package.extends(self.spec):
path_components.append(d.prefix)
@@ -134,4 +142,4 @@ class Go(Package):
# Allow packages to find this when using module or dotkit
run_env.prepend_path('GOPATH', ':'.join(
- [ext_spec.prefix] + path_components))
+ [dependent_spec.prefix] + path_components))
diff --git a/var/spack/repos/builtin/packages/gobject-introspection/package.py b/var/spack/repos/builtin/packages/gobject-introspection/package.py
index 952ec21661..ec71e3cddd 100644
--- a/var/spack/repos/builtin/packages/gobject-introspection/package.py
+++ b/var/spack/repos/builtin/packages/gobject-introspection/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from spack import spack_root
class GobjectIntrospection(Package):
@@ -31,21 +32,52 @@ class GobjectIntrospection(Package):
library with support for multiple output"""
homepage = "https://wiki.gnome.org/Projects/GObjectIntrospection"
- url = "http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.48/gobject-introspection-1.48.0.tar.xz"
+ url = "http://ftp.gnome.org/pub/gnome/sources/gobject-introspection/1.49/gobject-introspection-1.49.2.tar.xz"
+ version('1.49.2', 'c47a76b05b2d8438089f519922180747')
version('1.48.0', '01301fa9019667d48e927353e08bc218')
+ depends_on("glib@2.49.2:", when="@1.49.2:")
# version 1.48.0 build fails with glib 2.49.4
- depends_on("glib@2.48.1")
+ depends_on("glib@2.48.1", when="@1.48.0")
depends_on("python")
depends_on("cairo")
depends_on("bison", type="build")
depends_on("flex", type="build")
+ depends_on("pkg-config@0.9.0:", type="build")
+
+ # GobjectIntrospection does not build with sed from darwin:
+ depends_on('sed', when='platform=darwin', type='build')
+
+ # This package creates several scripts from
+ # toosl/g-ir-tool-template.in. In their original form these
+ # scripts end up with a sbang line like
+ #
+ # `#!/usr/bin/env /path/to/spack/python`.
+ #
+ # These scripts are generated and then used as part of the build
+ # (other packages also use the scripts after they've been
+ # installed).
+ #
+ # The path to the spack python can become too long. Because these
+ # tools are used as part of the build, the normal hook that fixes
+ # this problem can't help us.
+ # This package fixes the problem in two steps:
+ # - it rewrites the g-ir-tool-template so that its sbang line
+ # refers directly to spack's python (filter_file step below); and
+ # - it patches the Makefile.in so that the generated Makefile has an
+ # extra sed expression in its TOOL_SUBSTITUTION that results in
+ # an `#!/bin/bash /path/to/spack/bin/sbang` unconditionally being
+ # inserted into the scripts as they're generated.
+ patch("sbang.patch")
def install(self, spec, prefix):
configure("--prefix=%s" % prefix)
# we need to filter this file to avoid an overly long hashbang line
- filter_file('@PYTHON@', 'python',
+ filter_file('#!/usr/bin/env @PYTHON@', '#!@PYTHON@',
'tools/g-ir-tool-template.in')
make()
make("install")
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('SPACK_SBANG', "%s/bin/sbang" % spack_root)
diff --git a/var/spack/repos/builtin/packages/gobject-introspection/sbang.patch b/var/spack/repos/builtin/packages/gobject-introspection/sbang.patch
new file mode 100644
index 0000000000..7d4b78a930
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gobject-introspection/sbang.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in 2016-09-13 01:23:59.000000000 -0700
++++ b/Makefile.in 2017-02-22 10:26:31.824509512 -0800
+@@ -1475,7 +1475,7 @@
+ gir_DATA = $(STATIC_GIRSOURCES) $(SUBSTITUTED_GIRSOURCES) $(BUILT_GIRSOURCES)
+ typelibsdir = $(libdir)/girepository-1.0
+ typelibs_DATA = $(gir_DATA:.gir=.typelib)
+-TOOL_SUBSTITUTIONS = -e s,@libdir\@,$(libdir), -e s,@datarootdir\@,$(datarootdir), -e s,@PYTHON\@,$(PYTHON),
++TOOL_SUBSTITUTIONS = -e s,@libdir\@,$(libdir), -e s,@datarootdir\@,$(datarootdir), -e s,@PYTHON\@,$(PYTHON), -e "1i\#!/bin/bash $(SPACK_SBANG)"
+ g_ir_compiler_SOURCES = tools/compiler.c
+ g_ir_compiler_CPPFLAGS = -DGIREPO_DEFAULT_SEARCH_PATH="\"$(libdir)\"" \
+ -I$(top_srcdir)/girepository
diff --git a/var/spack/repos/builtin/packages/googletest/package.py b/var/spack/repos/builtin/packages/googletest/package.py
index 6f3cafec06..5eab658bac 100644
--- a/var/spack/repos/builtin/packages/googletest/package.py
+++ b/var/spack/repos/builtin/packages/googletest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,24 +25,41 @@
from spack import *
-class Googletest(Package):
+class Googletest(CMakePackage):
"""Google test framework for C++. Also called gtest."""
homepage = "https://github.com/google/googletest"
url = "https://github.com/google/googletest/tarball/release-1.7.0"
+ version('1.8.0', 'd2edffbe844902d942c31db70c7cfec2')
version('1.7.0', '5eaf03ed925a47b37c8e1d559eb19bc4')
+ version('1.6.0', '90407321648ab25b067fcd798caf8c78')
- depends_on("cmake", type='build')
+ variant('gmock', default=False, description='Build with gmock')
+ conflicts('+gmock', when='@:1.7.0')
- def install(self, spec, prefix):
- which('cmake')('.', *std_cmake_args)
-
- make()
+ def cmake_args(self):
+ spec = self.spec
+ if '@1.8.0:' in spec:
+ # New style (contains both Google Mock and Google Test)
+ options = ['-DBUILD_GTEST=ON']
+ if '+gmock' in spec:
+ options.append('-DBUILD_GMOCK=ON')
+ else:
+ options.append('-DBUILD_GMOCK=OFF')
+ else:
+ # Old style (contains only GTest)
+ options = []
+ return options
- # Google Test doesn't have a make install
- # We have to do our own install here.
- install_tree('include', prefix.include)
+ @when('@:1.7.0')
+ def install(self, spec, prefix):
+ """Make the install targets"""
+ with working_dir(self.build_directory):
+ # Google Test doesn't have a make install
+ # We have to do our own install here.
+ install_tree(join_path(self.stage.source_path, 'include'),
+ prefix.include)
- mkdirp(prefix.lib)
- install('./libgtest.a', '%s' % prefix.lib)
- install('./libgtest_main.a', '%s' % prefix.lib)
+ mkdirp(prefix.lib)
+ install('libgtest.a', prefix.lib)
+ install('libgtest_main.a', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/gource/package.py b/var/spack/repos/builtin/packages/gource/package.py
index dda00420a3..3d9ddd1ff6 100644
--- a/var/spack/repos/builtin/packages/gource/package.py
+++ b/var/spack/repos/builtin/packages/gource/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,11 @@
from spack import *
-class Gource(Package):
+class Gource(AutotoolsPackage):
"""Software version control visualization."""
homepage = "http://gource.io"
- url = "https://github.com/acaudwell/Gource/releases/download/gource-0.44/gource-0.44.tar.gz"
+ url = "https://github.com/acaudwell/Gource/releases/download/gource-0.44/gource-0.44.tar.gz"
version('0.44', '79cda1bfaad16027d59cce55455bfab88b57c69d')
@@ -49,15 +49,13 @@ class Gource(Package):
depends_on('sdl2')
depends_on('sdl2-image')
- def install(self, spec, prefix):
- make_args = ['--prefix=%s' % prefix,
- '--disable-dependency-tracking',
- '--without-x',
- '--with-boost=%s' % spec['boost'].prefix]
+ parallel = False
+ force_autoreconf = True
- autoreconf('-i')
- configure(*make_args)
- make()
-
- make("install",
- parallel=False)
+ def configure_args(self):
+ spec = self.spec
+ return [
+ '--disable-dependency-tracking',
+ '--without-x',
+ '--with-boost=%s' % spec['boost'].prefix
+ ]
diff --git a/var/spack/repos/builtin/packages/gperf/package.py b/var/spack/repos/builtin/packages/gperf/package.py
index 0ae07b33fc..e51f86fb4b 100644
--- a/var/spack/repos/builtin/packages/gperf/package.py
+++ b/var/spack/repos/builtin/packages/gperf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gperf(Package):
+class Gperf(AutotoolsPackage):
"""GNU gperf is a perfect hash function generator. For a given
list of strings, it produces a hash function and hash table, in
form of C or C++ code, for looking up a value depending on the
@@ -38,9 +38,4 @@ class Gperf(Package):
version('3.0.4', 'c1f1db32fb6598d6a93e6e88796a8632')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- # make('check') # fails tests
- make('install')
+ # NOTE: `make check` is known to fail tests
diff --git a/var/spack/repos/builtin/packages/gperftools/package.py b/var/spack/repos/builtin/packages/gperftools/package.py
index c6ca6c8057..c5653f696c 100644
--- a/var/spack/repos/builtin/packages/gperftools/package.py
+++ b/var/spack/repos/builtin/packages/gperftools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gperftools(Package):
+class Gperftools(AutotoolsPackage):
"""Google's fast malloc/free implementation, especially for
multi-threaded applications. Contains tcmalloc, heap-checker,
heap-profiler, and cpu-profiler.
@@ -40,8 +40,3 @@ class Gperftools(Package):
url="https://googledrive.com/host/0B6NtGsLhIcf7MWxMMF9JdTN3UVk/gperftools-2.3.tar.gz")
depends_on("libunwind")
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/grackle/package.py b/var/spack/repos/builtin/packages/grackle/package.py
index 7e3777158f..06689a3c4c 100644
--- a/var/spack/repos/builtin/packages/grackle/package.py
+++ b/var/spack/repos/builtin/packages/grackle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/gradle/package.py b/var/spack/repos/builtin/packages/gradle/package.py
new file mode 100644
index 0000000000..1d4112132a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gradle/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+
+
+class Gradle(Package):
+ """Gradle is an open source build automation system that builds
+ upon the concepts of Apache Ant and Apache Maven and introduces
+ a Groovy-based domain-specific language (DSL) instead of the XML
+ form used by Apache Maven for declaring the project configuration.
+ Gradle uses a directed acyclic graph ("DAG") to determine the
+ order in which tasks can be run."""
+
+ homepage = "https://gradle.org"
+ url = "https://services.gradle.org/distributions/gradle-3.4-all.zip"
+
+ version('3.4', '5ae23dbd730dea22eb79cd97a072f06a')
+ version('3.3', '355f61e9c5d092d49577765ab3712dc0')
+ version('3.2.1', 'd44dba900ff364103e1f45c0f4b27bbe')
+ version('3.2', '296cb0e8a94bf72dd80ff7f0ebbf33ed')
+ version('3.1', '21b34a8c6bae67c729b37b4bd59cf9d0')
+ version('3.0', '0a7533599b86909c85b117e897501165')
+ version('2.14.1', 'f74b094923ae76f15f138d42373bb4bc')
+ version('2.14', 'e069dca1ec042665d61c85caeb4b32ed')
+ version('2.13', '8e7b31a8b8500752c3d80bd683d120c1')
+ version('2.12', '42cce06d8fe3a7125ac9b2a6dcc13927')
+ version('2.11', 'd99911cb2d0e86293e1793efc61cd642')
+ version('2.10', 'c5d8e57186b60c6d6485682f9907b257')
+ version('2.9', '1ee1a98b9a73c24633c14abf7f2a5189')
+ version('2.8', '9f0e8b0c195d7ea6335a724bc90622a9')
+ version('2.7', '77a77e364c1e2005c62909e6f51a434a')
+ version('2.6', '6947e873602b3668b2f3cd8e2dd228f1')
+ version('2.5', '17295dee02217cbe4f07b0d8bb72c467')
+ version('2.4', 'e1528eeca5c66579ebaee4c7c13bec2a')
+ version('2.3', '26c527220d869dbd6bb8cd903dd044e1')
+ version('2.2.1', '1107fbaf94ab7eae26d76d71b5f8db13')
+ version('2.2', '143830aea6bbed4ee77baa3dd191745f')
+ version('2.1', '603c07bc1fa737809ef0d9bc5b11960a')
+ version('2.0', '1d0853b99e6097ea3dea5f3604dc0846')
+ version('1.12', 'f957126d8e84d7ee7c859d02c2ae1fc1')
+ version('1.11', '36d2e8f0d5059c815496775af5f688b4')
+ version('1.10', 'c7ea1213cee7cf2272c5189dbc6f983b')
+ version('1.9', 'cc0a214649b283cc9594b5b82cb84ce5')
+ version('1.8', '1733ee0850618a73b54c9ba407de56b6')
+ version('1.5', '80e60e3b71f1745bbf06f41795ac2908')
+ version('1.4', 'cc934cab80bed0caccaa096b83cd4d67')
+ version('1.3', 'f6bce3798f4ee184926592e9a6893e0e')
+ version('1.2', 'c4741339370bd5e825b2abb9f2cb5b40')
+ version('1.1', 'afb37b4b35a30ebd5d758c333c147ce9')
+ version('1.0', '7697cb1e78c7e7362aa422d1790238bd')
+ version('0.9.2', '8574a445267ce3ad21558e300d854d24')
+ version('0.9.1', '8fa0acfbcdf01a8425c1f797f5079e21')
+ version('0.9', '9da1eb9fb32d9c303de5fd5568694634')
+ version('0.8', '73a0ed51b6ec00a7d3a9d242d51aae60')
+ version('0.7', 'a8417dbbd62f7013002cb55a44f12cc3')
+
+ depends_on('java')
+
+ def install(self, spec, prefix):
+ copy_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/grandr/package.py b/var/spack/repos/builtin/packages/grandr/package.py
index 8097d4fa01..14da4896f4 100644
--- a/var/spack/repos/builtin/packages/grandr/package.py
+++ b/var/spack/repos/builtin/packages/grandr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Grandr(Package):
+class Grandr(AutotoolsPackage):
"""RandR user interface using GTK+ libraries."""
homepage = "https://cgit.freedesktop.org/xorg/app/grandr"
@@ -36,10 +36,3 @@ class Grandr(Package):
depends_on('gtkplus@2.0.0:')
depends_on('gconf')
depends_on('xrandr@1.2:')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/graphlib/package.py b/var/spack/repos/builtin/packages/graphlib/package.py
index 1e0eb2bf3b..0fa82267d8 100644
--- a/var/spack/repos/builtin/packages/graphlib/package.py
+++ b/var/spack/repos/builtin/packages/graphlib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Graphlib(Package):
+class Graphlib(CMakePackage):
"""Library to create, manipulate, and export graphs Graphlib."""
homepage = "https://github.com/LLNL/graphlib"
url = "https://github.com/LLNL/graphlib/archive/v2.0.0.tar.gz"
@@ -33,10 +33,4 @@ class Graphlib(Package):
version('2.0.0', '43c6df84f1d38ba5a5dce0ae19371a70')
version('3.0.0', '625d199f97ab1b84cbc8daabcaee5e2a')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake(".", *std_cmake_args)
-
- make()
- make("install")
+ depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/graphmap/package.py b/var/spack/repos/builtin/packages/graphmap/package.py
new file mode 100644
index 0000000000..0e4a676588
--- /dev/null
+++ b/var/spack/repos/builtin/packages/graphmap/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Graphmap(MakefilePackage):
+ """A highly sensitive and accurate mapper for long, error-prone reads"""
+
+ homepage = "https://github.com/isovic/graphmap"
+ url = "https://github.com/isovic/graphmap/archive/v0.3.0.tar.gz"
+
+ version('0.3.0', git='https://github.com/isovic/graphmap.git', commit='eb8c75d68b03be95464318afa69b645a59f8f6b7')
+
+ def edit(self, spec, prefix):
+ mkdirp(prefix.bin)
+ makefile = FileFilter('Makefile')
+ makefile.filter('/usr/bin/graphmap', prefix.bin.graphmap)
+
+ def build(self, spec, prefix):
+ make('modules')
+ make()
diff --git a/var/spack/repos/builtin/packages/graphviz/package.py b/var/spack/repos/builtin/packages/graphviz/package.py
index 1bf6c70926..0ec35f09e8 100644
--- a/var/spack/repos/builtin/packages/graphviz/package.py
+++ b/var/spack/repos/builtin/packages/graphviz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,33 +29,132 @@ import shutil
class Graphviz(AutotoolsPackage):
"""Graph Visualization Software"""
- homepage = "http://www.graphviz.org"
- url = "http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz"
+ homepage = 'http://www.graphviz.org'
+ url = 'http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.38.0.tar.gz'
version('2.38.0', '5b6a829b2ac94efcd5fa3c223ed6d3ae')
- # By default disable optional Perl language support to prevent build issues
- # related to missing Perl packages. If spack begins support for Perl in the
- # future, this package can be updated to depend_on('perl') and the
- # ncecessary devel packages.
- variant(
- 'perl', default=False,
- description='Enable if you need the optional Perl language bindings.')
+ # We try to leave language bindings enabled if they don't cause
+ # build issues or add dependencies.
+ variant('sharp', default=False,
+ description='Enable for optional sharp language bindings'
+ ' (not yet functional)')
+ variant('go', default=False,
+ description='Enable for optional go language bindings'
+ ' (not yet functional)')
+ variant('guile', default=False,
+ description='Enable for optional guile language bindings'
+ ' (not yet functional)')
+ variant('io', default=False,
+ description='Enable for optional io language bindings'
+ ' (not yet functional)')
+ variant('java', default=False, # Spack has no Java support
+ description='Enable for optional java language bindings')
+ variant('lua', default=False,
+ description='Enable for optional lua language bindings'
+ ' (not yet functional)')
+ variant('ocaml', default=False,
+ description='Enable for optional ocaml language bindings'
+ ' (not yet functional)')
+ variant('perl', default=False, # Spack has no Perl support
+ description='Enable for optional perl language bindings')
+ variant('php', default=False,
+ description='Enable for optional php language bindings'
+ ' (not yet functional)')
+ variant('python', default=False, # Build issues with Python 2/3
+ description='Enable for optional python language bindings'
+ ' (not yet functional)')
+ variant('r', default=False,
+ description='Enable for optional r language bindings'
+ ' (not yet functional)')
+ variant('ruby', default=False,
+ description='Enable for optional ruby language bindings'
+ ' (not yet functional)')
+ variant('tcl', default=False,
+ description='Enable for optional tcl language bindings'
+ ' (not yet functional)')
+
+ variant('pangocairo', default=False,
+ description='Build with pango+cairo support (more output formats)')
+ variant('libgd', default=False,
+ description='Build with libgd support (more output formats)')
+
+ variant('gts', default=False,
+ description='Build with GNU Triangulated Surface Library')
parallel = False
- depends_on("swig")
- depends_on("python")
- depends_on("ghostscript")
- depends_on("freetype")
- depends_on("expat")
- depends_on("libtool")
- depends_on("pkg-config", type='build')
+ # These language bindings have been tested, we know they work.
+ tested_bindings = ('+java', )
+
+ # These language bindings have not yet been tested. They
+ # likely need additional dependencies to get working.
+ untested_bindings = (
+ '+perl',
+ '+sharp', '+go', '+guile', '+io',
+ '+lua', '+ocaml', '+php',
+ '+python', '+r', '+ruby', '+tcl')
+
+ for b in tested_bindings + untested_bindings:
+ depends_on('swig', when=b)
+
+ depends_on('cairo', when='+pangocairo')
+ depends_on('pango', when='+pangocairo')
+ depends_on('libgd', when='+libgd')
+ depends_on('gts', when='+gts')
+ depends_on('ghostscript')
+ depends_on('freetype')
+ depends_on('expat')
+ depends_on('libtool')
+ depends_on('pkg-config', type='build')
+
+ depends_on('java', when='+java')
+ depends_on('python@2:2.8', when='+python')
+
+ def patch(self):
+ # Fix a few variable names, gs after 9.18 renamed them
+ # See http://lists.linuxfromscratch.org/pipermail/blfs-book/2015-October/056960.html
+ if self.spec.satisfies('^ghostscript@9.18:'):
+ kwargs = {'ignore_absent': False, 'backup': True, 'string': True}
+ filter_file(' e_', ' gs_error_', 'plugin/gs/gvloadimage_gs.c',
+ **kwargs)
def configure_args(self):
+ spec = self.spec
options = []
- if '+perl' not in self.spec:
- options.append('--disable-perl')
+
+ need_swig = False
+
+ for var in self.untested_bindings:
+ if var in spec:
+ raise InstallError(
+ "The variant {0} for language bindings has not been "
+ "tested. It might or might not work. To try it "
+ "out, run `spack edit graphviz`, and then move '{0}' "
+ "from the `untested_bindings` list to the "
+ "`tested_bindings` list. Be prepared to add "
+ "required dependencies. "
+ "Please then submit a pull request to "
+ "http://github.com/spack/spack".format(var))
+ options.append('--disable-%s' % var[1:])
+
+ for var in self.tested_bindings:
+ if var in spec:
+ need_swig = True
+ options.append('--enable-{0}'.format(var[1:]))
+ else:
+ options.append('--disable-{0}'.format(var[1:]))
+
+ if need_swig:
+ options.append('--enable-swig=yes')
+ else:
+ options.append('--enable-swig=no')
+
+ for var in ('+pangocairo', '+libgd', '+gts'):
+ if var in spec:
+ options.append('--with-{0}'.format(var[1:]))
+ else:
+ options.append('--without-{0}'.format(var[1:]))
# On OSX fix the compiler error:
# In file included from tkStubLib.c:15:
diff --git a/var/spack/repos/builtin/packages/grib-api/package.py b/var/spack/repos/builtin/packages/grib-api/package.py
index 8b81e14a27..5da851c1ba 100644
--- a/var/spack/repos/builtin/packages/grib-api/package.py
+++ b/var/spack/repos/builtin/packages/grib-api/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class GribApi(Package):
+class GribApi(CMakePackage):
"""The ECMWF GRIB API is an application program interface accessible from
C, FORTRAN and Python programs developed for encoding and decoding WMO
FM-92 GRIB edition 1 and edition 2 messages."""
@@ -33,48 +33,48 @@ class GribApi(Package):
homepage = "https://software.ecmwf.int/wiki/display/GRIB/Home"
url = "https://software.ecmwf.int/wiki/download/attachments/3473437/grib_api-1.17.0-Source.tar.gz"
+ version('1.21.0', 'eb64c5eb72e6e90841237cba9d644016')
version('1.17.0', 'bca7114d2c3100501a08190a146818d2')
version('1.16.0', '8c7fdee03344e4379d400ae20976a460')
variant('netcdf', default=False, description='Enable netcdf encoding/decoding using netcdf library')
variant('jpeg', default=True, description='Enable jpeg 2000 for grib 2 decoding/encoding')
variant('png', default=False, description='Enable png for decoding/encoding')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'Production'))
- depends_on('cmake', type='build')
depends_on('libpng', when='+png')
depends_on('netcdf', when='+netcdf')
depends_on('jasper', when='+jpeg')
+ depends_on('cmake@2.8.11:', type='build')
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
- options.append('-DBUILD_SHARED_LIBS=BOTH')
+ def cmake_args(self):
+ spec = self.spec
+ args = ['-DBUILD_SHARED_LIBS=BOTH']
# We will add python support later.
- options.append('-DENABLE_PYTHON=OFF')
+ args.append('-DENABLE_PYTHON=OFF')
# Disable FORTRAN interface if we don't have it.
if (self.compiler.f77 is None) or (self.compiler.fc is None):
- options.append('-DENABLE_FORTRAN=OFF')
+ args.append('-DENABLE_FORTRAN=OFF')
if '+netcdf' in spec:
- options.append('-DENABLE_NETCDF=ON')
- options.append('-DNETCDF_PATH=%s' % spec['netcdf'].prefix)
+ args.append('-DENABLE_NETCDF=ON')
+ args.append('-DNETCDF_PATH=%s' % spec['netcdf'].prefix)
else:
- options.append('-DENABLE_NETCDF=OFF')
+ args.append('-DENABLE_NETCDF=OFF')
if '+jpeg' in spec:
- options.append('-DENABLE_JPG=ON')
- options.append('-DJASPER_PATH=%s' % spec['jasper'].prefix)
+ args.append('-DENABLE_JPG=ON')
+ args.append('-DJASPER_PATH=%s' % spec['jasper'].prefix)
else:
- options.append('-DENABLE_JPG=OFF')
+ args.append('-DENABLE_JPG=OFF')
if '+png' in spec:
- options.append('-DENABLE_PNG=ON')
+ args.append('-DENABLE_PNG=ON')
else:
- options.append('-DENABLE_PNG=OFF')
+ args.append('-DENABLE_PNG=OFF')
- with working_dir('spack-build', create=True):
- cmake('..', *options)
- make()
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/groff/gropdf.patch b/var/spack/repos/builtin/packages/groff/gropdf.patch
new file mode 100644
index 0000000000..9044c64aa3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/groff/gropdf.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile.in b/Makefile.in
+index bc156ce..70c6f85 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -896,6 +896,8 @@ $(GNULIBDIRS): FORCE
+ $(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \
+ esac
+
++$(SHPROGDIRS): $(PROGDEPDIRS)
++
+ $(OTHERDIRS): $(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS) $(SHPROGDIRS)
+
+ $(INCDIRS) $(PROGDEPDIRS) $(SHPROGDIRS) $(OTHERDIRS): FORCE
diff --git a/var/spack/repos/builtin/packages/groff/package.py b/var/spack/repos/builtin/packages/groff/package.py
new file mode 100644
index 0000000000..bc10c102be
--- /dev/null
+++ b/var/spack/repos/builtin/packages/groff/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Groff(AutotoolsPackage):
+ """Groff (GNU troff) is a typesetting system that reads
+ plain text mixed with formatting commands and produces
+ formatted output. Output may be PostScript or PDF, html, or
+ ASCII/UTF8 for display at the terminal."""
+
+ homepage = "https://www.gnu.org/software/groff/"
+ url = "http://ftp.gnu.org/gnu/groff/groff-1.22.3.tar.gz"
+
+ # TODO: add html variant, spack doesn't have netpbm and its too
+ # complicated for me to find out at this point in time.
+ # See brew scripts for groff for guidance:
+ # https://github.com/Homebrew/homebrew-core/blob/master/Formula/groff.rb
+ # Seems troublesome...netpbm requires groff?
+ variant('pdf', default=True, description='Build the `gropdf` executable.')
+
+ depends_on('gawk', type='build')
+ depends_on('gmake', type='build')
+ depends_on('sed', type='build')
+ depends_on('ghostscript', when='+pdf')
+
+ version('1.22.3', 'cc825fa64bc7306a885f2fb2268d3ec5')
+
+ # https://savannah.gnu.org/bugs/index.php?43581
+ # TODO: figure out why this patch does not actually work for parallel
+ # builds reliably.
+ # patch('gropdf.patch')
+ parallel = False
+
+ def configure_args(self):
+ args = [
+ "--without-x"
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/gromacs/package.py b/var/spack/repos/builtin/packages/gromacs/package.py
index d079188db6..22f0527439 100644
--- a/var/spack/repos/builtin/packages/gromacs/package.py
+++ b/var/spack/repos/builtin/packages/gromacs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -39,26 +39,33 @@ class Gromacs(CMakePackage):
"""
homepage = 'http://www.gromacs.org'
- url = 'ftp://ftp.gromacs.org/pub/gromacs/gromacs-5.1.2.tar.gz'
+ url = 'http://ftp.gromacs.org/gromacs/gromacs-5.1.2.tar.gz'
+ version('2016.4', '19c8b5c85f3ec62df79d2249a3c272f8')
+ version('2016.3', 'e9e3a41bd123b52fbcc6b32d09f8202b')
+ version('5.1.4', 'ba2e34d59b3982603b4935d650c08040')
version('5.1.2', '614d0be372f1a6f1f36382b7a6fcab98')
+ version('develop', git='https://github.com/gromacs/gromacs', branch='master')
variant('mpi', default=True, description='Activate MPI support')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False, description='Enables debug mode')
variant(
'double', default=False,
description='Produces a double precision version of the executables')
variant('plumed', default=False, description='Enable PLUMED support')
+ variant('cuda', default=False, description='Enable CUDA support')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel',
+ 'Reference', 'RelWithAssert', 'Profile'))
depends_on('mpi', when='+mpi')
depends_on('plumed+mpi', when='+plumed+mpi')
depends_on('plumed~mpi', when='+plumed~mpi')
depends_on('fftw')
depends_on('cmake@2.8.8:', type='build')
-
- # TODO : add GPU support
+ depends_on('cuda', when='+cuda')
def patch(self):
if '+plumed' in self.spec:
@@ -77,9 +84,9 @@ class Gromacs(CMakePackage):
if '~shared' in self.spec:
options.append('-DBUILD_SHARED_LIBS:BOOL=OFF')
- if '+debug' in self.spec:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
- else:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Release')
+ if '+cuda' in self.spec:
+ options.append('-DGMX_GPU:BOOL=ON')
+ options.append('-DCUDA_TOOLKIT_ROOT_DIR:STRING=' +
+ self.spec['cuda'].prefix)
return options
diff --git a/var/spack/repos/builtin/packages/gsl/package.py b/var/spack/repos/builtin/packages/gsl/package.py
index f13a9a66e8..27be6b0d35 100644
--- a/var/spack/repos/builtin/packages/gsl/package.py
+++ b/var/spack/repos/builtin/packages/gsl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,6 +36,7 @@ class Gsl(AutotoolsPackage):
homepage = "http://www.gnu.org/software/gsl"
url = "http://mirror.switch.ch/ftp/mirror/gnu/gsl/gsl-2.3.tar.gz"
+ version('2.4', 'dba736f15404807834dc1c7b93e83b92')
version('2.3', '905fcbbb97bc552d1037e34d200931a0')
version('2.2.1', '3d90650b7cfe0a6f4b29c2d7b0f86458')
version('2.1', 'd8f70abafd3e9f0bae03c52d1f4e8de5')
diff --git a/var/spack/repos/builtin/packages/gtkorvo-atl/package.py b/var/spack/repos/builtin/packages/gtkorvo-atl/package.py
new file mode 100644
index 0000000000..72bcf12c1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gtkorvo-atl/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class GtkorvoAtl(CMakePackage):
+ """Libatl provides a library for the creation and manipulation of
+ lists of name/value pairs using an efficient binary representation.
+ """
+
+ homepage = "https://github.com/GTkorvo/atl"
+ url = "https://github.com/GTkorvo/atl/archive/v2.1.tar.gz"
+
+ version('develop', git='https://github.com/GTkorvo/atl.git',
+ branch='master')
+ version('2.1', 'b2324ff041bccba127330a0e1b241978')
+
+ depends_on('gtkorvo-cercs-env')
+
+ def cmake_args(self):
+ args = ["-DENABLE_TESTING=0", "-DENABLE_BUILD_STATIC=STATIC"]
+ return args
diff --git a/var/spack/repos/builtin/packages/gtkorvo-cercs-env/package.py b/var/spack/repos/builtin/packages/gtkorvo-cercs-env/package.py
new file mode 100644
index 0000000000..2fcfc21467
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gtkorvo-cercs-env/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class GtkorvoCercsEnv(CMakePackage):
+ """A utility library used by some GTkorvo packages.
+ """
+
+ homepage = "https://github.com/GTkorvo/cercs_env"
+ url = "https://github.com/GTkorvo/cercs_env/archive/v1.0.tar.gz"
+
+ version('develop', git='https://github.com/GTkorvo/cercs_env.git',
+ branch='master')
+ version('1.0', '08f0532d0c2f7bc9b53dfa7a1c40ea4d')
+
+ def cmake_args(self):
+ args = ["-DENABLE_TESTING=0", "-DENABLE_SHARED_STATIC=STATIC"]
+ return args
diff --git a/var/spack/repos/builtin/packages/gtkorvo-dill/package.py b/var/spack/repos/builtin/packages/gtkorvo-dill/package.py
new file mode 100644
index 0000000000..af2c433ed6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gtkorvo-dill/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class GtkorvoDill(CMakePackage):
+ """DILL provides instruction-level code generation,
+ register allocation and simple optimizations for generating
+ executable code directly into memory regions for immediate use.
+ """
+
+ homepage = "https://github.com/GTkorvo/dill"
+ url = "https://github.com/GTkorvo/dill/archive/v2.1.tar.gz"
+
+ version('develop', git='https://github.com/GTkorvo/dill.git',
+ branch='master')
+ version('2.1', '14c835e79b66c9acd2beee01d56e6200')
+
+ def cmake_args(self):
+ args = ["-DENABLE_TESTING=0", "-DBUILD_SHARED_STATIC=STATIC"]
+ return args
diff --git a/var/spack/repos/builtin/packages/gtkorvo-enet/package.py b/var/spack/repos/builtin/packages/gtkorvo-enet/package.py
new file mode 100644
index 0000000000..2130085b93
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gtkorvo-enet/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class GtkorvoEnet(AutotoolsPackage):
+ """ENet reliable UDP networking library.
+ This is a downstream branch of lsalzman's ENet.
+ This version has expanded the client ID to handle more clients.
+ The original is at http://github.com/lsalzman/enet.
+ """
+
+ homepage = "http://www.github.com/GTkorvo/enet"
+ url = "https://github.com/GTkorvo/enet/archive/v1.3.13.tar.gz"
+
+ version('1.3.13', '3490f924a4d421e4832e45850e6ec142')
diff --git a/var/spack/repos/builtin/packages/gtkplus/no-demos.patch b/var/spack/repos/builtin/packages/gtkplus/no-demos.patch
new file mode 100644
index 0000000000..5acc988c38
--- /dev/null
+++ b/var/spack/repos/builtin/packages/gtkplus/no-demos.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in 2017-02-21 12:18:44.774922978 -0800
++++ b/Makefile.in 2017-02-21 12:18:54.465965697 -0800
+@@ -564,7 +564,7 @@
+ || { echo "Gtk+Tests:ERROR: Failed to start Xvfb environment for X11 target tests."; exit 1; } \
+ && DISPLAY=:$$XID && export DISPLAY
+
+-SRC_SUBDIRS = gdk gtk modules demos tests perf
++SRC_SUBDIRS = gdk gtk modules tests perf
+ SUBDIRS = po po-properties $(SRC_SUBDIRS) docs m4macros build
+
+ # require automake 1.4
diff --git a/var/spack/repos/builtin/packages/gtkplus/package.py b/var/spack/repos/builtin/packages/gtkplus/package.py
index b53b688372..033c325eb6 100644
--- a/var/spack/repos/builtin/packages/gtkplus/package.py
+++ b/var/spack/repos/builtin/packages/gtkplus/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gtkplus(Package):
+class Gtkplus(AutotoolsPackage):
"""The GTK+ 2 package contains libraries used for creating graphical user
interfaces for applications."""
homepage = "http://www.gtk.org"
@@ -36,19 +36,26 @@ class Gtkplus(Package):
variant('X', default=False, description="Enable an X toolkit")
+ depends_on('pkg-config', type='build')
+
depends_on("atk")
depends_on("gdk-pixbuf")
depends_on("glib")
depends_on("pango")
depends_on("pango~X", when='~X')
depends_on("pango+X", when='+X')
+ depends_on('gobject-introspection', when='+X')
+ depends_on('shared-mime-info')
+
+ patch('no-demos.patch')
def patch(self):
# remove disable deprecated flag.
filter_file(r'CFLAGS="-DGDK_PIXBUF_DISABLE_DEPRECATED $CFLAGS"',
'', 'configure', string=True)
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
+ run_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/gts/package.py b/var/spack/repos/builtin/packages/gts/package.py
index 2b3d4dd4f8..b340df34f2 100644
--- a/var/spack/repos/builtin/packages/gts/package.py
+++ b/var/spack/repos/builtin/packages/gts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Gts(Package):
+class Gts(AutotoolsPackage):
"""GTS stands for the GNU Triangulated Surface Library.
It is an Open Source Free Software Library intended to provide a set of
@@ -46,8 +46,3 @@ class Gts(Package):
version('121130', '023ebb6b13b8707534182a3ef0d12908')
depends_on('glib')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/guidance/package.py b/var/spack/repos/builtin/packages/guidance/package.py
new file mode 100644
index 0000000000..6cb4e0cfc6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/guidance/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+import glob
+
+
+class Guidance(MakefilePackage):
+ """Guidance: Accurate detection of unreliable alignment regions accounting
+ for the uncertainty of multiple parameters."""
+
+ homepage = "http://guidance.tau.ac.il/ver2/"
+ url = "http://guidance.tau.ac.il/ver2/guidance.v2.02.tar.gz"
+
+ version('2.02', 'aa6ae2168e8e0237ee56bc2ac81202cf')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('perl-bio-perl', type=('build', 'run'))
+ depends_on('ruby')
+ depends_on('prank')
+ depends_on('clustalw')
+ depends_on('mafft')
+ depends_on('muscle')
+
+ conflicts('%gcc@6.2.0:')
+
+ def edit(self, spec, prefix):
+ for dir in 'Guidance', 'Selecton', 'bioSequence_scripts_and_constants':
+ with working_dir(join_path('www', dir)):
+ files = glob.iglob('*.pl')
+ for file in files:
+ perl = FileFilter(file)
+ perl.filter('#!/usr/bin/perl -w', '#!/usr/bin/env perl')
+
+ def install(self, spac, prefix):
+ mkdir(prefix.bin)
+ install_tree('libs', prefix.bin.libs)
+ install_tree('programs', prefix.bin.programs)
+ install_tree('www', prefix.bin.www)
+ with working_dir(join_path('www', 'Guidance')): # copy without suffix
+ install('guidance.pl', join_path(prefix.bin.www.Guidance,
+ 'guidance'))
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', prefix.bin.www.Guidance)
diff --git a/var/spack/repos/builtin/packages/guile/package.py b/var/spack/repos/builtin/packages/guile/package.py
index 22aff1bddf..81b61510be 100644
--- a/var/spack/repos/builtin/packages/guile/package.py
+++ b/var/spack/repos/builtin/packages/guile/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,15 @@
from spack import *
-class Guile(Package):
+class Guile(AutotoolsPackage):
"""Guile is the GNU Ubiquitous Intelligent Language for Extensions,
the official extension language for the GNU operating system."""
homepage = "https://www.gnu.org/software/guile/"
- url = "ftp://ftp.gnu.org/gnu/guile/guile-2.0.11.tar.gz"
+ url = "https://ftp.gnu.org/gnu/guile/guile-2.2.0.tar.gz"
+ version('2.2.0', '0d5de8075b965f9ee5ea04399b60a3f9')
+ version('2.0.14', '333b6eec83e779935a45c818f712484e')
version('2.0.11', 'e532c68c6f17822561e3001136635ddd')
variant('readline', default=True, description='Use the readline library')
@@ -45,9 +47,12 @@ class Guile(Package):
depends_on('readline', when='+readline')
depends_on('pkg-config', type='build')
- def install(self, spec, prefix):
+ build_directory = 'spack-build'
+
+ def configure_args(self):
+ spec = self.spec
+
config_args = [
- '--prefix={0}'.format(prefix),
'--with-libunistring-prefix={0}'.format(
spec['libunistring'].prefix),
'--with-libltdl-prefix={0}'.format(spec['libtool'].prefix),
@@ -61,8 +66,4 @@ class Guile(Package):
else:
config_args.append('--without-libreadline-prefix')
- configure(*config_args)
-
- make()
- make('check')
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/h5hut/package.py b/var/spack/repos/builtin/packages/h5hut/package.py
index 22146372dc..ed9ede92d6 100644
--- a/var/spack/repos/builtin/packages/h5hut/package.py
+++ b/var/spack/repos/builtin/packages/h5hut/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -47,7 +47,7 @@ class H5hut(AutotoolsPackage):
# install: .libs/libH5hut.a: No such file or directory
parallel = False
- @AutotoolsPackage.precondition('configure')
+ @run_before('configure')
def validate(self):
"""Checks if Fortran compiler is available."""
diff --git a/var/spack/repos/builtin/packages/h5part/mpiio.patch b/var/spack/repos/builtin/packages/h5part/mpiio.patch
new file mode 100644
index 0000000000..152cfec349
--- /dev/null
+++ b/var/spack/repos/builtin/packages/h5part/mpiio.patch
@@ -0,0 +1,26 @@
+https://github.com/quinoacomputing/H5Part/commit/b8b106c368c3400b4df3d38e97ae2943d37d3c7d.patch
+
+From b8b106c368c3400b4df3d38e97ae2943d37d3c7d Mon Sep 17 00:00:00 2001
+From: Jozsef Bakosi <jbakosi@lanl.gov>
+Date: Thu, 28 Jul 2016 08:37:24 -0600
+Subject: [PATCH] Replace H5Pset_fapl_mpiposix with H5Pset_fapl_mpio
+
+Based on the advice at
+http://www.unidata.ucar.edu/mailing_lists/archives/netcdfgroup/2014/msg00188.html.
+---
+ src/H5Part.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/H5Part.c b/src/H5Part.c
+index 433a574..8a1b893 100644
+--- a/src/H5Part.c
++++ b/src/H5Part.c
+@@ -246,7 +246,7 @@ _H5Part_open_file (
+ /* select the HDF5 VFD */
+ if (flags & H5PART_VFD_MPIPOSIX) {
+ _H5Part_print_info ( "Selecting MPI-POSIX VFD" );
+- if (H5Pset_fapl_mpiposix ( f->access_prop, comm, 0 ) < 0) {
++ if (H5Pset_fapl_mpio ( f->access_prop, comm, 0 ) < 0) {
+ HANDLE_H5P_SET_FAPL_ERR;
+ goto error_cleanup;
+ }
diff --git a/var/spack/repos/builtin/packages/h5part/package.py b/var/spack/repos/builtin/packages/h5part/package.py
new file mode 100644
index 0000000000..f105a26831
--- /dev/null
+++ b/var/spack/repos/builtin/packages/h5part/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 H5part(AutotoolsPackage):
+ """Portable High Performance Parallel Data Interface to HDF5"""
+
+ homepage = "http://vis.lbl.gov/Research/H5Part/"
+ url = "https://codeforge.lbl.gov/frs/download.php/latestfile/18/H5Part-1.6.6.tar.gz"
+
+ version('1.6.6', '327c63d198e38a12565b74cffdf1f9d7')
+ patch('mpiio.patch')
+
+ depends_on('mpi')
+ depends_on('hdf5+mpi')
+
+ def configure_args(self):
+ args = ['--enable-parallel',
+ '--with-hdf5=%s' % self.spec['hdf5'].prefix,
+ 'CC=mpicc',
+ 'CXX=mpicxx']
+ return args
diff --git a/var/spack/repos/builtin/packages/h5utils/package.py b/var/spack/repos/builtin/packages/h5utils/package.py
new file mode 100644
index 0000000000..202eb0e232
--- /dev/null
+++ b/var/spack/repos/builtin/packages/h5utils/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/spack/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 H5utils(AutotoolsPackage):
+ """h5utils is a set of utilities for visualization and conversion of
+ scientific data in the free, portable HDF5 format."""
+
+ homepage = "http://ab-initio.mit.edu/wiki/index.php/H5utils"
+ url = "http://ab-initio.mit.edu/h5utils/h5utils-1.12.1.tar.gz"
+ list_url = "http://ab-initio.mit.edu/h5utils/old/"
+
+ version('1.12.1', '46a6869fee6e6bf87fbba9ab8a99930e')
+
+ variant('png', default=True, description='Enable PNG support')
+ variant('vis5d', default=False, description='Enable Vis5d support')
+ variant('octave', default=False, description='Enable GNU Octave support')
+ variant('hdf4', default=False, description='Enable HDF4 support')
+ variant('math', default=False, description='Build h5math')
+
+ # Required dependencies
+ depends_on('hdf5')
+
+ # Optional dependencies
+ depends_on('libpng', when='+png')
+ # depends_on('vis5d', when='+vis5d') # TODO: Add a vis5d package
+ depends_on('octave', when='+octave')
+ depends_on('hdf', when='+hdf4')
+ depends_on('libmatheval', when='+math')
+
+ def configure_args(self):
+ spec = self.spec
+ args = []
+
+ if '+vis5d' in spec:
+ args.append('--with-v5d={0}'.format(spec['vis5d'].prefix))
+ else:
+ args.append('--without-v5d')
+
+ if '+octave' in spec:
+ args.append('--with-octave')
+ else:
+ args.append('--without-octave')
+
+ if '+hdf' in spec:
+ args.append('--with-hdf4')
+ else:
+ args.append('--without-hdf4')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/h5z-zfp/package.py b/var/spack/repos/builtin/packages/h5z-zfp/package.py
new file mode 100644
index 0000000000..dff0126f01
--- /dev/null
+++ b/var/spack/repos/builtin/packages/h5z-zfp/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 H5zZfp(MakefilePackage):
+ """A highly flexible floating point and integer compression plugin for the
+ HDF5 library using ZFP compression."""
+
+ homepage = "http://h5z-zfp.readthedocs.io/en/latest"
+ url = "https://github.com/LLNL/H5Z-ZFP"
+
+ version('develop', git='https://github.com/LLNL/H5Z-ZFP.git', tag='master')
+ version('0.7.0', git='https://github.com/LLNL/H5Z-ZFP.git', commit='58ac811')
+
+ variant('fortran', default=True, description='Enable Fortran support')
+
+ depends_on('hdf5')
+ depends_on('zfp bsws=8')
+
+ @property
+ def make_defs(self):
+ make_defs = [
+ 'PREFIX=%s' % prefix,
+ 'CC=%s' % spack_cc,
+ 'HDF5_HOME=%s' % self.spec['hdf5'].prefix,
+ 'ZFP_HOME=%s' % self.spec['zfp'].prefix]
+
+ if '+fortran' in self.spec and spack_fc:
+ make_defs += ['FC=%s' % spack_fc]
+
+ return make_defs
+
+ @property
+ def build_targets(self):
+ targets = ['all']
+ return self.make_defs + targets
+
+ @property
+ def install_targets(self):
+ make_args = ['install']
+ return make_args + self.make_defs
diff --git a/var/spack/repos/builtin/packages/hacckernels/package.py b/var/spack/repos/builtin/packages/hacckernels/package.py
new file mode 100644
index 0000000000..db48910165
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hacckernels/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Hacckernels(CMakePackage):
+ """HACCKernels: A Benchmark for HACC's Particle Force Kernels.
+ The Hardware/Hybrid Accelerated Cosmology Code (HACC), a
+ cosmology N-body-code framework, is designed to run efficiently
+ on diverse computing architectures and to scale to millions of
+ cores and beyond."""
+
+ homepage = "https://xgitlab.cels.anl.gov/hacc/HACCKernels"
+ url = "https://xgitlab.cels.anl.gov/hacc/HACCKernels.git"
+
+ tags = ['proxy-app']
+
+ version('develop', git='https://xgitlab.cels.anl.gov/hacc/HACCKernels.git',
+ branch='master')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('README', prefix)
+ install('spack-build/HACCKernels', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/hadoop/package.py b/var/spack/repos/builtin/packages/hadoop/package.py
index a87b19a8cc..66deb7c5d2 100644
--- a/var/spack/repos/builtin/packages/hadoop/package.py
+++ b/var/spack/repos/builtin/packages/hadoop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,7 +36,7 @@ class Hadoop(Package):
version('2.6.4', '37019f13d7dcd819727be158440b9442')
- depends_on('jdk', type='run')
+ depends_on('java', type='run')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/hapcut2/package.py b/var/spack/repos/builtin/packages/hapcut2/package.py
new file mode 100644
index 0000000000..612a1c25ba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hapcut2/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Hapcut2(MakefilePackage):
+ """HapCUT2 is a maximum-likelihood-based tool for assembling haplotypes
+ from DNA sequence reads, designed to 'just work' with excellent speed
+ and accuracy."""
+
+ homepage = "https://github.com/vibansal/HapCUT2"
+ url = "https://github.com/vibansal/HapCUT2"
+
+ version('2017-07-10', git='https://github.com/vibansal/HapCUT2.git',
+ commit='2966b94c2c2f97813b757d4999b7a6471df1160e', submodules=True)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('build'):
+ install('extractFOSMID', prefix.bin)
+ install('extractHAIRS', prefix.bin)
+ install('HAPCUT2', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/haploview/haploview.sh b/var/spack/repos/builtin/packages/haploview/haploview.sh
new file mode 100644
index 0000000000..0f6c60139c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/haploview/haploview.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the haploview.jar file
+java $JAVA_ARGS $JAVA_OPTS -jar haploview.jar "$@"
diff --git a/var/spack/repos/builtin/packages/haploview/package.py b/var/spack/repos/builtin/packages/haploview/package.py
new file mode 100644
index 0000000000..9d1b4b3e0f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/haploview/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+
+
+class Haploview(Package):
+ """Haploview is designed to simplify and expedite the process of haplotype
+ analysis."""
+
+ homepage = "http://www.broadinstitute.org/haploview/haploview"
+ url = "https://downloads.sourceforge.net/project/haploview/release/Haploview4.1.jar"
+
+ version('4.1', 'f7aa4accda5fad1be74c9c1969c6ee7d', expand=False)
+
+ depends_on('java', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ jar_file = 'Haploview{v}.jar'.format(v=self.version)
+ install(jar_file, prefix.bin)
+
+ script_sh = join_path(os.path.dirname(__file__), "haploview.sh")
+ script = prefix.bin.haploview
+ install(script_sh, script)
+ set_executable(script)
+
+ java = self.spec['java'].prefix.bin.java
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('haploview.jar', join_path(prefix.bin, jar_file),
+ script, **kwargs)
diff --git a/var/spack/repos/builtin/packages/harfbuzz/package.py b/var/spack/repos/builtin/packages/harfbuzz/package.py
index 7c98c2a96a..492a4694a8 100644
--- a/var/spack/repos/builtin/packages/harfbuzz/package.py
+++ b/var/spack/repos/builtin/packages/harfbuzz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,12 @@
from spack import *
-class Harfbuzz(Package):
+class Harfbuzz(AutotoolsPackage):
"""The Harfbuzz package contains an OpenType text shaping engine."""
homepage = "http://www.freedesktop.org/wiki/Software/HarfBuzz/"
url = "http://www.freedesktop.org/software/harfbuzz/release/harfbuzz-0.9.37.tar.bz2"
+ version('1.4.6', '21a78b81cd20cbffdb04b59ac7edfb410e42141869f637ae1d6778e74928d293')
version('0.9.37', 'bfe733250e34629a188d82e3b971bc1e')
depends_on("pkg-config", type="build")
@@ -41,8 +42,3 @@ class Harfbuzz(Package):
def patch(self):
change_sed_delimiter('@', ';', 'src/Makefile.in')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/harminv/package.py b/var/spack/repos/builtin/packages/harminv/package.py
index 184535ebb0..d92405e8c7 100644
--- a/var/spack/repos/builtin/packages/harminv/package.py
+++ b/var/spack/repos/builtin/packages/harminv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Harminv(Package):
+class Harminv(AutotoolsPackage):
"""Harminv is a free program (and accompanying library) to solve the
problem of harmonic inversion - given a discrete-time, finite-length
signal that consists of a sum of finitely-many sinusoids (possibly
@@ -34,21 +34,18 @@ class Harminv(Package):
homepage = "http://ab-initio.mit.edu/wiki/index.php/Harminv"
url = "http://ab-initio.mit.edu/harminv/harminv-1.4.tar.gz"
+ list_url = "http://ab-initio.mit.edu/harminv/old"
version('1.4', 'b95e24a9bc7e07d3d2202d1605e9e86f')
depends_on('blas')
depends_on('lapack')
- def install(self, spec, prefix):
- config_args = [
- '--prefix={0}'.format(prefix),
+ def configure_args(self):
+ spec = self.spec
+
+ return [
+ '--enable-shared',
'--with-blas={0}'.format(spec['blas'].prefix.lib),
'--with-lapack={0}'.format(spec['lapack'].prefix.lib),
- '--enable-shared'
]
-
- configure(*config_args)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/hdf/package.py b/var/spack/repos/builtin/packages/hdf/package.py
index 2554bd0f96..0aefe3aa8c 100644
--- a/var/spack/repos/builtin/packages/hdf/package.py
+++ b/var/spack/repos/builtin/packages/hdf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,16 @@
from spack import *
-class Hdf(Package):
+class Hdf(AutotoolsPackage):
"""HDF4 (also known as HDF) is a library and multi-object
file format for storing and managing data between machines."""
- homepage = "https://www.hdfgroup.org/products/hdf4/"
- url = "https://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.11/src/hdf-4.2.11.tar.gz"
- list_url = "https://www.hdfgroup.org/ftp/HDF/releases/"
- list_depth = 3
+ homepage = "https://support.hdfgroup.org/products/hdf4/"
+ url = "https://support.hdfgroup.org/ftp/HDF/releases/HDF4.2.13/src/hdf-4.2.13.tar.gz"
+ list_url = "https://support.hdfgroup.org/ftp/HDF/releases"
+ list_depth = 2
+ version('4.2.13', 'a6aa950b3fce5162b96496d8ea0b82bf')
version('4.2.12', '79fd1454c899c05e34a3da0456ab0c1c')
version('4.2.11', '063f9928f3a19cc21367b71c3b8bbf19')
@@ -46,10 +47,11 @@ class Hdf(Package):
depends_on('bison', type='build')
depends_on('flex', type='build')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
+
config_args = [
- 'CFLAGS=-fPIC',
- '--prefix={0}'.format(prefix),
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
'--with-jpeg={0}'.format(spec['jpeg'].prefix),
'--with-zlib={0}'.format(spec['zlib'].prefix),
'--disable-netcdf', # must be disabled to build NetCDF with HDF4
@@ -65,11 +67,4 @@ class Hdf(Package):
else:
config_args.append('--without-szlib')
- configure(*config_args)
-
- make()
-
- if self.run_tests:
- make('check')
-
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/hdf5-blosc/package.py b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
index 088c1e9d9b..704f508cb3 100644
--- a/var/spack/repos/builtin/packages/hdf5-blosc/package.py
+++ b/var/spack/repos/builtin/packages/hdf5-blosc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,7 +22,6 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-
import os
import shutil
import sys
@@ -69,7 +68,7 @@ class Hdf5Blosc(Package):
# if sys.platform == "darwin":
# fix_darwin_install_name(prefix.lib)
- libtool = Executable(join_path(spec["libtool"].prefix.bin, "libtool"))
+ libtool = spec["libtool"].command
# TODO: these vars are not used.
# if "+mpi" in spec["hdf5"]:
@@ -111,11 +110,12 @@ class Hdf5Blosc(Package):
"-L%s" % spec["hdf5"].prefix.lib, "-lhdf5")
_install_shlib("libblosc_plugin", ".libs", prefix.lib)
- self.check_install(spec)
+ if self.run_tests:
+ self.check_install(spec)
def check_install(self, spec):
"Build and run a small program to test the installed HDF5 Blosc plugin"
- print "Checking HDF5-Blosc plugin..."
+ print("Checking HDF5-Blosc plugin...")
checkdir = "spack-check"
with working_dir(checkdir, create=True):
source = r"""\
@@ -174,30 +174,30 @@ Done.
with open("check.c", "w") as f:
f.write(source)
if "+mpi" in spec["hdf5"]:
- cc = which("mpicc")
+ cc = Executable(spec["mpi"].mpicc)
else:
- cc = which("cc")
+ cc = Executable(self.compiler.cc)
# TODO: Automate these path and library settings
cc("-c", "-I%s" % spec["hdf5"].prefix.include, "check.c")
cc("-o", "check", "check.o",
"-L%s" % spec["hdf5"].prefix.lib, "-lhdf5")
try:
check = Executable("./check")
- output = check(return_output=True)
- except:
+ output = check(output=str)
+ except ProcessError:
output = ""
success = output == expected
if not success:
- print "Produced output does not match expected output."
- print "Expected output:"
- print "-" * 80
- print expected
- print "-" * 80
- print "Produced output:"
- print "-" * 80
- print output
- print "-" * 80
- print "Environment:"
+ print("Produced output does not match expected output.")
+ print("Expected output:")
+ print("-" * 80)
+ print(expected)
+ print("-" * 80)
+ print("Produced output:")
+ print("-" * 80)
+ print(output)
+ print("-" * 80)
+ print("Environment:")
env = which("env")
env()
raise RuntimeError("HDF5 Blosc plugin check failed")
diff --git a/var/spack/repos/builtin/packages/hdf5/package.py b/var/spack/repos/builtin/packages/hdf5/package.py
index 222af53601..5a15b33d98 100644
--- a/var/spack/repos/builtin/packages/hdf5/package.py
+++ b/var/spack/repos/builtin/packages/hdf5/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,6 +24,7 @@
##############################################################################
from spack import *
import shutil
+import sys
class Hdf5(AutotoolsPackage):
@@ -32,18 +33,16 @@ class Hdf5(AutotoolsPackage):
flexible and efficient I/O and for high volume and complex data.
"""
- homepage = "http://www.hdfgroup.org/HDF5/"
- url = "http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.13/src/hdf5-1.8.13.tar.gz"
- list_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
+ homepage = "https://support.hdfgroup.org/HDF5/"
+ url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.1/src/hdf5-1.10.1.tar.gz"
+ list_url = "https://support.hdfgroup.org/ftp/HDF5/releases"
list_depth = 3
+ version('1.10.1', '43a2f9466702fb1db31df98ae6677f15')
version('1.10.0-patch1', '9180ff0ef8dc2ef3f61bd37a7404f295')
version('1.10.0', 'bdc935337ee8282579cd6bc4270ad199')
- version('1.8.18', 'dd2148b740713ca0295442ec683d7b1c',
- # The link for the latest version differs from the links for
- # the previous releases. Do not forget to remove this once
- # the version 1.8.18 is not the latest one for the 1.8.* branch.
- url='http://hdfgroup.org/ftp/HDF5/current18/src/hdf5-1.8.18.tar.gz')
+ version('1.8.19', '7f568e2464d4ab0a74d16b23956d900b')
+ version('1.8.18', 'dd2148b740713ca0295442ec683d7b1c')
version('1.8.17', '7d572f8f3b798a628b8245af0391a0ca')
version('1.8.16', 'b8ed9a36ae142317f88b0c7ef4b9c618')
version('1.8.15', '03cccb5b33dbe975fdcd8ae9dc021f24')
@@ -56,111 +55,179 @@ class Hdf5(AutotoolsPackage):
variant('shared', default=True,
description='Builds a shared version of the library')
- variant('cxx', default=True, description='Enable C++ support')
- variant('fortran', default=True, description='Enable Fortran support')
+ variant('hl', default=False, description='Enable the high-level library')
+ variant('cxx', default=False, description='Enable C++ support')
+ variant('fortran', default=False, description='Enable Fortran support')
+ variant('threadsafe', default=False,
+ description='Enable thread-safe capabilities')
variant('mpi', default=True, description='Enable MPI support')
variant('szip', default=False, description='Enable szip support')
- variant('threadsafe', default=False,
- description='Enable thread-safe capabilities')
variant('pic', default=True,
description='Produce position-independent code (for shared libs)')
depends_on('mpi', when='+mpi')
+ # numactl does not currently build on darwin
+ if sys.platform != 'darwin':
+ depends_on('numactl', when='+mpi+fortran')
depends_on('szip', when='+szip')
depends_on('zlib@1.1.2:')
- @AutotoolsPackage.precondition('configure')
- def validate(self):
- """
- Checks if incompatible variants have been activated at the same time
+ # There are several officially unsupported combinations of the features:
+ # 1. Thread safety is not guaranteed via high-level C-API but in some cases
+ # it works.
+ # conflicts('+threadsafe+hl')
+
+ # 2. Thread safety is not guaranteed via Fortran (CXX) API, but it's
+ # possible for a dependency tree to contain a package that uses Fortran
+ # (CXX) API in a single thread and another one that uses low-level C-API
+ # in multiple threads. To allow for such scenarios, we don't specify the
+ # following conflicts.
+ # conflicts('+threadsafe+cxx')
+ # conflicts('+threadsafe+fortran')
+
+ # 3. Parallel features are not supported via CXX API, but for the reasons
+ # described in #2 we allow for such combination.
+ # conflicts('+mpi+cxx')
+
+ def url_for_version(self, version):
+ url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-{0}/hdf5-{1}/src/hdf5-{1}.tar.gz"
+ return url.format(version.up_to(2), version)
- :param spec: spec of the package
- :raises RuntimeError: in case of inconsistencies
+ @property
+ def libs(self):
+ """HDF5 can be queried for the following parameters:
+
+ - "hl": high-level interface
+ - "cxx": C++ APIs
+ - "fortran": Fortran APIs
+
+ :return: list of matching libraries
"""
- spec = self.spec
- if '+fortran' in spec and not self.compiler.fc:
- msg = 'cannot build a fortran variant without a fortran compiler'
- raise RuntimeError(msg)
+ query_parameters = self.spec.last_query.extra_parameters
+
+ shared = '+shared' in self.spec
+
+ # This map contains a translation from query_parameters
+ # to the libraries needed
+ query2libraries = {
+ tuple(): ['libhdf5'],
+ ('cxx', 'fortran', 'hl'): [
+ 'libhdf5hl_fortran',
+ 'libhdf5_hl_cpp',
+ 'libhdf5_hl',
+ 'libhdf5_fortran',
+ 'libhdf5',
+ ],
+ ('cxx', 'hl'): [
+ 'libhdf5_hl_cpp',
+ 'libhdf5_hl',
+ 'libhdf5',
+ ],
+ ('fortran', 'hl'): [
+ 'libhdf5hl_fortran',
+ 'libhdf5_hl',
+ 'libhdf5_fortran',
+ 'libhdf5',
+ ],
+ ('hl',): [
+ 'libhdf5_hl',
+ 'libhdf5',
+ ],
+ ('cxx', 'fortran'): [
+ 'libhdf5_fortran',
+ 'libhdf5_cpp',
+ 'libhdf5',
+ ],
+ ('cxx',): [
+ 'libhdf5_cpp',
+ 'libhdf5',
+ ],
+ ('fortran',): [
+ 'libhdf5_fortran',
+ 'libhdf5',
+ ]
+ }
+
+ # Turn the query into the appropriate key
+ key = tuple(sorted(query_parameters))
+ libraries = query2libraries[key]
+
+ return find_libraries(
+ libraries, root=self.prefix, shared=shared, recurse=True
+ )
- if '+threadsafe' in spec and ('+cxx' in spec or '+fortran' in spec):
- msg = 'cannot use variant +threadsafe with either +cxx or +fortran'
+ @run_before('configure')
+ def fortran_check(self):
+ if '+fortran' in self.spec and not self.compiler.fc:
+ msg = 'cannot build a Fortran variant without a Fortran compiler'
raise RuntimeError(msg)
def configure_args(self):
- spec = self.spec
- # Handle compilation after spec validation
- extra_args = []
-
# Always enable this option. This does not actually enable any
# features: it only *allows* the user to specify certain
# combinations of other arguments. Enabling it just skips a
# sanity check in configure, so this doesn't merit a variant.
- extra_args.append("--enable-unsupported")
+ extra_args = ['--enable-unsupported']
+ extra_args += self.enable_or_disable('threadsafe')
+ extra_args += self.enable_or_disable('cxx')
+ extra_args += self.enable_or_disable('hl')
+ extra_args += self.enable_or_disable('fortran')
- if spec.satisfies('@1.10:'):
- if '+debug' in spec:
+ if '+szip' in self.spec:
+ extra_args.append('--with-szlib=%s' % self.spec['szip'].prefix)
+ else:
+ extra_args.append('--without-szlib')
+
+ if self.spec.satisfies('@1.10:'):
+ if '+debug' in self.spec:
extra_args.append('--enable-build-mode=debug')
else:
extra_args.append('--enable-build-mode=production')
else:
- if '+debug' in spec:
+ if '+debug' in self.spec:
extra_args.append('--enable-debug=all')
else:
extra_args.append('--enable-production')
- if '+shared' in spec:
+ # '--enable-fortran2003' no longer exists as of version 1.10.0
+ if '+fortran' in self.spec:
+ extra_args.append('--enable-fortran2003')
+ else:
+ extra_args.append('--disable-fortran2003')
+
+ if '+shared' in self.spec:
extra_args.append('--enable-shared')
else:
+ extra_args.append('--disable-shared')
extra_args.append('--enable-static-exec')
- if '+cxx' in spec:
- extra_args.append('--enable-cxx')
+ if '+pic' in self.spec:
+ extra_args += ['%s=%s' % (f, self.compiler.pic_flag)
+ for f in ['CFLAGS', 'CXXFLAGS', 'FCFLAGS']]
- if '+fortran' in spec:
- extra_args.append('--enable-fortran')
- # '--enable-fortran2003' no longer exists as of version 1.10.0
- if spec.satisfies('@:1.8.16'):
- extra_args.append('--enable-fortran2003')
-
- if '+pic' in spec:
- extra_args.append('CFLAGS={0}'.format(self.compiler.pic_flag))
- extra_args.append('CXXFLAGS={0}'.format(self.compiler.pic_flag))
- extra_args.append('FFLAGS={0}'.format(self.compiler.pic_flag))
-
- if '+mpi' in spec:
+ if '+mpi' in self.spec:
# The HDF5 configure script warns if cxx and mpi are enabled
# together. There doesn't seem to be a real reason for this, except
# that parts of the MPI interface are not accessible via the C++
# interface. Since they are still accessible via the C interface,
# this is not actually a problem.
- extra_args.extend([
- "--enable-parallel",
- "CC=%s" % spec['mpi'].mpicc
- ])
-
- if '+cxx' in spec:
- extra_args.append("CXX=%s" % spec['mpi'].mpicxx)
+ extra_args += ['--enable-parallel',
+ 'CC=%s' % self.spec['mpi'].mpicc]
- if '+fortran' in spec:
- extra_args.append("FC=%s" % spec['mpi'].mpifc)
+ if '+cxx' in self.spec:
+ extra_args.append('CXX=%s' % self.spec['mpi'].mpicxx)
- if '+szip' in spec:
- extra_args.append("--with-szlib=%s" % spec['szip'].prefix)
+ if '+fortran' in self.spec:
+ extra_args.append('FC=%s' % self.spec['mpi'].mpifc)
- if '+threadsafe' in spec:
- extra_args.extend([
- '--enable-threadsafe',
- '--disable-hl',
- ])
+ extra_args.append('--with-zlib=%s' % self.spec['zlib'].prefix)
- return ["--with-zlib=%s" % spec['zlib'].prefix] + extra_args
+ return extra_args
- def configure(self, spec, prefix):
- # Run the default autotools package configure
- super(Hdf5, self).configure(spec, prefix)
-
- if '@:1.8.14' in spec:
+ @run_after('configure')
+ def patch_postdeps(self):
+ if '@:1.8.14' in self.spec:
# On Ubuntu14, HDF5 1.8.12 (and maybe other versions)
# mysteriously end up with "-l -l" in the postdeps in the
# libtool script. Patch this by removing the spurious -l's.
@@ -170,7 +237,8 @@ class Hdf5(AutotoolsPackage):
arg for arg in m.group(1).split(' ') if arg != '-l'),
'libtool')
- @AutotoolsPackage.sanity_check('install')
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
def check_install(self):
# Build and run a small program to test the installed HDF5 library
spec = self.spec
@@ -196,20 +264,16 @@ HDF5 version {version} {version}
with open("check.c", 'w') as f:
f.write(source)
if '+mpi' in spec:
- cc = which('%s' % spec['mpi'].mpicc)
+ cc = Executable(spec['mpi'].mpicc)
else:
- cc = which('cc')
- # TODO: Automate these path and library settings
- cc('-c', "-I%s" % join_path(spec.prefix, "include"), "check.c")
- cc('-o', "check", "check.o",
- "-L%s" % join_path(spec.prefix, "lib"),
- "-L%s" % join_path(spec.prefix, "lib64"),
- "-lhdf5",
- "-lz")
+ cc = Executable(self.compiler.cc)
+ cc(*(['-c', "check.c"] + spec['hdf5'].headers.cpp_flags.split()))
+ cc(*(['-o', "check", "check.o"] +
+ spec['hdf5'].libs.ld_flags.split()))
try:
check = Executable('./check')
- output = check(return_output=True)
- except:
+ output = check(output=str)
+ except ProcessError:
output = ""
success = output == expected
if not success:
@@ -224,26 +288,3 @@ HDF5 version {version} {version}
print('-' * 80)
raise RuntimeError("HDF5 install check failed")
shutil.rmtree(checkdir)
-
- def url_for_version(self, version):
- # If we have a specific URL for this version, return it.
- version_urls = self.version_urls()
- if version in version_urls:
- return version_urls[version]
-
- base_url = "http://www.hdfgroup.org/ftp/HDF5/releases"
-
- if version == Version("1.2.2"):
- return "{0}/hdf5-{1}.tar.gz".format(base_url, version)
- elif version < Version("1.6.6"):
- return "{0}/hdf5-{1}/hdf5-{2}.tar.gz".format(
- base_url, version.up_to(2), version)
- elif version < Version("1.7"):
- return "{0}/hdf5-{1}/hdf5-{2}/src/hdf5-{2}.tar.gz".format(
- base_url, version.up_to(2), version)
- elif version < Version("1.10"):
- return "{0}/hdf5-{1}/src/hdf5-{1}.tar.gz".format(
- base_url, version)
- else:
- return "{0}/hdf5-{1}/hdf5-{2}/src/hdf5-{2}.tar.gz".format(
- base_url, version.up_to(2), version)
diff --git a/var/spack/repos/builtin/packages/help2man/package.py b/var/spack/repos/builtin/packages/help2man/package.py
index 506b1c1465..cc86affeaa 100644
--- a/var/spack/repos/builtin/packages/help2man/package.py
+++ b/var/spack/repos/builtin/packages/help2man/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/hepmc/package.py b/var/spack/repos/builtin/packages/hepmc/package.py
index ab80dcf6ba..b5470225b5 100644
--- a/var/spack/repos/builtin/packages/hepmc/package.py
+++ b/var/spack/repos/builtin/packages/hepmc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Hepmc(Package):
+class Hepmc(CMakePackage):
"""The HepMC package is an object oriented, C++ event record for
High Energy Physics Monte Carlo generators and simulation."""
@@ -39,17 +39,10 @@ class Hepmc(Package):
version('2.06.06', '102e5503537a3ecd6ea6f466aa5bc4ae')
version('2.06.05', '2a4a2a945adf26474b8bdccf4f881d9c')
- depends_on("cmake", type='build')
+ depends_on('cmake@2.6:', type='build')
- def install(self, spec, prefix):
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
- options = [source_directory]
- options.append('-Dmomentum:STRING=GEV')
- options.append('-Dlength:STRING=MM')
- options.extend(std_cmake_args)
-
- with working_dir(build_directory, create=True):
- cmake(*options)
- make()
- make('install')
+ def cmake_args(self):
+ return [
+ '-Dmomentum:STRING=GEV',
+ '-Dlength:STRING=MM',
+ ]
diff --git a/var/spack/repos/builtin/packages/heppdt/package.py b/var/spack/repos/builtin/packages/heppdt/package.py
index 54c846ae33..613d8d9f8e 100644
--- a/var/spack/repos/builtin/packages/heppdt/package.py
+++ b/var/spack/repos/builtin/packages/heppdt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Heppdt(Package):
+class Heppdt(AutotoolsPackage):
"""The HepPID library contains translation methods for particle ID's
to and from various Monte Carlo generators and the PDG standard
numbering scheme. We realize that the generators adhere closely
@@ -40,9 +40,3 @@ class Heppdt(Package):
version('3.03.01', 'd411f3bfdf9c4350d802241ba2629cc2')
version('3.03.00', 'cd84d0a0454be982dcd8c285e060a7b3')
version('2.06.01', '5688b4bdbd84b48ed5dd2545a3dc33c0')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/highfive/package.py b/var/spack/repos/builtin/packages/highfive/package.py
new file mode 100644
index 0000000000..ad97e716e0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/highfive/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Highfive(CMakePackage):
+ """HighFive - Header only C++ HDF5 interface"""
+
+ homepage = "https://github.com/BlueBrain/HighFive"
+ url = "https://github.com/BlueBrain/HighFive/archive/v1.2.tar.gz"
+
+ version('1.2', '030728d53519c7e13b5a522d34240301')
+ version('1.1', '986f0bd18c5264709688a536c02d2b2a')
+ version('1.0', 'e44e548560ea92afdb244c223b7655b6')
+
+ variant('boost', default=False, description='Support Boost')
+ variant('mpi', default=True, description='Support MPI')
+
+ depends_on('boost @1.41:', when='+boost')
+ depends_on('hdf5')
+ depends_on('hdf5 +mpi', when='+mpi')
+
+ def cmake_args(self):
+ args = [
+ '-DUSE_BOOST:Bool={0}'.format('+boost' in self.spec),
+ '-DHIGHFIVE_PARALLEL_HDF5:Bool={0}'.format('+mpi' in self.spec),
+ '-DUNIT_TESTS:Bool=false',
+ '-DHIGHFIVE_EXAMPLES:Bool=false']
+ return args
diff --git a/var/spack/repos/builtin/packages/highwayhash/package.py b/var/spack/repos/builtin/packages/highwayhash/package.py
new file mode 100644
index 0000000000..3a12736aae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/highwayhash/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 *
+from glob import glob
+import os
+
+
+class Highwayhash(MakefilePackage):
+ """Strong (well-distributed and unpredictable) hashes:
+ - Portable implementation of SipHash
+ - HighwayHash, a 5x faster SIMD hash with security claims
+ """
+
+ homepage = "https://github.com/google/highwayhash"
+
+ version('dfcb97', git='https://github.com/google/highwayhash.git',
+ commit='dfcb97ca4fe9277bf9dc1802dd979b071896453b')
+
+ build_targets = ['all', 'libhighwayhash.a']
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.include)
+
+ # The following are CPU and compiler flag specific
+ if(os.path.exists('libhighwayhash.a')):
+ mkdirp(prefix.lib)
+ install('libhighwayhash.a', prefix.lib)
+ if(os.path.exists('highwayhash_test')):
+ install('highwayhash_test', prefix.bin)
+ if(os.path.exists('benchmark')):
+ install('benchmark', prefix.bin)
+
+ # Always installed
+ install('profiler_example', prefix.bin)
+ install('nanobenchmark_example', prefix.bin)
+ install('vector_test', prefix.bin)
+ install('sip_hash_test', prefix.bin)
+ for i in glob('highwayhash/*.h'):
+ install(i, prefix.include)
diff --git a/var/spack/repos/builtin/packages/hisat2/package.py b/var/spack/repos/builtin/packages/hisat2/package.py
new file mode 100644
index 0000000000..1b945c61c8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hisat2/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+import os.path
+
+
+class Hisat2(MakefilePackage):
+ """HISAT2 is a fast and sensitive alignment program for mapping
+ next-generation sequencing reads (whole-genome, transcriptome, and
+ exome sequencing data) against the general human population (as well as
+ against a single reference genome)."""
+
+ homepage = "http://ccb.jhu.edu/software/hisat2"
+ url = "ftp://ftp.ccb.jhu.edu/pub/infphilo/hisat2/downloads/hisat2-2.1.0-source.zip"
+
+ version('2.1.0', '8b566d1b7e6c5801c8ae9824ed2da3d0')
+
+ def install(self, spec, prefix):
+ install_tree('doc', prefix.doc)
+ install_tree('example', prefix.example)
+ install_tree('hisatgenotype_modules', prefix.hisatgenotype_modules)
+ install_tree('hisatgenotype_scripts', prefix.hisatgenotype_scripts)
+ install_tree('scripts', prefix.scripts)
+ mkdirp(prefix.bin)
+ install('hisat2', prefix.bin)
+ install('hisat2-align-s', prefix.bin)
+ install('hisat2-align-l', prefix.bin)
+ install('hisat2-build', prefix.bin)
+ install('hisat2-build-s', prefix.bin)
+ install('hisat2-build-l', prefix.bin)
+ install('hisat2-inspect', prefix.bin)
+ install('hisat2-inspect-s', prefix.bin)
+ install('hisat2-inspect-l', prefix.bin)
+ files = glob.iglob('*.py')
+ for file in files:
+ if os.path.isfile(file):
+ install(file, prefix.bin)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', self.spec.prefix)
diff --git a/var/spack/repos/builtin/packages/hmmer/package.py b/var/spack/repos/builtin/packages/hmmer/package.py
index 6a236e9fc9..2681282b7d 100644
--- a/var/spack/repos/builtin/packages/hmmer/package.py
+++ b/var/spack/repos/builtin/packages/hmmer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/hoomd-blue/package.py b/var/spack/repos/builtin/packages/hoomd-blue/package.py
index 5e27f6aead..547a15ae6b 100644
--- a/var/spack/repos/builtin/packages/hoomd-blue/package.py
+++ b/var/spack/repos/builtin/packages/hoomd-blue/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import os
-class HoomdBlue(Package):
+class HoomdBlue(CMakePackage):
"""HOOMD-blue is a general-purpose particle simulation toolkit. It scales
from a single CPU core to thousands of GPUs.
@@ -36,28 +36,51 @@ class HoomdBlue(Package):
to create custom initialization routines, control simulation parameters,
and perform in situ analysis."""
- homepage = "https://codeblue.umich.edu/hoomd-blue/index.html"
- url = "https://bitbucket.org/glotzer/hoomd-blue/get/v1.3.3.tar.bz2"
+ homepage = "http://glotzerlab.engin.umich.edu/hoomd-blue/"
+ git = "https://bitbucket.org/glotzer/hoomd-blue"
- version('1.3.3', '1469ef4531dc14b579c0acddbfe6a273')
+ # TODO: There is a bug in Spack that requires a url to be defined
+ # even if it isn't used. This URL can hopefully be removed someday.
+ url = "https://bitbucket.org/glotzer/hoomd-blue/get/v2.1.6.tar.bz2"
- variant('mpi', default=True, description='Compile with MPI enabled')
- variant('cuda', default=True, description='Compile with CUDA Toolkit')
- variant('doc', default=True, description='Generate documentation')
+ version('develop', git=git, submodules=True)
+
+ # Bitbucket has tarballs for each release, but they cannot be built.
+ # The tarball doesn't come with the git submodules, nor does it come
+ # with a .git directory, causing the build to fail. As a workaround,
+ # clone a specific tag from Bitbucket instead of using the tarballs.
+ # https://bitbucket.org/glotzer/hoomd-blue/issues/238
+ version('2.1.6', git=git, tag='v2.1.6', submodules=True)
+
+ variant('mpi', default=True, description='Compile with MPI enabled')
+ variant('cuda', default=True, description='Compile with CUDA Toolkit')
+ variant('doc', default=False, description='Generate documentation')
+
+ # HOOMD-blue requires C++11 support, which is only available in GCC 4.7+
+ # https://bitbucket.org/glotzer/hoomd-blue/issues/238
+ # https://gcc.gnu.org/projects/cxx-status.html
+ conflicts('%gcc@:4.6')
+
+ # HOOMD-blue uses hexadecimal floats, which are not technically part of
+ # the C++11 standard. GCC 6.0+ produces an error when this happens.
+ # https://bitbucket.org/glotzer/hoomd-blue/issues/239
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1321986
+ conflicts('%gcc@6.0:')
extends('python')
- depends_on('py-numpy', type=('build', 'run'))
- depends_on('boost+python')
- depends_on('cmake', type='build')
+ depends_on('python@2.7:')
+ depends_on('py-numpy@1.7:', type=('build', 'run'))
+ depends_on('cmake@2.8.0:', type='build')
+ depends_on('pkg-config', type='build')
depends_on('mpi', when='+mpi')
- depends_on('cuda', when='+cuda')
- depends_on('doxygen', when='+doc', type='build')
+ depends_on('cuda@7.0:', when='+cuda')
+ depends_on('doxygen@1.8.5:', when='+doc', type='build')
- def install(self, spec, prefix):
+ def cmake_args(self):
+ spec = self.spec
cmake_args = [
- '-DPYTHON_EXECUTABLE=%s/python' % spec['python'].prefix.bin,
- '-DBOOST_ROOT=%s' % spec['boost'].prefix
+ '-DPYTHON_EXECUTABLE={0}'.format(spec['python'].command.path),
]
# MPI support
@@ -90,9 +113,4 @@ class HoomdBlue(Package):
else:
cmake_args.append('-DENABLE_DOXYGEN=OFF')
- cmake_args.extend(std_cmake_args)
- cmake('.', *cmake_args)
-
- make()
- make("test")
- make("install")
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/hpccg/package.py b/var/spack/repos/builtin/packages/hpccg/package.py
new file mode 100644
index 0000000000..97fddc4f12
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hpccg/package.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Hpccg(MakefilePackage):
+ """Proxy Application. Intended to be the 'best approximation
+ to an unstructured implicit finite element or finite volume
+ application in 800 lines or fewer.'
+ """
+
+ homepage = "https://mantevo.org/about/applications/"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/HPCCG/HPCCG-1.0.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.0', '2e99da1a89de5ef0844da5e6ffbf39dc')
+
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('openmp', default=True, description='Build with OpenMP support')
+
+ # Optional dependencies
+ depends_on('mpi', when='+mpi')
+
+ @property
+ def build_targets(self):
+ targets = []
+
+ if '+mpi' in self.spec:
+ targets.append('CXX={0}'.format(self.spec['mpi'].mpicxx))
+ targets.append('LINKER={0}'.format(self.spec['mpi'].mpicxx))
+ targets.append('USE_MPI=-DUSING_MPI')
+ else:
+ targets.append('CXX=c++')
+ targets.append('LINKER=c++')
+
+ if '+openmp' in self.spec:
+ targets.append('USE_OMP=-DUSING_OMP')
+ targets.append('OMP_FLAGS={0}'.format(self.compiler.openmp_flag))
+
+ # Remove Compiler Specific Optimization Flags
+ if '%gcc' not in self.spec:
+ targets.append('CPP_OPT_FLAGS=')
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('test_HPCCG', prefix.bin)
+ install('README', prefix.doc)
+ install('weakScalingRunScript', prefix.bin)
+ install('strongScalingRunScript', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/hpctoolkit-externals/package.py b/var/spack/repos/builtin/packages/hpctoolkit-externals/package.py
index 86d95a1e21..73ee39539f 100644
--- a/var/spack/repos/builtin/packages/hpctoolkit-externals/package.py
+++ b/var/spack/repos/builtin/packages/hpctoolkit-externals/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,11 +30,10 @@ class HpctoolkitExternals(Package):
HpctoolkitExternals package provides all these prerequisites."""
homepage = "http://hpctoolkit.org"
+ url = "https://github.com/HPCToolkit/hpctoolkit-externals"
- # Note: No precise release tags/branches provided
- version('5.4',
- git='https://github.com/HPCToolkit/hpctoolkit-externals.git',
- commit='3d2953623357bb06e9a4b51eca90a4b039c2710e')
+ version('2017.06', git=url, tag='release-2017.06')
+ version('master', git=url)
parallel = False
diff --git a/var/spack/repos/builtin/packages/hpctoolkit/package.py b/var/spack/repos/builtin/packages/hpctoolkit/package.py
index b6e03627de..14be6af8ef 100644
--- a/var/spack/repos/builtin/packages/hpctoolkit/package.py
+++ b/var/spack/repos/builtin/packages/hpctoolkit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,17 +34,18 @@ class Hpctoolkit(Package):
and attributes them to the full calling context in which they occur."""
homepage = "http://hpctoolkit.org"
+ url = "https://github.com/HPCToolkit/hpctoolkit"
- # Note: No precise release tags/branches provided
- version('5.4', git='https://github.com/HPCToolkit/hpctoolkit.git',
- commit='d9ca2112762e5a06ea31b5295d793e4a83272d19')
+ version('2017.06', git=url, tag='release-2017.06')
+ version('master', git=url)
variant('mpi', default=True, description='Enable MPI supoort')
variant('papi', default=True, description='Enable PAPI counter support')
- depends_on('hpctoolkit-externals')
depends_on('papi', when='+papi')
depends_on('mpi', when='+mpi')
+ depends_on('hpctoolkit-externals@2017.06', when='@2017.06')
+ depends_on('hpctoolkit-externals@master', when='@master')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/hpgmg/package.py b/var/spack/repos/builtin/packages/hpgmg/package.py
new file mode 100644
index 0000000000..db9b0ce225
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hpgmg/package.py
@@ -0,0 +1,87 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Hpgmg(Package):
+ """HPGMG implements full multigrid (FMG) algorithms using
+ finite-volume and finite-element methods.
+ Different algorithmic variants adjust the arithmetic intensity
+ and architectural properties that are tested. These FMG methods
+ converge up to discretization error in one F-cycle,
+ thus may be considered direct solvers. An F-cycle visits
+ the finest level a total of two times,
+ the first coarsening (8x smaller) 4 times,
+ the second coarsening 6 times, etc."""
+
+ homepage = "https://bitbucket.org/hpgmg/hpgmg"
+ url = "https://bitbucket.org/hpgmg/hpgmg/get/master.tar.gz"
+ tags = ['proxy-app']
+
+ version('master', '4a2b139e1764c84ed7fe06334d3f8d8a')
+
+ variant(
+ 'fe', default=True, description='Build finite element solver')
+ variant(
+ 'fv', default='mpi', values=('serial', 'mpi', 'none'),
+ description='Build finite volume solver with or without MPI support')
+ variant('cuda', default=False, description='Build with CUDA')
+
+ depends_on('petsc', when='+fe')
+ depends_on('mpi', when='+fe')
+ depends_on('mpi', when='fv=mpi')
+ depends_on('cuda', when='+cuda')
+ depends_on('python', type='build')
+
+ phases = ['configure', 'build', 'install']
+
+ def configure_args(self):
+ args = []
+ if '+fe' in self.spec:
+ args.append('--fe')
+
+ if 'fv=serial' in self.spec:
+ args.append('--no-fv-mpi')
+
+ if 'mpi' in self.spec:
+ args.append('--CC={0}'.format(self.spec['mpi'].mpicc))
+
+ if 'fv=none' in self.spec:
+ args.append('--no-fv')
+ else:
+ args.append('--CFLAGS=' + self.compiler.openmp_flag)
+
+ return args
+
+ def configure(self, spec, prefix):
+ configure(*self.configure_args())
+
+ def build(self, spec, prefix):
+ make()
+
+ def install(self, spec, prefix):
+ install_tree('build/bin', prefix.bin)
+ install('README.md', prefix)
+ install('LICENSE', prefix)
diff --git a/var/spack/repos/builtin/packages/hpl/package.py b/var/spack/repos/builtin/packages/hpl/package.py
index fa0013de17..0c484fc1f7 100644
--- a/var/spack/repos/builtin/packages/hpl/package.py
+++ b/var/spack/repos/builtin/packages/hpl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,7 @@ import os
import platform
-class Hpl(Package):
+class Hpl(MakefilePackage):
"""HPL is a software package that solves a (random) dense linear system
in double precision (64 bits) arithmetic on distributed-memory computers.
It can thus be regarded as a portable as well as freely available
@@ -45,7 +45,11 @@ class Hpl(Package):
parallel = False
- def configure(self, spec, arch):
+ arch = '{0}-{1}'.format(platform.system(), platform.processor())
+
+ build_targets = ['arch={0}'.format(arch)]
+
+ def edit(self, spec, prefix):
# List of configuration options
# Order is important
config = []
@@ -66,7 +70,7 @@ class Hpl(Package):
'RM = /bin/rm -f',
'TOUCH = touch',
# Platform identifier
- 'ARCH = {0}'.format(arch),
+ 'ARCH = {0}'.format(self.arch),
# HPL Directory Structure / HPL library
'TOPdir = {0}'.format(os.getcwd()),
'INCdir = $(TOPdir)/include',
@@ -74,11 +78,11 @@ class Hpl(Package):
'LIBdir = $(TOPdir)/lib/$(ARCH)',
'HPLlib = $(LIBdir)/libhpl.a',
# Message Passing library (MPI)
- 'MPinc = -I{0}'.format(spec['mpi'].prefix.include),
+ 'MPinc = {0}'.format(spec['mpi'].prefix.include),
'MPlib = -L{0}'.format(spec['mpi'].prefix.lib),
# Linear Algebra library (BLAS or VSIPL)
'LAinc = {0}'.format(spec['blas'].prefix.include),
- 'LAlib = {0}'.format(spec['blas'].blas_libs.joined()),
+ 'LAlib = {0}'.format(spec['blas'].libs.joined()),
# F77 / C interface
'F2CDEFS = -DAdd_ -DF77_INTEGER=int -DStringSunStyle',
# HPL includes / libraries / specifics
@@ -99,21 +103,13 @@ class Hpl(Package):
])
# Write configuration options to include file
- with open('Make.{0}'.format(arch), 'w') as makefile:
+ with open('Make.{0}'.format(self.arch), 'w') as makefile:
for var in config:
makefile.write('{0}\n'.format(var))
def install(self, spec, prefix):
- # Arch used for file naming purposes only
- arch = '{0}-{1}'.format(platform.system(), platform.processor())
-
- # Generate Makefile include
- self.configure(spec, arch)
-
- make('arch={0}'.format(arch))
-
# Manual installation
- install_tree(join_path('bin', arch), prefix.bin)
- install_tree(join_path('lib', arch), prefix.lib)
- install_tree(join_path('include', arch), prefix.include)
+ install_tree(join_path('bin', self.arch), prefix.bin)
+ install_tree(join_path('lib', self.arch), prefix.lib)
+ install_tree(join_path('include', self.arch), prefix.include)
install_tree('man', prefix.man)
diff --git a/var/spack/repos/builtin/packages/hpx/package.py b/var/spack/repos/builtin/packages/hpx/package.py
new file mode 100644
index 0000000000..2c5e0c1402
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hpx/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Hpx(CMakePackage):
+ """C++ runtime system for parallel and distributed applications."""
+
+ homepage = "http://stellar.cct.lsu.edu/tag/hpx/"
+ url = "http://stellar.cct.lsu.edu/files/hpx_1.0.0.tar.gz"
+
+ version('1.0.0', '4983e7c6402417ec794d40343e36e417')
+
+ depends_on('boost@1.55.0:')
+ depends_on('hwloc@1.6:')
+
+ def cmake_args(self):
+ args = ['-DHPX_BUILD_EXAMPLES=OFF', '-DHPX_MALLOC=system']
+ return args
diff --git a/var/spack/repos/builtin/packages/hpx5/configure.patch b/var/spack/repos/builtin/packages/hpx5/configure.patch
new file mode 100644
index 0000000000..9ac8e24849
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hpx5/configure.patch
@@ -0,0 +1,36 @@
+--- a/hpx/configure
++++ b/hpx/configure
+@@ -18002,33 +18002,21 @@
+ case $PE_ENV in #(
+ CRAY*) :
+
+- LIBHPX_CPPFLAGS="$LIBHPX_CPPFLAGS ‐h noomp"
+- LIBHPX_CFLAGS="$LIBHPX_CFLAGS -h nomessage=1254"
+- LIBHPX_CCASFLAGS="$LIBHPX_CCASFLAGS -h gnu -h nomessage=1254"
+ ;; #(
+ PGI*) :
+
+ ;; #(
+ GNU*) :
+
+- hpx_pe_env_cflags_pedantic="-pedantic"
+- hpx_pe_env_cflags_wall="-Wall"
+ ;; #(
+ INTEL*) :
+
+ # icc complains about our use of gcc memory model macros, but the complaint
+ # isn't a problem or helpful, so suppress that one warning. The sync headers
+ # aren't included by HPX so external users don't care.
+- LIBHPX_CFLAGS="$LIBHPX_CFLAGS -wd32013"
+- HPX_APPS_CFLAGS="$HPX_APPS_CFLAGS -wd32013"
+- hpx_pe_env_cflags_pedantic="-pedantic"
+- hpx_pe_env_cflags_wall="-Wall"
+ ;; #(
+ CLANG*) :
+
+- LIBHPX_CPPFLAGS="$LIBHPX_CPPFLAGS -Wno-gnu-zero-variadic-macro-arguments -Wno-unused-private-field"
+- hpx_pe_env_cflags_pedantic="-pedantic"
+- hpx_pe_env_cflags_wall="-Wall"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown programming environment" >&5
+ $as_echo "$as_me: WARNING: Unknown programming environment" >&2;} ;; #(
diff --git a/var/spack/repos/builtin/packages/hpx5/package.py b/var/spack/repos/builtin/packages/hpx5/package.py
index fe75c256f8..dfc112fb24 100644
--- a/var/spack/repos/builtin/packages/hpx5/package.py
+++ b/var/spack/repos/builtin/packages/hpx5/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,11 +22,11 @@
# 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 *
-import os
-class Hpx5(Package):
+class Hpx5(AutotoolsPackage):
"""The HPX-5 Runtime System. HPX-5 (High Performance ParalleX) is an
open source, portable, performance-oriented runtime developed at
CREST (Indiana University). HPX-5 provides a distributed
@@ -39,6 +39,8 @@ class Hpx5(Package):
homepage = "http://hpx.crest.iu.edu"
url = "http://hpx.crest.iu.edu/release/hpx-3.1.0.tar.gz"
+ version('4.1.0', '43cb78758506f77416b95276a472f84f')
+ version('4.0.0', 'b40dc03449ae1039cbb48ee149952b22')
version('3.1.0', '9e90b8ac46788c009079632828c77628')
version('2.0.0', '3d2ff3aab6c46481f9ec65c5b2bfe7a6')
version('1.3.0', '2260ecc7f850e71a4d365a43017d8cee')
@@ -46,33 +48,91 @@ class Hpx5(Package):
version('1.1.0', '646afb460ecb7e0eea713a634933ce4f')
version('1.0.0', '8020822adf6090bd59ed7fe465f6c6cb')
+ # Don't second-guess what compiler we are using on Cray
+ patch("configure.patch", when='@4.0.0')
+
+ variant('cuda', default=False, description='Enable CUDA support')
+ variant('cxx11', default=False, description='Enable C++11 hpx++ interface')
variant('debug', default=False, description='Build debug version of HPX-5')
- variant('photon', default=False, description='Enable Photon support')
+ variant('instrumentation', default=False, description='Enable instrumentation (may affect performance)')
+ variant('metis', default=False, description='Enable METIS support')
variant('mpi', default=False, description='Enable MPI support')
+ variant('opencl', default=False, description='Enable OpenCL support')
+ variant('photon', default=False, description='Enable Photon support')
+ variant('pic', default=True, description='Produce position-independent code')
+ depends_on("autoconf", type='build')
+ depends_on("automake", type='build')
+ depends_on("hwloc")
+ depends_on("hwloc +cuda", when='+cuda')
+ # Note: We could disable CUDA support via "hwloc ~cuda"
+ depends_on("jemalloc")
+ # depends_on("libffi")
+ depends_on("libtool", type='build')
+ # depends_on("lz4") # hpx5 always builds its own lz4
+ depends_on("m4", type='build')
+ depends_on("metis", when='+metis')
depends_on("mpi", when='+mpi')
depends_on("mpi", when='+photon')
+ depends_on("opencl", when='+opencl')
+ # depends_on("papi")
+ depends_on("pkg-config", type='build')
+
+ configure_directory = "hpx"
+ build_directory = "spack-build"
+
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ '--enable-agas', # make this a variant?
+ '--enable-jemalloc', # make this a variant?
+ '--enable-percolation', # make this a variant?
+ # '--enable-rebalancing', # this seems broken
+ '--with-hwloc=hwloc',
+ '--with-jemalloc=jemalloc',
+ # Spack's libffi installs its headers strangely,
+ # leading to problems
+ '--with-libffi=contrib',
+ # '--with-papi=papi', # currently disabled in HPX
+ ]
+
+ if '+cxx11' in spec:
+ args += ['--enable-hpx++']
- def install(self, spec, prefix):
- extra_args = []
if '+debug' in spec:
- extra_args.extend([
- '--enable-debug',
- 'CFLAGS=-g -O0'
- ])
- else:
- extra_args.append('CFLAGS=-O3')
+ args += ['--enable-debug']
+
+ if '+instrumentation' in spec:
+ args += ['--enable-instrumentation']
+
+ if '+mpi' in spec or '+photon' in spec:
+ # photon requires mpi
+ args += ['--enable-mpi']
+ # Choose pkg-config name for MPI library
+ if '^openmpi' in spec:
+ args += ['--with-mpi=ompi-cxx']
+ elif '^mpich' in spec:
+ args += ['--with-mpi=mpich']
+ elif '^mvapich2' in spec:
+ args += ['--with-mpi=mvapich2-cxx']
+ else:
+ args += ['--with-mpi=system']
- if '+mpi' in spec:
- extra_args.append('--enable-mpi')
+ # METIS does not support pkg-config; HPX will pick it up automatically
+ # if '+metis' in spec:
+ # args += ['--with-metis=???']
+
+ if '+opencl' in spec:
+ args += ['--enable-opencl']
+ if '^pocl' in spec:
+ args += ['--with-opencl=pocl']
+ else:
+ args += ['--with-opencl=system']
if '+photon' in spec:
- extra_args.extend([
- '--enable-mpi',
- '--enable-photon'
- ])
-
- os.chdir("./hpx/")
- configure('--prefix=%s' % prefix, *extra_args)
- make()
- make("install")
+ args += ['--enable-photon']
+
+ if '+pic' in spec:
+ args += ['--with-pic']
+
+ return args
diff --git a/var/spack/repos/builtin/packages/hsakmt/package.py b/var/spack/repos/builtin/packages/hsakmt/package.py
index 0daad4afed..5574486066 100644
--- a/var/spack/repos/builtin/packages/hsakmt/package.py
+++ b/var/spack/repos/builtin/packages/hsakmt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Hsakmt(Package):
+class Hsakmt(AutotoolsPackage):
"""hsakmt is a thunk library that provides a userspace interface to amdkfd
(AMD's HSA Linux kernel driver). It is the HSA equivalent of libdrm."""
@@ -33,9 +33,3 @@ class Hsakmt(Package):
url = "https://www.x.org/archive/individual/lib/hsakmt-1.0.0.tar.gz"
version('1.0.0', '9beb20104e505300daf541266c4c3c3d')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/hstr/package.py b/var/spack/repos/builtin/packages/hstr/package.py
new file mode 100644
index 0000000000..e019e9c3af
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hstr/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Hstr(AutotoolsPackage):
+ """hstr(hh) is a shell history suggest box for Bash and Zsh,
+ which enables easy viewing, searching and using
+ your command history."""
+
+ homepage = "https://github.com/dvorka/hstr"
+ url = "https://github.com/dvorka/hstr/archive/1.22.tar.gz"
+
+ version('1.22', '620dab922fadf2858938fbe36d9f99fd')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+ depends_on('ncurses@5.9')
+ depends_on('readline')
diff --git a/var/spack/repos/builtin/packages/htop/package.py b/var/spack/repos/builtin/packages/htop/package.py
index 3df0a35356..168c03302d 100644
--- a/var/spack/repos/builtin/packages/htop/package.py
+++ b/var/spack/repos/builtin/packages/htop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,17 @@
from spack import *
-class Htop(Package):
+class Htop(AutotoolsPackage):
"""htop is an interactive text-mode process viewer for Unix systems."""
homepage = "https://github.com/hishamhm/htop"
url = "https://hisham.hm/htop/releases/2.0.2/htop-2.0.2.tar.gz"
+ list_url = "https://hisham.hm/htop/releases"
+ list_depth = 1
version('2.0.2', '7d354d904bad591a931ad57e99fea84a')
depends_on('ncurses')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make('install')
+ def configure_args(self):
+ return ['--enable-shared']
diff --git a/var/spack/repos/builtin/packages/htslib/package.py b/var/spack/repos/builtin/packages/htslib/package.py
index 1a8b8fd2f5..000c68e245 100644
--- a/var/spack/repos/builtin/packages/htslib/package.py
+++ b/var/spack/repos/builtin/packages/htslib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,30 @@
from spack import *
-class Htslib(Package):
+class Htslib(AutotoolsPackage):
"""C library for high-throughput sequencing data formats."""
homepage = "https://github.com/samtools/htslib"
- url = "https://github.com/samtools/htslib/releases/download/1.3.1/htslib-1.3.1.tar.bz2"
+ version('1.6', 'd6fd14e208aca7e08cbe9072233d0af9')
+ version('1.4', '2a22ff382654c033c40e4ec3ea880050')
version('1.3.1', '16d78f90b72f29971b042e8da8be6843')
+ version('1.2', '64026d659c3b062cfb6ddc8a38e9779f')
depends_on('zlib')
+ depends_on('bzip2', when="@1.4:")
+ depends_on('xz', when="@1.4:")
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
- make()
- make('install')
+ depends_on('m4', when="@1.2")
+ depends_on('autoconf', when="@1.2")
+ depends_on('automake', when="@1.2")
+ depends_on('libtool', when="@1.2")
+
+ # v1.2 uses the automagically assembled tarball from .../archive/...
+ # everything else uses the tarballs uploaded to the release
+ def url_for_version(self, version):
+ if version.string == '1.2':
+ return 'https://github.com/samtools/htslib/archive/1.2.tar.gz'
+ else:
+ url = "https://github.com/samtools/htslib/releases/download/{0}/htslib-{0}.tar.bz2"
+ return url.format(version.dotted)
diff --git a/var/spack/repos/builtin/packages/httpie/package.py b/var/spack/repos/builtin/packages/httpie/package.py
new file mode 100644
index 0000000000..2ec4c6eaad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/httpie/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Httpie(PythonPackage):
+ """Modern command line HTTP client."""
+
+ homepage = "https://httpie.org/"
+ url = "https://pypi.io/packages/source/h/httpie/httpie-0.9.8.tar.gz"
+
+ version('0.9.9', '13ed0b79b65e793eb288e563db38b2a2')
+ version('0.9.8', 'e0d1af07d0959a2e081e7954797ce260')
+
+ variant('socks', default=True,
+ description='Enable SOCKS proxy support')
+
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-pygments@2.1.3:', type=('build', 'run'))
+ depends_on('py-requests@2.11.0:', type=('build', 'run'))
+ depends_on('py-pysocks', type=('build', 'run'), when="+socks")
+ # Concretization problem breaks this. Unconditional for now...
+ # https://github.com/spack/spack/issues/3628
+ # depends_on('py-argparse@1.2.1:', type=('build', 'run'),
+ # when='^python@:2.6,3.0:3.1')
+ depends_on('py-argparse@1.2.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/hub/package.py b/var/spack/repos/builtin/packages/hub/package.py
index 5d7c082897..ff38385242 100644
--- a/var/spack/repos/builtin/packages/hub/package.py
+++ b/var/spack/repos/builtin/packages/hub/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/hunspell/package.py b/var/spack/repos/builtin/packages/hunspell/package.py
new file mode 100644
index 0000000000..2fef3d369e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hunspell/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Hunspell(AutotoolsPackage):
+ """The most popular spellchecking library (sez the author...)."""
+
+ homepage = "http://hunspell.github.io/"
+ url = "https://github.com/hunspell/hunspell/archive/v1.6.0.tar.gz"
+
+ version('1.6.0', '047c3feb121261b76dc16cdb62f54483')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
diff --git a/var/spack/repos/builtin/packages/hwloc/package.py b/var/spack/repos/builtin/packages/hwloc/package.py
index 111c424b22..7961d930db 100644
--- a/var/spack/repos/builtin/packages/hwloc/package.py
+++ b/var/spack/repos/builtin/packages/hwloc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,12 @@
# 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 *
+import sys
-class Hwloc(Package):
+class Hwloc(AutotoolsPackage):
"""The Portable Hardware Locality (hwloc) software package
provides a portable abstraction (across OS, versions,
architectures, ...) of the hierarchical topology of modern
@@ -40,21 +42,40 @@ class Hwloc(Package):
homepage = "http://www.open-mpi.org/projects/hwloc/"
url = "http://www.open-mpi.org/software/hwloc/v1.9/downloads/hwloc-1.9.tar.gz"
list_url = "http://www.open-mpi.org/software/hwloc/"
- list_depth = 3
+ list_depth = 2
+ version('1.11.8', 'a0fa1c9109a4d8b4b6568e62cc9b6e30')
+ version('1.11.7', '867a5266675e5bf1ef4ab66c459653f8')
+ version('1.11.6', 'b4e95eadd2fbdb6d40bbd96be6f03c84')
+ version('1.11.5', '8f5fe6a9be2eb478409ad5e640b2d3ba')
version('1.11.4', 'b6f23eb59074fd09fdd84905d50b103d')
version('1.11.3', 'c1d36a9de6028eac1d18ea4782ef958f')
version('1.11.2', 'e4ca55c2a5c5656da4a4e37c8fc51b23')
version('1.11.1', 'feb4e416a1b25963ed565d8b42252fdc')
version('1.9', '1f9f9155682fe8946a97c08896109508')
- depends_on('libpciaccess')
+ variant('cuda', default=False, description="Support CUDA devices")
+ variant('libxml2', default=True, description="Build with libxml2")
+ variant('pci', default=(sys.platform != 'darwin'),
+ description="Support analyzing devices on PCI bus")
+
+ depends_on('cuda', when='+cuda')
+ depends_on('libpciaccess', when='+pci')
+ depends_on('libxml2', when='+libxml2')
+ depends_on('pkg-config', type='build')
def url_for_version(self, version):
return "http://www.open-mpi.org/software/hwloc/v%s/downloads/hwloc-%s.tar.gz" % (version.up_to(2), version)
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
-
- make()
- make("install")
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ "--enable-cuda" if '+cuda' in spec else "--disable-cuda",
+ "--enable-libxml2" if '+libxml2' in spec else "--disable-libxml2",
+ "--enable-pci" if '+pci' in spec else "--disable-pci",
+ # Disable OpenCL, since hwloc might pick up an OpenCL
+ # library at build time that is then not found at run time
+ # (Alternatively, we could require OpenCL as dependency.)
+ "--disable-opencl",
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/hybpiper/package.py b/var/spack/repos/builtin/packages/hybpiper/package.py
new file mode 100644
index 0000000000..c3e3a22b13
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hybpiper/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+import os
+
+
+class Hybpiper(Package):
+ """HybPiper was designed for targeted sequence capture, in which DNA
+ sequencing libraries are enriched for gene regions of interest,
+ especially for phylogenetics. HybPiper is a suite of Python scripts
+ that wrap and connect bioinformatics tools in order to extract target
+ sequences from high-throughput DNA sequencing reads"""
+
+ homepage = "https://github.com/mossmatters/HybPiper"
+ url = "https://github.com/mossmatters/HybPiper/archive/v1.2.0.tar.gz"
+
+ version('1.2.0', '0ad78e9ca5e3f23ae0eb6236b07e1780')
+
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('py-biopython', type=('build', 'run'))
+ depends_on('exonerate')
+ depends_on('blast-plus')
+ depends_on('spades')
+ depends_on('parallel')
+ depends_on('bwa')
+ depends_on('samtools')
+
+ def setup_envionment(self, spack_env, run_env):
+ run_env.set('HYBPIPER_HOME', prefix)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ files = glob.iglob("*.py")
+ for file in files:
+ if os.path.isfile(file):
+ install(file, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/hydra/package.py b/var/spack/repos/builtin/packages/hydra/package.py
index eee346ba49..428f7db386 100644
--- a/var/spack/repos/builtin/packages/hydra/package.py
+++ b/var/spack/repos/builtin/packages/hydra/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Hydra(Package):
+class Hydra(AutotoolsPackage):
"""Hydra is a process management system for starting parallel jobs.
Hydra is designed to natively work with existing launcher daemons
(such as ssh, rsh, fork), as well as natively integrate with resource
@@ -34,12 +34,6 @@ class Hydra(Package):
homepage = "http://www.mpich.org"
url = "http://www.mpich.org/static/downloads/3.2/hydra-3.2.tar.gz"
list_url = "http://www.mpich.org/static/downloads/"
- list_depth = 2
+ list_depth = 1
version('3.2', '4d670916695bf7e3a869cc336a881b39')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/hypre/ibm-ppc64le.patch b/var/spack/repos/builtin/packages/hypre/ibm-ppc64le.patch
new file mode 100644
index 0000000000..b1ade00c09
--- /dev/null
+++ b/var/spack/repos/builtin/packages/hypre/ibm-ppc64le.patch
@@ -0,0 +1,12 @@
+--- hypre-2.11.1/src/config/config.guess 2016-06-09 10:56:18.000000000 -0400
++++ hypre-2.11.1/src/config/config.guess.patch 2017-02-24 22:53:42.718337013 -0500
+@@ -882,6 +882,9 @@
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
++ ppc64le:Linux:*:*)
++ echo powerpc64le-unknown-linux-gnu
++ exit ;;
+ alpha:Linux:*:*)
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ EV5) UNAME_MACHINE=alphaev5 ;;
diff --git a/var/spack/repos/builtin/packages/hypre/package.py b/var/spack/repos/builtin/packages/hypre/package.py
index ed0f665462..8472d64337 100644
--- a/var/spack/repos/builtin/packages/hypre/package.py
+++ b/var/spack/repos/builtin/packages/hypre/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,10 +35,13 @@ class Hypre(Package):
homepage = "http://computation.llnl.gov/project/linear_solvers/software.php"
url = "http://computation.llnl.gov/project/linear_solvers/download/hypre-2.10.0b.tar.gz"
- version('develop', git='https://github.com/LLNL/hypre', tag='master')
+ version('2.12.1', 'c6fcb6d7e57cec1c7ce4a44da885068c', url='https://github.com/LLNL/hypre/archive/v2.12.1.tar.gz')
+ version('2.11.2', 'd507943a1a3ce5681c3308e2f3a6dd34')
version('2.11.1', '3f02ef8fd679239a6723f60b7f796519')
version('2.10.1', 'dc048c4cabb3cd549af72591474ad674')
version('2.10.0b', '768be38793a35bb5d055905b271f5b8e')
+ version('develop', git='https://github.com/LLNL/hypre', tag='master')
+ version('xsdk-0.2.0', git='https://github.com/LLNL/hypre', tag='xsdk-0.2.0')
# hypre does not know how to build shared libraries on Darwin
variant('shared', default=(sys.platform != 'darwin'),
@@ -48,19 +51,19 @@ class Hypre(Package):
description="Use internal Superlu routines")
variant('int64', default=False,
description="Use 64bit integers")
+ variant('mpi', default=True, description='Enable MPI support')
+
+ # Patch to add ppc64le in config.guess
+ patch('ibm-ppc64le.patch', when='@:2.11.1')
- depends_on("mpi")
+ depends_on("mpi", when='+mpi')
depends_on("blas")
depends_on("lapack")
def install(self, spec, prefix):
- os.environ['CC'] = spec['mpi'].mpicc
- os.environ['CXX'] = spec['mpi'].mpicxx
- os.environ['F77'] = spec['mpi'].mpif77
-
# Note: --with-(lapack|blas)_libs= needs space separated list of names
- lapack = spec['lapack'].lapack_libs
- blas = spec['blas'].blas_libs
+ lapack = spec['lapack'].libs
+ blas = spec['blas'].libs
configure_args = [
'--prefix=%s' % prefix,
@@ -70,6 +73,14 @@ class Hypre(Package):
'--with-blas-lib-dirs=%s' % ' '.join(blas.directories)
]
+ if '+mpi' in self.spec:
+ os.environ['CC'] = spec['mpi'].mpicc
+ os.environ['CXX'] = spec['mpi'].mpicxx
+ os.environ['F77'] = spec['mpi'].mpif77
+ configure_args.append('--with-MPI')
+ else:
+ configure_args.append('--without-MPI')
+
if '+int64' in self.spec:
configure_args.append('--enable-bigint')
diff --git a/var/spack/repos/builtin/packages/ibmisc/package.py b/var/spack/repos/builtin/packages/ibmisc/package.py
index f325205507..8fcf7980c8 100644
--- a/var/spack/repos/builtin/packages/ibmisc/package.py
+++ b/var/spack/repos/builtin/packages/ibmisc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,9 @@ class Ibmisc(CMakePackage):
"""Misc. reusable utilities used by IceBin."""
homepage = "https://github.com/citibeth/ibmisc"
- url = "https://github.com/citibeth/ibmisc/tarball/123"
+ url = "https://github.com/citibeth/ibmisc/archive/v0.1.0.tar.gz"
- version('0.1.0', '12f2a32432a11db48e00217df18e59fa')
+ version('0.1.0', '18c63db3e466c5a6fc2db3f903d06ecb')
variant('everytrace', default=False,
description='Report errors through Everytrace')
diff --git a/var/spack/repos/builtin/packages/iceauth/package.py b/var/spack/repos/builtin/packages/iceauth/package.py
index 59c6e0e7b7..a2f919be54 100644
--- a/var/spack/repos/builtin/packages/iceauth/package.py
+++ b/var/spack/repos/builtin/packages/iceauth/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Iceauth(Package):
+class Iceauth(AutotoolsPackage):
"""The iceauth program is used to edit and display the authorization
information used in connecting with ICE. It operates very much
like the xauth program for X11 connection authentication records."""
@@ -40,9 +40,3 @@ class Iceauth(Package):
depends_on('xproto@7.0.22:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/icedtea/package.py b/var/spack/repos/builtin/packages/icedtea/package.py
new file mode 100644
index 0000000000..9bc7da3102
--- /dev/null
+++ b/var/spack/repos/builtin/packages/icedtea/package.py
@@ -0,0 +1,181 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Icedtea(AutotoolsPackage):
+ """The IcedTea project provides a harness to build the source code from
+ http://openjdk.java.net using Free Software build tools and adds a number
+ of key features to the upstream OpenJDK codebase. IcedTea requires an
+ existing IcedTea or OpenJDK install to build."""
+
+ homepage = "http://icedtea.classpath.org/wiki/Main_Page"
+ url = "http://icedtea.wildebeest.org/download/source/icedtea-3.4.0.tar.gz"
+
+ version('3.4.0', 'eba66765b92794495e16b83f23640872')
+
+ provides('java@8', when='@3.4.0:3.99.99')
+ variant('X', default=False, description="Build with GUI support.")
+ variant('shenandoah', default=False,
+ description="Build with the shenandoah gc. Only for version 3+")
+
+ depends_on('pkg-config@0.9.0:', type='build')
+ depends_on('gmake', type='build')
+ depends_on('cups')
+ depends_on('jdk', type='build')
+ # X11 deps required for building even when headless
+ depends_on('libx11', when='~X', type='build')
+ depends_on('xproto', when='~X', type='build')
+ depends_on('libxext', when='~X', type='build')
+ depends_on('libxtst', when='~X', type='build')
+ depends_on('libxi', when='~X', type='build')
+ depends_on('libxt', when='~X', type='build')
+ depends_on('libxinerama', when='~X', type='build')
+ depends_on('libxrender', when='~X', type='build')
+ depends_on('libxcomposite', when='~X', type='build')
+ depends_on('libxau', when='~X', type='build')
+ depends_on('libxdmcp', when='~X', type='build')
+ depends_on('gtkplus+X', when='~X', type='build')
+
+ depends_on('libx11', when='+X')
+ depends_on('xproto', when='+X')
+ depends_on('libxext', when='+X')
+ depends_on('libxtst', when='+X')
+ depends_on('libxi', when='+X')
+ depends_on('libxt', when='+X')
+ depends_on('libxinerama', when='+X')
+ depends_on('libxrender', when='+X')
+ depends_on('libxcomposite', when='+X')
+ depends_on('libxau', when='+X')
+ depends_on('libxdmcp', when='+X')
+ depends_on('gtkplus+X', when='+X')
+
+ depends_on('freetype@2:')
+ depends_on('wget', type='build')
+ depends_on('giflib')
+ depends_on('libpng')
+ depends_on('jpeg')
+ depends_on('lcms')
+ depends_on('zlib')
+ depends_on('alsa-lib')
+
+ force_autoreconf = True
+
+ resource(name='corba', placement='corba_src',
+ sha512=('f0579608ab1342df231c4542dab1c40e648cda8e9780ea584fd476'
+ '79b07c93508cbfa85f0406d8aa8b9d528fc5bd99c9d41469568fbec'
+ '41a6456a13d914ac71c'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/corba.tar.xz',
+ when='@3.4.0')
+ resource(name='hotspot', placement='hotspot_src',
+ sha512=('29bc953d283f0a0a464fa150e2c4d71b0adaa29da67246843d230f3'
+ '70b5a20227fb40ef6a7e3b93f10b0cdec18b0cd2bbbceeaea3c9db4'
+ 'd64c158cc23babbad2'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/hotspot.tar.xz',
+ when='@3.4.0')
+ resource(name='jaxp', placement='jaxp_src',
+ sha512=('ef3ed47815e6d15f40c5947fee1058c252ac673f70b6bf7c30505fa'
+ 'a12fa5cbab8168d816abe7791dc88acec457744883db4c0af23fb21'
+ '66bbb709e870685bcd'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/jaxp.tar.xz',
+ when='@3.4.0')
+ resource(name='jaxws', placement='jaxws_src',
+ sha512=('867cac2919e715190596ae4f73fa42c6cba839ba48ae940adcef20a'
+ 'bfb23ffeeaa2501c4aedc214b3595bc4e2a4eea9fa7e7cac62a3420'
+ 'a11fb30a1f7edc9254'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/jaxws.tar.xz',
+ when='@3.4.0')
+ resource(name='jdk', placement='jdk_src',
+ sha512=('180d7b4435e465d68ed0b420b42dddc598c872075e225b8885ae183'
+ '3fa4ab5034ce5083c4dfba516a21b2d472321b37a01ba92793e17c7'
+ '8e9fddb1e254f12065'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/jdk.tar.xz',
+ when='@3.4.0')
+ resource(name='langtools', placement='langtools_src',
+ sha512=('0663f40b07de88cd7939557bf7fdb92077d7ca2132e369caefa82db'
+ '887261ea02102864d33ec0fef3b2c80dd366d25dbc1a95144139498'
+ 'be581dfabe913e4312'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/langtools.tar.xz',
+ when='@3.4.0')
+ resource(name='openjdk', placement='openjdk_src',
+ sha512=('f3cca223bd39c0202dd1a65a38ca17024b6cb5c82d833946ec1b7d2'
+ '8d205833b4dd2dadde505a1c2384e3b28ff0d21a4f175e064b8ac82'
+ 'aa8a07508e53cdc722'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/openjdk.tar.xz',
+ when='@3.4.0')
+ resource(name='nashorn', placement='nashorn_src',
+ sha512=('79b5095bab447d1911696bc1e328fb72c08764c0139cab14a28c0f6'
+ 'c2e49a2d96bb06fbbb85523b2586672cb0f13709c3158823d5ac3f3'
+ 'fe3f0f88402d3cb246'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/nashorn.tar.xz',
+ when='@3.4.0')
+ resource(name='shenandoah', placement='shenandoah_src',
+ sha512=('0f085e87c63679314ef322b3f4b854792d46539d5530dd75a7fd45b'
+ '8b6d663f58469be2808ea5fb4bf31f6c5369cb78f28e1599f748e19'
+ '31ba7040136306eb20'),
+ url='http://icedtea.wildebeest.org/download/drops/icedtea8/3.4.0/shenandoah.tar.xz',
+ when='@3.4.0')
+
+ def configure_args(self):
+ os.environ['POTENTIAL_CXX'] = os.environ['CXX']
+ os.environ['POTENTIAL_CC'] = os.environ['CC']
+ os.environ['WGET'] = self.spec['wget'].command.path
+ args = []
+ if '~X' in self.spec:
+ args.append('--enable-headless')
+ if '+shenandoah' in self.spec:
+ args.append('--with-hotspot-build=shenandoah')
+ args.append('--with-hotspot-src-zip=' + self.stage[9].archive_file)
+ args.append('--with-hotspot-checksum=no')
+ else:
+ args.append('--with-hotspot-src-zip=' + self.stage[2].archive_file)
+ args.append('--with-hotspot-checksum=no')
+ args += [
+ '--with-corba-src-zip=' + self.stage[1].archive_file,
+ '--with-cobra-checksum=no',
+ '--with-jaxp-src-zip=' + self.stage[3].archive_file,
+ '--with-jaxp-checksum=no',
+ '--with-jaxws-src-zip=' + self.stage[4].archive_file,
+ '--with-jaxws-checksum=no',
+ '--with-jdk-src-zip=' + self.stage[5].archive_file,
+ '--with-jdk-checksum=no',
+ '--with-langtools-src-zip=' + self.stage[6].archive_file,
+ '--with-langtools-checksum=no',
+ '--with-openjdk-src-zip=' + self.stage[7].archive_file,
+ '--with-openjdk-checksum=no',
+ '--with-nashorn-src-zip=' + self.stage[8].archive_file,
+ '--with-nashorn-checksum=no', '--disable-maintainer-mode'
+ '--disable-downloading', '--disable-system-pcsc',
+ '--disable-system-sctp', '--disable-system-kerberos',
+ '--with-jdk-home=' + self.spec['jdk'].prefix
+ ]
+ return args
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('JAVA_HOME', self.spec.prefix)
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.set('JAVA_HOME', self.prefix)
diff --git a/var/spack/repos/builtin/packages/icet/package.py b/var/spack/repos/builtin/packages/icet/package.py
index f8260f1951..d8591a2411 100644
--- a/var/spack/repos/builtin/packages/icet/package.py
+++ b/var/spack/repos/builtin/packages/icet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class Icet(CMakePackage):
sort-last parallel rendering library."""
homepage = "http://icet.sandia.gov"
- url = "https://example.com/icet-1.2.3.tar.gz"
+ url = "https://gitlab.kitware.com/icet/icet/repository/archive.tar.bz2?ref=IceT-2.1.1"
version('develop', branch='master',
git='https://gitlab.kitware.com/icet/icet.git')
@@ -38,9 +38,9 @@ class Icet(CMakePackage):
depends_on('mpi')
- def url_for_version(self, version):
- return ("https://gitlab.kitware.com/icet/icet/repository/"
- "archive.tar.bz2?ref=IceT-{0}".format(version.dotted))
-
def cmake_args(self):
return ['-DICET_USE_OPENGL:BOOL=OFF']
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Work-around for ill-placed CMake modules"""
+ spack_env.prepend_path('CMAKE_PREFIX_PATH', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/ico/package.py b/var/spack/repos/builtin/packages/ico/package.py
index 5e523575ca..7f627f5921 100644
--- a/var/spack/repos/builtin/packages/ico/package.py
+++ b/var/spack/repos/builtin/packages/ico/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Ico(Package):
+class Ico(AutotoolsPackage):
"""ico is a simple animation program that may be used for testing various
X11 operations and extensions. It displays a wire-frame rotating
polyhedron, with hidden lines removed, or a solid-fill polyhedron with
@@ -41,9 +41,3 @@ class Ico(Package):
depends_on('xproto@7.0.22:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/icu4c/package.py b/var/spack/repos/builtin/packages/icu4c/package.py
index e2fcb7bd5f..f8dcb52805 100644
--- a/var/spack/repos/builtin/packages/icu4c/package.py
+++ b/var/spack/repos/builtin/packages/icu4c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,24 @@
from spack import *
-class Icu4c(Package):
+class Icu4c(AutotoolsPackage):
"""ICU is a mature, widely used set of C/C++ and Java libraries providing
Unicode and Globalization support for software applications. ICU4C is the
C/C++ interface."""
homepage = "http://site.icu-project.org/"
url = "http://download.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.tgz"
+ list_url = "http://download.icu-project.org/files/icu4c"
+ list_depth = 2
+ version('58.2', 'fac212b32b7ec7ab007a12dff1f3aea1')
version('57.1', '976734806026a4ef8bdd17937c8898b9')
- def url_for_version(self, version):
- base_url = "http://download.icu-project.org/files/icu4c"
- return "{0}/{1}/icu4c-{2}-src.tgz".format(
- base_url, version, version.underscored)
+ configure_directory = 'source'
- def install(self, spec, prefix):
- with working_dir('source'):
- configure('--prefix={0}'.format(prefix),
- '--enable-rpath')
+ def url_for_version(self, version):
+ url = "http://download.icu-project.org/files/icu4c/{0}/icu4c-{1}-src.tgz"
+ return url.format(version.dotted, version.underscored)
- make()
- make('check')
- make('install')
+ def configure_args(self):
+ return ['--enable-rpath']
diff --git a/var/spack/repos/builtin/packages/id3lib/id3lib-3.8.3_gcc4.diff b/var/spack/repos/builtin/packages/id3lib/id3lib-3.8.3_gcc4.diff
new file mode 100644
index 0000000000..fc14fa10de
--- /dev/null
+++ b/var/spack/repos/builtin/packages/id3lib/id3lib-3.8.3_gcc4.diff
@@ -0,0 +1,102 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2008-11-21
+Initial Package Version: 3.8.3
+Upstream Status: unknown
+Origin: fedora
+Description: Allows it to compile with gcc-4.3.
+
+diff -up id3lib-3.8.3/include/id3/id3lib_strings.h~ id3lib-3.8.3/include/id3/id3lib_strings.h
+--- id3lib-3.8.3/include/id3/id3lib_strings.h~ 2003-03-02 02:23:00.000000000 +0200
++++ id3lib-3.8.3/include/id3/id3lib_strings.h 2008-01-04 01:30:52.000000000 +0200
+@@ -29,6 +29,7 @@
+ #ifndef _ID3LIB_STRINGS_H_
+ #define _ID3LIB_STRINGS_H_
+
++#include <cstring>
+ #include <string>
+
+ #if (defined(__GNUC__) && (__GNUC__ >= 3) || (defined(_MSC_VER) && _MSC_VER > 1000))
+diff -up id3lib-3.8.3/configure.in~ id3lib-3.8.3/configure.in
+--- id3lib-3.8.3/configure.in~ 2008-01-04 11:39:01.000000000 +0100
++++ id3lib-3.8.3/configure.in 2008-01-04 11:39:01.000000000 +0100
+@@ -227,7 +227,6 @@ AC_CHECK_HEADERS(fstream iostream iomani
+ )
+ AC_CHECK_HEADERS( \
+ string \
+- iomanip.h \
+ ,,AC_MSG_ERROR([Missing a vital header file for id3lib])
+ )
+
+diff -up id3lib-3.8.3/configure~ id3lib-3.8.3/configure
+--- id3lib-3.8.3/configure~ 2008-01-04 11:39:10.000000000 +0100
++++ id3lib-3.8.3/configure 2008-01-04 11:39:10.000000000 +0100
+@@ -22976,7 +22976,6 @@ done
+
+ for ac_header in \
+ string \
+- iomanip.h \
+
+ do
+ as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+diff -up id3lib-3.8.3/include/id3/writers.h~ id3lib-3.8.3/include/id3/writers.h
+--- id3lib-3.8.3/include/id3/writers.h~ 2008-01-04 11:59:39.000000000 +0100
++++ id3lib-3.8.3/include/id3/writers.h 2008-01-04 11:59:39.000000000 +0100
+@@ -28,9 +28,9 @@
+ #ifndef _ID3LIB_WRITERS_H_
+ #define _ID3LIB_WRITERS_H_
+
++#include <cstring>
+ #include "id3/writer.h"
+ #include "id3/id3lib_streams.h"
+-//#include <string.h>
+
+ class ID3_CPP_EXPORT ID3_OStreamWriter : public ID3_Writer
+ {
+diff -up id3lib-3.8.3/examples/demo_info.cpp~ id3lib-3.8.3/examples/demo_info.cpp
+--- id3lib-3.8.3/examples/demo_info.cpp~ 2008-01-04 12:00:56.000000000 +0100
++++ id3lib-3.8.3/examples/demo_info.cpp 2008-01-04 12:00:56.000000000 +0100
+@@ -309,7 +309,7 @@ void PrintInformation(const ID3_Tag &myT
+
+ #define DEBUG
+
+-int main( unsigned int argc, char * const argv[])
++int main(int argc, char * const argv[])
+ {
+ ID3D_INIT_DOUT();
+
+diff -up id3lib-3.8.3/examples/demo_copy.cpp~ id3lib-3.8.3/examples/demo_copy.cpp
+--- id3lib-3.8.3/examples/demo_copy.cpp~ 2008-01-04 12:01:26.000000000 +0100
++++ id3lib-3.8.3/examples/demo_copy.cpp 2008-01-04 12:01:26.000000000 +0100
+@@ -81,7 +81,7 @@ void DisplayTags(ostream &os, luint nTag
+ }
+ }
+
+-int main( unsigned int argc, char * const argv[])
++int main(int argc, char * const argv[])
+ {
+ int ulFlag = ID3TT_ID3;
+ ID3D_INIT_DOUT();
+diff -up id3lib-3.8.3/examples/demo_convert.cpp~ id3lib-3.8.3/examples/demo_convert.cpp
+--- id3lib-3.8.3/examples/demo_convert.cpp~ 2008-01-04 12:01:20.000000000 +0100
++++ id3lib-3.8.3/examples/demo_convert.cpp 2008-01-04 12:01:20.000000000 +0100
+@@ -84,7 +84,7 @@ void DisplayTags(ostream &os, luint nTag
+ }
+ }
+
+-int main( unsigned int argc, char * const argv[])
++int main(int argc, char * const argv[])
+ {
+ flags_t ulFlag = ID3TT_ALL;
+ gengetopt_args_info args;
+diff -up id3lib-3.8.3/examples/demo_tag.cpp~ id3lib-3.8.3/examples/demo_tag.cpp
+--- id3lib-3.8.3/examples/demo_tag.cpp~ 2008-01-04 12:01:41.000000000 +0100
++++ id3lib-3.8.3/examples/demo_tag.cpp 2008-01-04 12:01:41.000000000 +0100
+@@ -46,7 +46,7 @@ void DisplayTags(ostream &os, luint nTag
+ os << "v2";
+ }
+
+-int main( unsigned int argc, char * const argv[])
++int main(int argc, char * const argv[])
+ {
+ int ulFlag = ID3TT_ID3;
+ ID3D_INIT_DOUT();
diff --git a/var/spack/repos/builtin/packages/id3lib/package.py b/var/spack/repos/builtin/packages/id3lib/package.py
new file mode 100644
index 0000000000..da4c513c63
--- /dev/null
+++ b/var/spack/repos/builtin/packages/id3lib/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Id3lib(AutotoolsPackage):
+ """Library for manipulating ID3v1 and ID3v2 tags"""
+
+ homepage = "http://id3lib.sourceforge.net/"
+ url = "https://downloads.sourceforge.net/project/id3lib/id3lib/3.8.3/id3lib-3.8.3.tar.gz"
+
+ version('3.8.3', '19f27ddd2dda4b2d26a559a4f0f402a7')
+
+ depends_on('zlib')
+
+ # http://connie.slackware.com/~alien/slackbuilds/id3lib/build/id3lib-3.8.3_gcc4.diff
+ # this is due to some changes in the c++ standard library headers
+ patch("id3lib-3.8.3_gcc4.diff")
diff --git a/var/spack/repos/builtin/packages/idba/package.py b/var/spack/repos/builtin/packages/idba/package.py
new file mode 100644
index 0000000000..d886ac0455
--- /dev/null
+++ b/var/spack/repos/builtin/packages/idba/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Idba(AutotoolsPackage):
+ """IDBA is a practical iterative De Bruijn Graph De Novo Assembler for
+ sequence assembly in bioinfomatics."""
+
+ homepage = "http://i.cs.hku.hk/~alse/hkubrg/projects/idba/"
+ url = "https://github.com/loneknightpy/idba/archive/1.1.3.tar.gz"
+
+ version('1.1.3', '303d9b4af7a7498b56ac9698028b4e15')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
diff --git a/var/spack/repos/builtin/packages/igraph/package.py b/var/spack/repos/builtin/packages/igraph/package.py
new file mode 100644
index 0000000000..4ec2e71555
--- /dev/null
+++ b/var/spack/repos/builtin/packages/igraph/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Igraph(AutotoolsPackage):
+ """igraph is a library for creating and manipulating graphs."""
+
+ homepage = "http://igraph.org/"
+ url = "https://github.com/igraph/igraph/releases/download/0.7.1/igraph-0.7.1.tar.gz"
+
+ version('0.7.1', '4f6e7c16b45fce8ed423516a9786e4e8')
+
+ depends_on('libxml2')
diff --git a/var/spack/repos/builtin/packages/ilmbase/package.py b/var/spack/repos/builtin/packages/ilmbase/package.py
index 873c830623..75e52d66c2 100644
--- a/var/spack/repos/builtin/packages/ilmbase/package.py
+++ b/var/spack/repos/builtin/packages/ilmbase/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Ilmbase(Package):
+class Ilmbase(AutotoolsPackage):
"""OpenEXR ILM Base libraries (high dynamic-range image file format)"""
homepage = "http://www.openexr.com/"
@@ -36,7 +36,3 @@ class Ilmbase(Package):
version('2.0.1', '74c0d0d2873960bd0dc1993f8e03f0ae')
version('1.0.2', '26c133ee8ca48e1196fbfb3ffe292ab4')
version('0.9.0', '4df45f8116cb7a013b286caf6da30a2e')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
- make('install')
diff --git a/var/spack/repos/builtin/packages/image-magick/package.py b/var/spack/repos/builtin/packages/image-magick/package.py
index 9efb0cd368..24b92132a0 100644
--- a/var/spack/repos/builtin/packages/image-magick/package.py
+++ b/var/spack/repos/builtin/packages/image-magick/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,14 @@
from spack import *
-class ImageMagick(Package):
+class ImageMagick(AutotoolsPackage):
"""ImageMagick is a software suite to create, edit, compose,
or convert bitmap images."""
homepage = "http://www.imagemagick.org"
url = "https://github.com/ImageMagick/ImageMagick/archive/7.0.2-7.tar.gz"
+ version('7.0.5-9', '0bcde35180778a61367599e46ff40cb4')
version('7.0.2-7', 'c59cdc8df50e481b2bd1afe09ac24c08')
version('7.0.2-6', 'aa5689129c39a5146a3212bf5f26d478')
@@ -45,13 +46,9 @@ class ImageMagick(Package):
depends_on('ghostscript')
depends_on('ghostscript-fonts')
- def url_for_version(self, version):
- return "https://github.com/ImageMagick/ImageMagick/archive/{0}.tar.gz".format(version)
-
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
gs_font_dir = join_path(spec['ghostscript-fonts'].prefix.share, "font")
- configure('--prefix={0}'.format(prefix),
- '--with-gs-font-dir={0}'.format(gs_font_dir))
- make()
- make('check')
- make('install')
+ return [
+ '--with-gs-font-dir={0}'.format(gs_font_dir)
+ ]
diff --git a/var/spack/repos/builtin/packages/imake/package.py b/var/spack/repos/builtin/packages/imake/package.py
index 32542b0391..f3da05200b 100644
--- a/var/spack/repos/builtin/packages/imake/package.py
+++ b/var/spack/repos/builtin/packages/imake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Imake(Package):
+class Imake(AutotoolsPackage):
"""The imake build system."""
homepage = "http://www.snake.net/software/imake-stuff/"
@@ -35,9 +35,3 @@ class Imake(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/impute2/package.py b/var/spack/repos/builtin/packages/impute2/package.py
new file mode 100644
index 0000000000..44993a306f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/impute2/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Impute2(Package):
+ """IMPUTE2 is a genotype imputation and haplotype phasing program based on
+ ideas from Howie et al. 2009."""
+
+ homepage = "https://mathgen.stats.ox.ac.uk/impute/impute_v2.html#home"
+ url = "https://mathgen.stats.ox.ac.uk/impute/impute_v2.3.2_x86_64_dynamic.tgz"
+
+ version('2.3.2', '0e1bafb8f63eb5cf9ae02ab761af58aa')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('impute2', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/infernal/package.py b/var/spack/repos/builtin/packages/infernal/package.py
new file mode 100644
index 0000000000..f84722964d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/infernal/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Infernal(AutotoolsPackage):
+ """Infernal (INFERence of RNA ALignment) is for searching DNA sequence
+ databases for RNA structure and sequence similarities. It is an
+ implementation of a special case of profile stochastic context-free
+ grammars called covariance models (CMs)."""
+
+ homepage = "http://eddylab.org/infernal/"
+ url = "http://eddylab.org/infernal/infernal-1.1.2.tar.gz"
+
+ version('1.1.2', 'a73e6bbab0c4b79af2cc4c0aabb8accc')
+
+ variant('mpi', default=False, description='Enable MPI parallel support')
+
+ depends_on('mpi', when='+mpi')
+
+ def configure_args(self):
+ args = []
+ if '+mpi' in self.spec:
+ args.append('--enable-mpi')
+ else:
+ args.append('--disable-mpi')
+ return args
diff --git a/var/spack/repos/builtin/packages/inputproto/package.py b/var/spack/repos/builtin/packages/inputproto/package.py
index 915986ef68..f60b08cacf 100644
--- a/var/spack/repos/builtin/packages/inputproto/package.py
+++ b/var/spack/repos/builtin/packages/inputproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Inputproto(Package):
+class Inputproto(AutotoolsPackage):
"""X Input Extension.
This extension defines a protocol to provide additional input devices
@@ -38,8 +38,3 @@ class Inputproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/intel-daal/package.py b/var/spack/repos/builtin/packages/intel-daal/package.py
new file mode 100644
index 0000000000..d528f88461
--- /dev/null
+++ b/var/spack/repos/builtin/packages/intel-daal/package.py
@@ -0,0 +1,86 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+from spack import *
+from spack.environment import EnvironmentModifications
+
+
+class IntelDaal(IntelPackage):
+ """Intel Data Analytics Acceleration Library."""
+
+ homepage = "https://software.intel.com/en-us/daal"
+
+ version('2018.0.128', '5779e670f67c33cc1c6cdcdca5e4636e',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12072/l_daal_2018.0.128.tgz")
+ version('2017.4.239', 'b47e9b92d948ee312e8a98170a1c0640',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12148/l_daal_2017.4.239.tgz")
+ version('2017.3.196', '93221eaeb560917a129d42fb2cf02500',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11546/l_daal_2017.3.196.tgz")
+ version('2017.2.174', 'f067d5d7b0f70914fba1f78da0361065',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11308/l_daal_2017.2.174.tgz")
+ version('2017.1.132', '56eef8cc45219f92a27de03ae914eba4',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10983/l_daal_2017.1.132.tgz")
+ version('2017.0.098', 'b4eb234de12beff4a5cba4b81ea60673',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9664/l_daal_2017.0.098.tgz")
+ version('2016.3.210', 'ad747c0dd97dace4cad03cf2266cad28',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9099/l_daal_2016.3.210.tgz")
+ version('2016.2.181', 'aad2aa70e5599ebfe6f85b29d8719d46',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8687/l_daal_2016.2.181.tgz")
+
+ provides('daal')
+
+ @property
+ def license_required(self):
+ # The Intel libraries are provided without requiring a license as of
+ # version 2017.2. Trying to specify the license will fail. See:
+ # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
+ if self.version >= Version('2017.2'):
+ return False
+ else:
+ return True
+
+ def setup_environment(self, spack_env, run_env):
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source daal/bin/daalvars.sh intel64
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ daalvars = os.path.join(self.prefix.daal.bin, 'daalvars.sh')
+
+ if os.path.isfile(daalvars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ daalvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-gpu-tools/package.py b/var/spack/repos/builtin/packages/intel-gpu-tools/package.py
index 132e29839b..5238e57e32 100644
--- a/var/spack/repos/builtin/packages/intel-gpu-tools/package.py
+++ b/var/spack/repos/builtin/packages/intel-gpu-tools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
-class IntelGpuTools(Package):
+class IntelGpuTools(AutotoolsPackage):
"""Intel GPU Tools is a collection of tools for development and testing of
the Intel DRM driver. There are many macro-level test suites that get used
against the driver, including xtest, rendercheck, piglit, and oglconform,
@@ -41,7 +42,7 @@ class IntelGpuTools(Package):
version('1.16', '3996f10fc86a28ec59e1cf7b227dad78')
depends_on('libdrm@2.4.64:')
- depends_on('libpciaccess@0.10:')
+ depends_on('libpciaccess@0.10:', when=(sys.platform != 'darwin'))
depends_on('cairo@1.12.0:')
depends_on('glib')
@@ -58,10 +59,3 @@ class IntelGpuTools(Package):
# python-docutils
# x11proto-dri2-dev
# xutils-dev
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/intel-ipp/package.py b/var/spack/repos/builtin/packages/intel-ipp/package.py
new file mode 100644
index 0000000000..ae7a1358e1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/intel-ipp/package.py
@@ -0,0 +1,82 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+from spack import *
+from spack.environment import EnvironmentModifications
+
+
+class IntelIpp(IntelPackage):
+ """Intel Integrated Performance Primitives."""
+
+ homepage = "https://software.intel.com/en-us/intel-ipp"
+
+ version('2018.0.128', 'e64190bc9041b52d9eed7e8ee91bf1de',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12071/l_ipp_2018.0.128.tgz')
+ version('2017.3.196', '47e53bd1a2740041f4d0be7c36b61a18',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11545/l_ipp_2017.3.196.tgz")
+ version('2017.2.174', '8ad7753ee30c5176c4931070334144bc',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11307/l_ipp_2017.2.174.tgz")
+ version('2017.1.132', '9fbbaa402b8d16f4cb4be9aee2f557c2',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11031/l_ipp_2017.1.132.tgz")
+ version('2017.0.098', 'e7be757ebe351d9f9beed7efdc7b7118',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9663/l_ipp_2017.0.098.tgz")
+ version('9.0.3.210', '0e1520dd3de7f811a6ef6ebc7aa429a3',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9067/l_ipp_9.0.3.210.tgz")
+
+ provides('ipp')
+
+ @property
+ def license_required(self):
+ # The Intel libraries are provided without requiring a license as of
+ # version 2017.2. Trying to specify the license will fail. See:
+ # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
+ if self.version >= Version('2017.2'):
+ return False
+ else:
+ return True
+
+ def setup_environment(self, spack_env, run_env):
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source ipp/bin/ippvars.sh intel64
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ ippvars = os.path.join(self.prefix.ipp.bin, 'ippvars.sh')
+
+ if os.path.isfile(ippvars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ ippvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-mkl/package.py b/var/spack/repos/builtin/packages/intel-mkl/package.py
index f369e10d38..e2c2b8d46a 100644
--- a/var/spack/repos/builtin/packages/intel-mkl/package.py
+++ b/var/spack/repos/builtin/packages/intel-mkl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,78 +22,200 @@
# 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 *
import os
+import sys
-from spack.pkg.builtin.intel import IntelInstaller
-
-
-class IntelMkl(IntelInstaller):
- """Intel Math Kernel Library.
+from spack import *
+from spack.environment import EnvironmentModifications
- Note: You will have to add the download file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html.
- To set the threading layer at run time set MKL_THREADING_LAYER
- variable to one of the following values: INTEL (default), SEQUENTIAL, PGI.
- To set interface layer at run time, use set the MKL_INTERFACE_LAYER
- variable to LP64 (default) or ILP64.
- """
+class IntelMkl(IntelPackage):
+ """Intel Math Kernel Library."""
homepage = "https://software.intel.com/en-us/intel-mkl"
- version('11.3.2.181', '536dbd82896d6facc16de8f961d17d65',
- url="file://%s/l_mkl_11.3.2.181.tgz" % os.getcwd())
+ version('2018.0.128', '0fa23779816a0f2ee23a396fc1af9978',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12070/l_mkl_2018.0.128.tgz")
+ version('2017.4.239', '3066272dd0ad3da7961b3d782e1fab3b',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12147/l_mkl_2017.4.239.tgz")
+ version('2017.3.196', '4a2eb4bee789391d9c07d7c348a80702',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11544/l_mkl_2017.3.196.tgz")
+ version('2017.2.174', 'ef39a12dcbffe5f4a0ef141b8759208c',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11306/l_mkl_2017.2.174.tgz")
+ version('2017.1.132', '7911c0f777c4cb04225bf4518088939e',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11024/l_mkl_2017.1.132.tgz")
+ version('2017.0.098', '3cdcb739ab5ab1e047eb130b9ffdd8d0',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9662/l_mkl_2017.0.098.tgz")
version('11.3.3.210', 'f72546df27f5ebb0941b5d21fd804e34',
- url="file://%s/l_mkl_11.3.3.210.tgz" % os.getcwd())
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9068/l_mkl_11.3.3.210.tgz")
+ version('11.3.2.181', '536dbd82896d6facc16de8f961d17d65',
+ url="http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8711/l_mkl_11.3.2.181.tgz")
variant('shared', default=True, description='Builds shared library')
variant('ilp64', default=False, description='64 bit integers')
- variant('openmp', default=False, description='OpenMP multithreading layer')
+ variant(
+ 'threads', default='none',
+ description='Multithreading support',
+ values=('openmp', 'none'),
+ multi=False
+ )
- # virtual dependency
provides('blas')
provides('lapack')
+ provides('scalapack')
provides('mkl')
- # TODO: MKL also provides implementation of Scalapack.
+
+ if sys.platform == 'darwin':
+ # there is no libmkl_gnu_thread on macOS
+ conflicts('threads=openmp', when='%gcc')
+
+ @property
+ def license_required(self):
+ # The Intel libraries are provided without requiring a license as of
+ # version 2017.2. Trying to specify the license will fail. See:
+ # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
+ if self.version >= Version('2017.2'):
+ return False
+ else:
+ return True
@property
def blas_libs(self):
- shared = True if '+shared' in self.spec else False
- suffix = dso_suffix if '+shared' in self.spec else 'a'
- mkl_integer = ['libmkl_intel_ilp64'] if '+ilp64' in self.spec else ['libmkl_intel_lp64'] # NOQA: ignore=E501
+ spec = self.spec
+ prefix = self.prefix
+ shared = '+shared' in spec
+
+ if '+ilp64' in spec:
+ mkl_integer = ['libmkl_intel_ilp64']
+ else:
+ mkl_integer = ['libmkl_intel_lp64']
+
mkl_threading = ['libmkl_sequential']
- if '+openmp' in self.spec:
- mkl_threading = ['libmkl_intel_thread', 'libiomp5'] if '%intel' in self.spec else ['libmkl_gnu_thread'] # NOQA: ignore=E501
+
+ omp_libs = LibraryList([])
+
+ if spec.satisfies('threads=openmp'):
+ if '%intel' in spec:
+ mkl_threading = ['libmkl_intel_thread']
+ omp_threading = ['libiomp5']
+
+ if sys.platform != 'darwin':
+ omp_root = prefix.compilers_and_libraries.linux.lib.intel64
+ else:
+ omp_root = prefix.lib
+ omp_libs = find_libraries(
+ omp_threading, root=omp_root, shared=shared)
+ elif '%gcc' in spec:
+ mkl_threading = ['libmkl_gnu_thread']
+
+ gcc = Executable(self.compiler.cc)
+ libgomp = gcc('--print-file-name', 'libgomp.{0}'.format(
+ dso_suffix), output=str)
+ omp_libs = LibraryList(libgomp)
+
# TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
+
+ if sys.platform != 'darwin':
+ mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
+ else:
+ mkl_root = prefix.mkl.lib
+
mkl_libs = find_libraries(
mkl_integer + ['libmkl_core'] + mkl_threading,
- root=join_path(self.prefix.lib, 'intel64'),
+ root=mkl_root,
shared=shared
)
- system_libs = [
- 'libpthread.{0}'.format(suffix),
- 'libm.{0}'.format(suffix),
- 'libdl.{0}'.format(suffix)
- ]
- return mkl_libs + system_libs
+
+ # Intel MKL link line advisor recommends these system libraries
+ system_libs = find_system_libraries(
+ ['libpthread', 'libm', 'libdl'],
+ shared=shared
+ )
+
+ return mkl_libs + omp_libs + system_libs
@property
def lapack_libs(self):
return self.blas_libs
- def install(self, spec, prefix):
- self.intel_prefix = os.path.join(prefix, "pkg")
- IntelInstaller.install(self, spec, prefix)
+ @property
+ def scalapack_libs(self):
+ libnames = ['libmkl_scalapack']
+
+ # Intel MKL does not directly depend on mpi but the scalapack
+ # interface does and the corresponding BLACS library changes
+ # depending on the MPI implementation we are using. We need then to
+ # inspect the root package which asked for Scalapack and check which
+ # MPI it depends on.
+ root = self.spec.root
+ if sys.platform == 'darwin' and '^mpich' in root:
+ # MKL 2018 supports only MPICH on darwin
+ libnames.append('libmkl_blacs_mpich')
+ elif '^openmpi' in root:
+ libnames.append('libmkl_blacs_openmpi')
+ elif '^mpich@1' in root:
+ libnames.append('libmkl_blacs')
+ elif '^mpich@2:' in root:
+ libnames.append('libmkl_blacs_intelmpi')
+ elif '^mvapich2' in root:
+ libnames.append('libmkl_blacs_intelmpi')
+ elif '^mpt' in root:
+ libnames.append('libmkl_blacs_sgimpt')
+ elif '^intel-mpi' in root:
+ libnames.append('libmkl_blacs_intelmpi')
+ else:
+ raise InstallError('No MPI found for scalapack')
+
+ integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
+ mkl_root = self.prefix.mkl.lib if sys.platform == 'darwin' else \
+ self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
+
+ shared = True if '+shared' in self.spec else False
- mkl_dir = os.path.join(self.intel_prefix, "mkl")
- for f in os.listdir(mkl_dir):
- os.symlink(os.path.join(mkl_dir, f), os.path.join(self.prefix, f))
+ libs = find_libraries(
+ ['{0}_{1}'.format(l, integer) for l in libnames],
+ root=mkl_root,
+ shared=shared
+ )
+
+ return libs
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
# set up MKLROOT for everyone using MKL package
- spack_env.set('MKLROOT', self.prefix)
+ if sys.platform == 'darwin':
+ mkl_lib = self.prefix.mkl.lib
+ mkl_root = self.prefix.mkl
+ else:
+ mkl_lib = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
+ mkl_root = self.prefix.compilers_and_libraries.linux.mkl
+
+ spack_env.set('MKLROOT', mkl_root)
+ spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_lib)
+
+ def setup_environment(self, spack_env, run_env):
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source mkl/bin/mklvars.sh intel64
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ mklvars = os.path.join(self.prefix.mkl.bin, 'mklvars.sh')
- def setup_environment(self, spack_env, env):
- env.set('MKLROOT', self.prefix)
+ if sys.platform == 'darwin':
+ if os.path.isfile(mklvars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ mklvars))
+ else:
+ if os.path.isfile(mklvars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ mklvars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intel-mpi/package.py b/var/spack/repos/builtin/packages/intel-mpi/package.py
new file mode 100644
index 0000000000..42b9872b30
--- /dev/null
+++ b/var/spack/repos/builtin/packages/intel-mpi/package.py
@@ -0,0 +1,137 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+from spack import *
+from spack.environment import EnvironmentModifications
+
+
+class IntelMpi(IntelPackage):
+ """Intel MPI"""
+
+ homepage = "https://software.intel.com/en-us/intel-mpi-library"
+
+ version('2018.0.128', '15b46fc6a3014595de897aa48d3a658b',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12120/l_mpi_2018.0.128.tgz')
+ version('2017.4.239', '460a9ef1b3599d60b4d696e3f0f2a14d',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12209/l_mpi_2017.4.239.tgz')
+ version('2017.3.196', '721ecd5f6afa385e038777e5b5361dfb',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11595/l_mpi_2017.3.196.tgz')
+ version('2017.2.174', 'b6c2e62c3fb9b1558ede72ccf72cf1d6',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11334/l_mpi_2017.2.174.tgz')
+ version('2017.1.132', 'd5e941ac2bcf7c5576f85f6bcfee4c18',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11014/l_mpi_2017.1.132.tgz')
+ version('5.1.3.223', '4316e78533a932081b1a86368e890800',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz')
+
+ provides('mpi')
+
+ @property
+ def license_required(self):
+ # The Intel libraries are provided without requiring a license as of
+ # version 2017.2. Trying to specify the license will fail. See:
+ # https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries
+ if self.version >= Version('2017.2'):
+ return False
+ else:
+ return True
+
+ @property
+ def mpi_libs(self):
+ mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
+ query_parameters = self.spec.last_query.extra_parameters
+ libraries = ['libmpifort', 'libmpi']
+
+ if 'cxx' in query_parameters:
+ libraries = ['libmpicxx'] + libraries
+
+ return find_libraries(
+ libraries, root=mpi_root, shared=True, recurse=True
+ )
+
+ @property
+ def mpi_headers(self):
+ # recurse from self.prefix will find too many things for all the
+ # supported sub-architectures like 'mic'
+ mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
+ return find_headers('mpi', root=mpi_root, recurse=False)
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.set('I_MPI_CC', spack_cc)
+ spack_env.set('I_MPI_CXX', spack_cxx)
+ spack_env.set('I_MPI_F77', spack_fc)
+ spack_env.set('I_MPI_F90', spack_f77)
+ spack_env.set('I_MPI_FC', spack_fc)
+
+ def setup_dependent_package(self, module, dep_spec):
+ # Intel comes with 2 different flavors of MPI wrappers:
+ #
+ # * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
+ # the Intel compilers.
+ # * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
+ # compilers to wrap using I_MPI_CC and friends. By default,
+ # wraps around the GCC compilers.
+ #
+ # In theory, these should be equivalent as long as I_MPI_CC
+ # and friends are set to point to the Intel compilers, but in
+ # practice, mpicc fails to compile some applications while
+ # mpiicc works.
+ bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
+
+ if self.compiler.name == 'intel':
+ self.spec.mpicc = bindir.mpiicc
+ self.spec.mpicxx = bindir.mpiicpc
+ self.spec.mpifc = bindir.mpiifort
+ self.spec.mpif77 = bindir.mpiifort
+ else:
+ self.spec.mpicc = bindir.mpicc
+ self.spec.mpicxx = bindir.mpicxx
+ self.spec.mpifc = bindir.mpif90
+ self.spec.mpif77 = bindir.mpif77
+
+ def setup_environment(self, spack_env, run_env):
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source compilers_and_libraries/linux/mpi/intel64/bin/mpivars.sh
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ mpivars = os.path.join(
+ self.prefix.compilers_and_libraries.linux.mpi.intel64.bin,
+ 'mpivars.sh')
+
+ if os.path.isfile(mpivars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ mpivars))
diff --git a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
index 8564eeb941..9828eaf6c0 100644
--- a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
+++ b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,216 +22,387 @@
# 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 *
+import glob
import os
-import re
-
-from spack.pkg.builtin.intel import IntelInstaller, filter_pick, \
- get_all_components
+from spack import *
+from spack.environment import EnvironmentModifications
-class IntelParallelStudio(IntelInstaller):
- """Intel Parallel Studio.
- Note: You will have to add the download file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+class IntelParallelStudio(IntelPackage):
+ """Intel Parallel Studio."""
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
- version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542')
- version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542')
- version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85')
- version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01')
- version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01')
- version('composer.2016.3', '3208eeabee951fc27579177b593cefe9')
- version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3')
- version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3')
- version('composer.2016.2', '1133fb831312eb519f7da897fec223fa')
- version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832')
- version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832')
-
- variant('rpath', default=True, description="Add rpath to .cfg files")
+ version('professional.2018.0', '9a233854e9218937bc5f46f02b3c7542',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12062/parallel_studio_xe_2018_professional_edition.tgz')
+ version('cluster.2018.0', 'fa9baeb83dd2e8e4a464e3db38f28d0f',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12058/parallel_studio_xe_2018_cluster_edition.tgz')
+ version('composer.2018.0', '31ba768fba6e7322957b03feaa3add28',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
+ version('professional.2017.4', '27398416078e1e4005afced3e9a6df7e',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
+ version('cluster.2017.4', '27398416078e1e4005afced3e9a6df7e',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11537/parallel_studio_xe_2017_update4.tgz')
+ version('composer.2017.4', 'd03d351809e182c481dc65e07376d9a2',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
+ version('professional.2017.3', '691874735458d3e88fe0bcca4438b2a9',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
+ version('cluster.2017.3', '691874735458d3e88fe0bcca4438b2a9',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11460/parallel_studio_xe_2017_update3.tgz')
+ version('composer.2017.3', '52344df122c17ddff3687f84ceb21623',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
+ version('professional.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
+ version('cluster.2017.2', '70e54b33d940a1609ff1d35d3c56e3b3',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11298/parallel_studio_xe_2017_update2.tgz')
+ version('composer.2017.2', '2891ab1ece43eb61b6ab892f07c47f01',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
+ version('professional.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
+ version('cluster.2017.1', '7f75a4a7e2c563be778c377f9d35a542',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10973/parallel_studio_xe_2017_update1.tgz')
+ version('composer.2017.1', '1f31976931ed8ec424ac7c3ef56f5e85',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
+ version('professional.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
+ version('cluster.2017.0', '34c98e3329d6ac57408b738ae1daaa01',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9651/parallel_studio_xe_2017.tgz')
+ version('composer.2017.0', 'b67da0065a17a05f110ed1d15c3c6312',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
+ version('professional.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
+ version('cluster.2016.4', '16a641a06b156bb647c8a56e71f3bb33',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9781/parallel_studio_xe_2016_update4.tgz')
+ version('composer.2016.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
+ version('professional.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
+ version('cluster.2016.3', 'eda19bb0d0d19709197ede58f13443f3',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9061/parallel_studio_xe_2016_update3.tgz')
+ version('composer.2016.3', '3208eeabee951fc27579177b593cefe9',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
+ version('professional.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
+ version('cluster.2016.2', '70be832f2d34c9bf596a5e99d5f2d832',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8676/parallel_studio_xe_2016_update2.tgz')
+ version('composer.2016.2', '1133fb831312eb519f7da897fec223fa',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
+ version('professional.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
+ version('cluster.2015.6', 'd460f362c30017b60f85da2e51ad25bf',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8469/parallel_studio_xe_2015_update6.tgz')
+ version('composer.2015.6', 'da9f8600c18d43d58fba0488844f79c9',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8432/l_compxe_2015.6.233.tgz')
+
+ # Generic Variants
+ variant('rpath', default=True,
+ description='Add rpath to .cfg files')
variant('newdtags', default=False,
- description="Allow use of --enable-new-dtags in MPI wrappers")
- variant('all', default=False,
- description="Install all files with the requested edition")
- variant('mpi', default=True,
- description="Install the Intel MPI library and ITAC tool")
- variant('mkl', default=True, description="Install the Intel MKL library")
- variant('daal',
- default=True, description="Install the Intel DAAL libraries")
- variant('ipp', default=True, description="Install the Intel IPP libraries")
- variant('tools', default=True, description="Install the Intel Advisor, "
- "VTune Amplifier, and Inspector tools")
-
- variant('shared', default=True, description='Builds shared library')
- variant('ilp64', default=False, description='64 bit integers')
- variant('openmp', default=False, description='OpenMP multithreading layer')
-
- provides('mpi', when='@cluster:+mpi')
- provides('mkl', when='+mkl')
+ description='Allow use of --enable-new-dtags in MPI wrappers')
+ variant('shared', default=True,
+ description='Builds shared library')
+ variant('ilp64', default=False,
+ description='64 bit integers')
+ variant(
+ 'threads', default='none',
+ description='Multithreading support',
+ values=('openmp', 'none'),
+ multi=False
+ )
+
+ # Components available in all editions
+ variant('daal', default=True,
+ description='Install the Intel DAAL libraries')
+ variant('gdb', default=False,
+ description='Install the Intel Debugger for Heterogeneous Compute')
+ variant('ipp', default=True,
+ description='Install the Intel IPP libraries')
+ variant('mkl', default=True,
+ description='Install the Intel MKL library')
+ variant('mpi', default=True,
+ description='Install the Intel MPI library')
+ variant('tbb', default=True,
+ description='Install the Intel TBB libraries')
+
+ # Components only available in the Professional and Cluster Editions
+ variant('advisor', default=False,
+ description='Install the Intel Advisor')
+ variant('clck', default=False,
+ description='Install the Intel Cluster Checker')
+ variant('inspector', default=False,
+ description='Install the Intel Inspector')
+ variant('itac', default=False,
+ description='Install the Intel Trace Analyzer and Collector')
+ variant('vtune', default=False,
+ description='Install the Intel VTune Amplifier XE')
+
provides('daal', when='+daal')
+
provides('ipp', when='+ipp')
- # virtual dependency
- provides('blas', when='+mkl')
- provides('lapack', when='+mkl')
- # TODO: MKL also provides implementation of Scalapack.
+ provides('mkl', when='+mkl')
+ provides('blas', when='+mkl')
+ provides('lapack', when='+mkl')
+ provides('scalapack', when='+mkl')
+
+ provides('mpi', when='+mpi')
+
+ provides('tbb', when='+tbb')
+
+ # The following components are not available in the Composer Edition
+ conflicts('+advisor', when='@composer.0:composer.9999')
+ conflicts('+clck', when='@composer.0:composer.9999')
+ conflicts('+inspector', when='@composer.0:composer.9999')
+ conflicts('+itac', when='@composer.0:composer.9999')
+ conflicts('+vtune', when='@composer.0:composer.9999')
@property
def blas_libs(self):
- shared = True if '+shared' in self.spec else False
- suffix = dso_suffix if '+shared' in self.spec else 'a'
- mkl_integer = ['libmkl_intel_ilp64'] if '+ilp64' in self.spec else ['libmkl_intel_lp64'] # NOQA: ignore=E501
+ spec = self.spec
+ prefix = self.prefix
+ shared = '+shared' in spec
+
+ if '+ilp64' in spec:
+ mkl_integer = ['libmkl_intel_ilp64']
+ else:
+ mkl_integer = ['libmkl_intel_lp64']
+
mkl_threading = ['libmkl_sequential']
- if '+openmp' in self.spec:
- mkl_threading = ['libmkl_intel_thread', 'libiomp5'] if '%intel' in self.spec else ['libmkl_gnu_thread'] # NOQA: ignore=E501
+
+ omp_libs = LibraryList([])
+
+ if spec.satisfies('threads=openmp'):
+ if '%intel' in spec:
+ mkl_threading = ['libmkl_intel_thread']
+ omp_threading = ['libiomp5']
+
+ omp_root = prefix.compilers_and_libraries.linux.lib.intel64
+ omp_libs = find_libraries(
+ omp_threading, root=omp_root, shared=shared)
+ elif '%gcc' in spec:
+ mkl_threading = ['libmkl_gnu_thread']
+
+ gcc = Executable(self.compiler.cc)
+ omp_libs = gcc('--print-file-name', 'libgomp.{0}'.format(
+ dso_suffix), output=str)
+ omp_libs = LibraryList(omp_libs)
+
# TODO: TBB threading: ['libmkl_tbb_thread', 'libtbb', 'libstdc++']
+
+ mkl_root = prefix.compilers_and_libraries.linux.mkl.lib.intel64
+
mkl_libs = find_libraries(
mkl_integer + ['libmkl_core'] + mkl_threading,
- root=join_path(self.prefix, 'mkl', 'lib', 'intel64'),
+ root=mkl_root,
shared=shared
)
- system_libs = [
- 'libpthread.{0}'.format(suffix),
- 'libm.{0}'.format(suffix),
- 'libdl.{0}'.format(suffix)
- ]
- return mkl_libs + system_libs
+
+ # Intel MKL link line advisor recommends these system libraries
+ system_libs = find_system_libraries(
+ ['libpthread', 'libm', 'libdl'],
+ shared=shared
+ )
+
+ return mkl_libs + omp_libs + system_libs
@property
def lapack_libs(self):
return self.blas_libs
- def url_for_version(self, version):
- """Assume the tarball is in the current directory."""
+ @property
+ def scalapack_libs(self):
+ libnames = ['libmkl_scalapack']
+ if self.spec.satisfies('^openmpi'):
+ libnames.append('libmkl_blacs_openmpi')
+ elif self.spec.satisfies('^mpich@1'):
+ libnames.append('libmkl_blacs')
+ elif self.spec.satisfies('^mpich@2:'):
+ libnames.append('libmkl_blacs_intelmpi')
+ elif self.spec.satisfies('^mvapich2'):
+ libnames.append('libmkl_blacs_intelmpi')
+ elif self.spec.satisfies('^mpt'):
+ libnames.append('libmkl_blacs_sgimpt')
+ # TODO: ^intel-parallel-studio can mean intel mpi, a compiler or a lib
+ # elif self.spec.satisfies('^intel-parallel-studio'):
+ # libnames.append('libmkl_blacs_intelmpi')
+ else:
+ raise InstallError('No MPI found for scalapack')
- version_tuple = str(version).split('.')
- year = int(version_tuple[1])
+ integer = 'ilp64' if '+ilp64' in self.spec else 'lp64'
+ mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64
+ shared = True if '+shared' in self.spec else False
- url = "file://{0}/parallel_studio_xe_{1}".format(
- os.getcwd(), version_tuple[1])
+ libs = find_libraries(
+ ['{0}_{1}'.format(l, integer) for l in libnames],
+ root=mkl_root,
+ shared=shared
+ )
+ return libs
- update_string = ""
- if version_tuple[2] != '0':
- update_string = "_update{0}".format(version_tuple[2])
+ @property
+ def mpi_libs(self):
+ mpi_root = self.prefix.compilers_and_libraries.linux.mpi.lib64
+ query_parameters = self.spec.last_query.extra_parameters
+ libraries = ['libmpifort', 'libmpi']
+
+ if 'cxx' in query_parameters:
+ libraries = ['libmpicxx'] + libraries
+
+ return find_libraries(
+ libraries, root=mpi_root, shared=True, recurse=True
+ )
+
+ @property
+ def mpi_headers(self):
+ # recurse from self.prefix will find too many things for all the
+ # supported sub-architectures like 'mic'
+ mpi_root = self.prefix.compilers_and_libraries.linux.mpi.include64
+ return find_headers('mpi', root=mpi_root, recurse=False)
+
+ @property
+ def components(self):
+ spec = self.spec
+ edition = self.version[0]
+
+ # Intel(R) Compilers
+ components = [
+ # Common files
+ 'intel-comp-',
+ 'intel-openmp',
+
+ # C/C++
+ 'intel-icc',
+
+ # Fortran
+ 'intel-ifort',
+
+ # Parallel Studio Documentation and Licensing Files
+ 'intel-psxe',
+ ]
+
+ # Intel(R) Parallel Studio XE Suite Files and Documentation
+ if edition == 'cluster':
+ components.append('intel-icsxe')
+ elif edition == 'professional':
+ components.extend(['intel-ips', 'intel-ipsc', 'intel-ipsf'])
+ elif edition == 'composer':
+ components.extend([
+ 'intel-compxe', 'intel-ccompxe', 'intel-fcompxe'
+ ])
+
+ # Intel(R) Data Analytics Acceleration Library
+ if '+daal' in spec:
+ components.append('intel-daal')
+
+ # Intel(R) Debugger for Heterogeneous Compute
+ if '+gdb' in spec:
+ components.append('intel-gdb')
+
+ # Intel(R) Integrated Performance Primitives
+ if '+ipp' in spec:
+ components.extend(['intel-ipp', 'intel-crypto-ipp'])
+
+ # Intel(R) Math Kernel Library
+ if '+mkl' in spec:
+ components.append('intel-mkl')
+
+ # Intel(R) MPI Library
+ if '+mpi' in spec:
+ components.extend(['intel-mpi', 'intel-mpirt', 'intel-imb'])
+
+ # Intel(R) Threading Building Blocks
+ if '+tbb' in spec:
+ components.append('intel-tbb')
+
+ # Intel(R) Advisor
+ if '+advisor' in spec:
+ components.append('intel-advisor')
+
+ # Intel(R) Cluster Checker
+ if '+clck' in spec:
+ components.append('intel_clck')
+
+ # Intel(R) Inspector
+ if '+inspector' in spec:
+ components.append('intel-inspector')
+
+ # Intel(R) Trace Analyzer and Collector
+ if '+itac' in spec:
+ components.extend(['intel-itac', 'intel-ta', 'intel-tc'])
+
+ # Intel(R) VTune(TM) Amplifier XE
+ if '+vtune' in spec:
+ components.append('intel-vtune-amplifier-xe')
+
+ return components
+
+ @property
+ def bin_dir(self):
+ """The relative path to the bin directory with symlinks resolved."""
+
+ bin_path = os.path.join(self.prefix.bin, 'icc')
+ absolute_path = os.path.realpath(bin_path) # resolve symlinks
+ relative_path = os.path.relpath(absolute_path, self.prefix)
+ return os.path.dirname(relative_path)
+
+ @property
+ def lib_dir(self):
+ """The relative path to the lib directory with symlinks resolved."""
+
+ lib_path = os.path.join(self.prefix.lib, 'intel64', 'libimf.a')
+ absolute_path = os.path.realpath(lib_path) # resolve symlinks
+ relative_path = os.path.relpath(absolute_path, self.prefix)
+ return os.path.dirname(relative_path)
+
+ @property
+ def license_files(self):
+ spec = self.spec
+ year = self.version[1]
+
+ directories = [
+ 'Licenses',
+ self.bin_dir
+ ]
+
+ if '+advisor' in spec:
+ advisor_dir = 'advisor_xe/licenses'
- if version_tuple[0] == 'composer':
- if year == 2016:
- url += "_composer_edition{0}".format(update_string)
- else:
- url += "{0}_composer_edition".format(update_string)
- else:
- url += update_string
-
- return url + ".tgz"
-
- def check_variants(self, spec):
- error_message = '\t{variant} can not be turned off if "+all" is set'
-
- if self.spec.satisfies('+all'):
- errors = [error_message.format(variant=x)
- for x in ('mpi', 'mkl', 'daal', 'ipp', 'tools')
- if ('~' + x) in self.spec]
- if errors:
- errors = ['incompatible variants given'] + errors
- raise InstallError('\n'.join(errors))
-
- def install(self, spec, prefix):
- self.check_variants(spec)
-
- base_components = "ALL" # when in doubt, install everything
- mpi_components = ""
- mkl_components = ""
- daal_components = ""
- ipp_components = ""
-
- if not spec.satisfies('+all'):
- all_components = get_all_components()
- regex = '(comp|openmp|intel-tbb|icc|ifort|psxe)'
- base_components = \
- filter_pick(all_components, re.compile(regex).search)
- regex = '(icsxe|imb|mpi|itac|intel-ta|intel-tc|clck)'
- mpi_components = \
- filter_pick(all_components, re.compile(regex).search)
- mkl_components = \
- filter_pick(all_components, re.compile('(mkl)').search)
- daal_components = \
- filter_pick(all_components, re.compile('(daal)').search)
- ipp_components = \
- filter_pick(all_components, re.compile('(ipp)').search)
- regex = '(gdb|vtune|inspector|advisor)'
- tool_components = \
- filter_pick(all_components, re.compile(regex).search)
- components = base_components
-
- if not spec.satisfies('+all'):
- if spec.satisfies('+mpi'):
- components += mpi_components
- if spec.satisfies('+mkl'):
- components += mkl_components
- if spec.satisfies('+daal'):
- components += daal_components
- if spec.satisfies('+ipp'):
- components += ipp_components
- if spec.satisfies('+tools') and (spec.satisfies('@cluster') or
- spec.satisfies('@professional')):
- components += tool_components
-
- if spec.satisfies('+all'):
- self.intel_components = 'ALL'
- else:
- self.intel_components = ';'.join(components)
- IntelInstaller.install(self, spec, prefix)
-
- absbindir = os.path.dirname(
- os.path.realpath(os.path.join(self.prefix.bin, "icc")))
- abslibdir = os.path.dirname(
- os.path.realpath(os.path.join(
- self.prefix.lib, "intel64", "libimf.a")))
-
- os.symlink(self.global_license_file, os.path.join(absbindir,
- "license.lic"))
- if spec.satisfies('+tools') and (spec.satisfies('@cluster') or
- spec.satisfies('@professional')):
- inspector_dir = "inspector_xe/licenses"
- advisor_dir = "advisor_xe/licenses"
- vtune_amplifier_dir = "vtune_amplifier_xe/licenses"
-
- year = int(str(self.version).split('.')[1])
if year >= 2017:
- inspector_dir = "inspector/licenses"
- advisor_dir = "advisor/licenses"
-
- os.mkdir(os.path.join(self.prefix, inspector_dir))
- os.symlink(self.global_license_file, os.path.join(
- self.prefix, inspector_dir, "license.lic"))
- os.mkdir(os.path.join(self.prefix, advisor_dir))
- os.symlink(self.global_license_file, os.path.join(
- self.prefix, advisor_dir, "license.lic"))
- os.mkdir(os.path.join(self.prefix, vtune_amplifier_dir))
- os.symlink(self.global_license_file, os.path.join(
- self.prefix, vtune_amplifier_dir, "license.lic"))
-
- if (spec.satisfies('+all') or spec.satisfies('+mpi')) and \
- spec.satisfies('@cluster'):
- for ifile in os.listdir(os.path.join(self.prefix, "itac")):
- if os.path.isdir(os.path.join(self.prefix, "itac", ifile)):
- os.symlink(self.global_license_file,
- os.path.join(self.prefix, "itac", ifile,
- "license.lic"))
- if os.path.isdir(os.path.join(self.prefix, "itac",
- ifile, "intel64")):
- os.symlink(self.global_license_file,
- os.path.join(self.prefix, "itac",
- ifile, "intel64",
- "license.lic"))
- if spec.satisfies('~newdtags'):
- wrappers = ["mpif77", "mpif77", "mpif90", "mpif90",
- "mpigcc", "mpigcc", "mpigxx", "mpigxx",
- "mpiicc", "mpiicc", "mpiicpc", "mpiicpc",
- "mpiifort", "mpiifort"]
+ advisor_dir = 'advisor/licenses'
+
+ directories.append(advisor_dir)
+
+ if '+inspector' in spec:
+ inspector_dir = 'inspector_xe/licenses'
+
+ if year >= 2017:
+ inspector_dir = 'inspector/licenses'
+
+ directories.append(inspector_dir)
+
+ if '+itac' in spec:
+ itac_dir = 'itac_{0}'.format(year)
+
+ directories.append(itac_dir)
+
+ if '+vtune' in spec:
+ vtune_dir = 'vtune_amplifier_xe/licenses'
+
+ directories.append(vtune_dir)
+
+ return [os.path.join(dir, 'license.lic') for dir in directories]
+
+ @run_after('install')
+ def filter_compiler_wrappers(self):
+ spec = self.spec
+
+ if '+mpi' in spec:
+ if '~newdtags' in spec:
+ wrappers = [
+ 'mpif77', 'mpif90', 'mpigcc', 'mpigxx',
+ 'mpiicc', 'mpiicpc', 'mpiifort'
+ ]
wrapper_paths = []
for root, dirs, files in os.walk(spec.prefix):
for name in files:
@@ -239,124 +410,95 @@ class IntelParallelStudio(IntelInstaller):
wrapper_paths.append(os.path.join(spec.prefix,
root, name))
for wrapper in wrapper_paths:
- filter_file(r'-Xlinker --enable-new-dtags', r' ',
- wrapper)
-
- if spec.satisfies('+rpath'):
- for compiler_command in ["icc", "icpc", "ifort"]:
- cfgfilename = os.path.join(absbindir, "%s.cfg" %
- compiler_command)
- with open(cfgfilename, "w") as f:
- f.write('-Xlinker -rpath -Xlinker %s\n' % abslibdir)
-
- os.symlink(os.path.join(self.prefix.man, "common", "man1"),
- os.path.join(self.prefix.man, "man1"))
+ filter_file('-Xlinker --enable-new-dtags', ' ',
+ wrapper, string=True)
+
+ @run_after('install')
+ def rpath_configuration(self):
+ spec = self.spec
+
+ if '+rpath' in spec:
+ lib_dir = os.path.join(self.prefix, self.lib_dir)
+ for compiler in ['icc', 'icpc', 'ifort']:
+ cfgfilename = os.path.join(
+ self.prefix, self.bin_dir, '{0}.cfg'.format(compiler))
+ with open(cfgfilename, 'w') as f:
+ f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
+
+ @run_after('install')
+ def fix_psxevars(self):
+ """Newer versions of Intel Parallel Studio have a bug in the
+ ``psxevars.sh`` script."""
+
+ bindir = glob.glob(join_path(
+ self.prefix, 'parallel_studio*', 'bin'))[0]
+
+ filter_file('^SCRIPTPATH=.*', 'SCRIPTPATH={0}'.format(self.prefix),
+ os.path.join(bindir, 'psxevars.sh'),
+ os.path.join(bindir, 'psxevars.csh'))
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ if '+mpi' in self.spec:
+ spack_env.set('I_MPI_CC', spack_cc)
+ spack_env.set('I_MPI_CXX', spack_cxx)
+ spack_env.set('I_MPI_F77', spack_fc)
+ spack_env.set('I_MPI_F90', spack_f77)
+ spack_env.set('I_MPI_FC', spack_fc)
+
+ # set up MKLROOT for everyone using MKL package
+ if '+mkl' in self.spec:
+ mkl_root = self.prefix.compilers_and_libraries.linux.mkl.lib.intel64 # noqa
+
+ spack_env.set('MKLROOT', self.prefix)
+ spack_env.append_path('SPACK_COMPILER_EXTRA_RPATHS', mkl_root)
+
+ def setup_dependent_package(self, module, dep_spec):
+ if '+mpi' in self.spec:
+ # Intel comes with 2 different flavors of MPI wrappers:
+ #
+ # * mpiicc, mpiicpc, and mpifort are hardcoded to wrap around
+ # the Intel compilers.
+ # * mpicc, mpicxx, mpif90, and mpif77 allow you to set which
+ # compilers to wrap using I_MPI_CC and friends. By default,
+ # wraps around the GCC compilers.
+ #
+ # In theory, these should be equivalent as long as I_MPI_CC
+ # and friends are set to point to the Intel compilers, but in
+ # practice, mpicc fails to compile some applications while
+ # mpiicc works.
+ bindir = self.prefix.compilers_and_libraries.linux.mpi.intel64.bin
+
+ if self.compiler.name == 'intel':
+ self.spec.mpicc = bindir.mpiicc
+ self.spec.mpicxx = bindir.mpiicpc
+ self.spec.mpifc = bindir.mpiifort
+ self.spec.mpif77 = bindir.mpiifort
+ else:
+ self.spec.mpicc = bindir.mpicc
+ self.spec.mpicxx = bindir.mpicxx
+ self.spec.mpifc = bindir.mpif90
+ self.spec.mpif77 = bindir.mpif77
def setup_environment(self, spack_env, run_env):
- # TODO: Determine variables needed for the professional edition.
-
- major_ver = self.version[1]
-
- # Remove paths that were guessed but are incorrect for this package.
- run_env.remove_path('LIBRARY_PATH',
- join_path(self.prefix, 'lib'))
- run_env.remove_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib'))
- run_env.remove_path('CPATH',
- join_path(self.prefix, 'include'))
-
- # Add the default set of variables
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'intel64'))
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'intel64'))
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib',
- 'intel64', 'gcc4.4'))
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib',
- 'intel64', 'gcc4.4'))
- run_env.prepend_path('CPATH',
- join_path(self.prefix, 'tbb', 'include'))
- run_env.prepend_path('MIC_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'mic'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'mic'))
- run_env.prepend_path('MIC_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib', 'mic'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib', 'mic'))
-
- if self.spec.satisfies('+all'):
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix,
- 'debugger_{0}'.format(major_ver),
- 'libipt', 'intel64', 'lib'))
- run_env.set('GDBSERVER_MIC',
- join_path(self.prefix,
- 'debugger_{0}'.format(major_ver), 'gdb',
- 'targets', 'mic', 'bin', 'gdbserver'))
- run_env.set('GDB_CROSS',
- join_path(self.prefix,
- 'debugger_{0}'.format(major_ver),
- 'gdb', 'intel64_mic', 'bin', 'gdb-mic'))
- run_env.set('MPM_LAUNCHER',
- join_path(self.prefix,
- 'debugger_{0}'.format(major_ver), 'mpm',
- 'mic',
- 'bin', 'start_mpm.sh'))
- run_env.set('INTEL_PYTHONHOME',
- join_path(self.prefix,
- 'debugger_{0}'.format(major_ver), 'python',
- 'intel64'))
-
- if (self.spec.satisfies('+all') or self.spec.satisfies('+mpi')):
- # Only I_MPI_ROOT is set here because setting the various PATH
- # variables will potentially be in conflict with other MPI
- # environment modules. The I_MPI_ROOT environment variable can be
- # used as a base to set necessary PATH variables for using Intel
- # MPI. It is also possible to set the variables in the modules.yaml
- # file if Intel MPI is the dominant, or only, MPI on a system.
- run_env.set('I_MPI_ROOT', join_path(self.prefix, 'impi'))
-
- if self.spec.satisfies('+all') or self.spec.satisfies('+mkl'):
- spack_env.set('MKLROOT', join_path(self.prefix, 'mkl'))
-
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'mkl', 'lib',
- 'intel64'))
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'mkl', 'lib',
- 'intel64'))
- run_env.prepend_path('CPATH',
- join_path(self.prefix, 'mkl', 'include'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'mkl', 'lib', 'mic'))
- run_env.set('MKLROOT', join_path(self.prefix, 'mkl'))
-
- if self.spec.satisfies('+all') or self.spec.satisfies('+daal'):
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'daal', 'lib',
- 'intel64_lin'))
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'daal', 'lib',
- 'intel64_lin'))
- run_env.prepend_path('CPATH',
- join_path(self.prefix, 'daal', 'include'))
- run_env.prepend_path('CLASSPATH',
- join_path(self.prefix, 'daal', 'lib',
- 'daal.jar'))
- run_env.set('DAALROOT', join_path(self.prefix, 'daal'))
-
- if self.spec.satisfies('+all') or self.spec.satisfies('+ipp'):
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'ipp', 'lib',
- 'intel64'))
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'ipp', 'lib',
- 'intel64'))
- run_env.prepend_path('CPATH',
- join_path(self.prefix, 'ipp', 'include'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'ipp', 'lib', 'mic'))
- run_env.set('IPPROOT', join_path(self.prefix, 'ipp'))
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source parallel_studio_xe_2017/bin/psxevars.sh intel64
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ psxevars = glob.glob(join_path(
+ self.prefix, 'parallel_studio*', 'bin', 'psxevars.sh'))
+
+ if psxevars:
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ psxevars[0], 'intel64'))
diff --git a/var/spack/repos/builtin/packages/tbb/package.py b/var/spack/repos/builtin/packages/intel-tbb/package.py
index 33dea6625b..05185ce297 100644
--- a/var/spack/repos/builtin/packages/tbb/package.py
+++ b/var/spack/repos/builtin/packages/intel-tbb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import glob
-class Tbb(Package):
+class IntelTbb(Package):
"""Widely used C++ template library for task parallelism.
Intel Threading Building Blocks (Intel TBB) lets you easily write parallel
C++ programs that take full advantage of multicore performance, that are
@@ -35,7 +35,16 @@ class Tbb(Package):
homepage = "http://www.threadingbuildingblocks.org/"
# Only version-specific URL's work for TBB
- # can also use https://github.com/01org/tbb/releases/
+ version('2018.1', 'b2f2fa09adf44a22f4024049907f774b',
+ url='https://github.com/01org/tbb/archive/2018_U1.tar.gz')
+ version('2018.0', 'e54de69981905ad69eb9cf0226b9bf5f9a4ba065',
+ url='https://github.com/01org/tbb/archive/2018.tar.gz')
+ version('2017.8', '488f049fd107d8b1f6ba59cf4aad881172525106',
+ url='https://github.com/01org/tbb/archive/2017_U8.tar.gz')
+ version('2017.6', 'c0a722fd1ae66b40aeab25da6049086ef5f02f17',
+ url='https://github.com/01org/tbb/archive/2017_U6.tar.gz')
+ version('2017.5', '26f720729d322913912e99d1e4a36bd10625d3ca',
+ url='https://github.com/01org/tbb/archive/2017_U5.tar.gz')
version('2017.3', '2c451a5bcf6fc31487b98b4b29651c369874277c',
url='https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb2017_20161128oss_src.tgz')
version('4.4.4', 'd4cee5e4ca75cab5181834877738619c56afeb71',
@@ -43,6 +52,11 @@ class Tbb(Package):
version('4.4.3', '80707e277f69d9b20eeebdd7a5f5331137868ce1',
url='https://www.threadingbuildingblocks.org/sites/default/files/software_releases/source/tbb44_20160128oss_src_0.tgz')
+ provides('tbb')
+
+ # include patch for gcc rtm options
+ patch("tbb_gcc_rtm_key.patch", level=0)
+
def coerce_to_spack(self, tbb_build_subdir):
for compiler in ["icc", "gcc", "clang"]:
fs = glob.glob(join_path(tbb_build_subdir,
diff --git a/var/spack/repos/builtin/packages/intel-tbb/tbb_gcc_rtm_key.patch b/var/spack/repos/builtin/packages/intel-tbb/tbb_gcc_rtm_key.patch
new file mode 100644
index 0000000000..f1a42fb52f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/intel-tbb/tbb_gcc_rtm_key.patch
@@ -0,0 +1,23 @@
+*** build/linux.gcc.inc.orig 2017-01-10 16:54:01.000000000 -0800
+--- build/linux.gcc.inc 2017-01-10 16:54:04.000000000 -0800
+***************
+*** 49,57 ****
+ endif
+
+ # gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them
+! ifneq (,$(shell gcc -dumpversion | egrep "^(4\.[8-9]|[5-9])"))
+! RTM_KEY = -mrtm
+! endif
+
+ ifeq ($(cfg), release)
+ CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD
+--- 49,57 ----
+ endif
+
+ # gcc 4.8 and later support RTM intrinsics, but require command line switch to enable them
+! #ifneq (,$(shell gcc -dumpversion | egrep "^(4\.[8-9]|[5-9])"))
+! # RTM_KEY = -mrtm
+! #endif
+
+ ifeq ($(cfg), release)
+ CPLUS_FLAGS = $(ITT_NOTIFY) -g -O2 -DUSE_PTHREAD \ No newline at end of file
diff --git a/var/spack/repos/builtin/packages/intel/package.py b/var/spack/repos/builtin/packages/intel/package.py
index 4164383f5b..d67550caa6 100644
--- a/var/spack/repos/builtin/packages/intel/package.py
+++ b/var/spack/repos/builtin/packages/intel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,155 +22,89 @@
# 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 *
import os
-import re
-
-
-def filter_pick(input_list, regex_filter):
- """Returns the items in input_list that are found in the regex_filter"""
- return [l for l in input_list for m in (regex_filter(l),) if m]
-
-
-def unfilter_pick(input_list, regex_filter):
- """Returns the items in input_list that are not found in the
- regex_filter"""
- return [l for l in input_list for m in (regex_filter(l),) if not m]
-
-
-def get_all_components():
- """Returns a list of all the components associated with the downloaded
- Intel package"""
- all_components = []
- with open("pset/mediaconfig.xml", "r") as f:
- lines = f.readlines()
- for line in lines:
- if line.find('<Abbr>') != -1:
- component = line[line.find('<Abbr>') + 6:line.find('</Abbr>')]
- all_components.append(component)
- return all_components
-
-class IntelInstaller(Package):
- """Base package containing common methods for installing Intel software"""
+from spack import *
+from spack.environment import EnvironmentModifications
- homepage = "https://software.intel.com/en-us"
- intel_components = "ALL"
- license_required = True
- license_comment = '#'
- license_files = ['Licenses/license.lic']
- license_vars = ['INTEL_LICENSE_FILE']
- license_url = \
- 'https://software.intel.com/en-us/articles/intel-license-manager-faq'
- @property
- def global_license_file(self):
- """Returns the path where a global license file should be stored."""
- if not self.license_files:
- return
- return join_path(self.global_license_dir, "intel",
- os.path.basename(self.license_files[0]))
-
- def install(self, spec, prefix):
-
- if not hasattr(self, "intel_prefix"):
- self.intel_prefix = self.prefix
-
- silent_config_filename = 'silent.cfg'
- with open(silent_config_filename, 'w') as f:
- f.write("""
-ACCEPT_EULA=accept
-PSET_MODE=install
-CONTINUE_WITH_INSTALLDIR_OVERWRITE=yes
-PSET_INSTALL_DIR=%s
-NONRPM_DB_DIR=%s
-ACTIVATION_LICENSE_FILE=%s
-ACTIVATION_TYPE=license_file
-PHONEHOME_SEND_USAGE_DATA=no
-CONTINUE_WITH_OPTIONAL_ERROR=yes
-COMPONENTS=%s
-""" % (self.intel_prefix, self.intel_prefix, self.global_license_file,
- self.intel_components))
-
- install_script = Executable("./install.sh")
- install_script('--silent', silent_config_filename)
-
-
-class Intel(IntelInstaller):
- """Intel Compilers.
-
- Note: You will have to add the download file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+class Intel(IntelPackage):
+ """Intel Compilers."""
homepage = "https://software.intel.com/en-us/intel-parallel-studio-xe"
- # TODO: can also try the online installer (will download files on demand)
- version('16.0.2', '1133fb831312eb519f7da897fec223fa',
- url="file://%s/parallel_studio_xe_2016_composer_edition_update2.tgz"
- % os.getcwd())
+ version('18.0.0', '31ba768fba6e7322957b03feaa3add28',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/12067/parallel_studio_xe_2018_composer_edition.tgz')
+ version('17.0.4', 'd03d351809e182c481dc65e07376d9a2',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11541/parallel_studio_xe_2017_update4_composer_edition.tgz')
+ version('17.0.3', '52344df122c17ddff3687f84ceb21623',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11464/parallel_studio_xe_2017_update3_composer_edition.tgz')
+ version('17.0.2', '2891ab1ece43eb61b6ab892f07c47f01',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/11302/parallel_studio_xe_2017_update2_composer_edition.tgz')
+ version('17.0.1', '1f31976931ed8ec424ac7c3ef56f5e85',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/10978/parallel_studio_xe_2017_update1_composer_edition.tgz')
+ version('17.0.0', 'b67da0065a17a05f110ed1d15c3c6312',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9656/parallel_studio_xe_2017_composer_edition.tgz')
+ version('16.0.4', '2bc9bfc9be9c1968a6e42efb4378f40e',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9785/parallel_studio_xe_2016_composer_edition_update4.tgz')
version('16.0.3', '3208eeabee951fc27579177b593cefe9',
- url="file://%s/parallel_studio_xe_2016_composer_edition_update3.tgz"
- % os.getcwd())
-
- variant('rpath', default=True, description="Add rpath to .cfg files")
-
- def install(self, spec, prefix):
- components = []
- all_components = get_all_components()
- regex = '(comp|openmp|intel-tbb|icc|ifort|psxe|icsxe-pset)'
- components = filter_pick(all_components, re.compile(regex).search)
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9063/parallel_studio_xe_2016_composer_edition_update3.tgz')
+ version('16.0.2', '1133fb831312eb519f7da897fec223fa',
+ url='http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/8680/parallel_studio_xe_2016_composer_edition_update2.tgz')
- self.intel_components = ';'.join(components)
- IntelInstaller.install(self, spec, prefix)
+ variant('rpath', default=True, description='Add rpath to .cfg files')
- absbindir = os.path.split(os.path.realpath(os.path.join(
- self.prefix.bin, "icc")))[0]
- abslibdir = os.path.split(os.path.realpath(os.path.join(
- self.prefix.lib, "intel64", "libimf.a")))[0]
+ components = [
+ # Common files
+ 'intel-comp-',
+ 'intel-openmp',
- # symlink or copy?
- os.symlink(self.global_license_file,
- os.path.join(absbindir, "license.lic"))
+ # C/C++
+ 'intel-icc',
- if spec.satisfies('+rpath'):
- for compiler_command in ["icc", "icpc", "ifort"]:
- cfgfilename = os.path.join(absbindir, "%s.cfg" %
- compiler_command)
- with open(cfgfilename, "w") as f:
- f.write('-Xlinker -rpath -Xlinker %s\n' % abslibdir)
+ # Fortran
+ 'intel-ifort',
+ ]
- os.symlink(os.path.join(self.prefix.man, "common", "man1"),
- os.path.join(self.prefix.man, "man1"))
+ @property
+ def license_files(self):
+ return [
+ 'Licenses/license.lic',
+ join_path('compilers_and_libraries', 'linux', 'bin',
+ 'intel64', 'license.lic')
+ ]
+
+ @run_after('install')
+ def rpath_configuration(self):
+ if '+rpath' in self.spec:
+ bin_dir = join_path(self.prefix, 'compilers_and_libraries',
+ 'linux', 'bin', 'intel64')
+ lib_dir = join_path(self.prefix, 'compilers_and_libraries',
+ 'linux', 'compiler', 'lib', 'intel64_lin')
+ for compiler in ['icc', 'icpc', 'ifort']:
+ cfgfilename = join_path(bin_dir, '{0}.cfg'.format(compiler))
+ with open(cfgfilename, 'w') as f:
+ f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir))
def setup_environment(self, spack_env, run_env):
-
- # Remove paths that were guessed but are incorrect for this package.
- run_env.remove_path('LIBRARY_PATH',
- join_path(self.prefix, 'lib'))
- run_env.remove_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib'))
- run_env.remove_path('CPATH',
- join_path(self.prefix, 'include'))
-
- # Add the default set of variables
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'intel64'))
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'intel64'))
- run_env.prepend_path('LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib',
- 'intel64', 'gcc4.4'))
- run_env.prepend_path('LD_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib',
- 'intel64', 'gcc4.4'))
- run_env.prepend_path('CPATH',
- join_path(self.prefix, 'tbb', 'include'))
- run_env.prepend_path('MIC_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'mic'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'lib', 'mic'))
- run_env.prepend_path('MIC_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib', 'mic'))
- run_env.prepend_path('MIC_LD_LIBRARY_PATH',
- join_path(self.prefix, 'tbb', 'lib', 'mic'))
+ """Adds environment variables to the generated module file.
+
+ These environment variables come from running:
+
+ .. code-block:: console
+
+ $ source bin/compilervars.sh intel64
+ """
+ # NOTE: Spack runs setup_environment twice, once pre-build to set up
+ # the build environment, and once post-installation to determine
+ # the environment variables needed at run-time to add to the module
+ # file. The script we need to source is only present post-installation,
+ # so check for its existence before sourcing.
+ # TODO: At some point we should split setup_environment into
+ # setup_build_environment and setup_run_environment to get around
+ # this problem.
+ compilervars = os.path.join(self.prefix.bin, 'compilervars.sh')
+
+ if os.path.isfile(compilervars):
+ run_env.extend(EnvironmentModifications.from_sourcing_file(
+ compilervars, 'intel64'))
diff --git a/var/spack/repos/builtin/packages/intltool/package.py b/var/spack/repos/builtin/packages/intltool/package.py
index e934734691..0c84d3b516 100644
--- a/var/spack/repos/builtin/packages/intltool/package.py
+++ b/var/spack/repos/builtin/packages/intltool/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,23 +25,37 @@
from spack import *
-class Intltool(Package):
+class Intltool(AutotoolsPackage):
"""intltool is a set of tools to centralize translation of many different
- file formats using GNU gettext-compatible PO files.
+ file formats using GNU gettext-compatible PO files."""
- """
- homepage = 'https://freedesktop.org/wiki/Software/intltool/'
+ homepage = 'https://freedesktop.org/wiki/Software/intltool/'
+ url = 'https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz'
+ list_url = 'https://launchpad.net/intltool/+download'
- version('0.51.0', '12e517cac2b57a0121cda351570f1e63')
+ version('0.51.0', '12e517cac2b57a0121cda351570f1e63')
- def url_for_version(self, version):
- """Handle version-based custom URLs."""
- return 'https://launchpad.net/intltool/trunk/%s/+download/intltool-%s.tar.gz' % (version, version)
+ # requires XML::Parser perl module
+ depends_on('perl-xml-parser', type=('build', 'run'))
+ depends_on('perl@5.8.1:', type=('build', 'run'))
- def install(self, spec, prefix):
+ def check(self):
+ # `make check` passes but causes `make install` to fail
+ pass
- # configure, build, install:
- options = ['--prefix=%s' % prefix]
- configure(*options)
- make()
- make('install')
+ def _make_executable(self, name):
+ return Executable(join_path(self.prefix.bin, name))
+
+ def setup_dependent_package(self, module, dependent_spec):
+ # intltool is very likely to be a build dependency,
+ # so we add the tools it provides to the dependent module
+ executables = [
+ 'intltool-extract',
+ 'intltoolize',
+ 'intltool-merge',
+ 'intltool-prepare',
+ 'intltool-update'
+ ]
+
+ for name in executables:
+ setattr(module, name, self._make_executable(name))
diff --git a/var/spack/repos/builtin/packages/ior/package.py b/var/spack/repos/builtin/packages/ior/package.py
index b8825c0fe4..96b5a455c9 100644
--- a/var/spack/repos/builtin/packages/ior/package.py
+++ b/var/spack/repos/builtin/packages/ior/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,10 +23,9 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class Ior(Package):
+class Ior(AutotoolsPackage):
"""The IOR software is used for benchmarking parallel file systems
using POSIX, MPI-IO, or HDF5 interfaces."""
@@ -38,20 +37,27 @@ class Ior(Package):
variant('hdf5', default=False, description='support IO with HDF5 backend')
variant('ncmpi', default=False, description='support IO with NCMPI backend')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
depends_on('mpi')
- depends_on('hdf5+mpi', when='+hdf5')
- depends_on('netcdf+mpi', when='+ncmpi')
+ depends_on('hdf5+mpi', when='+hdf5')
+ depends_on('parallel-netcdf', when='+ncmpi')
- def install(self, spec, prefix):
- os.system('./bootstrap')
+ @run_before('autoreconf')
+ def bootstrap(self):
+ Executable('./bootstrap')()
- config_args = [
- 'MPICC=%s' % spec['mpi'].prefix.bin + '/mpicc',
- '--prefix=%s' % prefix,
- ]
+ def configure_args(self):
+ spec = self.spec
+ config_args = []
+
+ env['CC'] = spec['mpi'].mpicc
if '+hdf5' in spec:
config_args.append('--with-hdf5')
+ config_args.append('CFLAGS=-D H5_USE_16_API')
else:
config_args.append('--without-hdf5')
@@ -60,7 +66,4 @@ class Ior(Package):
else:
config_args.append('--without-ncmpi')
- configure(*config_args)
-
- make()
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/iozone/package.py b/var/spack/repos/builtin/packages/iozone/package.py
new file mode 100644
index 0000000000..c75595ba14
--- /dev/null
+++ b/var/spack/repos/builtin/packages/iozone/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Iozone(MakefilePackage):
+ """IOzone is a filesystem benchmark tool. The benchmark generates and
+ measures a variety of file operations. Iozone has been ported to many
+ machines and runs under many operating systems."""
+
+ homepage = "http://www.iozone.org/"
+ url = "http://www.iozone.org/src/current/iozone3_465.tar"
+
+ version('3_465', 'c924e5e46fb1cf8145f420e8e57eb954')
+
+ # TODO: Add support for other architectures as necessary
+ build_targets = ['linux-AMD64']
+
+ build_directory = 'src/current'
+
+ def edit(self, spec, prefix):
+ with working_dir(self.build_directory):
+ filter_file(r'^CC\t= cc',
+ r'CC\t= {0}'.format(spack_cc),
+ 'makefile')
+
+ def install(self, spec, prefix):
+ install_tree('docs', join_path(prefix, 'docs'))
+
+ with working_dir(self.build_directory):
+ install_tree('.', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/ipopt/ipopt_ppc_build.patch b/var/spack/repos/builtin/packages/ipopt/ipopt_ppc_build.patch
new file mode 100644
index 0000000000..a903544cc7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ipopt/ipopt_ppc_build.patch
@@ -0,0 +1,26 @@
+--- ipopt/config.guess 2017-06-20 14:49:19.618016003 -0700
++++ ipopt/config.guess.new 2017-06-20 14:50:35.678878802 -0700
+@@ -908,6 +908,9 @@
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
++ ppc64le:Linux:*:*)
++ echo powerpc64-unknown-linux-gnu
++ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
+
+
+--- ipopt/Ipopt/config.guess 2017-06-20 14:49:19.618016003 -0700
++++ ipopt/Ipopt/config.guess.new 2017-06-20 14:50:35.678878802 -0700
+@@ -908,6 +908,9 @@
+ ppc:Linux:*:*)
+ echo powerpc-unknown-linux-gnu
+ exit ;;
++ ppc64le:Linux:*:*)
++ echo powerpc64-unknown-linux-gnu
++ exit ;;
+ ppc64:Linux:*:*)
+ echo powerpc64-unknown-linux-gnu
+ exit ;;
diff --git a/var/spack/repos/builtin/packages/ipopt/package.py b/var/spack/repos/builtin/packages/ipopt/package.py
index bd1e5f36ef..a9502a3e85 100644
--- a/var/spack/repos/builtin/packages/ipopt/package.py
+++ b/var/spack/repos/builtin/packages/ipopt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,16 +31,28 @@ class Ipopt(Package):
homepage = "https://projects.coin-or.org/Ipopt"
url = "http://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.4.tgz"
+ version('3.12.7', '2a36e4a04717a8ed7012ac7d1253ae4ffbc1a8fd')
+ version('3.12.6', 'ed4072427fab786fcf6082fe7e6f6c2ed9b5e6f8')
+ version('3.12.5', '3f63ddfff517235ead17af6cceb426ca858dda37')
version('3.12.4', '12a8ecaff8dd90025ddea6c65b49cb03')
version('3.12.3', 'c560cbfa9cbf62acf8b485823c255a1b')
version('3.12.2', 'ec1e855257d7de09e122c446506fb00d')
version('3.12.1', 'ceaf895ce80c77778f2cab68ba9f17f3')
version('3.12.0', 'f7dfc3aa106a6711a85214de7595e827')
+ variant('coinhsl', default=False,
+ description="Build with Coin Harwell Subroutine Libraries")
+ variant('metis', default=False,
+ description="Build with METIS partitioning support")
+
depends_on("blas")
depends_on("lapack")
depends_on("pkg-config", type='build')
depends_on("mumps+double~mpi")
+ depends_on('coinhsl', when='+coinhsl')
+ depends_on('metis@4.0:4.999', when='+metis')
+
+ patch('ipopt_ppc_build.patch', when='arch=ppc64le')
def install(self, spec, prefix):
# Dependency directories
@@ -53,20 +65,31 @@ class Ipopt(Package):
mumps_flags = "-ldmumps -lmumps_common -lpord -lmpiseq"
mumps_libcmd = "-L%s " % mumps_dir.lib + mumps_flags
- blas_lib = spec['blas'].blas_libs.ld_flags
- lapack_lib = spec['lapack'].lapack_libs.ld_flags
+ blas_lib = spec['blas'].libs.ld_flags
+ lapack_lib = spec['lapack'].libs.ld_flags
configure_args = [
"--prefix=%s" % prefix,
"--with-mumps-incdir=%s" % mumps_dir.include,
"--with-mumps-lib=%s" % mumps_libcmd,
"--enable-shared",
+ "coin_skip_warn_cxxflags=yes",
"--with-blas-incdir=%s" % blas_dir.include,
"--with-blas-lib=%s" % blas_lib,
"--with-lapack-incdir=%s" % lapack_dir.include,
"--with-lapack-lib=%s" % lapack_lib
]
+ if 'coinhsl' in spec:
+ configure_args.extend([
+ '--with-hsl-lib=%s' % spec['coinhsl'].libs.ld_flags,
+ '--with-hsl-incdir=%s' % spec['coinhsl'].prefix.include])
+
+ if 'metis' in spec:
+ configure_args.extend([
+ '--with-metis-lib=%s' % spec['metis'].libs.ld_flags,
+ '--with-metis-incdir=%s' % spec['metis'].prefix.include])
+
configure(*configure_args)
# IPOPT does not build correctly in parallel on OS X
diff --git a/var/spack/repos/builtin/packages/isaac-server/jpeg.patch b/var/spack/repos/builtin/packages/isaac-server/jpeg.patch
new file mode 100644
index 0000000000..ee0a74e769
--- /dev/null
+++ b/var/spack/repos/builtin/packages/isaac-server/jpeg.patch
@@ -0,0 +1,34 @@
+diff --git a/server/src/Broker.cpp b/server/src/Broker.cpp
+index 03d60f4..aab449f 100644
+--- a/server/src/Broker.cpp
++++ b/server/src/Broker.cpp
+@@ -108,14 +108,14 @@ MetaDataClient* Broker::addDataClient()
+ }
+ boolean isaac_jpeg_fill_input_buffer(j_decompress_ptr cinfo)
+ {
+- return true;
++ return TRUE;
+ }
+ void isaac_jpeg_skip_input_data(j_decompress_ptr cinfo,long num_bytes)
+ {
+ }
+ boolean isaac_jpeg_resync_to_restart(j_decompress_ptr cinfo, int desired)
+ {
+- return true;
++ return TRUE;
+ }
+ void isaac_jpeg_term_source(j_decompress_ptr cinfo)
+ {
+diff --git a/server/src/URIImageConnector.cpp b/server/src/URIImageConnector.cpp
+index 0b11800..e843aa4 100644
+--- a/server/src/URIImageConnector.cpp
++++ b/server/src/URIImageConnector.cpp
+@@ -40,7 +40,7 @@ void isaac_init_destination(j_compress_ptr cinfo)
+ }
+ boolean isaac_jpeg_empty_output_buffer(j_compress_ptr cinfo)
+ {
+- return true;
++ return TRUE;
+ }
+ void isaac_jpeg_term_destination(j_compress_ptr cinfo)
+ {
diff --git a/var/spack/repos/builtin/packages/isaac-server/package.py b/var/spack/repos/builtin/packages/isaac-server/package.py
new file mode 100644
index 0000000000..3bfad09f98
--- /dev/null
+++ b/var/spack/repos/builtin/packages/isaac-server/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 IsaacServer(CMakePackage):
+ """In Situ Animation of Accelerated Computations: Server"""
+
+ homepage = "http://computationalradiationphysics.github.io/isaac/"
+ url = "https://github.com/ComputationalRadiationPhysics/isaac/archive/v1.3.0.tar.gz"
+
+ version('develop', branch='dev',
+ git='https://github.com/ComputationalRadiationPhysics/isaac.git')
+ version('master', branch='master',
+ git='https://github.com/ComputationalRadiationPhysics/isaac.git')
+ version('1.3.2', 'c557daa74de52fd79e734c9758fca38b')
+ version('1.3.1', '7fe075f9af68d05355eaba0e224f20ca')
+ version('1.3.0', 'c8a794da9bb998ef0e75449bfece1a12')
+
+ # variant('gstreamer', default=False, description= \
+ # 'Support for RTP streams, e.g. to Twitch or Youtube')
+
+ depends_on('cmake@3.3:', type='build')
+ depends_on('jpeg', type='link')
+ depends_on('jansson', type='link')
+ depends_on('boost@1.56.0:', type='link')
+ depends_on('libwebsockets@2.1.1:', type='link')
+ # depends_on('gstreamer@1.0', when='+gstreamer')
+
+ # Until the pull request is merged: https://github.com/ComputationalRadiationPhysics/isaac/pull/70
+ patch('jpeg.patch', when='@:1.3.1')
+
+ root_cmakelists_dir = 'server'
diff --git a/var/spack/repos/builtin/packages/isaac/package.py b/var/spack/repos/builtin/packages/isaac/package.py
new file mode 100644
index 0000000000..4c05faeb26
--- /dev/null
+++ b/var/spack/repos/builtin/packages/isaac/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# 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/spack/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 Isaac(CMakePackage):
+ """In Situ Animation of Accelerated Computations: Header-Only Library"""
+
+ homepage = "http://computationalradiationphysics.github.io/isaac/"
+ url = "https://github.com/ComputationalRadiationPhysics/isaac/archive/v1.3.0.tar.gz"
+
+ version('develop', branch='dev',
+ git='https://github.com/ComputationalRadiationPhysics/isaac.git')
+ version('master', branch='master',
+ git='https://github.com/ComputationalRadiationPhysics/isaac.git')
+ version('1.3.3', '7aeebaf0c5a77e2cb9bea066750e369b')
+ version('1.3.2', 'c557daa74de52fd79e734c9758fca38b')
+ version('1.3.1', '7fe075f9af68d05355eaba0e224f20ca')
+ version('1.3.0', 'c8a794da9bb998ef0e75449bfece1a12')
+
+ variant('cuda', default=True,
+ description='Generate CUDA kernels for Nvidia GPUs')
+ # variant('alpaka', default=False,
+ # description='Generate kernels via Alpaka, for CPUs or GPUs')
+
+ depends_on('cmake@3.3:', type='build')
+ depends_on('jpeg', type='link')
+ depends_on('jansson', type='link')
+ depends_on('boost@1.56.0:', type='link')
+ depends_on('boost@1.65.1:', type='link', when='^cuda@9:')
+ depends_on('cuda@7.0:', type='link', when='+cuda')
+ # depends_on('alpaka', when='+alpaka')
+ depends_on('icet', type='link')
+ depends_on('mpi', type='link')
+
+ root_cmakelists_dir = 'lib'
diff --git a/var/spack/repos/builtin/packages/isl/package.py b/var/spack/repos/builtin/packages/isl/package.py
index f6188e6b3e..4c25f3ec97 100644
--- a/var/spack/repos/builtin/packages/isl/package.py
+++ b/var/spack/repos/builtin/packages/isl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,19 @@
from spack import *
-class Isl(Package):
- """isl is a thread-safe C library for manipulating sets and
- relations of integer points bounded by affine constraints."""
+class Isl(AutotoolsPackage):
+ """isl (Integer Set Library) is a thread-safe C library for manipulating
+ sets and relations of integer points bounded by affine constraints."""
+
homepage = "http://isl.gforge.inria.fr"
- url = "http://isl.gforge.inria.fr/isl-0.14.tar.bz2"
+ url = "http://isl.gforge.inria.fr/isl-0.18.tar.bz2"
version('0.18', '11436d6b205e516635b666090b94ab32')
version('0.14', 'acd347243fca5609e3df37dba47fd0bb')
- depends_on("gmp")
+ depends_on('gmp')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--with-gmp-prefix=%s" % spec['gmp'].prefix)
- make()
- make("install")
+ def configure_args(self):
+ return [
+ '--with-gmp-prefix={0}'.format(self.spec['gmp'].prefix)
+ ]
diff --git a/var/spack/repos/builtin/packages/itstool/package.py b/var/spack/repos/builtin/packages/itstool/package.py
index b8b2b4459f..00e273bb2f 100644
--- a/var/spack/repos/builtin/packages/itstool/package.py
+++ b/var/spack/repos/builtin/packages/itstool/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Itstool(Package):
+class Itstool(AutotoolsPackage):
"""ITS Tool allows you to translate your XML documents with PO files, using
rules from the W3C Internationalization Tag Set (ITS) to determine what
to translate and how to separate it into PO file messages."""
@@ -37,8 +37,3 @@ class Itstool(Package):
version('2.0.1', '40935cfb08228488bd45575e5f001a34')
version('2.0.0', 'd8c702c3e8961db83d04182c2aa4730b')
version('1.2.0', 'c0925f6869e33af8e7fe56848c129152')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/itsx/package.py b/var/spack/repos/builtin/packages/itsx/package.py
new file mode 100644
index 0000000000..84dc525740
--- /dev/null
+++ b/var/spack/repos/builtin/packages/itsx/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Itsx(Package):
+ """Improved software detection and extraction of ITS1 and ITS2 from
+ ribosomal ITS sequences of fungi and other eukaryotes for use in
+ environmental sequencing"""
+
+ homepage = "http://microbiology.se/software/itsx/"
+ url = "http://microbiology.se/sw/ITSx_1.0.11.tar.gz"
+
+ version('1.0.11', '1bff12f1d5742f19be6ca585e9bf81fa')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('hmmer')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('ITSx', prefix.bin)
+ install_tree('ITSx_db', prefix.bin.ITSx_db)
diff --git a/var/spack/repos/builtin/packages/jags/package.py b/var/spack/repos/builtin/packages/jags/package.py
new file mode 100644
index 0000000000..248f4019d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/jags/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Jags(AutotoolsPackage):
+ """JAGS is Just Another Gibbs Sampler. It is a program for analysis of
+ Bayesian hierarchical models using Markov Chain Monte Carlo (MCMC)
+ simulation not wholly unlike BUGS"""
+
+ homepage = "http://mcmc-jags.sourceforge.net/"
+ url = "https://downloads.sourceforge.net/project/mcmc-jags/JAGS/4.x/Source/JAGS-4.2.0.tar.gz"
+
+ version('4.2.0', '9e521b3cfb23d3290a8c6bc0b79bf426')
+
+ depends_on('blas')
+ depends_on('lapack')
+
+ def configure_args(self):
+ args = ['--with-blas=-L%s' % self.spec['blas'].prefix.lib,
+ '--with-lapack=-L%s' % self.spec['lapack'].prefix.lib]
+ return args
diff --git a/var/spack/repos/builtin/packages/jansson/package.py b/var/spack/repos/builtin/packages/jansson/package.py
index e6100607aa..e3e2d56cff 100644
--- a/var/spack/repos/builtin/packages/jansson/package.py
+++ b/var/spack/repos/builtin/packages/jansson/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,3 +33,12 @@ class Jansson(CMakePackage):
url = "https://github.com/akheron/jansson/archive/v2.9.tar.gz"
version('2.9', 'd2db25c437b359fc5a065ed938962237')
+
+ variant('shared', default=True,
+ description='Enables the build of shared libraries')
+
+ def cmake_args(self):
+ return [
+ '-DJANSSON_BUILD_SHARED_LIBS:BOOL=%s' % (
+ 'ON' if '+shared' in self.spec else 'OFF'),
+ ]
diff --git a/var/spack/repos/builtin/packages/jasper/package.py b/var/spack/repos/builtin/packages/jasper/package.py
index f450c7d155..5739f902a1 100644
--- a/var/spack/repos/builtin/packages/jasper/package.py
+++ b/var/spack/repos/builtin/packages/jasper/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Jasper(Package):
+class Jasper(AutotoolsPackage):
"""Library for manipulating JPEG-2000 images"""
homepage = "https://www.ece.uvic.ca/~frodo/jasper/"
@@ -38,26 +38,21 @@ class Jasper(Package):
variant('debug', default=False,
description='Builds debug versions of the libraries')
- depends_on('libjpeg-turbo')
+ depends_on('jpeg')
# Fixes a bug (still in upstream as of v.1.900.1) where an assertion fails
# when certain JPEG-2000 files with an alpha channel are processed
# see: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=469786
patch('fix_alpha_channel_assert_fail.patch')
- def install(self, spec, prefix):
- configure_options = [
- '--prefix={0}'.format(prefix),
- '--mandir={0}'.format(spec.prefix.man),
- ]
+ def configure_args(self):
+ spec = self.spec
+ args = ['--mandir={0}'.format(spec.prefix.man)]
if '+shared' in spec:
- configure_options.append('--enable-shared')
+ args.append('--enable-shared')
if '+debug' not in spec:
- configure_options.append('--disable-debug')
+ args.append('--disable-debug')
- configure(*configure_options)
-
- make()
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/jdk/package.py b/var/spack/repos/builtin/packages/jdk/package.py
index 518a469435..9c221fa364 100644
--- a/var/spack/repos/builtin/packages/jdk/package.py
+++ b/var/spack/repos/builtin/packages/jdk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,12 +45,29 @@ class Jdk(Package):
'-H', # specify required License Agreement cookie
'Cookie: oraclelicense=accept-securebackup-cookie']
- version('8u66-linux-x64', '88f31f3d642c3287134297b8c10e61bf',
- url="http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz",
- curl_options=curl_options)
- version('8u92-linux-x64', '65a1cc17ea362453a6e0eb4f13be76e4',
- url="http://download.oracle.com/otn-pub/java/jdk/8u92-b14/jdk-8u92-linux-x64.tar.gz",
- curl_options=curl_options)
+ # For instructions on how to find the magic URL, see:
+ # https://gist.github.com/P7h/9741922
+ # https://linuxconfig.org/how-to-install-java-se-development-kit-on-debian-linux
+ version('8u141-b15', '8cf4c4e00744bfafc023d770cb65328c', curl_options=curl_options,
+ url='http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz')
+ version('8u131-b11', '75b2cb2249710d822a60f83e28860053', curl_options=curl_options,
+ url='http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz')
+ version('8u92-b14', '65a1cc17ea362453a6e0eb4f13be76e4', curl_options=curl_options)
+ version('8u73-b02', '1b0120970aa8bc182606a16bf848a686', curl_options=curl_options)
+ version('8u66-b17', '88f31f3d642c3287134297b8c10e61bf', curl_options=curl_options)
+ # The 7u80 tarball is not readily available from Oracle. If you have
+ # the tarball, add it to your mirror as mirror/jdk/jdk-7u80.tar.gz and
+ # away you go.
+ version('7u80-b0', '6152f8a7561acf795ca4701daa10a965')
+
+ provides('java@8', when='@8u0:8u999')
+ provides('java@7', when='@7u0:7u999')
+
+ def url_for_version(self, version):
+ url = "http://download.oracle.com/otn-pub/java/jdk/{0}/jdk-{1}-linux-x64.tar.gz"
+ version = str(version)
+ minor_version = version[:version.index('-')]
+ return url.format(version, minor_version)
def install(self, spec, prefix):
distutils.dir_util.copy_tree(".", prefix)
diff --git a/var/spack/repos/builtin/packages/jellyfish/package.py b/var/spack/repos/builtin/packages/jellyfish/package.py
new file mode 100644
index 0000000000..e6d65838a1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/jellyfish/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 Jellyfish(AutotoolsPackage):
+ """JELLYFISH is a tool for fast, memory-efficient counting of k-mers in
+ DNA."""
+
+ homepage = "http://www.cbcb.umd.edu/software/jellyfish/"
+ url = "http://www.cbcb.umd.edu/software/jellyfish/jellyfish-1.1.11.tar.gz"
+
+ version('1.1.11', 'dc994ea8b0896156500ea8c648f24846')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('python', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/jemalloc/package.py b/var/spack/repos/builtin/packages/jemalloc/package.py
index 839251f47b..0534c72ed5 100644
--- a/var/spack/repos/builtin/packages/jemalloc/package.py
+++ b/var/spack/repos/builtin/packages/jemalloc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,8 @@ class Jemalloc(Package):
homepage = "http://www.canonware.com/jemalloc/"
url = "https://github.com/jemalloc/jemalloc/releases/download/4.0.4/jemalloc-4.0.4.tar.bz2"
+ version('4.5.0', 'a5624318fbf5bf653697306642683a11')
+ version('4.4.0', '81b59778e19696d99e2f7922820671b0')
version('4.3.1', 'f204c0ea1aef92fbb339dc640de338a6')
version('4.2.1', '094b0a7b8c77c464d0dc8f0643fd3901')
version('4.2.0', 'e6b5d5a1ea93a04207528d274efdd144')
diff --git a/var/spack/repos/builtin/packages/jmol/package.py b/var/spack/repos/builtin/packages/jmol/package.py
new file mode 100644
index 0000000000..0688d63816
--- /dev/null
+++ b/var/spack/repos/builtin/packages/jmol/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+
+
+class Jmol(Package):
+ """Jmol: an open-source Java viewer for chemical structures in 3D
+ with features for chemicals, crystals, materials and biomolecules."""
+
+ homepage = "http://jmol.sourceforge.net/"
+ url = "https://sourceforge.net/projects/jmol/files/Jmol/Version%2014.8/Jmol%2014.8.0/Jmol-14.8.0-binary.tar.gz"
+
+ version('14.8.0', '3c9f4004b9e617ea3ea0b78ab32397ea')
+
+ depends_on('java', type='run')
+
+ def install(self, spec, prefix):
+ copy_tree('jmol-{0}'.format(self.version), prefix)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', self.prefix)
+ run_env.set('JMOL_HOME', self.prefix)
diff --git a/var/spack/repos/builtin/packages/jq/package.py b/var/spack/repos/builtin/packages/jq/package.py
new file mode 100644
index 0000000000..1d7d912a91
--- /dev/null
+++ b/var/spack/repos/builtin/packages/jq/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Jq(AutotoolsPackage):
+ """jq is a lightweight and flexible command-line JSON processor."""
+
+ homepage = "https://stedolan.github.io/jq/"
+ url = "https://github.com/stedolan/jq/archive/jq-1.5.tar.gz"
+
+ version('1.5', 'c8070bd6ec275404f77db3d2e568c9a3')
+
+ depends_on('oniguruma')
+ depends_on('bison@3.0:', type='build')
diff --git a/var/spack/repos/builtin/packages/libjson-c/package.py b/var/spack/repos/builtin/packages/json-c/package.py
index 561c8ab71f..5076650d69 100644
--- a/var/spack/repos/builtin/packages/libjson-c/package.py
+++ b/var/spack/repos/builtin/packages/json-c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,14 @@
from spack import *
-class LibjsonC(AutotoolsPackage):
- """ A JSON implementation in C """
+class JsonC(AutotoolsPackage):
+ """A JSON implementation in C."""
homepage = "https://github.com/json-c/json-c/wiki"
- url = "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.11.tar.gz"
+ url = "https://s3.amazonaws.com/json-c_releases/releases/json-c-0.12.1.tar.gz"
- parallel = False
+ version('0.12.1', '55f7853f7d8cf664554ce3fa71bf1c7d')
+ version('0.11', 'aa02367d2f7a830bf1e3376f77881e98')
+
+ depends_on('autoconf', type='build')
- version('0.11', 'aa02367d2f7a830bf1e3376f77881e98')
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/json-cwx/package.py b/var/spack/repos/builtin/packages/json-cwx/package.py
new file mode 100644
index 0000000000..bd331acb03
--- /dev/null
+++ b/var/spack/repos/builtin/packages/json-cwx/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 JsonCwx(AutotoolsPackage):
+ """JSON-C with Extensions"""
+
+ homepage = "https://github.com/LLNL/json-cwx"
+ url = "https://github.com/LLNL/json-cwx/archive/0.12.tar.gz"
+
+ version('0.12', '8ba44ef7f463f004b4b14c6d8d85a2b70db977a4')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ parallel = False
+
+ configure_directory = 'json-cwx'
+
+ def autoreconf(self, spec, prefix):
+ with working_dir('json-cwx'):
+ autogen = Executable("./autogen.sh")
+ autogen()
diff --git a/var/spack/repos/builtin/packages/jsoncpp/package.py b/var/spack/repos/builtin/packages/jsoncpp/package.py
index 5169b338ee..3b486bf356 100644
--- a/var/spack/repos/builtin/packages/jsoncpp/package.py
+++ b/var/spack/repos/builtin/packages/jsoncpp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Jsoncpp(Package):
+class Jsoncpp(CMakePackage):
"""JsonCpp is a C++ library that allows manipulating JSON values,
including serialization and deserialization to and from strings.
It can also preserve existing comment in unserialization/serialization
@@ -36,14 +36,14 @@ class Jsoncpp(Package):
version('1.7.3', 'aff6bfb5b81d9a28785429faa45839c5')
- depends_on('cmake', type='build')
- # depends_on('python', type='test')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo',
+ 'MinSizeRel', 'Coverage'))
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', '-DBUILD_SHARED_LIBS=ON', *std_cmake_args)
+ depends_on('cmake@3.1:', type='build')
+ # TODO: Add a 'test' deptype
+ # depends_on('python', type='test')
- make()
- if self.run_tests:
- make('test') # Python needed to run tests
- make('install')
+ def cmake_args(self):
+ return ['-DBUILD_SHARED_LIBS=ON']
diff --git a/var/spack/repos/builtin/packages/judy/package.py b/var/spack/repos/builtin/packages/judy/package.py
index 8b8b261e53..87b061bd33 100644
--- a/var/spack/repos/builtin/packages/judy/package.py
+++ b/var/spack/repos/builtin/packages/judy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,11 @@
from spack import *
-class Judy(Package):
+class Judy(AutotoolsPackage):
"""Judy: General-purpose dynamic array, associative array and hash-trie."""
homepage = "http://judy.sourceforge.net/"
url = "http://downloads.sourceforge.net/project/judy/judy/Judy-1.0.5/Judy-1.0.5.tar.gz"
version('1.0.5', '115a0d26302676e962ae2f70ec484a54')
- parallel = False
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make("install")
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/julia/package.py b/var/spack/repos/builtin/packages/julia/package.py
index 89db570b81..fa6aaf3f95 100644
--- a/var/spack/repos/builtin/packages/julia/package.py
+++ b/var/spack/repos/builtin/packages/julia/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,9 @@ class Julia(Package):
git='https://github.com/JuliaLang/julia.git', branch='master')
version('release-0.5',
git='https://github.com/JuliaLang/julia.git', branch='release-0.5')
- version('0.5.0', 'b61385671ba74767ab452363c43131fb', preferred=True)
+ version('0.5.2', '8c3fff150a6f96cf0536fb3b4eaa5cbb', preferred=True)
+ version('0.5.1', 'bce119b98f274e0f07ce01498c463ad5')
+ version('0.5.0', 'b61385671ba74767ab452363c43131fb')
version('release-0.4',
git='https://github.com/JuliaLang/julia.git', branch='release-0.4')
version('0.4.7', '75a7a7dd882b7840829d8f165e9b9078')
@@ -53,6 +55,7 @@ class Julia(Package):
description="Install Julia plotting packages")
variant("python", default=False,
description="Install Julia Python package")
+ variant("simd", default=False, description="Install Julia SIMD package")
patch('gc.patch', when='@0.4:0.4.5')
patch('openblas.patch', when='@0.4:0.4.5')
@@ -73,7 +76,7 @@ class Julia(Package):
depends_on("git", when='@:0.4')
depends_on("git", when='@release-0.4')
depends_on("openssl")
- depends_on("python @2.7:2.999")
+ depends_on("python@2.7:2.8")
# Run-time dependencies:
# depends_on("arpack")
@@ -148,8 +151,10 @@ class Julia(Package):
make("install")
# Julia's package manager needs a certificate
+ cacert_dir = join_path(prefix, "etc", "curl")
+ mkdirp(cacert_dir)
+ cacert_file = join_path(cacert_dir, "cacert.pem")
curl = which("curl")
- cacert_file = join_path(prefix, "etc", "curl", "cacert.pem")
curl("--create-dirs",
"--output", cacert_file,
"https://curl.haxx.se/ca/cacert.pem")
@@ -181,7 +186,7 @@ class Julia(Package):
juliarc.write('\n')
# Install some commonly used packages
- julia = Executable(join_path(prefix.bin, "julia"))
+ julia = spec['julia'].command
julia("-e", 'Pkg.init(); Pkg.update()')
# Install HDF5
@@ -212,7 +217,7 @@ class Julia(Package):
with open(join_path(prefix, "etc", "julia", "juliarc.jl"),
"a") as juliarc:
juliarc.write('# Python\n')
- juliarc.write('ENV["PYTHON"] = "%s"\n' % spec["python"].prefix)
+ juliarc.write('ENV["PYTHON"] = "%s"\n' % spec["python"].home)
juliarc.write('\n')
# Python's OpenSSL package installer complains:
# Error: PREFIX too long: 166 characters, but only 128 allowed
@@ -233,4 +238,8 @@ unicodeplots()
plot(x->sin(x)*cos(x), linspace(0, 2pi))
""")
+ # Install SIMD
+ if "+simd" in spec:
+ julia("-e", 'Pkg.add("SIMD"); using SIMD')
+
julia("-e", 'Pkg.status()')
diff --git a/var/spack/repos/builtin/packages/kahip/package.py b/var/spack/repos/builtin/packages/kahip/package.py
new file mode 100644
index 0000000000..30565a5180
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kahip/package.py
@@ -0,0 +1,88 @@
+##############################################################################
+# Copyright (c) 2017 Christian Schulz
+# Karlsruhe Institute of Technology (KIT), Karlsruhe, Germany
+#
+# This file is released as part of Spack under the LGPL license
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE file for the LLNL notice and LGPL.
+#
+# License
+# -------
+# 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 *
+
+import os
+import re
+
+
+class Kahip(SConsPackage):
+ """KaHIP - Karlsruhe High Quality Partitioning - is a family of graph
+ partitioning programs. It includes KaFFPa (Karlsruhe Fast Flow
+ Partitioner), which is a multilevel graph partitioning algorithm,
+ in its variants Strong, Eco and Fast, KaFFPaE (KaFFPaEvolutionary)
+ which is a parallel evolutionary algorithm that uses KaFFPa to
+ provide combine and mutation operations, as well as KaBaPE which
+ extends the evolutionary algorithm. Moreover, specialized
+ techniques are included to partition road networks (Buffoon), to
+ output a vertex separator from a given partition or techniques
+ geared towards efficient partitioning of social networks.
+ """
+
+ homepage = 'http://algo2.iti.kit.edu/documents/kahip/index.html'
+ url = 'http://algo2.iti.kit.edu/schulz/software_releases/KaHIP_2.00.tar.gz'
+
+ version('develop', git='https://github.com/schulzchristian/KaHIP.git')
+ version('2.00', '0a66b0a604ad72cfb7e3dce00e2c9fdfac82b855')
+
+ depends_on('argtable')
+ depends_on('mpi') # Note: upstream package only tested on openmpi
+
+ conflicts('%clang')
+
+ def patch(self):
+ """Internal compile.sh scripts hardcode number of cores to build with.
+ Filter these out so Spack can control it."""
+
+ files = [
+ 'compile.sh',
+ 'parallel/modified_kahip/compile.sh',
+ 'parallel/parallel_src/compile.sh',
+ ]
+
+ for f in files:
+ filter_file('NCORES=.*', 'NCORES={0}'.format(make_jobs), f)
+
+ def build(self, spec, prefix):
+ """Build using the KaHIP compile.sh script. Uses scons internally."""
+ builder = Executable('./compile.sh')
+ builder()
+
+ def install(self, spec, prefix):
+ """Install under the prefix"""
+ # Ugly: all files land under 'deploy' and we need to disentangle them
+ mkdirp(prefix.bin)
+ mkdirp(prefix.include)
+ mkdirp(prefix.lib)
+
+ with working_dir('deploy'):
+ for f in os.listdir('.'):
+ if re.match(r'.*\.(a|so|dylib)$', f):
+ install(f, prefix.lib)
+ elif re.match(r'.*\.h$', f):
+ install(f, prefix.include)
+ else:
+ install(f, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/kaks-calculator/package.py b/var/spack/repos/builtin/packages/kaks-calculator/package.py
new file mode 100644
index 0000000000..622e499e7f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kaks-calculator/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 KaksCalculator(MakefilePackage):
+ """KaKs_Calculator adopts model selection and model averaging to calculate
+ nonsynonymous (Ka) and synonymous (Ks) substitution rates, attempting to
+ include as many features as needed for accurately capturing evolutionary
+ information in protein-coding sequences."""
+
+ homepage = "https://sourceforge.net/projects/kakscalculator2"
+ url = "https://downloads.sourceforge.net/project/kakscalculator2/KaKs_Calculator2.0.tar.gz"
+
+ version('2.0', '956ec7bdb30fac7da3b5b2563151a85e')
+
+ build_directory = 'src'
+
+ def url_for_version(self, version):
+ url = 'https://downloads.sourceforge.net/project/kakscalculator2/KaKs_Calculator{0}.tar.gz'
+ return url.format(version)
+
+ # include<string.h> needs added to header file for compilation to work
+ def patch(self):
+ with working_dir(self.build_directory):
+ header = FileFilter('base.h')
+ header.filter('#include<time.h>',
+ '#include<time.h>\n#include<string.h>')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir(self.build_directory):
+ install('KaKs_Calculator', prefix.bin)
+ install('ConPairs', prefix.bin)
+ install('AXTConvertor', prefix.bin)
+ install_tree('doc', prefix.doc)
+ install_tree('examples', prefix.examples)
diff --git a/var/spack/repos/builtin/packages/kaldi/openfst-1.4.1.patch b/var/spack/repos/builtin/packages/kaldi/openfst-1.4.1.patch
new file mode 100644
index 0000000000..62e0c7544b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kaldi/openfst-1.4.1.patch
@@ -0,0 +1,45 @@
+From ef1c38844fd4c40304176f4e672189010805a3d9 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Thu, 13 Apr 2017 15:17:12 +0800
+Subject: [PATCH 1/1] Add a patched openfst@1.4.1-patch for Kaldi.
+
+---
+ src/configure | 4 ++--
+ tools/Makefile | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/src/configure b/src/configure
+index c90e9ba4e..ff328772c 100755
+--- a/src/configure
++++ b/src/configure
+@@ -793,9 +793,9 @@ echo "CONFIGURE_VERSION := $CONFIGURE_VERSION" >> kaldi.mk
+ echo "FSTROOT = $FSTROOT" >> kaldi.mk
+
+ # Check installed OpenFst version and add C++11 flags if OpenFst >= 1.4
+-OPENFST_VER=`grep 'PACKAGE_VERSION' $FSTROOT/Makefile | sed -e 's:.*= ::'`
++OPENFST_VER=1.4.1
+ echo "OPENFST_VER = $OPENFST_VER" >> kaldi.mk
+-OPENFST_VER_NUM=`echo $OPENFST_VER | sed 's/\./ /g' | xargs printf "%d%02d%02d"`
++OPENFST_VER_NUM=104001
+ if [ $OPENFST_VER_NUM -ge 10400 ]; then
+ echo "OPENFST_GE_10400 = 1" >> kaldi.mk
+ echo "EXTRA_CXXFLAGS += -DHAVE_OPENFST_GE_10400 -std=c++0x" >> kaldi.mk
+diff --git a/tools/Makefile b/tools/Makefile
+index cb3a35b2a..b868e600a 100644
+--- a/tools/Makefile
++++ b/tools/Makefile
+@@ -3,9 +3,9 @@
+ CXX = g++
+ # CXX = clang++ # Uncomment this line to build with Clang.
+
+-OPENFST_VERSION = 1.3.4
++# OPENFST_VERSION = 1.3.4
+ # Uncomment the next line to build with OpenFst-1.4.1.
+-# OPENFST_VERSION = 1.4.1
++OPENFST_VERSION = 1.4.1
+ # Note: OpenFst >= 1.4 requires C++11 support, hence you will need to use a
+ # relatively recent C++ compiler, e.g. gcc >= 4.6, clang >= 3.0.
+
+--
+2.11.1
+
diff --git a/var/spack/repos/builtin/packages/kaldi/package.py b/var/spack/repos/builtin/packages/kaldi/package.py
new file mode 100644
index 0000000000..bb2481d879
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kaldi/package.py
@@ -0,0 +1,112 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+from os.path import join
+from fnmatch import fnmatch
+import os
+
+
+class Kaldi(Package): # Does not use Autotools
+ """Kaldi is a toolkit for speech recognition written
+ in C++ and licensed under the Apache License v2.0.
+ Kaldi is intended for use by speech recognition researchers."""
+
+ homepage = "https://github.com/kaldi-asr/kaldi"
+ url = "https://github.com/kaldi-asr/kaldi/archive/master.zip"
+
+ version('master', git='https://github.com/kaldi-asr/kaldi.git')
+ version('c024e8', git='https://github.com/kaldi-asr/kaldi.git',
+ commit='c024e8aa0a727bf76c91a318f76a1f8b0b59249e')
+
+ variant('shared', default=True,
+ description='build shared libraries')
+ variant('double', default=False,
+ description='build with double precision floats')
+ variant('cuda', default=False,
+ description='build with CUDA')
+
+ depends_on('blas')
+ depends_on('cuda', when='+cuda')
+ depends_on('sph2pipe', type='run')
+ depends_on('sctk', type='run')
+ depends_on('speex', type='run')
+ depends_on('openfst@1.4.1-patch', when='@c024e8')
+ depends_on('openfst')
+
+ patch('openfst-1.4.1.patch', when='@c024e8')
+
+ def install(self, spec, prefix):
+ configure_args = ['--fst-root=' + spec['openfst'].prefix]
+
+ if spec.satisfies('c024e8'):
+ configure_args.append('--speex-root=' + spec['speex'].prefix)
+ configure_args.append('--fst-version=' +
+ str(spec['openfst'].version))
+
+ if '~shared' in spec:
+ configure_args.append('--static')
+ else:
+ configure_args.append('--shared')
+
+ if '^openblas' in spec:
+ configure_args.append('--mathlib=OPENBLAS')
+ configure_args.append('--openblas-root=' + spec['blas'].prefix)
+ if '+openmp' in spec['blas'].variants:
+ configure_args.append('--threaded-math=yes')
+ elif '^atlas' in spec:
+ configure_args.append('--mathlib=ATLAS')
+ configure_args.append('--atlas-root=' + spec['blas'].prefix)
+ if '+pthread' in spec['blas'].variants:
+ configure_args.append('--threaded-atlas')
+ elif '^intel-parallel-studio' in spec or '^intel-mkl' in spec:
+ configure_args.append('--mathlib=MKL')
+ configure_args.append('--mkl-root=' + spec['blas'].prefix)
+ if '+openmp' in spec['blas'].variants:
+ configure_args.append('--mkl-threading=iomp')
+
+ if '+cuda' in spec:
+ configure_args.append('--use-cuda=yes')
+ configure_args.append('--cudatk-dir=' + spec['cuda'].prefix)
+
+ with working_dir("src"):
+ configure(*configure_args)
+ make()
+
+ mkdirp(prefix.bin)
+ for root, dirs, files in os.walk('bin'):
+ for name in files:
+ if os.access(join(root, name), os.X_OK):
+ install(join(root, name), prefix.bin)
+
+ mkdir(prefix.lib)
+ copy_tree('lib', prefix.lib)
+
+ for root, dirs, files in os.walk('.'):
+ for name in files:
+ if fnmatch(name, '*.h'):
+ mkdirp(join(prefix.include, root.strip("./")))
+ install(join(root, name),
+ join(prefix.include, root.strip("./")))
diff --git a/var/spack/repos/builtin/packages/kallisto/package.py b/var/spack/repos/builtin/packages/kallisto/package.py
new file mode 100644
index 0000000000..1d0cb35a18
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kallisto/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Kallisto(CMakePackage):
+ """kallisto is a program for quantifying abundances of transcripts from
+ RNA-Seq data."""
+
+ homepage = "http://pachterlab.github.io/kallisto"
+ url = "https://github.com/pachterlab/kallisto/archive/v0.43.1.tar.gz"
+
+ version('0.43.1', '54fc9b70ca44e4633f02c962cbc59737')
+
+ depends_on('zlib')
+ depends_on('hdf5')
+ depends_on('mpich')
diff --git a/var/spack/repos/builtin/packages/kbproto/package.py b/var/spack/repos/builtin/packages/kbproto/package.py
index 356d1c6b4f..fa210e9101 100644
--- a/var/spack/repos/builtin/packages/kbproto/package.py
+++ b/var/spack/repos/builtin/packages/kbproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Kbproto(Package):
+class Kbproto(AutotoolsPackage):
"""X Keyboard Extension.
This extension defines a protcol to provide a number of new capabilities
@@ -38,8 +38,3 @@ class Kbproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/kdiff3/package.py b/var/spack/repos/builtin/packages/kdiff3/package.py
index 48f4b9c379..4d60416497 100644
--- a/var/spack/repos/builtin/packages/kdiff3/package.py
+++ b/var/spack/repos/builtin/packages/kdiff3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/kealib/package.py b/var/spack/repos/builtin/packages/kealib/package.py
index 5346fc8cb9..3b24a08393 100644
--- a/var/spack/repos/builtin/packages/kealib/package.py
+++ b/var/spack/repos/builtin/packages/kealib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Kealib(Package):
+class Kealib(CMakePackage):
"""An HDF5 Based Raster File Format
KEALib provides an implementation of the GDAL data model.
@@ -46,16 +46,13 @@ class Kealib(Package):
version('1.4.5', '112e9c42d980b2d2987a3c15d0833a5d')
- depends_on("hdf5")
+ depends_on('hdf5')
+ depends_on('cmake@2.8.10:', type='build')
- def install(self, spec, prefix):
- with working_dir('trunk', create=False):
- cmake_args = []
- cmake_args.append("-DCMAKE_INSTALL_PREFIX=%s" % prefix)
- cmake_args.append("-DHDF5_INCLUDE_DIR=%s" %
- spec['hdf5'].prefix.include)
- cmake_args.append("-DHDF5_LIB_PATH=%s" % spec['hdf5'].prefix.lib)
- cmake('.', *cmake_args)
+ root_cmakelists_dir = 'trunk'
- make()
- make("install")
+ def cmake_args(self):
+ return [
+ '-DHDF5_INCLUDE_DIR=%s' % self.spec['hdf5'].prefix.include,
+ '-DHDF5_LIB_PATH=%s' % self.spec['hdf5'].prefix.lib,
+ ]
diff --git a/var/spack/repos/builtin/packages/kentutils/package.py b/var/spack/repos/builtin/packages/kentutils/package.py
new file mode 100644
index 0000000000..3fdd495a17
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kentutils/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Kentutils(MakefilePackage):
+ """Jim Kent command line bioinformatic utilities"""
+
+ homepage = "https://github.com/ENCODE-DCC/kentUtils"
+ url = "https://github.com/ENCODE-DCC/kentUtils"
+
+ version('302.1', git='https://github.com/ENCODE-DCC/kentUtils.git', commit='d8376c5d52a161f2267346ed3dc94b5dce74c2f9')
+
+ depends_on('libpng')
+ depends_on('openssl')
+
+ # Actually depends on mysql, but mariadb works for now until mysql is
+ # available
+ depends_on('mariadb')
+
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/kmergenie/package.py b/var/spack/repos/builtin/packages/kmergenie/package.py
new file mode 100644
index 0000000000..7f64892d70
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kmergenie/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Kmergenie(MakefilePackage):
+ """KmerGenie estimates the best k-mer length for genome de novo assembly.
+ """
+
+ homepage = "http://kmergenie.bx.psu.edu/"
+ url = "http://kmergenie.bx.psu.edu/kmergenie-1.7044.tar.gz"
+
+ version('1.7044', '407209c8181f1631ecb79b0ca735d18f')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('r', type=('build', 'run'))
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ install_tree(self.stage.source_path, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/kokkos/package.py b/var/spack/repos/builtin/packages/kokkos/package.py
new file mode 100644
index 0000000000..e1ebf79eca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kokkos/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Kokkos(Package):
+ """Kokkos implements a programming model in C++ for writing performance
+ portable applications targeting all major HPC platforms."""
+
+ homepage = "https://github.com/kokkos/kokkos"
+ url = "https://github.com/kokkos/kokkos/archive/2.03.00.tar.gz"
+
+ version('2.03.00', 'f205d659d4304747759fabfba32d43c3')
+
+ variant('qthreads', default=False, description="enable Qthreads backend")
+ variant('cuda', default=False, description="enable Cuda backend")
+
+ depends_on('hwloc')
+ depends_on('qthreads', when='+qthreads')
+ depends_on('cuda', when='+cuda')
+
+ def install(self, spec, prefix):
+ generate = which(join_path(self.stage.source_path,
+ 'generate_makefile.bash'))
+ with working_dir('build', create=True):
+ g_args = [
+ '--prefix=%s' % prefix,
+ '--with-hwloc=%s' % spec['hwloc'].prefix,
+ '--with-serial',
+ '--with-openmp',
+ ]
+ if 'qthreads' in spec:
+ g_args.append('--with-qthreads=%s' % spec['qthreads'].prefix)
+ if 'cuda' in spec:
+ g_args.append('--with-cuda=%s' % spec['cuda'].prefix)
+
+ generate(*g_args)
+ make()
+ make('install')
diff --git a/var/spack/repos/builtin/packages/kraken/package.py b/var/spack/repos/builtin/packages/kraken/package.py
new file mode 100644
index 0000000000..3994c8c138
--- /dev/null
+++ b/var/spack/repos/builtin/packages/kraken/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+import os
+
+
+class Kraken(Package):
+ """Kraken is a system for assigning taxonomic labels to short DNA
+ sequences, usually obtained through metagenomic studies."""
+
+ homepage = "https://ccb.jhu.edu/software/kraken/"
+ url = "https://github.com/DerrickWood/kraken/archive/v1.0.tar.gz"
+
+ version('1.0', 'e790d6b09662bbd810aa34517ef66586')
+
+ depends_on('perl', type=('build', 'run'))
+ # Does NOT support JELLYFISH 2.0. Ver 1.1.11 is the last version of
+ # JELLYFISH 1.
+ depends_on('jellyfish@1.1.11', when='@1.0')
+
+ def install(self, spec, prefix):
+ installer = Executable('./install_kraken.sh')
+ installer(self.stage.source_path)
+ mkdirp(prefix.bin)
+ files = glob.iglob('*')
+ for file in files:
+ if os.path.isfile(file):
+ install(file, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/krims/package.py b/var/spack/repos/builtin/packages/krims/package.py
new file mode 100644
index 0000000000..f64092de6c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/krims/package.py
@@ -0,0 +1,86 @@
+##############################################################################
+# 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/spack/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 Krims(CMakePackage):
+ """The bucket of Krimskrams every C or C++ project needs"""
+
+ homepage = "http://lazyten.org/krims"
+ url = "https://github.com/lazyten/krims/archive/v0.2.1.tar.gz"
+ maintainers = ['mfherbst']
+
+ #
+ # Versions
+ #
+ version("0.2.1", "bf219656fd81c342a4782bad7d7beed0")
+ version("develop", git="https://github.com/lazyten/krims.git",
+ branch="master")
+
+ #
+ # Variants
+ #
+ # Library build type
+ variant("build_type", default="DebugRelease",
+ description="The build type to build",
+ values=("Debug", "Release", "DebugRelease"))
+ variant("shared", default=True,
+ description="Build shared libraries (else the static one)")
+
+ # Components
+ variant("examples", default=False,
+ description="Compile examples")
+
+ #
+ # Conflicts
+ #
+ # Only builds on clang > 3.5 and gcc > 4.8
+ conflicts("%intel", msg="krims only builds with gcc and clang")
+ conflicts("%gcc@:4.8")
+ conflicts("%clang@:3.5")
+
+ #
+ # Dependencies
+ #
+ depends_on("cmake@3:", type="build")
+
+ #
+ # Settings and cmake cache
+ #
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ "-DAUTOCHECKOUT_MISSING_REPOS=OFF",
+ #
+ "-DBUILD_SHARED_LIBS=" + str("+shared" in spec),
+ "-DDRB_MACHINE_SPECIFIC_OPTIM_Release=ON", # Adds -march=native
+ #
+ # TODO Hard-disable tests for now, since rapidcheck not in Spack
+ "-DKRIMS_ENABLE_TESTS=OFF",
+ "-DKRIMS_ENABLE_EXAMPLES=" + str("+examples" in spec),
+ ]
+
+ return args
diff --git a/var/spack/repos/builtin/packages/kripke/package.py b/var/spack/repos/builtin/packages/kripke/package.py
index cf8d2b7e39..d2030cbcfe 100644
--- a/var/spack/repos/builtin/packages/kripke/package.py
+++ b/var/spack/repos/builtin/packages/kripke/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,33 +25,33 @@
from spack import *
-class Kripke(Package):
+class Kripke(CMakePackage):
"""Kripke is a simple, scalable, 3D Sn deterministic particle
transport proxy/mini app.
"""
homepage = "https://codesign.llnl.gov/kripke.php"
url = "https://codesign.llnl.gov/downloads/kripke-openmp-1.1.tar.gz"
+ tags = ['proxy-app']
version('1.1', '7fe6f2b26ed983a6ce5495ab701f85bf')
variant('mpi', default=True, description='Build with MPI.')
variant('openmp', default=True, description='Build with OpenMP enabled.')
- depends_on('mpi', when="+mpi")
+ depends_on('mpi', when='+mpi')
+ depends_on('cmake@3.0:', type='build')
+
+ def cmake_args(self):
+ def enabled(variant):
+ return (1 if variant in self.spec else 0)
+
+ return [
+ '-DENABLE_OPENMP=%d' % enabled('+openmp'),
+ '-DENABLE_MPI=%d' % enabled('+mpi'),
+ ]
def install(self, spec, prefix):
- with working_dir('build', create=True):
- def enabled(variant):
- return (1 if variant in spec else 0)
-
- cmake('-DCMAKE_INSTALL_PREFIX:PATH=.',
- '-DENABLE_OPENMP=%d' % enabled('+openmp'),
- '-DENABLE_MPI=%d' % enabled('+mpi'),
- '..',
- *std_cmake_args)
- make()
-
- # Kripke does not provide install target, so we have to copy
- # things into place.
- mkdirp(prefix.bin)
- install('kripke', prefix.bin)
+ # Kripke does not provide install target, so we have to copy
+ # things into place.
+ mkdirp(prefix.bin)
+ install('spack-build/kripke', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/laghos/package.py b/var/spack/repos/builtin/packages/laghos/package.py
new file mode 100644
index 0000000000..0e889782e6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/laghos/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Laghos(MakefilePackage):
+ """Laghos (LAGrangian High-Order Solver) is a CEED miniapp that solves the
+ time-dependent Euler equations of compressible gas dynamics in a moving
+ Lagrangian frame using unstructured high-order finite element spatial
+ discretization and explicit high-order time-stepping.
+ """
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ homepage = "https://codesign.llnl.gov/laghos.php"
+ git = "https://github.com/CEED/Laghos"
+ url = "https://github.com/CEED/Laghos/archive/v1.0.tar.gz"
+
+ version('1.0', '107c2f693936723e764a4d404d33d44a')
+ version('develop', git=git, branch='master')
+
+ depends_on('mpi')
+ depends_on('mfem@laghos-v1.0', when='@1.0')
+
+ @property
+ def build_targets(self):
+ targets = []
+ spec = self.spec
+
+ targets.append('MFEM_DIR=%s' % spec['mfem'].prefix)
+ targets.append('CONFIG_MK=%s' % join_path(spec['mfem'].prefix,
+ 'share/mfem/config.mk'))
+ targets.append('TEST_MK=%s' % join_path(spec['mfem'].prefix,
+ 'share/mfem/test.mk'))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('laghos', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/lammps/660.patch b/var/spack/repos/builtin/packages/lammps/660.patch
new file mode 100644
index 0000000000..9d1d11aff4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lammps/660.patch
@@ -0,0 +1,24 @@
+From b46cc6a6a7410108af84a854818c154a17e0ef42 Mon Sep 17 00:00:00 2001
+From: Christoph Junghans <junghans@lanl.gov>
+Date: Fri, 22 Sep 2017 15:17:44 -0600
+Subject: [PATCH] cmake: fix build with system cmake
+
+---
+ cmake/CMakeLists.txt | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
+index bc33da60de..666b77ae3d 100644
+--- a/cmake/CMakeLists.txt
++++ b/cmake/CMakeLists.txt
+@@ -665,7 +665,9 @@ include_directories(${LAMMPS_STYLE_HEADERS_DIR})
+ ############################################
+ add_library(lammps ${LIB_SOURCES})
+ target_link_libraries(lammps ${LAMMPS_LINK_LIBS})
+-add_dependencies(lammps ${LAMMPS_DEPS})
++if(LAMMPS_DEPS)
++ add_dependencies(lammps ${LAMMPS_DEPS})
++endif()
+ set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_MACHINE})
+ if(BUILD_SHARED_LIBS)
+ set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
diff --git a/var/spack/repos/builtin/packages/lammps/Makefile.inc b/var/spack/repos/builtin/packages/lammps/Makefile.inc
new file mode 100644
index 0000000000..6986a255b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lammps/Makefile.inc
@@ -0,0 +1,49 @@
+SHELL = /bin/sh
+
+# ---------------------------------------------------------------------
+# build rules and dependencies
+# do not edit this section
+
+include Makefile.package.settings
+include Makefile.package
+
+EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PKG_SYSINC)
+EXTRA_PATH = $(PKG_PATH) $(MPI_PATH) $(FFT_PATH) $(JPG_PATH) $(PKG_SYSPATH)
+EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PKG_SYSLIB)
+EXTRA_CPP_DEPENDS = $(PKG_CPP_DEPENDS)
+EXTRA_LINK_DEPENDS = $(PKG_LINK_DEPENDS)
+
+# Path to src files
+
+vpath %.cpp ..
+vpath %.h ..
+
+# Link target
+
+$(EXE): $(OBJ) $(EXTRA_LINK_DEPENDS)
+ $(LINK) $(LINKFLAGS) $(EXTRA_PATH) $(OBJ) $(EXTRA_LIB) $(LIB) -o $(EXE)
+ $(SIZE) $(EXE)
+
+# Library targets
+
+lib: $(OBJ) $(EXTRA_LINK_DEPENDS)
+ $(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)
+
+shlib: $(OBJ) $(EXTRA_LINK_DEPENDS)
+ $(CC) $(CCFLAGS) $(SHFLAGS) $(SHLIBFLAGS) $(EXTRA_PATH) -o $(EXE) \
+ $(OBJ) $(EXTRA_LIB) $(LIB)
+
+# Compilation rules
+
+%.o:%.cpp
+ $(CC) $(CCFLAGS) $(SHFLAGS) $(EXTRA_INC) -c $<
+
+# Individual dependencies
+
+depend : fastdep.exe $(SRC)
+ @./fastdep.exe $(EXTRA_INC) -- $^ > .depend || exit 1
+
+fastdep.exe: ../DEPEND/fastdep.c
+ cc -O -o $@ $<
+
+sinclude .depend
diff --git a/var/spack/repos/builtin/packages/lammps/lib.patch b/var/spack/repos/builtin/packages/lammps/lib.patch
new file mode 100644
index 0000000000..5a55aafaae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lammps/lib.patch
@@ -0,0 +1,13 @@
+diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
+index 6d35db75a..5987869b8 100644
+--- a/cmake/CMakeLists.txt
++++ b/cmake/CMakeLists.txt
+@@ -530,7 +530,7 @@ target_link_libraries(lammps ${LAMMPS_LINK_LIBS})
+ set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION})
+ if(INSTALL_LIB)
+ install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
+- install(FILES ${LAMMPS_SOURCE_DIR}/lammps.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
++ install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps)
+ elseif(BUILD_SHARED_LIBS)
+ message(FATAL_ERROR "Shared library has to be installed, use -DINSTALL_LIB=ON to install lammps with a library")
+ endif()
diff --git a/var/spack/repos/builtin/packages/lammps/package.py b/var/spack/repos/builtin/packages/lammps/package.py
new file mode 100644
index 0000000000..7eeea42773
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lammps/package.py
@@ -0,0 +1,112 @@
+##############################################################################
+# 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/spack/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 *
+import datetime as dt
+
+
+class Lammps(CMakePackage):
+ """LAMMPS stands for Large-scale Atomic/Molecular Massively
+ Parallel Simulator. This package uses patch releases, not
+ stable release.
+ See https://github.com/spack/spack/pull/5342 for a detailed
+ discussion.
+ """
+ homepage = "http://lammps.sandia.gov/"
+ url = "https://github.com/lammps/lammps/archive/patch_1Sep2017.tar.gz"
+
+ version('20170922', '4306071f919ec7e759bda195c26cfd9a')
+ version('20170901', '767e7f07289663f033474dfe974974e7')
+ version('develop', git='https://github.com/lammps/lammps', branch='master')
+
+ def url_for_version(self, version):
+ vdate = dt.datetime.strptime(str(version), "%Y%m%d")
+ return "https://github.com/lammps/lammps/archive/patch_{0}.tar.gz".format(
+ vdate.strftime("%d%b%Y").lstrip('0'))
+
+ supported_packages = ['asphere', 'body', 'class2', 'colloid', 'compress',
+ 'coreshell', 'dipole', 'granular', 'kspace', 'latte',
+ 'manybody', 'mc', 'meam', 'misc', 'molecule',
+ 'mpiio', 'peri', 'poems', 'python', 'qeq', 'reax',
+ 'replica', 'rigid', 'shock', 'snap', 'srd',
+ 'user-atc', 'user-h5md', 'user-lb', 'user-misc',
+ 'user-netcdf', 'user-omp', 'voronoi']
+
+ for pkg in supported_packages:
+ variant(pkg, default=False,
+ description='Activate the {0} package'.format(pkg))
+ variant('lib', default=True,
+ description='Build the liblammps in addition to the executable')
+ variant('mpi', default=True,
+ description='Build with mpi')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('mpi', when='+mpiio')
+ depends_on('fftw', when='+kspace')
+ depends_on('voropp', when='+voronoi')
+ depends_on('netcdf+mpi', when='+user-netcdf')
+ depends_on('blas', when='+user-atc')
+ depends_on('lapack', when='+user-atc')
+ depends_on('latte', when='+latte')
+ depends_on('blas', when='+latte')
+ depends_on('lapack', when='+latte')
+ depends_on('python', when='+python')
+ depends_on('mpi', when='+user-lb')
+ depends_on('mpi', when='+user-h5md')
+ depends_on('hdf5', when='+user-h5md')
+
+ conflicts('+body', when='+poems')
+ conflicts('+latte', when='@:20170921')
+ conflicts('+python', when='~lib')
+ conflicts('+qeq', when='~manybody')
+ conflicts('+user-atc', when='~manybody')
+ conflicts('+user-misc', when='~manybody')
+ conflicts('+user-phonon', when='~kspace')
+ conflicts('+user-misc', when='~manybody')
+
+ patch("lib.patch", when="@20170901")
+ patch("660.patch", when="@20170922")
+
+ root_cmakelists_dir = 'cmake'
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DBUILD_SHARED_LIBS={0}'.format(
+ 'ON' if '+lib' in spec else 'OFF'),
+ '-DENABLE_MPI={0}'.format(
+ 'ON' if '+mpi' in spec else 'OFF')
+ ]
+
+ for pkg in self.supported_packages:
+ opt = '-DENABLE_{0}'.format(pkg.upper())
+ if '+{0}'.format(pkg) in spec:
+ args.append('{0}=ON'.format(opt))
+ else:
+ args.append('{0}=OFF'.format(opt))
+ if '+kspace' in spec:
+ args.append('-DFFT=FFTW3')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/last/package.py b/var/spack/repos/builtin/packages/last/package.py
new file mode 100644
index 0000000000..34054313f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/last/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Last(MakefilePackage):
+ """LAST finds similar regions between sequences, and aligns them. It is
+ designed for comparing large datasets to each other (e.g. vertebrate
+ genomes and/or large numbers of DNA reads)."""
+
+ homepage = "http://last.cbrc.jp/"
+ url = "http://last.cbrc.jp/last-869.zip"
+
+ version('869', '12dced14418fb924a1b0604593274973')
+
+ def install(self, spec, prefix):
+ make('install', 'prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/latte/package.py b/var/spack/repos/builtin/packages/latte/package.py
new file mode 100644
index 0000000000..7e3c9afa61
--- /dev/null
+++ b/var/spack/repos/builtin/packages/latte/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Latte(CMakePackage):
+ """Open source density functional tight binding molecular dynamics."""
+
+ homepage = "https://github.com/lanl/latte"
+ url = "https://github.com/lanl/latte/tarball/v1.0"
+
+ version('develop', git='https://github.com/lanl/latte', branch='master')
+ version('1.0.1', 'd0b99edbcf7a19abe0a68a192d6f6234')
+
+ variant('mpi', default=True,
+ description='Build with mpi')
+ variant('progress', default=False,
+ description='Use progress for fast')
+ variant('shared', default=True, description='Build shared libs')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('mpi', when='+mpi')
+ depends_on('qmd-progress', when='+progress')
+
+ root_cmakelists_dir = 'cmake'
+
+ def cmake_args(self):
+ options = []
+ if '+shared' in self.spec:
+ options.append('-DBUILD_SHARED_LIBS=ON')
+ else:
+ options.append('-DBUILD_SHARED_LIBS=OFF')
+ if '+mpi' in self.spec:
+ options.append('-DO_MPI=yes')
+ if '+progress' in self.spec:
+ options.append('-DPROGRESS=yes')
+
+ return options
diff --git a/var/spack/repos/builtin/packages/launchmon/package.py b/var/spack/repos/builtin/packages/launchmon/package.py
index c2b289da4f..5697a1f370 100644
--- a/var/spack/repos/builtin/packages/launchmon/package.py
+++ b/var/spack/repos/builtin/packages/launchmon/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,6 +38,9 @@ class Launchmon(Package):
depends_on('libtool', type='build')
depends_on('libgcrypt')
depends_on('libgpg-error')
+ depends_on("elf", type='link')
+ depends_on("boost")
+ depends_on("spectrum-mpi", when='arch=ppc64le')
def install(self, spec, prefix):
configure(
diff --git a/var/spack/repos/builtin/packages/lazyten/package.py b/var/spack/repos/builtin/packages/lazyten/package.py
new file mode 100644
index 0000000000..4827b9495e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lazyten/package.py
@@ -0,0 +1,118 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Lazyten(CMakePackage):
+ """Lightweight linear algebra library based on lazy matrices"""
+
+ homepage = "http://lazyten.org"
+ url = "https://github.com/lazyten/lazyten/archive/v0.4.1.tar.gz"
+ maintainers = ['mfherbst']
+
+ #
+ # Versions
+ #
+ version('0.4.1', 'd06f7996144e1bf1b0aee82c2af36e83')
+ version("develop", git="https://github.com/lazyten/lazyten.git",
+ branch="master")
+
+ #
+ # Variants
+ #
+ # Library build type
+ variant("build_type", default="DebugRelease",
+ description="The build type to build",
+ values=("Debug", "Release", "DebugRelease"))
+ variant("shared", default=True,
+ description="Build shared libraries (else the static one)")
+
+ # Features
+ variant("arpack", default=True,
+ description="Build with Arpack support")
+
+ # Components
+ variant("examples", default=False,
+ description="Compile examples")
+
+ #
+ # Conflicts
+ #
+ # Only builds on clang > 3.5 and gcc > 4.8
+ conflicts("%intel", msg="krims only builds with gcc and clang")
+ conflicts("%gcc@:4.8")
+ conflicts("%clang@:3.5")
+
+ #
+ # Dependencies
+ #
+ depends_on("cmake@3:", type="build")
+
+ depends_on("krims@develop", when="@develop")
+ depends_on("krims@0.2.1", when="@0.4.1")
+
+ depends_on("blas")
+ depends_on("lapack")
+ depends_on("armadillo@4:")
+ depends_on("arpack-ng", when="+arpack")
+
+ #
+ # Settings and cmake cache
+ #
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ "-DAUTOCHECKOUT_MISSING_REPOS=OFF",
+ #
+ "-DBUILD_SHARED_LIBS=" + str("+shared" in spec),
+ "-DDRB_MACHINE_SPECIFIC_OPTIM_Release=ON", # Adds -march=native
+ #
+ # TODO Hard-disable tests for now, since rapidcheck not in Spack
+ "-DLAZYTEN_ENABLE_TESTS=OFF",
+ "-DLAZYTEN_ENABLE_EXAMPLES=" + str("+examples" in spec),
+ ]
+
+ # Tell lazyten where to look for the krims cmake config
+ # and targets files
+ krims_modules = os.path.join(spec["krims"].prefix.share, "cmake/krims")
+ args.append("-Dkrims_DIR=" + krims_modules)
+
+ # Add linear algebra backends
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ args.extend([
+ "-DARMADILLO_INCLUDE_DIR=" + spec["armadillo"].prefix.include,
+ "-DARMADILLO_LIBRARY=" + ";".join(spec["armadillo"].libs),
+ #
+ "-DLAPACK_FOUND=ON",
+ "-DLAPACK_LIBRARIES=" + ";".join(lapack_blas),
+ ])
+
+ if "+arpack" in spec:
+ args.append("-DARPACK_DIR=" + spec["arpack-ng"].prefix)
+ args.append("-DARPACK_LIBRARY=" + ";".join(spec["arpack-ng"].libs))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/lbann/package.py b/var/spack/repos/builtin/packages/lbann/package.py
new file mode 100644
index 0000000000..5e65566cb2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lbann/package.py
@@ -0,0 +1,96 @@
+##############################################################################
+# 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/spack/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 Lbann(CMakePackage):
+ """LBANN: Livermore Big Artificial Neural Network Toolkit. A distributed
+ memory, HPC-optimized, model and data parallel training toolkit for deep
+ neural networks."""
+
+ homepage = "http://software.llnl.gov/lbann/"
+ url = "https://github.com/LLNL/lbann/archive/v0.91.tar.gz"
+
+ version('develop', git='https://github.com/LLNL/lbann.git', branch="develop")
+ version('0.91', '83b0ec9cd0b7625d41dfb06d2abd4134')
+
+ variant('gpu', default=False, description='Builds with support for GPUs via CUDA and cuDNN')
+ variant('opencv', default=True, description='Builds with support for image processing routines with OpenCV')
+ variant('seq_init', default=False, description='Force serial initialization of weight matrices.')
+ variant('dtype', default=4, description='Size (bits) of floating point representation for weights')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
+
+ depends_on('elemental +openmp_blas +shared +int64')
+ depends_on('elemental +openmp_blas +shared +int64 build_type=Debug',
+ when=('build_type=Debug'))
+ depends_on('cuda', when='+gpu')
+ depends_on('cudnn', when='+gpu')
+ depends_on('cub', when='+gpu')
+ depends_on('mpi')
+ depends_on('hwloc')
+ depends_on('opencv@3.2.0: +openmp +core +highgui +imgproc +jpeg +png +tiff +zlib ~eigen', when='+opencv')
+ depends_on('protobuf@3.0.2:')
+ depends_on('cnpy')
+
+ def cmake_args(self):
+ spec = self.spec
+ # Environment variables
+ CPPFLAGS = []
+ CPPFLAGS.append('-DLBANN_SET_EL_RNG')
+
+ args = [
+ '-DCMAKE_INSTALL_MESSAGE=LAZY',
+ '-DCMAKE_CXX_FLAGS=%s' % ' '.join(CPPFLAGS),
+ '-DWITH_CUDA:BOOL=%s' % ('+gpu' in spec),
+ '-DWITH_CUDNN:BOOL=%s' % ('+gpu' in spec),
+ '-DELEMENTAL_USE_CUBLAS:BOOL=%s' % (
+ '+cublas' in spec['elemental']),
+ '-DWITH_TBINF=OFF',
+ '-DWITH_VTUNE=OFF',
+ '-DElemental_DIR={0}'.format(spec['elemental'].prefix),
+ '-DCNPY_DIR={0}'.format(spec['cnpy'].prefix),
+ '-DELEMENTAL_MATH_LIBS={0}'.format(
+ spec['elemental'].libs),
+ '-DSEQ_INIT:BOOL=%s' % ('+seq_init' in spec),
+ '-DDATATYPE={0}'.format(int(spec.variants['dtype'].value)),
+ '-DVERBOSE=0',
+ '-DLBANN_HOME=.',
+ '-DLBANN_VER=spack']
+
+ if '+opencv' in spec:
+ args.extend(['-DOpenCV_DIR:STRING={0}'.format(
+ spec['opencv'].prefix)])
+
+ if '+cudnn' in spec:
+ args.extend(['-DcuDNN_DIR={0}'.format(
+ spec['cudnn'].prefix)])
+
+ if '+cudnn' in spec:
+ args.extend(['-DCUB_DIR={0}'.format(
+ spec['cub'].prefix)])
+
+ return args
diff --git a/var/spack/repos/builtin/packages/lbxproxy/package.py b/var/spack/repos/builtin/packages/lbxproxy/package.py
index 3de3ade0c9..6b5c4d0bc7 100644
--- a/var/spack/repos/builtin/packages/lbxproxy/package.py
+++ b/var/spack/repos/builtin/packages/lbxproxy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Lbxproxy(Package):
+class Lbxproxy(AutotoolsPackage):
"""lbxproxy accepts client connections, multiplexes them over a single
connection to the X server, and performs various optimizations on the
X protocol to make it faster over low bandwidth and/or high latency
@@ -50,9 +50,3 @@ class Lbxproxy(Package):
depends_on('bigreqsproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/lcals/package.py b/var/spack/repos/builtin/packages/lcals/package.py
new file mode 100644
index 0000000000..bd12081130
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lcals/package.py
@@ -0,0 +1,122 @@
+##############################################################################
+# 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/spack/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 *
+import platform
+
+
+class Lcals(MakefilePackage):
+ """LCALS ("Livermore Compiler Analysis Loop Suite") is a collection of loop
+ kernels based, in part, on historical "Livermore Loops" benchmarks
+ (See the 1986 technical report: "The Livermore Fortran Kernels:
+ A Computer Test of the Numerical Performance Range",
+ by Frank H. McMahon, UCRL-53745.). The suite contains facilities to
+ generate timing statistics and reports."""
+
+ homepage = "https://codesign.llnl.gov/LCALS-downloads/"
+ url = "https://codesign.llnl.gov/LCALS-downloads/lcals-v1.0.2.tgz"
+
+ tags = ['proxy-app']
+
+ version('1.0.2', '40c65a88f1df1436a2f72b7d3c986a21')
+
+ variant(
+ 'microarch',
+ description='Micro arch: SSE, AVX, MIC.',
+ default='sse',
+ values=('sse', 'avx', 'MIC'),
+ )
+
+ @property
+ def build_targets(self):
+
+ targets = []
+
+ cxxflags = '-std=c++0x '
+ cxx_compile = ''
+
+ microarch = self.spec.variants['microarch'].value
+
+ arch = platform.machine()
+
+ if microarch == 'MIC':
+ arch = 'MIC'
+ elif arch == 'x86_64' or arch == 'x86_32':
+ arch = 'x86'
+ elif arch != 'bgq':
+ raise InstallError('unknown architecture.')
+
+ if self.compiler.name == 'intel':
+ if arch == 'MIC':
+ cxxflags += '-DLCALS_PLATFORM_X86_SSE -DLCALS_COMPILER_ICC '
+ cxx_compile += '-g -O3 -mmic -vec-report3 '
+ ' -inline-max-total-size=10000 -inline-forceinline -ansi-alias'
+ elif microarch == 'sse' and arch == 'x86':
+ cxxflags += '-DLCALS_PLATFORM_X86_SSE -DLCALS_COMPILER_ICC '
+ cxx_compile += '-O3 -msse4.1 -inline-max-total-size=10000'
+ ' -inline-forceinline -ansi-alias -std=c++0x '
+ elif microarch == 'avx' and arch == 'x86':
+ cxxflags += '-DLCALS_PLATFORM_X86_AVX -DLCALS_COMPILER_ICC '
+ cxx_compile += '-O3 -mavx -inline-max-total-size=10000'
+ ' -inline-forceinline -ansi-alias -std=c++0x'
+ cxxflags += self.compiler.openmp_flag
+ elif self.compiler.name == 'gcc':
+ if arch == 'MIC' or (microarch == 'sse' and arch == 'x86'):
+ cxxflags += '-DLCALS_PLATFORM_X86_SSE -DLCALS_COMPILER_GNU '
+ cxx_compile += '-Ofast -msse4.1 -finline-functions'
+ ' -finline-limit=10000 -std=c++11 '
+ elif microarch == 'avx' and arch == 'x86':
+ cxxflags += '-DLCALS_PLATFORM_X86_AVX -DLCALS_COMPILER_GNU '
+ cxx_compile += '-Ofast -mavx -finline-functions'
+ ' -finline-limit=10000 -std=c++11'
+ elif arch == 'bgq':
+ cxxflags += '-DLCALS_PLATFORM_BGQ -DLCALS_COMPILER_GNU '
+ cxx_compile += '-O3 -finline-functions -finline-limit=10000'
+ ' -std=c++0x'
+ cxxflags += self.compiler.openmp_flag
+ elif self.compiler.name == 'xl' and arch == 'bgp':
+ if self.compiler.version == Version('9') and arch == 'bgp':
+ cxxflags += '-DLCALS_PLATFORM_BGP -DLCALS_COMPILER_XLC9 '
+ cxx_compile += 'O3 -qarch=450d -qtune=450 -qalias=allp -qhot'
+ ' -qsmp=omp '
+ elif self.compiler.version == Version('12') and arch == 'bgq':
+ cxxflags += '-DLCALS_PLATFORM_BGQ -DLCALS_COMPILER_XLC12 '
+ cxx_compile += '-O3 -qarch=qp -qhot=novector -qsimd=auto'
+ ' -qlanglvl=extended0x -qnostrict -qinline=10000 -qsmp=omp '
+ elif self.compiler.name == 'clang':
+ if arch == 'bgq':
+ cxxflags += '-DLCALS_PLATFORM_BGQ -DLCALS_COMPILER_CLANG '
+ cxx_compile += '-O3 -finline-functions -ffast-math -std=c++0x'
+
+ targets.append('LCALS_ARCH=')
+ cxx_compile += ' ' + cxxflags
+ targets.append('CXX_COMPILE={0} {1}'.format(spack_cxx, cxx_compile))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('lcals.exe', prefix.bin)
+ install('lcalsversioninfo.txt', prefix)
diff --git a/var/spack/repos/builtin/packages/lcms/package.py b/var/spack/repos/builtin/packages/lcms/package.py
index 4d3fc59568..816cc3f005 100644
--- a/var/spack/repos/builtin/packages/lcms/package.py
+++ b/var/spack/repos/builtin/packages/lcms/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,16 @@
from spack import *
-class Lcms(Package):
+class Lcms(AutotoolsPackage):
"""Little cms is a color management library. Implements fast
transforms between ICC profiles. It is focused on speed, and is
portable across several platforms (MIT license)."""
homepage = "http://www.littlecms.com"
- url = "http://downloads.sourceforge.net/project/lcms/lcms/2.6/lcms2-2.6.tar.gz"
+ url = "http://downloads.sourceforge.net/project/lcms/lcms/2.8/lcms2-2.8.tar.gz"
+ version('2.8', '87a5913f1a52464190bb655ad230539c')
version('2.6', 'f4c08d38ceade4a664ebff7228910a33')
- depends_on("jpeg")
- depends_on("libtiff")
- depends_on("zlib")
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ depends_on('jpeg')
+ depends_on('libtiff')
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/ldc-bootstrap/package.py b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
new file mode 100644
index 0000000000..6e3288f085
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ldc-bootstrap/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 LdcBootstrap(CMakePackage):
+ """The LDC project aims to provide a portable D programming language
+ compiler with modern optimization and code generation capabilities.
+
+ LDC is fully Open Source; the parts of the code not taken/adapted from
+ other projects are BSD-licensed (see the LICENSE file for details).
+
+ Consult the D wiki for further information: http://wiki.dlang.org/LDC
+
+ This old version of the compiler is needed to bootstrap newer ones.
+ """
+
+ homepage = "https://dlang.org/"
+ url = "https://github.com/ldc-developers/ldc/releases/download/v0.17.4/ldc-0.17.4-src.tar.gz"
+
+ # This is the last version that does not require a D compiler to bootstrap
+ version('0.17.4', '000e006426d6094fabd2a2bdab0ff0b7')
+
+ depends_on('llvm@3.7:')
+ depends_on('zlib')
+ depends_on('libconfig')
+ depends_on('curl')
+ depends_on('libedit')
+ depends_on('binutils')
+
+ def setup_dependent_environment(self, build_env, run_env, dep_spec):
+
+ # The code below relies on this function being executed after the
+ # environment has been sanitized (because LD_LIBRARY_PATH is among
+ # the variables that get unset)
+
+ # We need libphobos in LD_LIBRARY_PATH
+ build_env.prepend_path('LD_LIBRARY_PATH', self.prefix.lib)
+
+ def cmake_args(self):
+ return [
+ '-DBUILD_SHARED_LIBS:BOOL=ON'
+ ]
diff --git a/var/spack/repos/builtin/packages/ldc/package.py b/var/spack/repos/builtin/packages/ldc/package.py
new file mode 100644
index 0000000000..8dd2052fca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ldc/package.py
@@ -0,0 +1,85 @@
+##############################################################################
+# 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/spack/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 Ldc(CMakePackage):
+ """The LDC project aims to provide a portable D programming language
+ compiler with modern optimization and code generation capabilities.
+
+ LDC is fully Open Source; the parts of the code not taken/adapted from
+ other projects are BSD-licensed (see the LICENSE file for details).
+
+ Consult the D wiki for further information: http://wiki.dlang.org/LDC
+ """
+
+ homepage = "https://dlang.org/"
+ url = "https://github.com/ldc-developers/ldc/releases/download/v0.17.4/ldc-0.17.4-src.tar.gz"
+
+ version('1.3.0', '537d992a361b0fd0440b24a5145c9107')
+
+ variant(
+ 'shared',
+ default=True,
+ description='Build runtime and tooling as shared libs'
+ )
+
+ depends_on('llvm@3.9:')
+ depends_on('zlib')
+ depends_on('libconfig')
+ depends_on('curl')
+ depends_on('libedit')
+ depends_on('binutils', type=('build', 'link', 'run'))
+ depends_on('ldc-bootstrap', type=('build', 'link'))
+
+ provides('D@2')
+
+ def cmake_args(self):
+ ldmd2 = self.spec['ldc-bootstrap'].prefix.bin.ldmd2
+
+ args = [
+ '-DD_COMPILER:STRING={0}'.format(ldmd2),
+ '-DBUILD_SHARED_LIBS:BOOL={0}'.format(
+ 'ON' if '+shared' in self.spec else 'OFF'
+ ),
+ '-DLDC_INSTALL_LTOPLUGIN:BOOL=ON',
+ '-DLDC_BUILD_WITH_LTO:BOOL=OFF'
+ ]
+
+ return args
+
+ @run_after('install')
+ def add_rpath_to_conf(self):
+
+ # Here we modify the configuration file for ldc2 to inject flags
+ # that will rpath the standard library location
+
+ config_file = join_path(self.prefix.etc, 'ldc2.conf')
+
+ search_for = 'switches = \['
+ substitute_with = 'switches = [\n' + \
+ ' "-L-rpath={0}",'.format(self.prefix.lib)
+
+ filter_file(search_for, substitute_with, config_file)
diff --git a/var/spack/repos/builtin/packages/legion/package.py b/var/spack/repos/builtin/packages/legion/package.py
new file mode 100644
index 0000000000..0ec388994f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/legion/package.py
@@ -0,0 +1,68 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Legion(CMakePackage):
+ """Legion is a data-centric parallel programming system for writing
+ portable high performance programs targeted at distributed heterogeneous
+ architectures. Legion presents abstractions which allow programmers to
+ describe properties of program data (e.g. independence, locality). By
+ making the Legion programming system aware of the structure of program
+ data, it can automate many of the tedious tasks programmers currently
+ face, including correctly extracting task- and data-level parallelism
+ and moving data around complex memory hierarchies. A novel mapping
+ interface provides explicit programmer controlled placement of data in
+ the memory hierarchy and assignment of tasks to processors in a way
+ that is orthogonal to correctness, thereby enabling easy porting and
+ tuning of Legion applications to new architectures.
+ """
+ homepage = "http://legion.stanford.edu/"
+ url = "https://github.com/StanfordLegion/legion/tarball/legion-17.02.0"
+
+ version('develop', git='https://github.com/StanfordLegion/legion', branch='master')
+ version('17.10.0', 'ebfc974dc82a9d7f3ba53242ecae62e1')
+ version('17.08.0', 'acc1ea8c564c4a382a015e0c9cf94574')
+ version('17.02.0', '31ac3004e2fb0996764362d2b6f6844a')
+
+ variant('mpi', default=True,
+ description='Build on top of mpi conduit for mpi inoperability')
+ variant('shared', default=True, description='Build shared libraries')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on("gasnet~aligned-segments~pshm segment-mmap-max='16GB'", when='~mpi')
+ depends_on("gasnet~aligned-segments~pshm segment-mmap-max='16GB' +mpi", when='+mpi')
+
+ def cmake_args(self):
+ options = [
+ '-DLegion_USE_GASNet=ON',
+ '-DLegion_BUILD_EXAMPLES=ON',
+ '-DBUILD_SHARED_LIBS=%s' % ('+shared' in self.spec)]
+
+ if '+mpi' in self.spec:
+ options.append('-DGASNet_CONDUIT=mpi')
+
+ return options
diff --git a/var/spack/repos/builtin/packages/leveldb/package.py b/var/spack/repos/builtin/packages/leveldb/package.py
index f571baa1ce..db61668021 100644
--- a/var/spack/repos/builtin/packages/leveldb/package.py
+++ b/var/spack/repos/builtin/packages/leveldb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,8 +31,9 @@ class Leveldb(Package):
that provides an ordered mapping from string keys to string values."""
homepage = "https://github.com/google/leveldb"
- url = "https://github.com/google/leveldb/archive/v1.18.tar.gz"
+ url = "https://github.com/google/leveldb/archive/v1.20.tar.gz"
+ version('1.20', '298b5bddf12c675d6345784261302252')
version('1.18', '73770de34a2a5ab34498d2e05b2b7fa0')
depends_on("snappy")
@@ -42,12 +43,28 @@ class Leveldb(Package):
mkdirp(prefix.include)
mkdirp(prefix.lib)
+ mkdirp(join_path(prefix.lib, 'pkgconfig'))
cp = which('cp')
# cp --preserve=links libleveldb.* prefix/lib
- args = glob.glob('libleveldb.*')
- args.append(prefix + '/lib')
+ args = glob.glob('out-shared/libleveldb.*') \
+ + glob.glob('out-static/libleveldb.*')
+ args.append(prefix.lib)
cp('--preserve=links', *args)
- cp('-r', 'include/leveldb', prefix + '/include')
+ cp('-r', 'include/leveldb', prefix.include)
+
+ with open(join_path(prefix.lib, 'pkgconfig', 'leveldb.pc'), 'w') as f:
+ f.write('prefix={0}\n'.format(prefix))
+ f.write('exec_prefix=${prefix}\n')
+ f.write('libdir={0}\n'.format(prefix.lib))
+ f.write('includedir={0}\n'.format(prefix.include))
+ f.write('\n')
+ f.write('Name: leveldb\n')
+ f.write('Description: LevelDB is a fast key-value storage library'
+ ' written at Google that provides an ordered mapping from'
+ ' string keys to string values.\n')
+ f.write('Version: {0}\n'.format(spec.version))
+ f.write('Cflags: -I${includedir}\n')
+ f.write('Libs: -L${libdir} -lleveldb\n')
diff --git a/var/spack/repos/builtin/packages/lftp/package.py b/var/spack/repos/builtin/packages/lftp/package.py
new file mode 100644
index 0000000000..47b4706776
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lftp/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Lftp(AutotoolsPackage):
+ """LFTP is a sophisticated file transfer program supporting a number
+ of network protocols (ftp, http, sftp, fish, torrent)."""
+
+ homepage = "http://lftp.yar.ru/"
+ url = "http://lftp.yar.ru/ftp/lftp-4.7.7.tar.gz"
+
+ version('4.8.1', '419b27c016d968a0226b2e5df1454c22')
+ version('4.7.7', 'ddc71b3b11a1af465e829075ae14b3ff')
+
+ depends_on('expat')
+ depends_on('libiconv')
+ depends_on('ncurses')
+ depends_on('openssl')
+ depends_on('readline')
+ depends_on('zlib')
+
+ def configure_args(self):
+ return [
+ '--with-expat={0}'.format(self.spec['expat'].prefix),
+ '--with-libiconv={0}'.format(self.spec['libiconv'].prefix),
+ '--with-openssl={0}'.format(self.spec['openssl'].prefix),
+ '--with-readline={0}'.format(self.spec['readline'].prefix),
+ '--with-zlib={0}'.format(self.spec['zlib'].prefix),
+ '--disable-dependency-tracking',
+ ]
diff --git a/var/spack/repos/builtin/packages/libaec/package.py b/var/spack/repos/builtin/packages/libaec/package.py
new file mode 100644
index 0000000000..814f7760c5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libaec/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Libaec(CMakePackage):
+ """Libaec provides fast lossless compression of 1 up to 32 bit wide signed
+ or unsigned integers (samples). It implements Golomb-Rice compression
+ method under the BSD license and includes a free drop-in replacement for
+ the SZIP library.
+ """
+
+ homepage = 'https://gitlab.dkrz.de/k202009/libaec'
+ url = 'https://gitlab.dkrz.de/k202009/libaec/repository/archive.tar.gz?ref=v1.0.2'
+ list_url = 'https://gitlab.dkrz.de/k202009/libaec/tags'
+
+ provides('szip')
+
+ version('1.0.2', '13fb9dca01f95e2794010312c8fe345a')
+ version('1.0.1', '2180d2525d679a5f7950e7867b70e06b')
+ version('1.0.0', 'ebc0b4e47fa4e1bd5783c2b1c960fe94')
diff --git a/var/spack/repos/builtin/packages/libaio/package.py b/var/spack/repos/builtin/packages/libaio/package.py
index 735ced047b..2a617c0518 100644
--- a/var/spack/repos/builtin/packages/libaio/package.py
+++ b/var/spack/repos/builtin/packages/libaio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,10 +28,10 @@ from spack import *
class Libaio(Package):
"""This is the linux native Asynchronous I/O interface library."""
- homepage = "https://git.fedorahosted.org/cgit/libaio.git"
- url = "https://git.fedorahosted.org/cgit/libaio.git/snapshot/libaio-0.3.110-1.tar.gz"
+ homepage = "http://lse.sourceforge.net/io/aio.html"
+ url = "https://ftp.de.debian.org/debian/pool/main/liba/libaio/libaio_0.3.110.orig.tar.gz"
- version('0.3.110-1', 'eb6b1b435afadb5b80c5dd80984249f6')
+ version('0.3.110', '2a35602e43778383e2f4907a4ca39ab8')
def install(self, spec, prefix):
# libaio is not supported on OS X
diff --git a/var/spack/repos/builtin/packages/libapplewm/package.py b/var/spack/repos/builtin/packages/libapplewm/package.py
index 85408053ad..146596081f 100644
--- a/var/spack/repos/builtin/packages/libapplewm/package.py
+++ b/var/spack/repos/builtin/packages/libapplewm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libapplewm(Package):
+class Libapplewm(AutotoolsPackage):
"""AppleWM is a simple library designed to interface with the Apple-WM
extension. This extension allows X window managers to better interact with
the Mac OS X Aqua user interface when running X11 in a rootless mode."""
@@ -43,12 +43,6 @@ class Libapplewm(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- # Crashes with this error message on Linux:
- # HIServices/Processes.h: No such file or directory
- # May only build properly on macOS?
-
- make()
- make('install')
+ # Crashes with this error message on Linux:
+ # HIServices/Processes.h: No such file or directory
+ # May only build properly on macOS?
diff --git a/var/spack/repos/builtin/packages/libarchive/package.py b/var/spack/repos/builtin/packages/libarchive/package.py
index e439bf894f..f06f09b391 100644
--- a/var/spack/repos/builtin/packages/libarchive/package.py
+++ b/var/spack/repos/builtin/packages/libarchive/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libarchive(Package):
+class Libarchive(AutotoolsPackage):
"""libarchive: C library and command-line tools for reading and
writing tar, cpio, zip, ISO, and other archive formats."""
@@ -48,10 +48,5 @@ class Libarchive(Package):
depends_on('libxml2')
depends_on('expat')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- if self.run_tests:
- make('check') # cannot build test suite with Intel compilers
- make('install')
+ # NOTE: `make check` is known to fail with the Intel compilers
+ # The build test suite cannot be built with Intel
diff --git a/var/spack/repos/builtin/packages/libassuan/package.py b/var/spack/repos/builtin/packages/libassuan/package.py
new file mode 100644
index 0000000000..8a56551ff5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libassuan/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Libassuan(AutotoolsPackage):
+ """Libassuan is a small library implementing the so-called Assuan
+ protocol."""
+
+ homepage = "https://gnupg.org/software/libassuan/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2"
+
+ version('2.4.3', '8e01a7c72d3e5d154481230668e6eb5a')
+
+ depends_on('libgpg-error')
+
+ def configure_args(self):
+ args = ['--with-libgpp-error=%s' % self.spec['libgpg-error'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/libatomic-ops/package.py b/var/spack/repos/builtin/packages/libatomic-ops/package.py
index 0167fbcb33..df12c000f3 100644
--- a/var/spack/repos/builtin/packages/libatomic-ops/package.py
+++ b/var/spack/repos/builtin/packages/libatomic-ops/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class LibatomicOps(Package):
+class LibatomicOps(AutotoolsPackage):
"""This package provides semi-portable access to hardware-provided
atomic memory update operations on a number architectures."""
@@ -34,9 +34,5 @@ class LibatomicOps(Package):
version('7.4.4', '426d804baae12c372967a6d183e25af2')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix),
- '--enable-shared')
-
- make()
- make('install')
+ def configure_args(self):
+ return ['--enable-shared']
diff --git a/var/spack/repos/builtin/packages/libbeagle/package.py b/var/spack/repos/builtin/packages/libbeagle/package.py
new file mode 100644
index 0000000000..4d064a063b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libbeagle/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Libbeagle(AutotoolsPackage):
+ """Beagle performs genotype calling, genotype phasing, imputation of
+ ungenotyped markers, and identity-by-descent segment detection."""
+
+ homepage = "https://github.com/beagle-dev/beagle-lib"
+ url = "https://github.com/beagle-dev/beagle-lib/archive/beagle_release_2_1_2.tar.gz"
+
+ version('2.1.2', '1107614e86f652f8ee45c1c92f2af3d4')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ depends_on('subversion', type='build')
+ depends_on('pkg-config', type='build')
+
+ def url_for_version(self, version):
+ url = "https://github.com/beagle-dev/beagle-lib/archive/beagle_release_{0}.tar.gz"
+ return url.format(version.underscored)
diff --git a/var/spack/repos/builtin/packages/libbsd/cdefs.h.patch b/var/spack/repos/builtin/packages/libbsd/cdefs.h.patch
new file mode 100644
index 0000000000..acd3843a06
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libbsd/cdefs.h.patch
@@ -0,0 +1,15 @@
+--- a/nclude/bsd/sys/cdefs.h.orig 2017-08-04 16:34:56.404995800 -0700
++++ b/include/bsd/sys/cdefs.h 2017-08-04 16:35:19.345043883 -0700
+@@ -25,10 +25,10 @@
+ */
+
+ #ifndef __has_include
+-#define __has_include 1
++#define __has_include(X) 1
+ #endif
+ #ifndef __has_include_next
+-#define __has_include_next 1
++#define __has_include_next(X) 1
+ #endif
+
+ #ifdef LIBBSD_OVERLAY
diff --git a/var/spack/repos/builtin/packages/libbsd/package.py b/var/spack/repos/builtin/packages/libbsd/package.py
new file mode 100644
index 0000000000..f9b8a291ca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libbsd/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Libbsd(AutotoolsPackage):
+ """This library provides useful functions commonly found on BSD
+ systems, and lacking on others like GNU systems, thus making it easier
+ to port projects with strong BSD origins, without needing to embed the
+ same code over and over again on each project.
+ """
+
+ homepage = "https://libbsd.freedesktop.org/wiki/"
+ url = "https://libbsd.freedesktop.org/releases/libbsd-0.8.6.tar.xz"
+
+ version('0.8.6', '4ab7bec639af17d0aacb50222b479110')
+
+ patch('cdefs.h.patch', when='%gcc@:4')
diff --git a/var/spack/repos/builtin/packages/libbson/package.py b/var/spack/repos/builtin/packages/libbson/package.py
new file mode 100644
index 0000000000..39a606cf73
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libbson/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Libbson(AutotoolsPackage):
+ """libbson is a library providing useful routines related to building,
+ parsing, and iterating BSON documents."""
+
+ homepage = "https://github.com/mongodb/libbson"
+ url = "https://github.com/mongodb/libbson/releases/download/1.7.0/libbson-1.7.0.tar.gz"
+
+ version('1.8.0', '8b3c64570eec721f951831958e707a5a')
+ version('1.7.0', 'e196ad77dd8458ebc1166e6135030b63')
+ version('1.6.3', 'b7bdb314197106fcfb4af105a582d343')
+ version('1.6.2', 'c128a2ae3e35295e1176465be60f19db')
+ version('1.6.1', '4d6779451bc5764a7d4982c01e7bd8c2')
+
+ depends_on('autoconf', type='build', when='@1.6.1')
+ depends_on('automake', type='build', when='@1.6.1')
+ depends_on('libtool', type='build', when='@1.6.1')
+ depends_on('m4', type='build', when='@1.6.1')
+
+ @property
+ def force_autoreconf(self):
+ # 1.6.1 tarball is broken
+ return self.spec.satisfies('@1.6.1')
diff --git a/var/spack/repos/builtin/packages/libcanberra/package.py b/var/spack/repos/builtin/packages/libcanberra/package.py
new file mode 100644
index 0000000000..f7b8a78659
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libcanberra/package.py
@@ -0,0 +1,68 @@
+##############################################################################
+# 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/spack/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 Libcanberra(AutotoolsPackage):
+ """libcanberra is an implementation of the XDG Sound Theme and
+ Name Specifications, for generating event sounds on free desktops,
+ such as GNOME."""
+
+ homepage = "http://0pointer.de/lennart/projects/libcanberra/"
+ url = "http://0pointer.de/lennart/projects/libcanberra/libcanberra-0.30.tar.xz"
+
+ version('0.30', '34cb7e4430afaf6f447c4ebdb9b42072')
+
+ # TODO: Add variants and dependencies for the following audio support:
+ # ALSA, OSS, PulseAudio, udev, GStreamer, null, GTK3+ , tdb
+
+ variant('gtk', default=False, description='Enable optional GTK+ support')
+
+ depends_on('libxrender', when='+gtk')
+ depends_on('libxext', when='+gtk')
+ depends_on('libx11', when='+gtk')
+ depends_on('libxinerama', when='+gtk')
+ depends_on('libxrandr', when='+gtk')
+ depends_on('libxcursor', when='+gtk')
+ depends_on('libxcomposite', when='+gtk')
+ depends_on('libxdamage', when='+gtk')
+ depends_on('libxfixes', when='+gtk')
+ depends_on('libxcb', when='+gtk')
+ depends_on('libxau', when='+gtk')
+ depends_on('gtkplus', when='+gtk')
+
+ depends_on('libvorbis')
+
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ def configure_args(self):
+ args = ['--enable-static']
+
+ if '+gtk' in self.spec:
+ args.append('--enable-gtk')
+ else:
+ args.append('--disable-gtk')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libcap/libcap-fix-the-libcap-native-building-failure-on-CentOS-6.7.patch b/var/spack/repos/builtin/packages/libcap/libcap-fix-the-libcap-native-building-failure-on-CentOS-6.7.patch
new file mode 100644
index 0000000000..762c69299e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libcap/libcap-fix-the-libcap-native-building-failure-on-CentOS-6.7.patch
@@ -0,0 +1,31 @@
+Ensure the XATTR_NAME_CAPS is defined when it is used
+
+Upstream-Status: Pending
+
+VFS_CAP_U32 can not ensure that XATTR_NAME_CAPS is defined, and failed to build
+libcap-native in old release, like CentOS release 6.7 (Final), with the blow
+error:
+ cap_file.c: In function ‘cap_get_fd’:
+ cap_file.c:199: error: ‘XATTR_NAME_CAPS’ undeclared (first use in this function)
+ cap_file.c:199: error: (Each undeclared identifier is reported only once
+
+Signed-off-by: Roy Li <rongqing.li@windriver.com>
+---
+ libcap/cap_file.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libcap/cap_file.c b/libcap/cap_file.c
+index 40756ea..e27ca80 100644
+--- a/libcap/cap_file.c
++++ b/libcap/cap_file.c
+@@ -25,7 +25,7 @@ extern int fremovexattr(int, const char *);
+
+ #include "libcap.h"
+
+-#ifdef VFS_CAP_U32
++#if defined (VFS_CAP_U32) && defined (XATTR_NAME_CAPS)
+
+ #if VFS_CAP_U32 != __CAP_BLKS
+ # error VFS representation of capabilities is not the same size as kernel
+--
+2.8.1
diff --git a/var/spack/repos/builtin/packages/libcap/package.py b/var/spack/repos/builtin/packages/libcap/package.py
new file mode 100644
index 0000000000..af7c363bf0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libcap/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Libcap(MakefilePackage):
+ """Libcap implements the user-space interfaces to the POSIX 1003.1e
+ capabilities available in Linux kernels. These capabilities are a
+ partitioning of the all powerful root privilege into a set of
+ distinct privileges."""
+
+ homepage = "https://sites.google.com/site/fullycapable/"
+ url = "https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.25.tar.gz"
+
+ version('2.25', '4b18f7166a121138cca0cdd8ab64df4c')
+
+ patch('libcap-fix-the-libcap-native-building-failure-on-CentOS-6.7.patch')
+
+ def install(self, spec, prefix):
+ make_args = [
+ 'RAISE_SETFCAP=no',
+ 'lib=lib',
+ 'prefix={0}'.format(prefix),
+ 'install'
+ ]
+ make(*make_args)
+
+ chmod = which('chmod')
+ chmod('+x', join_path(prefix.lib, 'libcap.so'))
diff --git a/var/spack/repos/builtin/packages/libcerf/package.py b/var/spack/repos/builtin/packages/libcerf/package.py
index 1964f03b95..f119f96832 100644
--- a/var/spack/repos/builtin/packages/libcerf/package.py
+++ b/var/spack/repos/builtin/packages/libcerf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Libcerf(Package):
+class Libcerf(AutotoolsPackage):
"""A self-contained C library providing complex error functions, based
on Faddeeva's plasma dispersion function w(z). Also provides Dawson's
integral and Voigt's convolution of a Gaussian and a Lorentzian
@@ -37,13 +37,12 @@ class Libcerf(Package):
version('1.3', 'b3504c467204df71e62aeccf73a25612')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
options = []
# Clang reports unused functions as errors, see
# http://clang.debian.net/status.php?version=3.8.1&key=UNUSED_FUNCTION
if spec.satisfies('%clang'):
options.append('CFLAGS=-Wno-unused-function')
- configure('--prefix=%s' % prefix, *options)
- make()
- make("install")
+ return options
diff --git a/var/spack/repos/builtin/packages/libcircle/package.py b/var/spack/repos/builtin/packages/libcircle/package.py
index 971c29f5f1..98778ea9a4 100644
--- a/var/spack/repos/builtin/packages/libcircle/package.py
+++ b/var/spack/repos/builtin/packages/libcircle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libcircle(Package):
+class Libcircle(AutotoolsPackage):
"""libcircle provides an efficient distributed queue on a cluster,
using self-stabilizing work stealing."""
@@ -35,8 +35,3 @@ class Libcircle(Package):
url='https://github.com/hpc/libcircle/releases/download/0.2.1-rc.1/libcircle-0.2.1-rc.1.tar.gz')
depends_on('mpi')
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libconfig/package.py b/var/spack/repos/builtin/packages/libconfig/package.py
new file mode 100644
index 0000000000..e62ec6bd83
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libconfig/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Libconfig(AutotoolsPackage):
+ """C/C++ Configuration File Library"""
+
+ homepage = "http://www.hyperrealm.com/libconfig/"
+ url = "https://github.com/hyperrealm/libconfig/archive/v1.6.tar.gz"
+
+ force_autoreconf = True
+ # there is currently a build error with version 1.6, see:
+ # https://github.com/hyperrealm/libconfig/issues/47
+ # version('1.6', '2ccd24b6a2ee39f7ff8a3badfafb6539')
+ version('1.5', 'e92a91c2ddf3bf77bea0f5ed7f09e492', preferred=True)
+
+ depends_on('m4', type=('build'))
+ depends_on('autoconf', type=('build'))
+ depends_on('automake', type=('build'))
+ depends_on('libtool', type=('build'))
diff --git a/var/spack/repos/builtin/packages/libctl/package.py b/var/spack/repos/builtin/packages/libctl/package.py
index 53d30ce5c3..fc729d6db8 100644
--- a/var/spack/repos/builtin/packages/libctl/package.py
+++ b/var/spack/repos/builtin/packages/libctl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,24 +25,25 @@
from spack import *
-class Libctl(Package):
+class Libctl(AutotoolsPackage):
"""libctl is a free Guile-based library implementing flexible
control files for scientific simulations."""
homepage = "http://ab-initio.mit.edu/wiki/index.php/Libctl"
url = "http://ab-initio.mit.edu/libctl/libctl-3.2.2.tar.gz"
+ list_url = "http://ab-initio.mit.edu/libctl/old"
version('3.2.2', '5fd7634dc9ae8e7fa70a68473b9cbb68')
depends_on('guile')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix),
- '--enable-shared',
- 'GUILE={0}'.format(join_path(
- spec['guile'].prefix.bin, 'guile')),
- 'GUILE_CONFIG={0}'.format(join_path(
- spec['guile'].prefix.bin, 'guile-config')))
+ def configure_args(self):
+ spec = self.spec
- make()
- make('install')
+ return [
+ '--enable-shared',
+ 'GUILE={0}'.format(join_path(
+ spec['guile'].prefix.bin, 'guile')),
+ 'GUILE_CONFIG={0}'.format(join_path(
+ spec['guile'].prefix.bin, 'guile-config')),
+ ]
diff --git a/var/spack/repos/builtin/packages/libdivsufsort/package.py b/var/spack/repos/builtin/packages/libdivsufsort/package.py
new file mode 100644
index 0000000000..1e679eb2ec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libdivsufsort/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Libdivsufsort(CMakePackage):
+ """libdivsufsort is a software library that implements a
+ lightweight suffix array construction algorithm."""
+
+ homepage = "https://github.com/y-256/libdivsufsort"
+ url = "https://github.com/y-256/libdivsufsort/archive/2.0.1.tar.gz"
+
+ version('2.0.1', 'a75c6be4715d3d659936f3a1ab8cb5c0')
diff --git a/var/spack/repos/builtin/packages/libdmx/package.py b/var/spack/repos/builtin/packages/libdmx/package.py
index fa469fd423..c89323935f 100644
--- a/var/spack/repos/builtin/packages/libdmx/package.py
+++ b/var/spack/repos/builtin/packages/libdmx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libdmx(Package):
+class Libdmx(AutotoolsPackage):
"""libdmx - X Window System DMX (Distributed Multihead X) extension
library."""
@@ -41,9 +41,3 @@ class Libdmx(Package):
depends_on('dmxproto@2.2.99.1:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libdrm/package.py b/var/spack/repos/builtin/packages/libdrm/package.py
index ab9661269e..521e097dc8 100644
--- a/var/spack/repos/builtin/packages/libdrm/package.py
+++ b/var/spack/repos/builtin/packages/libdrm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,21 +23,24 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
class Libdrm(Package):
- """A userspace library for accessing the DRM, direct
- rendering manager, on Linux, BSD and other operating
- systems that support the ioctl interface."""
+ """A userspace library for accessing the DRM, direct rendering manager,
+ on Linux, BSD and other systems supporting the ioctl interface."""
homepage = "http://dri.freedesktop.org/libdrm/"
url = "http://dri.freedesktop.org/libdrm/libdrm-2.4.59.tar.gz"
+ version('2.4.81', 'dc575dd661a082390e9f1366ca5734b0')
+ version('2.4.75', '743c16109d91a2539dfc9cc56130d695')
version('2.4.70', 'a8c275bce5f3d71a5ca25e8fb60df084')
version('2.4.59', '105ac7af1afcd742d402ca7b4eb168b6')
version('2.4.33', '86e4e3debe7087d5404461e0032231c8')
- depends_on('libpciaccess@0.10:')
+ depends_on('pkg-config@0.9.0:', type='build')
+ depends_on('libpciaccess@0.10:', when=(sys.platform != 'darwin'))
depends_on('libpthread-stubs')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/libdwarf/package.py b/var/spack/repos/builtin/packages/libdwarf/package.py
index 594271f655..970a4502b4 100644
--- a/var/spack/repos/builtin/packages/libdwarf/package.py
+++ b/var/spack/repos/builtin/packages/libdwarf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,37 +48,57 @@ class Libdwarf(Package):
version('20130729', '4cc5e48693f7b93b7aa0261e63c0e21d')
version('20130207', '64b42692e947d5180e162e46c689dfbf')
version('20130126', 'ded74a5e90edb5a12aac3c29d260c5db')
- depends_on("libelf")
+ depends_on("elf", type='link')
parallel = False
+ def patch(self):
+ filter_file(r'^typedef struct Elf Elf;$', '', 'libdwarf/libdwarf.h.in')
+
def install(self, spec, prefix):
- # dwarf build does not set arguments for ar properly
- make.add_default_arg('ARFLAGS=rcs')
-
- # Dwarf doesn't provide an install, so we have to do it.
- mkdirp(prefix.bin, prefix.include, prefix.lib, prefix.man1)
-
- with working_dir('libdwarf'):
- configure("--prefix=" + prefix, "--enable-shared")
- make()
-
- install('libdwarf.a', prefix.lib)
- install('libdwarf.so', prefix.lib)
- install('libdwarf.h', prefix.include)
- install('dwarf.h', prefix.include)
-
- if spec.satisfies('@20130126:20130729'):
- dwarfdump_dir = 'dwarfdump2'
- else:
- dwarfdump_dir = 'dwarfdump'
- with working_dir(dwarfdump_dir):
- configure("--prefix=" + prefix)
-
- # This makefile has strings of copy commands that
- # cause a race in parallel
- make(parallel=False)
-
- install('dwarfdump', prefix.bin)
- install('dwarfdump.conf', prefix.lib)
- install('dwarfdump.1', prefix.man1)
+
+ # elfutils contains a dwarf.h that conflicts with libdwarf's
+ # TODO: we should remove this when we can modify the include order
+ hide_list = []
+ if spec.satisfies('^elfutils'):
+ dwarf_h = join_path(spec['elfutils'].prefix, 'include/dwarf.h')
+ hide_list.append(dwarf_h)
+ with hide_files(*hide_list):
+ # dwarf build does not set arguments for ar properly
+ make.add_default_arg('ARFLAGS=rcs')
+
+ # Dwarf doesn't provide an install, so we have to do it.
+ mkdirp(prefix.bin, prefix.include, prefix.lib, prefix.man.man1)
+
+ with working_dir('libdwarf'):
+ extra_config_args = []
+
+ # this is to prevent picking up system /usr/include/libelf.h
+ if spec.satisfies('^libelf'):
+ libelf_inc_dir = join_path(spec['libelf'].prefix,
+ 'include/libelf')
+ extra_config_args.append('CFLAGS=-I{0}'.format(
+ libelf_inc_dir))
+ configure("--prefix=" + prefix, "--enable-shared",
+ *extra_config_args)
+ make()
+
+ install('libdwarf.a', prefix.lib)
+ install('libdwarf.so', prefix.lib)
+ install('libdwarf.h', prefix.include)
+ install('dwarf.h', prefix.include)
+
+ if spec.satisfies('@20130126:20130729'):
+ dwarfdump_dir = 'dwarfdump2'
+ else:
+ dwarfdump_dir = 'dwarfdump'
+ with working_dir(dwarfdump_dir):
+ configure("--prefix=" + prefix)
+
+ # This makefile has strings of copy commands that
+ # cause a race in parallel
+ make(parallel=False)
+
+ install('dwarfdump', prefix.bin)
+ install('dwarfdump.conf', prefix.lib)
+ install('dwarfdump.1', prefix.man.man1)
diff --git a/var/spack/repos/builtin/packages/libedit/package.py b/var/spack/repos/builtin/packages/libedit/package.py
index 235e7648bc..42a09fd540 100644
--- a/var/spack/repos/builtin/packages/libedit/package.py
+++ b/var/spack/repos/builtin/packages/libedit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,17 @@
from spack import *
-class Libedit(Package):
+class Libedit(AutotoolsPackage):
"""An autotools compatible port of the NetBSD editline library"""
homepage = "http://thrysoee.dk/editline/"
- url = "http://thrysoee.dk/editline/libedit-20150325-3.1.tar.gz"
+ url = "http://thrysoee.dk/editline/libedit-20170329-3.1.tar.gz"
- version('3.1', '43cdb5df3061d78b5e9d59109871b4f6',
- url="http://thrysoee.dk/editline/libedit-20150325-3.1.tar.gz")
+ version('3.1-20170329', 'c57a0690e62ef523c083598730272cfd')
+ version('3.1-20160903', '0467d27684c453a351fbcefebbcb16a3')
+ version('3.1-20150325', '43cdb5df3061d78b5e9d59109871b4f6')
depends_on('ncurses')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
+ def url_for_version(self, version):
+ url = "http://thrysoee.dk/editline/libedit-{0}-{1}.tar.gz"
+ return url.format(version[-1], version.up_to(-1))
diff --git a/var/spack/repos/builtin/packages/libelf/package.py b/var/spack/repos/builtin/packages/libelf/package.py
index 5af4ab705d..5d433c19d5 100644
--- a/var/spack/repos/builtin/packages/libelf/package.py
+++ b/var/spack/repos/builtin/packages/libelf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,7 @@ class Libelf(AutotoolsPackage):
version('0.8.13', '4136d7b4c04df68b686570afa26988ac')
version('0.8.12', 'e21f8273d9f5f6d43a59878dc274fec7')
- provides('elf')
+ provides('elf@0')
def configure_args(self):
args = ["--enable-shared",
diff --git a/var/spack/repos/builtin/packages/libemos/package.py b/var/spack/repos/builtin/packages/libemos/package.py
index 0275c7ede9..8db882d4be 100644
--- a/var/spack/repos/builtin/packages/libemos/package.py
+++ b/var/spack/repos/builtin/packages/libemos/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,28 +25,39 @@
from spack import *
-class Libemos(Package):
+class Libemos(CMakePackage):
"""The Interpolation library (EMOSLIB) includes Interpolation software and
BUFR & CREX encoding/decoding routines."""
homepage = "https://software.ecmwf.int/wiki/display/EMOS/Emoslib"
url = "https://software.ecmwf.int/wiki/download/attachments/3473472/libemos-4.4.2-Source.tar.gz"
+ version('4.4.7', '395dcf21cf06872f772fb6b73d8e67b9')
version('4.4.2', 'f15a9aff0f40861f3f046c9088197376')
- depends_on('cmake', type='build')
- depends_on('grib-api')
+ variant('eccodes', default=False,
+ description="Use eccodes instead of grib-api for GRIB decoding")
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'Production'))
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
+ depends_on('eccodes', when='+eccodes')
+ depends_on('grib-api', when='~eccodes')
+ depends_on('fftw+float+double')
+ depends_on('cmake@2.8.11:', type='build')
- options.append('-DGRIB_API_PATH=%s' % spec['grib_api'].prefix)
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ if spec.satisfies('+eccodes'):
+ args.append('-DENABLE_ECCODES=ON')
+ args.append('-DECCODES_PATH=%s' % spec['eccodes'].prefix)
+ else:
+ args.append('-DENABLE_ECCODES=OFF')
+ args.append('-DGRIB_API_PATH=%s' % spec['grib-api'].prefix)
# To support long pathnames that spack generates
- options.append('-DCMAKE_Fortran_FLAGS=-ffree-line-length-none')
+ args.append('-DCMAKE_Fortran_FLAGS=-ffree-line-length-none')
- with working_dir('spack-build', create=True):
- cmake('..', *options)
- make()
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/libepoxy/package.py b/var/spack/repos/builtin/packages/libepoxy/package.py
index 364ea1e30c..9f29a701a0 100644
--- a/var/spack/repos/builtin/packages/libepoxy/package.py
+++ b/var/spack/repos/builtin/packages/libepoxy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Libepoxy(Package):
+class Libepoxy(AutotoolsPackage):
"""Epoxy is a library for handling OpenGL function pointer management for
you."""
homepage = "https://github.com/anholt/libepoxy"
url = "https://github.com/anholt/libepoxy/releases/download/v1.3.1/libepoxy-1.3.1.tar.bz2"
version('1.3.1', '96f6620a9b005a503e7b44b0b528287d')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libevent/package.py b/var/spack/repos/builtin/packages/libevent/package.py
index 65b3a716c0..562bb212f9 100644
--- a/var/spack/repos/builtin/packages/libevent/package.py
+++ b/var/spack/repos/builtin/packages/libevent/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libevent(Package):
+class Libevent(AutotoolsPackage):
"""The libevent API provides a mechanism to execute a callback function
when a specific event occurs on a file descriptor or after a
timeout has been reached. Furthermore, libevent also support
@@ -48,17 +48,17 @@ class Libevent(Package):
version('2.0.13', 'af786b4b3f790c9d3279792edf7867fc')
version('2.0.12', '42986228baf95e325778ed328a93e070')
+ # Does not build with OpenSSL 1.1.0
variant('openssl', default=True,
description="Build with encryption enabled at the libevent level.")
- depends_on('openssl', when='+openssl')
+ depends_on('openssl @:1.0', when='+openssl')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
configure_args = []
if '+openssl' in spec:
configure_args.append('--enable-openssl')
else:
- configure_args.append('--enable-openssl')
+ configure_args.append('--disable-openssl')
- configure("--prefix=%s" % prefix, *configure_args)
- make()
- make("install")
+ return configure_args
diff --git a/var/spack/repos/builtin/packages/libevpath/package.py b/var/spack/repos/builtin/packages/libevpath/package.py
new file mode 100644
index 0000000000..64c2fb44e3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libevpath/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Libevpath(CMakePackage):
+ """EVpath is an event transport middleware layer designed to allow
+ for the easy implementation of overlay networks, with
+ active data processing, routing and management at all points
+ in the overlay. EVPath is designed for high performance systems.
+ """
+
+ homepage = "https://github.com/GTkorvo/evpath"
+ url = "https://github.com/GTkorvo/evpath/archive/v4.1.1.tar.gz"
+
+ version('develop', git='https://github.com/GTkorvo/evpath.git',
+ branch='master')
+ version('4.2.1', 'f928dc0dee41668afc91634c7051ce1a')
+ version('4.1.2', '1a187f55431c991ae7040e3ff041d75c')
+ version('4.1.1', '65a8db820f396ff2926e3d31908d123d')
+
+ depends_on('libffs')
+
+ def cmake_args(self):
+ args = ["-DENABLE_TESTING=0", "-DTARGET_CNL=1",
+ "-DBUILD_SHARED_STATIC=STATIC"]
+ return args
diff --git a/var/spack/repos/builtin/packages/libfabric/package.py b/var/spack/repos/builtin/packages/libfabric/package.py
new file mode 100644
index 0000000000..01e139824a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libfabric/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 Libfabric(AutotoolsPackage):
+ """The Open Fabrics Interfaces (OFI) is a framework focused on exporting
+ fabric communication services to applications."""
+
+ homepage = "https://libfabric.org/"
+ url = "https://github.com/ofiwg/libfabric/releases/download/v1.5.0/libfabric-1.5.0.tar.gz"
+
+ version('1.5.0', 'fda3e9b31ebe184f5157288d059672d6')
+
+ fabrics = ('psm',
+ 'psm2',
+ 'sockets',
+ 'verbs',
+ 'usnic',
+ 'mxm',
+ 'gni',
+ 'xpmem',
+ 'udp',
+ 'rxm',
+ 'rxd')
+
+ variant(
+ 'fabrics',
+ default='sockets',
+ description='A list of enabled fabrics',
+ values=fabrics,
+ multi=True
+ )
+
+ def configure_args(self):
+ args = []
+
+ args.extend(['--enable-%s=%s' %
+ (f, 'yes' if 'fabrics=%s' % f in self.spec else 'no')
+ for f in self.fabrics])
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libffi/package.py b/var/spack/repos/builtin/packages/libffi/package.py
index ddb7709ddf..f87060118d 100644
--- a/var/spack/repos/builtin/packages/libffi/package.py
+++ b/var/spack/repos/builtin/packages/libffi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ class Libffi(AutotoolsPackage):
homepage = "https://sourceware.org/libffi/"
version('3.2.1', '83b89587607e3eb65c70d361f13bab43',
- url="ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
+ url="https://www.mirrorservice.org/sites/sourceware.org/pub/libffi/libffi-3.2.1.tar.gz")
# version('3.1', 'f5898b29bbfd70502831a212d9249d10',url =
# "ftp://sourceware.org/pub/libffi/libffi-3.1.tar.gz") # Has a bug
# $(lib64) instead of ${lib64} in libffi.pc
diff --git a/var/spack/repos/builtin/packages/libffs/package.py b/var/spack/repos/builtin/packages/libffs/package.py
new file mode 100644
index 0000000000..ee7a690214
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libffs/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Libffs(CMakePackage):
+ """FFS is a middleware library for data communication,
+ including representation, processing and marshaling
+ that preserves the performance of traditional approaches
+ while relaxing the requirement of a priori knowledge
+ and providing complex run-time flexibility.
+ """
+
+ homepage = "http://www.cc.gatech.edu/systems/projects/FFS"
+ url = "https://github.com/GTkorvo/ffs/archive/v1.1.tar.gz"
+
+ version('develop', git='https://github.com/GTkorvo/ffs.git',
+ branch='master')
+ version('1.1.1', 'aa1c8ad5cf35e8cf76735e3a60891509')
+ version('1.1', '561c6b3abc53e12b3c01192e8ef2ffbc')
+
+ depends_on('flex')
+ depends_on('bison')
+ depends_on('gtkorvo-atl')
+ depends_on('gtkorvo-dill')
+ depends_on('gtkorvo-cercs-env')
+
+ def cmake_args(self):
+ args = ["-DENABLE_TESTING=0", "-DTARGET_CNL=1",
+ "-DBUILD_SHARED_STATIC=STATIC"]
+ return args
diff --git a/var/spack/repos/builtin/packages/libfontenc/package.py b/var/spack/repos/builtin/packages/libfontenc/package.py
index 1c7fa196d9..c5bc0478b2 100644
--- a/var/spack/repos/builtin/packages/libfontenc/package.py
+++ b/var/spack/repos/builtin/packages/libfontenc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libfontenc(Package):
+class Libfontenc(AutotoolsPackage):
"""libfontenc - font encoding library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libfontenc"
@@ -38,9 +38,3 @@ class Libfontenc(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libfs/package.py b/var/spack/repos/builtin/packages/libfs/package.py
index 96bf62afd7..95d5708d2f 100644
--- a/var/spack/repos/builtin/packages/libfs/package.py
+++ b/var/spack/repos/builtin/packages/libfs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libfs(Package):
+class Libfs(AutotoolsPackage):
"""libFS - X Font Service client library.
This library is used by clients of X Font Servers (xfs), such as
@@ -41,9 +41,3 @@ class Libfs(Package):
depends_on('xtrans', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libgcrypt/package.py b/var/spack/repos/builtin/packages/libgcrypt/package.py
index b556def4d3..053f62f9fc 100644
--- a/var/spack/repos/builtin/packages/libgcrypt/package.py
+++ b/var/spack/repos/builtin/packages/libgcrypt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,16 @@
from spack import *
-class Libgcrypt(Package):
+class Libgcrypt(AutotoolsPackage):
"""Libgcrypt is a general purpose cryptographic library based on
the code from GnuPG. It provides functions for all cryptographic
building blocks: symmetric ciphers, hash algorithms, MACs, public
key algorithms, large integer functions, random numbers and a lot
of supporting functions. """
homepage = "http://www.gnu.org/software/libgcrypt/"
- url = "ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.6.2.tar.bz2"
+ url = "https://gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.7.6.tar.bz2"
+ version('1.7.6', '54e180679a7ae4d090f8689ca32b654c')
version('1.6.2', 'b54395a93cb1e57619943c082da09d5f')
depends_on("libgpg-error")
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libgd/package.py b/var/spack/repos/builtin/packages/libgd/package.py
index 6329adf8f3..22eb66d1c3 100644
--- a/var/spack/repos/builtin/packages/libgd/package.py
+++ b/var/spack/repos/builtin/packages/libgd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Libgd(Package):
+class Libgd(AutotoolsPackage):
"""GD is an open source code library for the dynamic creation of images
by programmers. GD is written in C, and "wrappers" are available
for Perl, PHP and other languages. GD creates PNG, JPEG, GIF,
@@ -38,8 +38,9 @@ class Libgd(Package):
"""
homepage = "https://github.com/libgd/libgd"
- url = "https://github.com/libgd/libgd/archive/gd-2.1.1.tar.gz"
+ url = 'https://github.com/libgd/libgd/releases/download/gd-2.2.4/libgd-2.2.4.tar.gz'
+ version('2.2.4', '0a3c307b5075edbe1883543dd1153c02')
version('2.2.3', 'a67bd15fa33d4aac0a1c7904aed19f49')
version('2.1.1', 'e91a1a99903e460e7ba00a794e72cc1e')
@@ -51,22 +52,8 @@ class Libgd(Package):
depends_on('gettext', type='build')
depends_on('pkg-config', type='build')
+ depends_on('libiconv')
depends_on('libpng')
+ depends_on('jpeg')
depends_on('libtiff')
depends_on('fontconfig')
-
- def install(self, spec, prefix):
- autoreconf("--install", "--force",
- "-I", "m4",
- "-I", join_path(spec['gettext'].prefix,
- "share", "aclocal"),
- "-I", join_path(spec['pkg-config'].prefix,
- "share", "aclocal"),
- "-I", join_path(spec['automake'].prefix,
- "share", "aclocal"),
- "-I", join_path(spec['libtool'].prefix,
- "share", "aclocal")
- )
- configure('--prefix={0}'.format(prefix))
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libgit2/package.py b/var/spack/repos/builtin/packages/libgit2/package.py
new file mode 100644
index 0000000000..9ea82790ac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libgit2/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Libgit2(CMakePackage):
+ """libgit2 is a portable, pure C implementation of the Git core
+ methods provided as a re-entrant linkable library with a solid
+ API, allowing you to write native speed custom Git applications in
+ any language which supports C bindings.
+ """
+
+ homepage = "https://libgit2.github.com/"
+ url = "https://github.com/libgit2/libgit2/archive/v0.24.2.tar.gz"
+
+ version('0.24.2', '735661b5b73e3c120d13e2bae21e49b3')
+
+ depends_on('cmake@2.8:', type='build')
+ depends_on('libssh2')
diff --git a/var/spack/repos/builtin/packages/libgpg-error/package.py b/var/spack/repos/builtin/packages/libgpg-error/package.py
index a0e2acd516..ea97c9e13e 100644
--- a/var/spack/repos/builtin/packages/libgpg-error/package.py
+++ b/var/spack/repos/builtin/packages/libgpg-error/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,15 @@
from spack import *
-class LibgpgError(Package):
+class LibgpgError(AutotoolsPackage):
"""Libgpg-error is a small library that defines common error
values for all GnuPG components. Among these are GPG, GPGSM,
GPGME, GPG-Agent, libgcrypt, Libksba, DirMngr, Pinentry,
SmartCard Daemon and possibly more in the future. """
homepage = "https://www.gnupg.org/related_software/libgpg-error"
- url = "ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.18.tar.bz2"
+ url = "https://gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.27.tar.bz2"
+ version('1.27', '5217ef3e76a7275a2a3b569a12ddc989')
version('1.21', 'ab0b5aba6d0a185b41d07bda804fd8b2')
version('1.18', '12312802d2065774b787cbfc22cc04e9')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libgpuarray/package.py b/var/spack/repos/builtin/packages/libgpuarray/package.py
new file mode 100644
index 0000000000..3bc1100c81
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libgpuarray/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Libgpuarray(CMakePackage):
+ """Make a common GPU ndarray(n dimensions array) that can be reused by all
+ projects that is as future proof as possible, while keeping it easy to use
+ for simple need/quick test."""
+
+ homepage = "http://deeplearning.net/software/libgpuarray/"
+ url = "https://github.com/Theano/libgpuarray/archive/v0.6.1.tar.gz"
+
+ version('0.6.2', '7f163bd5f48f399cd6e608ee3d528ee4')
+ version('0.6.1', 'cfcd1b54447f9d55b05514df62c70ae2')
+ version('0.6.0', '98a4ec1b4c8f225f0b89c18b899a000b')
+
+ depends_on('cuda')
+ depends_on('cmake@3:', type='build')
+
+ extends('python')
diff --git a/var/spack/repos/builtin/packages/libgtextutils/package.py b/var/spack/repos/builtin/packages/libgtextutils/package.py
index 201e031869..be6759e91e 100644
--- a/var/spack/repos/builtin/packages/libgtextutils/package.py
+++ b/var/spack/repos/builtin/packages/libgtextutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,11 @@
from spack import *
-class Libgtextutils(Package):
+class Libgtextutils(AutotoolsPackage):
"""Gordon's Text utils Library."""
homepage = "https://github.com/agordon/libgtextutils"
url = "https://github.com/agordon/libgtextutils/releases/download/0.7/libgtextutils-0.7.tar.gz"
+ patch('text_line_reader.patch')
version('0.7', '593c7c62e3c76ec49f5736eed4f96806')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libgtextutils/text_line_reader.patch b/var/spack/repos/builtin/packages/libgtextutils/text_line_reader.patch
new file mode 100644
index 0000000000..cc9c4cda08
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libgtextutils/text_line_reader.patch
@@ -0,0 +1,10 @@
+--- libgtextutils/src/gtextutils/text_line_reader.cpp.orig 2017-03-09 07:49:56.358283887 -0800
++++ libgtextutils/src/gtextutils/text_line_reader.cpp 2017-03-09 07:50:24.317503887 -0800
+@@ -44,6 +44,6 @@
+ if (input_stream.eof())
+ return false;
+
+- return input_stream ;
++ return static_cast<bool>(input_stream) ;
+ }
+
diff --git a/var/spack/repos/builtin/packages/libharu/package.py b/var/spack/repos/builtin/packages/libharu/package.py
new file mode 100644
index 0000000000..3542582df8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libharu/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Libharu(AutotoolsPackage):
+ """libharu - free PDF library.
+
+ Haru is a free, cross platform, open-sourced software library for
+ generating PDF."""
+
+ homepage = "http://libharu.org"
+ url = "https://github.com/libharu/libharu/archive/RELEASE_2_3_0.tar.gz"
+
+ version('2.3.0', '4f916aa49c3069b3a10850013c507460')
+ version('2.2.0', 'b65a6fc33a0bdad89bec6b7def101f01')
+ version('master', branch='master',
+ git='https://github.com/libharu/libharu.git')
+
+ def autoreconf(self, spec, prefix):
+ """execute their autotools wrapper script"""
+ if os.path.exists('./buildconf.sh'):
+ bash = which('bash')
+ bash('./buildconf.sh', '--force')
+
+ def url_for_version(self, version):
+ url = 'https://github.com/libharu/libharu/archive/RELEASE_{0}.tar.gz'
+ return url.format(version.underscored)
diff --git a/var/spack/repos/builtin/packages/libhio/package.py b/var/spack/repos/builtin/packages/libhio/package.py
index 17bd86d310..db74e7c546 100644
--- a/var/spack/repos/builtin/packages/libhio/package.py
+++ b/var/spack/repos/builtin/packages/libhio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libhio(Package):
+class Libhio(AutotoolsPackage):
"""
A library for writing to hierarchical data store systems.
"""
@@ -35,11 +35,6 @@ class Libhio(Package):
version('1.3.0.1', 'c073541de8dd70aeb8878bd00d6d877f')
- depends_on("libjson-c")
+ depends_on("json-c")
depends_on("bzip2")
depends_on("pkg-config", type="build")
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libice/package.py b/var/spack/repos/builtin/packages/libice/package.py
index 1f6fd2f901..4ffc67ed9c 100644
--- a/var/spack/repos/builtin/packages/libice/package.py
+++ b/var/spack/repos/builtin/packages/libice/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libice(Package):
+class Libice(AutotoolsPackage):
"""libICE - Inter-Client Exchange Library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libICE"
@@ -37,9 +37,3 @@ class Libice(Package):
depends_on('xtrans', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libiconv/package.py b/var/spack/repos/builtin/packages/libiconv/package.py
index 72f67ec80d..1e3d29a4df 100644
--- a/var/spack/repos/builtin/packages/libiconv/package.py
+++ b/var/spack/repos/builtin/packages/libiconv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,13 +31,14 @@ class Libiconv(AutotoolsPackage):
and the iconv program for character set conversion."""
homepage = "https://www.gnu.org/software/libiconv/"
- url = "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz"
+ url = "http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz"
+ version('1.15', 'ace8b5f2db42f7b3b3057585e80d9808')
version('1.14', 'e34509b1623cec449dfeb73d7ce9c6c6')
# We cannot set up a warning for gets(), since gets() is not part
# of C11 any more and thus might not exist.
- patch("gets.patch")
+ patch('gets.patch', when='@1.14')
def configure_args(self):
args = ['--enable-extra-encodings']
diff --git a/var/spack/repos/builtin/packages/libint/package.py b/var/spack/repos/builtin/packages/libint/package.py
index 2ad5e93191..8fa0906658 100644
--- a/var/spack/repos/builtin/packages/libint/package.py
+++ b/var/spack/repos/builtin/packages/libint/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,25 +25,27 @@
from spack import *
-class Libint(Package):
+class Libint(AutotoolsPackage):
"""Libint is a high-performance library for computing
- Gaussian integrals in quantum mechanics."""
+ Gaussian integrals in quantum mechanics.
+ """
homepage = "https://github.com/evaleev/libint"
- url = "https://github.com/evaleev/libint/archive/v2.1.0.tar.gz"
+ url = "https://github.com/evaleev/libint/archive/v2.1.0.tar.gz"
+ version('2.2.0', 'da37dab862fb0b97a7ed7d007695ef47')
version('2.1.0', 'd0dcb985fe32ddebc78fe571ce37e2d6')
version('1.1.6', '990f67b55f49ecc18f32c58da9240684')
version('1.1.5', '379b7d0718ff398715d6898807adf628')
# Build dependencies
depends_on('autoconf@2.52:', type='build')
- depends_on('automake', type='build')
- depends_on('libtool', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
# Libint 2 dependencies
depends_on('boost', when='@2:')
- depends_on('gmp', when='@2:')
+ depends_on('gmp', when='@2:')
def url_for_version(self, version):
base_url = "https://github.com/evaleev/libint/archive"
@@ -54,26 +56,37 @@ class Libint(Package):
else:
return "{0}/v{1}.tar.gz".format(base_url, version)
- def install(self, spec, prefix):
- # Generate configure
+ def autoreconf(self, spec, prefix):
libtoolize()
aclocal('-I', 'lib/autoconf')
autoconf()
- config_args = [
- '--prefix={0}'.format(prefix),
- '--enable-shared'
- ]
+ @property
+ def optflags(self):
+ flags = '-O2'
# Optimizations for the Intel compiler, suggested by CP2K
- optflags = '-O2'
- if self.compiler.name == 'intel':
- optflags += ' -xAVX -axCORE-AVX2 -ipo'
- if which('xiar'):
- env['AR'] = 'xiar'
+ if '%intel' in self.spec:
+ # -xSSE2 will make it usable on old architecture
+ flags += ' -xSSE2 -xAVX -axCORE-AVX2 -ipo'
- env['CFLAGS'] = optflags
- env['CXXFLAGS'] = optflags
+ return flags
+
+ def setup_environment(self, build_env, run_env):
+ # Set optimization flags
+ build_env.set('CFLAGS', self.optflags)
+ build_env.set('CXXFLAGS', self.optflags)
+
+ # Change AR to xiar if we compile with Intel and we
+ # find the executable
+ if '%intel' in self.spec and which('xiar'):
+ build_env.set('AR', 'xiar')
+
+ def configure_args(self):
+
+ config_args = ['--enable-shared']
+
+ optflags = self.optflags
# Optimization flag names have changed in libint 2
if self.version < Version('2.0.0'):
@@ -93,12 +106,4 @@ class Libint(Package):
'--with-libint-max-am=5',
'--with-libderiv-max-am1=4'
])
-
- configure(*config_args)
- make()
-
- # Testing suite was added in libint 2
- if self.version >= Version('2.0.0'):
- make('check')
-
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/libjpeg-turbo/package.py b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py
index 3fe159d7b9..2264147362 100644
--- a/var/spack/repos/builtin/packages/libjpeg-turbo/package.py
+++ b/var/spack/repos/builtin/packages/libjpeg-turbo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class LibjpegTurbo(Package):
+class LibjpegTurbo(AutotoolsPackage):
"""libjpeg-turbo is a fork of the original IJG libjpeg which uses SIMD to
accelerate baseline JPEG compression and decompression. libjpeg is a
library that implements JPEG image encoding, decoding and
@@ -37,14 +37,11 @@ class LibjpegTurbo(Package):
version('1.5.0', '3fc5d9b6a8bce96161659ae7a9939257')
version('1.3.1', '2c3a68129dac443a72815ff5bb374b05')
+ provides('jpeg')
+
# Can use either of these. But in the current version of the package
# only nasm is used. In order to use yasm an environmental variable
# NASM must be set.
# TODO: Implement the selection between two supported assemblers.
# depends_on("yasm", type='build')
depends_on("nasm", type='build')
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/jpeg/package.py b/var/spack/repos/builtin/packages/libjpeg/package.py
index 594240d950..bd789200cb 100644
--- a/var/spack/repos/builtin/packages/jpeg/package.py
+++ b/var/spack/repos/builtin/packages/libjpeg/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Jpeg(Package):
+class Libjpeg(AutotoolsPackage):
"""libjpeg is a widely used free library with functions for handling the
JPEG image data format. It implements a JPEG codec (encoding and decoding)
alongside various utilities for handling JPEG data."""
@@ -36,9 +36,4 @@ class Jpeg(Package):
version('9b', '6a9996ce116ec5c52b4870dbcd6d3ddb')
version('9a', '3353992aecaee1805ef4109aadd433e7')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
-
- make()
- make("test")
- make("install")
+ provides('jpeg')
diff --git a/var/spack/repos/builtin/packages/libksba/package.py b/var/spack/repos/builtin/packages/libksba/package.py
new file mode 100644
index 0000000000..a9f498e3d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libksba/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Libksba(AutotoolsPackage):
+ """Libksba is a library to make the tasks of working with X.509
+ certificates, CMS data and related objects more easy. """
+
+ homepage = "https://gnupg.org/software/libksba/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2"
+
+ version('1.3.5', '8302a3e263a7c630aa7dea7d341f07a2')
+
+ depends_on('libgpg-error')
+
+ def configure_args(self):
+ args = ['--with-libgpp-error=%s' % self.spec['libgpg-error'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/liblbxutil/package.py b/var/spack/repos/builtin/packages/liblbxutil/package.py
index 1de59defd6..90be9b3cdd 100644
--- a/var/spack/repos/builtin/packages/liblbxutil/package.py
+++ b/var/spack/repos/builtin/packages/liblbxutil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Liblbxutil(Package):
+class Liblbxutil(AutotoolsPackage):
"""liblbxutil - Low Bandwith X extension (LBX) utility routines."""
homepage = "http://cgit.freedesktop.org/xorg/lib/liblbxutil"
@@ -43,9 +43,3 @@ class Liblbxutil(Package):
# undefined symbol: Xalloc
# See https://bugs.freedesktop.org/show_bug.cgi?id=8421
# Adding a dependency on libxdmcp and adding LIBS=-lXdmcp did not fix it
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libmatheval/package.py b/var/spack/repos/builtin/packages/libmatheval/package.py
new file mode 100644
index 0000000000..f0992c4b42
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libmatheval/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Libmatheval(AutotoolsPackage):
+ """GNU libmatheval is a library (callable from C and Fortran) to parse
+ and evaluate symbolic expressions input as text. It supports expressions
+ in any number of variables of arbitrary names, decimal and symbolic
+ constants, basic unary and binary operators, and elementary mathematical
+ functions. In addition to parsing and evaluation, libmatheval can also
+ compute symbolic derivatives and output expressions to strings."""
+
+ homepage = "https://www.gnu.org/software/libmatheval/"
+ url = "https://ftp.gnu.org/gnu/libmatheval/libmatheval-1.1.11.tar.gz"
+
+ version('1.1.11', '595420ea60f6ddd75623847f46ca45c4')
+
+ # Only needed for unit tests, but configure crashes without it
+ depends_on('guile', type='build')
diff --git a/var/spack/repos/builtin/packages/libmesh/package.py b/var/spack/repos/builtin/packages/libmesh/package.py
index 6ceef8dbf6..20603a6589 100644
--- a/var/spack/repos/builtin/packages/libmesh/package.py
+++ b/var/spack/repos/builtin/packages/libmesh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/libmng/package.py b/var/spack/repos/builtin/packages/libmng/package.py
index a77aada79c..95542361ef 100644
--- a/var/spack/repos/builtin/packages/libmng/package.py
+++ b/var/spack/repos/builtin/packages/libmng/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,14 @@
from spack import *
-class Libmng(Package):
+class Libmng(AutotoolsPackage):
"""libmng -THE reference library for reading, displaying, writing
and examining Multiple-Image Network Graphics. MNG is the animation
extension to the popular PNG image-format."""
homepage = "http://sourceforge.net/projects/libmng/"
- url = "http://downloads.sourceforge.net/project/libmng/libmng-devel/2.0.2/libmng-2.0.2.tar.gz"
+ url = "http://downloads.sourceforge.net/project/libmng/libmng-devel/2.0.3/libmng-2.0.3.tar.gz"
+ version('2.0.3', '7e9a12ba2a99dff7e736902ea07383d4')
version('2.0.2', '1ffefaed4aac98475ee6267422cbca55')
depends_on("jpeg")
@@ -39,11 +40,15 @@ class Libmng(Package):
depends_on("lcms")
def patch(self):
- # jpeg requires stdio to beincluded before its headrs.
+ # jpeg requires stdio to be included before its headers.
filter_file(r'^(\#include \<jpeglib\.h\>)',
'#include<stdio.h>\n\\1', 'libmng_types.h')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ @run_before('configure')
+ def clean_configure_directory(self):
+ """Without this, configure crashes with:
+
+ configure: error: source directory already configured;
+ run "make distclean" there first
+ """
+ make('distclean')
diff --git a/var/spack/repos/builtin/packages/libmongoc/package.py b/var/spack/repos/builtin/packages/libmongoc/package.py
new file mode 100644
index 0000000000..5050dd0336
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libmongoc/package.py
@@ -0,0 +1,72 @@
+##############################################################################
+# 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/spack/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 Libmongoc(AutotoolsPackage):
+ """libmongoc is a client library written in C for MongoDB."""
+
+ homepage = "https://github.com/mongodb/mongo-c-driver"
+ url = "https://github.com/mongodb/mongo-c-driver/releases/download/1.7.0/mongo-c-driver-1.7.0.tar.gz"
+
+ version('1.8.0', '8c271a16ff30f6d4f5e134f699f7360f')
+ version('1.7.0', '21acf3584e92631422bc91e9e3cf4f76')
+ version('1.6.3', '0193610cf1d98aae7008f272a1000972')
+ version('1.6.2', 'aac86df153282cda1e4905cca181631a')
+ version('1.6.1', '826946de9a15f7f453aefecdc76b1c0d')
+
+ variant('ssl', default=True, description='Enable SSL support.')
+ variant('snappy', default=True, description='Enable Snappy support.')
+ variant('zlib', default=True, description='Enable zlib support.')
+
+ depends_on('libbson')
+
+ depends_on('openssl', when='+ssl')
+ depends_on('snappy', when='+snappy')
+ depends_on('zlib', when='+zlib')
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ '--disable-automatic-init-and-cleanup',
+ '--with-libbson=system'
+ ]
+
+ if '+ssl' in spec:
+ args.append('--enable-ssl=openssl')
+ else:
+ args.append('--enable-ssl=no')
+
+ if spec.satisfies('@1.7.0:'):
+ # --with-{snappy,zlib}=system are currently broken and cause
+ # configure to not find the dependencies. We still want to
+ # explicitly disable them when appropriate.
+ if '+snappy' not in spec:
+ args.append('--with-snappy=no')
+ if '+zlib' not in spec:
+ args.append('--with-zlib=no')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libmonitor/package.py b/var/spack/repos/builtin/packages/libmonitor/package.py
index f680baa265..7ec87ca453 100644
--- a/var/spack/repos/builtin/packages/libmonitor/package.py
+++ b/var/spack/repos/builtin/packages/libmonitor/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libmonitor(Package):
+class Libmonitor(AutotoolsPackage):
"""Libmonitor is a library for process and thread control."""
homepage = "https://github.com/HPCToolkit/libmonitor"
version('20130218', git='https://github.com/HPCToolkit/libmonitor.git',
@@ -36,8 +36,3 @@ class Libmonitor(Package):
patch('libmonitorkrell-0000.patch', when='@20130218+krellpatch')
patch('libmonitorkrell-0001.patch', when='@20130218+krellpatch')
patch('libmonitorkrell-0002.patch', when='@20130218+krellpatch')
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libnbc/package.py b/var/spack/repos/builtin/packages/libnbc/package.py
index 414498a37a..67ac5da744 100644
--- a/var/spack/repos/builtin/packages/libnbc/package.py
+++ b/var/spack/repos/builtin/packages/libnbc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libnbc(Package):
+class Libnbc(AutotoolsPackage):
"""LibNBC is a prototypic implementation of a nonblocking
interface for MPI collective operations. Based on ANSI C and
MPI-1, it supports all MPI-1 collective operations in a
@@ -37,8 +37,3 @@ class Libnbc(Package):
version('1.1.1', 'ece5c94992591a9fa934a90e5dbe50ce')
depends_on("mpi")
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libogg/package.py b/var/spack/repos/builtin/packages/libogg/package.py
new file mode 100644
index 0000000000..e2c38e7759
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libogg/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Libogg(AutotoolsPackage):
+ """Ogg is a multimedia container format, and the native file and stream
+ format for the Xiph.org multimedia codecs."""
+
+ homepage = "https://www.xiph.org/ogg/"
+ url = "http://downloads.xiph.org/releases/ogg/libogg-1.3.2.tar.gz"
+
+ version('1.3.2', 'b72e1a1dbadff3248e4ed62a4177e937')
diff --git a/var/spack/repos/builtin/packages/liboldx/package.py b/var/spack/repos/builtin/packages/liboldx/package.py
index 9e85f1ed65..f03e0bfe88 100644
--- a/var/spack/repos/builtin/packages/liboldx/package.py
+++ b/var/spack/repos/builtin/packages/liboldx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Liboldx(Package):
+class Liboldx(AutotoolsPackage):
"""X version 10 backwards compatibility."""
homepage = "https://cgit.freedesktop.org/xorg/lib/liboldX/"
@@ -37,9 +37,3 @@ class Liboldx(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libpcap/package.py b/var/spack/repos/builtin/packages/libpcap/package.py
new file mode 100644
index 0000000000..02221b371e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libpcap/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/spack/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 Libpcap(AutotoolsPackage):
+ "libpcap is a portable library in C/C++ for packet capture"
+ homepage = "http://www.tcpdump.org/"
+ list_url = "http://www.tcpdump.org/release/"
+ url = "http://www.tcpdump.org/release/libpcap-1.8.1.tar.gz"
+
+ version('1.8.1', '3d48f9cd171ff12b0efd9134b52f1447')
diff --git a/var/spack/repos/builtin/packages/libpciaccess/package.py b/var/spack/repos/builtin/packages/libpciaccess/package.py
index f4a3cf7157..7c4efde8ca 100644
--- a/var/spack/repos/builtin/packages/libpciaccess/package.py
+++ b/var/spack/repos/builtin/packages/libpciaccess/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,15 @@
from spack import *
-class Libpciaccess(Package):
+class Libpciaccess(AutotoolsPackage):
"""Generic PCI access library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libpciaccess/"
- url = "http://xorg.freedesktop.org/archive/individual/lib/libpciaccess-0.13.4.tar.gz"
+ url = "http://xorg.freedesktop.org/archive/individual/lib/libpciaccess-0.13.5.tar.gz"
+ version('0.13.5', '81468664fde96d1df2c3216fdf3c4a20')
version('0.13.4', 'cc1fad87da60682af1d5fa43a5da45a4')
depends_on('libtool', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- # libpciaccess does not support OS X
- if spec.satisfies('platform=darwin'):
- # create a dummy directory
- mkdir(prefix.lib)
- return
-
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libpfm4/package.py b/var/spack/repos/builtin/packages/libpfm4/package.py
new file mode 100644
index 0000000000..3e30ead2dc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libpfm4/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Libpfm4(MakefilePackage):
+ """libpfm4 is a userspace library to help
+ setup performance events for use with
+ the perf_events Linux kernel interface."""
+
+ homepage = "http://perfmon2.sourceforge.net"
+ url = "https://downloads.sourceforge.net/project/perfmon2/libpfm4/libpfm-4.8.0.tar.gz"
+
+ version('4.8.0', '730383896db92e12fb2cc10f2d41dd43')
+
+ # Fails to build libpfm4 with intel compiler version 16 and 17
+ conflicts('%intel@16:17')
+
+ @property
+ def install_targets(self):
+ return ['DESTDIR={0}'.format(self.prefix),
+ 'LIBDIR=/lib',
+ 'INCDIR=/include',
+ 'MANDIR=/man',
+ 'LDCONFIG=true',
+ 'install']
diff --git a/var/spack/repos/builtin/packages/libpipeline/package.py b/var/spack/repos/builtin/packages/libpipeline/package.py
new file mode 100644
index 0000000000..a242862b34
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libpipeline/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Libpipeline(AutotoolsPackage):
+ """libpipeline is a C library for manipulating pipelines of subprocesses
+ in a flexible and convenient way."""
+
+ homepage = "http://libpipeline.nongnu.org/"
+ url = "http://git.savannah.nongnu.org/cgit/libpipeline.git/snapshot/libpipeline-1.4.2.tar.gz"
+
+ version('1.4.2', '30cec7bcd6fee723adea6a54389f3da2')
+
+ depends_on('pkg-config', type='build')
+ # TODO: Add a 'test' deptype
+ # See https://github.com/spack/spack/issues/1279
+ # depends_on('check', type='test')
diff --git a/var/spack/repos/builtin/packages/libpng/package.py b/var/spack/repos/builtin/packages/libpng/package.py
index 46bbcebb89..a328bd44f8 100644
--- a/var/spack/repos/builtin/packages/libpng/package.py
+++ b/var/spack/repos/builtin/packages/libpng/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,11 @@ class Libpng(AutotoolsPackage):
"""libpng is the official PNG reference library."""
homepage = "http://www.libpng.org/pub/png/libpng.html"
- url = "http://download.sourceforge.net/libpng/libpng-1.6.27.tar.gz"
+ url = "http://download.sourceforge.net/libpng/libpng-1.6.29.tar.gz"
+ list_url = "https://sourceforge.net/projects/libpng/files/"
+ list_depth = 2
+ version('1.6.29', '68553080685f812d1dd7a6b8215c37d8')
version('1.6.27', '58698519e9f6126c1caeefc28dbcbd5f')
# From http://www.libpng.org/pub/png/libpng.html (2017-01-04)
# Virtually all libpng versions through 1.6.26, 1.5.27,
@@ -48,3 +51,13 @@ class Libpng(AutotoolsPackage):
version('1.2.57', 'dfcda3603e29dcc11870c48f838ef75b')
depends_on('zlib@1.0.4:') # 1.2.5 or later recommended
+
+ def configure_args(self):
+ args = [
+ # not honored, see
+ # https://sourceforge.net/p/libpng/bugs/210/#33f1
+ # '--with-zlib=' + self.spec['zlib'].prefix,
+ 'CFLAGS={0}'.format(self.spec['zlib'].headers.include_flags),
+ 'LDFLAGS={0}'.format(self.spec['zlib'].libs.search_flags)
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/libpsl/package.py b/var/spack/repos/builtin/packages/libpsl/package.py
new file mode 100644
index 0000000000..75722c63fd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libpsl/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 Libpsl(AutotoolsPackage):
+ """libpsl - C library to handle the Public Suffix List."""
+
+ homepage = "https://github.com/rockdaboot/libpsl"
+ url = "https://github.com/rockdaboot/libpsl/releases/download/libpsl-0.17.0/libpsl-0.17.0.tar.gz"
+
+ version('0.17.0', 'fed13f33d0d6dc13ef24de255630bfcb')
+
+ depends_on('icu4c')
+
+ depends_on('gettext', type='build')
+ depends_on('pkg-config@0.9.0:', type='build')
+ depends_on('python@2.7:', type='build')
+
+ depends_on('valgrind~mpi~boost', type='test')
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ 'PYTHON={0}'.format(spec['python'].command.path),
+ ]
+
+ if self.run_tests:
+ args.append('--enable-valgrind-tests')
+ else:
+ args.append('--disable-valgrind-tests')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/libpthread-stubs/package.py b/var/spack/repos/builtin/packages/libpthread-stubs/package.py
index fdaf327c2a..286120d908 100644
--- a/var/spack/repos/builtin/packages/libpthread-stubs/package.py
+++ b/var/spack/repos/builtin/packages/libpthread-stubs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,12 @@
from spack import *
-class LibpthreadStubs(Package):
+class LibpthreadStubs(AutotoolsPackage):
"""The libpthread-stubs package provides weak aliases for pthread
functions not provided in libc or otherwise available by default."""
homepage = "https://xcb.freedesktop.org/"
- url = "https://xcb.freedesktop.org/dist/libpthread-stubs-0.3.tar.gz"
+ url = "https://xcb.freedesktop.org/dist/libpthread-stubs-0.4.tar.gz"
+ version('0.4', '7d2734e604a3e2f6f665c420b835ab62')
version('0.3', 'a09d928c4af54fe5436002345ef71138')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/libquo/package.py b/var/spack/repos/builtin/packages/libquo/package.py
index 8856913bb2..08006c4295 100644
--- a/var/spack/repos/builtin/packages/libquo/package.py
+++ b/var/spack/repos/builtin/packages/libquo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,20 +23,19 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class Libquo(Package):
- """A high-level, easy to use programming interface tailored specifically
- for MPI/MPI+X codes that may benefit from evolving process binding
- policies during their execution. QUO allows for arbitrary process binding
- policies to be enacted and reverted during the execution of an MPI/MPI+X
- application as different computational phases are entered and exited,
- respectively."""
+class Libquo(AutotoolsPackage):
- homepage = "https://github.com/losalamos/libquo"
- url = "https://github.com/losalamos/libquo/archive/v1.2.9.tar.gz"
+ """QUO (as in "status quo") is a runtime library that aids in accommodating
+ thread-level heterogeneity in dynamic, phased MPI+X applications comprising
+ single- and multi-threaded libraries."""
+ homepage = "https://github.com/lanl/libquo"
+ url = "https://github.com/lanl/libquo/archive/v1.2.9.tar.gz"
+
+ version('develop', git='https://github.com/lanl/libquo', branch='master')
+ version('1.3', '3ff74162837425a15ecf695ca0201e4a')
version('1.2.9', 'ca82ab33f13e2b89983f81e7c02e98c2')
depends_on('mpi')
@@ -44,25 +43,8 @@ class Libquo(Package):
depends_on('automake', type='build')
depends_on('libtool', type='build')
- def install(self, spec, prefix):
- autoreconf_options = [
- '--install',
- '--verbose',
- '--force',
- '-I', 'config',
- '-I', os.path.join(spec['automake'].prefix,
- 'share', 'aclocal'),
- '-I', os.path.join(spec['libtool'].prefix,
- 'share', 'aclocal')
- ]
- autoreconf(*autoreconf_options)
-
- configure_options = [
- '--prefix={0}'.format(prefix),
- 'CC=%s' % join_path(spec['mpi'].prefix.bin, "mpicc"),
- 'FC=%s' % join_path(spec['mpi'].prefix.bin, "mpif90")
+ def configure_args(self):
+ return [
+ 'CC={0}'.format(self.spec['mpi'].mpicc),
+ 'FC={0}'.format(self.spec['mpi'].mpifc)
]
- configure(*configure_options)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libsigsegv/package.py b/var/spack/repos/builtin/packages/libsigsegv/package.py
index a5a3e8eb5f..f13710bff9 100644
--- a/var/spack/repos/builtin/packages/libsigsegv/package.py
+++ b/var/spack/repos/builtin/packages/libsigsegv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,10 +29,11 @@ class Libsigsegv(AutotoolsPackage):
"""GNU libsigsegv is a library for handling page faults in user mode."""
homepage = "https://www.gnu.org/software/libsigsegv/"
- url = "ftp://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.10.tar.gz"
+ url = "https://ftp.gnu.org/gnu/libsigsegv/libsigsegv-2.11.tar.gz"
patch('patch.new_config_guess', when='@2.10')
+ version('2.11', 'a812d9481f6097f705599b218eea349f')
version('2.10', '7f96fb1f65b3b8cbc1582fb7be774f0f')
def configure_args(self):
diff --git a/var/spack/repos/builtin/packages/libsm/package.py b/var/spack/repos/builtin/packages/libsm/package.py
index 4affd50127..602f5daa56 100644
--- a/var/spack/repos/builtin/packages/libsm/package.py
+++ b/var/spack/repos/builtin/packages/libsm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libsm(Package):
+class Libsm(AutotoolsPackage):
"""libSM - X Session Management Library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libSM"
@@ -39,9 +39,3 @@ class Libsm(Package):
depends_on('xtrans', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libsodium/package.py b/var/spack/repos/builtin/packages/libsodium/package.py
index 805881ce07..e62319e439 100644
--- a/var/spack/repos/builtin/packages/libsodium/package.py
+++ b/var/spack/repos/builtin/packages/libsodium/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,12 +25,15 @@
from spack import *
-class Libsodium(Package):
+class Libsodium(AutotoolsPackage):
"""Sodium is a modern, easy-to-use software library for encryption,
decryption, signatures, password hashing and more."""
homepage = "https://download.libsodium.org/doc/"
- url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.11.tar.gz"
+ url = "https://download.libsodium.org/libsodium/releases/libsodium-1.0.13.tar.gz"
+ list_url = "https://download.libsodium.org/libsodium/releases/old"
+ version('1.0.13', 'f38aac160a4bd05f06f743863e54e499')
+ version('1.0.12', 'c308e3faa724b630b86cc0aaf887a5d4')
version('1.0.11', 'b58928d035064b2a46fb564937b83540')
version('1.0.10', 'ea89dcbbda0b2b6ff6a1c476231870dd')
version('1.0.3', 'b3bcc98e34d3250f55ae196822307fab')
@@ -42,11 +45,7 @@ class Libsodium(Package):
def url_for_version(self, version):
url = 'https://download.libsodium.org/libsodium/releases/'
if version < Version('1.0.4'):
+ url += 'old/unsupported/'
+ elif version < Version('1.0.12'):
url += 'old/'
return url + 'libsodium-{0}.tar.gz'.format(version)
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libspatialindex/package.py b/var/spack/repos/builtin/packages/libspatialindex/package.py
index 5dd839a7c3..69183c8131 100644
--- a/var/spack/repos/builtin/packages/libspatialindex/package.py
+++ b/var/spack/repos/builtin/packages/libspatialindex/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/libsplash/package.py b/var/spack/repos/builtin/packages/libsplash/package.py
index c87dae19be..b710dae58c 100644
--- a/var/spack/repos/builtin/packages/libsplash/package.py
+++ b/var/spack/repos/builtin/packages/libsplash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libsplash(Package):
+class Libsplash(CMakePackage):
"""libSplash aims at developing a HDF5-based I/O library for HPC
simulations. It is created as an easy-to-use frontend for the standard HDF5
library with support for MPI processes in a cluster environment. While the
@@ -37,7 +37,7 @@ class Libsplash(Package):
homepage = "https://github.com/ComputationalRadiationPhysics/libSplash"
url = "https://github.com/ComputationalRadiationPhysics/libSplash/archive/v1.4.0.tar.gz"
- version('dev', branch='dev',
+ version('develop', branch='dev',
git='https://github.com/ComputationalRadiationPhysics/libSplash.git')
version('master', branch='master',
git='https://github.com/ComputationalRadiationPhysics/libSplash.git')
@@ -50,15 +50,6 @@ class Libsplash(Package):
variant('mpi', default=True,
description='Enable parallel I/O (one-file aggregation) support')
- depends_on('cmake', type='build')
depends_on('hdf5@1.8.6:')
depends_on('hdf5+mpi', when='+mpi')
depends_on('mpi', when='+mpi')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '..', *std_cmake_args)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libssh2/package.py b/var/spack/repos/builtin/packages/libssh2/package.py
new file mode 100644
index 0000000000..030e7aeab5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libssh2/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Libssh2(CMakePackage):
+ """libssh2 is a client-side C library implementing the SSH2 protocol"""
+
+ homepage = "https://www.libssh2.org/"
+ url = "https://www.libssh2.org/download/libssh2-1.7.0.tar.gz"
+
+ version('1.7.0', 'b01662a210e94cccf2f76094db7dac5c')
+ version('1.4.3', '071004c60c5d6f90354ad1b701013a0b') # CentOS7
+
+ variant('shared', default=True,
+ description="Build shared libraries")
+
+ depends_on('cmake@2.8.11:', type='build')
+ depends_on('openssl')
+ depends_on('zlib')
+ depends_on('xz')
+
+ def cmake_args(self):
+ spec = self.spec
+ return [
+ '-DBUILD_SHARED_LIBS=%s' % ('YES' if '+shared' in spec else 'NO')]
diff --git a/var/spack/repos/builtin/packages/libsvm/package.py b/var/spack/repos/builtin/packages/libsvm/package.py
new file mode 100644
index 0000000000..564775c91c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libsvm/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Libsvm(MakefilePackage):
+ """Libsvm is a simple, easy-to-use, and efficient software for SVM
+ classification and regression."""
+
+ homepage = "https://www.csie.ntu.edu.tw/~cjlin/libsvm/"
+ url = "https://github.com/cjlin1/libsvm/archive/v322.tar.gz"
+
+ version('322', 'd9617d29efad013573f63ca9a517f490')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.lib)
+ install('svm-predict', prefix.bin)
+ install('svm-scale', prefix.bin)
+ install('svm-train', prefix.bin)
+ install('svm.o', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/szip/package.py b/var/spack/repos/builtin/packages/libszip/package.py
index 91934f7d03..2f4b570fec 100644
--- a/var/spack/repos/builtin/packages/szip/package.py
+++ b/var/spack/repos/builtin/packages/libszip/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Szip(AutotoolsPackage):
+class Libszip(AutotoolsPackage):
"""Szip is an implementation of the extended-Rice lossless
compression algorithm.
@@ -33,13 +33,20 @@ class Szip(AutotoolsPackage):
provided with HDF software products.
"""
- homepage = "https://www.hdfgroup.org/doc_resource/SZIP/"
- url = "http://www.hdfgroup.org/ftp/lib-external/szip/2.1/src/szip-2.1.tar.gz"
+ homepage = "https://support.hdfgroup.org/doc_resource/SZIP/"
+ url = "https://support.hdfgroup.org/ftp/lib-external/szip/2.1.1/src/szip-2.1.1.tar.gz"
+ list_url = "https://support.hdfgroup.org/ftp/lib-external/szip"
+ list_depth = 2
- version('2.1', '902f831bcefb69c6b635374424acbead')
+ provides('szip')
+
+ version('2.1.1', 'dd579cf0f26d44afd10a0ad7291fc282')
+ version('2.1', '902f831bcefb69c6b635374424acbead')
def configure_args(self):
- return ['--enable-production',
- '--enable-shared',
- '--enable-static',
- '--enable-encoding']
+ return [
+ '--enable-production',
+ '--enable-shared',
+ '--enable-static',
+ '--enable-encoding',
+ ]
diff --git a/var/spack/repos/builtin/packages/libtermkey/package.py b/var/spack/repos/builtin/packages/libtermkey/package.py
index 64688505c4..6b8b6b58bd 100644
--- a/var/spack/repos/builtin/packages/libtermkey/package.py
+++ b/var/spack/repos/builtin/packages/libtermkey/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,6 +36,9 @@ class Libtermkey(Package):
version('0.15b', '27689756e6c86c56ae454f2ac259bc3d')
version('0.14', 'e08ce30f440f9715c459060e0e048978')
+ depends_on('libtool', type='build')
+ depends_on('ncurses')
+
def install(self, spec, prefix):
make()
make("install", "PREFIX=" + prefix)
diff --git a/var/spack/repos/builtin/packages/libtiff/package.py b/var/spack/repos/builtin/packages/libtiff/package.py
index 70c371b3b8..a28d553429 100644
--- a/var/spack/repos/builtin/packages/libtiff/package.py
+++ b/var/spack/repos/builtin/packages/libtiff/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,8 +28,10 @@ from spack import *
class Libtiff(AutotoolsPackage):
"""libtiff graphics format library"""
homepage = "http://www.simplesystems.org/libtiff/"
- url = "ftp://download.osgeo.org/libtiff/tiff-4.0.3.tar.gz"
+ url = "http://download.osgeo.org/libtiff/tiff-4.0.8.tar.gz"
+ version('4.0.8', '2a7d1c1318416ddf36d5f6fa4600069b')
+ version('4.0.7', '77ae928d2c6b7fb46a21c3a29325157b')
version('4.0.6', 'd1d2e940dea0b5ad435f21f03d96dd72')
version('4.0.3', '051c1068e6a0627f461948c365290410')
diff --git a/var/spack/repos/builtin/packages/libtool/package.py b/var/spack/repos/builtin/packages/libtool/package.py
index cd12503681..eca530ce0c 100644
--- a/var/spack/repos/builtin/packages/libtool/package.py
+++ b/var/spack/repos/builtin/packages/libtool/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,9 +36,15 @@ class Libtool(AutotoolsPackage):
depends_on('m4@1.4.6:', type='build')
+ build_directory = 'spack-build'
+
def _make_executable(self, name):
return Executable(join_path(self.prefix.bin, name))
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.append_path('ACLOCAL_PATH',
+ join_path(self.prefix.share, 'aclocal'))
+
def setup_dependent_package(self, module, dependent_spec):
# Automake is very likely to be a build dependency,
# so we add the tools it provides to the dependent module
diff --git a/var/spack/repos/builtin/packages/libunistring/package.py b/var/spack/repos/builtin/packages/libunistring/package.py
index 5b8837e72b..a4250bc8ee 100644
--- a/var/spack/repos/builtin/packages/libunistring/package.py
+++ b/var/spack/repos/builtin/packages/libunistring/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,12 @@
from spack import *
-class Libunistring(Package):
+class Libunistring(AutotoolsPackage):
"""This library provides functions for manipulating Unicode strings
and for manipulating C strings according to the Unicode standard."""
homepage = "https://www.gnu.org/software/libunistring/"
- url = "http://ftp.gnu.org/gnu/libunistring/libunistring-0.9.6.tar.xz"
+ url = "http://ftp.gnu.org/gnu/libunistring/libunistring-0.9.7.tar.xz"
+ version('0.9.7', '82e0545363d111bfdfec2ddbfe62ffd3')
version('0.9.6', 'cb09c398020c27edac10ca590e9e9ef3')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- # make('check') # test-verify fails for me, contacted developers
- make('install')
diff --git a/var/spack/repos/builtin/packages/libunwind/package.py b/var/spack/repos/builtin/packages/libunwind/package.py
index 63ab4aec59..9c8c0574b1 100644
--- a/var/spack/repos/builtin/packages/libunwind/package.py
+++ b/var/spack/repos/builtin/packages/libunwind/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Libunwind(Package):
+class Libunwind(AutotoolsPackage):
"""A portable and efficient C programming interface (API) to determine
the call-chain of a program."""
homepage = "http://www.nongnu.org/libunwind/"
url = "http://download.savannah.gnu.org/releases/libunwind/libunwind-1.1.tar.gz"
version('1.1', 'fb4ea2f6fbbe45bf032cd36e586883ce')
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libuuid/package.py b/var/spack/repos/builtin/packages/libuuid/package.py
index b8f6b1cc3a..750730b6ed 100644
--- a/var/spack/repos/builtin/packages/libuuid/package.py
+++ b/var/spack/repos/builtin/packages/libuuid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,10 @@
from spack import *
-class Libuuid(Package):
+class Libuuid(AutotoolsPackage):
"""Portable uuid C library"""
homepage = "http://sourceforge.net/projects/libuuid/"
url = "http://downloads.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flibuuid%2F&ts=1433881396&use_mirror=iweb"
version('1.0.3', 'd44d866d06286c08ba0846aba1086d68')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/libuv/package.py b/var/spack/repos/builtin/packages/libuv/package.py
index dae10809f2..d88b2306aa 100644
--- a/var/spack/repos/builtin/packages/libuv/package.py
+++ b/var/spack/repos/builtin/packages/libuv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libuv(Package):
+class Libuv(AutotoolsPackage):
"""Multi-platform library with a focus on asynchronous IO"""
homepage = "http://libuv.org"
url = "https://github.com/libuv/libuv/archive/v1.9.0.tar.gz"
@@ -36,11 +36,8 @@ class Libuv(Package):
depends_on('autoconf', type='build')
depends_on('libtool', type='build')
- def install(self, spec, prefix):
+ def autoreconf(self, spec, prefix):
+ # This is needed because autogen.sh generates on-the-fly
+ # an m4 macro needed during configuration
bash = which("bash")
bash('autogen.sh')
- configure('--prefix=%s' % prefix)
-
- make()
- make("check")
- make("install")
diff --git a/var/spack/repos/builtin/packages/libvorbis/package.py b/var/spack/repos/builtin/packages/libvorbis/package.py
new file mode 100644
index 0000000000..6a3561fb1a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libvorbis/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Libvorbis(AutotoolsPackage):
+ """Ogg Vorbis is a fully open, non-proprietary, patent-and-royalty-free,
+ general-purpose compressed audio format for mid to high quality (8kHz-
+ 48.0kHz, 16+ bit, polyphonic) audio and music at fixed and variable
+ bitrates from 16 to 128 kbps/channel."""
+
+ homepage = "https://xiph.org/vorbis/"
+ url = "http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.5.tar.gz"
+
+ version('1.3.5', '7220e089f3be3412a2317d6fde9e3944')
+
+ depends_on('libogg')
+
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ # `make check` crashes when run in parallel
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/libvterm/package.py b/var/spack/repos/builtin/packages/libvterm/package.py
index 2e1ef99b98..5ed4d0b74e 100644
--- a/var/spack/repos/builtin/packages/libvterm/package.py
+++ b/var/spack/repos/builtin/packages/libvterm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/libwebsockets/package.py b/var/spack/repos/builtin/packages/libwebsockets/package.py
index 3ce58a4c36..0b02793554 100644
--- a/var/spack/repos/builtin/packages/libwebsockets/package.py
+++ b/var/spack/repos/builtin/packages/libwebsockets/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,8 @@ class Libwebsockets(CMakePackage):
homepage = "https://github.com/warmcat/libwebsockets"
url = "https://github.com/warmcat/libwebsockets/archive/v2.1.0.tar.gz"
+ version('2.2.1', '1f641cde2ab3687db3d553f68fe0f620')
+ version('2.1.1', '674684ffb90d4a0bcf7a075eb7b90192')
version('2.1.0', '4df3be57dee43aeebd54a3ed56568f50')
version('2.0.3', 'a025156d606d90579e65d53ccd062a94')
version('1.7.9', '7b3692ead5ae00fd0e1d56c080170f07')
diff --git a/var/spack/repos/builtin/packages/libwindowswm/package.py b/var/spack/repos/builtin/packages/libwindowswm/package.py
index 3836e0d419..ffbff1f652 100644
--- a/var/spack/repos/builtin/packages/libwindowswm/package.py
+++ b/var/spack/repos/builtin/packages/libwindowswm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libwindowswm(Package):
+class Libwindowswm(AutotoolsPackage):
"""WindowsWM - Cygwin/X rootless window management extension.
WindowsWM is a simple library designed to interface with the
@@ -45,9 +45,3 @@ class Libwindowswm(Package):
depends_on('windowswmproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libx11/package.py b/var/spack/repos/builtin/packages/libx11/package.py
index c5df2e0f83..9658fab352 100644
--- a/var/spack/repos/builtin/packages/libx11/package.py
+++ b/var/spack/repos/builtin/packages/libx11/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,27 +25,22 @@
from spack import *
-class Libx11(Package):
+class Libx11(AutotoolsPackage):
"""libX11 - Core X11 protocol client library."""
homepage = "https://www.x.org/"
- url = "https://www.x.org/archive/individual/lib/libX11-1.6.3.tar.gz"
+ url = "https://www.x.org/archive/individual/lib/libX11-1.6.5.tar.gz"
+ version('1.6.5', '300b5831916ffcc375468431d856917e')
version('1.6.3', '7d16653fe7c36209799175bb3dc1ae46')
depends_on('libxcb@1.1.92:')
depends_on('xproto@7.0.17:', type='build')
- depends_on('xextproto', type='build')
+ depends_on('xextproto', type=('build', 'link'))
depends_on('xtrans', type='build')
- depends_on('kbproto', type='build')
+ depends_on('kbproto', type=('build', 'link'))
depends_on('inputproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
+ depends_on('perl', type='build')
diff --git a/var/spack/repos/builtin/packages/libxau/package.py b/var/spack/repos/builtin/packages/libxau/package.py
index eb1f1326c6..64f9a3a526 100644
--- a/var/spack/repos/builtin/packages/libxau/package.py
+++ b/var/spack/repos/builtin/packages/libxau/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxau(Package):
+class Libxau(AutotoolsPackage):
"""The libXau package contains a library implementing the X11
Authorization Protocol. This is useful for restricting client
access to the display."""
@@ -35,13 +35,6 @@ class Libxau(Package):
version('1.0.8', 'a85cd601d82bc79c0daa280917572e20')
- depends_on('xproto', type='build')
+ depends_on('xproto', type=('build', 'link'))
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxaw/package.py b/var/spack/repos/builtin/packages/libxaw/package.py
index 9f92ff57d2..7470ce2f72 100644
--- a/var/spack/repos/builtin/packages/libxaw/package.py
+++ b/var/spack/repos/builtin/packages/libxaw/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxaw(Package):
+class Libxaw(AutotoolsPackage):
"""Xaw is the X Athena Widget Set.
Xaw is a widget set based on the X Toolkit Intrinsics (Xt) Library."""
@@ -44,9 +44,3 @@ class Libxaw(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxaw3d/package.py b/var/spack/repos/builtin/packages/libxaw3d/package.py
index 498f57cbca..13137d622f 100644
--- a/var/spack/repos/builtin/packages/libxaw3d/package.py
+++ b/var/spack/repos/builtin/packages/libxaw3d/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxaw3d(Package):
+class Libxaw3d(AutotoolsPackage):
"""Xaw3d is the X 3D Athena Widget Set.
Xaw3d is a widget set based on the X Toolkit Intrinsics (Xt) Library."""
@@ -42,9 +42,3 @@ class Libxaw3d(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxc/package.py b/var/spack/repos/builtin/packages/libxc/package.py
index d773395e6c..d92ba97e73 100644
--- a/var/spack/repos/builtin/packages/libxc/package.py
+++ b/var/spack/repos/builtin/packages/libxc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,6 +36,33 @@ class Libxc(Package):
version('2.2.2', 'd9f90a0d6e36df6c1312b6422280f2ec')
version('2.2.1', '38dc3a067524baf4f8521d5bb1cd0b8f')
+ @property
+ def libs(self):
+ """Libxc can be queried for the following parameters:
+
+ - "static": returns the static library version of libxc
+ (by default the shared version is returned)
+
+ :return: list of matching libraries
+ """
+ query_parameters = self.spec.last_query.extra_parameters
+
+ libraries = ['libxc']
+
+ # Libxc installs both shared and static libraries.
+ # If a client ask for static explicitly then return
+ # the static libraries
+ shared = False if 'static' in query_parameters else True
+
+ # Libxc has a fortran90 interface: give clients the
+ # possibility to query for it
+ if 'fortran' in query_parameters:
+ libraries = ['libxcf90'] + libraries
+
+ return find_libraries(
+ libraries, root=self.prefix, shared=shared, recurse=True
+ )
+
def install(self, spec, prefix):
# Optimizations for the Intel compiler, suggested by CP2K
optflags = '-O2'
@@ -44,8 +71,15 @@ class Libxc(Package):
if which('xiar'):
env['AR'] = 'xiar'
- env['CFLAGS'] = optflags
- env['FCFLAGS'] = optflags
+ if 'CFLAGS' in env and env['CFLAGS']:
+ env['CFLAGS'] += ' ' + optflags
+ else:
+ env['CFLAGS'] = optflags
+
+ if 'FCFLAGS' in env and env['FCFLAGS']:
+ env['FCFLAGS'] += ' ' + optflags
+ else:
+ env['FCFLAGS'] = optflags
configure('--prefix={0}'.format(prefix),
'--enable-shared')
diff --git a/var/spack/repos/builtin/packages/libxcb/package.py b/var/spack/repos/builtin/packages/libxcb/package.py
index 9fa1c6f97c..cbca3bfd39 100644
--- a/var/spack/repos/builtin/packages/libxcb/package.py
+++ b/var/spack/repos/builtin/packages/libxcb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxcb(Package):
+class Libxcb(AutotoolsPackage):
"""The X protocol C-language Binding (XCB) is a replacement
for Xlib featuring a small footprint, latency hiding, direct
access to the protocol, improved threading support, and
@@ -43,7 +43,8 @@ class Libxcb(Package):
depends_on('libxdmcp')
depends_on('xcb-proto', type='build')
- depends_on('python@2:2.8', type='build')
+ # TODO: uncomment once build deps can be resolved separately
+ # depends_on('python@2:2.8', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
@@ -52,10 +53,3 @@ class Libxcb(Package):
'typedef struct xcb_auth_info_t {',
'typedef struct {',
'src/xcb.h')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxcomposite/package.py b/var/spack/repos/builtin/packages/libxcomposite/package.py
index 48cba00250..b408a08394 100644
--- a/var/spack/repos/builtin/packages/libxcomposite/package.py
+++ b/var/spack/repos/builtin/packages/libxcomposite/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxcomposite(Package):
+class Libxcomposite(AutotoolsPackage):
"""libXcomposite - client library for the Composite extension to the
X11 protocol."""
@@ -40,9 +40,3 @@ class Libxcomposite(Package):
depends_on('compositeproto@0.4:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxcursor/package.py b/var/spack/repos/builtin/packages/libxcursor/package.py
index 215452ef52..ec6b4d28f1 100644
--- a/var/spack/repos/builtin/packages/libxcursor/package.py
+++ b/var/spack/repos/builtin/packages/libxcursor/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxcursor(Package):
+class Libxcursor(AutotoolsPackage):
"""libXcursor - X Window System Cursor management library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXcursor"
@@ -40,9 +40,3 @@ class Libxcursor(Package):
depends_on('fixesproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxdamage/package.py b/var/spack/repos/builtin/packages/libxdamage/package.py
index 448ac21945..948e266aba 100644
--- a/var/spack/repos/builtin/packages/libxdamage/package.py
+++ b/var/spack/repos/builtin/packages/libxdamage/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxdamage(Package):
+class Libxdamage(AutotoolsPackage):
"""This package contains the library for the X Damage extension."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXdamage"
@@ -41,9 +41,3 @@ class Libxdamage(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxdmcp/package.py b/var/spack/repos/builtin/packages/libxdmcp/package.py
index c05d4b8771..093aa90dd3 100644
--- a/var/spack/repos/builtin/packages/libxdmcp/package.py
+++ b/var/spack/repos/builtin/packages/libxdmcp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxdmcp(Package):
+class Libxdmcp(AutotoolsPackage):
"""libXdmcp - X Display Manager Control Protocol library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXdmcp"
@@ -36,10 +36,3 @@ class Libxdmcp(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxevie/package.py b/var/spack/repos/builtin/packages/libxevie/package.py
index b9f0e41631..0ad59c24ee 100644
--- a/var/spack/repos/builtin/packages/libxevie/package.py
+++ b/var/spack/repos/builtin/packages/libxevie/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxevie(Package):
+class Libxevie(AutotoolsPackage):
"""Xevie - X Event Interception Extension (XEvIE)."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXevie"
@@ -41,9 +41,3 @@ class Libxevie(Package):
depends_on('evieext', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxext/package.py b/var/spack/repos/builtin/packages/libxext/package.py
index 192ab3957a..2ecdad7be5 100644
--- a/var/spack/repos/builtin/packages/libxext/package.py
+++ b/var/spack/repos/builtin/packages/libxext/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxext(Package):
+class Libxext(AutotoolsPackage):
"""libXext - library for common extensions to the X11 protocol."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXext"
@@ -39,9 +39,3 @@ class Libxext(Package):
depends_on('xextproto@7.1.99:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxfixes/package.py b/var/spack/repos/builtin/packages/libxfixes/package.py
index 6b8b599a85..5c18e389f1 100644
--- a/var/spack/repos/builtin/packages/libxfixes/package.py
+++ b/var/spack/repos/builtin/packages/libxfixes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxfixes(Package):
+class Libxfixes(AutotoolsPackage):
"""This package contains header files and documentation for the XFIXES
extension. Library and server implementations are separate."""
@@ -41,9 +41,3 @@ class Libxfixes(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxfont/package.py b/var/spack/repos/builtin/packages/libxfont/package.py
index 1ebf321c9f..4d08c4db71 100644
--- a/var/spack/repos/builtin/packages/libxfont/package.py
+++ b/var/spack/repos/builtin/packages/libxfont/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxfont(Package):
+class Libxfont(AutotoolsPackage):
"""libXfont provides the core of the legacy X11 font system, handling the
index files (fonts.dir, fonts.alias, fonts.scale), the various font file
formats, and rasterizing them. It is used by the X servers, the
@@ -46,9 +46,3 @@ class Libxfont(Package):
depends_on('fontsproto@2.1.3:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxfont2/package.py b/var/spack/repos/builtin/packages/libxfont2/package.py
index 8611e65ebb..b2a6a793cd 100644
--- a/var/spack/repos/builtin/packages/libxfont2/package.py
+++ b/var/spack/repos/builtin/packages/libxfont2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxfont2(Package):
+class Libxfont2(AutotoolsPackage):
"""libXfont provides the core of the legacy X11 font system, handling the
index files (fonts.dir, fonts.alias, fonts.scale), the various font file
formats, and rasterizing them. It is used by the X servers, the
@@ -46,9 +46,3 @@ class Libxfont2(Package):
depends_on('fontsproto@2.1.3:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxfontcache/package.py b/var/spack/repos/builtin/packages/libxfontcache/package.py
index 5421f093ca..d113cda057 100644
--- a/var/spack/repos/builtin/packages/libxfontcache/package.py
+++ b/var/spack/repos/builtin/packages/libxfontcache/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxfontcache(Package):
+class Libxfontcache(AutotoolsPackage):
"""Xfontcache - X-TrueType font cache extension client library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXfontcache"
@@ -40,9 +40,3 @@ class Libxfontcache(Package):
depends_on('fontcacheproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxft/package.py b/var/spack/repos/builtin/packages/libxft/package.py
index b1b8f853d0..63f9236302 100644
--- a/var/spack/repos/builtin/packages/libxft/package.py
+++ b/var/spack/repos/builtin/packages/libxft/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxft(Package):
+class Libxft(AutotoolsPackage):
"""X FreeType library.
Xft version 2.1 was the first stand alone release of Xft, a library that
@@ -44,9 +44,3 @@ class Libxft(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxi/package.py b/var/spack/repos/builtin/packages/libxi/package.py
index 4e9a273579..a16be21fba 100644
--- a/var/spack/repos/builtin/packages/libxi/package.py
+++ b/var/spack/repos/builtin/packages/libxi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxi(Package):
+class Libxi(AutotoolsPackage):
"""libXi - library for the X Input Extension."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXi"
@@ -40,9 +40,3 @@ class Libxi(Package):
depends_on('xproto@7.0.13:', type='build')
depends_on('xextproto@7.0.3:', type='build')
depends_on('inputproto@2.2.99.1:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxinerama/package.py b/var/spack/repos/builtin/packages/libxinerama/package.py
index a001c41ca7..74ec63f266 100644
--- a/var/spack/repos/builtin/packages/libxinerama/package.py
+++ b/var/spack/repos/builtin/packages/libxinerama/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxinerama(Package):
+class Libxinerama(AutotoolsPackage):
"""libXinerama - API for Xinerama extension to X11 Protocol."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXinerama"
@@ -40,9 +40,3 @@ class Libxinerama(Package):
depends_on('xineramaproto@1.1.99.1:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxkbfile/package.py b/var/spack/repos/builtin/packages/libxkbfile/package.py
index af8029a024..c345a8a362 100644
--- a/var/spack/repos/builtin/packages/libxkbfile/package.py
+++ b/var/spack/repos/builtin/packages/libxkbfile/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxkbfile(Package):
+class Libxkbfile(AutotoolsPackage):
"""XKB file handling routines."""
homepage = "https://cgit.freedesktop.org/xorg/lib/libxkbfile"
@@ -38,9 +38,3 @@ class Libxkbfile(Package):
depends_on('kbproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxkbui/package.py b/var/spack/repos/builtin/packages/libxkbui/package.py
index d0c132d970..eb34053918 100644
--- a/var/spack/repos/builtin/packages/libxkbui/package.py
+++ b/var/spack/repos/builtin/packages/libxkbui/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxkbui(Package):
+class Libxkbui(AutotoolsPackage):
"""X.org libxkbui library."""
homepage = "https://cgit.freedesktop.org/xorg/lib/libxkbui/"
@@ -39,9 +39,3 @@ class Libxkbui(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxml2/package.py b/var/spack/repos/builtin/packages/libxml2/package.py
index bbb934ab9f..87bbb965b8 100644
--- a/var/spack/repos/builtin/packages/libxml2/package.py
+++ b/var/spack/repos/builtin/packages/libxml2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxml2(Package):
+class Libxml2(AutotoolsPackage):
"""Libxml2 is the XML C parser and toolkit developed for the Gnome
project (but usable outside of the Gnome platform), it is free
software available under the MIT License."""
@@ -34,6 +34,7 @@ class Libxml2(Package):
version('2.9.4', 'ae249165c173b1ff386ee8ad676815f5')
version('2.9.2', '9e6a9aca9d155737868b3dc5fd82f788')
+ version('2.7.8', '8127a65e8c3b08856093099b52599c86')
variant('python', default=False, description='Enable Python support')
@@ -45,18 +46,17 @@ class Libxml2(Package):
depends_on('pkg-config@0.9.0:', type='build')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
+
+ args = ["--with-lzma=%s" % spec['xz'].prefix]
+
if '+python' in spec:
- python_args = [
- '--with-python={0}'.format(spec['python'].prefix),
+ args.extend([
+ '--with-python={0}'.format(spec['python'].home),
'--with-python-install-dir={0}'.format(site_packages_dir)
- ]
+ ])
else:
- python_args = ['--without-python']
-
- configure('--prefix={0}'.format(prefix), *python_args)
+ args.append('--without-python')
- make()
- if self.run_tests:
- make('check')
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/libxmu/package.py b/var/spack/repos/builtin/packages/libxmu/package.py
index dbba5f168d..bb3f168d6a 100644
--- a/var/spack/repos/builtin/packages/libxmu/package.py
+++ b/var/spack/repos/builtin/packages/libxmu/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxmu(Package):
+class Libxmu(AutotoolsPackage):
"""This library contains miscellaneous utilities and is not part of the
Xlib standard. It contains routines which only use public interfaces so
that it may be layered on top of any proprietary implementation of Xlib
@@ -43,9 +43,3 @@ class Libxmu(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxp/package.py b/var/spack/repos/builtin/packages/libxp/package.py
index 10aaccc54f..f18d4b89c9 100644
--- a/var/spack/repos/builtin/packages/libxp/package.py
+++ b/var/spack/repos/builtin/packages/libxp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxp(Package):
+class Libxp(AutotoolsPackage):
"""libXp - X Print Client Library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXp"
@@ -41,9 +41,3 @@ class Libxp(Package):
depends_on('printproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxpm/package.py b/var/spack/repos/builtin/packages/libxpm/package.py
index b726e74b0b..11ede1fe88 100644
--- a/var/spack/repos/builtin/packages/libxpm/package.py
+++ b/var/spack/repos/builtin/packages/libxpm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,26 @@
from spack import *
-class Libxpm(Package):
+class Libxpm(AutotoolsPackage):
"""libXpm - X Pixmap (XPM) image file format library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXpm"
- url = "https://www.x.org/archive//individual/lib/libXpm-3.5.11.tar.gz"
+ url = "https://www.x.org/archive//individual/lib/libXpm-3.5.12.tar.gz"
+ version('3.5.12', 'b286c884b11b5a0b4371175c5327141f')
version('3.5.11', '7c67c878ee048206b070bc0b24154f04')
version('3.5.10', 'a70507638d74541bf30a771f1e5938bb')
version('3.5.9', 'd6d4b0f76248a6b346eb42dfcdaa72a6')
version('3.5.8', '2d81d6633e67ac5562e2fbee126b2897')
version('3.5.7', '7bbc8f112f7143ed6961a58ce4e14558')
+ depends_on('gettext')
depends_on('libx11')
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
+ def setup_environment(self, spack_env, run_env):
+ spack_env.append_flags('LDFLAGS', '-L{0} -lintl'.format(
+ self.spec['gettext'].prefix.lib))
diff --git a/var/spack/repos/builtin/packages/libxpresent/package.py b/var/spack/repos/builtin/packages/libxpresent/package.py
index e65d4353a0..286bf89fb8 100644
--- a/var/spack/repos/builtin/packages/libxpresent/package.py
+++ b/var/spack/repos/builtin/packages/libxpresent/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxpresent(Package):
+class Libxpresent(AutotoolsPackage):
"""This package contains header files and documentation for the Present
extension. Library and server implementations are separate."""
@@ -41,9 +41,3 @@ class Libxpresent(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxprintapputil/package.py b/var/spack/repos/builtin/packages/libxprintapputil/package.py
index fc66b76ac0..a6d2838d4d 100644
--- a/var/spack/repos/builtin/packages/libxprintapputil/package.py
+++ b/var/spack/repos/builtin/packages/libxprintapputil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxprintapputil(Package):
+class Libxprintapputil(AutotoolsPackage):
"""Xprint application utility routines."""
homepage = "https://cgit.freedesktop.org/xorg/lib/libXprintAppUtil/"
@@ -41,9 +41,3 @@ class Libxprintapputil(Package):
depends_on('printproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxprintutil/package.py b/var/spack/repos/builtin/packages/libxprintutil/package.py
index 8eb768958f..9bd765e1b6 100644
--- a/var/spack/repos/builtin/packages/libxprintutil/package.py
+++ b/var/spack/repos/builtin/packages/libxprintutil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxprintutil(Package):
+class Libxprintutil(AutotoolsPackage):
"""Xprint application utility routines."""
homepage = "https://cgit.freedesktop.org/xorg/lib/libXprintUtil/"
@@ -41,9 +41,3 @@ class Libxprintutil(Package):
depends_on('printproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxrandr/package.py b/var/spack/repos/builtin/packages/libxrandr/package.py
index 56c36c0c7b..2ee8f76acb 100644
--- a/var/spack/repos/builtin/packages/libxrandr/package.py
+++ b/var/spack/repos/builtin/packages/libxrandr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxrandr(Package):
+class Libxrandr(AutotoolsPackage):
"""libXrandr - X Resize, Rotate and Reflection extension library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXrandr"
@@ -42,9 +42,3 @@ class Libxrandr(Package):
depends_on('renderproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxrender/package.py b/var/spack/repos/builtin/packages/libxrender/package.py
index c5a6dac1be..49ed107daa 100644
--- a/var/spack/repos/builtin/packages/libxrender/package.py
+++ b/var/spack/repos/builtin/packages/libxrender/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,22 +25,17 @@
from spack import *
-class Libxrender(Package):
+class Libxrender(AutotoolsPackage):
"""libXrender - library for the Render Extension to the X11 protocol."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXrender"
- url = "https://www.x.org/archive/individual/lib/libXrender-0.9.9.tar.gz"
+ url = "https://www.x.org/archive/individual/lib/libXrender-0.9.10.tar.gz"
- version('0.9.9', '0c797c4f2a7b782896bc223e6dac4333')
+ version('0.9.10', '98a14fc11aee08b4a1769426ab4b23a3')
+ version('0.9.9', '0c797c4f2a7b782896bc223e6dac4333')
depends_on('libx11@1.6:')
- depends_on('renderproto@0.9:', type='build')
+ depends_on('renderproto@0.9:', type=('build', 'link'))
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxres/package.py b/var/spack/repos/builtin/packages/libxres/package.py
index 6d0684c4b8..eb691f8835 100644
--- a/var/spack/repos/builtin/packages/libxres/package.py
+++ b/var/spack/repos/builtin/packages/libxres/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxres(Package):
+class Libxres(AutotoolsPackage):
"""libXRes - X-Resource extension client library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXRes"
@@ -40,9 +40,3 @@ class Libxres(Package):
depends_on('resourceproto@1.0:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxscrnsaver/package.py b/var/spack/repos/builtin/packages/libxscrnsaver/package.py
index c9ca6ac1c8..ec68e8d395 100644
--- a/var/spack/repos/builtin/packages/libxscrnsaver/package.py
+++ b/var/spack/repos/builtin/packages/libxscrnsaver/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxscrnsaver(Package):
+class Libxscrnsaver(AutotoolsPackage):
"""XScreenSaver - X11 Screen Saver extension client library"""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXScrnSaver"
@@ -40,9 +40,3 @@ class Libxscrnsaver(Package):
depends_on('scrnsaverproto@1.2:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxshmfence/package.py b/var/spack/repos/builtin/packages/libxshmfence/package.py
index d4f4c85203..fea8c64fdd 100644
--- a/var/spack/repos/builtin/packages/libxshmfence/package.py
+++ b/var/spack/repos/builtin/packages/libxshmfence/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxshmfence(Package):
+class Libxshmfence(AutotoolsPackage):
"""libxshmfence - Shared memory 'SyncFence' synchronization primitive.
This library offers a CPU-based synchronization primitive compatible
@@ -40,10 +40,3 @@ class Libxshmfence(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxslt/package.py b/var/spack/repos/builtin/packages/libxslt/package.py
index 9c5a42bcfb..cbb04c0ee2 100644
--- a/var/spack/repos/builtin/packages/libxslt/package.py
+++ b/var/spack/repos/builtin/packages/libxslt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,10 +36,23 @@ class Libxslt(AutotoolsPackage):
homepage = "http://www.xmlsoft.org/XSLT/index.html"
url = "http://xmlsoft.org/sources/libxslt-1.1.28.tar.gz"
- version('1.1.28', '9667bf6f9310b957254fdcf6596600b7')
version('1.1.29', 'a129d3c44c022de3b9dcf6d6f288d72e')
+ version('1.1.28', '9667bf6f9310b957254fdcf6596600b7')
+ version('1.1.26', 'e61d0364a30146aaa3001296f853b2b9')
+ variant('crypto', default=True,
+ description='Build libexslt with crypto support')
+
+ depends_on("libiconv")
depends_on("libxml2")
depends_on("xz")
depends_on("zlib")
- depends_on("libgcrypt")
+ depends_on("libgcrypt", when="+crypto")
+
+ def configure_args(self):
+ args = []
+ if '~crypto' in self.spec:
+ args.append('--without-crypto')
+ else:
+ args.append('--with-crypto')
+ return args
diff --git a/var/spack/repos/builtin/packages/libxsmm/package.py b/var/spack/repos/builtin/packages/libxsmm/package.py
index a736490600..ec1fa2f0bc 100644
--- a/var/spack/repos/builtin/packages/libxsmm/package.py
+++ b/var/spack/repos/builtin/packages/libxsmm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,20 +23,53 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from glob import glob
class Libxsmm(Package):
- '''LIBXSMM is a library for small dense and small sparse matrix-matrix
- multiplications targeting Intel Architecture (x86).'''
+ '''Library targeting Intel Architecture
+ for small, dense or sparse matrix multiplications,
+ and small convolutions.'''
homepage = 'https://github.com/hfp/libxsmm'
- url = 'https://github.com/hfp/libxsmm/archive/1.4.3.tar.gz'
+ url = 'https://github.com/hfp/libxsmm/archive/1.8.1.tar.gz'
+ version('develop', git='https://github.com/hfp/libxsmm.git')
+
+ version('1.8.1', 'ece51ec767580f4542f509655daa5ec0')
+ version('1.8', '2d513afbdad99e5d04c6c4ab4c9bb25b')
+ version('1.7.1', 'a938335b1c2c90616dc72c2c1a5824ab')
+ version('1.7', 'cb3aff6d123ba70bd3d4daf575767d14')
+ version('1.6.6', '8b45ae022f36b8c212f579a0952b5034')
+ version('1.6.5', 'fa21fe88d092477fa796a346ac7674ff')
+ version('1.6.4', '23e484f7b9f980c2a3819db6e6c68710')
+ version('1.6.3', '7969c56e6faed66f9e07d86f063ecf0b')
+ version('1.6.2', '1920e58fdf00d2635d24cf5c07007bfc')
+ version('1.6.1', 'e3493c77c57d42cfa58e0e55a69ee22c')
+ version('1.6', '31c130aa176db23944de420b59e1c74d')
+ version('1.5.2', 'ecda62ec3e5c60897d0d7780c524bc19')
+ version('1.5.1', '612244e92024e11ec672bafb6e85c01b')
+ version('1.5', '7b550702b55dc8e73a42a2986a1e1b36')
+ version('1.4.4', '78beefa57da02126cf4556f0eef3f8f0')
version('1.4.3', '9839bf0fb8be7badf1e97ce4c817149b')
version('1.4.2', 'ea025761437f3b5c936821b9ca21ec31')
version('1.4.1', '71648500ea4510529845d329091917df')
version('1.4', 'b42f91bf5285e7ad0463446e55ebdc2b')
+ variant('debug', default=False,
+ description='Unoptimized with call-trace (LIBXSMM_TRACE).')
+ variant('header-only', default=False,
+ description='Produce header-only installation')
+
+ @property
+ def libs(self):
+ result = find_libraries(['libxsmm', 'libxsmmf'], root=self.prefix,
+ recurse=True)
+ if len(result) == 0:
+ result = find_libraries(['libxsmm', 'libxsmmf'], root=self.prefix,
+ shared=False, recurse=True)
+ return result
+
def patch(self):
kwargs = {'ignore_absent': False, 'backup': False, 'string': True}
makefile = FileFilter('Makefile.inc')
@@ -51,16 +84,38 @@ class Libxsmm(Package):
makefile.filter('FC = gfortran', 'FC ?= gfortran', **kwargs)
def manual_install(self, prefix):
+ spec = self.spec
install_tree('include', prefix.include)
- install_tree('lib', prefix.lib)
- install_tree('documentation', prefix.share + '/libxsmm/doc')
+ if '~header-only' in spec:
+ install_tree('lib', prefix.lib)
+ doc_path = prefix.share + '/libxsmm/doc'
+ mkdirp(doc_path)
+ for doc_file in glob('documentation/*.md'):
+ install(doc_file, doc_path)
+ for doc_file in glob('documentation/*.pdf'):
+ install(doc_file, doc_path)
+ install('README.md', doc_path)
+ install('LICENSE', doc_path)
def install(self, spec, prefix):
- make_args = [
- 'ROW_MAJOR=0',
- 'INDICES_M={0}'.format(' '.join(str(i) for i in range(1, 25))),
- 'INDICES_N={0}'.format(' '.join(str(i) for i in range(1, 25))),
- 'INDICES_K={0}'.format(' '.join(str(i) for i in range(1, 25)))
- ]
+ if '+header-only' in spec and '@1.6.2:' not in spec:
+ raise InstallError(
+ "The variant +header-only is only available " +
+ "for versions @1.6.2:")
+
+ # include symbols by default
+ make_args = ['SYM=1']
+
+ if '+header-only' in spec:
+ make_args += ['header-only']
+
+ # JIT (AVX and later) makes MNK, M, N, or K spec. superfluous
+# make_args += ['MNK=1 4 5 6 8 9 13 16 17 22 23 24 26 32']
+
+ # include call trace as the build is already de-optimized
+ if '+debug' in spec:
+ make_args += ['DBG=1']
+ make_args += ['TRACE=1']
+
make(*make_args)
self.manual_install(prefix)
diff --git a/var/spack/repos/builtin/packages/libxstream/package.py b/var/spack/repos/builtin/packages/libxstream/package.py
index 3201b58620..00b7c0be32 100644
--- a/var/spack/repos/builtin/packages/libxstream/package.py
+++ b/var/spack/repos/builtin/packages/libxstream/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,9 +31,9 @@ class Libxstream(Package):
conditions.'''
homepage = 'https://github.com/hfp/libxstream'
- url = 'https://github.com/hfp/libxstream.git'
+ url = 'https://github.com/hfp/libxstream/archive/0.9.0.tar.gz'
- version('0.9.0', git='https://github.com/hfp/libxstream.git')
+ version('0.9.0', 'fd74b7cf5f145ff4925d91be2809571c')
def patch(self):
kwargs = {'ignore_absent': False, 'backup': True, 'string': True}
diff --git a/var/spack/repos/builtin/packages/libxt/package.py b/var/spack/repos/builtin/packages/libxt/package.py
index c657c866b4..b3e2ac4e63 100644
--- a/var/spack/repos/builtin/packages/libxt/package.py
+++ b/var/spack/repos/builtin/packages/libxt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxt(Package):
+class Libxt(AutotoolsPackage):
"""libXt - X Toolkit Intrinsics library."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXt"
@@ -41,9 +41,3 @@ class Libxt(Package):
depends_on('kbproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxtrap/package.py b/var/spack/repos/builtin/packages/libxtrap/package.py
index 4589f98a87..83405cf48d 100644
--- a/var/spack/repos/builtin/packages/libxtrap/package.py
+++ b/var/spack/repos/builtin/packages/libxtrap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxtrap(Package):
+class Libxtrap(AutotoolsPackage):
"""libXTrap is the Xlib-based client API for the DEC-XTRAP extension.
XTrap was a proposed standard extension for X11R5 which facilitated the
@@ -50,9 +50,3 @@ class Libxtrap(Package):
depends_on('xextproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxtst/package.py b/var/spack/repos/builtin/packages/libxtst/package.py
index 0d16643f94..9b6b4093ba 100644
--- a/var/spack/repos/builtin/packages/libxtst/package.py
+++ b/var/spack/repos/builtin/packages/libxtst/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxtst(Package):
+class Libxtst(AutotoolsPackage):
"""libXtst provides the Xlib-based client API for the XTEST & RECORD
extensions.
@@ -49,11 +49,6 @@ class Libxtst(Package):
depends_on('recordproto@1.13.99.1:', type='build')
depends_on('xextproto@7.0.99.3:', type='build')
depends_on('inputproto', type='build')
+ depends_on('fixesproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxv/package.py b/var/spack/repos/builtin/packages/libxv/package.py
index 03f10a1842..e29ec91b84 100644
--- a/var/spack/repos/builtin/packages/libxv/package.py
+++ b/var/spack/repos/builtin/packages/libxv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxv(Package):
+class Libxv(AutotoolsPackage):
"""libXv - library for the X Video (Xv) extension to the
X Window System."""
@@ -41,9 +41,3 @@ class Libxv(Package):
depends_on('videoproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxvmc/package.py b/var/spack/repos/builtin/packages/libxvmc/package.py
index 9d5695c2c1..42e56618a4 100644
--- a/var/spack/repos/builtin/packages/libxvmc/package.py
+++ b/var/spack/repos/builtin/packages/libxvmc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxvmc(Package):
+class Libxvmc(AutotoolsPackage):
"""X.org libXvMC library."""
homepage = "https://cgit.freedesktop.org/xorg/lib/libXvMC"
@@ -41,9 +41,3 @@ class Libxvmc(Package):
depends_on('videoproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxxf86dga/package.py b/var/spack/repos/builtin/packages/libxxf86dga/package.py
index 292c5d213b..f92ff7fb63 100644
--- a/var/spack/repos/builtin/packages/libxxf86dga/package.py
+++ b/var/spack/repos/builtin/packages/libxxf86dga/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxxf86dga(Package):
+class Libxxf86dga(AutotoolsPackage):
"""libXxf86dga - Client library for the XFree86-DGA extension."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXxf86dga"
@@ -41,9 +41,3 @@ class Libxxf86dga(Package):
depends_on('xf86dgaproto@2.0.99.2:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxxf86misc/package.py b/var/spack/repos/builtin/packages/libxxf86misc/package.py
index 0247f8b57c..8b161008f8 100644
--- a/var/spack/repos/builtin/packages/libxxf86misc/package.py
+++ b/var/spack/repos/builtin/packages/libxxf86misc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxxf86misc(Package):
+class Libxxf86misc(AutotoolsPackage):
"""libXxf86misc - Extension library for the XFree86-Misc X extension."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXxf86misc"
@@ -41,9 +41,3 @@ class Libxxf86misc(Package):
depends_on('xf86miscproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libxxf86vm/package.py b/var/spack/repos/builtin/packages/libxxf86vm/package.py
index feec5ff3d2..6b2cf951ed 100644
--- a/var/spack/repos/builtin/packages/libxxf86vm/package.py
+++ b/var/spack/repos/builtin/packages/libxxf86vm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Libxxf86vm(Package):
+class Libxxf86vm(AutotoolsPackage):
"""libXxf86vm - Extension library for the XFree86-VidMode X extension."""
homepage = "http://cgit.freedesktop.org/xorg/lib/libXxf86vm"
@@ -41,9 +41,3 @@ class Libxxf86vm(Package):
depends_on('xf86vidmodeproto@2.2.99.1:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/libyogrt/package.py b/var/spack/repos/builtin/packages/libyogrt/package.py
new file mode 100644
index 0000000000..f48ce80e83
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libyogrt/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Libyogrt(AutotoolsPackage):
+ """Your One Get Remaining Time Library."""
+
+ homepage = "https://github.com/LLNL/libyogrt"
+ url = "https://github.com/LLNL/libyogrt/archive/1.20-6.tar.gz"
+
+ version('1.20-6', '478f27512842cc5f2b74a0c22b851f60')
+ version('1.20-5', 'd0fa6526fcd1f56ddb3d93f602ec72f7')
+ version('1.20-4', '092bea10de22c505ce92aa07001decbb')
+ version('1.20-3', 'd0507717009a5f8e2009e3b63594738f')
+ version('1.20-2', '780bda03268324f6b5f72631fff6e6cb')
diff --git a/var/spack/repos/builtin/packages/libzip/package.py b/var/spack/repos/builtin/packages/libzip/package.py
new file mode 100644
index 0000000000..c193caae7f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/libzip/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Libzip(AutotoolsPackage):
+ """libzip is a C library for reading, creating,
+ and modifying zip archives."""
+
+ homepage = "https://nih.at/libzip/index.html"
+ url = "https://nih.at/libzip/libzip-1.2.0.tar.gz"
+
+ version('1.2.0', '5c3372ab3a7897295bfefb27f745cf69')
diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py
index 8d1687a11a..edba82da40 100644
--- a/var/spack/repos/builtin/packages/likwid/package.py
+++ b/var/spack/repos/builtin/packages/likwid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import glob
class Likwid(Package):
@@ -33,20 +34,41 @@ class Likwid(Package):
homepage = "https://github.com/RRZE-HPC/likwid"
url = "https://github.com/RRZE-HPC/likwid/archive/4.1.2.tar.gz"
+ maintainers = ['davydden']
+
+ version('4.3.0', 'f6bdf12513af95bd6eefa9c68644e724')
+ version('4.2.1', 'c408ddcf0317cdd894af4c580cd74294')
+ version('4.2.0', 'e41ff334b8f032a323d941ce32907a75')
version('4.1.2', 'a857ce5bd23e31d96e2963fe81cb38f0')
# NOTE: There is no way to use an externally provided hwloc with Likwid.
# The reason is that the internal hwloc is patched to contain extra
# functionality and functions are prefixed with "likwid_".
- # TODO: how to specify those?
- # depends_on('lua')
+ depends_on('lua', when='@4.2.0:')
# TODO: check
# depends_on('gnuplot', type='run')
+ depends_on('perl', type=('build', 'run'))
+
supported_compilers = {'clang': 'CLANG', 'gcc': 'GCC', 'intel': 'ICC'}
+ def patch(self):
+ files = glob.glob('perl/*.*') + glob.glob('bench/perl/*.*')
+
+ # Allow the scripts to find Spack's perl
+ filter_file('^#!/usr/bin/perl -w', '#!/usr/bin/env perl', *files)
+ filter_file('^#!/usr/bin/perl', '#!/usr/bin/env perl', *files)
+
+ @run_before('install')
+ def filter_sbang(self):
+ # Filter sbang before install so Spack's sbang hook can fix it up
+ perl = join_path(self.spec['perl'].prefix.bin, 'perl')
+ files = ['perl/feedGnuplot'] + glob.glob('filters/*')
+
+ filter_file('^#!/usr/bin/perl', '#!{0}'.format(perl), *files)
+
def install(self, spec, prefix):
if self.compiler.name not in self.supported_compilers:
raise RuntimeError('{0} is not a supported compiler \
@@ -65,5 +87,22 @@ class Likwid(Package):
'INSTALL_CHOWN = -o $(USER)',
'config.mk')
+ if spec.satisfies('^lua'):
+ filter_file('^#LUA_INCLUDE_DIR.*',
+ 'LUA_INCLUDE_DIR = {0}'.format(
+ spec['lua'].prefix.include),
+ 'config.mk')
+ filter_file('^#LUA_LIB_DIR.*',
+ 'LUA_LIB_DIR = {0}'.format(
+ spec['lua'].prefix.lib),
+ 'config.mk')
+ filter_file('^#LUA_LIB_NAME.*',
+ 'LUA_LIB_NAME = lua',
+ 'config.mk')
+ filter_file('^#LUA_BIN.*',
+ 'LUA_BIN = {0}'.format(
+ spec['lua'].prefix.bin),
+ 'config.mk')
+
make()
make('install')
diff --git a/var/spack/repos/builtin/packages/linkphase3/package.py b/var/spack/repos/builtin/packages/linkphase3/package.py
new file mode 100644
index 0000000000..4cba38115a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/linkphase3/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Linkphase3(Package):
+ """Haplotype reconstruction in pedigreed populations."""
+
+ homepage = "https://github.com/tdruet/LINKPHASE3"
+ url = "https://github.com/tdruet/LINKPHASE3"
+
+ version('2017-06-14', commit='559913593fc818bb1adb29796a548cf5bf323827',
+ git='https://github.com/tdruet/LINKPHASE3.git')
+
+ def install(self, spec, prefix):
+ fortran = Executable(self.compiler.fc)
+ fortran('LINKPHASE3.f90', '-o', 'LINKPHASE3')
+ mkdirp(prefix.bin)
+ install('LINKPHASE3', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/linux-headers/package.py b/var/spack/repos/builtin/packages/linux-headers/package.py
new file mode 100644
index 0000000000..224c502121
--- /dev/null
+++ b/var/spack/repos/builtin/packages/linux-headers/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 LinuxHeaders(Package):
+ """The Linux kernel headers."""
+
+ homepage = "https://www.kernel.org/"
+ url = "https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.10.tar.xz"
+ list_url = "https://www.kernel.org/pub/linux/kernel"
+ list_depth = 2
+
+ version('4.9.10', 'ce5ab2a86c9b880617e36e84aa2deb6c')
+
+ def setup_environment(self, spack_env, run_env):
+ # This variable is used in the Makefile. If it is defined on the
+ # system, it can break the build if there is no build recipe for
+ # that specific ARCH
+ spack_env.unset('ARCH')
+
+ def install(self, spec, prefix):
+ make('headers_install', 'INSTALL_HDR_PATH={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/listres/package.py b/var/spack/repos/builtin/packages/listres/package.py
index c6b3d149f6..783b4f48d6 100644
--- a/var/spack/repos/builtin/packages/listres/package.py
+++ b/var/spack/repos/builtin/packages/listres/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Listres(Package):
+class Listres(AutotoolsPackage):
"""The listres program generates a list of X resources for a widget
in an X client written using a toolkit based on libXt."""
@@ -41,9 +41,3 @@ class Listres(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/llvm-lld/package.py b/var/spack/repos/builtin/packages/llvm-lld/package.py
index 6a167cca33..ff27c21f94 100644
--- a/var/spack/repos/builtin/packages/llvm-lld/package.py
+++ b/var/spack/repos/builtin/packages/llvm-lld/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,25 +25,24 @@
from spack import *
-class LlvmLld(Package):
+class LlvmLld(CMakePackage):
"""lld - The LLVM Linker
lld is a new set of modular code for creating linker tools."""
homepage = "http://lld.llvm.org"
url = "http://llvm.org/releases/3.4/lld-3.4.src.tar.gz"
- depends_on('llvm')
-
version('3.4', '3b6a17e58c8416c869c14dd37682f78e')
- depends_on('cmake', type='build')
+ depends_on('llvm')
+ depends_on('cmake@2.8:', type='build')
- def install(self, spec, prefix):
- env['CXXFLAGS'] = self.compiler.cxx11_flag
+ def cmake_args(self):
+ if 'CXXFLAGS' in env and env['CXXFLAGS']:
+ env['CXXFLAGS'] += ' ' + self.compiler.cxx11_flag
+ else:
+ env['CXXFLAGS'] = self.compiler.cxx11_flag
- with working_dir('spack-build', create=True):
- cmake('..',
- '-DLLD_PATH_TO_LLVM_BUILD=%s' % spec['llvm'].prefix,
- '-DLLVM_MAIN_SRC_DIR=%s' % spec['llvm'].prefix,
- *std_cmake_args)
- make()
- make("install")
+ return [
+ '-DLLD_PATH_TO_LLVM_BUILD=%s' % self.spec['llvm'].prefix,
+ '-DLLVM_MAIN_SRC_DIR=%s' % self.spec['llvm'].prefix,
+ ]
diff --git a/var/spack/repos/builtin/packages/llvm-openmp-ompt/package.py b/var/spack/repos/builtin/packages/llvm-openmp-ompt/package.py
new file mode 100644
index 0000000000..2526cd4d03
--- /dev/null
+++ b/var/spack/repos/builtin/packages/llvm-openmp-ompt/package.py
@@ -0,0 +1,88 @@
+##############################################################################
+# 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/spack/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 LlvmOpenmpOmpt(CMakePackage):
+ """The OpenMP subproject provides an OpenMP runtime for use with the
+ OpenMP implementation in Clang. This branch includes experimental
+ changes for OMPT, the OpenMP Tools interface"""
+
+ homepage = "https://github.com/OpenMPToolsInterface/LLVM-openmp"
+
+ # towards_tr4 branch
+ version('towards_tr4', branch='towards_tr4',
+ git='https://github.com/OpenMPToolsInterface/LLVM-openmp.git')
+
+ version('3.9.2b2',
+ git='https://github.com/OpenMPToolsInterface/LLVM-openmp.git',
+ commit='5cdca5dd3c0c336d42a335ca7cff622e270c9d47')
+
+ # align-to-tr-rebased branch
+ version('3.9.2b',
+ git='https://github.com/OpenMPToolsInterface/LLVM-openmp.git',
+ commit='982a08bcf3df9fb5afc04ac3bada47f19cc4e3d3')
+
+ # variant for building llvm-openmp-ompt as a stand alone library
+ variant('standalone', default=False,
+ description="Build llvm openmpi ompt library as a \
+ stand alone entity.")
+
+ variant('build_type', default='Release',
+ description='CMake build type',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
+
+ depends_on('cmake@2.8:', type='build')
+ depends_on('llvm', when='~standalone')
+ depends_on('ninja@1.5:', type='build')
+
+ generator = 'Ninja'
+
+ def cmake_args(self):
+ cmake_args = [
+ '-DLIBOMP_OMPT_SUPPORT=on',
+ '-DLIBOMP_OMPT_BLAME=on',
+ '-DLIBOMP_OMPT_TRACE=on',
+ '-DCMAKE_C_COMPILER=%s' % spack_cc,
+ '-DCMAKE_CXX_COMPILER=%s' % spack_cxx
+ ]
+
+ # Build llvm-openmp-ompt as a stand alone library
+ # CMAKE rpath variable prevents standalone error
+ # where this package wants the llvm tools path
+ if '+standalone' in self.spec:
+ cmake_args.extend(
+ ['-DLIBOMP_STANDALONE_BUILD=true',
+ '-DCMAKE_BUILD_WITH_INSTALL_RPATH=true',
+ '-DLIBOMP_USE_DEBUGGER=false'])
+
+ # Build llvm-openmp-ompt using the toward_tr4 branch
+ # This requires the version to be 5.0 (50)
+ if '@towards_tr4' in self.spec:
+ cmake_args.extend(
+ ['-DLIBOMP_OMP_VERSION=50'])
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/llvm/llvm_gcc7.patch b/var/spack/repos/builtin/packages/llvm/llvm_gcc7.patch
new file mode 100644
index 0000000000..e3bb8a14ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/llvm/llvm_gcc7.patch
@@ -0,0 +1,10 @@
+--- a/tools/lldb/include/lldb/Utility/TaskPool.h 2016-09-06 16:57:50.000000000 -0400
++++ b/tools/lldb/include/lldb/Utility/TaskPool.h 2017-08-29 16:29:41.448584015 -0400
+@@ -28,6 +28,7 @@
+
+ #include <cassert>
+ #include <cstdint>
++#include <functional>
+ #include <future>
+ #include <list>
+ #include <queue>
diff --git a/var/spack/repos/builtin/packages/llvm/package.py b/var/spack/repos/builtin/packages/llvm/package.py
index 06572ea312..48f767aa17 100644
--- a/var/spack/repos/builtin/packages/llvm/package.py
+++ b/var/spack/repos/builtin/packages/llvm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,12 +22,10 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
-
from spack import *
-class Llvm(Package):
+class Llvm(CMakePackage):
"""The LLVM Project is a collection of modular and reusable compiler and
toolchain technologies. Despite its name, LLVM has little to do
with traditional virtual machines, though it does provide helpful
@@ -37,6 +35,7 @@ class Llvm(Package):
homepage = 'http://llvm.org/'
url = 'http://llvm.org/releases/3.7.1/llvm-3.7.1.src.tar.xz'
+ list_url = 'http://releases.llvm.org/download.html'
family = 'compiler' # Used by lmod
@@ -44,10 +43,10 @@ class Llvm(Package):
version('3.0', 'a8e5f5f1c1adebae7b4a654c376a6005',
url='http://llvm.org/releases/3.0/llvm-3.0.tar.gz')
- variant('debug', default=False,
- description="Build a debug version of LLVM, this increases "
- "binary size by an order of magnitude, make sure you have "
- "20-30gb of space available to build this")
+ # NOTE: The debug version of LLVM is an order of magnitude larger than
+ # the release version, and may take up 20-30 GB of space. If you want
+ # to save space, build with `build_type=Release`.
+
variant('clang', default=True,
description="Build the LLVM C/C++/Objective-C compiler frontend")
variant('lldb', default=True, description="Build the LLVM debugger")
@@ -71,12 +70,18 @@ class Llvm(Package):
variant('all_targets', default=True,
description="Build all supported targets, default targets "
"<current arch>,NVPTX,AMDGPU,CppBackend")
+ variant('build_type', default='Release',
+ description='CMake build type',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'))
+ variant('python', default=False, description="Install python bindings")
+ extends('python', when='+python')
# Build dependency
- depends_on('cmake@2.8.12.2:', type='build')
+ depends_on('cmake@3.4.3:', type='build')
# Universal dependency
depends_on('python@2.7:2.8') # Seems not to support python 3.X.Y
+ depends_on('py-lit', type=('build', 'run'))
# lldb dependencies
depends_on('ncurses', when='+lldb')
@@ -98,46 +103,55 @@ class Llvm(Package):
'url': base_url % {'pkg': 'compiler-rt'},
'destination': 'projects',
'placement': 'compiler-rt',
+ 'variant': '+compiler-rt',
},
'openmp': {
'url': base_url % {'pkg': 'openmp'},
'destination': 'projects',
'placement': 'openmp',
+ 'variant': '+clang',
},
'libcxx': {
'url': base_url % {'pkg': 'libcxx'},
'destination': 'projects',
'placement': 'libcxx',
+ 'variant': '+libcxx',
},
'libcxxabi': {
'url': base_url % {'pkg': 'libcxxabi'},
'destination': 'projects',
'placement': 'libcxxabi',
+ 'variant': '+libcxx',
},
'cfe': {
'url': base_url % {'pkg': 'cfe'},
'destination': 'tools',
'placement': 'clang',
+ 'variant': '+clang',
},
'clang-tools-extra': {
'url': base_url % {'pkg': 'clang-tools-extra'},
'destination': 'tools/clang/tools',
'placement': 'extra',
+ 'variant': '+clang',
},
'lldb': {
'url': base_url % {'pkg': 'lldb'},
'destination': 'tools',
'placement': 'lldb',
+ 'variant': '+lldb',
},
'polly': {
'url': base_url % {'pkg': 'polly'},
'destination': 'tools',
'placement': 'polly',
+ 'variant': '+polly',
},
- 'llvm-libunwind': {
+ 'libunwind': {
'url': base_url % {'pkg': 'libunwind'},
'destination': 'projects',
'placement': 'libunwind',
+ 'variant': '+internal_unwind',
},
}
releases = [
@@ -153,84 +167,144 @@ class Llvm(Package):
'cfe': 'http://llvm.org/svn/llvm-project/cfe/trunk',
'clang-tools-extra': 'http://llvm.org/svn/llvm-project/clang-tools-extra/trunk',
'lldb': 'http://llvm.org/svn/llvm-project/lldb/trunk',
- 'llvm-libunwind': 'http://llvm.org/svn/llvm-project/libunwind/trunk',
- }
- },
- {
- 'version': '3.9.0',
- 'md5': 'f2093e98060532449eb7d2fcfd0bc6c6',
- 'resources': {
- 'compiler-rt': 'b7ea34c9d744da16ffc0217b6990d095',
- 'openmp': '5390164f2374e1444e82393541ecf6c7',
- 'polly': '1cf328cbae25267749b68cfa6f113674',
- 'libcxx': '0a11efefd864ce6f321194e441f7e569',
- 'libcxxabi': 'd02642308e22e614af6b061b9b4fedfa',
- 'cfe': '29e1d86bee422ab5345f5e9fb808d2dc',
- 'clang-tools-extra': 'f4f663068c77fc742113211841e94d5e',
- 'lldb': '968d053c3c3d7297983589164c6999e9',
- 'llvm-libunwind': '3e5c87c723a456be599727a444b1c166',
- }
- },
- {
- 'version': '3.8.1',
- 'md5': '538467e6028bbc9259b1e6e015d25845',
- 'resources': {
- 'compiler-rt': 'f140db073d2453f854fbe01cc46f3110',
- 'openmp': '078b8d4c51ad437a4f8b5989f5ec4156',
- 'polly': '8a40e697a4ba1c8b640b85d074bd6e25',
- 'libcxx': '1bc60150302ff76a0d79d6f9db22332e',
- 'libcxxabi': '3c63b03ba2f30a01279ca63384a67773',
- 'cfe': '4ff2f8844a786edb0220f490f7896080',
- 'clang-tools-extra': '6e49f285d0b366cc3cab782d8c92d382',
- 'lldb': '9e4787b71be8e432fffd31e13ac87623',
- 'llvm-libunwind': 'd66e2387e1d37a8a0c8fe6a0063a3bab',
- }
- },
- {
- 'version': '3.8.0',
- 'md5': '07a7a74f3c6bd65de4702bf941b511a0',
- 'resources': {
- 'compiler-rt': 'd6fcbe14352ffb708e4d1ac2e48bb025',
- 'openmp': '8fd7cc35d48051613cf1e750e9f22e40',
- 'polly': '1b3b20f52d34a4024e21a4ea7112caa7',
- 'libcxx': 'd6e0bdbbee39f7907ad74fd56d03b88a',
- 'libcxxabi': 'bbe6b4d72c7c5978550d370af529bcf7',
- 'cfe': 'cc99e7019bb74e6459e80863606250c5',
- 'clang-tools-extra': 'c2344f50e0eea0b402f0092a80ddc036',
- 'lldb': 'a5da35ed9cc8c8817ee854e3dbfba00e',
- 'llvm-libunwind': '162ade468607f153cca12be90b5194fa',
- }
- },
- {
- 'version': '3.7.1',
- 'md5': 'bf8b3a2c79e61212c5409041dfdbd319',
- 'resources': {
- 'compiler-rt': '1c6975daf30bb3b0473b53c3a1a6ff01',
- 'openmp': 'b4ad08cda4e5c22e42b66062b140438e',
- 'polly': '3a2a7367002740881637f4d47bca4dc3',
- 'libcxx': 'f9c43fa552a10e14ff53b94d04bea140',
- 'libcxxabi': '52d925afac9f97e9dcac90745255c169',
- 'cfe': '0acd026b5529164197563d135a8fd83e',
- 'clang-tools-extra': '5d49ff745037f061a7c86aeb6a24c3d2',
- 'lldb': 'a106d8a0d21fc84d76953822fbaf3398',
- 'llvm-libunwind': '814bd52c9247c5d04629658fbcb3ab8c',
- }
- },
- {
- 'version': '3.7.0',
- 'md5': 'b98b9495e5655a672d6cb83e1a180f8e',
- 'resources': {
- 'compiler-rt': '383c10affd513026f08936b5525523f5',
- 'openmp': 'f482c86fdead50ba246a1a2b0bbf206f',
- 'polly': '32f93ffc9cc7e042df22089761558f8b',
- 'libcxx': '46aa5175cbe1ad42d6e9c995968e56dd',
- 'libcxxabi': '5aa769e2fca79fa5335cfae8f6258772',
- 'cfe': '8f9d27335e7331cf0a4711e952f21f01',
- 'clang-tools-extra': 'd5a87dacb65d981a427a536f6964642e',
- 'lldb': 'e5931740400d1dc3e7db4c7ba2ceff68',
- 'llvm-libunwind': '9a75392eb7eb8ed5c0840007e212baf5',
- }
- },
+ 'libunwind': 'http://llvm.org/svn/llvm-project/libunwind/trunk',
+ }
+ },
+ {
+ 'version': '5.0.0',
+ 'md5': '5ce9c5ad55243347ea0fdb4c16754be0',
+ 'resources': {
+ 'compiler-rt': 'da735894133589cbc6052c8ef06b1230',
+ 'openmp': '8be33c0f0a7ed3aab42be2f63988913d',
+ 'polly': 'dcbd08450e895a42f3986e2fe6524c92',
+ 'libcxx': 'a39241a3c9b4d2b7ce1246b9f527b400',
+ 'libcxxabi': '0158528a5a0ae1c74821bae2195ea782',
+ 'cfe': '699c448c6d6d0edb693c87beb1cc8c6e',
+ 'clang-tools-extra': '0cda05d1a61becb393eb63746963d7f5',
+ 'lldb': '8de19973d044ca2cfe325d4625a5cfef',
+ 'libunwind': '98fb2c677068c6f36727fb1d5397bca3',
+ }
+ },
+ {
+ 'version': '4.0.1',
+ 'md5': 'a818e70321b91e2bb2d47e60edd5408f',
+ 'resources': {
+ 'compiler-rt': '0227ac853ce422125f8bb08f6ad5c995',
+ 'openmp': '23e5f720ae119165ba32627467fdc885',
+ 'polly': '0d4a3fa2eb446a378bbf01b220851b1f',
+ 'libcxx': 'c54f7938e2f393a2cead0af37ed99dfb',
+ 'libcxxabi': '55ba0be7daf8bf25ab629a9cfd3022a4',
+ 'cfe': 'a6c7b3e953f8b93e252af5917df7db97',
+ 'clang-tools-extra': 'cfd46027a0ab7eed483dfcc803e86bd9',
+ 'lldb': '908bdd777d3b527a914ba360477b8ab3',
+ 'libunwind': 'b72ec95fb784e61f15d6196414b92f5e',
+ }
+ },
+ {
+ 'version': '4.0.0',
+ 'md5': 'ea9139a604be702454f6acf160b4f3a2',
+ 'resources': {
+ 'compiler-rt': '2ec11fb7df827b086341131c5d7f1814',
+ 'openmp': '3d06d2801dd4808f551a1a70068e01f5',
+ 'polly': 'f36e4e7cf872f8b3bbb9cdcddc5fd964',
+ 'libcxx': '4cf7df466e6f803ec4611ee410ff6781',
+ 'libcxxabi': '8b5d7b9bfcf7dec2dc901c8a6746f97c',
+ 'cfe': '756e17349fdc708c62974b883bf72d37',
+ 'clang-tools-extra': '99e711337ec3e9a8bb36e8dd62b2cd6e',
+ 'lldb': 'bd41ba7fcca55d2a554409bbccd34d2d',
+ 'libunwind': '0c3534eaa11c0cae33a1dcf5f36ce287',
+ }
+ },
+ {
+ 'version': '3.9.1',
+ 'md5': '3259018a7437e157f3642df80f1983ea',
+ 'resources': {
+ 'compiler-rt': 'aadc76e7e180fafb10fb729444e287a3',
+ 'openmp': 'f076916bf2f49229b4df9fa0bb002599',
+ 'polly': '2cc7fe2bd9539775ba140abfd375bec6',
+ 'libcxx': '75a3214224301fc543fa6a38bdf7efe0',
+ 'libcxxabi': '62fd584b38cc502172c2ffab041b5fcc',
+ 'cfe': '45713ec5c417ed9cad614cd283d786a1',
+ 'clang-tools-extra': '1a01d545a064fcbc46a2f05f6880d3d7',
+ 'lldb': '91399402f287d3f637db1207113deecb',
+ 'libunwind': 'f273dd0ed638ad0601b23176a36f187b',
+ }
+ },
+ {
+ 'version': '3.9.0',
+ 'md5': 'f2093e98060532449eb7d2fcfd0bc6c6',
+ 'resources': {
+ 'compiler-rt': 'b7ea34c9d744da16ffc0217b6990d095',
+ 'openmp': '5390164f2374e1444e82393541ecf6c7',
+ 'polly': '1cf328cbae25267749b68cfa6f113674',
+ 'libcxx': '0a11efefd864ce6f321194e441f7e569',
+ 'libcxxabi': 'd02642308e22e614af6b061b9b4fedfa',
+ 'cfe': '29e1d86bee422ab5345f5e9fb808d2dc',
+ 'clang-tools-extra': 'f4f663068c77fc742113211841e94d5e',
+ 'lldb': '968d053c3c3d7297983589164c6999e9',
+ 'libunwind': '3e5c87c723a456be599727a444b1c166',
+ }
+ },
+ {
+ 'version': '3.8.1',
+ 'md5': '538467e6028bbc9259b1e6e015d25845',
+ 'resources': {
+ 'compiler-rt': 'f140db073d2453f854fbe01cc46f3110',
+ 'openmp': '078b8d4c51ad437a4f8b5989f5ec4156',
+ 'polly': '8a40e697a4ba1c8b640b85d074bd6e25',
+ 'libcxx': '1bc60150302ff76a0d79d6f9db22332e',
+ 'libcxxabi': '3c63b03ba2f30a01279ca63384a67773',
+ 'cfe': '4ff2f8844a786edb0220f490f7896080',
+ 'clang-tools-extra': '6e49f285d0b366cc3cab782d8c92d382',
+ 'lldb': '9e4787b71be8e432fffd31e13ac87623',
+ 'libunwind': 'd66e2387e1d37a8a0c8fe6a0063a3bab',
+ }
+ },
+ {
+ 'version': '3.8.0',
+ 'md5': '07a7a74f3c6bd65de4702bf941b511a0',
+ 'resources': {
+ 'compiler-rt': 'd6fcbe14352ffb708e4d1ac2e48bb025',
+ 'openmp': '8fd7cc35d48051613cf1e750e9f22e40',
+ 'polly': '1b3b20f52d34a4024e21a4ea7112caa7',
+ 'libcxx': 'd6e0bdbbee39f7907ad74fd56d03b88a',
+ 'libcxxabi': 'bbe6b4d72c7c5978550d370af529bcf7',
+ 'cfe': 'cc99e7019bb74e6459e80863606250c5',
+ 'clang-tools-extra': 'c2344f50e0eea0b402f0092a80ddc036',
+ 'lldb': 'a5da35ed9cc8c8817ee854e3dbfba00e',
+ 'libunwind': '162ade468607f153cca12be90b5194fa',
+ }
+ },
+ {
+ 'version': '3.7.1',
+ 'md5': 'bf8b3a2c79e61212c5409041dfdbd319',
+ 'resources': {
+ 'compiler-rt': '1c6975daf30bb3b0473b53c3a1a6ff01',
+ 'openmp': 'b4ad08cda4e5c22e42b66062b140438e',
+ 'polly': '3a2a7367002740881637f4d47bca4dc3',
+ 'libcxx': 'f9c43fa552a10e14ff53b94d04bea140',
+ 'libcxxabi': '52d925afac9f97e9dcac90745255c169',
+ 'cfe': '0acd026b5529164197563d135a8fd83e',
+ 'clang-tools-extra': '5d49ff745037f061a7c86aeb6a24c3d2',
+ 'lldb': 'a106d8a0d21fc84d76953822fbaf3398',
+ 'libunwind': '814bd52c9247c5d04629658fbcb3ab8c',
+ }
+ },
+ {
+ 'version': '3.7.0',
+ 'md5': 'b98b9495e5655a672d6cb83e1a180f8e',
+ 'resources': {
+ 'compiler-rt': '383c10affd513026f08936b5525523f5',
+ 'openmp': 'f482c86fdead50ba246a1a2b0bbf206f',
+ 'polly': '32f93ffc9cc7e042df22089761558f8b',
+ 'libcxx': '46aa5175cbe1ad42d6e9c995968e56dd',
+ 'libcxxabi': '5aa769e2fca79fa5335cfae8f6258772',
+ 'cfe': '8f9d27335e7331cf0a4711e952f21f01',
+ 'clang-tools-extra': 'd5a87dacb65d981a427a536f6964642e',
+ 'lldb': 'e5931740400d1dc3e7db4c7ba2ceff68',
+ 'libunwind': '9a75392eb7eb8ed5c0840007e212baf5',
+ }
+ },
{
'version': '3.6.2',
'md5': '0c1ee3597d75280dee603bae9cbf5cc2',
@@ -267,7 +341,8 @@ class Llvm(Package):
resource(name=name,
svn=repo,
destination=resources[name]['destination'],
- when='@%(version)s' % release,
+ when='@%s%s' % (release['version'],
+ resources[name].get('variant', "")),
placement=resources[name].get('placement', None))
else:
version(release['version'], release['md5'], url=llvm_url % release)
@@ -277,36 +352,50 @@ class Llvm(Package):
url=resources[name]['url'] % release,
md5=md5,
destination=resources[name]['destination'],
- when='@%(version)s' % release,
+ when='@%s%s' % (release['version'],
+ resources[name].get('variant', "")),
placement=resources[name].get('placement', None))
- def install(self, spec, prefix):
- env['CXXFLAGS'] = self.compiler.cxx11_flag
- cmake_args = [arg for arg in std_cmake_args if 'BUILD_TYPE' not in arg]
+ conflicts('+clang_extra', when='~clang')
+ conflicts('+lldb', when='~clang')
+
+ # Github issue #4986
+ patch('llvm_gcc7.patch', when='@4.0.0:4.0.1+lldb %gcc@7.0:')
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.append_flags('CXXFLAGS', self.compiler.cxx11_flag)
- build_type = 'RelWithDebInfo' if '+debug' in spec else 'Release'
- cmake_args.extend([
- '..',
- '-DCMAKE_BUILD_TYPE=' + build_type,
+ def cmake_args(self):
+ spec = self.spec
+
+ cmake_args = [
'-DLLVM_REQUIRES_RTTI:BOOL=ON',
'-DCLANG_DEFAULT_OPENMP_RUNTIME:STRING=libomp',
- '-DPYTHON_EXECUTABLE:PATH=%s/bin/python' % spec['python'].prefix])
+ '-DPYTHON_EXECUTABLE:PATH={0}'.format(spec['python'].command.path),
+ ]
if '+gold' in spec:
cmake_args.append('-DLLVM_BINUTILS_INCDIR=' +
- os.path.join(spec['binutils'].prefix, 'include'))
+ spec['binutils'].prefix.include)
if '+polly' in spec:
cmake_args.append('-DLINK_POLLY_INTO_TOOLS:Bool=ON')
else:
- cmake_args.append('-DLLVM_EXTERNAL_POLLY_BUILD:Bool=OFF')
+ cmake_args.extend(['-DLLVM_EXTERNAL_POLLY_BUILD:Bool=OFF',
+ '-DLLVM_TOOL_POLLY_BUILD:Bool=OFF',
+ '-DLLVM_POLLY_BUILD:Bool=OFF',
+ '-DLLVM_POLLY_LINK_INTO_TOOLS:Bool=OFF'])
if '+clang' not in spec:
cmake_args.append('-DLLVM_EXTERNAL_CLANG_BUILD:Bool=OFF')
if '+lldb' not in spec:
- cmake_args.append('-DLLVM_EXTERNAL_LLDB_BUILD:Bool=OFF')
+ cmake_args.extend(['-DLLVM_EXTERNAL_LLDB_BUILD:Bool=OFF',
+ '-DLLVM_TOOL_LLDB_BUILD:Bool=OFF'])
if '+internal_unwind' not in spec:
cmake_args.append('-DLLVM_EXTERNAL_LIBUNWIND_BUILD:Bool=OFF')
- if '+libcxx' not in spec:
+ if '+libcxx' in spec:
+ if spec.satisfies('@3.9.0:'):
+ cmake_args.append('-DCLANG_DEFAULT_CXX_STDLIB=libc++')
+ else:
cmake_args.append('-DLLVM_EXTERNAL_LIBCXX_BUILD:Bool=OFF')
cmake_args.append('-DLLVM_EXTERNAL_LIBCXXABI_BUILD:Bool=OFF')
if '+compiler-rt' not in spec:
@@ -335,17 +424,24 @@ class Llvm(Package):
cmake_args.append(
'-DLLVM_TARGETS_TO_BUILD:Bool=' + ';'.join(targets))
- if '+clang' not in spec:
- if '+clang_extra' in spec:
- raise SpackException(
- 'The clang_extra variant requires the `+clang` variant.')
- if '+lldb' in spec:
- raise SpackException(
- 'The lldb variant requires the `+clang` variant')
-
- with working_dir('spack-build', create=True):
- cmake(*cmake_args)
- make()
- make("install")
- cp = which('cp')
- cp('-a', 'bin/', prefix)
+ if spec.satisfies('@4.0.0:') and spec.satisfies('platform=linux'):
+ cmake_args.append('-DCMAKE_BUILD_WITH_INSTALL_RPATH=1')
+ return cmake_args
+
+ @run_before('build')
+ def pre_install(self):
+ with working_dir(self.build_directory):
+ # When building shared libraries these need to be installed first
+ make('install-LLVMTableGen')
+ make('install-LLVMDemangle')
+ make('install-LLVMSupport')
+
+ @run_after('install')
+ def post_install(self):
+ if '+clang' in self.spec and '+python' in self.spec:
+ install_tree(
+ 'tools/clang/bindings/python/clang',
+ join_path(site_packages_dir, 'clang'))
+
+ with working_dir(self.build_directory):
+ install_tree('bin', join_path(self.prefix, 'libexec', 'llvm'))
diff --git a/var/spack/repos/builtin/packages/lmdb/package.py b/var/spack/repos/builtin/packages/lmdb/package.py
index 8c6c23d8dc..fb147403d9 100644
--- a/var/spack/repos/builtin/packages/lmdb/package.py
+++ b/var/spack/repos/builtin/packages/lmdb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,42 +22,40 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
from spack import *
-class Lmdb(Package):
- """Read-only mirror of official repo on openldap.org. Issues and
- pull requests here are ignored. Use OpenLDAP ITS for issues.
- http://www.openldap.org/software/repo.html"""
+class Lmdb(MakefilePackage):
+ """Symas LMDB is an extraordinarily fast, memory-efficient database we
+ developed for the Symas OpenLDAP Project. With memory-mapped files, it
+ has the read performance of a pure in-memory database while retaining
+ the persistence of standard disk-based databases."""
- homepage = "http://www.openldap.org/software/repo.html"
- url = "https://github.com/LMDB/lmdb/archive/LMDB_0.9.16.tar.gz"
+ homepage = "https://lmdb.tech/"
+ url = "https://github.com/LMDB/lmdb/archive/LMDB_0.9.21.tar.gz"
+ version('0.9.21', '41a4f7b63212a00e53fabd8159008201')
version('0.9.16', '0de89730b8f3f5711c2b3a4ba517b648')
- def install(self, spec, prefix):
- os.chdir('libraries/liblmdb')
-
- make()
-
- mkdirp(prefix.bin)
- mkdirp(prefix + '/man/man1')
- mkdirp(prefix.lib)
- mkdirp(prefix.include)
-
- bins = ['mdb_stat', 'mdb_copy', 'mdb_dump', 'mdb_load']
- for f in bins:
- install(f, prefix.bin)
-
- mans = ['mdb_stat.1', 'mdb_copy.1', 'mdb_dump.1', 'mdb_load.1']
- for f in mans:
- install(f, prefix + '/man/man1')
-
- libs = ['liblmdb.a', 'liblmdb.so']
- for f in libs:
- install(f, prefix.lib)
-
- includes = ['lmdb.h']
- for f in includes:
- install(f, prefix.include)
+ build_directory = 'libraries/liblmdb'
+
+ @property
+ def install_targets(self):
+ return ['prefix={0}'.format(self.prefix), 'install']
+
+ @run_after('install')
+ def install_pkgconfig(self):
+ mkdirp(self.prefix.lib.pkgconfig)
+
+ with open(join_path(self.prefix.lib.pkgconfig, 'lmdb.pc'), 'w') as f:
+ f.write('prefix={0}\n'.format(self.prefix))
+ f.write('exec_prefix=${prefix}\n')
+ f.write('libdir={0}\n'.format(self.prefix.lib))
+ f.write('includedir={0}\n'.format(self.prefix.include))
+ f.write('\n')
+ f.write('Name: LMDB\n')
+ f.write('Description: Symas LMDB is an extraordinarily fast, '
+ 'memory-efficient database.\n')
+ f.write('Version: {0}\n'.format(self.spec.version))
+ f.write('Cflags: -I${includedir}\n')
+ f.write('Libs: -L${libdir} -llmdb\n')
diff --git a/var/spack/repos/builtin/packages/lmod/0001-fix-problem-with-MODULESHOME-and-issue-271.patch b/var/spack/repos/builtin/packages/lmod/0001-fix-problem-with-MODULESHOME-and-issue-271.patch
new file mode 100644
index 0000000000..ea2f191d1f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lmod/0001-fix-problem-with-MODULESHOME-and-issue-271.patch
@@ -0,0 +1,25 @@
+From 6dea3d8c6d1ec9dc279e0f1fbd9965e7cc774678 Mon Sep 17 00:00:00 2001
+From: Robert McLay <mclay@zaniahgroup.com>
+Date: Thu, 11 May 2017 12:42:08 -0500
+Subject: [PATCH] fix problem with MODULESHOME and issue #271
+
+---
+ init/profile.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/init/profile.in b/init/profile.in
+index 0a7f7be..fdcbfcc 100644
+--- a/init/profile.in
++++ b/init/profile.in
+@@ -15,7 +15,7 @@ if [ -z "${USER_IS_ROOT:-}" ]; then
+ export MODULEPATH_ROOT="@modulepath_root@"
+ export MODULEPATH=$(@PKG@/libexec/addto --append MODULEPATH $MODULEPATH_ROOT/$LMOD_sys $MODULEPATH_ROOT/Core)
+ export MODULEPATH=$(@PKG@/libexec/addto --append MODULEPATH @PKG@/modulefiles/Core)
+- export BASH_ENV=$MODULESHOME/init/bash
++ export BASH_ENV=@PKG@/init/bash
+
+ #
+ # If MANPATH is empty, Lmod is adding a trailing ":" so that
+--
+2.9.3
+
diff --git a/var/spack/repos/builtin/packages/lmod/package.py b/var/spack/repos/builtin/packages/lmod/package.py
index 9ac270bab5..73cfcd2b88 100644
--- a/var/spack/repos/builtin/packages/lmod/package.py
+++ b/var/spack/repos/builtin/packages/lmod/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
from glob import glob
-class Lmod(Package):
+class Lmod(AutotoolsPackage):
"""Lmod is a Lua based module system that easily handles the MODULEPATH
Hierarchical problem. Environment Modules provide a convenient way to
dynamically change the users' environment through modulefiles. This
@@ -36,18 +36,30 @@ class Lmod(Package):
"""
homepage = 'https://www.tacc.utexas.edu/research-development/tacc-projects/lmod'
- url = 'https://github.com/TACC/Lmod/archive/6.4.1.tar.gz'
+ url = 'https://github.com/TACC/Lmod/archive/7.4.11.tar.gz'
- version('6.4.5', '14f6c58dbc0a5a75574d795eac2c1e3c')
- version('6.4.1', '7978ba777c8aa41a4d8c05fec5f780f4')
- version('6.3.7', '0fa4d5a24c41cae03776f781aa2dedc1')
- version('6.0.1', '91abf52fe5033bd419ffe2842ebe7af9')
+ version('7.7', '8ac594401716c6d1b40cac22bc1030ca')
+ version('7.6.14', '60726c991038b6337fbb27b6a333a2d4')
+ version('7.4.11', '70c55ba0ba3877b6d8df536ee7ea6d49')
+ version('7.4.10', 'a13e36d6196747fded7987ef3dcfb605')
+ version('7.4.9', 'd8ffab81ddca2491fe13e2ac0a4fd320')
+ version('7.4.8', '3b22932437cc29ce546ec887885355e7')
+ version('7.4.5', 'fc34029c60dd9782c3d011c2b93fd266')
+ version('7.4.1', '59b2558ee50877f2cf49ed37d7b09fea')
+ version('7.3', '70180ec2ea1fae53aa83350523f6b2b3')
+ version('6.4.5', '14f6c58dbc0a5a75574d795eac2c1e3c')
+ version('6.4.1', '7978ba777c8aa41a4d8c05fec5f780f4')
+ version('6.3.7', '0fa4d5a24c41cae03776f781aa2dedc1')
+ version('6.0.1', '91abf52fe5033bd419ffe2842ebe7af9')
depends_on('lua@5.2:')
depends_on('lua-luaposix', type=('build', 'run'))
depends_on('lua-luafilesystem', type=('build', 'run'))
depends_on('tcl', type=('build', 'run'))
+ patch('fix_tclsh_paths.patch', when='@:6.4.3')
+ patch('0001-fix-problem-with-MODULESHOME-and-issue-271.patch', when='@7.3.28:7.4.10')
+
parallel = False
def setup_environment(self, spack_env, run_env):
@@ -56,8 +68,6 @@ class Lmod(Package):
spack_env.append_path('LUA_PATH', stage_lua_path.format(
version=self.version), separator=';')
- patch('fix_tclsh_paths.patch', when='@:6.4.3')
-
def patch(self):
"""The tcl scripts should use the tclsh that was discovered
by the configure script. Touch up their #! lines so that the
@@ -66,7 +76,3 @@ class Lmod(Package):
if self.spec.version <= Version('6.4.3'):
for tclscript in glob('src/*.tcl'):
filter_file(r'^#!.*tclsh', '#!@path_to_tclsh@', tclscript)
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make('install')
diff --git a/var/spack/repos/builtin/packages/lndir/package.py b/var/spack/repos/builtin/packages/lndir/package.py
index a7ce892502..071ce420d8 100644
--- a/var/spack/repos/builtin/packages/lndir/package.py
+++ b/var/spack/repos/builtin/packages/lndir/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Lndir(Package):
+class Lndir(AutotoolsPackage):
"""lndir - create a shadow directory of symbolic links to another
directory tree."""
@@ -36,9 +36,3 @@ class Lndir(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-missing_includes.patch b/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-missing_includes.patch
new file mode 100644
index 0000000000..6834648d09
--- /dev/null
+++ b/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-missing_includes.patch
@@ -0,0 +1,38 @@
+diff -Naur apache-log4cxx-0.10.0.orig/src/examples/cpp/console.cpp apache-log4cxx-0.10.0/src/examples/cpp/console.cpp
+--- apache-log4cxx-0.10.0.orig/src/examples/cpp/console.cpp 2008-04-01 00:34:52.000000000 +0200
++++ apache-log4cxx-0.10.0/src/examples/cpp/console.cpp 2008-05-06 05:40:52.000000000 +0200
+@@ -15,7 +15,10 @@
+ * limitations under the License.
+ */
+
+-#include <stdlib.h>
++#include <cstdio>
++#include <cstdlib>
++#include <cstring>
++#include <stdint.h>
+ #include <log4cxx/logger.h>
+ #include <log4cxx/consoleappender.h>
+ #include <log4cxx/simplelayout.h>
+diff -Naur apache-log4cxx-0.10.0.orig/src/main/cpp/inputstreamreader.cpp apache-log4cxx-0.10.0/src/main/cpp/inputstreamreader.cpp
+--- apache-log4cxx-0.10.0.orig/src/main/cpp/inputstreamreader.cpp 2008-04-01 00:34:09.000000000 +0200
++++ apache-log4cxx-0.10.0/src/main/cpp/inputstreamreader.cpp 2008-05-06 05:32:31.000000000 +0200
+@@ -21,6 +21,8 @@
+ #include <log4cxx/helpers/pool.h>
+ #include <log4cxx/helpers/bytebuffer.h>
+
++#include <cstring>
++
+ using namespace log4cxx;
+ using namespace log4cxx::helpers;
+
+diff -Naur apache-log4cxx-0.10.0.orig/src/main/cpp/socketoutputstream.cpp apache-log4cxx-0.10.0/src/main/cpp/socketoutputstream.cpp
+--- apache-log4cxx-0.10.0.orig/src/main/cpp/socketoutputstream.cpp 2008-04-01 00:34:09.000000000 +0200
++++ apache-log4cxx-0.10.0/src/main/cpp/socketoutputstream.cpp 2008-05-06 05:35:55.000000000 +0200
+@@ -20,6 +20,8 @@
+ #include <log4cxx/helpers/socket.h>
+ #include <log4cxx/helpers/bytebuffer.h>
+
++#include <cstring>
++
+ using namespace log4cxx;
+ using namespace log4cxx::helpers; \ No newline at end of file
diff --git a/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-narrowing-fixes-from-upstream.patch b/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-narrowing-fixes-from-upstream.patch
new file mode 100644
index 0000000000..e583e7661d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/log4cxx/log4cxx-0.10.0-narrowing-fixes-from-upstream.patch
@@ -0,0 +1,117 @@
+diff --git a/src/main/cpp/locationinfo.cpp b/src/main/cpp/locationinfo.cpp
+index e76ea29..bd22a1d 100644
+--- a/src/main/cpp/locationinfo.cpp
++++ b/src/main/cpp/locationinfo.cpp
+@@ -149,18 +149,21 @@ void LocationInfo::write(ObjectOutputStream& os, Pool& p) const {
+ os.writeNull(p);
+ } else {
+ char prolog[] = {
+- 0x72, 0x00, 0x21, 0x6F, 0x72, 0x67, 0x2E,
+- 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2E, 0x6C,
+- 0x6F, 0x67, 0x34, 0x6A, 0x2E, 0x73, 0x70, 0x69,
+- 0x2E, 0x4C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F,
+- 0x6E, 0x49, 0x6E, 0x66, 0x6F, 0xED, 0x99, 0xBB,
+- 0xE1, 0x4A, 0x91, 0xA5, 0x7C, 0x02, 0x00, 0x01,
+- 0x4C, 0x00, 0x08, 0x66, 0x75, 0x6C, 0x6C, 0x49,
+- 0x6E, 0x66, 0x6F,
+- 0x74, 0x00, 0x12, 0x4C, 0x6A,
+- 0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67,
+- 0x2F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B,
+- 0x78, 0x70 };
++ 0x72,
++ 0x00,
++ 0x21, 0x6F, 0x72, 0x67, 0x2E, 0x61, 0x70, 0x61, 0x63, 0x68, 0x65, 0x2E,
++ 0x6C, 0x6F, 0x67, 0x34, 0x6A, 0x2E, 0x73, 0x70, 0x69, 0x2E, 0x4C, 0x6F,
++ 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x49, 0x6E, 0x66, 0x6F, static_cast<char>(0xED),
++ static_cast<char>(0x99), static_cast<char>(0xBB), static_cast<char>(0xE1),
++ 0x4A, static_cast<char>(0x91), static_cast<char>(0xA5), 0x7C, 0x02,
++ 0x00,
++ 0x01, 0x4C,
++ 0x00,
++ 0x08, 0x66, 0x75, 0x6C, 0x6C, 0x49, 0x6E, 0x66, 0x6F, 0x74,
++ 0x00,
++ 0x12, 0x4C, 0x6A, 0x61, 0x76, 0x61, 0x2F, 0x6C, 0x61, 0x6E, 0x67, 0x2F,
++ 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3B, 0x78, 0x70
++ };
+ os.writeProlog("org.apache.log4j.spi.LocationInfo", 2, prolog, sizeof(prolog), p);
+ char* line = p.itoa(lineNumber);
+ //
+diff --git a/src/main/cpp/loggingevent.cpp b/src/main/cpp/loggingevent.cpp
+index 1c0d4be..edbf40b 100644
+--- a/src/main/cpp/loggingevent.cpp
++++ b/src/main/cpp/loggingevent.cpp
+@@ -242,7 +242,7 @@ void LoggingEvent::writeProlog(ObjectOutputStream& os, Pool& p) {
+ 0x68, 0x65, 0x2E, 0x6C, 0x6F, 0x67, 0x34, 0x6A,
+ 0x2E, 0x73, 0x70, 0x69, 0x2E, 0x4C, 0x6F, 0x67,
+ 0x67, 0x69, 0x6E, 0x67, 0x45, 0x76, 0x65, 0x6E,
+- 0x74, 0xF3, 0xF2, 0xB9, 0x23, 0x74, 0x0B, 0xB5,
++ 0x74, static_cast<char>(0xF3), static_cast<char>(0xF2), static_cast<char>(0xB9), 0x23, 0x74, 0x0B, static_cast<char>(0xB5),
+ 0x3F, 0x03, 0x00, 0x0A, 0x5A, 0x00, 0x15, 0x6D,
+ 0x64, 0x63, 0x43, 0x6F, 0x70, 0x79, 0x4C, 0x6F,
+ 0x6F, 0x6B, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75,
+diff --git a/src/main/cpp/objectoutputstream.cpp b/src/main/cpp/objectoutputstream.cpp
+index 7cd696b..5442420 100644
+--- a/src/main/cpp/objectoutputstream.cpp
++++ b/src/main/cpp/objectoutputstream.cpp
+@@ -36,7 +36,7 @@ ObjectOutputStream::ObjectOutputStream(OutputStreamPtr outputStream, Pool& p)
+ objectHandle(0x7E0000),
+ classDescriptions(new ClassDescriptionMap())
+ {
+- char start[] = { 0xAC, 0xED, 0x00, 0x05 };
++ char start[] = { static_cast<char>(0xAC), static_cast<char>(0xED), 0x00, 0x05 };
+ ByteBuffer buf(start, sizeof(start));
+ os->write(buf, p);
+ }
+@@ -81,15 +81,15 @@ void ObjectOutputStream::writeObject(const MDC::Map& val, Pool& p) {
+ //
+ // TC_OBJECT and the classDesc for java.util.Hashtable
+ //
+- char prolog[] = {
+- 0x72, 0x00, 0x13, 0x6A, 0x61, 0x76, 0x61,
+- 0x2E, 0x75, 0x74, 0x69, 0x6C, 0x2E, 0x48, 0x61,
+- 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x13,
+- 0xBB, 0x0F, 0x25, 0x21, 0x4A, 0xE4, 0xB8, 0x03,
+- 0x00, 0x02, 0x46, 0x00, 0x0A, 0x6C, 0x6F, 0x61,
+- 0x64, 0x46, 0x61, 0x63, 0x74, 0x6F, 0x72, 0x49,
+- 0x00, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68,
+- 0x6F, 0x6C, 0x64, 0x78, 0x70 };
++ char prolog[] = {
++ 0x72, 0x00, 0x13, 0x6A, 0x61, 0x76, 0x61,
++ 0x2E, 0x75, 0x74, 0x69, 0x6C, 0x2E, 0x48, 0x61,
++ 0x73, 0x68, 0x74, 0x61, 0x62, 0x6C, 0x65, 0x13,
++ static_cast<char>(0xBB), 0x0F, 0x25, 0x21, 0x4A, static_cast<char>(0xE4), static_cast<char>(0xB8), 0x03,
++ 0x00, 0x02, 0x46, 0x00, 0x0A, 0x6C, 0x6F, 0x61,
++ 0x64, 0x46, 0x61, 0x63, 0x74, 0x6F, 0x72, 0x49,
++ 0x00, 0x09, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68,
++ 0x6F, 0x6C, 0x64, 0x78, 0x70 };
+ writeProlog("java.util.Hashtable", 1, prolog, sizeof(prolog), p);
+ //
+ // loadFactor = 0.75, threshold = 5, blockdata start, buckets.size = 7
+diff --git a/src/test/cpp/xml/domtestcase.cpp b/src/test/cpp/xml/domtestcase.cpp
+index a500628..29d67dd 100644
+--- a/src/test/cpp/xml/domtestcase.cpp
++++ b/src/test/cpp/xml/domtestcase.cpp
+@@ -190,9 +190,9 @@ public:
+ DOMConfigurator::configure(LOG4CXX_TEST_STR("input/xml/DOMTestCase3.xml"));
+ LOG4CXX_INFO(logger, "File name is expected to end with a superscript 3");
+ #if LOG4CXX_LOGCHAR_IS_UTF8
+- const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, 0xC2, 0xB3, 0 };
++ const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, static_cast<logchar>(0xC2), static_cast<logchar>(0xB3), 0 };
+ #else
+- const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, 0xB3, 0 };
++ const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, static_cast<logchar>(0xB3), 0 };
+ #endif
+ File file;
+ file.setPath(fname);
+@@ -209,9 +209,9 @@ public:
+ DOMConfigurator::configure(LOG4CXX_TEST_STR("input/xml/DOMTestCase4.xml"));
+ LOG4CXX_INFO(logger, "File name is expected to end with an ideographic 4");
+ #if LOG4CXX_LOGCHAR_IS_UTF8
+- const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, 0xE3, 0x86, 0x95, 0 };
++ const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, static_cast<logchar>(0xE3), static_cast<logchar>(0x86), static_cast<logchar>(0x95), 0 };
+ #else
+- const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, 0x3195, 0 };
++ const logchar fname[] = { 0x6F, 0x75, 0x74, 0x70, 0x75, 0x74, 0x2F, 0x64, 0x6F, 0x6D, static_cast<logchar>(0x3195), 0 };
+ #endif
+ File file;
+ file.setPath(fname); \ No newline at end of file
diff --git a/var/spack/repos/builtin/packages/log4cxx/package.py b/var/spack/repos/builtin/packages/log4cxx/package.py
new file mode 100644
index 0000000000..b2bf7a4e35
--- /dev/null
+++ b/var/spack/repos/builtin/packages/log4cxx/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Log4cxx(AutotoolsPackage):
+ """A C++ port of Log4j"""
+
+ homepage = "https://logging.apache.org/log4cxx/latest_stable/"
+ url = "http://mirror.netcologne.de/apache.org/logging/log4cxx/0.10.0/apache-log4cxx-0.10.0.tar.gz"
+
+ version('0.10.0', 'b30ffb8da3665178e68940ff7a61084c')
+
+ depends_on('libxml2')
+ depends_on('apr-util')
+
+ build_directory = 'spack-build'
+
+ # patches from https://aur.archlinux.org/packages/log4cxx/
+ patch('log4cxx-0.10.0-missing_includes.patch')
+ patch('log4cxx-0.10.0-narrowing-fixes-from-upstream.patch')
+
+ def configure_args(self):
+ args = ['--disable-static']
+ return args
diff --git a/var/spack/repos/builtin/packages/lrslib/package.py b/var/spack/repos/builtin/packages/lrslib/package.py
index 3825867bb6..586750b9bf 100644
--- a/var/spack/repos/builtin/packages/lrslib/package.py
+++ b/var/spack/repos/builtin/packages/lrslib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lrzip/package.py b/var/spack/repos/builtin/packages/lrzip/package.py
index 42542acfdb..531cba2b87 100644
--- a/var/spack/repos/builtin/packages/lrzip/package.py
+++ b/var/spack/repos/builtin/packages/lrzip/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lua-bitlib/package.py b/var/spack/repos/builtin/packages/lua-bitlib/package.py
new file mode 100644
index 0000000000..014eb77e43
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lua-bitlib/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class LuaBitlib(Package):
+ """Lua-jit-like bitwise operations for lua"""
+
+ homepage = "http://luaforge.net/projects/bitlib"
+ url = "https://luarocks.org/bitlib-23-2.src.rock"
+
+ version('23', '9fee36a6e512c54bf6364dfe97d1d871',
+ url="https://luarocks.org/bitlib-23-2.src.rock",
+ expand=False)
+
+ extends('lua')
+
+ def install(self, spec, prefix):
+ luarocks('unpack', "bitlib-23-2.src.rock")
+ os.chdir(os.path.join('bitlib-23-2', 'bitlib-23'))
+ sed = which('sed')
+ sed('-ie', 's/luaL_reg/luaL_Reg/', 'lbitlib.c')
+ luarocks('--tree=' + prefix, 'make')
diff --git a/var/spack/repos/builtin/packages/lua-jit/package.py b/var/spack/repos/builtin/packages/lua-jit/package.py
index 5f7de8ff06..2005936110 100644
--- a/var/spack/repos/builtin/packages/lua-jit/package.py
+++ b/var/spack/repos/builtin/packages/lua-jit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lua-lpeg/package.py b/var/spack/repos/builtin/packages/lua-lpeg/package.py
new file mode 100644
index 0000000000..aa9a491e4b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lua-lpeg/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 LuaLpeg(Package):
+ """pattern-matching for lua"""
+
+ homepage = "http://www.inf.puc-rio.br/~roberto/lpeg/"
+ url = "https://luarocks.org/manifests/luarocks/lpeg-0.12-1.src.rock"
+
+ version('0.12.1', 'b5778bfee67761fcbe7a2d23cb889ea8',
+ url='https://luarocks.org/manifests/luarocks/lpeg-0.12-1.src.rock',
+ expand=False)
+
+ extends("lua")
+
+ def install(self, spec, prefix):
+ luarocks('--tree=' + prefix, 'install', 'lpeg-0.12-1.src.rock')
diff --git a/var/spack/repos/builtin/packages/lua-luafilesystem/package.py b/var/spack/repos/builtin/packages/lua-luafilesystem/package.py
index 7a5c90f36f..7194654838 100644
--- a/var/spack/repos/builtin/packages/lua-luafilesystem/package.py
+++ b/var/spack/repos/builtin/packages/lua-luafilesystem/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,7 +40,12 @@ class LuaLuafilesystem(Package):
version('1_6_3', 'bed11874cfded8b4beed7dd054127b24')
- depends_on('git@2.9.3:', type='build')
+ # The version constraint here comes from this post:
+ #
+ # https://www.perforce.com/blog/git-beyond-basics-using-shallow-clones
+ #
+ # where it is claimed that full shallow clone support was added @1.9
+ depends_on('git@1.9.0:', type='build')
extends('lua')
def install(self, spec, prefix):
diff --git a/var/spack/repos/builtin/packages/lua-luaposix/package.py b/var/spack/repos/builtin/packages/lua-luaposix/package.py
index 3803a938c8..5cc81d6e65 100644
--- a/var/spack/repos/builtin/packages/lua-luaposix/package.py
+++ b/var/spack/repos/builtin/packages/lua-luaposix/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lua-mpack/package.py b/var/spack/repos/builtin/packages/lua-mpack/package.py
new file mode 100644
index 0000000000..ffdb953428
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lua-mpack/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 LuaMpack(Package):
+ """lua bindings to libmpack"""
+
+ homepage = "https://luarocks.org/modules/tarruda/mpack"
+ url = "https://luarocks.org/manifests/tarruda/mpack-1.0.6-0.src.rock"
+
+ depends_on('msgpack-c')
+
+ version('1.0.0-0', '9a7bd842753194124830bc7426e78c1b',
+ url='https://luarocks.org/manifests/tarruda/mpack-1.0.6-0.src.rock',
+ expand=False)
+
+ extends('lua')
+
+ def install(self, spec, prefix):
+ luarocks('--tree=' + prefix, 'install', 'mpack-1.0.6-0.src.rock')
diff --git a/var/spack/repos/builtin/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py
index 357e2cc03a..46d1e5c094 100644
--- a/var/spack/repos/builtin/packages/lua/package.py
+++ b/var/spack/repos/builtin/packages/lua/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,10 +27,12 @@ import os
class Lua(Package):
- """ The Lua programming language interpreter and library """
+ """The Lua programming language interpreter and library."""
+
homepage = "http://www.lua.org"
- url = "http://www.lua.org/ftp/lua-5.1.5.tar.gz"
+ url = "http://www.lua.org/ftp/lua-5.3.4.tar.gz"
+ version('5.3.4', '53a9c68bcc0eda58bdc2095ad5cdfc63')
version('5.3.2', '33278c2ab5ee3c1a875be8d55c1ca2a1')
version('5.3.1', '797adacada8d85761c079390ff1d9961')
version('5.3.0', 'a1b0a7e92d0c85bbff7a8d27bf29f8af')
@@ -62,20 +64,28 @@ class Lua(Package):
else:
target = 'linux'
make('INSTALL_TOP=%s' % prefix,
+ 'MYCFLAGS=%s' % (
+ self.compiler.pic_flag),
'MYLDFLAGS=-L%s -L%s' % (
spec['readline'].prefix.lib,
spec['ncurses'].prefix.lib),
- 'MYLIBS=-lncurses',
+ 'MYLIBS=-lncursesw',
'CC=%s -std=gnu99' % spack_cc,
target)
make('INSTALL_TOP=%s' % prefix,
+ 'MYCFLAGS=%s' % (
+ self.compiler.pic_flag),
'MYLDFLAGS=-L%s -L%s' % (
spec['readline'].prefix.lib,
spec['ncurses'].prefix.lib),
- 'MYLIBS=-lncurses',
+ 'MYLIBS=-lncursesw',
'CC=%s -std=gnu99' % spack_cc,
'install')
+ static_to_shared_library(join_path(prefix.lib, 'liblua.a'),
+ arguments=['-lm'], version=self.version,
+ compat_version=self.version.up_to(2))
+
with working_dir(os.path.join('luarocks', 'luarocks')):
configure('--prefix=' + prefix, '--with-lua=' + prefix)
make('build')
@@ -86,9 +96,9 @@ class Lua(Package):
paths.append(os.path.join(path, '?', 'init.lua'))
cpaths.append(os.path.join(path, '?.so'))
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
lua_paths = []
- for d in extension_spec.traverse(
+ for d in dependent_spec.traverse(
deptypes=('build', 'run'), deptype_query='run'):
if d.package.extends(self.spec):
lua_paths.append(os.path.join(d.prefix, self.lua_lib_dir))
@@ -111,9 +121,9 @@ class Lua(Package):
# Add LUA to PATH for dependent packages
spack_env.prepend_path('PATH', self.prefix.bin)
- # For run time environment set only the path for extension_spec and
+ # For run time environment set only the path for dependent_spec and
# prepend it to LUAPATH
- if extension_spec.package.extends(self.spec):
+ if dependent_spec.package.extends(self.spec):
run_env.prepend_path('LUA_PATH', ';'.join(lua_patterns),
separator=';')
run_env.prepend_path('LUA_CPATH', ';'.join(lua_cpatterns),
@@ -143,13 +153,13 @@ class Lua(Package):
@property
def lua_lib_dir(self):
- return os.path.join('lib', 'lua', self.version.up_to(2))
+ return os.path.join('lib', 'lua', str(self.version.up_to(2)))
@property
def lua_share_dir(self):
- return os.path.join('share', 'lua', self.version.up_to(2))
+ return os.path.join('share', 'lua', str(self.version.up_to(2)))
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""
Called before lua modules's install() methods.
diff --git a/var/spack/repos/builtin/packages/luit/package.py b/var/spack/repos/builtin/packages/luit/package.py
index 54fd740bdc..47eb6be44c 100644
--- a/var/spack/repos/builtin/packages/luit/package.py
+++ b/var/spack/repos/builtin/packages/luit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lulesh/package.py b/var/spack/repos/builtin/packages/lulesh/package.py
index e880d4fa14..489a175108 100644
--- a/var/spack/repos/builtin/packages/lulesh/package.py
+++ b/var/spack/repos/builtin/packages/lulesh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,33 +23,62 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class Lulesh(Package):
- """Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics (LULESH)
+class Lulesh(MakefilePackage):
+ """LULESH is a highly simplified application, hard-coded to only
+ style typical in scientific C or C++ based applications. Hard
+ code to only solve a Sedov blast problem with analytic answer
"""
-
+ tags = ['proxy-app']
homepage = "https://codesign.llnl.gov/lulesh.php"
url = "https://codesign.llnl.gov/lulesh/lulesh2.0.3.tgz"
- version("2.0.3", "336644a8750f71c7c6b9d2960976e7aa")
+ version('2.0.3', '336644a8750f71c7c6b9d2960976e7aa')
- patch("remove_defaults.patch")
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('openmp', default=True, description='Build with OpenMP support')
+ variant('visual', default=False,
+ description='Build with Visualization support (Silo, hdf5)')
- variant('mpip', default=False)
+ depends_on('mpi', when='+mpi')
+ depends_on('silo', when='+visual')
+ depends_on('hdf5', when='+visual')
- depends_on("mpi", type="build")
- depends_on("mpip", when="+mpip")
+ @property
+ def build_targets(self):
+ targets = []
+ cxxflag = ' -g -O3 -I. '
+ ldflags = ' -g -O3 '
+ if '~mpi' in self.spec:
+ targets.append('CXX = {0} {1}'.format(spack_cxx, ' -DUSE_MPI=0 '))
+ else:
+ targets.append(
+ 'CXX = {0} {1}'.format(self.spec['mpi'].mpicxx,
+ ' -DUSE_MPI=1'))
+ targets.append(
+ 'MPI_INC = {0}'.format(self.spec['mpi'].prefix.include))
+ targets.append('MPI_LIB = {0}'.format(self.spec['mpi'].prefix.lib))
+ if '+visual' in self.spec:
+ targets.append(
+ 'SILO_INCDIR = {0}'.format(self.spec['silo'].prefix.include))
+ targets.append(
+ 'SILO_LIBDIR = {0}'.format(self.spec['silo'].prefix.lib))
+ cxxflag = ' -g -DVIZ_MESH -I${SILO_INCDIR} '
+ ldflags = ' -g -L${SILO_LIBDIR} -Wl,-rpath -Wl, '
+ ldflags += '${SILO_LIBDIR} -lsiloh5 -lhdf5 '
- def install(self, spec, prefix):
- if '+mpip' in spec:
- os.environ["LDFLAGS"] = " -lmpiP -ldwarf -lelf"
+ if '+openmp' in self.spec:
+ cxxflag += self.compiler.openmp_flag
+ ldflags += self.compiler.openmp_flag
- if os.uname()[4] == "x86_64":
- os.environ["LDFLAGS"] += " -lunwind"
+ targets.append('CXXFLAGS = {0}'.format(cxxflag))
+ targets.append('LDFLAGS = {0}'.format(ldflags))
+ return targets
- os.environ["CXX"] = spec['mpi'].mpicxx + " -DUSE_MPI=1"
- os.environ["PREFIX"] = prefix
- make()
- make("install")
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('lulesh{0}'.format(self.version.up_to(2)), prefix.bin)
+ mkdirp(prefix.doc)
+ install('README', prefix.doc)
+ install('TODO', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/lulesh/remove_defaults.patch b/var/spack/repos/builtin/packages/lulesh/remove_defaults.patch
deleted file mode 100644
index 36cce25ba1..0000000000
--- a/var/spack/repos/builtin/packages/lulesh/remove_defaults.patch
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -1,17 +1,9 @@
- #default build suggestion of MPI + OPENMP with gcc on Livermore machines you might have to change the compiler name
-
--SHELL = /bin/sh
- .SUFFIXES: .cc .o
-
- LULESH_EXEC = lulesh2.0
-
--MPI_INC = /opt/local/include/openmpi
--MPI_LIB = /opt/local/lib
--
--SERCXX = g++ -DUSE_MPI=0
--MPICXX = mpig++ -DUSE_MPI=1
--CXX = $(MPICXX)
--
- SOURCES2.0 = \
- lulesh.cc \
- lulesh-comm.cc \
-@@ -20,28 +12,6 @@
- lulesh-init.cc
- OBJECTS2.0 = $(SOURCES2.0:.cc=.o)
-
--#Default build suggestions with OpenMP for g++
--CXXFLAGS = -g -O3 -fopenmp -I. -Wall
--LDFLAGS = -g -O3 -fopenmp
--
--#Below are reasonable default flags for a serial build
--#CXXFLAGS = -g -O3 -I. -Wall
--#LDFLAGS = -g -O3
--
--#common places you might find silo on the Livermore machines.
--#SILO_INCDIR = /opt/local/include
--#SILO_LIBDIR = /opt/local/lib
--#SILO_INCDIR = ./silo/4.9/1.8.10.1/include
--#SILO_LIBDIR = ./silo/4.9/1.8.10.1/lib
--
--#If you do not have silo and visit you can get them at:
--#silo: https://wci.llnl.gov/codes/silo/downloads.html
--#visit: https://wci.llnl.gov/codes/visit/download.html
--
--#below is and example of how to make with silo, hdf5 to get vizulization by default all this is turned off. All paths are Livermore specific.
--#CXXFLAGS = -g -DVIZ_MESH -I${SILO_INCDIR} -Wall -Wno-pragmas
--#LDFLAGS = -g -L${SILO_LIBDIR} -Wl,-rpath -Wl,${SILO_LIBDIR} -lsiloh5 -lhdf5
--
- .cc.o: lulesh.h
- @echo "Building $<"
- $(CXX) -c $(CXXFLAGS) -o $@ $<
-@@ -56,6 +26,7 @@
- /bin/rm -f *.o *~ $(OBJECTS) $(LULESH_EXEC)
- /bin/rm -rf *.dSYM
-
--tar: clean
-- cd .. ; tar cvf lulesh-2.0.tar LULESH-2.0 ; mv lulesh-2.0.tar LULESH-2.0
--
-+install: lulesh2.0
-+ @echo "Installing"
-+ mkdir -p $(PREFIX)/bin
-+ install --mode=755 lulesh2.0 $(PREFIX)/bin/
diff --git a/var/spack/repos/builtin/packages/lwgrp/package.py b/var/spack/repos/builtin/packages/lwgrp/package.py
index 9322d69b9b..aa742230ac 100644
--- a/var/spack/repos/builtin/packages/lwgrp/package.py
+++ b/var/spack/repos/builtin/packages/lwgrp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Lwgrp(Package):
+class Lwgrp(AutotoolsPackage):
"""Thie light-weight group library provides process group
representations using O(log N) space and time."""
@@ -35,8 +35,3 @@ class Lwgrp(Package):
version('1.0.2', 'ab7ba3bdd8534a651da5076f47f27d8a')
depends_on('mpi')
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/lwm2/package.py b/var/spack/repos/builtin/packages/lwm2/package.py
index 063204b84a..4858391f2a 100644
--- a/var/spack/repos/builtin/packages/lwm2/package.py
+++ b/var/spack/repos/builtin/packages/lwm2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Lwm2(Package):
+class Lwm2(AutotoolsPackage):
"""LWM2: Light Weight Measurement Module. This is a PMPI module
that can collect a number of time-sliced MPI and POSIX I/O
measurements from a program.
@@ -36,8 +36,3 @@ class Lwm2(Package):
depends_on("papi")
depends_on("mpi")
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/lz4/package.py b/var/spack/repos/builtin/packages/lz4/package.py
index de7e566e70..2c8d0977ae 100644
--- a/var/spack/repos/builtin/packages/lz4/package.py
+++ b/var/spack/repos/builtin/packages/lz4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,13 +31,22 @@ class Lz4(Package):
an extremely fast decoder, with speed in multiple GB/s per core,
typically reaching RAM speed limits on multi-core systems."""
- homepage = "http://cyan4973.github.io/lz4/"
- url = "https://github.com/Cyan4973/lz4/archive/r131.tar.gz"
+ homepage = "http://lz4.github.io/lz4/"
+ url = "https://github.com/lz4/lz4/archive/v1.7.5.tar.gz"
- version('131', '42b09fab42331da9d3fb33bd5c560de9')
+ version('1.7.5', 'c9610c5ce97eb431dddddf0073d919b9')
+ version('1.3.1', '42b09fab42331da9d3fb33bd5c560de9')
# depends_on('valgrind', type='test')
+ def url_for_version(self, version):
+ url = "https://github.com/lz4/lz4/archive"
+
+ if version > Version('1.3.1'):
+ return "{0}/v{1}.tar.gz".format(url, version)
+ else:
+ return "{0}/r{1}.tar.gz".format(url, version.joined)
+
def install(self, spec, prefix):
make()
if self.run_tests:
diff --git a/var/spack/repos/builtin/packages/lzma/package.py b/var/spack/repos/builtin/packages/lzma/package.py
index 3eb97a2d9f..3e256d54b0 100644
--- a/var/spack/repos/builtin/packages/lzma/package.py
+++ b/var/spack/repos/builtin/packages/lzma/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/lzo/package.py b/var/spack/repos/builtin/packages/lzo/package.py
index e9c98842f4..ded3a32375 100644
--- a/var/spack/repos/builtin/packages/lzo/package.py
+++ b/var/spack/repos/builtin/packages/lzo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/m4/gnulib-pgi.patch b/var/spack/repos/builtin/packages/m4/gnulib-pgi.patch
new file mode 100644
index 0000000000..059d897de3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/m4/gnulib-pgi.patch
@@ -0,0 +1,195 @@
+Port to PGI 16.10 x86-64
+
+This patch fixes one real bug in gl_anylinked_list2.h, along with some minor
+glitches that are not bugs. It does not silence PGI's thousands of bogus
+warnings when compiling test-intprops.c. Fortunately, the warnings do not
+cause a failure.
+
+* lib/c-ctype.h (_C_CTYPE_LOWER_A_THRU_F_N, _C_CTYPE_LOWER_N): Rename parameter
+ to avoid PGI warning about '#define f(n) 'n''. My goodness, PGI goes back a
+ long ways - this predates C89!
+* lib/gl_anylinked_list2.h (ASYNCSAFE): Fix bug caught by PGI. For example,
+ ASYNCSAFE (const void *) should expand to 'const void *volatile', not to
+ 'volatile const void *'.
+* lib/spawn.in.h (POSIX_SPAWN_USEVFORK): Don't define if already defined.
+* lib/verify.h (verify) [!__GNUC__]: Use shorter albeit meaningless string to
+ bypass silly compiler limits.
+* tests/infinity.h (Infinityf, Infinityd, Infinityl) [__PGI]:
+* tests/nan.h (NaNf, NaNd, NaNl): Use static functions to avoid misguided
+ compiler diagnostics. Is there some reason we don’t use static functions
+ on all platforms?
+
+diff --git a/lib/c-ctype.h b/lib/c-ctype.h
+index bdca1f1..ec6a3a0 100644
+--- a/lib/c-ctype.h
++++ b/lib/c-ctype.h
+@@ -115,16 +115,16 @@ extern "C" {
+
+ /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */
+
+-#define _C_CTYPE_LOWER_A_THRU_F_N(n) \
+- case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \
+- case 'e' + (n): case 'f' + (n)
+-#define _C_CTYPE_LOWER_N(n) \
+- _C_CTYPE_LOWER_A_THRU_F_N(n): \
+- case 'g' + (n): case 'h' + (n): case 'i' + (n): case 'j' + (n): \
+- case 'k' + (n): case 'l' + (n): case 'm' + (n): case 'n' + (n): \
+- case 'o' + (n): case 'p' + (n): case 'q' + (n): case 'r' + (n): \
+- case 's' + (n): case 't' + (n): case 'u' + (n): case 'v' + (n): \
+- case 'w' + (n): case 'x' + (n): case 'y' + (n): case 'z' + (n)
++#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
++ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
++ case 'e' + (N): case 'f' + (N)
++#define _C_CTYPE_LOWER_N(N) \
++ _C_CTYPE_LOWER_A_THRU_F_N(N): \
++ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
++ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
++ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
++ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
++ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)
+
+ /* Cases for hex letters, digits, lower, punct, and upper. */
+
+diff --git a/lib/gl_anylinked_list2.h b/lib/gl_anylinked_list2.h
+index c249f31..4545da9 100644
+--- a/lib/gl_anylinked_list2.h
++++ b/lib/gl_anylinked_list2.h
+@@ -29,7 +29,7 @@
+ and we use 'volatile' assignments to prevent the compiler from reordering
+ such assignments. */
+ #ifdef SIGNAL_SAFE_LIST
+-# define ASYNCSAFE(type) *(volatile type *)&
++# define ASYNCSAFE(type) *(type volatile *)&
+ #else
+ # define ASYNCSAFE(type)
+ #endif
+diff --git a/lib/spawn.in.h b/lib/spawn.in.h
+index e8116f9..b4b9197 100644
+--- a/lib/spawn.in.h
++++ b/lib/spawn.in.h
+@@ -142,7 +142,8 @@ typedef struct
+ # endif
+ #endif
+ /* A GNU extension. Use the next free bit position. */
+-#define POSIX_SPAWN_USEVFORK \
++#ifndef POSIX_SPAWN_USEVFORK
++# define POSIX_SPAWN_USEVFORK \
+ ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \
+ | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \
+ | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \
+@@ -152,6 +153,7 @@ typedef struct
+ | POSIX_SPAWN_SETSCHEDULER \
+ | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \
+ + 1)
++#endif
+ #if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
+ typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
+ [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
+diff --git a/lib/verify.h b/lib/verify.h
+index dcaf7ca..dcba9c8 100644
+--- a/lib/verify.h
++++ b/lib/verify.h
+@@ -248,7 +248,12 @@ template <int w>
+ /* Verify requirement R at compile-time, as a declaration without a
+ trailing ';'. */
+
+-#define verify(R) _GL_VERIFY (R, "verify (" #R ")")
++#ifdef __GNUC__
++# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
++#else
++/* PGI barfs if R is long. Play it safe. */
++# define verify(R) _GL_VERIFY (R, "verify (...)")
++#endif
+
+ #ifndef __has_builtin
+ # define __has_builtin(x) 0
+diff --git a/tests/infinity.h b/tests/infinity.h
+index 431f700..ef5d3bd 100644
+--- a/tests/infinity.h
++++ b/tests/infinity.h
+@@ -18,8 +18,9 @@
+ /* Infinityf () returns a 'float' +Infinity. */
+
+ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.
+- The IBM XL C compiler on z/OS complains. */
+-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++ The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
++#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
+ static float
+ Infinityf ()
+ {
+@@ -34,8 +35,9 @@ Infinityf ()
+ /* Infinityd () returns a 'double' +Infinity. */
+
+ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.
+- The IBM XL C compiler on z/OS complains. */
+-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++ The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
++#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
+ static double
+ Infinityd ()
+ {
+@@ -50,8 +52,9 @@ Infinityd ()
+ /* Infinityl () returns a 'long double' +Infinity. */
+
+ /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.
+- The IBM XL C compiler on z/OS complains. */
+-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++ The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
++#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
+ static long double
+ Infinityl ()
+ {
+diff --git a/tests/nan.h b/tests/nan.h
+index 48236b5..b5a0f29 100644
+--- a/tests/nan.h
++++ b/tests/nan.h
+@@ -25,8 +25,11 @@
+ /* NaNf () returns a 'float' not-a-number. */
+
+ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
+- on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. */
+-#if defined __DECC || defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++ on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
++#if (defined __DECC || defined _MSC_VER \
++ || (defined __MVS__ && defined __IBMC__) \
++ || defined __PGI)
+ static float
+ NaNf ()
+ {
+@@ -41,8 +44,11 @@ NaNf ()
+ /* NaNd () returns a 'double' not-a-number. */
+
+ /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
+- on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. */
+-#if defined __DECC || defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++ on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
++#if (defined __DECC || defined _MSC_VER \
++ || (defined __MVS__ && defined __IBMC__) \
++ || defined __PGI)
+ static double
+ NaNd ()
+ {
+@@ -59,14 +65,15 @@ NaNd ()
+ /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+ runtime type conversion.
+ The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L.
+- The IBM XL C compiler on z/OS complains. */
++ The IBM XL C compiler on z/OS complains.
++ PGI 16.10 complains. */
+ #ifdef __sgi
+ static long double NaNl ()
+ {
+ double zero = 0.0;
+ return zero / zero;
+ }
+-#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
++#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
+ static long double
+ NaNl ()
+ {
diff --git a/var/spack/repos/builtin/packages/m4/package.py b/var/spack/repos/builtin/packages/m4/package.py
index ebfbc28612..f3cb8122f5 100644
--- a/var/spack/repos/builtin/packages/m4/package.py
+++ b/var/spack/repos/builtin/packages/m4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,10 +29,12 @@ class M4(AutotoolsPackage):
"""GNU M4 is an implementation of the traditional Unix macro processor."""
homepage = "https://www.gnu.org/software/m4/m4.html"
- url = "ftp://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.gz"
+ url = "https://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.gz"
+ version('1.4.18', 'a077779db287adf4e12a035029002d28')
version('1.4.17', 'a5e9954b1dae036762f7b13673a2cf76')
+ patch('gnulib-pgi.patch', when='@1.4.18')
patch('pgi.patch', when='@1.4.17')
variant('sigsegv', default=True,
@@ -40,10 +42,18 @@ class M4(AutotoolsPackage):
depends_on('libsigsegv', when='+sigsegv')
+ build_directory = 'spack-build'
+
def configure_args(self):
spec = self.spec
args = ['--enable-c++']
+ if spec.satisfies('%clang') and not spec.satisfies('platform=darwin'):
+ args.append('CFLAGS=-rtlib=compiler-rt')
+
+ if spec.satisfies('%intel'):
+ args.append('CFLAGS=-no-gcc')
+
if '+sigsegv' in spec:
args.append('--with-libsigsegv-prefix={0}'.format(
spec['libsigsegv'].prefix))
diff --git a/var/spack/repos/builtin/packages/macsio/package.py b/var/spack/repos/builtin/packages/macsio/package.py
new file mode 100644
index 0000000000..f17cec4350
--- /dev/null
+++ b/var/spack/repos/builtin/packages/macsio/package.py
@@ -0,0 +1,116 @@
+##############################################################################
+# 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/spack/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 Macsio(CMakePackage):
+ """A Multi-purpose, Application-Centric, Scalable I/O Proxy Application
+ """
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ homepage = "http://llnl.github.io/MACSio"
+ url = "https://github.com/LLNL/MACSio/archive/1.0.tar.gz"
+
+ version('1.0', '90e8e00ea84af2a47bee387ad331dbde')
+ version('develop', git='https://github.com/LLNL/MACSio.git',
+ branch='master')
+
+ variant('mpi', default=True, description="Build MPI plugin")
+ variant('silo', default=True, description="Build with SILO plugin")
+ # TODO: multi-level variants for hdf5
+ variant('hdf5', default=False, description="Build HDF5 plugin")
+ variant('zfp', default=False, description="Build HDF5 with ZFP compression")
+ variant('szip', default=False, description="Build HDF5 with SZIP compression")
+ variant('zlib', default=False, description="Build HDF5 with ZLIB compression")
+ variant('pdb', default=False, description="Build PDB plugin")
+ variant('exodus', default=False, description="Build EXODUS plugin")
+ variant('scr', default=False, description="Build with SCR support")
+ variant('typhonio', default=False, description="Build TYPHONIO plugin")
+
+ depends_on('json-cwx')
+ depends_on('mpi', when="+mpi")
+ depends_on('silo', when="+silo")
+ depends_on('hdf5', when="+hdf5")
+ # depends_on('hdf5+szip', when="+szip")
+ depends_on('exodusii', when="+exodus")
+ # pdb is packaged with silo
+ depends_on('silo', when="+pdb")
+ depends_on('typhonio', when="+typhonio")
+ depends_on('scr', when="+scr")
+
+ def cmake_args(self):
+ spec = self.spec
+ cmake_args = []
+
+ if "~mpi" in spec:
+ cmake_args.append("-DENABLE_MPI=OFF")
+
+ if "~silo" in spec:
+ cmake_args.append("-DENABLE_SILO_PLUGIN=OFF")
+
+ if "+silo" in spec:
+ cmake_args.append("-DWITH_SILO_PREFIX={0}"
+ .format(spec['silo'].prefix))
+
+ if "+pdb" in spec:
+ # pdb is a part of silo
+ cmake_args.append("-DENABLE_PDB_PLUGIN=ON")
+ cmake_args.append("-DWITH_SILO_PREFIX={0}"
+ .format(spec['silo'].prefix))
+ if "+hdf5" in spec:
+ cmake_args.append("-DENABLE_HDF5_PLUGIN=ON")
+ cmake_args.append("-DWITH_HDF5_PREFIX={0}"
+ .format(spec['hdf5'].prefix))
+ # TODO: Multi-level variants
+ # ZFP not in hdf5 spack package??
+ # if "+zfp" in spec:
+ # cmake_args.append("-DENABLE_HDF5_ZFP")
+ # cmake_args.append("-DWITH_ZFP_PREFIX={0}"
+ # .format(spec['silo'].prefix))
+ # SZIP is an hdf5 spack variant
+ # if "+szip" in spec:
+ # cmake_args.append("-DENABLE_HDF5_SZIP")
+ # cmake_args.append("-DWITH_SZIP_PREFIX={0}"
+ # .format(spec['SZIP'].prefix))
+ # ZLIB is on by default, @1.1.2
+ # if "+zlib" in spec:
+ # cmake_args.append("-DENABLE_HDF5_ZLIB")
+ # cmake_args.append("-DWITH_ZLIB_PREFIX={0}"
+ # .format(spec['silo'].prefix))
+
+ if "+typhonio" in spec:
+ cmake_args.append("-DENABLE_TYPHONIO_PLUGIN=ON")
+ cmake_args.append("-DWITH_TYPHONIO_PREFIX={0}"
+ .format(spec['typhonio'].prefix))
+
+ if "+exodus" in spec:
+ cmake_args.append("-DENABLE_EXODUS_PLUGIN=ON")
+ cmake_args.append("-DWITH_EXODUS_PREFIX={0}"
+ .format(spec['exodusii'].prefix))
+ # exodus requires netcdf
+ cmake_args.append("-DWITH_NETCDF_PREFIX={0}"
+ .format(spec['netcdf'].prefix))
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/mad-numdiff/package.py b/var/spack/repos/builtin/packages/mad-numdiff/package.py
new file mode 100644
index 0000000000..8d687e2258
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mad-numdiff/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 MadNumdiff(CMakePackage):
+ """compare unformatted text files with numerical content"""
+
+ homepage = "https://github.com/quinoacomputing/ndiff"
+ url = "https://github.com/quinoacomputing/ndiff/tarball/20150724"
+
+ version('develop', git='https://github.com/quinoacomputing/ndiff', branch='master')
+ version('20150724', '7723c0f2499aea8fd960377c5bed28d8')
diff --git a/var/spack/repos/builtin/packages/mafft/package.py b/var/spack/repos/builtin/packages/mafft/package.py
index 131b8c58f9..2b46cf9332 100644
--- a/var/spack/repos/builtin/packages/mafft/package.py
+++ b/var/spack/repos/builtin/packages/mafft/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/magics/no_hardcoded_python.patch b/var/spack/repos/builtin/packages/magics/no_hardcoded_python.patch
deleted file mode 100644
index e2e2a5d1ba..0000000000
--- a/var/spack/repos/builtin/packages/magics/no_hardcoded_python.patch
+++ /dev/null
@@ -1,5 +0,0 @@
---- a/tools/xml2mv.py 2016-06-27 17:49:27.000000000 +0200
-+++ a/tools/xml2mv.py 2016-09-13 16:25:17.246960456 +0200
-@@ -1 +1 @@
--#!/usr/bin/python
-+#!/usr/bin/env python
diff --git a/var/spack/repos/builtin/packages/magics/package.py b/var/spack/repos/builtin/packages/magics/package.py
index cd793ae051..540abd6c1d 100644
--- a/var/spack/repos/builtin/packages/magics/package.py
+++ b/var/spack/repos/builtin/packages/magics/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import glob
-class Magics(Package):
+class Magics(CMakePackage):
"""Magics is the latest generation of the ECMWF's Meteorological plotting
software MAGICS. Although completely redesigned in C++, it is intended
to be as backwards-compatible as possible with the Fortran interface."""
@@ -36,13 +37,10 @@ class Magics(Package):
# Maintainers of Magics do not keep tarballs of minor releases. Once the
# next minor released is published the previous one becomes unavailable.
# That is why the preferred version is the latest stable one.
+ version('2.32.0', 'e17956fffce9ea826cf994f8d275e0f5')
version('2.29.4', '91c561f413316fb665b3bb563f3878d1')
version('2.29.0', 'db20a4d3c51a2da5657c31ae3de59709', preferred=True)
- # The patch changes the hardcoded path to python in shebang to enable the
- # usage of the first python installation that appears in $PATH
- patch('no_hardcoded_python.patch')
-
# The patch reorders includes and adds namespaces where necessary to
# resolve ambiguity of invocations of isnan and isinf functions. The
# patch is not needed since the version 2.29.1
@@ -53,14 +51,21 @@ class Magics(Package):
variant('cairo', default=True, description='Enable cairo support[png/jpeg]')
variant('metview', default=False, description='Enable metview support')
variant('qt', default=False, description='Enable metview support with qt')
+ variant('eccodes', default=False, description='Use eccodes instead of grib-api')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo', 'Production'))
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8.11:', type='build')
depends_on('pkg-config', type='build')
# Currently python is only necessary to run
# building preprocessing scripts.
depends_on('python', type='build')
- depends_on('grib-api')
+ depends_on('perl', type='build')
+ depends_on('perl-xml-parser', type='build')
+ depends_on('eccodes', when='+eccodes')
+ depends_on('grib-api', when='~eccodes')
depends_on('proj')
depends_on('boost')
depends_on('expat')
@@ -69,47 +74,60 @@ class Magics(Package):
depends_on('libemos', when='+bufr')
depends_on('qt', when='+metview+qt')
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
- options.append('-DENABLE_ODB=OFF')
- options.append('-DENABLE_PYTHON=OFF')
- options.append('-DBOOST_ROOT=%s' % spec['boost'].prefix)
- options.append('-DPROJ4_PATH=%s' % spec['proj'].prefix)
- options.append('-DGRIB_API_PATH=%s' % spec['grib-api'].prefix)
- options.append('-DENABLE_TESTS=OFF')
+ conflicts('+eccodes', when='@:2.29.0')
+
+ # Replace system python and perl by spack versions:
+ def patch(self):
+ for plfile in glob.glob('*/*.pl'):
+ filter_file('#!/usr/bin/perl', '#!/usr/bin/env perl', plfile)
+ for pyfile in glob.glob('*/*.py'):
+ filter_file('#!/usr/bin/python', '#!/usr/bin/env python', pyfile)
+
+ def cmake_args(self):
+ spec = self.spec
+ args = [
+ '-DENABLE_ODB=OFF',
+ '-DENABLE_PYTHON=OFF',
+ '-DBOOST_ROOT=%s' % spec['boost'].prefix,
+ '-DPROJ4_PATH=%s' % spec['proj'].prefix,
+ '-DENABLE_TESTS=OFF',
+ ]
if '+bufr' in spec:
- options.append('-DENABLE_BUFR=ON')
- options.append('-DLIBEMOS_PATH=%s' % spec['libemos'].prefix)
+ args.append('-DENABLE_BUFR=ON')
+ args.append('-DLIBEMOS_PATH=%s' % spec['libemos'].prefix)
else:
- options.append('-DENABLE_BUFR=OFF')
+ args.append('-DENABLE_BUFR=OFF')
if '+netcdf' in spec:
- options.append('-DENABLE_NETCDF=ON')
- options.append('-DNETCDF_PATH=%s' % spec['netcdf-cxx'].prefix)
+ args.append('-DENABLE_NETCDF=ON')
+ args.append('-DNETCDF_PATH=%s' % spec['netcdf-cxx'].prefix)
else:
- options.append('-DENABLE_NETCDF=OFF')
+ args.append('-DENABLE_NETCDF=OFF')
if '+cairo' in spec:
- options.append('-DENABLE_CAIRO=ON')
+ args.append('-DENABLE_CAIRO=ON')
else:
- options.append('-DENABLE_CAIRO=OFF')
+ args.append('-DENABLE_CAIRO=OFF')
if '+metview' in spec:
if '+qt' in spec:
- options.append('-DENABLE_METVIEW=ON')
- if spec['qt'].version.up_to(1) == '5':
- options.append('-DENABLE_QT5=ON')
+ args.append('-DENABLE_METVIEW=ON')
+ if spec['qt'].version[0] == 5:
+ args.append('-DENABLE_QT5=ON')
else:
- options.append('-DENABLE_METVIEW_NO_QT=ON')
+ args.append('-DENABLE_METVIEW_NO_QT=ON')
+ else:
+ args.append('-DENABLE_METVIEW=OFF')
+
+ if '+eccodes' in spec:
+ args.append('-DENABLE_ECCODES=ON')
+ args.append('-DECCODES_PATH=%s' % spec['eccodes'].prefix)
else:
- options.append('-DENABLE_METVIEW=OFF')
+ args.append('-DENABLE_ECCODES=OFF')
+ args.append('-DGRIB_API_PATH=%s' % spec['grib-api'].prefix)
if (self.compiler.f77 is None) or (self.compiler.fc is None):
- options.append('-DENABLE_FORTRAN=OFF')
+ args.append('-DENABLE_FORTRAN=OFF')
- with working_dir('spack-build', create=True):
- cmake('..', *options)
- make()
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/magma/ibm-xl.patch b/var/spack/repos/builtin/packages/magma/ibm-xl.patch
new file mode 100644
index 0000000000..0deab65646
--- /dev/null
+++ b/var/spack/repos/builtin/packages/magma/ibm-xl.patch
@@ -0,0 +1,248 @@
+diff -Naur magma-2.2.0/src/dlaex3_m.cpp magma-2.2.0-patched/src/dlaex3_m.cpp
+--- magma-2.2.0/src/dlaex3_m.cpp 2016-11-20 20:20:06.000000000 -0500
++++ magma-2.2.0/src/dlaex3_m.cpp 2017-01-06 15:54:29.423668874 -0500
+@@ -197,7 +197,7 @@
+ magmaDouble_ptr dwork[],
+ magma_queue_t queues[MagmaMaxGPUs][2],
+ magma_range_t range, double vl, double vu, magma_int_t il, magma_int_t iu,
+- magma_int_t *info )
++ magma_int_t *infom )
+ {
+ #define Q(i_,j_) (Q + (i_) + (j_)*ldq)
+
+@@ -209,8 +209,8 @@
+ magma_setdevice(0);
+ magma_dlaex3( k, n, n1, d, Q, ldq, rho,
+ dlamda, Q2, indx, ctot, w, s, indxq,
+- *dwork, range, vl, vu, il, iu, info );
+- return *info;
++ *dwork, range, vl, vu, il, iu, infom );
++ return *infom;
+ }
+ double d_one = 1.;
+ double d_zero = 0.;
+@@ -229,37 +229,37 @@
+ valeig = (range == MagmaRangeV);
+ indeig = (range == MagmaRangeI);
+
+- *info = 0;
++ *infom = 0;
+
+ if (k < 0)
+- *info=-1;
++ *infom=-1;
+ else if (n < k)
+- *info=-2;
++ *infom=-2;
+ else if (ldq < max(1,n))
+- *info=-6;
++ *infom=-6;
+ else if (! (alleig || valeig || indeig))
+- *info = -15;
++ *infom = -15;
+ else {
+ if (valeig) {
+ if (n > 0 && vu <= vl)
+- *info = -17;
++ *infom = -17;
+ }
+ else if (indeig) {
+ if (il < 1 || il > max(1,n))
+- *info = -18;
++ *infom = -18;
+ else if (iu < min(n,il) || iu > n)
+- *info = -19;
++ *infom = -19;
+ }
+ }
+
+- if (*info != 0) {
+- magma_xerbla( __func__, -(*info) );
+- return *info;
++ if (*infom != 0) {
++ magma_xerbla( __func__, -(*infom) );
++ return *infom;
+ }
+
+ // Quick return if possible
+ if (k == 0)
+- return *info;
++ return *infom;
+
+ magma_device_t orig_dev;
+ magma_getdevice( &orig_dev );
+@@ -360,15 +360,15 @@
+ lapackf77_dlaed4( &k, &tmpp, dlamda, w, Q(0,j), &rho, &d[j], &iinfo );
+ // If the zero finder fails, the computation is terminated.
+ if (iinfo != 0) {
+- #pragma omp critical (info)
+- *info = iinfo;
++ #pragma omp critical (infom)
++ *infom = iinfo;
+ break;
+ }
+ }
+
+ #pragma omp barrier
+
+- if (*info == 0) {
++ if (*infom == 0) {
+ #pragma omp single
+ {
+ // Prepare the INDXQ sorting permutation.
+@@ -452,8 +452,8 @@
+ }
+ }
+ } // end omp parallel
+- if (*info != 0)
+- return *info;
++ if (*infom != 0)
++ return *infom;
+
+ timer_stop( time );
+ timer_printf( "eigenvalues/vector D+zzT = %6.2f\n", time );
+@@ -474,10 +474,10 @@
+ lapackf77_dlaed4( &k, &tmpp, dlamda, w, Q(0,j), &rho, &d[j], &iinfo );
+ // If the zero finder fails, the computation is terminated.
+ if (iinfo != 0)
+- *info=iinfo;
++ *infom=iinfo;
+ }
+- if (*info != 0)
+- return *info;
++ if (*infom != 0)
++ return *infom;
+
+ // Prepare the INDXQ sorting permutation.
+ magma_int_t nk = n - k;
+@@ -688,5 +688,5 @@
+
+ magma_setdevice( orig_dev );
+
+- return *info;
++ return *infom;
+ } /* magma_dlaed3_m */
+diff -Naur magma-2.2.0/src/slaex3_m.cpp magma-2.2.0-patched/src/slaex3_m.cpp
+--- magma-2.2.0/src/slaex3_m.cpp 2016-11-20 20:20:24.000000000 -0500
++++ magma-2.2.0/src/slaex3_m.cpp 2017-01-06 10:20:13.200783151 -0500
+@@ -197,7 +197,7 @@
+ magmaFloat_ptr dwork[],
+ magma_queue_t queues[MagmaMaxGPUs][2],
+ magma_range_t range, float vl, float vu, magma_int_t il, magma_int_t iu,
+- magma_int_t *info )
++ magma_int_t *infom )
+ {
+ #define Q(i_,j_) (Q + (i_) + (j_)*ldq)
+
+@@ -209,8 +209,8 @@
+ magma_setdevice(0);
+ magma_slaex3( k, n, n1, d, Q, ldq, rho,
+ dlamda, Q2, indx, ctot, w, s, indxq,
+- *dwork, range, vl, vu, il, iu, info );
+- return *info;
++ *dwork, range, vl, vu, il, iu, infom );
++ return *infom;
+ }
+ float d_one = 1.;
+ float d_zero = 0.;
+@@ -229,37 +229,37 @@
+ valeig = (range == MagmaRangeV);
+ indeig = (range == MagmaRangeI);
+
+- *info = 0;
++ *infom = 0;
+
+ if (k < 0)
+- *info=-1;
++ *infom=-1;
+ else if (n < k)
+- *info=-2;
++ *infom=-2;
+ else if (ldq < max(1,n))
+- *info=-6;
++ *infom=-6;
+ else if (! (alleig || valeig || indeig))
+- *info = -15;
++ *infom = -15;
+ else {
+ if (valeig) {
+ if (n > 0 && vu <= vl)
+- *info = -17;
++ *infom = -17;
+ }
+ else if (indeig) {
+ if (il < 1 || il > max(1,n))
+- *info = -18;
++ *infom = -18;
+ else if (iu < min(n,il) || iu > n)
+- *info = -19;
++ *infom = -19;
+ }
+ }
+
+- if (*info != 0) {
+- magma_xerbla( __func__, -(*info) );
+- return *info;
++ if (*infom != 0) {
++ magma_xerbla( __func__, -(*infom) );
++ return *infom;
+ }
+
+ // Quick return if possible
+ if (k == 0)
+- return *info;
++ return *infom;
+
+ magma_device_t orig_dev;
+ magma_getdevice( &orig_dev );
+@@ -360,15 +360,15 @@
+ lapackf77_slaed4( &k, &tmpp, dlamda, w, Q(0,j), &rho, &d[j], &iinfo );
+ // If the zero finder fails, the computation is terminated.
+ if (iinfo != 0) {
+- #pragma omp critical (info)
+- *info = iinfo;
++ #pragma omp critical (infom)
++ *infom = iinfo;
+ break;
+ }
+ }
+
+ #pragma omp barrier
+
+- if (*info == 0) {
++ if (*infom == 0) {
+ #pragma omp single
+ {
+ // Prepare the INDXQ sorting permutation.
+@@ -452,8 +452,8 @@
+ }
+ }
+ } // end omp parallel
+- if (*info != 0)
+- return *info;
++ if (*infom != 0)
++ return *infom;
+
+ timer_stop( time );
+ timer_printf( "eigenvalues/vector D+zzT = %6.2f\n", time );
+@@ -474,10 +474,10 @@
+ lapackf77_slaed4( &k, &tmpp, dlamda, w, Q(0,j), &rho, &d[j], &iinfo );
+ // If the zero finder fails, the computation is terminated.
+ if (iinfo != 0)
+- *info=iinfo;
++ *infom=iinfo;
+ }
+- if (*info != 0)
+- return *info;
++ if (*infom != 0)
++ return *infom;
+
+ // Prepare the INDXQ sorting permutation.
+ magma_int_t nk = n - k;
+@@ -688,5 +688,5 @@
+
+ magma_setdevice( orig_dev );
+
+- return *info;
++ return *infom;
+ } /* magma_slaed3_m */
diff --git a/var/spack/repos/builtin/packages/magma/package.py b/var/spack/repos/builtin/packages/magma/package.py
new file mode 100644
index 0000000000..bccac28497
--- /dev/null
+++ b/var/spack/repos/builtin/packages/magma/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 Serban Maerean, serban@us.ibm.com, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/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 Magma(CMakePackage):
+ """The MAGMA project aims to develop a dense linear algebra library
+ similar to LAPACK but for heterogeneous/hybrid architectures,
+ starting with current "Multicore+GPU" systems.
+ """
+
+ homepage = "http://icl.cs.utk.edu/magma/"
+ url = "http://icl.cs.utk.edu/projectsfiles/magma/downloads/magma-2.2.0.tar.gz"
+
+ version('2.2.0', '6c1ebf4cdf63eb302ff6258ff8c49217')
+
+ variant('fortran', default=True,
+ description='Enable Fortran bindings support')
+
+ depends_on('lapack')
+ depends_on('cuda@9.0:', when='%gcc@6.0:6.9.9')
+ depends_on('cuda@8.0:', when='%gcc@5.0:')
+ patch('ibm-xl.patch', when='@2.2:%xl')
+ patch('ibm-xl.patch', when='@2.2:%xl_r')
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+
+ options.extend([
+ '-DCMAKE_INSTALL_PREFIX=%s' % prefix,
+ '-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix,
+ '-DLAPACK_LIBRARIES=%s;%s' % (spec['blas'].libs,
+ spec['lapack'].libs)
+ ])
+
+ if '+fortran' in spec:
+ options.extend([
+ '-DUSE_FORTRAN=yes'
+ ])
+ if spec.satisfies('%xl') or spec.satisfies('%xl_r'):
+ options.extend([
+ '-DCMAKE_Fortran_COMPILER=%s' % self.compiler.f77
+ ])
+
+ if spec.satisfies('^cuda@9.0:'):
+ options.extend([
+ '-DGPU_TARGET=sm30'
+ ])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/makedepend/package.py b/var/spack/repos/builtin/packages/makedepend/package.py
index 5675793abc..41edb6ed69 100644
--- a/var/spack/repos/builtin/packages/makedepend/package.py
+++ b/var/spack/repos/builtin/packages/makedepend/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Makedepend(Package):
+class Makedepend(AutotoolsPackage):
"""makedepend - create dependencies in makefiles."""
homepage = "http://cgit.freedesktop.org/xorg/util/makedepend"
@@ -35,10 +35,3 @@ class Makedepend(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/mallocmc/package.py b/var/spack/repos/builtin/packages/mallocmc/package.py
new file mode 100644
index 0000000000..ed8ba9bdeb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mallocmc/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 Mallocmc(CMakePackage):
+ """mallocMC: Memory Allocator for Many Core Architectures.
+
+ This project provides a framework for fast memory managers on
+ many core accelerators. Currently, it supports NVIDIA GPUs of
+ compute capability sm_20 or higher through the ScatterAlloc
+ algorithm.
+
+ mallocMC is header-only, but requires a few other C++ libraries
+ to be available.
+ """
+
+ homepage = "https://github.com/ComputationalRadiationPhysics/mallocMC"
+ url = "https://github.com/ComputationalRadiationPhysics/mallocMC/archive/2.2.0crp.tar.gz"
+
+ version('develop', branch='dev',
+ git='https://github.com/ComputationalRadiationPhysics/mallocMC.git')
+ version('master', branch='master',
+ git='https://github.com/ComputationalRadiationPhysics/mallocMC.git')
+ version('2.2.0crp', '3e5c5fc963d1a9abc829ff701504e54c')
+ version('2.1.0crp', 'd2bd2644012b64a246048575e9a9051c')
+ version('2.0.1crp', '1f674d5d1ae05446d9a4e4b65465dca0')
+ version('2.0.0crp', '2c63c3ea2a882f29962c67b095d8f7a8')
+ version('1.0.2crp', '8f5edf07daa527261e52bc61be340ae6')
+
+ depends_on('cmake@2.8.12.2:', type='build')
+ depends_on('boost@1.48.0:', type='link')
+ depends_on('cuda@5.0:', type='link')
diff --git a/var/spack/repos/builtin/packages/man-db/package.py b/var/spack/repos/builtin/packages/man-db/package.py
new file mode 100644
index 0000000000..7a6a03731e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/man-db/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class ManDb(AutotoolsPackage):
+ """man-db is an implementation of the standard Unix
+ documentation system accessed using the man command. It uses
+ a Berkeley DB database in place of the traditional
+ flat-text whatis databases."""
+
+ homepage = "http://www.nongnu.org/man-db/"
+ url = "http://git.savannah.nongnu.org/cgit/man-db.git/snapshot/man-db-2.7.6.1.tar.gz"
+
+ version('2.7.6.1', '312761baade811db2b956af3432c285e')
+
+ depends_on('autoconf')
+ depends_on('automake')
+ depends_on('gettext')
+ depends_on('libpipeline')
+ depends_on('flex')
+ depends_on('groff', type=('build', 'link', 'run'))
+
+ # TODO: add gzip support via a new package.
+ # man pages are typically compressed, include all available
+ # compression libraries
+ depends_on('bzip2', type=('build', 'link', 'run'))
+ depends_on('lzma', type=('build', 'link', 'run'))
+ depends_on('xz', type=('build', 'link', 'run'))
+
+ def configure_args(self):
+ args = [
+ '--disable-setuid',
+ # defaults to a location that needs root privs to write in
+ '--with-systemdtmpfilesdir={0}/tmp'.format(self.prefix)
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/mariadb/package.py b/var/spack/repos/builtin/packages/mariadb/package.py
index d9df200d02..53203f585a 100644
--- a/var/spack/repos/builtin/packages/mariadb/package.py
+++ b/var/spack/repos/builtin/packages/mariadb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mariadb(Package):
+class Mariadb(CMakePackage):
"""MariaDB turns data into structured information in a wide array of
applications, ranging from banking to websites. It is an enhanced, drop-in
replacement for MySQL. MariaDB is used because it is fast, scalable and
@@ -33,8 +33,11 @@ class Mariadb(Package):
tools make it very versatile for a wide variety of use cases."""
homepage = "https://mariadb.org/about/"
- url = "https://downloads.mariadb.org/f/mariadb-10.1.14/source/mariadb-10.1.14.tar.gz"
+ url = "http://ftp.hosteurope.de/mirror/archive.mariadb.org/mariadb-10.2.8/source/mariadb-10.2.8.tar.gz"
+ version('10.2.8', 'f93cbd5bfde3c0d082994764ff7db580')
+ version('10.1.23', '1a7392cc05c7c249acd4495022719ca8')
+ version('5.5.56', '8bc7772fea3e11b0bc1a09d2278e2e32')
version('10.1.14', '294925531e0fd2f0461e3894496a5adc')
version('5.5.49', '67b5a499a5f158b2a586e6e3bfb4f304')
@@ -42,18 +45,10 @@ class Mariadb(Package):
'operations in the mariadb client library.')
depends_on('boost')
- depends_on('cmake')
+ depends_on('cmake@2.6:', type='build')
depends_on('jemalloc')
depends_on('libaio')
depends_on('libedit')
depends_on('libevent', when='+nonblocking')
depends_on('ncurses')
depends_on('zlib')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
-
- cmake('..', *std_cmake_args)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/masa/package.py b/var/spack/repos/builtin/packages/masa/package.py
new file mode 100644
index 0000000000..e0e7c00cde
--- /dev/null
+++ b/var/spack/repos/builtin/packages/masa/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 Masa(AutotoolsPackage):
+ """MASA (Manufactured Analytical Solution Abstraction) is a library
+ written in C++ (with C, python and Fortran90 interfaces) which
+ provides a suite of manufactured solutions for the software
+ verification of partial differential equation solvers in multiple
+ dimensions."""
+ homepage = "https://github.com/manufactured-solutions/MASA"
+ url = "https://github.com/manufactured-solutions/MASA.git"
+
+ version('master',
+ git='https://github.com/manufactured-solutions/MASA.git',
+ tag='master')
+
+ variant('fortran', default=True,
+ description='Compile with Fortran interfaces')
+ variant('python', default=True,
+ description='Compile with Python interfaces')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('swig', type='build')
+ depends_on('python', when='+python')
+ depends_on('metaphysicl')
+
+ def configure_args(self):
+ options = []
+
+ options.extend([
+ '--with-metaphysicl=%s' % self.spec['metaphysicl'].prefix
+ ])
+
+ if '+fortran' in self.spec:
+ options.extend(['--enable-fortran-interfaces'])
+
+ if '+python' in self.spec:
+ options.extend(['--enable-python-interfaces'])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/matio/package.py b/var/spack/repos/builtin/packages/matio/package.py
index a33b23a4e9..8569893375 100644
--- a/var/spack/repos/builtin/packages/matio/package.py
+++ b/var/spack/repos/builtin/packages/matio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,6 +37,7 @@ class Matio(AutotoolsPackage):
description='support for compressed mat files')
variant("hdf5", default=True,
description='support for version 7.3 mat files via hdf5')
+ variant("shared", default=True, description='Enables the build of shared libraries.')
depends_on("zlib", when="+zlib")
depends_on("hdf5", when="+hdf5")
@@ -47,4 +48,6 @@ class Matio(AutotoolsPackage):
args.append("--with-zlib=%s" % self.spec['zlib'].prefix)
if '+hdf5' in self.spec:
args.append("--with-hdf5=%s" % self.spec['hdf5'].prefix)
+ if '+shared' not in self.spec:
+ args.append("--disable-shared")
return args
diff --git a/var/spack/repos/builtin/packages/matlab/package.py b/var/spack/repos/builtin/packages/matlab/package.py
new file mode 100644
index 0000000000..c61bbe05d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/matlab/package.py
@@ -0,0 +1,94 @@
+##############################################################################
+# 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/spack/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 *
+import os
+import subprocess
+
+
+class Matlab(Package):
+ """MATLAB (MATrix LABoratory) is a multi-paradigm numerical computing
+ environment and fourth-generation programming language. A proprietary
+ programming language developed by MathWorks, MATLAB allows matrix
+ manipulations, plotting of functions and data, implementation of
+ algorithms, creation of user interfaces, and interfacing with programs
+ written in other languages, including C, C++, C#, Java, Fortran and Python.
+
+ Note: MATLAB is licensed software. You will need to create an account on
+ the MathWorks homepage and download MATLAB yourself. Spack will search your
+ current directory for the download file. Alternatively, add this file to a
+ mirror so that Spack can find it. For instructions on how to set up a
+ mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://www.mathworks.com/products/matlab.html"
+
+ version('R2016b', 'b0e0b688894282139fa787b5a86a5cf7')
+
+ variant(
+ 'mode',
+ default='interactive',
+ values=('interactive', 'silent', 'automated'),
+ description='Installation mode (interactive, silent, or automated)'
+ )
+
+ variant(
+ 'key',
+ default='',
+ values=lambda x: True, # Anything goes as a key
+ description='The file installation key to use'
+ )
+
+ # Licensing
+ license_required = True
+ license_comment = '#'
+ license_files = ['licenses/license.dat']
+ license_vars = ['LM_LICENSE_FILE']
+ license_url = 'https://www.mathworks.com/help/install/index.html'
+
+ extendable = True
+
+ def url_for_version(self, version):
+ return "file://{0}/matlab_{1}_glnxa64.zip".format(os.getcwd(), version)
+
+ def configure(self, spec, prefix):
+ config = {
+ 'destinationFolder': prefix,
+ 'mode': spec.variants['mode'].value,
+ 'fileInstallationKey': spec.variants['key'].value,
+ 'licensePath': self.global_license_file
+ }
+
+ # Store values requested by the installer in a file
+ with open('spack_installer_input.txt', 'w') as inputFile:
+ for key in config:
+ inputFile.write('{0}={1}\n'.format(key, config[key]))
+
+ def install(self, spec, prefix):
+ self.configure(spec, prefix)
+
+ # Run silent installation script
+ # Full path required
+ inputFile = join_path(self.stage.source_path,
+ 'spack_installer_input.txt')
+ subprocess.call(['./install', '-inputFile', inputFile])
diff --git a/var/spack/repos/builtin/packages/maven/package.py b/var/spack/repos/builtin/packages/maven/package.py
index c4e0a1d0a4..425e5abaab 100644
--- a/var/spack/repos/builtin/packages/maven/package.py
+++ b/var/spack/repos/builtin/packages/maven/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,11 +30,12 @@ class Maven(Package):
"""Apache Maven is a software project management and comprehension tool."""
homepage = "https://maven.apache.org/index.html"
- url = "http://www.gtlib.gatech.edu/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz"
+ url = "https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.tar.gz"
+ version('3.5.0', '35c39251d2af99b6624d40d801f6ff02')
version('3.3.9', '516923b3955b6035ba6b0a5b031fbd8b')
- depends_on('jdk')
+ depends_on('java')
def install(self, spec, prefix):
# install pre-built distribution
diff --git a/var/spack/repos/builtin/packages/maverick/package.py b/var/spack/repos/builtin/packages/maverick/package.py
new file mode 100644
index 0000000000..b898beafb7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/maverick/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Maverick(MakefilePackage):
+ """MavericK is a program for inferring population structure on the basis
+ of genetic information."""
+
+ homepage = "https://github.com/bobverity/MavericK"
+ url = "https://github.com/bobverity/MavericK/archive/v1.0.4.tar.gz"
+
+ version('1.0.4', '0c17c9a73fd0ac0aef17339173ddedc2')
+
+ conflicts('%gcc@:6.0')
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('MavericK', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/mawk/package.py b/var/spack/repos/builtin/packages/mawk/package.py
new file mode 100644
index 0000000000..2749736796
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mawk/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Mawk(AutotoolsPackage):
+ """mawk is an interpreter for the AWK Programming Language."""
+
+ homepage = "http://invisible-island.net/mawk/mawk.html"
+ url = "http://invisible-mirror.net/archives/mawk/mawk-1.3.4.tgz"
+
+ version('1.3.4', 'b1d27324ae80302452d0fa0c98447b65')
+
+ provides('awk')
diff --git a/var/spack/repos/builtin/packages/mbedtls/package.py b/var/spack/repos/builtin/packages/mbedtls/package.py
index 493ea59f0b..12687ea5a8 100644
--- a/var/spack/repos/builtin/packages/mbedtls/package.py
+++ b/var/spack/repos/builtin/packages/mbedtls/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mbedtls(Package):
+class Mbedtls(CMakePackage):
"""mbed TLS (formerly known as PolarSSL) makes it trivially easy for
developers to include cryptographic and SSL/TLS capabilities in
their (embedded) products, facilitating this functionality with a
@@ -42,10 +42,9 @@ class Mbedtls(Package):
version('2.1.3', '7eb4cf1dfa68578a2c8dbd0b6fa752dd')
version('1.3.16', '4144d7320c691f721aeb9e67a1bc38e0')
- depends_on('cmake', type='build')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release', 'Coverage', 'ASan', 'ASanDbg',
+ 'MemSan', 'MemSanDbg', 'Check', 'CheckFull'))
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
-
- make()
- make("install")
+ depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/mcl/package.py b/var/spack/repos/builtin/packages/mcl/package.py
new file mode 100644
index 0000000000..4644cc39ac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mcl/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Mcl(AutotoolsPackage):
+ """The MCL algorithm is short for the Markov Cluster Algorithm, a fast
+ and scalable unsupervised cluster algorithm for graphs (also known
+ as networks) based on simulation of (stochastic) flow in graphs."""
+
+ homepage = "https://www.micans.org/mcl/index.html"
+ url = "https://www.micans.org/mcl/src/mcl-14-137.tar.gz"
+
+ version('14-137', 'bc8740456cf51019d0a9ac5eba665bb5')
diff --git a/var/spack/repos/builtin/packages/mdtest/package.py b/var/spack/repos/builtin/packages/mdtest/package.py
new file mode 100644
index 0000000000..519aed704c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mdtest/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Mdtest(Package):
+ """mdtest is an MPI-coordinated metadata benchmark test
+ that performs open/stat/close operations on files
+ and directories and then reports the performance."""
+
+ homepage = "https://github.com/LLNL/mdtest"
+
+ version('1.9.3', git='https://github.com/LLNL/mdtest.git', commit='49f3f0')
+
+ depends_on('mpi')
+
+ def install(self, spec, prefix):
+ filter_file('$(CC.$(OS))', spec['mpi'].mpicc, 'Makefile', string=True)
+ make('mdtest')
+ mkdirp(prefix.bin)
+ install('mdtest', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/meep/package.py b/var/spack/repos/builtin/packages/meep/package.py
index 2c1018e711..79c50a8123 100644
--- a/var/spack/repos/builtin/packages/meep/package.py
+++ b/var/spack/repos/builtin/packages/meep/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,13 @@
from spack import *
-class Meep(Package):
+class Meep(AutotoolsPackage):
"""Meep (or MEEP) is a free finite-difference time-domain (FDTD) simulation
software package developed at MIT to model electromagnetic systems."""
homepage = "http://ab-initio.mit.edu/wiki/index.php/Meep"
+ url = "http://ab-initio.mit.edu/meep/meep-1.3.tar.gz"
+ list_url = "http://ab-initio.mit.edu/meep/old"
version('1.3', '18a5b9e18008627a0411087e0bb60db5')
version('1.2.1', '9be2e743c3a832ae922de9d955d016c5')
@@ -54,16 +56,10 @@ class Meep(Package):
depends_on('hdf5+mpi', when='+hdf5+mpi')
depends_on('gsl', when='+gsl')
- def url_for_version(self, version):
- base_url = "http://ab-initio.mit.edu/meep"
- if version > Version('1.1.1'):
- return "{0}/meep-{1}.tar.gz".format(base_url, version)
- else:
- return "{0}/old/meep-{1}.tar.gz".format(base_url, version)
+ def configure_args(self):
+ spec = self.spec
- def install(self, spec, prefix):
config_args = [
- '--prefix={0}'.format(prefix),
'--enable-shared'
]
@@ -95,15 +91,14 @@ class Meep(Package):
else:
config_args.append('--without-hdf5')
- configure(*config_args)
+ return config_args
- make()
+ def check(self):
+ spec = self.spec
# aniso_disp test fails unless installed with harminv
# near2far test fails unless installed with gsl
- if self.run_tests and '+harminv' in spec and '+gsl' in spec:
+ if '+harminv' in spec and '+gsl' in spec:
# Most tests fail when run in parallel
# 2D_convergence tests still fails to converge for unknown reasons
make('check', parallel=False)
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/memaxes/package.py b/var/spack/repos/builtin/packages/memaxes/package.py
index ffad167788..581454ef06 100644
--- a/var/spack/repos/builtin/packages/memaxes/package.py
+++ b/var/spack/repos/builtin/packages/memaxes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/meme/package.py b/var/spack/repos/builtin/packages/meme/package.py
new file mode 100644
index 0000000000..224410e85e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/meme/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 Meme(AutotoolsPackage):
+ """The MEME Suite allows the biologist to discover novel motifs in
+ collections of unaligned nucleotide or protein sequences, and to perform a
+ wide variety of other motif-based analyses."""
+
+ homepage = "http://meme-suite.org"
+ url = "http://meme-suite.org/meme-software/4.11.4/meme_4.11.4.tar.gz"
+
+ version('4.11.4', '371f513f82fa0888205748e333003897')
+
+ variant('mpi', default=True, description='Enable MPI support')
+
+ depends_on('zlib', type=('link'))
+ depends_on('libxml2', type=('link'))
+ depends_on('libxslt', type=('link'))
+ depends_on('libgcrypt', type=('link'))
+ depends_on('perl', type=('build', 'run'))
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('mpi', when='+mpi')
+
+ # disable mpi support
+ def configure_args(self):
+ spec = self.spec
+ args = []
+ if '~mpi' in spec:
+ args += ['--enable-serial']
+ return args
diff --git a/var/spack/repos/builtin/packages/mercurial/package.py b/var/spack/repos/builtin/packages/mercurial/package.py
index ea77953f15..4ecd3332a9 100644
--- a/var/spack/repos/builtin/packages/mercurial/package.py
+++ b/var/spack/repos/builtin/packages/mercurial/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,16 +23,23 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import llnl.util.tty as tty
-import os
+from llnl.util import tty
-class Mercurial(Package):
+class Mercurial(PythonPackage):
"""Mercurial is a free, distributed source control management tool."""
homepage = "https://www.mercurial-scm.org"
- url = "https://www.mercurial-scm.org/release/mercurial-3.9.tar.gz"
+ url = "https://www.mercurial-scm.org/release/mercurial-4.1.2.tar.gz"
+ import_modules = [
+ 'hgext', 'hgext3rd', 'mercurial', 'hgext.convert', 'hgext.fsmonitor',
+ 'hgext.highlight', 'hgext.largefiles', 'hgext.zeroconf',
+ 'hgext.fsmonitor.pywatchman', 'mercurial.hgweb',
+ 'mercurial.httpclient', 'mercurial.pure'
+ ]
+
+ version('4.1.2', '934c99808bdc8385e074b902d59b0d93')
version('3.9.1', '3759dd10edb8c1a6dfb8ff0ce82658ce')
version('3.9', 'e2b355da744e94747daae3a5339d28a0')
version('3.8.4', 'cec2c3db688cb87142809089c6ae13e9')
@@ -40,30 +47,62 @@ class Mercurial(Package):
version('3.8.2', 'c38daa0cbe264fc621dc3bb05933b0b3')
version('3.8.1', '172a8c588adca12308c2aca16608d7f4')
- extends('python')
depends_on('python@2.6:2.8')
depends_on('py-docutils', type='build')
+ depends_on('py-pygments', type=('build', 'run'))
+ depends_on('py-certifi', type=('build', 'run'))
+
+ @run_after('install')
+ def post_install(self):
+ prefix = self.prefix
+
+ # Install man pages
+ mkdirp(prefix.man.man1)
+ mkdirp(prefix.man.man5)
+ mkdirp(prefix.man.man8)
+ with working_dir('doc'):
+ install('hg.1', prefix.man.man1)
+ install('hgignore.5', prefix.man.man5)
+ install('hgrc.5', prefix.man.man5)
+ install('hg-ssh.8', prefix.man.man8)
+
+ # Install completion scripts
+ contrib = join_path(prefix, 'contrib')
+ mkdir(contrib)
+ with working_dir('contrib'):
+ install('bash_completion', join_path(contrib, 'bash_completion'))
+ install('zsh_completion', join_path(contrib, 'zsh_completion'))
+
+ @run_after('install')
+ def configure_certificates(self):
+ """Configuration of HTTPS certificate authorities
+ https://www.mercurial-scm.org/wiki/CACertificates"""
- def install(self, spec, prefix):
- make('install', 'PREFIX={0}'.format(prefix))
+ etc_dir = join_path(self.prefix.etc, 'mercurial')
+ mkdirp(etc_dir)
- # Configuration of HTTPS certificate authorities
- # https://www.mercurial-scm.org/wiki/CACertificates
- hgrc_filename = join_path(prefix.etc, 'mercurial', 'hgrc')
- mkdirp(os.path.dirname(hgrc_filename))
+ hgrc_filename = join_path(etc_dir, 'hgrc')
+ # Use certifi to find the location of the CA certificate
+ certificate = python('-c', 'import certifi; print certifi.where()',
+ output=str)
+
+ if not certificate:
+ tty.warn('CA certificate not found. You may not be able to '
+ 'connect to an HTTPS server. If your CA certificate '
+ 'is in a non-standard location, you should add it to '
+ '{0}.'.format(hgrc_filename))
+
+ # Write the global mercurial configuration file
with open(hgrc_filename, 'w') as hgrc:
- if os.path.exists('/etc/ssl/certs/ca-certificates.crt'):
- # Debian/Ubuntu/Gentoo/Arch Linux
- hgrc.write('[web]\ncacerts = /etc/ssl/certs/ca-certificates.crt') # noqa
- elif os.path.exists('/etc/pki/tls/certs/ca-bundle.crt'):
- # Fedora/RHEL/CentOS
- hgrc.write('[web]\ncacerts = /etc/pki/tls/certs/ca-bundle.crt')
- elif os.path.exists('/etc/ssl/ca-bundle.pem'):
- # openSUSE/SLE
- hgrc.write('[web]\ncacerts = /etc/ssl/ca-bundle.pem')
- else:
- tty.warn('CA certificate not found. You may not be able to '
- 'connect to an HTTPS server. If your CA certificate '
- 'is in a non-standard location, you should add it to '
- '{0}'.format(hgrc_filename))
+ hgrc.write('[web]\ncacerts = {0}'.format(certificate))
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ """Sanity-check setup."""
+
+ hg = Executable(join_path(self.prefix.bin, 'hg'))
+
+ hg('debuginstall')
+ hg('version')
diff --git a/var/spack/repos/builtin/packages/mesa-glu/package.py b/var/spack/repos/builtin/packages/mesa-glu/package.py
new file mode 100644
index 0000000000..b450728e75
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mesa-glu/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 MesaGlu(AutotoolsPackage):
+ """This package provides the Mesa OpenGL Utility library."""
+
+ homepage = "https://www.mesa3d.org"
+ url = "https://www.mesa3d.org/archive/glu/glu-9.0.0.tar.gz"
+
+ version('9.0.0', 'bbc57d4fe3bd3fb095bdbef6fcb977c4')
+
+ variant('mesa', default=True,
+ description='Usually depends on mesa, disable for accelerated OpenGL')
+ depends_on('mesa', when='+mesa')
diff --git a/var/spack/repos/builtin/packages/mesa/package.py b/var/spack/repos/builtin/packages/mesa/package.py
index f19bb466fd..af8c20ae52 100644
--- a/var/spack/repos/builtin/packages/mesa/package.py
+++ b/var/spack/repos/builtin/packages/mesa/package.py
@@ -1,13 +1,12 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# This file is released as part of spack under the LGPL license.
# LLNL-CODE-647188
#
-# For details, see https://github.com/llnl/spack
-# Please also see the LICENSE file for our notice and the LGPL.
+# For details, see https://github.com/spack/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
@@ -22,46 +21,172 @@
# 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 Mesa(Package):
- """Mesa is an open-source implementation of the OpenGL
- specification - a system for rendering interactive 3D graphics."""
+class Mesa(AutotoolsPackage):
+ """Mesa is an open-source implementation of the OpenGL specification
+ - a system for rendering interactive 3D graphics."""
homepage = "http://www.mesa3d.org"
- url = "ftp://ftp.freedesktop.org/pub/mesa/12.0.3/mesa-12.0.3.tar.gz"
+ url = "https://mesa.freedesktop.org/archive/mesa-17.1.5.tar.xz"
+ list_url = "https://mesa.freedesktop.org/archive"
+ _urlfmt = "https://mesa.freedesktop.org/archive/mesa-{0}.tar.xz"
+ _oldurlfmt = "https://mesa.freedesktop.org/archive/older-versions/{0}.x/{1}/mesa-{1}.tar.xz"
+ list_depth = 2
+
+ version('17.2.3', 'a7dca71afbc7294cb7d505067fd44ef6')
+ version('17.2.2', '1a157b5baefb5adf9f4fbb8a6632d74c')
+ version('17.1.5', '6cf936fbcaadd98924298a7009e8265d')
+ version('17.1.4', 'be2ef7c9edec23b07f74f6512a6a6fa5')
+ version('17.1.3', '1946a93d543bc219427e2bebe2ac4752')
+ version('17.1.1', 'a4844bc6052578574f9629458bcbb749')
+ version('13.0.6', '1e5a769bc6cfd839cf3febcb179c27cc')
+ version('12.0.6', '1a3d4fea0656c208db59289e4ed33b3f')
+ version('12.0.3', '1113699c714042d8c4df4766be8c57d8')
- version('12.0.3', '60c5f9897ddc38b46f8144c7366e84ad')
+ variant('swrender', default=True,
+ description="Build with (gallium) software rendering.")
+ variant('hwrender', default=False,
+ description="Build with (DRI) hardware rendering.")
+ variant('llvm', default=False,
+ description="Use llvm for rendering pipes.")
# General dependencies
- depends_on('python@2.6.4:')
- depends_on('py-mako@0.3.4:')
+ depends_on('pkg-config@0.9.0:', type='build')
depends_on('flex@2.5.35:', type='build')
depends_on('bison@2.4.1:', type='build')
-
- # For DRI and hardware acceleration
+ depends_on('binutils', type='build')
+ depends_on('python@2.6.4:', type='build')
+ depends_on('py-mako@0.3.4:', type='build')
+ depends_on('gettext')
+ depends_on('icu4c')
+ depends_on('expat')
depends_on('libpthread-stubs')
- depends_on('libdrm')
depends_on('openssl')
+ depends_on('xproto')
+ depends_on('glproto@1.4.14:')
+ depends_on('presentproto@1.0:')
depends_on('libxcb@1.9.3:')
- depends_on('libxshmfence@1.1:')
depends_on('libx11')
depends_on('libxext')
+ depends_on('libxshmfence@1.1:')
depends_on('libxdamage')
depends_on('libxfixes')
+ depends_on('libxv')
+ depends_on('libxvmc')
- depends_on('glproto@1.4.14:', type='build')
- depends_on('dri2proto@2.6:', type='build')
- depends_on('dri3proto@1.0:', type='build')
- depends_on('presentproto@1.0:', type='build')
- depends_on('pkg-config@0.9.0:', type='build')
+ # For DRI and hardware acceleration
+ depends_on('dri2proto@2.6:', type='build', when='+hwrender')
+ depends_on('dri3proto@1.0:', type='build', when='+hwrender')
+ depends_on('libdrm', when='+hwrender')
+
+ depends_on('llvm@:3.8.1+link_dylib', when='@12:12.99+llvm')
+ depends_on('llvm@:3.9.1+link_dylib', when='@13:13.99+llvm')
+ depends_on('llvm+link_dylib', when='+llvm')
+ depends_on('libelf', when='+llvm')
+
+ def url_for_version(self, version):
+ """Handle Mesa version-based custom URLs."""
+ if version < Version('17.0.0'):
+ return self._oldurlfmt.format(version.up_to(1), version)
+ else:
+ return self._urlfmt.format(version)
+
+ def configure_args(self):
+ """Build drivers for platforms supported by spack;
+ exclude drivers for embedded systems.
+ """
+ spec = self.spec
+ args = ['--enable-glx', '--enable-glx-tls']
+ drivers = []
+
+ if '+swrender' in spec:
+ drivers = ['swrast']
+ args.extend([
+ '--disable-osmesa',
+ '--enable-gallium-osmesa',
+ '--enable-texture-float',
+ ])
+ if '+llvm' in spec:
+ # For @17.1.1:17.1.2 the swr driver requires C++14 support
+ # Should be fixed in 17.1.3, but can still encounter problems
+ if spec.version >= Version('17') and \
+ spec.version < Version('17.2'):
+ if spec.satisfies('%gcc@4.9:'):
+ drivers.append('swr')
+ else:
+ drivers.append('swr')
+ else:
+ args.append('--disable-gallium-osmesa')
+ # Fallback for "~hwrender~swrender" -> old osmesa
+ if '~hwrender' in spec:
+ args.append('--enable-osmesa')
+
+ if '+hwrender' in spec:
+ args.append('--enable-xa')
+ if spec.version >= Version('17'):
+ args.append('--with-platforms=x11,drm')
+ else:
+ args.append('--with-egl-platforms=x11,drm')
+ drivers.extend([
+ 'svga', 'i915', 'r600', 'nouveau', 'virgl'
+ ])
+
+ # These hardware drivers need llvm
+ if '+llvm' in spec:
+ drivers.extend(['r300', 'radeonsi'])
+
+ else:
+ args.extend([
+ '--disable-xa',
+ '--disable-dri',
+ '--disable-dri3',
+ '--disable-egl',
+ '--disable-gbm',
+ '--disable-xvmc',
+ ])
+ if spec.version >= Version('17'):
+ args.append('--with-platforms=x11')
+
+ if '+llvm' in spec:
+ if self.spec.version < Version('17'):
+ args.append('--enable-gallium-llvm')
+ else:
+ args.append('--enable-llvm')
+ if '+link_dylib' in self.spec['llvm']:
+ args.append('--enable-llvm-shared-libs')
+ else:
+ args.append('--disable-llvm-shared-libs')
+ args.append('--with-llvm-prefix=%s' % spec['llvm'].prefix)
+
+ if drivers:
+ args.append('--with-gallium-drivers=' + ','.join(drivers))
+ else:
+ args.append('--without-gallium-drivers')
+
+ # Avoid errors due to missing clock_gettime symbol:
+ arch = spec.architecture
+ if arch.platform == 'linux':
+ args.append('LIBS=-lrt')
- # TODO: Add package for systemd, provides libudev
- # Using the system package manager to install systemd didn't work for me
+ return args
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
+ def configure(self, spec, prefix):
+ """Configure mesa, detecting if libsysfs is required
+ for DRI support on the build host.
+ """
+ options = ['--prefix={0}'.format(prefix)] + self.configure_args()
- make()
- make('install')
+ try:
+ # First attempt uses libudev:
+ configure(*options)
+ except ProcessError:
+ if '+hwrender' in spec and not spec.satisfies('@13:'):
+ print('Configuring with libudev failed ... '
+ ' trying libsysfs ...')
+ options.append('--enable-sysfs')
+ configure(*options)
+ else:
+ raise
diff --git a/var/spack/repos/builtin/packages/meshkit/package.py b/var/spack/repos/builtin/packages/meshkit/package.py
new file mode 100644
index 0000000000..9db76fc4d8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/meshkit/package.py
@@ -0,0 +1,81 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Meshkit(AutotoolsPackage):
+ """MeshKit is an open-source library of mesh generation functionality.
+ Its design philosophy is two-fold: it provides a collection of
+ meshing algorithms for use in real meshing problems, along with
+ other tools commonly needed to support mesh generation"""
+
+ homepage = "http://sigma.mcs.anl.gov/meshkit-library"
+ url = "http://ftp.mcs.anl.gov/pub/fathom/meshkit-1.5.0.tar.gz"
+
+ version('1.5.0', '90b52416598ef65525ce4457a50ffe68')
+
+ variant("mpi", default=True, description='enable mpi support')
+ variant("netgen", default=False, description='enable netgen support')
+ variant("debug", default=False, description='enable debug symbols')
+ variant("shared", default=False, description='enable shared builds')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('netgen', when='+netgen')
+ depends_on('cgm')
+ depends_on('moab+cgm+irel+fbigeom')
+
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ "--with-igeom={0}".format(spec['cgm'].prefix),
+ "--with-imesh={0}".format(spec['moab'].prefix)
+ ]
+ if '+mpi' in spec:
+ args.extend([
+ "--with-mpi",
+ "CC={0}".format(spec['mpi'].mpicc),
+ "CXX={0}".format(spec['mpi'].mpicxx),
+ "FC={0}".format(spec['mpi'].mpifc)
+ ])
+# FIXME without-mpi is not working
+# else:
+# args.append("--without-mpi")
+ if '+netgen' in spec:
+ args.append("--with-netgen={0}".format(spec['netgen'].prefix))
+ else:
+ args.append("--without-netgen")
+
+ if '+debug' in spec:
+ args.append("--enable-debug")
+ else:
+ args.append("--disable-debug")
+
+ if '+shared' in spec:
+ args.append("--enable-shared")
+ else:
+ args.append("--disable-shared")
+
+ return args
diff --git a/var/spack/repos/builtin/packages/meson/package.py b/var/spack/repos/builtin/packages/meson/package.py
new file mode 100644
index 0000000000..046d9b2dea
--- /dev/null
+++ b/var/spack/repos/builtin/packages/meson/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Meson(PythonPackage):
+ """Meson is a portable open source build system meant to be both
+ extremely fast, and as user friendly as possible."""
+
+ homepage = "http://mesonbuild.com/"
+ url = "https://github.com/mesonbuild/meson/archive/0.42.0.tar.gz"
+
+ version('0.42.0', '9e26bf154ca439b78b1b9366c8a89437')
+ version('0.41.2', 'aa9c69ced965e47f5c75a9257ee91ce3')
+ version('0.41.1', 'c6d285b35cfd7acc8517124d417efbdc')
+
+ variant('ninjabuild', default=True)
+
+ depends_on('python@3:', type=('build', 'run'))
+ depends_on('ninja', when='+ninjabuild', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/mesquite/package.py b/var/spack/repos/builtin/packages/mesquite/package.py
new file mode 100644
index 0000000000..b23f1294ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mesquite/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 Mesquite(AutotoolsPackage):
+ """Mesquite (Mesh Quality Improvement Toolkit) is designed to provide a
+ stand-alone, portable, comprehensive suite of mesh quality improvement
+ algorithms and components that can be used to construct custom quality
+ improvement algorithms. Mesquite provides a robust and effective mesh
+ improvement toolkit that allows both meshing researchers application
+ scientists to benefit from the latest developments in mesh quality
+ control and improvement."""
+
+ homepage = "https://software.sandia.gov/mesquite"
+ url = "https://software.sandia.gov/mesquite/mesquite-2.3.0.tar.gz"
+
+ version('2.99', '92b94167981bb8fcd59b0f0f18fbab64')
+ version('2.3.0', 'f64948b5210d5ccffaa9a2482447b322')
+ version('2.2.0', '41360c363e541aff7dc10024c90072d3')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+
+ depends_on('mpi', when='+mpi')
+
+ def configure_args(self):
+ args = [
+ 'CC=%s' % self.spec['mpi'].mpicc,
+ 'CXX=%s' % self.spec['mpi'].mpicxx,
+ '--with-mpi=%s' % self.spec['mpi'].prefix,
+ '--enable-release',
+ '--enable-shared',
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/metaphysicl/package.py b/var/spack/repos/builtin/packages/metaphysicl/package.py
new file mode 100644
index 0000000000..52548f7b4c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/metaphysicl/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 Metaphysicl(AutotoolsPackage):
+ """Metaprogramming and operator-overloaded classes for
+ numerical simulations."""
+ homepage = "https://github.com/roystgnr/MetaPhysicL"
+ url = "https://github.com/roystgnr/MetaPhysicL/archive/v0.2.0.tar.gz"
+
+ version('0.2.0', '2af65536524a3945b6507a30233ca1cf')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
diff --git a/var/spack/repos/builtin/packages/metis/package.py b/var/spack/repos/builtin/packages/metis/package.py
index b66677288c..20e601fbd8 100644
--- a/var/spack/repos/builtin/packages/metis/package.py
+++ b/var/spack/repos/builtin/packages/metis/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,8 @@ class Metis(Package):
partitioning schemes."""
homepage = "http://glaros.dtc.umn.edu/gkhome/metis/metis/overview"
- base_url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis"
+ url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/metis-5.1.0.tar.gz"
+ list_url = "http://glaros.dtc.umn.edu/gkhome/fsroot/sw/metis/OLD"
version('5.1.0', '5465e67079419a69e0116de24fce58fe')
version('5.0.2', 'acb521a4e8c2e6dd559a7f9abd0468c5')
@@ -55,12 +56,11 @@ class Metis(Package):
patch('install_gklib_defs_rename.patch', when='@5:')
def url_for_version(self, version):
- verdir = 'OLD/' if version < Version('4.0.3') else ''
- return '%s/%smetis-%s.tar.gz' % (Metis.base_url, verdir, version)
-
- @when('@:4')
- def patch(self):
- pass
+ url = "http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis"
+ if version < Version('4.0.3'):
+ url += "/OLD"
+ url += "/metis-{0}.tar.gz".format(version)
+ return url
@when('@5:')
def patch(self):
@@ -91,7 +91,7 @@ class Metis(Package):
raise InstallError('METIS@:4 does not support the following '
'variants: gdb, int64, real64.')
- options = ['COPTIONS=-fPIC']
+ options = ['COPTIONS={0}'.format(self.compiler.pic_flag)]
if '+debug' in spec:
options.append('OPTFLAGS=-g -O0')
make(*options)
@@ -119,7 +119,7 @@ class Metis(Package):
install(sharefile, prefix.share)
if '+shared' in spec:
- shared_flags = ['-fPIC', '-shared']
+ shared_flags = [self.compiler.pic_flag, '-shared']
if sys.platform == 'darwin':
shared_suffix = 'dylib'
shared_flags.extend(['-Wl,-all_load', 'libmetis.a'])
@@ -135,7 +135,8 @@ class Metis(Package):
# Set up and run tests on installation
ccompile('-I%s' % prefix.include, '-L%s' % prefix.lib,
- '-Wl,-rpath=%s' % (prefix.lib if '+shared' in spec else ''),
+ self.compiler.cc_rpath_arg +
+ '%s' % (prefix.lib if '+shared' in spec else ''),
join_path('Programs', 'io.o'), join_path('Test', 'mtest.c'),
'-o', '%s/mtest' % prefix.bin, '-lmetis', '-lm')
@@ -186,6 +187,15 @@ class Metis(Package):
if '+shared' in spec:
options.append('-DSHARED:BOOL=ON')
+ else:
+ # Remove all RPATH options
+ # (RPATHxxx options somehow trigger cmake to link dynamically)
+ rpath_options = []
+ for o in options:
+ if o.find('RPATH') >= 0:
+ rpath_options.append(o)
+ for o in rpath_options:
+ options.remove(o)
if '+debug' in spec:
options.extend(['-DDEBUG:BOOL=ON',
'-DCMAKE_BUILD_TYPE:STRING=Debug'])
diff --git a/var/spack/repos/builtin/packages/mfem/mfem_ppc_build.patch b/var/spack/repos/builtin/packages/mfem/mfem_ppc_build.patch
new file mode 100644
index 0000000000..b403683105
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mfem/mfem_ppc_build.patch
@@ -0,0 +1,10 @@
+--- mfem/miniapps/performance/makefile 2017-06-07 13:51:29.366596901 -0700
++++ mfem/miniapps/performance/makefile.new 2017-06-07 13:51:57.087104178 -0700
+@@ -26,7 +26,6 @@
+ # Compiler specific optimizations.
+ # For best performance, GCC 5 (or newer) is recommended.
+ ifneq (,$(findstring $(MFEM_CXX),g++ mpicxx))
+- MFEM_CXXFLAGS += -march=native
+ # MFEM_CXXFLAGS += -std=c++03
+ MFEM_CXXFLAGS += -std=c++11
+ MFEM_CXXFLAGS += -pedantic -Wall
diff --git a/var/spack/repos/builtin/packages/mfem/package.py b/var/spack/repos/builtin/packages/mfem/package.py
index 45f64cef65..3afbd4ca2f 100644
--- a/var/spack/repos/builtin/packages/mfem/package.py
+++ b/var/spack/repos/builtin/packages/mfem/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,6 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import re
from spack import *
@@ -31,142 +32,226 @@ class Mfem(Package):
homepage = 'http://www.mfem.org'
url = 'https://github.com/mfem/mfem'
+ # mfem is downloaded from a URL shortener at request of upstream
+ # author Tzanio Kolev <tzanio@llnl.gov>. See here:
+ # https://github.com/mfem/mfem/issues/53
+ #
+ # The following procedure should be used to verify security when a
+ # new verison is added:
+ #
+ # 1. Verify that no checksums on old versions have changed.
+ #
+ # 2. Verify that the shortened URL for the new version is listed at:
+ # http://mfem.org/download/
+ #
+ # 3. Use http://getlinkinfo.com or similar to verify that the
+ # underling download link for the latest version comes has the
+ # prefix: http://mfem.github.io/releases
+ #
+ # If this quick verification procedure fails, additional discussion
+ # will be required to verify the new version.
+
+ version('3.3.2',
+ '01a762a5d0a2bc59ce4e2f59009045a4',
+ url='https://goo.gl/Kd7Jk8', extension='.tar.gz',
+ preferred=True)
+
+ version('laghos-v1.0', git='https://github.com/mfem/mfem',
+ tag='laghos-v1.0')
+
+ version('3.3',
+ 'b17bd452593aada93dc0fee748fcfbbf4f04ce3e7d77fdd0341cc9103bcacd0b',
+ url='http://goo.gl/Vrpsns', extension='.tar.gz')
+
version('3.2',
'2938c3deed4ec4f7fd5b5f5cfe656845282e86e2dcd477d292390058b7b94340',
- url='http://goo.gl/Y9T75B', preferred=True, extension='.tar.gz')
+ url='http://goo.gl/Y9T75B', extension='.tar.gz')
version('3.1',
'841ea5cf58de6fae4de0f553b0e01ebaab9cd9c67fa821e8a715666ecf18fc57',
url='http://goo.gl/xrScXn', extension='.tar.gz')
-# version('3.1', git='https://github.com/mfem/mfem.git',
-# commit='dbae60fe32e071989b52efaaf59d7d0eb2a3b574')
- variant('metis', default=False, description='Activate support for metis')
- variant('hypre', default=False, description='Activate support for hypre')
- variant('suite-sparse', default=False,
- description='Activate support for SuiteSparse')
- variant('mpi', default=True, description='Activate support for MPI')
+ variant('mpi', default=True,
+ description='Enable MPI parallelism')
+ variant('hypre', default=True,
+ description='Required for MPI parallelism')
+ variant('openmp', default=False,
+ description='Enable OpenMP parallelism')
+ variant('threadsafe', default=False,
+ description=('Enable thread safe features.'
+ ' Required for OpenMP.'
+ ' May cause minor performance issues.'))
variant('superlu-dist', default=False,
- description='Activate support for SuperLU_Dist')
- variant('lapack', default=False, description='Activate support for LAPACK')
- variant('debug', default=False, description='Build debug version')
- variant('netcdf', default=False, description='Activate NetCDF support')
-
- depends_on('blas', when='+lapack')
- depends_on('lapack', when='+lapack')
+ description='Enable MPI parallel, sparse direct solvers')
+ variant('suite-sparse', default=False,
+ description='Enable serial, sparse direct solvers')
+ variant('petsc', default=False,
+ description='Enable PETSc solvers, preconditioners, etc..')
+ variant('sundials', default=False,
+ description='Enable Sundials time integrators')
+ variant('mpfr', default=False,
+ description='Enable precise, 1D quadrature rules')
+ variant('lapack', default=False,
+ description='Use external blas/lapack routines')
+ variant('debug', default=False,
+ description='Build debug instead of optimized version')
+ variant('netcdf', default=False,
+ description='Enable Cubit/Genesis reader')
+ variant('gzstream', default=True,
+ description='Support zip\'d streams for I/O')
+ variant('examples', default=False,
+ description='Build and install examples')
+ variant('miniapps', default=False,
+ description='Build and install miniapps')
- depends_on('mpi', when='+mpi')
- depends_on('metis', when='+mpi')
- depends_on('hypre', when='+mpi')
+ conflicts('+mpi', when='~hypre')
+ conflicts('+suite-sparse', when='~lapack')
+ conflicts('+superlu-dist', when='@:3.1')
+ conflicts('+netcdf', when='@:3.1')
depends_on('hypre', when='+hypre')
-
- depends_on('metis@4:', when='+metis')
-
- depends_on('suite-sparse', when='+suite-sparse')
+ depends_on('blas', when='+lapack')
depends_on('blas', when='+suite-sparse')
+ depends_on('lapack', when='+lapack')
depends_on('lapack', when='+suite-sparse')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('metis')
+ depends_on('parmetis', when='+superlu-dist')
+ depends_on('metis@5:', when='+superlu-dist')
depends_on('metis@5:', when='+suite-sparse ^suite-sparse@4.5:')
- depends_on('cmake', when='^metis@5:', type='build')
+ depends_on('sundials@2.7:+hypre', when='+sundials')
+ depends_on('suite-sparse', when='+suite-sparse')
depends_on('superlu-dist', when='@3.2: +superlu-dist')
+ depends_on('petsc@3.8:', when='+petsc')
+ depends_on('mpfr', when='+mpfr')
depends_on('netcdf', when='@3.2: +netcdf')
depends_on('zlib', when='@3.2: +netcdf')
depends_on('hdf5', when='@3.2: +netcdf')
+ depends_on('libunwind', when='+debug')
+ depends_on('zlib', when='+gzstream')
- def check_variants(self, spec):
- if '+mpi' in spec and ('+hypre' not in spec or '+metis' not in spec):
- raise InstallError('mfem+mpi must be built with +hypre ' +
- 'and +metis!')
- if '+suite-sparse' in spec and ('+metis' not in spec or
- '+lapack' not in spec):
- raise InstallError('mfem+suite-sparse must be built with ' +
- '+metis and +lapack!')
- if 'metis@5:' in spec and '%clang' in spec and (
- '^cmake %gcc' not in spec):
- raise InstallError('To work around CMake bug with clang, must ' +
- 'build mfem with mfem[+variants] %clang ' +
- '^cmake %gcc to force CMake to build with gcc')
- if '@:3.1' in spec and '+superlu-dist' in spec:
- raise InstallError('MFEM does not support SuperLU_DIST for ' +
- 'versions 3.1 and earlier')
- if '@:3.1' in spec and '+netcdf' in spec:
- raise InstallError('MFEM does not support NetCDF for versions' +
- '3.1 and earlier')
- return
+ patch('mfem_ppc_build.patch', when='@3.2:3.3 arch=ppc64le')
+ #
+ # Note: Although MFEM does support CMake configuration, MFEM
+ # development team indicates that vanilla GNU Make is the
+ # preferred mode of configuration of MFEM and the mode most
+ # likely to be up to date in supporting *all* of MFEM's
+ # configuration options. So, don't use CMake
+ #
def install(self, spec, prefix):
- self.check_variants(spec)
- options = ['PREFIX=%s' % prefix]
+ def yes_no(varstr):
+ return 'YES' if varstr in self.spec else 'NO'
- if '+lapack' in spec:
- lapack_lib = (spec['lapack'].lapack_libs + spec['blas'].blas_libs).ld_flags # NOQA: ignore=E501
- options.extend([
- 'MFEM_USE_LAPACK=YES',
- 'LAPACK_OPT=-I%s' % spec['lapack'].prefix.include,
- 'LAPACK_LIB=%s' % lapack_lib])
+ metis5_str = 'NO'
+ if '+superlu-dist' in spec or \
+ spec.satisfies('+suite-sparse ^suite-sparse@4.5:') or \
+ spec['metis'].satisfies('@5:'):
+ metis5_str = 'YES'
+
+ threadsafe_str = 'NO'
+ if '+openmp' in spec or '+threadsafe' in spec:
+ threadsafe_str = 'YES'
+
+ options = [
+ 'PREFIX=%s' % prefix,
+ 'MFEM_USE_MEMALLOC=YES',
+ 'MFEM_DEBUG=%s' % yes_no('+debug'),
+ 'CXX=%s' % env['CXX'],
+ 'MFEM_USE_LIBUNWIND=%s' % yes_no('+debug'),
+ 'MFEM_USE_GZSTREAM=%s' % yes_no('+gzstream'),
+ 'MFEM_USE_METIS_5=%s' % metis5_str,
+ 'MFEM_THREAD_SAFE=%s' % threadsafe_str,
+ 'MFEM_USE_MPI=%s' % yes_no('+mpi'),
+ 'MFEM_USE_LAPACK=%s' % yes_no('+lapack'),
+ 'MFEM_USE_SUPERLU=%s' % yes_no('+superlu-dist'),
+ 'MFEM_USE_SUITESPARSE=%s' % yes_no('+suite-sparse'),
+ 'MFEM_USE_SUNDIALS=%s' % yes_no('+sundials'),
+ 'MFEM_USE_PETSC=%s' % yes_no('+petsc'),
+ 'MFEM_USE_NETCDF=%s' % yes_no('+netcdf'),
+ 'MFEM_USE_MPFR=%s' % yes_no('+mpfr'),
+ 'MFEM_USE_OPENMP=%s' % yes_no('+openmp')]
+
+ if '+mpi' in spec:
+ options += ['MPICXX=%s' % spec['mpi'].mpicxx]
if '+hypre' in spec:
- options.extend([
+ options += [
'HYPRE_DIR=%s' % spec['hypre'].prefix,
'HYPRE_OPT=-I%s' % spec['hypre'].prefix.include,
- 'HYPRE_LIB=-L%s' % spec['hypre'].prefix.lib +
- ' -lHYPRE'])
-
- if 'parmetis' in spec:
- metis_lib = '-L%s -lparmetis -lmetis' % spec['parmetis'].prefix.lib
- metis_str = 'MFEM_USE_METIS_5=YES'
- options.extend([metis_str,
- 'METIS_DIR=%s' % spec['parmetis'].prefix,
- 'METIS_OPT=-I%s' % spec['parmetis'].prefix.include,
- 'METIS_LIB=%s' % metis_lib])
- elif 'metis' in spec:
- metis_lib = '-L%s -lmetis' % spec['metis'].prefix.lib
- if spec['metis'].satisfies('@5:'):
- metis_str = 'MFEM_USE_METIS_5=YES'
- else:
- metis_str = 'MFEM_USE_METIS_5=NO'
- options.extend([
- metis_str,
- 'METIS_DIR=%s' % spec['metis'].prefix,
- 'METIS_OPT=-I%s' % spec['metis'].prefix.include,
- 'METIS_LIB=%s' % metis_lib])
+ 'HYPRE_LIB=-L%s' % spec['hypre'].prefix.lib + ' -lHYPRE']
- if 'mpi' in spec:
- options.extend(['MFEM_USE_MPI=YES'])
+ if '+lapack' in spec:
+ lapack_lib = (spec['lapack'].libs + spec['blas'].libs).ld_flags # NOQA: ignore=E501
+ options += [
+ 'LAPACK_OPT=-I%s' % spec['lapack'].prefix.include,
+ 'LAPACK_LIB=%s' % lapack_lib]
if '+superlu-dist' in spec:
+ metis_lib = '-L%s -lparmetis -lmetis' % spec['parmetis'].prefix.lib
+ options += [
+ 'METIS_DIR=%s' % spec['parmetis'].prefix,
+ 'METIS_OPT=-I%s' % spec['parmetis'].prefix.include,
+ 'METIS_LIB=%s' % metis_lib]
superlu_lib = '-L%s' % spec['superlu-dist'].prefix.lib
superlu_lib += ' -lsuperlu_dist'
- sl_inc = 'SUPERLU_OPT=-I%s' % spec['superlu-dist'].prefix.include
- options.extend(['MFEM_USE_SUPERLU=YES',
- 'SUPERLU_DIR=%s' % spec['superlu-dist'].prefix,
- sl_inc,
- 'SUPERLU_LIB=%s' % superlu_lib])
+ options += [
+ 'SUPERLU_DIR=%s' % spec['superlu-dist'].prefix,
+ 'SUPERLU_OPT=-I%s' % spec['superlu-dist'].prefix.include,
+ 'SUPERLU_LIB=%s' % superlu_lib]
+ else:
+ metis_lib = '-L%s -lmetis' % spec['metis'].prefix.lib
+ options += [
+ 'METIS_DIR=%s' % spec['metis'].prefix,
+ 'METIS_OPT=-I%s' % spec['metis'].prefix.include,
+ 'METIS_LIB=%s' % metis_lib]
if '+suite-sparse' in spec:
ssp = spec['suite-sparse'].prefix
ss_lib = '-L%s' % ssp.lib
-
if '@3.2:' in spec:
ss_lib += ' -lklu -lbtf'
-
ss_lib += (' -lumfpack -lcholmod -lcolamd' +
' -lamd -lcamd -lccolamd -lsuitesparseconfig')
-
- no_librt_archs = ['darwin-i686', 'darwin-x86_64']
- no_rt = any(map(lambda a: spec.satisfies('=' + a),
- no_librt_archs))
+ no_rt = spec.satisfies('platform=darwin')
if not no_rt:
ss_lib += ' -lrt'
ss_lib += (' ' + metis_lib + ' ' + lapack_lib)
+ options += [
+ 'SUITESPARSE_DIR=%s' % ssp,
+ 'SUITESPARSE_OPT=-I%s' % ssp.include,
+ 'SUITESPARSE_LIB=%s' % ss_lib]
+
+ if '+sundials' in spec:
+ sundials_libs = (
+ '-lsundials_arkode -lsundials_cvode'
+ ' -lsundials_nvecserial -lsundials_kinsol')
+ if '+mpi' in spec:
+ sundials_libs += (
+ ' -lsundials_nvecparhyp -lsundials_nvecparallel')
+ options += [
+ 'SUNDIALS_DIR=%s' % spec['sundials'].prefix,
+ 'SUNDIALS_OPT=-I%s' % spec['sundials'].prefix.include,
+ 'SUNDIALS_LIB=-L%s %s' % (spec['sundials'].prefix.lib,
+ sundials_libs)]
- options.extend(['MFEM_USE_SUITESPARSE=YES',
- 'SUITESPARSE_DIR=%s' % ssp,
- 'SUITESPARSE_OPT=-I%s' % ssp.include,
- 'SUITESPARSE_LIB=%s' % ss_lib])
+ if '+petsc' in spec:
+ f = open('%s/lib/pkgconfig/PETSc.pc' % spec['petsc'].prefix, 'r')
+ for line in f:
+ if re.search('^\s*Cflags: ', line):
+ petsc_opts = re.sub('^\s*Cflags: (.*)', '\\1', line)
+ elif re.search('^\s*Libs.*: ', line):
+ petsc_libs = re.sub('^\s*Libs.*: (.*)', '\\1', line)
+ f.close()
+ options += [
+ 'PETSC_DIR=%s' % spec['petsc'].prefix,
+ 'PETSC_OPT=%s' % petsc_opts,
+ 'PETSC_LIB=-L%s -lpetsc %s' %
+ (spec['petsc'].prefix.lib, petsc_libs)]
if '+netcdf' in spec:
np = spec['netcdf'].prefix
@@ -175,28 +260,31 @@ class Mfem(Package):
nlib = '-L%s -lnetcdf ' % np.lib
nlib += '-L%s -lhdf5_hl -lhdf5 ' % h5p.lib
nlib += '-L%s -lz' % zp.lib
- options.extend(['MFEM_USE_NETCDF=YES',
- 'NETCDF_DIR=%s' % np,
- 'HDF5_DIR=%s' % h5p,
- 'ZLIB_DIR=%s' % zp,
- 'NETCDF_OPT=-I%s' % np.include,
- 'NETCDF_LIB=%s' % nlib])
+ options += [
+ 'NETCDF_DIR=%s' % np,
+ 'HDF5_DIR=%s' % h5p,
+ 'ZLIB_DIR=%s' % zp,
+ 'NETCDF_OPT=-I%s' % np.include,
+ 'NETCDF_LIB=%s' % nlib]
- if '+debug' in spec:
- options.extend(['MFEM_DEBUG=YES'])
+ if '+mpfr' in spec:
+ options += ['MPFR_LIB=-L%s -lmpfr' % spec['mpfr'].prefix.lib]
+
+ if '+openmp' in spec:
+ options += ['OPENMP_OPT = %s' % self.compiler.openmp_flag]
make('config', *options)
- make('all')
+ make('lib')
- # Run a small test before installation
- args = ['-m', join_path('data', 'star.mesh'), '--no-visualization']
- if '+mpi' in spec:
- Executable(join_path(spec['mpi'].prefix.bin,
- 'mpirun'))('-np',
- '4',
- join_path('examples', 'ex1p'),
- *args)
- else:
- Executable(join_path('examples', 'ex1'))(*args)
+ if self.run_tests:
+ make('check')
make('install')
+
+ if '+examples' in spec:
+ make('examples')
+ install_tree('examples', join_path(prefix, 'examples'))
+
+ if '+miniapps' in spec:
+ make('miniapps')
+ install_tree('miniapps', join_path(prefix, 'miniapps'))
diff --git a/var/spack/repos/builtin/packages/microbiomeutil/package.py b/var/spack/repos/builtin/packages/microbiomeutil/package.py
new file mode 100644
index 0000000000..319148f71d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/microbiomeutil/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Microbiomeutil(MakefilePackage):
+ """Microbiome analysis utilities"""
+
+ homepage = "http://microbiomeutil.sourceforge.net/"
+ url = "https://downloads.sourceforge.net/project/microbiomeutil/microbiomeutil-r20110519.tgz"
+
+ version('20110519', '11eaac4b0468c05297ba88ec27bd4b56')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('blast-plus')
+ depends_on('cdbfasta')
+
+ def install(self, spec, prefix):
+ install_tree('ChimeraSlayer', prefix.ChimeraSlayer)
+ install_tree('NAST-iEr', join_path(prefix, 'NAST-iEr'))
+ install_tree('TreeChopper', prefix.TreeChopper)
+ install_tree('WigeoN', prefix.WigeoN)
+ install_tree('docs', prefix.docs)
+ install_tree('RESOURCES', prefix.resources)
+ install_tree('AmosCmp16Spipeline', prefix.AmosCmp16Spipeline)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', self.prefix.ChimeraSlayer)
+ run_env.prepend_path('PATH', join_path(self.prefix, 'NAST-iEr'))
+ run_env.prepend_path('PATH', self.prefix.TreeChopper)
+ run_env.prepend_path('PATH', self.prefix.WigeoN)
diff --git a/var/spack/repos/builtin/packages/miniaero/package.py b/var/spack/repos/builtin/packages/miniaero/package.py
new file mode 100644
index 0000000000..da1421963f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/miniaero/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 Miniaero(MakefilePackage):
+ """Proxy Application. MiniAero is a mini-application for the evaulation
+ of programming models and hardware for next generation platforms.
+ """
+
+ homepage = "http://mantevo.org"
+ url = "https://github.com/Mantevo/miniAero.git"
+
+ tags = ['proxy-app']
+
+ version('2016-11-11', git='https://github.com/Mantevo/miniAero.git',
+ commit='f46d135479a5be19ec5d146ccaf0e581aeff4596')
+
+ depends_on('kokkos')
+
+ @property
+ def build_targets(self):
+ targets = [
+ '--directory=kokkos',
+ 'CXX=c++',
+ 'KOKKOS_PATH={0}'.format(self.spec['kokkos'].prefix)
+ ]
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('kokkos/miniAero.host', prefix.bin)
+ install('kokkos/README', prefix.doc)
+ install('kokkos/tests/3D_Sod_Serial/miniaero.inp', prefix.bin)
+ install_tree('kokkos/tests', prefix.doc.tests)
diff --git a/var/spack/repos/builtin/packages/miniamr/package.py b/var/spack/repos/builtin/packages/miniamr/package.py
new file mode 100644
index 0000000000..1740ab461c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/miniamr/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Miniamr(MakefilePackage):
+ """Proxy Application. 3D stencil calculation with
+ Adaptive Mesh Refinement (AMR)
+ """
+
+ homepage = "https://mantevo.org"
+ url = "https://github.com/Mantevo/miniAMR/archive/v1.4.tar.gz"
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('1.4.0', '3aab0247047a94e343709cf2e51cc46e')
+
+ variant('mpi', default=True, description='Build with MPI support')
+
+ depends_on('mpi', when="+mpi")
+
+ @property
+ def build_targets(self):
+ targets = []
+ if '+mpi' in self.spec:
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+ targets.append('LD={0}'.format(self.spec['mpi'].mpicc))
+ targets.append('LDLIBS=-lm')
+ else:
+ targets.append('CC={0}'.format(self.compiler.cc))
+ targets.append('LD={0}'.format(self.compiler.cc))
+ targets.append('--directory=ref')
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual installation
+ mkdir(prefix.bin)
+ mkdir(prefix.doc)
+
+ install('ref/ma.x', prefix.bin)
+ # Install Support Documents
+ install('ref/README', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/miniconda2/package.py b/var/spack/repos/builtin/packages/miniconda2/package.py
new file mode 100644
index 0000000000..7433b2d731
--- /dev/null
+++ b/var/spack/repos/builtin/packages/miniconda2/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 *
+from six.moves.urllib.parse import urlparse
+from os.path import split
+
+
+class Miniconda2(Package):
+ """The minimalist bootstrap toolset for conda and Python2."""
+
+ homepage = "https://conda.io/miniconda.html"
+ url = "https://repo.continuum.io/miniconda/Miniconda2-4.3.11-Linux-x86_64.sh"
+
+ version('4.3.14', '8cb075cf5462480980ef2373ad9fad38', expand=False)
+ version('4.3.11', 'd573980fe3b5cdf80485add2466463f5', expand=False)
+
+ def install(self, spec, prefix):
+ # peel the name of the script out of the url
+ result = urlparse(self.url)
+ dir, script = split(result.path)
+ bash = which('bash')
+ bash(script, '-b', '-f', '-p', self.prefix)
diff --git a/var/spack/repos/builtin/packages/miniconda3/package.py b/var/spack/repos/builtin/packages/miniconda3/package.py
new file mode 100644
index 0000000000..faaa786b6c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/miniconda3/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 *
+from six.moves.urllib.parse import urlparse
+from os.path import split
+
+
+class Miniconda3(Package):
+ """The minimalist bootstrap toolset for conda and Python3."""
+
+ homepage = "https://conda.io/miniconda.html"
+ url = "https://repo.continuum.io/miniconda/Miniconda3-4.3.11-Linux-x86_64.sh"
+
+ version('4.3.14', 'fc6fc37479e3e3fcf3f9ba52cae98991', expand=False)
+ version('4.3.11', '1924c8d9ec0abf09005aa03425e9ab1a', expand=False)
+
+ def install(self, spec, prefix):
+ # peel the name of the script out of the url
+ result = urlparse(self.url)
+ dir, script = split(result.path)
+ bash = which('bash')
+ bash(script, '-b', '-f', '-p', self.prefix)
diff --git a/var/spack/repos/builtin/packages/minife/package.py b/var/spack/repos/builtin/packages/minife/package.py
new file mode 100644
index 0000000000..0757a8c6db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minife/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Minife(MakefilePackage):
+ """Proxy Application. MiniFE is an proxy application
+ for unstructured implicit finite element codes.
+ """
+
+ homepage = "https://mantevo.org/"
+ url = "https://github.com/Mantevo/miniFE/archive/v2.1.0.tar.gz"
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('2.1.0', '930a6b99c09722428a6f4d795b506a62')
+
+ variant('build', default='ref', description='Type of Parallelism',
+ values=('ref', 'openmp_ref', 'qthreads', 'kokkos'))
+
+ depends_on('mpi')
+ depends_on('qthreads', when='build=qthreads')
+
+ @property
+ def build_targets(self):
+ targets = [
+ '--directory={0}/src'.format(self.spec.variants['build'].value),
+ 'CXX={0}'.format(self.spec['mpi'].mpicxx),
+ 'CC={0}'.format(self.spec['mpi'].mpicc)
+ ]
+
+ return targets
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('{0}/src/Makefile'.format(
+ self.spec.variants['build'].value))
+
+ makefile.filter('-fopenmp', self.compiler.openmp_flag, string=True)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('{0}/src/miniFE.x'.format(self.spec.variants['build'].value),
+ prefix.bin)
diff --git a/var/spack/repos/builtin/packages/minighost/package.py b/var/spack/repos/builtin/packages/minighost/package.py
new file mode 100644
index 0000000000..f397306645
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minighost/package.py
@@ -0,0 +1,96 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import tarfile
+
+from spack import *
+
+
+class Minighost(MakefilePackage):
+ """Proxy Application. A Finite Difference proxy
+ application which implements a difference stencil
+ across a homogenous three dimensional domain.
+ """
+
+ homepage = "http://mantevo.org"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/MiniGhost/miniGhost_1.0.1.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.0.1', '2a4ac4383e9be00f87b6067c3cfe6463')
+
+ variant('mpi', default=True, description='Enable MPI Support')
+
+ depends_on('mpi', when='+mpi')
+
+ parallel = False
+
+ @property
+ def build_targets(self):
+ targets = ['--directory=miniGhost_ref']
+
+ if '+mpi' in self.spec:
+ targets.append('PROTOCOL=-D_MG_MPI')
+ targets.append('FC={0}'.format(self.spec['mpi'].mpif77))
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+ targets.append(
+ 'LIBS=-lm -lgfortran -lmpi_usempi -lmpi_mpifh -lmpi')
+ else:
+ targets.append('PROTOCOL=-D_MG_SERIAL')
+ targets.append('FC=f77')
+ targets.append('CC=cc')
+ targets.append('LIBS=-lm -lgfortran')
+
+ if '%gcc' in self.spec:
+ targets.append('COMPILER_SUITE=gnu')
+ elif '%cce' in self.spec:
+ targets.append('COMPILER_SUITE=cray')
+ elif '%intel' in self.spec:
+ targets.append('COMPILER_SUITE=intel')
+ elif '%pgi' in self.spec:
+ targets.append('COMPILER_SUITE=pgi')
+
+ return targets
+
+ def edit(self, spec, prefix):
+ inner_tar = tarfile.open(
+ 'miniGhost_ref_{0}.tar.gz'.format(self.version.up_to(3)))
+ inner_tar.extractall()
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('miniGhost_ref/miniGhost.x', prefix.bin)
+ install('miniGhost_ref/default-settings.h', prefix.bin)
+
+ if '+mpi' in spec:
+ install('miniGhost_ref/runtest.mpi', prefix.bin)
+ install('miniGhost_ref/runtest.mpi.ds', prefix.bin)
+ else:
+ install('miniGhost_ref/runtest.serial', prefix.bin)
+
+ install('README', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/minigmg/package.py b/var/spack/repos/builtin/packages/minigmg/package.py
new file mode 100644
index 0000000000..8cbd35faff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minigmg/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Minigmg(Package):
+ """miniGMG is a compact benchmark for understanding the performance
+ challenges associated with geometric multigrid solvers
+ found in applications built from AMR MG frameworks
+ like CHOMBO or BoxLib when running
+ on modern multi- and manycore-based supercomputers.
+ It includes both productive reference examples as well as
+ highly-optimized implementations for CPUs and GPUs.
+ It is sufficiently general that it has been used to evaluate
+ a broad range of research topics including PGAS programming models
+ and algorithmic tradeoffs inherit in multigrid. miniGMG was developed
+ under the CACHE Joint Math-CS Institute.
+
+ Note, miniGMG code has been supersceded by HPGMG. """
+
+ homepage = "http://crd.lbl.gov/departments/computer-science/PAR/research/previous-projects/miniGMG/"
+ url = "http://crd.lbl.gov/assets/Uploads/FTG/Projects/miniGMG/miniGMG.tar.gz"
+
+ version('master', '975a2a118403fc0024b5e04cef280e95')
+
+ depends_on('mpi')
+
+ phases = ['build', 'install']
+
+ def build(self, spec, prefix):
+ cc = Executable(spec['mpi'].mpicc)
+ cc('-O3', self.compiler.openmp_flag, 'miniGMG.c',
+ 'mg.c', 'box.c', 'solver.c', 'operators.ompif.c', 'timer.x86.c',
+ '-D__MPI', '-D__COLLABORATIVE_THREADING=6',
+ '-D__TEST_MG_CONVERGENCE', '-D__PRINT_NORM', '-D__USE_BICGSTAB',
+ '-o', 'run.miniGMG', '-lm')
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('run.miniGMG', prefix.bin)
+ mkdir(prefix.jobs)
+ files = glob.glob('job*')
+ for f in files:
+ install(f, prefix.jobs)
diff --git a/var/spack/repos/builtin/packages/minimap2/package.py b/var/spack/repos/builtin/packages/minimap2/package.py
new file mode 100644
index 0000000000..17abaaeafa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minimap2/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Minimap2(MakefilePackage):
+ """Minimap2 is a versatile sequence alignment program that aligns DNA or
+ mRNA sequences against a large reference database."""
+
+ homepage = "https://github.com/lh3/minimap2"
+ url = "https://github.com/lh3/minimap2/releases/download/v2.2/minimap2-2.2.tar.bz2"
+
+ version('2.2', '5b68e094f4fa3dfbd9b37d5b654b7715')
+
+ depends_on('py-mappy', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('minimap2', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/minimd/package.py b/var/spack/repos/builtin/packages/minimd/package.py
new file mode 100644
index 0000000000..a9a6d90aa2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minimd/package.py
@@ -0,0 +1,76 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import glob
+import tarfile
+
+from spack import *
+
+
+class Minimd(MakefilePackage):
+ """Proxy Application. A simple proxy for the force computations
+ in a typical molecular dynamics applications.
+ """
+
+ homepage = "http://mantevo.org"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/MiniMD/miniMD_1.2.tgz"
+
+ tags = ['proxy-app']
+
+ version('1.2', '893ef1ca5062e32b43a8d11bcfe1a056')
+
+ depends_on('mpi')
+
+ build_directory = 'miniMD_ref'
+
+ @property
+ def build_targets(self):
+ targets = [
+ 'LINK={0}'.format(self.spec['mpi'].mpicxx),
+ 'CC={0}'.format(self.spec['mpi'].mpicxx),
+ 'CCFLAGS={0} -DMPICH_IGNORE_CXX_SEEK -DNOCHUNK'.format(
+ self.compiler.openmp_flag),
+ 'EXE=miniMD_mpi',
+ 'openmpi'
+ ]
+
+ return targets
+
+ def edit(self, spec, prefix):
+ inner_tar = tarfile.open(name='miniMD_{0}_ref.tgz'.format(
+ self.version.up_to(2)))
+ inner_tar.extractall()
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('miniMD_ref/miniMD_mpi', prefix.bin)
+ install('miniMD_ref/in.lj.miniMD', prefix.bin)
+ install('miniMD_ref/README', prefix.doc)
+
+ for f in glob.glob('miniMD_ref/in.*'):
+ install(f, prefix.doc)
diff --git a/var/spack/repos/builtin/packages/minismac2d/package.py b/var/spack/repos/builtin/packages/minismac2d/package.py
new file mode 100644
index 0000000000..4e961fac94
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minismac2d/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# 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/spack/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 Minismac2d(MakefilePackage):
+ """Proxy Application. Solves the finite-differenced 2D incompressible
+ Navier-Stokes equations with Spalart-Allmaras one-equation
+ turbulence model on a structured body conforming grid.
+ """
+
+ homepage = "http://mantevo.org"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/MiniSMAC2D/miniSMAC2D-2.0.tgz"
+
+ tags = ['proxy-app']
+
+ version('2.0', '1bb1a52cea21bc9162bf7a71a6ddf37d')
+
+ depends_on('mpi')
+
+ parallel = False
+
+ @property
+ def build_targets(self):
+ targets = [
+ 'CPP=cpp',
+ 'FC={0}'.format(self.spec['mpi'].mpifc),
+ 'LD={0}'.format(self.spec['mpi'].mpifc),
+ 'MPIDIR=-I{0}/include'.format(self.spec['mpi'].prefix),
+ 'CPPFLAGS=-P -traditional -DD_PRECISION',
+ 'FFLAGS=-O3 -c -g -DD_PRECISION',
+ 'LDFLAGS=-O3',
+ '--file=Makefile_mpi_only'
+ ]
+
+ return targets
+
+ def edit(self, spec, prefix):
+ # Editing input file to point to installed data files
+ param_file = FileFilter('smac2d.in')
+ param_file.filter('bcmain_directory=.*', "bcmain_directory='.'")
+ param_file.filter('bcmain_filename=.*',
+ "bcmain_filename='bcmain.dat_original_119x31'")
+ param_file.filter('xygrid_directory=.*', "xygrid_directory='.'")
+ param_file.filter('xygrid_filename=.*',
+ "xygrid_filename='xy.dat_original_119x31'")
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('smac2d_mpi_only', prefix.bin)
+ install('bcmain.dat_original_119x31', prefix.bin)
+ install('xy.dat_original_119x31', prefix.bin)
+ install('smac2d.in', prefix.bin)
+ install('README.txt', prefix.doc)
diff --git a/var/spack/repos/builtin/packages/minitri/package.py b/var/spack/repos/builtin/packages/minitri/package.py
new file mode 100644
index 0000000000..6451a8b86a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minitri/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 Minitri(MakefilePackage):
+ """A simple, triangle-based data analytics proxy application."""
+
+ homepage = "https://github.com/Mantevo/miniTri"
+ url = "https://github.com/Mantevo/miniTri/archive/v1.0.tar.gz"
+
+ version('1.0', '947e296ca408275232f47724267a85ce')
+
+ variant('mpi', default=True, description='Build with MPI support')
+
+ depends_on('mpi', when="+mpi")
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ @property
+ def build_targets(self):
+ targets = []
+ if '+mpi' in self.spec:
+ targets.append('CCC={0}'.format(self.spec['mpi'].mpicxx))
+ targets.append('--directory=miniTri/linearAlgebra/MPI')
+ else:
+ targets.append('CCC={0}'.format(self.compiler.cxx))
+ targets.append('--directory=miniTri/linearAlgebra/serial')
+
+ targets.append('--file=Makefile')
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual installation
+ mkdir(prefix.bin)
+ mkdir(prefix.doc)
+
+ if '+mpi' in spec:
+ install('miniTri/linearAlgebra/MPI/miniTri.exe', prefix.bin)
+ else:
+ install('miniTri/linearAlgebra/serial/miniTri.exe', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/minixyce/package.py b/var/spack/repos/builtin/packages/minixyce/package.py
new file mode 100644
index 0000000000..6273838f7e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/minixyce/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Minixyce(MakefilePackage):
+ """Proxy Application. A portable proxy of some of the key
+ capabilities in the electrical modeling Xyce.
+ """
+
+ homepage = "https://mantevo.org"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/MiniXyce/miniXyce_1.0.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.0', '6fc0e5a561af0b8ff581d9f704194133')
+
+ variant('mpi', default=True, description='Build with MPI Support')
+
+ depends_on('mpi', when='+mpi')
+
+ @property
+ def build_targets(self):
+ targets = []
+
+ if '+mpi' in self.spec:
+ targets.append('CXX={0}'.format(self.spec['mpi'].mpicxx))
+ targets.append('LINKER={0}'.format(self.spec['mpi'].mpicxx))
+ targets.append('USE_MPI=-DHAVE_MPI -DMPICH_IGNORE_CXX_SEEK')
+ else:
+ targets.append('CXX=c++')
+ targets.append('LINKER=c++')
+ targets.append('USE_MPI=')
+
+ # Remove Compiler Specific Optimization Flags
+ if '%gcc' not in self.spec:
+ targets.append('CPP_OPT_FLAGS=')
+
+ return targets
+
+ def build(self, spec, prefix):
+ with working_dir('miniXyce_ref'):
+ # Call Script Targets First to Generate Needed Files
+ make('generate_info')
+ make('common_files')
+ make(*self.build_targets)
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
+
+ install('miniXyce_ref/miniXyce.x', prefix.bin)
+ install('miniXyce_ref/default_params.txt', prefix.bin)
+ install('README', prefix.doc)
+
+ install_tree('miniXyce_ref/tests/', prefix.doc.tests)
diff --git a/var/spack/repos/builtin/packages/mirdeep/package.py b/var/spack/repos/builtin/packages/mirdeep/package.py
new file mode 100644
index 0000000000..28981eade5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mirdeep/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Mirdeep(Package):
+ """miRDeep2 is a completely overhauled tool which discovers microRNA genes
+ by analyzing sequenced RNAs."""
+
+ homepage = "https://www.mdc-berlin.de/8551903/en/"
+ url = "https://www.mdc-berlin.de/45995549/en/research/research_teams/systems_biology_of_gene_regulatory_elements/projects/miRDeep/mirdeep2_0_0_8.zip"
+
+ version('2.0.0.8', 'a707f7d7ad4a2975fb8b2e78c5bcf483')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('perl-pdf-api2', type=('build', 'run'))
+ depends_on('bowtie')
+ depends_on('viennarna')
+ depends_on('squid')
+ depends_on('randfold')
+
+ def url_for_version(self, version):
+ url = 'https://www.mdc-berlin.de/45995549/en/research/research_teams/systems_biology_of_gene_regulatory_elements/projects/miRDeep/mirdeep{0}.zip'
+ return url.format(version.underscored)
+
+ def patch(self):
+ with working_dir('src'):
+ files = glob.iglob("*.pl")
+ for file in files:
+ change = FileFilter(file)
+ change.filter('usr/bin/perl', 'usr/bin/env perl')
+ change.filter('perl -W', 'perl')
+ change.filter("../Rfam_for_miRDeep.fa",
+ "Rfam_for_miRDeep.fa")
+ change.filter("../install_successful",
+ "install_successful")
+
+ def install(self, spec, prefix):
+ install_tree('src', prefix.bin)
+ install('Rfam_for_miRDeep.fa', prefix.bin)
+ # miRDeep looks for the install_sucessful file to check if you used
+ # their automated install script which we'll just be kind of hacking
+ # around
+ touch(prefix.bin.install_successful)
diff --git a/var/spack/repos/builtin/packages/mitofates/package.py b/var/spack/repos/builtin/packages/mitofates/package.py
new file mode 100644
index 0000000000..0ba5535b3d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mitofates/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Mitofates(Package):
+ """MitoFates predicts mitochondrial presequence, a cleavable localization
+ signal located in N-terminal, and its cleaved position."""
+
+ homepage = "http://mitf.cbrc.jp/MitoFates/cgi-bin/top.cgi"
+ url = "http://mitf.cbrc.jp/MitoFates/program/MitoFates_1.2.tar.gz"
+
+ version('1.2', 'aaac42a8e8c7318a4abde9df3a4b72d1')
+
+ depends_on('libsvm')
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install('MitoFates.pl', prefix)
diff --git a/var/spack/repos/builtin/packages/mitos/package.py b/var/spack/repos/builtin/packages/mitos/package.py
index d577a1b285..1cc402590b 100644
--- a/var/spack/repos/builtin/packages/mitos/package.py
+++ b/var/spack/repos/builtin/packages/mitos/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,19 @@
from spack import *
-class Mitos(Package):
+class Mitos(CMakePackage):
"""Mitos is a library and a tool for collecting sampled memory
performance data to view with MemAxes"""
homepage = "https://github.com/llnl/Mitos"
- url = "https://github.com/llnl/Mitos"
+ url = "https://github.com/LLNL/Mitos/archive/v0.9.1.tar.gz"
version('0.9.2',
git='https://github.com/llnl/Mitos.git',
commit='8cb143a2e8c00353ff531a781a9ca0992b0aaa3d')
-
- version('0.9.1', git='https://github.com/llnl/Mitos.git', tag='v0.9.1')
+ version('0.9.1', 'c6cb57f3cae54f5157affd97ef7ef79e')
depends_on('dyninst@8.2.1:')
depends_on('hwloc')
depends_on('mpi')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
- make()
- make("install")
+ depends_on('cmake@2.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/mkfontdir/package.py b/var/spack/repos/builtin/packages/mkfontdir/package.py
index 15c85b24e4..f1f12b514e 100644
--- a/var/spack/repos/builtin/packages/mkfontdir/package.py
+++ b/var/spack/repos/builtin/packages/mkfontdir/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mkfontdir(Package):
+class Mkfontdir(AutotoolsPackage):
"""mkfontdir creates the fonts.dir files needed by the legacy X server
core font system. The current implementation is a simple wrapper script
around the mkfontscale program, which must be built and installed first."""
@@ -39,9 +39,3 @@ class Mkfontdir(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/mkfontscale/package.py b/var/spack/repos/builtin/packages/mkfontscale/package.py
index 4c907831b6..9e8945f045 100644
--- a/var/spack/repos/builtin/packages/mkfontscale/package.py
+++ b/var/spack/repos/builtin/packages/mkfontscale/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Mkfontscale(Package):
+class Mkfontscale(AutotoolsPackage):
"""mkfontscale creates the fonts.scale and fonts.dir index files used by the
legacy X11 font system."""
@@ -40,9 +40,3 @@ class Mkfontscale(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/mlhka/package.py b/var/spack/repos/builtin/packages/mlhka/package.py
new file mode 100644
index 0000000000..85a23d5edd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mlhka/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Mlhka(Package):
+ """A maximum likelihood ratio test of natural selection, using polymorphism
+ and divergence data."""
+
+ homepage = "https://wright.eeb.utoronto.ca"
+ url = "https://github.com/rossibarra/MLHKA"
+
+ version('2.1', git='https://github.com/rossibarra/MLHKA.git',
+ commit='e735ddd39073af58da21b00b27dea203736e5467')
+
+ def install(self, spec, prefix):
+ cxx = which('c++')
+ cxx('MLHKA_version{0}.cpp'.format(self.version), '-o', 'MLHKA')
+ mkdirp(prefix.bin)
+ install('MLHKA', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/moab/package.py b/var/spack/repos/builtin/packages/moab/package.py
index b783d7b81b..8e84f63b2c 100644
--- a/var/spack/repos/builtin/packages/moab/package.py
+++ b/var/spack/repos/builtin/packages/moab/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Moab(Package):
+class Moab(AutotoolsPackage):
"""MOAB is a component for representing and evaluating mesh
data. MOAB can store structured and unstructured mesh, consisting
of elements in the finite element 'zoo.' The functional interface
@@ -34,19 +34,43 @@ class Moab(Package):
optimized for efficiency in space and time, based on access to
mesh in chunks rather than through individual entities, while also
versatile enough to support individual entity access."""
+
homepage = "https://bitbucket.org/fathomteam/moab"
- url = "http://ftp.mcs.anl.gov/pub/fathom/moab-4.6.3.tar.gz"
+ url = "http://ftp.mcs.anl.gov/pub/fathom/moab-5.0.0.tar.gz"
+ version('5.0.0', '1840ca02366f4d3237d44af63e239e3b')
+ version('4.9.2', '540931a604c180bbd3c1bb3ee8c51dd0')
version('4.9.1', '19cc2189fa266181ad9109b18d0b2ab8')
version('4.9.0', '40695d0a159040683cfa05586ad4a7c2')
version('4.8.2', '1dddd10f162fce3cfffaedc48f6f467d')
+ variant('mpi', default=True, description='enable mpi support')
+ variant('hdf5', default=True,
+ description='Required to enable the hdf5 (default I/O) format')
+ variant('netcdf', default=False,
+ description='Required to enable the ExodusII reader/writer.')
+ variant('pnetcdf', default=False,
+ description='Enable pnetcdf (AKA parallel-netcdf) support')
variant('netcdf', default=False,
description='Required to enable the ExodusII reader/writer.')
- variant('shared', default=True,
+ variant('zoltan', default=False, description='Enable zoltan support')
+ variant('cgm', default=False, description='Enable common geometric module')
+ variant('metis', default=True, description='Enable metis link')
+ variant('parmetis', default=True, description='Enable parmetis link')
+ variant('irel', default=False, description='Enable irel interface')
+ variant('fbigeom', default=False, description='Enable fbigeom interface')
+ variant('coupler', default=True, description='Enable mbcoupler tool')
+
+ variant("debug", default=False, description='enable debug symbols')
+ variant('shared', default=False,
description='Enables the build of shared libraries')
variant('fortran', default=True, description='Enable Fortran support')
+ conflicts('+irel', when='~cgm')
+ conflicts('+pnetcdf', when='~mpi')
+ conflicts('+parmetis', when='~mpi')
+ conflicts('+coupler', when='~mpi')
+
# There are many possible variants for MOAB. Here are examples for
# two of them:
#
@@ -55,37 +79,120 @@ class Moab(Package):
# depends_on('cgns', when='+cgns')
# depends_on('vtk', when='+vtk')
- depends_on('mpi')
- depends_on('hdf5+mpi')
- depends_on('netcdf+mpi', when='+netcdf')
- depends_on('parmetis')
- depends_on('zoltan')
- depends_on('zoltan~fortran', when='~fortran')
+ depends_on('blas')
+ depends_on('mpi', when='+mpi')
+ depends_on('hdf5', when='+hdf5')
+ depends_on('hdf5+mpi', when='+hdf5+mpi')
+ depends_on('netcdf', when='+netcdf')
+ depends_on('parallel-netcdf', when='+pnetcdf')
+ depends_on('cgm', when='+cgm')
+ depends_on('metis', when='+metis')
+ depends_on('parmetis', when='+parmetis')
+ # FIXME it seems that zoltan needs to be built without fortran
+ depends_on('zoltan~fortran', when='+zoltan')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
options = [
- '--prefix=%s' % prefix,
'--enable-optimize',
- '--enable-tools',
- '--with-pic',
- '--with-mpi=%s' % spec['mpi'].prefix,
- '--with-hdf5=%s' % spec['hdf5'].prefix,
- '--with-parmetis=%s' % spec['parmetis'].prefix,
- '--with-zoltan=%s' % spec['zoltan'].prefix,
'--disable-vtkMOABReader',
- '--without-vtk',
- 'CXX=%s' % spec['mpi'].mpicxx,
- 'CC=%s' % spec['mpi'].mpicc,
- 'FC=%s' % spec['mpi'].mpifc]
+ '--disable-mbtagprop',
+ '--disable-mbmem',
+ '--disable-spheredecomp',
+ '--disable-mbsurfplot',
+ '--disable-gsets',
+ '--disable-mcnpmit',
+ '--disable-refiner',
+ '--disable-h5mtools',
+ '--disable-mbcslam',
+ '--with-pic',
+ '--without-vtk'
+ ]
+ if '+mpi' in spec:
+ options.extend([
+ '--with-mpi=%s' % spec['mpi'].prefix,
+ 'CXX=%s' % spec['mpi'].mpicxx,
+ 'CC=%s' % spec['mpi'].mpicc,
+ 'FC=%s' % spec['mpi'].mpifc
+ ])
+ if '+parmetis' in spec:
+ options.append('--with-parmetis=%s' % spec['parmetis'].prefix)
+ else:
+ options.append('--without-parmetis')
+# FIXME: --without-mpi does not configure right
+# else:
+# options.append('--without-mpi')
+
+ if '+hdf5' in spec:
+ options.append('--with-hdf5=%s' % spec['hdf5'].prefix)
+ else:
+ options.append('--without-hdf5')
- if '~fortran' in spec:
- options.append('--disable-fortran')
- if '+shared' in spec:
- options.append('--enable-shared')
if '+netcdf' in spec:
options.append('--with-netcdf=%s' % spec['netcdf'].prefix)
+ else:
+ options.append('--without-netcdf')
+
+ if '+pnetcdf' in spec:
+ options.append('--with-pnetcdf=%s'
+ % spec['parallel-netcdf'].prefix)
+ else:
+ options.append('--without-pnetcdf')
- configure(*options)
- make()
- make('install')
+ if '+cgm' in spec:
+ options.append('--with-cgm=%s' % spec['cgm'].prefix)
+ if '+irel' in spec:
+ options.append('--enable-irel')
+ else:
+ options.append('--disable-irel')
+ else:
+ options.append('--without-cgm')
+ if '+fbigeom' in spec:
+ options.append('--enable-fbigeom')
+ else:
+ options.append('--disable-fbigeom')
+
+ if '+coupler' in spec:
+ options.append('--enable-mbcoupler')
+ else:
+ options.append('--disable-mbcoupler')
+
+ if '+metis' in spec:
+ options.append('--with-metis=%s' % spec['metis'].prefix)
+ else:
+ options.append('--without-metis')
+
+ if '+parmetis' in spec:
+ options.append('--with-parmetis=%s' % spec['parmetis'].prefix)
+ else:
+ options.append('--without-parmetis')
+
+ if '+zoltan' in spec:
+ options.append('--with-zoltan=%s' % spec['zoltan'].prefix)
+ else:
+ options.append('--without-zoltan')
+
+ if '+debug' in spec:
+ options.append('--enable-debug')
+ else:
+ options.append('--disable-debug')
+
+ # FIXME it seems that with cgm and shared, we have a link
+ # issue in tools/geometry
+ if '+shared' in spec:
+ options.append('--enable-shared')
+ else:
+ options.append('--disable-shared')
+
+ if '~fortran' in spec:
+ options.append('--disable-fortran')
+ else:
+ options.append('--enable-fortran')
+
+ return options
+
+ # FIXME Run the install phase with -j 1. There seems to be a problem with
+ # parallel installations of examples
+ def install(self, spec, prefix):
+ make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/molcas/install_driver.patch b/var/spack/repos/builtin/packages/molcas/install_driver.patch
new file mode 100644
index 0000000000..717e776aee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/molcas/install_driver.patch
@@ -0,0 +1,114 @@
+--- molcas82/sbin/install_driver.sh 2017-02-14 04:35:06.000000000 -0600
++++ molcas82/sbin/install_driver.sh 2017-08-04 15:08:17.872417692 -0500
+@@ -1,110 +1,3 @@
+ #!/bin/sh
+
+-echo `pwd` > $HOME/.Molcas/molcas 2> /dev/null
+-
+-# current driver version
+-if [ -z "$1" ] ; then
+- driver_file="sbin/molcas.driver"
+-else
+- driver_file="$1"
+-fi
+-current_version=`sed -e 's/.*Molcas driver shell script version // ; tx ; d ; :x s/\.//' $driver_file`
+-
+-MOLCASDRIVER=""
+-
+-# check location of driver script in your PATH
+-installed=0
+-
+-orig_IFS=$IFS
+-IFS=':'
+-for x in $PATH; do
+- if [ -f "$x/molcas" ]; then
+- l=`sed -e 's/.*Molcas driver shell script version // ; tx ; d ; :x s/\.//' "$x/molcas"`
+- if [ "$l" -lt "$current_version" ]; then
+- echo "*** Warning! An old version of the molcas driver script was found at: $x"
+- rm -f "$x/molcas" > /dev/null 2>&1
+- if [ "$?" != 0 ]; then
+- echo "*** $x/molcas is read only!"
+- echo "*** You have to remove this file manually"
+- echo ""
+- else
+- echo " and removed..."
+- MOLCASDRIVER="$x"
+- fi
+- else
+- echo "Molcas driver has been found at: $x"
+- MOLCASDRIVER="$x"
+- installed=1
+- fi
+- break
+- fi
+-done
+-
+-# latest version already installed, exit
+-if [ $installed = 1 ] ; then
+- exit 0
+-fi
+-
+-# try to find proper location for molcas driver
+-if [ -z "$MOLCASDRIVER" ]; then
+- # no existing version found, use default PATH
+- if [ -z "$PATH" ]; then
+- E_PATH="$HOME/bin"
+- else
+- E_PATH="$HOME/bin:$PATH"
+- fi
+-else
+- # a previous version was found, create it there
+- E_PATH="$MOLCASDRIVER"
+-fi
+-
+-# find first writable directory
+-dir_found=0
+-for x in $E_PATH ; do
+- if [ "$x" = "." ] ; then continue ; fi
+- # detect if directory is writable (-w would not work, since it does not handle mount permissions)
+- cp "$driver_file" "$x/this_is_not_molcas" > /dev/null 2>&1
+- if [ "$?" = 0 ] ; then
+- rm -f "$x/this_is_not_molcas" > /dev/null 2>&1
+- MOLCASDRIVER="$x"
+- dir_found=1
+- break
+- fi
+-done
+-
+-# create a default molcas driver
+-if [ $dir_found = 0 ] ; then
+- echo "*** Warning! Could not find a proper directory to install the molcas driver"
+- echo ""
+- echo "*** Check that there is a directory in your PATH with write access"
+- echo "*** (for example $HOME/bin) and restart the installation"
+- echo ""
+- echo "*** You have to put the molcas driver in any directory in your PATH"
+-else
+- echo "molcas driver will be installed in $MOLCASDRIVER"
+- echo "Is this OK?"
+- while true; do
+- read answer
+- case "${answer}_" in
+- [Yy]*|_ )
+- cp "$driver_file" "$MOLCASDRIVER/molcas"
+- chmod +x "$MOLCASDRIVER/molcas"
+- # check again the driver was installed
+- l=`sed -e 's/.*Molcas driver shell script version // ; tx ; d ; :x s/\.//' "$x/molcas"`
+- if [ "$l" -eq "$current_version" -a -x "$MOLCASDRIVER/molcas" ] ; then
+- echo "Driver installation successful"
+- else
+- echo "*** Driver installation failed!"
+- echo ""
+- echo "*** You have to put the molcas driver in any directory in your PATH"
+- fi
+- break ;;
+- [Nn]* )
+- echo "*** Driver installation canceled!"
+- echo ""
+- echo "*** You have to put the molcas driver in any directory in your PATH"
+- break ;;
+- * ) echo "Please answer yes or no"
+- esac
+- done
+-fi
++echo `Driver Will be in the sbin folder`
diff --git a/var/spack/repos/builtin/packages/molcas/package.py b/var/spack/repos/builtin/packages/molcas/package.py
new file mode 100644
index 0000000000..7c4958cc94
--- /dev/null
+++ b/var/spack/repos/builtin/packages/molcas/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Molcas(CMakePackage):
+ """Molcas is an ab initio quantum chemistry software package
+ developed by scientists to be used by scientists.
+ Please set the path to licence file with the following command
+ export MOLCAS_LICENSE=/path/to/molcas/license/"""
+
+ homepage = "http://www.molcas.org/"
+ url = "file://{0}/molcas8.2.tar.gz".format(os.getcwd())
+
+ version('8.2', '25b5fb8e1338b458a3eaea0b3d3b5e58')
+
+ # Licensing
+ license_required = True
+ license_vars = ['MOLCAS_LICENSE']
+
+ depends_on('openmpi')
+ depends_on('openblas')
+ depends_on('hdf5')
+
+ patch('install_driver.patch')
diff --git a/var/spack/repos/builtin/packages/mono/package.py b/var/spack/repos/builtin/packages/mono/package.py
new file mode 100644
index 0000000000..a2f841ceb1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mono/package.py
@@ -0,0 +1,66 @@
+###############################################################################
+# 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/spack/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 Mono(AutotoolsPackage):
+ """Mono is a software platform designed to allow developers to easily
+ create cross platform applications. It is an open source
+ implementation of Microsoft's .NET Framework based on the ECMA
+ standards for C# and the Common Language Runtime.
+ """
+
+ homepage = "http://www.mono-project.com/"
+ url = "https://download.mono-project.com/sources/mono/mono-5.0.1.1.tar.bz2"
+
+ # /usr/share/.mono/keypairs needs to exist or be able to be
+ # created, e.g. https://github.com/gentoo/dotnet/issues/6
+ variant('patch-folder-path', default=False,
+ description='Point SpecialFolder.CommonApplicationData folder '
+ 'into Spack installation instead of /usr/share')
+
+ # Spack's openssl interacts badly with mono's vendored
+ # "boringssl", don't drag it in w/ cmake
+ depends_on('cmake~openssl', type=('build'))
+ depends_on('libiconv')
+ depends_on('perl', type=('build'))
+
+ version('5.4.0.167', '103c7a737632046a9e9a0b039d752ee1')
+ version('5.0.1.1', '17692c7a797f95ee6f9a0987fda3d486')
+ version('4.8.0.524', 'baeed5b8139a85ad7e291d402a4bcccb')
+
+ def patch(self):
+ if '+patch-folder-path' in self.spec:
+ before = 'return "/usr/share";'
+ after = 'return "{0}";'.format(self.prefix.share)
+ f = 'mcs/class/corlib/System/Environment.cs'
+ kwargs = {'ignore_absent': False, 'backup': True, 'string': True}
+ filter_file(before, after, f, **kwargs)
+
+ def configure_args(self):
+ args = []
+ li = self.spec['libiconv'].prefix
+ args.append('--with-libiconv-prefix={p}'.format(p=li))
+ return args
diff --git a/var/spack/repos/builtin/packages/mosh/package.py b/var/spack/repos/builtin/packages/mosh/package.py
new file mode 100644
index 0000000000..de15e46bde
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mosh/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Mosh(AutotoolsPackage):
+ """Remote terminal application that allows roaming, supports intermittent
+ connectivity, and provides intelligent local echo and line editing of user
+ keystrokes. Mosh is a replacement for SSH. It's more robust and responsive,
+ especially over Wi-Fi, cellular, and long-distance links.
+ """
+
+ homepage = "https://mosh.org/"
+ url = "https://mosh.org/mosh-1.2.6.tar.gz"
+
+ version('1.3.2', '5122f4d2b973ab7c38dcdac8c35cb61e')
+ version('1.3.0', 'd961276995936953bf2d5a794068b076')
+ version('1.2.6', 'bb4e24795bb135a754558176a981ee9e')
+
+ depends_on('protobuf')
+ depends_on('ncurses')
+ depends_on('zlib')
+ depends_on('openssl')
+
+ depends_on('perl', type='run')
+
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/mothur/package.py b/var/spack/repos/builtin/packages/mothur/package.py
new file mode 100644
index 0000000000..e19ee30f98
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mothur/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 Mothur(MakefilePackage):
+ """This project seeks to develop a single piece of open-source, expandable
+ software to fill the bioinformatics needs of the microbial ecology
+ community."""
+
+ homepage = "https://github.com/mothur/mothur"
+ url = "https://github.com/mothur/mothur/archive/v1.39.5.tar.gz"
+
+ version('1.39.5', '1f826ea4420e6822fc0db002c5940b92')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('boost')
+ depends_on('readline')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ makefile.filter('BOOST_LIBRARY_DIR=\"\\\"Enter_your_boost_library_path'
+ '_here\\\"\"', 'BOOST_LIBRARY_DIR=%s' %
+ self.spec['boost'].prefix.lib)
+ makefile.filter('BOOST_INCLUDE_DIR=\"\\\"Enter_your_boost_include_path'
+ '_here\\\"\"', 'BOOST_INCLUDE_DIR=%s' %
+ self.spec['boost'].prefix.include)
+ makefile.filter('MOTHUR_FILES=\"\\\"Enter_your_default_path_'
+ 'here\\\"\"', 'MOTHUR_FILES=%s' % prefix)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('mothur', prefix.bin)
+ install('uchime', prefix.bin)
+ install_tree('source', prefix.include)
diff --git a/var/spack/repos/builtin/packages/motioncor2/package.py b/var/spack/repos/builtin/packages/motioncor2/package.py
new file mode 100644
index 0000000000..304e369d99
--- /dev/null
+++ b/var/spack/repos/builtin/packages/motioncor2/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 *
+from glob import glob
+
+
+class Motioncor2(Package):
+ """MotionCor2 is a multi-GPU program that corrects beam-induced sample
+ motion recorded on dose fractionated movie stacks. It implements a robust
+ iterative alignment algorithm that delivers precise measurement and
+ correction of both global and non-uniform local motions at
+ single pixel level, suitable for both single-particle and
+ tomographic images. MotionCor2 is sufficiently fast
+ to keep up with automated data collection."""
+
+ homepage = "http://msg.ucsf.edu/em/software"
+ url = "http://msg.ucsf.edu/MotionCor2/MotionCor2-1.0.2.tar.gz"
+
+ version('1.0.2', 'f2f4c5b09170ab8480ca657f14cdba2b')
+ version('1.0.1', '73d94a80abdef9bf37bbc80fbbe76622')
+ version('1.0.0', '490f4df8daa9f5ddb9eec3962ba3ddf5')
+
+ depends_on('cuda@8.0:8.99', type='run')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ for files in glob("MotionCor2_*"):
+ install(files, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/mozjs/package.py b/var/spack/repos/builtin/packages/mozjs/package.py
new file mode 100644
index 0000000000..b0e98772af
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mozjs/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 Mozjs(AutotoolsPackage):
+ """SpiderMonkey is Mozilla's JavaScript engine written in C/C++.
+ It is used in various Mozilla products, including Firefox, and is
+ available under the MPL2."""
+
+ homepage = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey"
+
+ version('24.2.0', '5db79c10e049a2dc117a6e6a3bc78a8e',
+ url="http://ftp.mozilla.org/pub/js/mozjs-24.2.0.tar.bz2")
+ version('17.0.0', '20b6f8f1140ef6e47daa3b16965c9202',
+ url="http://ftp.mozilla.org/pub/js/mozjs17.0.0.tar.gz")
+ version('1.8.5', 'a4574365938222adca0a6bd33329cb32',
+ url="http://ftp.mozilla.org/pub/js/js185-1.0.0.tar.gz")
+
+ depends_on('perl@5.6:', type='build')
+ depends_on('pkg-config@0.9.0:', type='build')
+ depends_on('python@2.7.3:2.8', type='build')
+ depends_on('nspr', when='@:27')
+ depends_on('libffi@3.0.9:')
+ depends_on('readline')
+ depends_on('zlib@1.2.3')
+
+ configure_directory = 'js/src'
+ build_directory = 'js/src/spack-build'
+
+ patch('perl-bug.patch')
+
+ def configure_args(self):
+ spec = self.spec
+ return [
+ '--enable-readline', # enables readline support in JS shell
+ '--enable-threadsafe', # enables support for multiple threads
+ '--enable-system-ffi',
+ '--with-system-zlib={0}'.format(spec['zlib'].prefix),
+ '--with-system-nspr',
+ '--with-nspr-prefix={0}'.format(spec['nspr'].prefix),
+ ]
diff --git a/var/spack/repos/builtin/packages/mozjs/perl-bug.patch b/var/spack/repos/builtin/packages/mozjs/perl-bug.patch
new file mode 100644
index 0000000000..a05384c7f4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mozjs/perl-bug.patch
@@ -0,0 +1,21 @@
+Perl has deprecated the feature:
+
+ defined(@array)
+
+In Perl 5.22+, this deprecation warning has been converted
+to a fatal error. This results in the following error message:
+
+ Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at milestone.pl line 58.
+
+This patch takes the suggestion of omitting defined().
+--- a/js/src/config/milestone.pl 2017-02-14 15:00:42.234275243 -0600
++++ b/js/src/config/milestone.pl 2017-02-14 15:01:19.453313360 -0600
+@@ -55,7 +55,7 @@
+ #
+ my $milestone = Moz::Milestone::getOfficialMilestone($MILESTONE_FILE);
+
+-if (defined(@TEMPLATE_FILE)) {
++if (@TEMPLATE_FILE) {
+ my $TFILE;
+
+ foreach $TFILE (@TEMPLATE_FILE) {
diff --git a/var/spack/repos/builtin/packages/mpc/package.py b/var/spack/repos/builtin/packages/mpc/package.py
index 2fe3900981..749794015a 100644
--- a/var/spack/repos/builtin/packages/mpc/package.py
+++ b/var/spack/repos/builtin/packages/mpc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,28 @@
from spack import *
-class Mpc(Package):
+class Mpc(AutotoolsPackage):
"""Gnu Mpc is a C library for the arithmetic of complex numbers
with arbitrarily high precision and correct rounding of the
result."""
homepage = "http://www.multiprecision.org"
- url = "ftp://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz"
+ url = "https://ftp.gnu.org/gnu/mpc/mpc-1.0.2.tar.gz"
version('1.0.3', 'd6a1d5f8ddea3abd2cc3e98f58352d26')
version('1.0.2', '68fadff3358fb3e7976c7a398a0af4c3')
- depends_on('gmp') # mpir is a drop-in replacement for this
- depends_on('mpfr') # Could also be built against mpir
+ depends_on('gmp@4.3.2:') # mpir is a drop-in replacement for this
+ depends_on('mpfr@2.4.2:') # Could also be built against mpir
def url_for_version(self, version):
if version < Version("1.0.1"):
- return "http://www.multiprecision.org/mpc/download/mpc-%s.tar.gz" % version # NOQA
+ return "http://www.multiprecision.org/mpc/download/mpc-%s.tar.gz" % version
else:
- return "ftp://ftp.gnu.org/gnu/mpc/mpc-%s.tar.gz" % version
+ return "https://ftp.gnu.org/gnu/mpc/mpc-%s.tar.gz" % version
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def configure_args(self):
+ spec = self.spec
+ return [
+ '--with-mpfr={0}'.format(spec['mpfr'].prefix),
+ '--with-gmp={0}'.format(spec['gmp'].prefix)
+ ]
diff --git a/var/spack/repos/builtin/packages/mpe2/package.py b/var/spack/repos/builtin/packages/mpe2/package.py
index a129d59949..d5041d7a32 100644
--- a/var/spack/repos/builtin/packages/mpe2/package.py
+++ b/var/spack/repos/builtin/packages/mpe2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class Mpe2(Package):
"""Message Passing Extensions (MPE): Parallel, shared X window graphics"""
homepage = "http://www.mcs.anl.gov/research/projects/perfvis/software/MPE/"
- url = "ftp://ftp.mcs.anl.gov/pub/mpi/mpe/mpe2-1.3.0.tar.gz"
+ url = "http://ftp.mcs.anl.gov/pub/mpi/mpe/mpe2-1.3.0.tar.gz"
version('1.3.0', '67bf0c7b2e573df3ba0d2059a96c2f7b')
diff --git a/var/spack/repos/builtin/packages/mpest/package.py b/var/spack/repos/builtin/packages/mpest/package.py
new file mode 100644
index 0000000000..c5cba773dd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpest/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Mpest(MakefilePackage):
+ """MP-EST estimates species trees from a set of gene trees by maximizing
+ a pseudo-likelihood function."""
+
+ homepage = "http://faculty.franklin.uga.edu/lliu/content/mp-est"
+ url = "https://faculty.franklin.uga.edu/lliu/sites/faculty.franklin.uga.edu.lliu/files/mpest_1.5.zip"
+
+ version('1.5', 'f176d5301aa26567918664e5e30027d1')
+
+ @property
+ def build_directory(self):
+ return join_path('mpest_{0}'.format(self.version), 'src')
+
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ mkdirp(prefix.bin)
+ install('mpest', prefix.bin)
+
+ def setup_environment(self, spack_env, run_env):
+ if self.spec.satisfies('platform=darwin'):
+ spack_env.set('ARCHITECTURE', 'mac')
+ else:
+ spack_env.set('ARCHITECTURE', 'unix')
diff --git a/var/spack/repos/builtin/packages/mpfr/package.py b/var/spack/repos/builtin/packages/mpfr/package.py
index 4612d03849..01006dd72a 100644
--- a/var/spack/repos/builtin/packages/mpfr/package.py
+++ b/var/spack/repos/builtin/packages/mpfr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,26 @@
from spack import *
-class Mpfr(Package):
+class Mpfr(AutotoolsPackage):
"""The MPFR library is a C library for multiple-precision
floating-point computations with correct rounding."""
+
homepage = "http://www.mpfr.org"
- url = "https://gforge.inria.fr/frs/download.php/latestfile/159/mpfr-3.1.2.tar.bz2"
+ url = "https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.5.tar.bz2"
+ version('3.1.5', 'b1d23a55588e3b2a13e3be66bc69fd8d')
version('3.1.4', 'b8a2f6b0e68bef46e53da2ac439e1cf4')
version('3.1.3', '5fdfa3cfa5c86514ee4a241a1affa138')
version('3.1.2', 'ee2c3ac63bf0c2359bf08fc3ee094c19')
- depends_on('gmp') # mpir is a drop-in replacement for this
+ # mpir is a drop-in replacement for gmp
+ depends_on('gmp@4.1.0:') # 4.2.3 or higher is recommended
+
+ patch('vasprintf.patch', when='@3.1.5')
+ patch('strtofr.patch', when='@3.1.5')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
+ def configure_args(self):
+ args = [
+ '--with-gmp=' + self.spec['gmp'].prefix,
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/mpfr/strtofr.patch b/var/spack/repos/builtin/packages/mpfr/strtofr.patch
new file mode 100644
index 0000000000..01878bf1b0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpfr/strtofr.patch
@@ -0,0 +1,92 @@
+diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES
+--- mpfr-3.1.5-a/PATCHES 2016-12-19 22:11:17.022676737 +0000
++++ mpfr-3.1.5-b/PATCHES 2016-12-19 22:11:17.094676820 +0000
+@@ -0,0 +1 @@
++strtofr
+diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION
+--- mpfr-3.1.5-a/VERSION 2016-12-15 08:35:46.544430346 +0000
++++ mpfr-3.1.5-b/VERSION 2016-12-19 22:11:17.094676820 +0000
+@@ -1 +1 @@
+-3.1.5-p1
++3.1.5-p2
+diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h
+--- mpfr-3.1.5-a/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000
++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-19 22:11:17.090676815 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 3
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 5
+-#define MPFR_VERSION_STRING "3.1.5-p1"
++#define MPFR_VERSION_STRING "3.1.5-p2"
+
+ /* Macros dealing with MPFR VERSION */
+ #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
+diff -Naurd mpfr-3.1.5-a/src/strtofr.c mpfr-3.1.5-b/src/strtofr.c
+--- mpfr-3.1.5-a/src/strtofr.c 2016-09-27 07:58:15.000000000 +0000
++++ mpfr-3.1.5-b/src/strtofr.c 2016-12-19 22:11:17.066676788 +0000
+@@ -743,11 +743,14 @@
+ of the pstr_size most significant digits of pstr->mant, with
+ equality in case exact is non-zero. */
+
+- /* test if rounding is possible, and if so exit the loop */
+- if (exact || mpfr_can_round_raw (result, ysize,
+- (pstr->negative) ? -1 : 1,
+- ysize_bits - err - 1,
+- MPFR_RNDN, rnd, MPFR_PREC(x)))
++ /* test if rounding is possible, and if so exit the loop.
++ Note: we also need to be able to determine the correct ternary value,
++ thus we use the MPFR_PREC(x) + (rnd == MPFR_RNDN) trick.
++ For example if result = xxx...xxx111...111 and rnd = RNDN,
++ then we know the correct rounding is xxx...xx(x+1), but we cannot know
++ the correct ternary value. */
++ if (exact || mpfr_round_p (result, ysize, ysize_bits - err - 1,
++ MPFR_PREC(x) + (rnd == MPFR_RNDN)))
+ break;
+
+ next_loop:
+diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c
+--- mpfr-3.1.5-a/src/version.c 2016-12-15 08:35:46.544430346 +0000
++++ mpfr-3.1.5-b/src/version.c 2016-12-19 22:11:17.094676820 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "3.1.5-p1";
++ return "3.1.5-p2";
+ }
+diff -Naurd mpfr-3.1.5-a/tests/tstrtofr.c mpfr-3.1.5-b/tests/tstrtofr.c
+--- mpfr-3.1.5-a/tests/tstrtofr.c 2016-09-27 07:58:14.000000000 +0000
++++ mpfr-3.1.5-b/tests/tstrtofr.c 2016-12-19 22:11:17.066676788 +0000
+@@ -1191,6 +1191,24 @@
+ mpfr_clears (e, x1, x2, (mpfr_ptr) 0);
+ }
+
++/* Note: the number is 5^47/2^9. */
++static void
++bug20161217 (void)
++{
++ mpfr_t fp, z;
++ static const char * num = "0.1387778780781445675529539585113525390625e31";
++ int inex;
++
++ mpfr_init2 (fp, 110);
++ mpfr_init2 (z, 110);
++ inex = mpfr_strtofr (fp, num, NULL, 10, MPFR_RNDN);
++ MPFR_ASSERTN(inex == 0);
++ mpfr_set_str_binary (z, "10001100001000010011110110011101101001010000001011011110010001010100010100100110111101000010001011001100001101E-9");
++ MPFR_ASSERTN(mpfr_equal_p (fp, z));
++ mpfr_clear (fp);
++ mpfr_clear (z);
++}
++
+ int
+ main (int argc, char *argv[])
+ {
+@@ -1205,6 +1223,7 @@
+ test20100310 ();
+ bug20120814 ();
+ bug20120829 ();
++ bug20161217 ();
+
+ tests_end_mpfr ();
+ return 0;
diff --git a/var/spack/repos/builtin/packages/mpfr/vasprintf.patch b/var/spack/repos/builtin/packages/mpfr/vasprintf.patch
new file mode 100644
index 0000000000..e1576d5976
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpfr/vasprintf.patch
@@ -0,0 +1,82 @@
+diff -Naurd mpfr-3.1.5-a/PATCHES mpfr-3.1.5-b/PATCHES
+--- mpfr-3.1.5-a/PATCHES 2016-12-15 08:35:46.476430238 +0000
++++ mpfr-3.1.5-b/PATCHES 2016-12-15 08:35:46.544430346 +0000
+@@ -0,0 +1 @@
++vasprintf
+diff -Naurd mpfr-3.1.5-a/VERSION mpfr-3.1.5-b/VERSION
+--- mpfr-3.1.5-a/VERSION 2016-09-27 07:58:14.000000000 +0000
++++ mpfr-3.1.5-b/VERSION 2016-12-15 08:35:46.544430346 +0000
+@@ -1 +1 @@
+-3.1.5
++3.1.5-p1
+diff -Naurd mpfr-3.1.5-a/src/mpfr.h mpfr-3.1.5-b/src/mpfr.h
+--- mpfr-3.1.5-a/src/mpfr.h 2016-09-27 07:58:15.000000000 +0000
++++ mpfr-3.1.5-b/src/mpfr.h 2016-12-15 08:35:46.540430340 +0000
+@@ -27,7 +27,7 @@
+ #define MPFR_VERSION_MAJOR 3
+ #define MPFR_VERSION_MINOR 1
+ #define MPFR_VERSION_PATCHLEVEL 5
+-#define MPFR_VERSION_STRING "3.1.5"
++#define MPFR_VERSION_STRING "3.1.5-p1"
+
+ /* Macros dealing with MPFR VERSION */
+ #define MPFR_VERSION_NUM(a,b,c) (((a) << 16L) | ((b) << 8) | (c))
+diff -Naurd mpfr-3.1.5-a/src/vasprintf.c mpfr-3.1.5-b/src/vasprintf.c
+--- mpfr-3.1.5-a/src/vasprintf.c 2016-09-27 07:58:15.000000000 +0000
++++ mpfr-3.1.5-b/src/vasprintf.c 2016-12-15 08:35:46.520430308 +0000
+@@ -1593,7 +1593,7 @@
+ }
+ else if (spec.spec == 'f' || spec.spec == 'F')
+ {
+- if (spec.prec == -1)
++ if (spec.prec < 0)
+ spec.prec = 6;
+ if (regular_fg (np, p, spec, NULL) == -1)
+ goto error;
+diff -Naurd mpfr-3.1.5-a/src/version.c mpfr-3.1.5-b/src/version.c
+--- mpfr-3.1.5-a/src/version.c 2016-09-27 07:58:15.000000000 +0000
++++ mpfr-3.1.5-b/src/version.c 2016-12-15 08:35:46.544430346 +0000
+@@ -25,5 +25,5 @@
+ const char *
+ mpfr_get_version (void)
+ {
+- return "3.1.5";
++ return "3.1.5-p1";
+ }
+diff -Naurd mpfr-3.1.5-a/tests/tsprintf.c mpfr-3.1.5-b/tests/tsprintf.c
+--- mpfr-3.1.5-a/tests/tsprintf.c 2016-09-27 07:58:14.000000000 +0000
++++ mpfr-3.1.5-b/tests/tsprintf.c 2016-12-15 08:35:46.520430308 +0000
+@@ -1251,6 +1251,25 @@
+ check_emin_aux (MPFR_EMIN_MIN);
+ }
+
++static void
++test20161214 (void)
++{
++ mpfr_t x;
++ char buf[32];
++ const char s[] = "0x0.fffffffffffff8p+1024";
++ int r;
++
++ mpfr_init2 (x, 64);
++ mpfr_set_str (x, s, 16, MPFR_RNDN);
++ r = mpfr_snprintf (buf, 32, "%.*RDf", -2, x);
++ MPFR_ASSERTN(r == 316);
++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN + 1, x);
++ MPFR_ASSERTN(r == 316);
++ r = mpfr_snprintf (buf, 32, "%.*RDf", INT_MIN, x);
++ MPFR_ASSERTN(r == 316);
++ mpfr_clear (x);
++}
++
+ int
+ main (int argc, char **argv)
+ {
+@@ -1271,6 +1290,7 @@
+ mixed ();
+ check_emax ();
+ check_emin ();
++ test20161214 ();
+
+ #if defined(HAVE_LOCALE_H) && defined(HAVE_SETLOCALE)
+ #if MPFR_LCONV_DPTS
diff --git a/var/spack/repos/builtin/packages/mpibash/package.py b/var/spack/repos/builtin/packages/mpibash/package.py
index f3feaaaa42..f5476328b7 100644
--- a/var/spack/repos/builtin/packages/mpibash/package.py
+++ b/var/spack/repos/builtin/packages/mpibash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/mpiblast/mpiBLAST-1.6.0-patch-110806 b/var/spack/repos/builtin/packages/mpiblast/mpiBLAST-1.6.0-patch-110806
new file mode 100644
index 0000000000..05de8ed074
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpiblast/mpiBLAST-1.6.0-patch-110806
@@ -0,0 +1,182 @@
+diff -rwu mpiblast-1.6.0/ncbi/corelib/ncbienv.c mpiblast-1.6.0-patched/ncbi/corelib/ncbienv.c
+--- mpiblast-1.6.0/ncbi/corelib/ncbienv.c 2009-11-22 01:17:48.000000000 -0500
++++ mpiblast-1.6.0-patched/ncbi/corelib/ncbienv.c 2011-08-06 17:10:08.000000000 -0400
+@@ -1932,7 +1932,7 @@
+ static char **targv = NULL;
+
+
+-#if defined(WIN_MAC)
++#if defined(WIN_MAC) || defined(OS_UNIX_DARWIN)
+ static FSSpec apFileSpec;
+ static Str255 apName;
+ static Handle apParam;
+@@ -2047,7 +2047,7 @@
+ }
+ }
+ #endif /* defined(OS_UNIX_DARWIN) */
+-#endif /* defined(WIN_MAC) */
++#endif /* defined(WIN_MAC) || defined(OS_UNIX_DARWIN) */
+
+
+ #if defined(OS_MSWIN) || defined(OS_VMS)
+diff -rwu mpiblast-1.6.0/ncbi/make/makedis.csh mpiblast-1.6.0-patched/ncbi/make/makedis.csh
+--- mpiblast-1.6.0/ncbi/make/makedis.csh 2010-06-28 21:04:36.000000000 -0400
++++ mpiblast-1.6.0-patched/ncbi/make/makedis.csh 2011-08-06 17:06:42.000000000 -0400
+@@ -1,6 +1,6 @@
+ #!/bin/csh -f
+ #
+-# $Id: makedis.csh 148594 2008-12-30 15:11:36Z ucko $
++# $Id: makedis.csh 179886 2010-01-04 17:28:02Z ucko $
+ #
+ ## PUBLIC DOMAIN NOTICE
+ # National Center for Biotechnology Information
+@@ -54,7 +54,7 @@
+ endif
+
+ ls -l $tar_file
+- tar xvf $tar_file
++ tar xf $tar_file
+ else
+ # make sure that ncbi/build directory exists
+ if ( ! -d "ncbi/build" ) then
+@@ -74,6 +74,7 @@
+ set HAVE_MAC=0
+ #we will try to build OpenGL version of vibrant
+ set HAVE_OGL=1
++set MPBL_HAVE_MAC=0
+
+ switch ($os)
+ case SunOS:
+@@ -164,7 +165,7 @@
+ gcc -v
+ switch (`uname -m`)
+ case "ia64":
+- if (-e `which ecc`) then
++ if (-e `which icc`) then
+ set platform=linux_ecc
+ else
+ set platform=linux
+@@ -253,7 +254,11 @@
+ endif
+ endif
+ set HAVE_MOTIF=0
+- set HAVE_MAC=1
++#MPIBLAST <<<
++# set HAVE_MAC=1
++ set MPBL_HAVE_MAC=1
++ set HAVE_MAC=0
++#MPIBLAST
+ breaksw
+ case NetBSD:
+ set platform=netbsd
+@@ -319,6 +324,7 @@
+ goto BADPLATFORM
+ endif
+
++
+ set noglob
+ # take the file $NCBI_DOT_MK and convert it to be suitable for csh eval:
+ # (1) remove comments at the beginning of the lines
+@@ -328,6 +334,7 @@
+ eval `sed -e 's/^ *#.*//g' -e 's/\$(\([a-zA-Z_]*\))/\${\1}/g' -e 's/ *= */=/g' -e 's/^\([^=]*\)=\(.*\)$/setenv \1 "\2";/' < $NCBI_DOT_MK`
+ unset noglob
+
++
+ # disable assert() unless ENABLE_ASSERT is set
+ if ("$?ENABLE_ASSERT" == 0) then
+ set NCBI_OPTFLAG="-DNDEBUG $NCBI_OPTFLAG"
+@@ -441,13 +448,23 @@
+ set NET_VIB=(VIB=\"blastcl3 taxblast idfetch bl2seq asn2gb tbl2asn gene2xml $NONVIBWWWBLAST \")
+ endif
+
++# MPIBLAST <<<<<
++if ("$MPBL_HAVE_MAC" == 1) then
++set CMD='make $MFLG \
++ CFLAGS1=\"-I/Developer/Headers/FlatCarbon $NCBI_OPTFLAG $NCBI_CFLAGS1 $OGL_INCLUDE $PNG_INCLUDE\" \
++ LDFLAGS1=\"$NCBI_LDFLAGS1\" OTHERLIBS=\"$NCBI_OTHERLIBS\" \
++ SHELL=\"$NCBI_MAKE_SHELL\" LCL=\"$NCBI_DEFAULT_LCL\" \
++ RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\" $ALL_VIB all'
++else
+ set CMD='make $MFLG \
+ CFLAGS1=\"$NCBI_OPTFLAG $NCBI_CFLAGS1 $OGL_INCLUDE $PNG_INCLUDE\" \
+ LDFLAGS1=\"$NCBI_LDFLAGS1\" OTHERLIBS=\"$NCBI_OTHERLIBS\" \
+ SHELL=\"$NCBI_MAKE_SHELL\" LCL=\"$NCBI_DEFAULT_LCL\" \
+ RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\" $ALL_VIB all'
++endif
+ eval echo $CMD
+ eval echo $CMD | sh
++# MPIBLAST >>>>>
+
+ set make_stat = $status
+
+@@ -463,12 +480,18 @@
+ endif
+
+ # MPIBLAST <<<<<
+-
++if ("$MPBL_HAVE_MAC" == 1) then
+ set CMD='make $MFLG -f makempiblast.unx CFLAGS1=\"$NCBI_OPTFLAG $NCBI_CFLAGS1\" \
+ LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" \
+ LCL=\"$NCBI_DEFAULT_LCL\" RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\"'
++else
++set CMD='make $MFLG -f makempiblast.unx CFLAGS1=\"$NCBI_OPTFLAG $NCBI_CFLAGS1\" \
++ LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" \
++ LCL=\"$NCBI_DEFAULT_LCL\" RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\"'
++endif
+ eval echo $CMD
+ eval echo $CMD | sh
++if ($status != 0) exit $status
+
+ if( "$platform" == "bluegenel" || "$platform" == "bluegenep" ) then
+ exit 0
+@@ -476,7 +499,7 @@
+ # MPIBLAST >>>>>
+
+ set CMD='make $MFLG -f makedemo.unx CFLAGS1=\"$NCBI_OPTFLAG $NCBI_CFLAGS1\" \
+- LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" \
++ LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" OTHERLIBS=\"$NCBI_OTHERLIBS\" \
+ LCL=\"$NCBI_DEFAULT_LCL\" RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\" $DEMO_VIB'
+ eval echo $CMD
+ eval echo $CMD | sh
+@@ -495,7 +518,7 @@
+
+
+ set CMD='make $MFLG -f makedemo.unx CFLAGS1=\"$NCBI_OPTFLAG $NCBI_CFLAGS1\" \
+- LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" \
++ LDFLAGS1=\"$NCBI_LDFLAGS1\" SHELL=\"$NCBI_MAKE_SHELL\" OTHERLIBS=\"$NCBI_OTHERLIBS\" \
+ LCL=\"$NCBI_DEFAULT_LCL\" RAN=\"$NCBI_RANLIB\" AR=\"$NCBI_AR\" CC=\"$NCBI_CC\" \
+ THREAD_OBJ=$NCBI_THREAD_OBJ THREAD_OTHERLIBS=\"$NCBI_MT_OTHERLIBS\" \
+ $DEMO_VIB $mtapps'
+diff -rwu mpiblast-1.6.0/src/Makefile.am mpiblast-1.6.0-patched/src/Makefile.am
+--- mpiblast-1.6.0/src/Makefile.am 2009-11-22 01:17:48.000000000 -0500
++++ mpiblast-1.6.0-patched/src/Makefile.am 2011-08-06 17:06:42.000000000 -0400
+@@ -2,7 +2,7 @@
+ -D_LARGEFILE64_SOURCE -DMPIBLAST_PIO \
+ -I$(top_srcdir)/include/ -I@CONFIG_NCBIDIR@/include/ $(MPE_INCS) \
+ -I@CONFIG_NCBIDIR@/corelib/
+-AM_CXXFLAGS = -DMPICH_IGNORE_CXX_SEEK -DINSTALL_PREFIX="\"@prefix@\"" \
++AM_CXXFLAGS = -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX -DINSTALL_PREFIX="\"@prefix@\"" \
+ @COMPILE_FLAGS@ -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE \
+ -I$(top_srcdir)/include/ -I@CONFIG_NCBIDIR@/include/ $(MPE_INCS) \
+ -I@CONFIG_NCBIDIR@/corelib/
+@@ -31,7 +31,7 @@
+ @CONFIG_NCBIDIR@/build/blast_hooks.o -lmyncbitool -lblastcompadj -lmyncbiobj \
+ -lmyncbi -L. -L@CONFIG_NCBIDIR@/lib/ $(MPE_LIBS) -lm @LINK_FLAGS@
+ mpiblast_DEPENDENCIES = @GETOPT_LONG_SYSTEM@
+-mpiblast_CPPFLAGS = -DUSING_MPI -DMPICH_IGNORE_CXX_SEEK
++mpiblast_CPPFLAGS = -DUSING_MPI -DMPICH_IGNORE_CXX_SEEK -DOMPI_SKIP_MPICXX
+
+ mpiformatdb_SOURCES = mpiformatdb.cpp mpiblast_config.cpp mpiblast_config.hpp \
+ file_util.cpp file_util.hpp mpiblast_util.cpp mpiblast_util.hpp \
+diff -rwu mpiblast-1.6.0/src/pio_intercept.h mpiblast-1.6.0-patched/src/pio_intercept.h
+--- mpiblast-1.6.0/src/pio_intercept.h 2009-11-22 01:17:48.000000000 -0500
++++ mpiblast-1.6.0-patched/src/pio_intercept.h 2011-08-06 17:06:42.000000000 -0400
+@@ -60,7 +60,7 @@
+ #include <txalign.h>
+
+ /* marcros are duplicated in ncbi files to avoid header file conflict */
+-#define CHECK_NULPTR(x) if(x==NULL) fprintf(stderr, "%s, line%d: cannot allocate enough memory\n", __FILE__, __LINE__);
++#define CHECK_NULPTR(x) if(x==NULL) { perror("Cannot allocate enough memory:"); exit(-1); }
+
+ #ifndef NO_MPI
+ typedef struct _output_record {
diff --git a/var/spack/repos/builtin/packages/mpiblast/package.py b/var/spack/repos/builtin/packages/mpiblast/package.py
new file mode 100644
index 0000000000..eebb7da1fb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpiblast/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Mpiblast(AutotoolsPackage):
+ """mpiBLAST is a freely available, open-source, parallel implementation of
+ NCBI BLAST"""
+
+ homepage = "http://www.mpiblast.org/"
+ url = "http://www.mpiblast.org/downloads/files/mpiBLAST-1.6.0.tgz"
+
+ version('1.6.0', '707105ccd56825db776b50bfd81cecd5')
+
+ patch('mpiBLAST-1.6.0-patch-110806')
+
+ depends_on('mpi')
+
+ def configure_args(self):
+ args = ['--with-mpi=%s' % self.spec['mpi'].prefix]
+ return args
+
+ def build(self, spec, prefix):
+ make('ncbi')
+ make()
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('ac_cv_path_CC', self.spec['mpi'].mpicc)
+ spack_env.set('ac_cv_path_CXX', self.spec['mpi'].mpicxx)
diff --git a/var/spack/repos/builtin/packages/mpich/mpich32_clang.patch b/var/spack/repos/builtin/packages/mpich/mpich32_clang.patch
new file mode 100644
index 0000000000..01243072f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpich/mpich32_clang.patch
@@ -0,0 +1,13 @@
+diff --git a/src/include/mpiimpl.h b/src/include/mpiimpl.h
+index e705e5d..3bfcbee 100644
+--- a/src/include/mpiimpl.h
++++ b/src/include/mpiimpl.h
+@@ -1528,7 +1528,7 @@ typedef struct MPID_Request {
+ #ifdef MPID_DEV_REQUEST_DECL
+ MPID_DEV_REQUEST_DECL
+ #endif
+-} MPID_Request ATTRIBUTE((__aligned__(32)));
++} ATTRIBUTE((__aligned__(32))) MPID_Request;
+
+ extern MPIU_Object_alloc_t MPID_Request_mem;
+ /* Preallocated request objects */
diff --git a/var/spack/repos/builtin/packages/mpich/package.py b/var/spack/repos/builtin/packages/mpich/package.py
index dd864acbe3..74234f46ae 100644
--- a/var/spack/repos/builtin/packages/mpich/package.py
+++ b/var/spack/repos/builtin/packages/mpich/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
class Mpich(AutotoolsPackage):
@@ -32,7 +33,7 @@ class Mpich(AutotoolsPackage):
homepage = "http://www.mpich.org"
url = "http://www.mpich.org/static/downloads/3.0.4/mpich-3.0.4.tar.gz"
list_url = "http://www.mpich.org/static/downloads/"
- list_depth = 2
+ list_depth = 1
version('3.2', 'f414cfa77099cd1fa1a5ae4e22db508a')
version('3.1.4', '2ab544607986486562e076b83937bba2')
@@ -41,15 +42,49 @@ class Mpich(AutotoolsPackage):
version('3.1.1', '40dc408b1e03cc36d80209baaa2d32b7')
version('3.1', '5643dd176499bfb7d25079aaff25f2ec')
version('3.0.4', '9c5d5d4fe1e17dd12153f40bc5b6dbc0')
+ version('develop', git='git://github.com/pmodels/mpich')
variant('hydra', default=True, description='Build the hydra process manager')
variant('pmi', default=True, description='Build with PMI support')
variant('romio', default=True, description='Enable ROMIO MPI I/O implementation')
variant('verbs', default=False, description='Build support for OpenFabrics verbs.')
-
+ variant(
+ 'device',
+ default='ch3',
+ description='''Abstract Device Interface (ADI)
+implementation. The ch4 device is currently in experimental state''',
+ values=('ch3', 'ch4'),
+ multi=False
+ )
+ variant(
+ 'netmod',
+ default='tcp',
+ description='''Network module. Only single netmod builds are
+supported. For ch3 device configurations, this presumes the
+ch3:nemesis communication channel. ch3:sock is not supported by this
+spack package at this time.''',
+ values=('tcp', 'mxm', 'ofi', 'ucx'),
+ multi=False
+ )
+
+ provides('mpi')
provides('mpi@:3.0', when='@3:')
provides('mpi@:1.3', when='@1:')
+ # fix MPI_Barrier segmentation fault
+ # see https://lists.mpich.org/pipermail/discuss/2016-May/004764.html
+ # and https://lists.mpich.org/pipermail/discuss/2016-June/004768.html
+ patch('mpich32_clang.patch', when='@3.2%clang')
+
+ depends_on('libfabric', when='netmod=ofi')
+
+ conflicts('device=ch4', when='@:3.2')
+ conflicts('netmod=ofi', when='@:3.1.4')
+ conflicts('netmod=ucx', when='device=ch3')
+ conflicts('netmod=mxm', when='device=ch4')
+ conflicts('netmod=mxm', when='@:3.1.3')
+ conflicts('netmod=tcp', when='device=ch4')
+
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
# On Cray, the regular compiler wrappers *are* the MPI wrappers.
if 'platform=cray' in self.spec:
@@ -69,7 +104,7 @@ class Mpich(AutotoolsPackage):
spack_env.set('MPICH_F90', spack_fc)
spack_env.set('MPICH_FC', spack_fc)
- def setup_dependent_package(self, module, dep_spec):
+ def setup_dependent_package(self, module, dependent_spec):
if 'platform=cray' in self.spec:
self.spec.mpicc = spack_cc
self.spec.mpicxx = spack_cxx
@@ -86,7 +121,16 @@ class Mpich(AutotoolsPackage):
join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix))
]
- @AutotoolsPackage.precondition('autoreconf')
+ def autoreconf(self, spec, prefix):
+ """Not needed usually, configure should be already there"""
+ # If configure exists nothing needs to be done
+ if os.path.exists(self.configure_abs_path):
+ return
+ # Else bootstrap with autotools
+ bash = which('bash')
+ bash('./autogen.sh')
+
+ @run_before('autoreconf')
def die_without_fortran(self):
# Until we can pass variants such as +fortran through virtual
# dependencies depends_on('mpi'), require Fortran compiler to
@@ -98,7 +142,7 @@ class Mpich(AutotoolsPackage):
def configure_args(self):
spec = self.spec
- return [
+ config_args = [
'--enable-shared',
'--with-pm={0}'.format('hydra' if '+hydra' in spec else 'no'),
'--with-pmi={0}'.format('yes' if '+pmi' in spec else 'no'),
@@ -106,7 +150,27 @@ class Mpich(AutotoolsPackage):
'--{0}-ibverbs'.format('with' if '+verbs' in spec else 'without')
]
- @AutotoolsPackage.sanity_check('install')
+ # setup device configuration
+ device_config = ''
+ if 'device=ch4' in spec:
+ device_config = '--with-device=ch4:'
+ elif 'device=ch3' in spec:
+ device_config = '--with-device=ch3:nemesis:'
+
+ if 'netmod=ucx' in spec:
+ device_config += 'ucx'
+ elif 'netmod=ofi' in spec:
+ device_config += 'ofi'
+ elif 'netmod=mxm' in spec:
+ device_config += 'mxm'
+ elif 'netmod=tcp' in spec:
+ device_config += 'tcp'
+
+ config_args.append(device_config)
+
+ return config_args
+
+ @run_after('install')
def filter_compilers(self):
"""Run after install to make the MPI compilers use the
compilers that Spack built the package with.
diff --git a/var/spack/repos/builtin/packages/mpifileutils/package.py b/var/spack/repos/builtin/packages/mpifileutils/package.py
new file mode 100644
index 0000000000..f1bb7e3f39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpifileutils/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 Mpifileutils(AutotoolsPackage):
+ """mpiFileUtils is a suite of MPI-based tools to manage large datasets,
+ which may vary from large directory trees to large files.
+ High-performance computing users often generate large datasets with
+ parallel applications that run with many processes (millions in some
+ cases). However those users are then stuck with single-process tools
+ like cp and rm to manage their datasets. This suite provides
+ MPI-based tools to handle typical jobs like copy, remove, and compare
+ for such datasets, providing speedups of up to 20-30x."""
+
+ homepage = "https://github.com/hpc/mpifileutils"
+ url = "https://github.com/hpc/mpifileutils/releases/download/v0.6/mpifileutils-0.6.tar.gz"
+
+ version('0.7', 'c081f7f72c4521dddccdcf9e087c5a2b')
+ version('0.6', '620bcc4966907481f1b1a965b28fc9bf')
+
+ depends_on('mpi')
+ depends_on('libcircle')
+ depends_on('lwgrp')
+ depends_on('dtcmp')
+ depends_on('libarchive')
+
+ variant('xattr', default=True,
+ description="Enable code for extended attributes")
+
+ variant('lustre', default=False,
+ description="Enable optimizations and features for Lustre")
+
+ variant('experimental', default=False,
+ description="Install experimental tools")
+
+ # --enable-experimental fails with v0.6 and earlier
+ conflicts('+experimental', when='@:0.6')
+
+ def configure_args(self):
+ args = []
+
+ if '+lustre' in self.spec:
+ args.append('--enable-lustre')
+ else:
+ args.append('--disable-lustre')
+
+ if self.spec.satisfies('@0.7:'):
+ if '+experimental' in self.spec:
+ args.append('--enable-experimental')
+ else:
+ args.append('--disable-experimental')
+
+ return args
+
+ @property
+ def build_targets(self):
+ targets = []
+ if '+xattr' in self.spec:
+ targets.append('CFLAGS=-DDCOPY_USE_XATTRS')
+ return targets
diff --git a/var/spack/repos/builtin/packages/mpileaks/package.py b/var/spack/repos/builtin/packages/mpileaks/package.py
index ec4e9b30cc..cbf330666a 100644
--- a/var/spack/repos/builtin/packages/mpileaks/package.py
+++ b/var/spack/repos/builtin/packages/mpileaks/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/mpip/package.py b/var/spack/repos/builtin/packages/mpip/package.py
index 78e1dca68a..a641217622 100644
--- a/var/spack/repos/builtin/packages/mpip/package.py
+++ b/var/spack/repos/builtin/packages/mpip/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,19 +26,21 @@ from spack import *
import os
-class Mpip(Package):
+class Mpip(AutotoolsPackage):
"""mpiP: Lightweight, Scalable MPI Profiling"""
homepage = "http://mpip.sourceforge.net/"
url = "http://downloads.sourceforge.net/project/mpip/mpiP/mpiP-3.4.1/mpiP-3.4.1.tar.gz"
version("3.4.1", "1168adc83777ac31d6ebd385823aabbd")
- depends_on("libelf", type="build")
- depends_on("libdwarf", type="build")
- depends_on('libunwind', when=os.uname()[4] == "x86_64", type="build")
- depends_on("mpi", type="build")
+ depends_on("libelf")
+ depends_on("libdwarf")
+ depends_on('libunwind', when=os.uname()[4] == "x86_64")
+ depends_on("mpi")
- def install(self, spec, prefix):
- configure("--prefix=" + prefix, "--without-f77")
- make()
- make("install")
+ def configure_args(self):
+ config_args = ['--without-f77']
+ config_args.append("--with-cc=%s" % self.spec['mpi'].mpicc)
+ config_args.append("--with-cxx=%s" % self.spec['mpi'].mpicxx)
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/mpir/package.py b/var/spack/repos/builtin/packages/mpir/package.py
index b939a690b2..14be170a3a 100644
--- a/var/spack/repos/builtin/packages/mpir/package.py
+++ b/var/spack/repos/builtin/packages/mpir/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/mpix-launch-swift/package.py b/var/spack/repos/builtin/packages/mpix-launch-swift/package.py
new file mode 100644
index 0000000000..a56337fdd4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mpix-launch-swift/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 distutils.dir_util import copy_tree
+
+
+class MpixLaunchSwift(Package):
+ """Library that allows a child MPI application to be launched
+ inside a subset of processes in a parent MPI application.
+ """
+
+ homepage = "https://bitbucket.org/kshitijvmehta/mpix_launch_swift"
+ url = "https://kshitijvmehta@bitbucket.org/kshitijvmehta/mpix_launch_swift.git"
+
+ version('develop', git='https://kshitijvmehta@bitbucket.org/kshitijvmehta/mpix_launch_swift.git',
+ branch='envs')
+
+ depends_on('stc')
+ depends_on('tcl')
+ depends_on('mpi')
+ depends_on('swig', type='build')
+
+ def install(self, spec, prefix):
+ make()
+ copy_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/mrbayes/package.py b/var/spack/repos/builtin/packages/mrbayes/package.py
new file mode 100644
index 0000000000..9361c3cc0e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mrbayes/package.py
@@ -0,0 +1,72 @@
+##############################################################################
+# 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/spack/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 Mrbayes(AutotoolsPackage):
+ """MrBayes is a program for Bayesian inference and model choice across a
+ wide range of phylogenetic and evolutionary models. MrBayes uses Markov
+ chain Monte Carlo (MCMC) methods to estimate the posterior distribution
+ of model parameters."""
+
+ homepage = "http://mrbayes.sourceforge.net"
+ url = "https://downloads.sourceforge.net/project/mrbayes/mrbayes/3.2.6/mrbayes-3.2.6.tar.gz"
+
+ version('3.2.6', '95f9822f24be47b976bf87540b55d1fe')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+ variant('beagle', default=True, description='Enable BEAGLE library for speed benefits')
+ variant('sse', default=True, description='Enable SSE in order to substantially speed up execution')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ depends_on('libbeagle', when='+beagle')
+ depends_on('mpi', when='+mpi')
+
+ configure_directory = 'src'
+
+ def configure_args(self):
+ args = []
+ if '~beagle' in self.spec:
+ args.append('--with-beagle=no')
+ else:
+ args.append('--with-beagle=%s' % self.spec['libbeagle'].prefix)
+ if '~sse' in self.spec:
+ args.append('--enable-sse=no')
+ else:
+ args.append('--enable-sse=yes')
+ if '~mpi' in self.spec:
+ args.append('--enable-mpi=no')
+ else:
+ args.append('--enable-mpi=yes')
+ return args
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('src'):
+ install('mb', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/mrnet/package.py b/var/spack/repos/builtin/packages/mrnet/package.py
index 9da9e29a2e..6569934817 100644
--- a/var/spack/repos/builtin/packages/mrnet/package.py
+++ b/var/spack/repos/builtin/packages/mrnet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,10 +25,10 @@
from spack import *
-class Mrnet(Package):
+class Mrnet(AutotoolsPackage):
"""The MRNet Multi-Cast Reduction Network."""
homepage = "http://paradyn.org/mrnet"
- url = "ftp://ftp.cs.wisc.edu/paradyn/mrnet/mrnet_5.0.1.tar.gz"
+ url = "http://ftp.cs.wisc.edu/pub/paradyn/mrnet/mrnet_5.0.1.tar.gz"
list_url = "http://ftp.cs.wisc.edu/paradyn/mrnet"
version('5.0.1-2', git='https://github.com/dyninst/mrnet.git',
@@ -43,14 +43,13 @@ class Mrnet(Package):
depends_on("boost")
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
+ config_args = ['--enable-shared']
+
# Build the MRNet LW thread safe libraries when the
# lwthreads variant is present
if '+lwthreads' in spec:
- configure("--prefix=%s" % prefix, "--enable-shared",
- "--enable-ltwt-threadsafe")
- else:
- configure("--prefix=%s" % prefix, "--enable-shared")
+ config_args.append('--enable-ltwt-threadsafe')
- make()
- make("install")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/mrtrix3/package.py b/var/spack/repos/builtin/packages/mrtrix3/package.py
new file mode 100644
index 0000000000..f5daeabf5a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mrtrix3/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 *
+import distutils.dir_util
+
+
+class Mrtrix3(Package):
+ """MRtrix provides a set of tools to perform various advanced diffusion MRI
+ analyses, including constrained spherical deconvolution (CSD),
+ probabilistic tractography, track-density imaging, and apparent fibre
+ density."""
+
+ homepage = "http://www.mrtrix.org/"
+ url = "https://github.com/MRtrix3/mrtrix3"
+
+ version('2017-09-25', commit='72aca89e3d38c9d9e0c47104d0fb5bd2cbdb536d',
+ git='https://github.com/MRtrix3/mrtrix3.git')
+
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('mesa-glu')
+ depends_on('qt+opengl@4.7:')
+ depends_on('eigen')
+ depends_on('zlib')
+ depends_on('libtiff')
+ depends_on('fftw')
+
+ conflicts('%gcc@7:', when='@2017-09-25') # MRtrix3/mrtrix3#1041
+
+ def install(self, spec, prefix):
+ configure = Executable('./configure')
+ build = Executable('./build')
+ configure()
+ build()
+ # install_tree('.', prefix) does not work since the prefix
+ # directory already exists by this point
+ distutils.dir_util.copy_tree('.', prefix)
+
+ def setup_environment(self, spac_env, run_env):
+ run_env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/msgpack-c/package.py b/var/spack/repos/builtin/packages/msgpack-c/package.py
index 9a726e2356..bf78e8d931 100644
--- a/var/spack/repos/builtin/packages/msgpack-c/package.py
+++ b/var/spack/repos/builtin/packages/msgpack-c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,11 @@
from spack import *
-class MsgpackC(Package):
+class MsgpackC(CMakePackage):
"""A small, fast binary interchange format convertible to/from JSON"""
homepage = "http://www.msgpack.org"
url = "https://github.com/msgpack/msgpack-c/archive/cpp-1.4.1.tar.gz"
version('1.4.1', 'e2fd3a7419b9bc49e5017fdbefab87e0')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake('.', *std_cmake_args)
-
- make()
- make("install")
+ depends_on('cmake@2.8.12:', type='build')
diff --git a/var/spack/repos/builtin/packages/mshadow/package.py b/var/spack/repos/builtin/packages/mshadow/package.py
new file mode 100644
index 0000000000..cd9ecfce86
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mshadow/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Mshadow(Package):
+ """MShadow is a lightweight CPU/GPU Matrix/Tensor C++ Template Library.
+ in C++/CUDA."""
+
+ homepage = "https://github.com/dmlc/mshadow"
+ url = "https://github.com/dmlc/mshadow/archive/v1.1.tar.gz"
+
+ version('master', git='https://github.com/dmlc/mshadow.git', branch='master')
+ version('20170721', git='https://github.com/dmlc/mshadow.git',
+ commit='20b54f068c1035f0319fa5e5bbfb129c450a5256')
+
+ def install(self, spec, prefix):
+ install_tree('mshadow', prefix.include.mshadow)
+ install_tree('make', prefix.make)
diff --git a/var/spack/repos/builtin/packages/multitail/package.py b/var/spack/repos/builtin/packages/multitail/package.py
new file mode 100644
index 0000000000..9c9ef2cca0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/multitail/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 Multitail(MakefilePackage):
+ """MultiTail allows you to monitor logfiles and command output
+ in multiple windows in a terminal, colorize, filter and merge."""
+
+ homepage = "https://www.vanheusden.com/multitail/index.php"
+ url = "https://www.vanheusden.com/multitail/multitail-6.4.2.tgz"
+
+ version('6.4.2', 'a0959f7b2385061080712afd8ae6e33d')
+
+ depends_on('ncurses')
+
+ # It's counterintuitive, but use DESTDIR for the install because
+ # the Makefile doesn't consistently use PREFIX with the things
+ # it's installing...
+ @property
+ def install_targets(self):
+ targets = []
+ targets.append('PREFIX=')
+ targets.append('DESTDIR={0}'.format(self.prefix))
+ targets.append('install')
+ return targets
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+
+ nc_include_flags = spec['ncurses'].headers.include_flags
+ nc_ld_flags = spec['ncurses'].libs.ld_flags
+ makefile.filter('CFLAGS\+=', 'CFLAGS+={0} '.format(nc_include_flags))
+ makefile.filter('LDFLAGS\+=', 'LDFLAGS+={0} '.format(nc_ld_flags))
+
+ # Copy the conf file directly into place (don't worry about
+ # overwriting an existing file...)
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': True}
+ makefile.filter('cp multitail.conf $(CONFIG_FILE).new',
+ 'cp multitail.conf $(CONFIG_FILE)', **kwargs)
diff --git a/var/spack/repos/builtin/packages/multiverso/cmake-143187.patch b/var/spack/repos/builtin/packages/multiverso/cmake-143187.patch
new file mode 100644
index 0000000000..5f2847f019
--- /dev/null
+++ b/var/spack/repos/builtin/packages/multiverso/cmake-143187.patch
@@ -0,0 +1,28 @@
+From 478bcfecadafb09aa73bacab35d932851b323142 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Mon, 10 Apr 2017 15:29:50 +0800
+Subject: [PATCH 1/1] Patch 1431875.
+
+---
+ CMakeLists.txt | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6a824f1..100b21c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -30,9 +30,10 @@ ADD_SUBDIRECTORY(Test/unittests)
+ ADD_SUBDIRECTORY(Applications/WordEmbedding)
+ ADD_SUBDIRECTORY(Applications/LogisticRegression)
+
+-if(USE_INSTALL_MULTIVERSO)
++if(INSTALL_MULTIVERSO)
+ install (DIRECTORY ${PROJECT_SOURCE_DIR}/include/multiverso DESTINATION include)
+-endif(USE_INSTALL_MULTIVERSO)
++ install (DIRECTORY ${PROJECT_SOURCE_DIR}/Test DESTINATION .)
++endif(INSTALL_MULTIVERSO)
+
+
+ # uninstall target
+--
+2.11.1
diff --git a/var/spack/repos/builtin/packages/multiverso/package.py b/var/spack/repos/builtin/packages/multiverso/package.py
new file mode 100644
index 0000000000..8993ce1b4d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/multiverso/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Multiverso(CMakePackage):
+ """Multiverso is a parameter server based framework for
+ training machine learning models on big data with numbers of machines."""
+
+ homepage = "https://github.com/Microsoft/Multiverso"
+ url = "https://github.com/Microsoft/Multiverso/archive/v0.2.tar.gz"
+
+ version('master', git='https://github.com/Microsoft/Multiverso.git',
+ branch='master')
+ version('143187', git='https://github.com/Microsoft/Multiverso.git',
+ commit='143187575d1cfa410100037b8aea2e767e0af637')
+ version('0.2', '483ca7524fea14a311389e421f2bc098')
+
+ depends_on('mpi')
+ depends_on('boost')
+
+ patch('cmake-143187.patch', when='@143187')
+
+ def cmake_args(self):
+ spec = self.spec
+ return ['-DBOOST_ROOT:PATH=%s' % spec['boost'].prefix]
diff --git a/var/spack/repos/builtin/packages/mummer/Makefile.patch b/var/spack/repos/builtin/packages/mummer/Makefile.patch
new file mode 100644
index 0000000000..0c96565afb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mummer/Makefile.patch
@@ -0,0 +1,24 @@
+--- a/Makefile 2017-05-15 17:33:05.132803923 -0700
++++ b/Makefile 2017-05-16 16:01:29.264842369 -0700
+@@ -35,6 +35,13 @@
+ TIGR_SRC_DIR := $(TOP_DIR)/src/tigr
+ KURTZ_SRC_DIR := $(TOP_DIR)/src/kurtz
+
++ifndef INSTALL_TOP_DIR
++INSTALL_TOP_DIR := $(TOP_DIR)
++endif
++INSTALL_BIN_DIR := $(INSTALL_TOP_DIR)/bin
++INSTALL_AUX_BIN_DIR := $(INSTALL_TOP_DIR)/aux_bin
++INSTALL_SCRIPT_DIR := $(INSTALL_TOP_DIR)/scripts
++
+ CC := $(filter /%,$(shell /bin/sh -c 'type gcc'))
+ CXX := $(filter /%,$(shell /bin/sh -c 'type g++'))
+ SED := $(filter /%,$(shell /bin/sh -c 'type sed'))
+@@ -52,6 +59,7 @@
+
+ #-- EXPORT THESE VARIABLES TO OTHER MAKEFILES
+ export BIN_DIR AUX_BIN_DIR CXX CC CFLAGS CXXFLAGS LDFLAGS
++export INSTALL_BIN_DIR INSTALL_AUX_BIN_DIR INSTALL_SCRIPT_DIR
+
+
+
diff --git a/var/spack/repos/builtin/packages/mummer/package.py b/var/spack/repos/builtin/packages/mummer/package.py
new file mode 100644
index 0000000000..8aabf502f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mummer/package.py
@@ -0,0 +1,75 @@
+##############################################################################
+# 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/spack/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 Mummer(Package):
+ """MUMmer is a system for rapidly aligning entire genomes."""
+
+ homepage = "http://mummer.sourceforge.net/"
+ url = "https://sourceforge.net/projects/mummer/files/mummer/3.23/MUMmer3.23.tar.gz/download"
+
+ version('3.23', 'f2422b3d2638dba4baedb71b1acdffa2')
+
+ depends_on('gnuplot')
+ depends_on('perl', type=('build', 'run'))
+
+ patch('Makefile.patch')
+ patch('scripts-Makefile.patch')
+
+ def patch(self):
+ """Fix mummerplot's use of defined on hashes (deprecated
+ since perl@5.10, made illegal in perl@5.20."""
+
+ kwargs = {'string': True}
+ filter_file('defined (%', '(%', 'scripts/mummerplot.pl',
+ **kwargs)
+
+ def install(self, spec, prefix):
+ if self.run_tests:
+ make('check')
+ make('INSTALL_TOP_DIR={0}'.format(prefix))
+ bd = prefix.bin
+ abd = join_path(prefix, 'aux_bin')
+ sd = join_path(prefix, 'scripts')
+ mkdirp(bd)
+ mkdirp(abd)
+ mkdirp(sd)
+
+ bins = ["show-tiling", "show-snps", "show-coords", "show-aligns",
+ "show-diff", "delta-filter", "combineMUMs", "mummer",
+ "repeat-match", "annotate", "mgaps", "gaps", "dnadiff",
+ "nucmer2xfig", "run-mummer3", "mummerplot", "promer",
+ "run-mummer1", "nucmer", "mapview", "exact-tandems"]
+ aux_bins = ["aux_bin/postnuc", "aux_bin/postpro",
+ "aux_bin/prenuc", "aux_bin/prepro"]
+ scripts = ["scripts/Foundation.pm"]
+
+ for f in bins:
+ install(f, join_path(bd, f))
+ for f in aux_bins:
+ install(f, join_path(abd, f[8:]))
+ for f in scripts:
+ install(f, join_path(sd, f[8:]))
diff --git a/var/spack/repos/builtin/packages/mummer/scripts-Makefile.patch b/var/spack/repos/builtin/packages/mummer/scripts-Makefile.patch
new file mode 100644
index 0000000000..961a4d5463
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mummer/scripts-Makefile.patch
@@ -0,0 +1,74 @@
+--- a/scripts/Makefile 2011-12-16 18:49:26.000000000 -0800
++++ b/scripts/Makefile 2017-05-16 16:05:48.697853000 -0700
+@@ -37,56 +37,56 @@
+ #-- not so PHONY rules --#
+ exact-tandems: exact-tandems.csh
+ $(SED) -e 's?__CSH_PATH?$(CSH)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
+ exact-tandems.csh > $(BIN_DIR)/exact-tandems
+ chmod 755 $(BIN_DIR)/exact-tandems
+
+ mapview: mapview.pl
+ $(SED) -e 's?__PERL_PATH?$(PERL)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
+ mapview.pl > $(BIN_DIR)/mapview
+ chmod 755 $(BIN_DIR)/mapview
+
+ mummerplot: mummerplot.pl Foundation.pm
+ $(SED) -e 's?__PERL_PATH?$(PERL)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ mummerplot.pl > $(BIN_DIR)/mummerplot
+ chmod 755 $(BIN_DIR)/mummerplot
+
+ dnadiff: dnadiff.pl Foundation.pm
+ $(SED) -e 's?__PERL_PATH?$(PERL)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ dnadiff.pl > $(BIN_DIR)/dnadiff
+ chmod 755 $(BIN_DIR)/dnadiff
+
+ nucmer: nucmer.pl Foundation.pm
+ $(SED) -e 's?__PERL_PATH?$(PERL)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
+- -e 's?__AUX_BIN_DIR?$(AUX_BIN_DIR)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
++ -e 's?__AUX_BIN_DIR?$(INSTALL_AUX_BIN_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ nucmer.pl > $(BIN_DIR)/nucmer
+ chmod 755 $(BIN_DIR)/nucmer
+
+ promer: promer.pl Foundation.pm
+ $(SED) -e 's?__PERL_PATH?$(PERL)?g' \
+- -e 's?__SCRIPT_DIR?$(SCRIPT_DIR)?g' \
+- -e 's?__AUX_BIN_DIR?$(AUX_BIN_DIR)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__SCRIPT_DIR?$(INSTALL_SCRIPT_DIR)?g' \
++ -e 's?__AUX_BIN_DIR?$(INSTALL_AUX_BIN_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ promer.pl > $(BIN_DIR)/promer
+ chmod 755 $(BIN_DIR)/promer
+
+ run-mummer1: run-mummer1.csh
+ $(SED) -e 's?__CSH_PATH?$(CSH)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ run-mummer1.csh > $(BIN_DIR)/run-mummer1
+ chmod 755 $(BIN_DIR)/run-mummer1
+
+ run-mummer3: run-mummer3.csh
+ $(SED) -e 's?__CSH_PATH?$(CSH)?g' \
+- -e 's?__BIN_DIR?$(BIN_DIR)?g' \
++ -e 's?__BIN_DIR?$(INSTALL_BIN_DIR)?g' \
+ run-mummer3.csh > $(BIN_DIR)/run-mummer3
+ chmod 755 $(BIN_DIR)/run-mummer3
+
diff --git a/var/spack/repos/builtin/packages/mumps/mumps-5.0.2-spectrum-mpi-xl.patch b/var/spack/repos/builtin/packages/mumps/mumps-5.0.2-spectrum-mpi-xl.patch
new file mode 100644
index 0000000000..d2bd17cb44
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mumps/mumps-5.0.2-spectrum-mpi-xl.patch
@@ -0,0 +1,75 @@
+diff -Naur MUMPS_5.0.1/Makefile MUMPS_5.0.1-patched/MUMPS_5.0.1/Makefile
+--- ./Makefile 2015-07-23 13:08:29.000000000 -0400
++++ ./Makefile 2016-12-05 14:08:30.788638382 -0500
+@@ -62,7 +62,7 @@
+ $(libdir)/libpord$(PLAT)$(LIBEXT):
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cd $(LPORDDIR); \
+- $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" AR="$(AR)" RANLIB="$(RANLIB)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT); \
++ $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" SAR="$(SAR)" RANLIB="$(RANLIB)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT); \
+ fi;
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cp $(LPORDDIR)/libpord$(LIBEXT) $@; \
+diff -Naur MUMPS_5.0.1/PORD/lib/Makefile MUMPS_5.0.1-patched/PORD/lib/MUMPS_5.0.1/Makefile
+--- ./PORD/lib/Makefile 2015-07-23 13:08:29.000000000 -0400
++++ ./PORD/lib/Makefile 2016-12-05 11:26:24.785317467 -0500
+@@ -25,7 +25,7 @@
+ $(CC) $(COPTIONS) -c $*.c $(OUTC)$*.o
+
+ libpord$(LIBEXT):$(OBJS)
+- $(AR)$@ $(OBJS)
++ $(SAR)$@ $(OBJS)
+ $(RANLIB) $@
+
+ clean:
+diff -Naur MUMPS_5.0.1/examples/Makefile MUMPS_5.0.1-patched/examples/Makefile
+--- ./examples/Makefile 2015-07-23 13:08:32.000000000 -0400
++++ ./examples/Makefile 2016-12-05 14:36:10.692857906 -0500
+@@ -25,37 +25,30 @@
+
+ LIBSMUMPS = $(libdir)/libsmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-ssimpletest: $(LIBSMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) ssimpletest.o $(LIBSMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++ssimpletest: $(LIBSMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include ssimpletest.F $(LIBSMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBDMUMPS = $(libdir)/libdmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-dsimpletest: $(LIBDMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) dsimpletest.o $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++dsimpletest: $(LIBDMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include dsimpletest.F $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBCMUMPS = $(libdir)/libcmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-csimpletest: $(LIBCMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) csimpletest.o $(LIBCMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++csimpletest: $(LIBCMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include csimpletest.F $(LIBCMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBZMUMPS = $(libdir)/libzmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-zsimpletest: $(LIBZMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) zsimpletest.o $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++zsimpletest: $(LIBZMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include zsimpletest.F $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+-c_example: $(LIBDMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) $@.o $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+-
+-
+-.SUFFIXES: .c .F .o
+-.F.o:
+- $(FC) $(OPTF) $(INCS) -I. -I$(topdir)/include -c $*.F $(OUTF)$*.o
+-.c.o:
+- $(CC) $(OPTC) $(INCS) $(CDEFS) -I. -I$(topdir)/include -I$(topdir)/src -c $*.c $(OUTC)$*.o
++c_example: $(LIBDMUMPS) $$@.c
++ $(CC) -o $@ $(OPTC) $(INCS) -I. -I$(topdir)/include c_example.c $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ $(libdir)/libsmumps$(PLAT)$(LIBEXT):
diff --git a/var/spack/repos/builtin/packages/mumps/mumps-5.1.1-spectrum-mpi-xl.patch b/var/spack/repos/builtin/packages/mumps/mumps-5.1.1-spectrum-mpi-xl.patch
new file mode 100644
index 0000000000..8d9c1fb93a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mumps/mumps-5.1.1-spectrum-mpi-xl.patch
@@ -0,0 +1,79 @@
+diff -Naur MUMPS_5.0.1/Makefile MUMPS_5.0.1-patched/MUMPS_5.0.1/Makefile
+--- ./Makefile 2015-07-23 13:08:29.000000000 -0400
++++ ./Makefile 2016-12-05 14:08:30.788638382 -0500
+@@ -62,7 +62,7 @@
+ $(libdir)/libpord$(PLAT)$(LIBEXT):
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cd $(LPORDDIR); \
+- $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" AR="$(AR)" RANLIB="$(RANLIB)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT); \
++ $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" SAR="$(SAR)" RANLIB="$(RANLIB)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT); \
+ fi;
+ if [ "$(LPORDDIR)" != "" ] ; then \
+ cp $(LPORDDIR)/libpord$(LIBEXT) $@; \
+diff -Naur MUMPS_5.0.1/PORD/lib/Makefile MUMPS_5.0.1-patched/PORD/lib/MUMPS_5.0.1/Makefile
+--- ./PORD/lib/Makefile 2015-07-23 13:08:29.000000000 -0400
++++ ./PORD/lib/Makefile 2016-12-05 11:26:24.785317467 -0500
+@@ -25,7 +25,7 @@
+ $(CC) $(COPTIONS) -c $*.c $(OUTC)$*.o
+
+ libpord$(LIBEXT):$(OBJS)
+- $(AR)$@ $(OBJS)
++ $(SAR)$@ $(OBJS)
+ $(RANLIB) $@
+
+ clean:
+--- ./examples/Makefile 2017-06-07 15:40:49.366671322 -0400
++++ ./examples/Makefile 2017-06-07 15:47:55.666685772 -0400
+@@ -26,40 +26,33 @@
+
+ LIBSMUMPS = $(libdir)/libsmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-ssimpletest: $(LIBSMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) ssimpletest.o $(LIBSMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++ssimpletest: $(LIBSMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include ssimpletest.F $(LIBSMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBDMUMPS = $(libdir)/libdmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-dsimpletest: $(LIBDMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) dsimpletest.o $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++dsimpletest: $(LIBDMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include dsimpletest.F $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBCMUMPS = $(libdir)/libcmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-csimpletest: $(LIBCMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) csimpletest.o $(LIBCMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++csimpletest: $(LIBCMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include csimpletest.F $(LIBCMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ LIBZMUMPS = $(libdir)/libzmumps$(PLAT)$(LIBEXT) $(LIBMUMPS_COMMON)
+
+-zsimpletest: $(LIBZMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) zsimpletest.o $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++zsimpletest: $(LIBZMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include zsimpletest.F $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+-c_example: $(LIBDMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) $@.o $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
++c_example: $(LIBDMUMPS) $$@.c
++ $(CC) -o $@ $(OPTC) $(INCS) -I. -I$(topdir)/include c_example.c $(LIBDMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+-multiple_arithmetics_example: $(LIBSMUMPS) $(LIBDMUMPS) $(LIBCMUMPS) $(LIBZMUMPS) $$@.o
+- $(FL) -o $@ $(OPTL) $@.o $(LIBSMUMPS) $(LIBDMUMPS) $(LIBCMUMPS) $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+-
+-
+-.SUFFIXES: .c .F .o
+-.F.o:
+- $(FC) $(OPTF) $(INCS) -I. -I$(topdir)/include -c $*.F $(OUTF)$*.o
+-.c.o:
+- $(CC) $(OPTC) $(INCS) $(CDEFS) -I. -I$(topdir)/include -I$(topdir)/src -c $*.c $(OUTC)$*.o
++multiple_arithmetics_example: $(LIBSMUMPS) $(LIBDMUMPS) $(LIBCMUMPS) $(LIBZMUMPS) $$@.F
++ $(FC) -o $@ $(OPTF) $(INCS) -I. -I$(topdir)/include multiple_arithmetics_example.F $(LIBSMUMPS) $(LIBDMUMPS) $(LIBCMUMPS) $(LIBZMUMPS) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS)
+
+
+ $(libdir)/libsmumps$(PLAT)$(LIBEXT):
diff --git a/var/spack/repos/builtin/packages/mumps/package.py b/var/spack/repos/builtin/packages/mumps/package.py
index 82d0c606b6..cf3c4bbd1e 100644
--- a/var/spack/repos/builtin/packages/mumps/package.py
+++ b/var/spack/repos/builtin/packages/mumps/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,6 +34,7 @@ class Mumps(Package):
homepage = "http://mumps.enseeiht.fr"
url = "http://mumps.enseeiht.fr/MUMPS_5.0.1.tar.gz"
+ version('5.1.1', 'f15c6b5dd8c71b1241004cd19818259d')
version('5.0.2', '591bcb2c205dcb0283872608cdf04927')
# Alternate location if main server is down.
# version('5.0.1', 'b477573fdcc87babe861f62316833db0', url='http://pkgs.fedoraproject.org/repo/pkgs/MUMPS/MUMPS_5.0.1.tar.gz/md5/b477573fdcc87babe861f62316833db0/MUMPS_5.0.1.tar.gz')
@@ -60,7 +61,7 @@ class Mumps(Package):
variant('shared', default=True, description='Build shared libraries')
depends_on('scotch + esmumps', when='~ptscotch+scotch')
- depends_on('scotch + esmumps + mpi', when='+ptscotch')
+ depends_on('scotch + esmumps ~ metis + mpi', when='+ptscotch')
depends_on('metis@5:', when='+metis')
depends_on('parmetis', when="+parmetis")
depends_on('blas')
@@ -68,6 +69,11 @@ class Mumps(Package):
depends_on('scalapack', when='+mpi')
depends_on('mpi', when='+mpi')
+ patch('mumps-5.0.2-spectrum-mpi-xl.patch', when='@5.0.2%xl^spectrum-mpi')
+ patch('mumps-5.0.2-spectrum-mpi-xl.patch', when='@5.0.2%xl_r^spectrum-mpi')
+ patch('mumps-5.1.1-spectrum-mpi-xl.patch', when='@5.1.1%xl^spectrum-mpi')
+ patch('mumps-5.1.1-spectrum-mpi-xl.patch', when='@5.1.1%xl_r^spectrum-mpi')
+
# this function is not a patch function because in case scalapack
# is needed it uses self.spec['scalapack'].fc_link set by the
# setup_dependent_environment in scalapck. This happen after patch
@@ -79,21 +85,16 @@ class Mumps(Package):
raise RuntimeError(
'You cannot use the variants parmetis or ptscotch without mpi')
- lapack_blas = (self.spec['lapack'].lapack_libs +
- self.spec['blas'].blas_libs)
- makefile_conf = ["LIBBLAS = %s" % lapack_blas.joined()]
+ lapack_blas = (self.spec['lapack'].libs +
+ self.spec['blas'].libs)
+ makefile_conf = ["LIBBLAS = %s" % lapack_blas.ld_flags]
orderings = ['-Dpord']
if '+ptscotch' in self.spec or '+scotch' in self.spec:
- join_lib = ' -l%s' % ('pt' if '+ptscotch' in self.spec else '')
makefile_conf.extend([
"ISCOTCH = -I%s" % self.spec['scotch'].prefix.include,
- "LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib,
- join_lib,
- join_lib.join(['esmumps',
- 'scotch',
- 'scotcherr']))
+ "LSCOTCH = {0}".format(self.spec['scotch'].libs.ld_flags)
])
orderings.append('-Dscotch')
@@ -122,31 +123,49 @@ class Mumps(Package):
# when building shared libs need -fPIC, otherwise
# /usr/bin/ld: graph.o: relocation R_X86_64_32 against `.rodata.str1.1'
# can not be used when making a shared object; recompile with -fPIC
- fpic = '-fPIC' if '+shared' in self.spec else ''
+ fpic = self.compiler.pic_flag if '+shared' in self.spec else ''
# TODO: test this part, it needs a full blas, scalapack and
# partitionning environment with 64bit integers
+
if '+int64' in self.spec:
- makefile_conf.extend(
- # the fortran compilation flags most probably are
- # working only for intel and gnu compilers this is
- # perhaps something the compiler should provide
- ['OPTF = %s -O -DALLOW_NON_INIT %s' % (fpic, '-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8'), # noqa
- 'OPTL = %s -O ' % fpic,
- 'OPTC = %s -O -DINTSIZE64' % fpic])
+ if self.compiler.name == "xl" or self.compiler.name == "xl_r":
+ makefile_conf.extend(
+ ['OPTF = -O3',
+ 'OPTL = %s -O3' % fpic,
+ 'OPTC = %s -O3-DINTSIZE64' % fpic])
+ else:
+ makefile_conf.extend(
+ # the fortran compilation flags most probably are
+ # working only for intel and gnu compilers this is
+ # perhaps something the compiler should provide
+ ['OPTF = %s -O -DALLOW_NON_INIT %s' % (fpic, '-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8'), # noqa
+ 'OPTL = %s -O ' % fpic,
+ 'OPTC = %s -O -DINTSIZE64' % fpic])
else:
- makefile_conf.extend(
- ['OPTF = %s -O -DALLOW_NON_INIT' % fpic,
- 'OPTL = %s -O ' % fpic,
- 'OPTC = %s -O ' % fpic])
+ if self.compiler.name == "xl" or self.compiler.name == "xl_r":
+ makefile_conf.extend(
+ ['OPTF = -O3 -qfixed',
+ 'OPTL = %s -O3' % fpic,
+ 'OPTC = %s -O3' % fpic])
+ else:
+ makefile_conf.extend(
+ ['OPTF = %s -O -DALLOW_NON_INIT' % fpic,
+ 'OPTL = %s -O ' % fpic,
+ 'OPTC = %s -O ' % fpic])
if '+mpi' in self.spec:
- scalapack = self.spec['scalapack'].scalapack_libs
+ scalapack = self.spec['scalapack'].libs
makefile_conf.extend(
- ["CC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpicc'),
- "FC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'),
- "FL = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'),
+ ['CC = {0}'.format(self.spec['mpi'].mpicc),
+ 'FC = {0}'.format(self.spec['mpi'].mpifc),
"SCALAP = %s" % scalapack.ld_flags,
"MUMPS_TYPE = par"])
+ if (self.spec.satisfies('%xl_r' or '%xl')) and self.spec.satisfies('^spectrum-mpi'): # noqa
+ makefile_conf.extend(
+ ['FL = {0}'.format(self.spec['mpi'].mpicc)])
+ else:
+ makefile_conf.extend(
+ ['FL = {0}'.format(self.spec['mpi'].mpifc)])
else:
makefile_conf.extend(
["CC = cc",
@@ -156,13 +175,14 @@ class Mumps(Package):
# TODO: change the value to the correct one according to the
# compiler possible values are -DAdd_, -DAdd__ and/or -DUPPER
- if self.compiler.name == 'intel':
- # Intel Fortran compiler provides the main() function so
+ if self.compiler.name == 'intel' or self.compiler.name == 'pgi':
+ # Intel & PGI Fortran compiler provides the main() function so
# C examples linked with the Fortran compiler require a
# hack defined by _DMAIN_COMP (see examples/c_example.c)
makefile_conf.append("CDEFS = -DAdd_ -DMAIN_COMP")
else:
- makefile_conf.append("CDEFS = -DAdd_")
+ if self.compiler.name != "xl" and self.compiler.name != "xl_r":
+ makefile_conf.append("CDEFS = -DAdd_")
if '+shared' in self.spec:
if sys.platform == 'darwin':
@@ -179,6 +199,11 @@ class Mumps(Package):
'AR=$(FL) -shared -Wl,-soname -Wl,%s/$(notdir $@) -o' % prefix.lib, # noqa
'RANLIB=echo'
])
+
+ if self.compiler.name == 'xl' or self.compiler.name == 'xl_r':
+ makefile_conf.extend([
+ 'SAR=/bin/xlc -shared -Wl,-soname -Wl,%s/$(notdir $@) -o' % prefix.lib # noqa
+ ])
else:
makefile_conf.extend([
'LIBEXT = .a',
diff --git a/var/spack/repos/builtin/packages/munge/package.py b/var/spack/repos/builtin/packages/munge/package.py
index 38dbfa1cc1..f53fa5953e 100644
--- a/var/spack/repos/builtin/packages/munge/package.py
+++ b/var/spack/repos/builtin/packages/munge/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/muparser/package.py b/var/spack/repos/builtin/packages/muparser/package.py
index 1373c8cd7b..8c65207dc5 100644
--- a/var/spack/repos/builtin/packages/muparser/package.py
+++ b/var/spack/repos/builtin/packages/muparser/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/muscle/package.py b/var/spack/repos/builtin/packages/muscle/package.py
new file mode 100644
index 0000000000..7ba57284c6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/muscle/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Muscle(MakefilePackage):
+ """MUSCLE is one of the best-performing multiple alignment programs
+ according to published benchmark tests, with accuracy and speed
+ that are consistently better than CLUSTALW."""
+
+ homepage = "http://drive5.com/muscle/"
+ url = "http://www.drive5.com/muscle/muscle_src_3.8.1551.tar.gz"
+
+ version('3.8.1551', '1b7c9661f275a82d3cf708f923736bf8')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ makefile.filter('-static', '')
+ makefile.filter('-funroll-loops', '')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('muscle', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/muse/package.py b/var/spack/repos/builtin/packages/muse/package.py
new file mode 100644
index 0000000000..3c3616854e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/muse/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 Muse(MakefilePackage):
+ """Somatic point mutation caller."""
+
+ homepage = "http://bioinformatics.mdanderson.org/main/MuSE"
+ url = "https://github.com/danielfan/MuSE/archive/v1.0-rc.tar.gz"
+
+ version('1.0-rc', 'c63fdb48c041f6f9545879f1a7e4da58')
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('MuSE', prefix.bin.MuSE)
diff --git a/var/spack/repos/builtin/packages/muster/package.py b/var/spack/repos/builtin/packages/muster/package.py
index 81817e48dc..d926c90d8e 100644
--- a/var/spack/repos/builtin/packages/muster/package.py
+++ b/var/spack/repos/builtin/packages/muster/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Muster(Package):
+class Muster(CMakePackage):
"""The Muster library provides implementations of sequential and
parallel K-Medoids clustering algorithms. It is intended as a
general framework for parallel cluster analysis, particularly
@@ -38,11 +38,6 @@ class Muster(Package):
version('1.0.1', 'd709787db7e080447afb6571ac17723c')
version('1.0', '2eec6979a4a36d3a65a792d12969be16')
- depends_on("boost")
- depends_on("mpi")
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- cmake(".", *std_cmake_args)
- make()
- make("install")
+ depends_on('boost')
+ depends_on('mpi')
+ depends_on('cmake@2.8:', type='build')
diff --git a/var/spack/repos/builtin/packages/mvapich2/package.py b/var/spack/repos/builtin/packages/mvapich2/package.py
index 18f2ebe0bb..4454907b74 100644
--- a/var/spack/repos/builtin/packages/mvapich2/package.py
+++ b/var/spack/repos/builtin/packages/mvapich2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,79 +22,90 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import sys
+
from spack import *
+from spack.error import SpackError
+
+
+def _process_manager_validator(values):
+ if len(values) > 1 and 'slurm' in values:
+ raise SpackError(
+ 'slurm cannot be activated along with other process managers'
+ )
-class Mvapich2(Package):
+class Mvapich2(AutotoolsPackage):
"""MVAPICH2 is an MPI implementation for Infiniband networks."""
homepage = "http://mvapich.cse.ohio-state.edu/"
url = "http://mvapich.cse.ohio-state.edu/download/mvapich/mv2/mvapich2-2.2.tar.gz"
+ list_url = "http://mvapich.cse.ohio-state.edu/downloads/"
- version('2.2', '939b65ebe5b89a5bc822cdab0f31f96e')
+ # Newer alpha release
+ version('2.3a', '87c3fbf8a755b53806fa9ecb21453445')
+
+ # Prefer the latest stable release
+ version('2.2', '939b65ebe5b89a5bc822cdab0f31f96e', preferred=True)
version('2.1', '0095ceecb19bbb7fb262131cb9c2cdd6')
version('2.0', '9fbb68a4111a8b6338e476dc657388b4')
version('1.9', '5dc58ed08fd3142c260b70fe297e127c')
patch('ad_lustre_rwcontig_open_source.patch', when='@1.9')
+ provides('mpi')
provides('mpi@:2.2', when='@1.9') # MVAPICH2-1.9 supports MPI 2.2
provides('mpi@:3.0', when='@2.0:') # MVAPICH2-2.0 supports MPI 3.0
variant('debug', default=False,
description='Enable debug info and error messages at run-time')
- ##########
- # TODO : Process managers should be grouped into the same variant,
- # as soon as variant capabilities will be extended See
- # https://groups.google.com/forum/#!topic/spack/F8-f8B4_0so
- SLURM = 'slurm'
- HYDRA = 'hydra'
- GFORKER = 'gforker'
- REMSHELL = 'remshell'
- SLURM_INCOMPATIBLE_PMS = (HYDRA, GFORKER, REMSHELL)
- variant(SLURM, default=False,
- description='Set slurm as the only process manager')
- variant(HYDRA, default=False,
- description='Set hydra as one of the process managers')
- variant(GFORKER, default=False,
- description='Set gforker as one of the process managers')
- variant(REMSHELL, default=False,
- description='Set remshell as one of the process managers')
- ##########
-
- ##########
- # TODO : Network types should be grouped into the same variant, as
- # soon as variant capabilities will be extended
- PSM = 'psm'
- SOCK = 'sock'
- NEMESISIBTCP = 'nemesisibtcp'
- NEMESISIB = 'nemesisib'
- NEMESIS = 'nemesis'
- MRAIL = 'mrail'
- SUPPORTED_NETWORKS = (PSM, SOCK, NEMESIS, NEMESISIB, NEMESISIBTCP)
- variant(
- PSM, default=False,
- description='Configure for QLogic PSM-CH3')
- variant(
- SOCK, default=False,
- description='Configure for TCP/IP-CH3')
- variant(
- NEMESISIBTCP, default=False,
- description='Configure for both OFA-IB-Nemesis and TCP/IP-Nemesis')
+ variant('cuda', default=False,
+ description='Enable CUDA extension')
+
+ # Accepted values are:
+ # single - No threads (MPI_THREAD_SINGLE)
+ # funneled - Only the main thread calls MPI (MPI_THREAD_FUNNELED)
+ # serialized - User serializes calls to MPI (MPI_THREAD_SERIALIZED)
+ # multiple - Fully multi-threaded (MPI_THREAD_MULTIPLE)
+ # runtime - Alias to "multiple"
variant(
- NEMESISIB, default=False,
- description='Configure for OFA-IB-Nemesis')
+ 'threads',
+ default='multiple',
+ values=('single', 'funneled', 'serialized', 'multiple'),
+ multi=False,
+ description='Control the level of thread support'
+ )
+
+ # 32 is needed when job size exceeds 32768 cores
variant(
- NEMESIS, default=False,
- description='Configure for TCP/IP-Nemesis')
+ 'ch3_rank_bits',
+ default='32',
+ values=('16', '32'),
+ multi=False,
+ description='Number of bits allocated to the rank field (16 or 32)'
+ )
+
variant(
- MRAIL, default=False,
- description='Configure for OFA-IB-CH3')
- ##########
+ 'process_managers',
+ description='List of the process managers to activate',
+ values=('slurm', 'hydra', 'gforker', 'remshell'),
+ multi=True,
+ validator=_process_manager_validator
+ )
- # FIXME : CUDA support is missing
- depends_on('bison')
- depends_on('libpciaccess')
+ variant(
+ 'fabrics',
+ description='The fabric enabled for this build',
+ default='psm',
+ values=(
+ 'psm', 'sock', 'nemesisib', 'nemesis', 'mrail', 'nemesisibtcp',
+ 'nemesistcpib'
+ )
+ )
+
+ depends_on('bison', type='build')
+ depends_on('libpciaccess', when=(sys.platform != 'darwin'))
+ depends_on('cuda', when='+cuda')
def url_for_version(self, version):
base_url = "http://mvapich.cse.ohio-state.edu/download"
@@ -103,113 +114,57 @@ class Mvapich2(Package):
else:
return "%s/mvapich/mv2/mvapich2-%s.tar.gz" % (base_url, version)
- @staticmethod
- def enabled(x):
- """Given a variant name returns the string that means the variant is
- enabled
-
- :param x: variant name
- :return:
- """
- return '+' + x
+ @property
+ def process_manager_options(self):
+ spec = self.spec
- def set_build_type(self, spec, configure_args):
- """Appends to configure_args the flags that depends only on the build
- type (i.e. release or debug)
+ other_pms = []
+ for x in ('hydra', 'gforker', 'remshell'):
+ if 'process_managers={0}'.format(x) in spec:
+ other_pms.append(x)
+ opts = ['--with-pm=%s' % ':'.join(other_pms)]
- :param spec: spec
- :param configure_args: list of current configure arguments
- """
- if '+debug' in spec:
- build_type_options = [
- "--disable-fast",
- "--enable-error-checking=runtime",
- "--enable-error-messages=all",
- # Permits debugging with TotalView
- "--enable-g=dbg", "--enable-debuginfo"
- ]
- else:
- build_type_options = ["--enable-fast=all"]
-
- configure_args.extend(build_type_options)
-
- def set_process_manager(self, spec, configure_args):
- """Appends to configure_args the flags that will enable the
- appropriate process managers
-
- :param spec: spec
- :param configure_args: list of current configure arguments
- """
- # Check that slurm variant is not activated together with
- # other pm variants
- has_slurm_incompatible_variants = \
- any(self.enabled(x) in spec
- for x in Mvapich2.SLURM_INCOMPATIBLE_PMS)
-
- if self.enabled(Mvapich2.SLURM) in spec and \
- has_slurm_incompatible_variants:
- raise RuntimeError(" %s : 'slurm' cannot be activated \
- together with other process managers" % self.name)
-
- process_manager_options = []
# See: http://slurm.schedmd.com/mpi_guide.html#mvapich2
- if self.enabled(Mvapich2.SLURM) in spec:
+ if 'process_managers=slurm' in spec:
if self.version > Version('2.0'):
- process_manager_options = [
- "--with-pmi=pmi2",
- "--with-pm=slurm"
+ opts = [
+ '--with-pmi=pmi2',
+ '--with-pm=slurm'
]
else:
- process_manager_options = [
- "--with-pmi=slurm",
- "--with-pm=no"
+ opts = [
+ '--with-pmi=slurm',
+ '--with-pm=no'
]
- elif has_slurm_incompatible_variants:
- pms = []
- # The variant name is equal to the process manager name in
- # the configuration options
- for x in Mvapich2.SLURM_INCOMPATIBLE_PMS:
- if self.enabled(x) in spec:
- pms.append(x)
- process_manager_options = [
- "--with-pm=%s" % ':'.join(pms)
- ]
- configure_args.extend(process_manager_options)
-
- def set_network_type(self, spec, configure_args):
- # Check that at most one variant has been activated
- count = 0
- for x in Mvapich2.SUPPORTED_NETWORKS:
- if self.enabled(x) in spec:
- count += 1
- if count > 1:
- raise RuntimeError('network variants are mutually exclusive \
- (only one can be selected at a time)')
-
- network_options = []
+ return opts
+
+ @property
+ def network_options(self):
+ opts = []
# From here on I can suppose that only one variant has been selected
- if self.enabled(Mvapich2.PSM) in spec:
- network_options = ["--with-device=ch3:psm"]
- elif self.enabled(Mvapich2.SOCK) in spec:
- network_options = ["--with-device=ch3:sock"]
- elif self.enabled(Mvapich2.NEMESISIBTCP) in spec:
- network_options = ["--with-device=ch3:nemesis:ib,tcp"]
- elif self.enabled(Mvapich2.NEMESISIB) in spec:
- network_options = ["--with-device=ch3:nemesis:ib"]
- elif self.enabled(Mvapich2.NEMESIS) in spec:
- network_options = ["--with-device=ch3:nemesis"]
- elif self.enabled(Mvapich2.MRAIL) in spec:
- network_options = ["--with-device=ch3:mrail", "--with-rdma=gen2"]
-
- configure_args.extend(network_options)
+ if 'fabrics=psm' in self.spec:
+ opts = ["--with-device=ch3:psm"]
+ elif 'fabrics=sock' in self.spec:
+ opts = ["--with-device=ch3:sock"]
+ elif 'fabrics=nemesistcpib' in self.spec:
+ opts = ["--with-device=ch3:nemesis:tcp,ib"]
+ elif 'fabrics=nemesisibtcp' in self.spec:
+ opts = ["--with-device=ch3:nemesis:ib,tcp"]
+ elif 'fabrics=nemesisib' in self.spec:
+ opts = ["--with-device=ch3:nemesis:ib"]
+ elif 'fabrics=nemesis' in self.spec:
+ opts = ["--with-device=ch3:nemesis"]
+ elif 'fabrics=mrail' in self.spec:
+ opts = ["--with-device=ch3:mrail", "--with-rdma=gen2"]
+ return opts
def setup_environment(self, spack_env, run_env):
- if self.enabled(Mvapich2.SLURM) in self.spec and \
- self.version > Version('2.0'):
+ spec = self.spec
+ if 'process_managers=slurm' in spec and spec.satisfies('@2.0:'):
run_env.set('SLURM_MPI_TYPE', 'pmi2')
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
spack_env.set('MPICC', join_path(self.prefix.bin, 'mpicc'))
spack_env.set('MPICXX', join_path(self.prefix.bin, 'mpicxx'))
spack_env.set('MPIF77', join_path(self.prefix.bin, 'mpif77'))
@@ -221,7 +176,7 @@ class Mvapich2(Package):
spack_env.set('MPICH_F90', spack_fc)
spack_env.set('MPICH_FC', spack_fc)
- def setup_dependent_package(self, module, dep_spec):
+ def setup_dependent_package(self, module, dependent_spec):
self.spec.mpicc = join_path(self.prefix.bin, 'mpicc')
self.spec.mpicxx = join_path(self.prefix.bin, 'mpicxx')
self.spec.mpifc = join_path(self.prefix.bin, 'mpif90')
@@ -231,45 +186,53 @@ class Mvapich2(Package):
join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix))
]
- def install(self, spec, prefix):
+ @run_before('configure')
+ def die_without_fortran(self):
# Until we can pass variants such as +fortran through virtual
# dependencies depends_on('mpi'), require Fortran compiler to
# avoid delayed build errors in dependents.
if (self.compiler.f77 is None) or (self.compiler.fc is None):
- raise InstallError('Mvapich2 requires both C and Fortran ',
- 'compilers!')
-
- # we'll set different configure flags depending on our
- # environment
- configure_args = [
- "--prefix=%s" % prefix,
- "--enable-shared",
- "--enable-romio",
- "--disable-silent-rules",
+ raise InstallError(
+ 'Mvapich2 requires both C and Fortran compilers!'
+ )
+
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ '--enable-shared',
+ '--enable-romio',
+ '-disable-silent-rules',
+ '--enable-fortran=all',
+ "--enable-threads={0}".format(spec.variants['threads'].value),
+ "--with-ch3-rank-bits={0}".format(
+ spec.variants['ch3_rank_bits'].value),
]
- if self.compiler.f77 and self.compiler.fc:
- configure_args.append("--enable-fortran=all")
- elif self.compiler.f77:
- configure_args.append("--enable-fortran=f77")
- elif self.compiler.fc:
- configure_args.append("--enable-fortran=fc")
+ if '+debug' in self.spec:
+ args.extend([
+ '--disable-fast',
+ '--enable-error-checking=runtime',
+ '--enable-error-messages=all',
+ # Permits debugging with TotalView
+ '--enable-g=dbg',
+ '--enable-debuginfo'
+ ])
else:
- configure_args.append("--enable-fortran=none")
+ args.append('--enable-fast=all')
- # Set the type of the build (debug, release)
- self.set_build_type(spec, configure_args)
- # Set the process manager
- self.set_process_manager(spec, configure_args)
- # Determine network type by variant
- self.set_network_type(spec, configure_args)
-
- configure(*configure_args)
- make()
- make("install")
+ if '+cuda' in self.spec:
+ args.extend([
+ '--enable-cuda',
+ '--with-cuda={0}'.format(spec['cuda'].prefix)
+ ])
+ else:
+ args.append('--disable-cuda')
- self.filter_compilers()
+ args.extend(self.process_manager_options)
+ args.extend(self.network_options)
+ return args
+ @run_after('install')
def filter_compilers(self):
"""Run after install to make the MPI compilers use the
compilers that Spack built the package with.
@@ -279,10 +242,11 @@ class Mvapich2(Package):
be bound to whatever compiler they were built with.
"""
bin = self.prefix.bin
- mpicc = join_path(bin, 'mpicc')
+ mpicc = join_path(bin, 'mpicc')
mpicxx = join_path(bin, 'mpicxx')
mpif77 = join_path(bin, 'mpif77')
mpif90 = join_path(bin, 'mpif90')
+ mpifort = join_path(bin, 'mpifort')
# Substitute Spack compile wrappers for the real
# underlying compiler
@@ -291,8 +255,9 @@ class Mvapich2(Package):
filter_file(env['CXX'], self.compiler.cxx, mpicxx, **kwargs)
filter_file(env['F77'], self.compiler.f77, mpif77, **kwargs)
filter_file(env['FC'], self.compiler.fc, mpif90, **kwargs)
+ filter_file(env['FC'], self.compiler.fc, mpifort, **kwargs)
# Remove this linking flag if present
# (it turns RPATH into RUNPATH)
- for wrapper in (mpicc, mpicxx, mpif77, mpif90):
+ for wrapper in (mpicc, mpicxx, mpif77, mpif90, mpifort):
filter_file('-Wl,--enable-new-dtags', '', wrapper, **kwargs)
diff --git a/var/spack/repos/builtin/packages/mxml/package.py b/var/spack/repos/builtin/packages/mxml/package.py
index 29e3b27d6e..c1e0a8f968 100644
--- a/var/spack/repos/builtin/packages/mxml/package.py
+++ b/var/spack/repos/builtin/packages/mxml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,26 +25,32 @@
from spack import *
-class Mxml(Package):
+class Mxml(AutotoolsPackage):
"""Mini-XML is a small XML library that you can use to read and write XML
and XML-like data files in your application without requiring large
non-standard libraries.
"""
- homepage = "http://www.msweet.org"
- url = "http://www.msweet.org/files/project3/mxml-2.9.tar.gz"
+ homepage = "http://michaelrsweet.github.io/mxml/"
+ url = "https://github.com/michaelrsweet/mxml/releases/download/release-2.10/mxml-2.10.tar.gz"
+ version('2.10', '8804c961a24500a95690ef287d150abe')
version('2.9', 'e21cad0f7aacd18f942aa0568a8dee19')
version('2.8', 'd85ee6d30de053581242c4a86e79a5d2')
version('2.7', '76f2ae49bf0f5745d5cb5d9507774dc9')
version('2.6', '68977789ae64985dddbd1a1a1652642e')
version('2.5', 'f706377fba630b39fa02fd63642b17e5')
- # module swap PrgEnv-intel PrgEnv-$COMP
- # (Can use whatever compiler you want to use)
- # Case statement to change CC and CXX flags
+ def url_for_version(self, version):
+ if version <= Version('2.7'):
+ return 'https://github.com/michaelrsweet/mxml/archive/release-{0}.tar.gz'.format(version)
+ else:
+ return 'https://github.com/michaelrsweet/mxml/releases/download/release-{0}/mxml-{0}.tar.gz'.format(version)
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix, "--disable-shared", 'CFLAGS=-static')
- make()
- make("install")
+ def configure_args(self):
+ return [
+ # ADIOS build with -fPIC, so we need it too (avoid linkage issue)
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ # Default is non-shared, but avoid any future surprises
+ '--disable-shared',
+ ]
diff --git a/var/spack/repos/builtin/packages/mxnet/makefile.patch b/var/spack/repos/builtin/packages/mxnet/makefile.patch
new file mode 100644
index 0000000000..ceebe21447
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mxnet/makefile.patch
@@ -0,0 +1,81 @@
+From 22b64127d7acc9c255b007e120e2a721f4e136d2 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Fri, 18 Aug 2017 23:32:16 +0800
+Subject: [PATCH] Enable customize CUB MSHADOW PSLITE CUDA paths.
+
+---
+ Makefile | 26 +++++++++++++++++++++-----
+ 1 file changed, 21 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index c71cb13..a53d072 100644
+--- a/Makefile
++++ b/Makefile
+@@ -14,6 +14,19 @@ ifndef DMLC_CORE
+ DMLC_CORE = $(ROOTDIR)/dmlc-core
+ endif
+
++ifndef MSHADOW_PATH
++ MSHADOW_PATH = $(ROOTDIR)/mshadow
++endif
++ifneq ("$(wildcard $(MSHADOW_PATH)/include/mshadow/base.h)","")
++MSHADOW_INC = $(MSHADOW_PATH)/include
++else
++MSHADOW_INC = $(MSHADOW_PATH)
++endif
++
++ifndef PS_PATH
++ PS_PATH = $(ROOTDIR)/ps-lite
++endif
++
+ ifndef NNVM_PATH
+ NNVM_PATH = $(ROOTDIR)/nnvm
+ endif
+@@ -32,7 +45,7 @@ ifeq ($(USE_MKL2017), 1)
+ export USE_MKLML = $(lastword $(RETURN_STRING))
+ endif
+
+-include mshadow/make/mshadow.mk
++include $(MSHADOW_PATH)/make/mshadow.mk
+ include $(DMLC_CORE)/make/dmlc.mk
+
+ # all tge possible warning tread
+@@ -49,7 +62,7 @@ ifeq ($(DEBUG), 1)
+ else
+ CFLAGS += -O3 -DNDEBUG=1
+ endif
+-CFLAGS += -I$(ROOTDIR)/mshadow/ -I$(ROOTDIR)/dmlc-core/include -fPIC -I$(NNVM_PATH)/include -Iinclude $(MSHADOW_CFLAGS)
++CFLAGS += -I$(MSHADOW_INC) -I$(DMLC_CORE)/include -fPIC -I$(NNVM_PATH)/include -Iinclude $(MSHADOW_CFLAGS)
+ LDFLAGS = -pthread $(MSHADOW_LDFLAGS) $(DMLC_LDFLAGS)
+ ifeq ($(DEBUG), 1)
+ NVCCFLAGS = -std=c++11 -Xcompiler -D_FORCE_INLINES -g -G -O0 -ccbin $(CXX) $(MSHADOW_NVCCFLAGS)
+@@ -125,8 +138,11 @@ ifneq ($(USE_CUDA_PATH), NONE)
+ NVCC=$(USE_CUDA_PATH)/bin/nvcc
+ endif
+
++ifndef CUB_INCLUDE
++ CUB_PATH = $(ROOTDIR)/cub
++endif
++
+ # ps-lite
+-PS_PATH=$(ROOTDIR)/ps-lite
+ DEPS_PATH=$(shell pwd)/deps
+ include $(PS_PATH)/make/ps.mk
+ ifeq ($(USE_DIST_KVSTORE), 1)
+@@ -181,11 +197,11 @@ else
+ endif
+
+ # all dep
+-LIB_DEP += $(DMLC_CORE)/libdmlc.a $(NNVM_PATH)/lib/libnnvm.a
++LIB_DEP += $(DMLC_CORE)/lib/libdmlc.a $(NNVM_PATH)/lib/libnnvm.a
+ ALL_DEP = $(OBJ) $(EXTRA_OBJ) $(PLUGIN_OBJ) $(LIB_DEP)
+
+ ifeq ($(USE_CUDA), 1)
+- CFLAGS += -I$(ROOTDIR)/cub
++ CFLAGS += -I$(CUB_INCLUDE) -I$(USE_CUDA_PATH)/include -I$(CUDNN_PATH)/include
+ ALL_DEP += $(CUOBJ) $(EXTRA_CUOBJ) $(PLUGIN_CUOBJ)
+ LDFLAGS += -lcuda -lcufft
+ SCALA_PKG_PROFILE := $(SCALA_PKG_PROFILE)-gpu
+--
+1.8.3.1
+
diff --git a/var/spack/repos/builtin/packages/mxnet/package.py b/var/spack/repos/builtin/packages/mxnet/package.py
new file mode 100644
index 0000000000..00443ec633
--- /dev/null
+++ b/var/spack/repos/builtin/packages/mxnet/package.py
@@ -0,0 +1,101 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Mxnet(MakefilePackage):
+ """MXNet is a deep learning framework
+ designed for both efficiency and flexibility."""
+
+ homepage = "http://mxnet.io"
+ url = "https://github.com/apache/incubator-mxnet/archive/0.10.0.post2.tar.gz"
+
+ version('0.10.0.post2', '7819d511cf4a6efad681e6662fa966e4',
+ url="https://github.com/apache/incubator-mxnet/archive/0.10.0.post2.tar.gz")
+ version('0.10.0.post1', '16d540f407cd22285555b3ab22040032',
+ url="https://github.com/apache/incubator-mxnet/archive/v0.10.0.post1.tar.gz")
+ version('0.10.0', '2d0c83c33eda729932d620cca3078826',
+ url="https://github.com/apache/incubator-mxnet/archive/v0.10.0.tar.gz")
+
+ variant('cuda', default=False, description='Enable CUDA support')
+ variant('opencv', default=True, description='Enable OpenCV support')
+ variant('openmp', default=False, description='Enable OpenMP support')
+ variant('profiler', default=False, description='Enable Profiler (for verification and debug only).')
+
+ depends_on('dmlc-core@20170508')
+ depends_on('dmlc-core+openmp', when='+openmp')
+ depends_on('dmlc-core~openmp', when='~openmp')
+ depends_on('mshadow@20170721')
+ depends_on('ps-lite@20170328')
+ depends_on('nnvm~shared@20170418')
+ depends_on('openblas')
+ depends_on('cudnn', when='+cuda')
+ depends_on('cudnn', when='+cuda')
+ depends_on('cub', when='+cuda')
+ depends_on('opencv+core+imgproc+highgui+jpeg+png+tiff~eigen~ipp@3.0:', when='+opencv')
+
+ patch('makefile.patch', when='@0.10:0.11')
+
+ def build(self, spec, prefix):
+ filter_file('export CC = gcc', '', 'make/config.mk', string=True)
+ filter_file('export CXX = g++', '', 'make/config.mk', string=True)
+
+ args = [
+ 'CC=%s' % self.compiler.cc,
+ 'CXX=%s' % self.compiler.cxx,
+ 'DMLC_CORE=%s' % spec['dmlc-core'].prefix,
+ 'MSHADOW_PATH=%s' % spec['mshadow'].prefix,
+ 'PS_PATH=%s' % spec['ps-lite'].prefix,
+ 'NNVM_PATH=%s' % spec['nnvm'].prefix,
+ 'USE_OPENMP=%s' % ('1' if '+openmp' in spec else '0'),
+ 'USE_CUDA=%s' % ('1' if '+cuda' in spec else '0'),
+ 'USE_CUDNN=%s' % ('1' if '+cuda' in spec else '0'),
+ 'CUB_INCLUDE=%s' % spec['cub'].prefix.include,
+ 'USE_OPENCV=%s' % ('1' if '+opencv' in spec else '0'),
+ 'USE_PROFILER=%s' % ('1' if '+profiler' in spec else '0'),
+ ]
+
+ if '+opencv' in spec:
+ filter_file('$(shell pkg-config --cflags opencv)',
+ '-I%s' % spec['opencv'].prefix.include,
+ 'Makefile', string=True)
+ filter_file('$(filter-out -lopencv_ts, '
+ '$(shell pkg-config --libs opencv))',
+ '-lopencv_core -lopencv_imgproc -lopencv_imgcodecs',
+ 'Makefile', string=True)
+
+ # TODO: Add more BLAS support
+ args.append('USE_BLAS=openblas')
+
+ if '+cuda' in spec:
+ args.extend(['USE_CUDA_PATH=%s' % spec['cuda'].prefix,
+ 'CUDNN_PATH=%s' % spec['cudnn'].prefix])
+
+ make(*args)
+
+ def install(self, spec, prefix):
+ install_tree('include', prefix.include)
+ install_tree('lib', prefix.lib)
+ install_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/nag/package.py b/var/spack/repos/builtin/packages/nag/package.py
index 66cb2a6a54..226cd90353 100644
--- a/var/spack/repos/builtin/packages/nag/package.py
+++ b/var/spack/repos/builtin/packages/nag/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class Nag(Package):
"""The NAG Fortran Compiler."""
homepage = "http://www.nag.com/nagware/np.asp"
- version('6.1', 'f49bd548e0d5e2458b2dabb3ee01341a')
+ version('6.1', '0040d2254258223c78a6a4ab4829d7e0')
version('6.0', '3fa1e7f7b51ef8a23e6c687cdcad9f96')
# Licensing
@@ -54,3 +54,7 @@ class Nag(Package):
# Run install script
os.system('./INSTALLU.sh')
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('F77', join_path(self.prefix.bin, 'nagfor'))
+ run_env.set('FC', join_path(self.prefix.bin, 'nagfor'))
diff --git a/var/spack/repos/builtin/packages/nalu/package.py b/var/spack/repos/builtin/packages/nalu/package.py
new file mode 100644
index 0000000000..36dd317009
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nalu/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 Nalu(CMakePackage):
+ """Nalu: a generalized unstructured massively parallel low Mach flow code
+ designed to support a variety of energy applications of interest (most
+ notably Wind ECP) built on the Sierra Toolkit and Trilinos solver
+ Tpetra/Epetra stack
+ """
+
+ homepage = "https://github.com/NaluCFD/Nalu"
+ url = "https://github.com/NaluCFD/Nalu.git"
+
+ maintainers = ['jrood-nrel']
+
+ variant('openfast', default=False,
+ description='Compile with OpenFAST support')
+
+ version('master',
+ git='https://github.com/NaluCFD/Nalu.git', branch='master')
+
+ # Currently Nalu only builds static libraries; To be fixed soon
+ depends_on('yaml-cpp+pic~shared@0.5.3:')
+ depends_on('trilinos~shared+exodus+tpetra+muelu+belos+ifpack2+amesos2+zoltan+stk+boost~superlu-dist+superlu+hdf5+zlib+pnetcdf+shards@master,12.12.1:')
+ depends_on('openfast+cxx', when='+openfast')
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+
+ options.extend([
+ '-DTrilinos_DIR:PATH=%s' % spec['trilinos'].prefix,
+ '-DYAML_DIR:PATH=%s' % spec['yaml-cpp'].prefix,
+ '-DENABLE_INSTALL:BOOL=ON'
+ ])
+
+ if '+openfast' in spec:
+ options.extend([
+ '-DOpenFAST_DIR:PATH=%s' % spec['openfast'].prefix
+ ])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/namd/package.py b/var/spack/repos/builtin/packages/namd/package.py
new file mode 100644
index 0000000000..54d165525b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/namd/package.py
@@ -0,0 +1,151 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import platform
+import shutil
+import sys
+import os
+from spack import *
+
+
+class Namd(MakefilePackage):
+ """NAMDis a parallel molecular dynamics code designed for
+ high-performance simulation of large biomolecular systems."""
+
+ homepage = "http://www.ks.uiuc.edu/Research/namd/"
+ url = "file://{0}/NAMD_2.12_Source.tar.gz".format(os.getcwd())
+
+ version('2.12', '2a1191909b1ab03bf0205971ad4d8ee9')
+
+ variant('fftw', default='3', values=('none', '2', '3', 'mkl'),
+ description='Enable the use of FFTW/FFTW3/MKL FFT')
+
+ variant('interface', default='none', values=('none', 'tcl', 'python'),
+ description='Enables TCL and/or python interface')
+
+ depends_on('charm')
+
+ depends_on('fftw@:2.99', when="fftw=2")
+ depends_on('fftw@3:', when="fftw=3")
+
+ depends_on('intel-mkl', when="fftw=mkl")
+
+ depends_on('tcl', when='interface=tcl')
+
+ depends_on('tcl', when='interface=python')
+ depends_on('python', when='interface=python')
+
+ def _copy_arch_file(self, lib):
+ config_filename = 'arch/{0}.{1}'.format(self.arch, lib)
+ shutil.copy('arch/Linux-x86_64.{0}'.format(lib),
+ config_filename)
+ if lib == 'tcl':
+ filter_file(r'-ltcl8\.5',
+ '-ltcl{0}'.format(self.spec['tcl'].version.up_to(2)),
+ config_filename)
+
+ def _append_option(self, opts, lib):
+ if lib != 'python':
+ self._copy_arch_file(lib)
+ spec = self.spec
+ opts.extend([
+ '--with-{0}'.format(lib),
+ '--{0}-prefix'.format(lib), spec[lib].prefix
+ ])
+
+ @property
+ def arch(self):
+ plat = sys.platform
+ if plat.startswith("linux"):
+ plat = "linux"
+ march = platform.machine()
+ return '{0}-{1}'.format(plat, march)
+
+ @property
+ def build_directory(self):
+ return '{0}-spack'.format(self.arch)
+
+ def edit(self, spec, prefix):
+ with working_dir('arch'):
+ with open('{0}.arch'.format(self.build_directory), 'w') as fh:
+ # this options are take from the default provided
+ # configuration files
+ optims_opts = {
+ 'gcc': '-m64 -O3 -fexpensive-optimizations -ffast-math',
+ 'intel': '-O2 -ip'
+ }
+
+ optim_opts = optims_opts[self.compiler.name] \
+ if self.compiler.name in optims_opts else ''
+
+ fh.write('\n'.join([
+ 'NAMD_ARCH = {0}'.format(self.arch),
+ 'CHARMARCH = ',
+ 'CXX = {0.cxx} {0.cxx11_flag}'.format(
+ self.compiler),
+ 'CXXOPTS = {0}'.format(optim_opts),
+ 'CC = {0}'.format(self.compiler.cc),
+ 'COPTS = {0}'.format(optim_opts),
+ ''
+ ]))
+
+ self._copy_arch_file('base')
+
+ opts = ['--charm-base', spec['charm'].prefix]
+ fftw_version = spec.variants['fftw'].value
+ if fftw_version == 'none':
+ opts.append('--without-fftw')
+ elif fftw_version == 'mkl':
+ self._append_option(opts, 'mkl')
+ else:
+ _fftw = 'fftw{0}'.format('' if fftw_version == '2' else '3')
+
+ self._copy_arch_file(_fftw)
+ opts.extend(['--with-{0}'.format(_fftw),
+ '--fftw-prefix', spec['fftw'].prefix])
+
+ interface_type = spec.variants['interface'].value
+ if interface_type != 'none':
+ self._append_option(opts, 'tcl')
+
+ if interface_type == 'python':
+ self._append_option(opts, 'python')
+ else:
+ opts.extend([
+ '--without-tcl',
+ '--without-python'
+ ])
+
+ config = Executable('./config')
+
+ config(self.build_directory, *opts)
+
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ mkdirp(prefix.bin)
+ install('namd2', prefix.bin)
+
+ # I'm not sure this is a good idea or if an autoload of the charm
+ # module would not be better.
+ install('charmrun', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/nano/package.py b/var/spack/repos/builtin/packages/nano/package.py
index 3e87ec8ffe..200c47a7b3 100644
--- a/var/spack/repos/builtin/packages/nano/package.py
+++ b/var/spack/repos/builtin/packages/nano/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Nano(Package):
+class Nano(AutotoolsPackage):
"""Tiny little text editor"""
homepage = "http://www.nano-editor.org"
@@ -34,7 +34,4 @@ class Nano(Package):
version('2.6.3', '1213c7f17916e65afefc95054c1f90f9')
version('2.6.2', '58568a4b8a33841d774c25f285fc11c1')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make('install')
+ depends_on('ncurses')
diff --git a/var/spack/repos/builtin/packages/nanoflann/package.py b/var/spack/repos/builtin/packages/nanoflann/package.py
new file mode 100644
index 0000000000..13c5797d69
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nanoflann/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Nanoflann(CMakePackage):
+ """a C++ header-only library for Nearest Neighbor (NN) search wih KD-trees.
+ """
+
+ homepage = "https://github.com/jlblancoc/nanoflann"
+ url = "https://github.com/jlblancoc/nanoflann/archive/v1.2.3.tar.gz"
+
+ version('1.2.3', '92a0f44a631c41aa06f9716c51dcdb11')
+
+ def cmake_args(self):
+ args = ['-DBUILD_SHARED_LIBS=ON']
+ return args
diff --git a/var/spack/repos/builtin/packages/nasm/package.py b/var/spack/repos/builtin/packages/nasm/package.py
index 9faccccaae..2979ad43f5 100644
--- a/var/spack/repos/builtin/packages/nasm/package.py
+++ b/var/spack/repos/builtin/packages/nasm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Nasm(Package):
+class Nasm(AutotoolsPackage):
"""NASM (Netwide Assembler) is an 80x86 assembler designed for
portability and modularity. It includes a disassembler as well."""
homepage = "http://www.nasm.us"
url = "http://www.nasm.us/pub/nasm/releasebuilds/2.11.06/nasm-2.11.06.tar.xz"
version('2.11.06', '2b958e9f5d200641e6fc9564977aecc5')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/nauty/package.py b/var/spack/repos/builtin/packages/nauty/package.py
index 0d5eed251b..ef032ad7c9 100644
--- a/var/spack/repos/builtin/packages/nauty/package.py
+++ b/var/spack/repos/builtin/packages/nauty/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,67 +23,72 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import shutil
+import os
from spack import *
-class Nauty(Package):
+class Nauty(AutotoolsPackage):
"""nauty and Traces are programs for computing automorphism groups of
graphsq and digraphs"""
homepage = "http://pallini.di.uniroma1.it/index.html"
url = "http://pallini.di.uniroma1.it/nauty26r7.tar.gz"
version('2.6r7', 'b2b18e03ea7698db3fbe06c5d76ad8fe')
- version('2.6r5', '91b03a7b069962e94fc9aac8831ce8d2')
- version('2.5r9', 'e8ecd08b0892a1fb13329c147f08de6d')
+
+ # Debian/ Fedora patches for @2.6r7:
+ urls_for_patches = {
+ '@2.6r7': [
+ # Debian patch to fix the gt_numorbits declaration
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-fix-gt_numorbits.patch',
+ 'c8e4546a7b262c92cee226beb1dc71d87d644b115375e9c8550598efcc00254f'),
+ # Debian patch to add explicit extern declarations where needed
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-fix-include-extern.patch',
+ 'c52c62e4dc46532ad89632a3f59a9faf13dd7988e9ef29fc5e5b2a3e17449bb6'),
+ # Debian patch to use zlib instead of invoking zcat through a pipe
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-zlib-blisstog.patch',
+ 'b1210bfb41ddbeb4c956d660266f62e806026a559a4700ce78024a9db2b82168'),
+ # Debian patch to improve usage and help information
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-help2man.patch',
+ 'c11544938446a3eca70d55b0f1084ce56fb1fb415db1ec1b5a69fd310a02b16c'),
+ # Debian patch to add libtool support for building a shared library
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-autotoolization.patch',
+ '7f60ae3d8aeee830306db991c908efae461f103527a7899ce79d936bb15212b5'),
+ # Debian patch to canonicalize header file usage
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-includes.patch',
+ '9a305f0cd3f1136a9885518bd7912c669d1ca4b2b43bd039d6fc5535b9679778'),
+ # Debian patch to prefix "nauty-" to the names of the generic tools
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-tool-prefix.patch',
+ '736266813a62b3151e0b81ded6578bd0f53f03fc8ffbc54c7c2a2c64ac07b25f'),
+ # Fedora patch to detect availability of the popcnt
+ # instruction at runtime
+ ('https://src.fedoraproject.org/rpms/nauty/raw/0f07d01caf84e9d30cb06b11af4860dd3837636a/f/nauty-popcnt.patch',
+ '0dc2e0374491dddf5757f0717d0ea3f949f85b540202385662f10c358b4a08e8')
+ ]
+ }
+ # Iterate over patches
+ for condition, urls in urls_for_patches.items():
+ for url, sha256 in urls:
+ patch(url, when=condition, level=1, sha256=sha256)
+
+ depends_on('m4', type='build', when='@2.6r7')
+ depends_on('autoconf', type='build', when='@2.6r7')
+ depends_on('automake', type='build', when='@2.6r7')
+ depends_on('libtool', type='build', when='@2.6r7')
+ depends_on('pkg-config', type='build')
+ depends_on('help2man', type='build')
+ depends_on('zlib')
+ depends_on('gmp')
+
+ @property
+ def force_autoreconf(self):
+ return self.spec.satisfies('@2.6r7')
def url_for_version(self, version):
url = "http://pallini.di.uniroma1.it/nauty{0}.tar.gz"
return url.format(version.joined)
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
-
- exes = [
- "NRswitchg",
- "addedgeg",
- "amtog",
- "biplabg",
- "catg",
- "complg",
- "converseg",
- "copyg",
- "countg",
- "cubhamg",
- "deledgeg",
- "delptg",
- "directg",
- "dreadnaut",
- "dretodot",
- "dretog",
- "genbg",
- "genbgL",
- "geng",
- "genquarticg",
- "genrang",
- "genspecialg",
- "gentourng",
- "gentreeg",
- "hamheuristic",
- "labelg",
- "linegraphg",
- "listg",
- "multig",
- "newedgeg",
- "pickg",
- "planarg",
- "ranlabg",
- "shortg",
- "subdivideg",
- "twohamg",
- "vcolg",
- "watercluster2"]
- mkdirp(prefix.bin)
- for exe in exes:
- shutil.copyfile(exe, join_path(prefix.bin, exe))
+ def patch(self):
+ os.remove('makefile')
+ ver = str(self.version.dotted).replace('r', '.')
+ if self.spec.satisfies('@2.6r7'):
+ filter_file('@INJECTVER@', ver, "configure.ac")
diff --git a/var/spack/repos/builtin/packages/ncbi-rmblastn/package.py b/var/spack/repos/builtin/packages/ncbi-rmblastn/package.py
new file mode 100644
index 0000000000..57b918cde8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ncbi-rmblastn/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 NcbiRmblastn(AutotoolsPackage):
+ """RMBlast search engine for NCBI"""
+
+ homepage = "https://www.ncbi.nlm.nih.gov/"
+ url = "ftp://ftp.ncbi.nlm.nih.gov/blast/executables/rmblast/LATEST/ncbi-rmblastn-2.2.28-src.tar.gz"
+
+ version('2.2.28', 'fb5f4e2e02ffcb1b17af2e9f206c5c22')
+
+ configure_directory = 'c++'
diff --git a/var/spack/repos/builtin/packages/nccl/package.py b/var/spack/repos/builtin/packages/nccl/package.py
new file mode 100644
index 0000000000..e1ac486e16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nccl/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Nccl(MakefilePackage):
+ """Optimized primitives for collective multi-GPU communication."""
+
+ homepage = "https://github.com/NVIDIA/nccl"
+ url = "https://github.com/NVIDIA/nccl/archive/v1.3.4-1.tar.gz"
+
+ version('1.3.4-1', '5b9ce7fbdce0fde68e0f66318e6ff422')
+ version('1.3.0-1', 'f6fb1d56913a7d212ca0c300e76f01fb')
+
+ depends_on('cuda')
+
+ @property
+ def build_targets(self):
+ return ['CUDA_HOME={0}'.format(self.spec['cuda'].prefix)]
+
+ @property
+ def install_targets(self):
+ return ['PREFIX={0}'.format(self.prefix), 'install']
diff --git a/var/spack/repos/builtin/packages/nccmp/package.py b/var/spack/repos/builtin/packages/nccmp/package.py
index d59ca09381..e710faa034 100644
--- a/var/spack/repos/builtin/packages/nccmp/package.py
+++ b/var/spack/repos/builtin/packages/nccmp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/ncdu/package.py b/var/spack/repos/builtin/packages/ncdu/package.py
index 0842a592cc..a95fc5b1ca 100644
--- a/var/spack/repos/builtin/packages/ncdu/package.py
+++ b/var/spack/repos/builtin/packages/ncdu/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/ncftp/package.py b/var/spack/repos/builtin/packages/ncftp/package.py
new file mode 100644
index 0000000000..704affdad3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ncftp/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Ncftp(AutotoolsPackage):
+ """NcFTP Client is a set of application programs implementing the
+ File Transfer Protocol."""
+
+ homepage = "http://www.ncftp.com/"
+ url = "ftp://ftp.ncftp.com/ncftp/ncftp-3.2.6-src.tar.gz"
+
+ version('3.2.6', 'e7cce57ef6274d4c7433ffe28ffe0a71')
+
+ depends_on('ncurses')
diff --git a/var/spack/repos/builtin/packages/ncl/hdf5.patch b/var/spack/repos/builtin/packages/ncl/hdf5.patch
new file mode 100644
index 0000000000..ff8b586b4f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ncl/hdf5.patch
@@ -0,0 +1,11 @@
+--- a/ni/src/ncl/NclNewHDF5.c 2017-04-05 12:57:52.311104685 +0200
++++ b/ni/src/ncl/NclNewHDF5.c 2017-04-05 12:58:17.634551443 +0200
+@@ -35,6 +35,8 @@
+ #include <sys/types.h>
+ #include <sys/stat.h>
+
++#define H5_USE_18_API
++
+ #include <hdf5.h>
+
+ #ifdef NIO_LIB_ONLY
diff --git a/var/spack/repos/builtin/packages/ncl/package.py b/var/spack/repos/builtin/packages/ncl/package.py
index 7d31c7a8f7..25b903e4c7 100644
--- a/var/spack/repos/builtin/packages/ncl/package.py
+++ b/var/spack/repos/builtin/packages/ncl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import glob
import os
import shutil
import tempfile
@@ -36,11 +37,15 @@ class Ncl(Package):
homepage = "https://www.ncl.ucar.edu"
- version('6.3.0', '4834df63d3b56778441246303ab921c4',
- url='https://www.earthsystemgrid.org/download/fileDownload.html?'
- 'logicalFileId=bec58cb3-cd9b-11e4-bb80-00c0f03d5b7c',
+ version('6.4.0', 'a981848ddcaf1c263279648265f24766',
+ url='https://www.earthsystemgrid.org/download/fileDownload.html?logicalFileId=86b9bec2-fa01-11e6-a976-00c0f03d5b7c',
extension='tar.gz')
+
patch('spack_ncl.patch')
+ # Make ncl compile with hdf5 1.10
+ patch('hdf5.patch')
+ # ymake-filter's buffer may overflow
+ patch('ymake-filter.patch')
# This installation script is implemented according to this manual:
# http://www.ncl.ucar.edu/Download/build_from_src.shtml
@@ -54,17 +59,35 @@ class Ncl(Package):
# Non-optional dependencies according to the manual:
depends_on('jpeg')
depends_on('netcdf')
- depends_on('cairo')
+ depends_on('cairo+X')
+
+ # Extra dependencies that may be missing from build system:
+ depends_on('bison', type='build')
+ depends_on('flex+lex')
+ depends_on('libiconv')
+ depends_on('tcsh')
# Also, the manual says that ncl requires zlib, but that comes as a
# mandatory dependency of libpng, which is a mandatory dependency of cairo.
+ # The following dependencies are required, otherwise several components
+ # fail to compile:
+ depends_on('curl')
+ depends_on('libiconv')
+ depends_on('libx11')
+ depends_on('libxaw')
+ depends_on('libxmu')
+
# In Spack, we do not have an option to compile netcdf without netcdf-4
# support, so we will tell the ncl configuration script that we want
# support for netcdf-4, but the script assumes that hdf5 is compiled with
# szip support. We introduce this restriction with the following dependency
# statement.
- depends_on('hdf5@:1.8+szip')
+ depends_on('hdf5+szip')
+ depends_on('szip')
+
+ # ESMF is only required at runtime (for ESMF_regridding.ncl)
+ depends_on('esmf', type='run')
# In Spack, we also do not have an option to compile netcdf without DAP
# support, so we will tell the ncl configuration script that we have it.
@@ -83,6 +106,23 @@ class Ncl(Package):
placement='triangle_src',
when='+triangle')
+ def patch(self):
+ # Make configure scripts use Spack's tcsh
+ files = ['Configure'] + glob.glob('config/*')
+
+ filter_file('^#!/bin/csh -f', '#!/usr/bin/env csh', *files)
+
+ @run_before('install')
+ def filter_sbang(self):
+ # Filter sbang before install so Spack's sbang hook can fix it up
+ files = glob.glob('ncarg2d/src/bin/scripts/*')
+ files += glob.glob('ncarview/src/bin/scripts/*')
+ files += glob.glob('ni/src/scripts/*')
+
+ csh = join_path(self.spec['tcsh'].prefix.bin, 'csh')
+
+ filter_file('^#!/bin/csh', '#!{0}'.format(csh), *files)
+
def install(self, spec, prefix):
if (self.compiler.fc is None) or (self.compiler.cc is None):
@@ -108,7 +148,7 @@ class Ncl(Package):
if self.compiler.name == 'gcc':
fc_flags.append('-fno-range-check')
- c2f_flags.extend(['-lgfortran'])
+ c2f_flags.extend(['-lgfortran', '-lm'])
elif self.compiler.name == 'intel':
fc_flags.append('-fp-model precise')
cc_flags.append('-fp-model precise')
@@ -149,7 +189,7 @@ class Ncl(Package):
# Parent installation directory :
'\'' + self.spec.prefix + '\'\n',
# System temp space directory :
- '\'' + tempfile.mkdtemp(prefix='ncl_ncar_') + '\'\n',
+ '\'' + tempfile.gettempdir() + '\'\n',
# Build NetCDF4 feature support (optional)?
'y\n'
]
@@ -180,6 +220,8 @@ class Ncl(Package):
'y\n',
# Build GDAL support (optional) into NCL?
'y\n' if '+gdal' in self.spec else 'n\n',
+ # Build EEMD support (optional) into NCL?
+ 'n\n',
# Build Udunits-2 support (optional) into NCL?
'y\n' if '+uduints2' in self.spec else 'n\n',
# Build Vis5d+ support (optional) into NCL?
@@ -228,6 +270,6 @@ class Ncl(Package):
if os.path.exists(filename):
try:
os.remove(filename)
- except OSError, e:
+ except OSError as e:
raise InstallError('Failed to delete file %s: %s' % (
e.filename, e.strerror))
diff --git a/var/spack/repos/builtin/packages/ncl/ymake-filter.patch b/var/spack/repos/builtin/packages/ncl/ymake-filter.patch
new file mode 100644
index 0000000000..915e82035f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ncl/ymake-filter.patch
@@ -0,0 +1,33 @@
+--- ncl_ncarg-6.4.0/config/ymake-filter.c.orig 2017-02-23 20:11:55.000000000 +0100
++++ ncl_ncarg-6.4.0/config/ymake-filter.c 2017-09-13 14:52:34.800989229 +0200
+@@ -150,13 +150,29 @@
+ getcppline()
+ {
+ int c;
+- static char buf[2048];
++ static int s = 2048;
++ static char *buf = NULL;
+ char *p;
+
++ if (buf == NULL)
++ {
++ buf = malloc(s);
++ }
++
+ p = buf;
+
+ do
+ {
++ if (p >= buf + s)
++ {
++ char* old = buf;
++
++ /* Need to increase the size of buf. */
++ s += 1024;
++ buf = realloc(buf, s);
++ p = buf + (p - old);
++ }
++
+ switch(c = getchar())
+ {
+ /*
diff --git a/var/spack/repos/builtin/packages/nco/NUL-0-NULL.patch b/var/spack/repos/builtin/packages/nco/NUL-0-NULL.patch
new file mode 100644
index 0000000000..b1d17c0ecc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nco/NUL-0-NULL.patch
@@ -0,0 +1,51 @@
+From fec59e92795bfac5779d09cd5d96f10cd1c3e6af Mon Sep 17 00:00:00 2001
+From: Charlie Zender <zender@uci.edu>
+Date: Thu, 1 Jun 2017 20:18:02 -0700
+Subject: [PATCH] Patch for NUL = '\0' != NULL errors in ncap2 supplied by
+ Manfred Schwarb
+
+---
+ src/nco++/fmc_all_cls.cc | 8 ++++----
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/src/nco++/fmc_all_cls.cc b/src/nco++/fmc_all_cls.cc
+index 3cccc17..79e3240 100644
+--- a/src/nco++/fmc_all_cls.cc
++++ b/src/nco++/fmc_all_cls.cc
+@@ -4796,14 +4796,14 @@ var_sct *vlist_cls::push_fnd(bool &is_mtd, std::vector<RefAST> &vtr_args, fmc_cl
+ {
+ case PATOI:
+ {
+- char *pend='\0';
++ char *pend=NULL;
+ nco_int iout;
+ iout=0;
+
+ // allows whites space prefix & suffix
+ iout=(nco_int)std::strtol(buffer,&pend,10);
+
+- if( pend !=buffer && (*pend=='\0'|| *pend==' ') )
++ if(pend != buffer && (*pend == '\0'|| *pend == ' '))
+ ierr=0;
+ else
+ ierr=errno;
+@@ -4817,14 +4817,14 @@ var_sct *vlist_cls::push_fnd(bool &is_mtd, std::vector<RefAST> &vtr_args, fmc_cl
+
+ case PATOL:
+ {
+- char *pend='\0';
++ char *pend=NULL;
+ nco_int64 lout;
+ lout=0;
+
+ // allows whites space prefix & suffix
+ lout=(nco_int64)std::strtoll(buffer,&pend,10);
+
+- if( pend !=buffer && (*pend=='\0'|| *pend==' ') )
++ if( pend !=buffer && (*pend == '\0' || *pend == ' '))
+ ierr=0;
+ else
+ ierr=errno;
+--
+2.7.4
+
diff --git a/var/spack/repos/builtin/packages/nco/package.py b/var/spack/repos/builtin/packages/nco/package.py
index acd96f5e9c..2aea5aed2c 100644
--- a/var/spack/repos/builtin/packages/nco/package.py
+++ b/var/spack/repos/builtin/packages/nco/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,13 +30,20 @@ class Nco(AutotoolsPackage):
netCDF-accessible formats"""
homepage = "http://nco.sourceforge.net/"
- url = "https://github.com/nco/nco/archive/4.6.2.tar.gz"
+ url = "https://github.com/nco/nco/archive/4.6.7.tar.gz"
+ version('4.6.7', 'b04c92aa715d3fad3ebebd1fd178ce32')
+ version('4.6.6', 'df6fa47aaf6e41adfc0631912a7a341f')
+ version('4.6.5', '2afd34a6bb5ff6c7ed39cf40c917b6e4')
+ version('4.6.4', '22f4e779d0011a9c0db90fda416c8e45')
version('4.6.3', '0e1d6616c65ed3a30c54cc776da4f987')
version('4.6.2', 'b7471acf0cc100343392f4171fb56113')
version('4.6.1', 'ef43cc989229c2790a9094bd84728fd8')
version('4.5.5', '9f1f1cb149ad6407c5a03c20122223ce')
+ # https://github.com/nco/nco/issues/43
+ patch('NUL-0-NULL.patch')
+
variant('doc', default=False, description='Build/install NCO TexInfo-based documentation')
# See "Compilation Requirements" at:
diff --git a/var/spack/repos/builtin/packages/ncurses/package.py b/var/spack/repos/builtin/packages/ncurses/package.py
index e4fd5bf269..06ffc0b650 100644
--- a/var/spack/repos/builtin/packages/ncurses/package.py
+++ b/var/spack/repos/builtin/packages/ncurses/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,16 +23,18 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from glob import glob
+from os.path import exists, join
+from os import makedirs
+from shutil import copy
-class Ncurses(Package):
+class Ncurses(AutotoolsPackage):
"""The ncurses (new curses) library is a free software emulation of
- curses in System V Release 4.0, and more. It uses terminfo format,
- supports pads and color and multiple highlights and forms
- characters and function-key mapping, and has all the other
- SYSV-curses enhancements over BSD curses.
-
- """
+ curses in System V Release 4.0, and more. It uses terminfo format,
+ supports pads and color and multiple highlights and forms
+ characters and function-key mapping, and has all the other
+ SYSV-curses enhancements over BSD curses."""
homepage = "http://invisible-island.net/ncurses/ncurses.html"
url = "http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz"
@@ -40,20 +42,67 @@ class Ncurses(Package):
version('6.0', 'ee13d052e1ead260d7c28071f46eefb1')
version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1')
- patch('patch_gcc_5.txt', when='%gcc@5.0:')
+ variant('symlinks', default=False,
+ description='Enables symlinks. Needed on AFS filesystem.')
- def install(self, spec, prefix):
+ depends_on('pkg-config', type='build')
+
+ patch('patch_gcc_5.txt', when='@6.0%gcc@5.0:')
+ patch('sed_pgi.patch', when='@:6.0')
+
+ def configure(self, spec, prefix):
opts = [
- "--prefix=%s" % prefix,
- "--with-shared",
- "--with-cxx-shared",
- "--enable-widec",
- "--enable-overwrite",
- "--disable-lib-suffixes",
- "--without-ada",
- "--enable-pc-files",
- "--with-pkg-config-libdir={0}/lib/pkgconfig".format(prefix)
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
+ '--with-shared',
+ '--with-cxx-shared',
+ '--enable-overwrite',
+ '--without-ada',
+ '--enable-pc-files',
+ '--with-pkg-config-libdir={0}/lib/pkgconfig'.format(self.prefix)
]
- configure(*opts)
- make()
- make("install")
+
+ nwide_opts = ['--disable-widec',
+ '--without-manpages',
+ '--without-tests']
+
+ wide_opts = ['--enable-widec']
+
+ if '+symlinks' in self.spec:
+ opts.append('--enable-symlinks')
+
+ prefix = '--prefix={0}'.format(prefix)
+
+ configure = Executable('../configure')
+
+ with working_dir('build_ncurses', create=True):
+ configure(prefix, *(opts + nwide_opts))
+
+ with working_dir('build_ncursesw', create=True):
+ configure(prefix, *(opts + wide_opts))
+
+ def build(self, spec, prefix):
+ with working_dir('build_ncurses'):
+ make()
+ with working_dir('build_ncursesw'):
+ make()
+
+ def install(self, spec, prefix):
+ with working_dir('build_ncurses'):
+ make('install')
+ with working_dir('build_ncursesw'):
+ make('install')
+
+ # fix for packages like hstr that use "#include <ncurses/ncurses.h>"
+ headers = glob(join(prefix.include, '*'))
+ for p_dir in ['ncurses', 'ncursesw']:
+ path = join(prefix.include, p_dir)
+ if not exists(path):
+ makedirs(path)
+ for header in headers:
+ copy(header, path)
+
+ @property
+ def libs(self):
+ return find_libraries(
+ ['libncurses', 'libncursesw'], root=self.prefix, recurse=True)
diff --git a/var/spack/repos/builtin/packages/ncurses/sed_pgi.patch b/var/spack/repos/builtin/packages/ncurses/sed_pgi.patch
new file mode 100644
index 0000000000..f51b96c521
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ncurses/sed_pgi.patch
@@ -0,0 +1,11 @@
+--- a/ncurses/tty/MKexpanded.sh 2017-02-12 09:09:33.828954282 -0600
++++ b/ncurses/tty/MKexpanded.sh 2017-02-12 09:11:03.430673306 -0600
+@@ -125,7 +125,7 @@
+ EOF
+
+ $preprocessor $TMP 2>/dev/null | \
+- sed -e '1,/^IGNORE$/d' -e 's/^@/#/' -e 's/^#if_/#if /'
++ sed -e '1,/^IGNORE$/d' -e 's/^@/#/' -e 's/^#[ ]*if_/#if /'
+
+ cat <<EOF
+ #else /* ! NCURSES_EXPANDED */
diff --git a/var/spack/repos/builtin/packages/ncview/package.py b/var/spack/repos/builtin/packages/ncview/package.py
index 5c3cf300d2..5dd160e50c 100644
--- a/var/spack/repos/builtin/packages/ncview/package.py
+++ b/var/spack/repos/builtin/packages/ncview/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Ncview(Package):
+class Ncview(AutotoolsPackage):
"""Simple viewer for NetCDF files."""
homepage = "http://meteora.ucsd.edu/~pierce/ncview_home_page.html"
url = "ftp://cirrus.ucsd.edu/pub/ncview/ncview-2.1.7.tar.gz"
@@ -37,8 +37,12 @@ class Ncview(Package):
depends_on('libpng')
depends_on('libxaw')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
+ def configure_args(self):
+ spec = self.spec
- make()
- make('install')
+ config_args = []
+
+ if spec.satisfies('^netcdf+mpi'):
+ config_args.append('CC={0}'.format(spec['mpi'].mpicc))
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/ndiff/package.py b/var/spack/repos/builtin/packages/ndiff/package.py
index dc41add03f..176a3463d3 100644
--- a/var/spack/repos/builtin/packages/ndiff/package.py
+++ b/var/spack/repos/builtin/packages/ndiff/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/nekbone/package.py b/var/spack/repos/builtin/packages/nekbone/package.py
new file mode 100644
index 0000000000..3d419b9156
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nekbone/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Nekbone(Package):
+ """NEK5000 emulation software called NEKbone. Nekbone captures the basic
+ structure and user interface of the extensive Nek5000 software.
+ Nek5000 is a high order, incompressible Navier-Stokes solver based on
+ the spectral element method."""
+
+ homepage = "https://github.com/Nek5000/Nekbone"
+ url = "https://github.com/Nek5000/Nekbone/tarball/v17.0"
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('17.0', 'cc339684547614a0725959e41839fec1')
+ version('develop', git='https://github.com/Nek5000/Nekbone.git')
+
+ depends_on('mpi')
+
+ def install(self, spec, prefix):
+
+ working_dirs = ['example1', 'example2', 'example3', 'nek_comm',
+ 'nek_delay', 'nek_mgrid']
+ mkdir(prefix.bin)
+
+ for wdir in working_dirs:
+ with working_dir('test/' + wdir):
+ makenec = FileFilter('makenek')
+ makenec.filter('CC.*', 'CC=' + self.spec['mpi'].mpicc)
+ makenec.filter('FF77.*', 'FF77=' + self.spec['mpi'].mpif77)
+ makenek = Executable('./makenek')
+ path = join_path(prefix.bin, wdir)
+ makenek('ex1', '../../src')
+ mkdir(path)
+ install('nekbone', path)
+ install('nekpmpi', path)
+ install('data.rea', path)
+ install('SIZE', path)
+ install('README', path)
diff --git a/var/spack/repos/builtin/packages/neovim/package.py b/var/spack/repos/builtin/packages/neovim/package.py
new file mode 100644
index 0000000000..0f26daf83f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/neovim/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Neovim(CMakePackage):
+ """NeoVim: the future of vim"""
+
+ homepage = "http://neovim.io"
+ url = "https://github.com/neovim/neovim/archive/v0.2.0.tar.gz"
+
+ version('0.2.0', '9af7f61f9f0b1a2891147a479d185aa2')
+
+ depends_on('lua@5.1:5.2')
+ depends_on('lua-lpeg')
+ depends_on('lua-mpack')
+ depends_on('lua-bitlib')
+ depends_on('libuv')
+ depends_on('jemalloc')
+ depends_on('libtermkey')
+ depends_on('libvterm')
+ depends_on('unibilium')
+ depends_on('msgpack-c')
+
+ def cmake_args(self):
+ # FIXME: Add arguments other than
+ # FIXME: CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE
+ # FIXME: If not needed delete this function
+ args = []
+ return args
diff --git a/var/spack/repos/builtin/packages/netcdf-cxx/package.py b/var/spack/repos/builtin/packages/netcdf-cxx/package.py
index 2ad710fc45..916c8f301a 100644
--- a/var/spack/repos/builtin/packages/netcdf-cxx/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-cxx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
index 2da30c7b0c..0e15d67bc1 100644
--- a/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-cxx4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,8 +34,9 @@ class NetcdfCxx4(AutotoolsPackage):
version('4.2.1', 'd019853802092cf686254aaba165fc81')
depends_on('netcdf')
+
+ depends_on('automake', type='build')
depends_on('autoconf', type='build')
+ depends_on('libtool', type='build')
- def autoreconf(self, spec, prefix):
- # Rebuild to prevent problems of inconsistency in git repo
- which('autoreconf')('-ivf')
+ force_autoreconf = True
diff --git a/var/spack/repos/builtin/packages/netcdf-fortran/package.py b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
index a2556d8783..f62db6eca0 100644
--- a/var/spack/repos/builtin/packages/netcdf-fortran/package.py
+++ b/var/spack/repos/builtin/packages/netcdf-fortran/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,3 +35,16 @@ class NetcdfFortran(AutotoolsPackage):
version('4.4.3', 'bfd4ae23a34635b273d3eb0d91cbde9e')
depends_on('netcdf')
+
+ @property
+ def libs(self):
+ libraries = ['libnetcdff']
+
+ # This package installs both shared and static libraries. Permit
+ # clients to query which one they want.
+ query_parameters = self.spec.last_query.extra_parameters
+ shared = 'shared' in query_parameters
+
+ return find_libraries(
+ libraries, root=self.prefix, shared=shared, recurse=True
+ )
diff --git a/var/spack/repos/builtin/packages/netcdf/package.py b/var/spack/repos/builtin/packages/netcdf/package.py
index 79a1be2090..f12e2941c8 100644
--- a/var/spack/repos/builtin/packages/netcdf/package.py
+++ b/var/spack/repos/builtin/packages/netcdf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,6 +24,16 @@
##############################################################################
from spack import *
+import numbers
+
+
+def is_integral(x):
+ """Any integer value"""
+ try:
+ return isinstance(int(x), numbers.Integral) and not isinstance(x, bool)
+ except ValueError:
+ return False
+
class Netcdf(AutotoolsPackage):
"""NetCDF is a set of software libraries and self-describing,
@@ -31,40 +41,101 @@ class Netcdf(AutotoolsPackage):
and sharing of array-oriented scientific data."""
homepage = "http://www.unidata.ucar.edu/software/netcdf"
- url = "ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.3.tar.gz"
+ url = "http://www.gfd-dennou.org/arch/netcdf/unidata-mirror/netcdf-4.3.3.tar.gz"
+ # Version 4.4.1.1 is having problems in tests
+ # https://github.com/Unidata/netcdf-c/issues/343
+ version('4.4.1.1', '503a2d6b6035d116ed53b1d80c811bda')
+ # netcdf@4.4.1 can crash on you (in real life and in tests). See:
+ # https://github.com/Unidata/netcdf-c/issues/282
version('4.4.1', '7843e35b661c99e1d49e60791d5072d8')
version('4.4.0', 'cffda0cbd97fdb3a06e9274f7aef438e')
version('4.3.3.1', '5c9dad3705a3408d27f696e5b31fb88c')
version('4.3.3', '5fbd0e108a54bd82cb5702a73f56d2ae')
- variant('mpi', default=True, description='Enables MPI parallelism')
- variant('hdf4', default=False, description='Enable HDF4 support')
- variant('shared', default=True, description='Enable shared library')
- variant('parallel-netcdf', default=False, description='Enable PnetCDF support')
- variant('dap', default=False, description='Enable DAP support')
- variant('cdmremote', default=False, description='Enable CDM Remote support')
+ variant('mpi', default=True,
+ description='Enable parallel I/O for netcdf-4')
+ variant('parallel-netcdf', default=False,
+ description='Enable parallel I/O for classic files')
+ variant('hdf4', default=False, description='Enable HDF4 support')
+ variant('shared', default=True, description='Enable shared library')
+ variant('dap', default=False, description='Enable DAP support')
+
+ # It's unclear if cdmremote can be enabled if '--enable-netcdf-4' is passed
+ # to the configure script. Since netcdf-4 support is mandatory we comment
+ # this variant out.
+ # variant('cdmremote', default=False,
+ # description='Enable CDM Remote support')
+
# These variants control the number of dimensions (i.e. coordinates and
# attributes) and variables (e.g. time, entity ID, number of coordinates)
# that can be used in any particular NetCDF file.
- variant('maxdims', default=1024,
- description='Defines the maximum dimensions of NetCDF files.')
- variant('maxvars', default=8192,
- description='Defines the maximum variables of NetCDF files.')
+ variant(
+ 'maxdims',
+ default=1024,
+ description='Defines the maximum dimensions of NetCDF files.',
+ values=is_integral
+ )
+ variant(
+ 'maxvars',
+ default=8192,
+ description='Defines the maximum variables of NetCDF files.',
+ values=is_integral
+ )
depends_on("m4", type='build')
depends_on("hdf", when='+hdf4')
+
+ # curl 7.18.0 or later is required:
+ # http://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html
depends_on("curl@7.18.0:", when='+dap')
- depends_on("curl@7.18.0:", when='+cdmremote')
- depends_on('parallel-netcdf', when='@4.2.1.1:+parallel-netcdf')
+ # depends_on("curl@7.18.0:", when='+cdmremote')
- # Required for NetCDF-4 support
+ depends_on('parallel-netcdf', when='+parallel-netcdf')
+
+ # We need to build with MPI wrappers if any of the two
+ # parallel I/O features is enabled:
+ # http://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html#build_parallel
+ depends_on('mpi', when='+mpi')
+ depends_on('mpi', when='+parallel-netcdf')
+
+ # zlib 1.2.5 or later is required for netCDF-4 compression:
+ # http://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html
depends_on("zlib@1.2.5:")
- depends_on('hdf5')
+
+ # High-level API of HDF5 1.8.9 or later is required for netCDF-4 support:
+ # http://www.unidata.ucar.edu/software/netcdf/docs/getting_and_building_netcdf.html
+ depends_on('hdf5@1.8.9:+hl')
+
+ # Starting version 4.4.0, it became possible to disable parallel I/O even
+ # if HDF5 supports it. For previous versions of the library we need
+ # HDF5 without mpi support to disable parallel I/O.
+ # The following doesn't work if hdf5+mpi by default and netcdf~mpi is
+ # specified in packages.yaml
+ # depends_on('hdf5~mpi', when='@:4.3~mpi')
+ # Thus, we have to introduce a conflict
+ conflicts('~mpi', when='@:4.3^hdf5+mpi',
+ msg='netcdf@:4.3~mpi requires hdf5~mpi')
+
+ # We need HDF5 with mpi support to enable parallel I/O.
+ # The following doesn't work if hdf5~mpi by default and netcdf+mpi is
+ # specified in packages.yaml
+ # depends_on('hdf5+mpi', when='+mpi')
+ # Thus, we have to introduce a conflict
+ conflicts('+mpi', when='^hdf5~mpi',
+ msg='netcdf+mpi requires hdf5+mpi')
# NetCDF 4.4.0 and prior have compatibility issues with HDF5 1.10 and later
# https://github.com/Unidata/netcdf-c/issues/250
- depends_on('hdf5@:1.8', when='@:4.4.0')
+ depends_on('hdf5@:1.8.999', when='@:4.4.0')
+
+ # The feature was introduced in version 4.1.2
+ # and was removed in version 4.4.0
+ # conflicts('+cdmremote', when='@:4.1.1,4.4:')
+
+ # The features were introduced in version 4.1.0
+ conflicts('+parallel-netcdf', when='@:4.0')
+ conflicts('+hdf4', when='@:4.0')
def patch(self):
try:
@@ -81,90 +152,96 @@ class Netcdf(AutotoolsPackage):
r'\1{0}\2'.format(max_vars))
def configure_args(self):
- spec = self.spec
- # Workaround until variant forwarding works properly
- if '+mpi' in spec and spec.satisfies('^hdf5~mpi'):
- raise RuntimeError('Invalid spec. Package netcdf requires '
- 'hdf5+mpi, but spec asked for hdf5~mpi.')
-
- # Environment variables
- CFLAGS = []
+ CFLAGS = []
CPPFLAGS = []
- LDFLAGS = []
- LIBS = []
-
- config_args = [
- "--enable-fsync",
- "--enable-v2",
- "--enable-utilities",
- "--enable-static",
- "--enable-largefile",
- # necessary for HDF5 support
- "--enable-netcdf-4",
- "--enable-dynamic-loading",
- ]
-
- if '+shared' in spec:
- config_args.append('--enable-shared')
- else:
- config_args.append('--disable-shared')
+ LDFLAGS = []
+ LIBS = []
+
+ config_args = ['--enable-v2',
+ '--enable-utilities',
+ '--enable-static',
+ '--enable-largefile',
+ '--enable-netcdf-4']
+
+ # The flag was introduced in version 4.1.0
+ if self.spec.satisfies('@4.1:'):
+ config_args.append('--enable-fsync')
+
+ # The flag was introduced in version 4.3.1
+ if self.spec.satisfies('@4.3.1:'):
+ config_args.append('--enable-dynamic-loading')
+
+ config_args += self.enable_or_disable('shared')
+
+ if '~shared' in self.spec:
# We don't have shared libraries but we still want it to be
# possible to use this library in shared builds
- CFLAGS.append('-fPIC')
+ CFLAGS.append(self.compiler.pic_flag)
- if '+dap' in spec:
- config_args.append('--enable-dap')
- else:
- config_args.append('--disable-dap')
+ config_args += self.enable_or_disable('dap')
+ # config_args += self.enable_or_disable('cdmremote')
- if '+cdmremote' in spec:
- config_args.append('--enable-cdmremote')
- else:
- config_args.append('--disable-cdmremote')
-
- if '+dap' in spec or '+cdmremote' in spec:
+ # if '+dap' in self.spec or '+cdmremote' in self.spec:
+ if '+dap' in self.spec:
# Make sure Netcdf links against Spack's curl, otherwise it may
# pick up system's curl, which can give link errors, e.g.:
- # undefined reference to `SSL_CTX_use_certificate_chain_file`
- LIBS.append("-lcurl")
- CPPFLAGS.append("-I%s" % spec['curl'].prefix.include)
- LDFLAGS.append("-L%s" % spec['curl'].prefix.lib)
-
- if '+mpi' in spec:
- config_args.append('--enable-parallel4')
-
- CPPFLAGS.append("-I%s/include" % spec['hdf5'].prefix)
- LDFLAGS.append("-L%s/lib" % spec['hdf5'].prefix)
-
- # HDF4 support
- # As of NetCDF 4.1.3, "--with-hdf4=..." is no longer a valid option
- # You must use the environment variables CPPFLAGS and LDFLAGS
- if '+hdf4' in spec:
- config_args.append("--enable-hdf4")
- CPPFLAGS.append("-I%s/include" % spec['hdf'].prefix)
- LDFLAGS.append("-L%s/lib" % spec['hdf'].prefix)
- LIBS.append("-l%s" % "jpeg")
-
- if '+szip' in spec:
- CPPFLAGS.append("-I%s/include" % spec['szip'].prefix)
- LDFLAGS.append("-L%s/lib" % spec['szip'].prefix)
- LIBS.append("-l%s" % "sz")
-
- # PnetCDF support
- if '+parallel-netcdf' in spec:
+ # undefined reference to `SSL_CTX_use_certificate_chain_file
+ curl = self.spec['curl']
+ curl_libs = curl.libs
+ LIBS.append(curl_libs.link_flags)
+ LDFLAGS.append(curl_libs.search_flags)
+ # TODO: figure out how to get correct flags via headers.cpp_flags
+ CPPFLAGS.append('-I' + curl.prefix.include)
+
+ if self.spec.satisfies('@4.4:'):
+ if '+mpi' in self.spec:
+ config_args.append('--enable-parallel4')
+ else:
+ config_args.append('--disable-parallel4')
+
+ # Starting version 4.1.3, --with-hdf5= and other such configure options
+ # are removed. Variables CPPFLAGS, LDFLAGS, and LD_LIBRARY_PATH must be
+ # used instead.
+ hdf5_hl = self.spec['hdf5:hl']
+ CPPFLAGS.append(hdf5_hl.headers.cpp_flags)
+ LDFLAGS.append(hdf5_hl.libs.search_flags)
+
+ if '+parallel-netcdf' in self.spec:
config_args.append('--enable-pnetcdf')
- config_args.append('CC=%s' % spec['mpi'].mpicc)
- CPPFLAGS.append("-I%s/include" % spec['parallel-netcdf'].prefix)
- LDFLAGS.append("-L%s/lib" % spec['parallel-netcdf'].prefix)
+ pnetcdf = self.spec['parallel-netcdf']
+ CPPFLAGS.append(pnetcdf.headers.cpp_flags)
+ # TODO: change to pnetcdf.libs.search_flags once 'parallel-netcdf'
+ # package gets custom implementation of 'libs'
+ LDFLAGS.append('-L' + pnetcdf.prefix.lib)
+ else:
+ config_args.append('--disable-pnetcdf')
+
+ if '+mpi' in self.spec or '+parallel-netcdf' in self.spec:
+ config_args.append('CC=%s' % self.spec['mpi'].mpicc)
+
+ config_args += self.enable_or_disable('hdf4')
+ if '+hdf4' in self.spec:
+ hdf4 = self.spec['hdf']
+ CPPFLAGS.append(hdf4.headers.cpp_flags)
+ # TODO: change to hdf4.libs.search_flags once 'hdf'
+ # package gets custom implementation of 'libs' property.
+ LDFLAGS.append('-L' + hdf4.prefix.lib)
+ # TODO: change to self.spec['jpeg'].libs.link_flags once the
+ # implementations of 'jpeg' virtual package get 'jpeg_libs'
+ # property.
+ LIBS.append('-ljpeg')
+ if '+szip' in hdf4:
+ # This should also come from hdf4.libs
+ LIBS.append('-lsz')
# Fortran support
# In version 4.2+, NetCDF-C and NetCDF-Fortran have split.
# Use the netcdf-fortran package to install Fortran support.
- config_args.append('CFLAGS=%s' % ' '.join(CFLAGS))
- config_args.append('CPPFLAGS=%s' % ' '.join(CPPFLAGS))
- config_args.append('LDFLAGS=%s' % ' '.join(LDFLAGS))
- config_args.append('LIBS=%s' % ' '.join(LIBS))
+ config_args.append('CFLAGS=' + ' '.join(CFLAGS))
+ config_args.append('CPPFLAGS=' + ' '.join(CPPFLAGS))
+ config_args.append('LDFLAGS=' + ' '.join(LDFLAGS))
+ config_args.append('LIBS=' + ' '.join(LIBS))
return config_args
diff --git a/var/spack/repos/builtin/packages/netgauge/package.py b/var/spack/repos/builtin/packages/netgauge/package.py
index b57cdbe5f3..f850a22c2c 100644
--- a/var/spack/repos/builtin/packages/netgauge/package.py
+++ b/var/spack/repos/builtin/packages/netgauge/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Netgauge(Package):
+class Netgauge(AutotoolsPackage):
"""Netgauge is a high-precision network parameter measurement
tool. It supports benchmarking of many different network protocols
and communication patterns. The main focus lies on accuracy,
@@ -37,8 +37,3 @@ class Netgauge(Package):
version('2.4.6', 'e0e040ec6452e93ca21ccc54deac1d7f')
depends_on("mpi")
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/netgen/package.py b/var/spack/repos/builtin/packages/netgen/package.py
new file mode 100644
index 0000000000..9d6c4de81a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netgen/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Netgen(AutotoolsPackage):
+ """NETGEN is an automatic 3d tetrahedral mesh generator. It accepts
+ input from constructive solid geometry (CSG) or boundary
+ representation (BRep) from STL file format. The connection to
+ a geometry kernel allows the handling of IGES and STEP files.
+ NETGEN contains modules for mesh optimization and hierarchical
+ mesh refinement. """
+
+ homepage = "https://ngsolve.org/"
+ url = "https://gigenet.dl.sourceforge.net/project/netgen-mesher/netgen-mesher/5.3/netgen-5.3.1.tar.gz"
+
+ version('5.3.1', 'afd5a9b0b1296c242a9c554f06af6510')
+
+ variant("mpi", default=True, description='enable mpi support')
+ variant("oce", default=False, description='enable oce geometry kernel')
+ variant("gui", default=False, description='enable gui')
+ variant("metis", default=False, description='use metis for partitioning')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('oce+X11', when='+oce')
+ depends_on('metis', when='+metis')
+
+ def url_for_version(self, version):
+ url = "https://gigenet.dl.sourceforge.net/project/netgen-mesher/netgen-mesher/{0}/netgen-{1}.tar.gz"
+ return url.format(version.up_to(2), version)
+
+ def configure_args(self):
+ spec = self.spec
+ args = []
+ if '+mpi' in spec:
+ args.extend([
+ "CC={0}".format(spec['mpi'].mpicc),
+ "CXX={0}".format(spec['mpi'].mpicxx)
+ ])
+ else:
+ args.append("--without-mpi")
+
+ if '+oce' in spec:
+ args.append("--with-occ={0}".format(spec['oce'].prefix))
+ # FIXME
+ # due to a bug in netgen config, when --without-occ is specified
+ # or --with-occ=no, OCC flags is turned true, and build fails
+ # later; so do not specify anything like that
+ # else:
+ # args.append("--without-occ")
+
+ if '~gui' in spec:
+ args.append("--disable-gui")
+ else:
+ args.append("--enable-gui")
+ if '+metis' in spec:
+ args.append('--with-metis=%s' % spec['metis'].prefix)
+ else:
+ args.append("--without-metis")
+
+ return args
diff --git a/var/spack/repos/builtin/packages/netlib-lapack/ibm-xl.patch b/var/spack/repos/builtin/packages/netlib-lapack/ibm-xl.patch
new file mode 100644
index 0000000000..c9598a4e7c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/netlib-lapack/ibm-xl.patch
@@ -0,0 +1,16 @@
+diff -Naur lapack-3.6.1/CMAKE/CheckLAPACKCompilerFlags.cmake lapack-3.6.1-patched/CMAKE/CheckLAPACKCompilerFlags.cmake
+--- lapack-3.6.1/CMAKE/CheckLAPACKCompilerFlags.cmake 2017-01-27 17:14:37.414854283 -0500
++++ lapack-3.6.1-patched/CMAKE/CheckLAPACKCompilerFlags.cmake 2017-01-27 17:14:24.754719546 -0500
+@@ -43,12 +43,6 @@
+ if( "${CMAKE_Fortran_FLAGS}" MATCHES "-qflttrap=[a-zA-Z:]:enable" )
+ set( FPE_EXIT TRUE )
+ endif()
+-
+- if( NOT ("${CMAKE_Fortran_FLAGS}" MATCHES "-qfixed") )
+- message( STATUS "Enabling fixed format F90/F95 with -qfixed" )
+- set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfixed"
+- CACHE STRING "Flags for Fortran compiler." FORCE )
+- endif()
+
+ # HP Fortran
+ elseif( CMAKE_Fortran_COMPILER_ID STREQUAL "HP" )
diff --git a/var/spack/repos/builtin/packages/netlib-lapack/package.py b/var/spack/repos/builtin/packages/netlib-lapack/package.py
index 4b03259cbd..8166b75bf5 100644
--- a/var/spack/repos/builtin/packages/netlib-lapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-lapack/package.py
@@ -1,13 +1,13 @@
#############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -52,6 +52,9 @@ class NetlibLapack(Package):
variant('lapacke', default=True,
description='Activates the build of the LAPACKE C interface')
+ patch('ibm-xl.patch', when='@3:6%xl')
+ patch('ibm-xl.patch', when='@3:6%xl_r')
+
# virtual dependency
provides('blas', when='~external-blas')
provides('lapack')
@@ -71,14 +74,14 @@ class NetlibLapack(Package):
def blas_libs(self):
shared = True if '+shared' in self.spec else False
return find_libraries(
- ['libblas'], root=self.prefix, shared=shared, recurse=True
+ 'libblas', root=self.prefix, shared=shared, recurse=True
)
@property
def lapack_libs(self):
shared = True if '+shared' in self.spec else False
return find_libraries(
- ['liblapack'], root=self.prefix, shared=shared, recurse=True
+ 'liblapack', root=self.prefix, shared=shared, recurse=True
)
def install_one(self, spec, prefix, shared):
@@ -96,14 +99,21 @@ class NetlibLapack(Package):
cmake_args.extend(['-DCBLAS=OFF'])
cmake_args.extend(['-DLAPACKE:BOOL=OFF'])
- # deprecated routines are commonly need by, for example, suitesparse
+ if self.compiler.name == 'xl' or self.compiler.name == 'xl_r':
+ # use F77 compiler if IBM XL
+ cmake_args.extend([
+ '-DCMAKE_Fortran_COMPILER=%s' % self.compiler.f77,
+ '-DCMAKE_Fortran_FLAGS=-qzerosize'
+ ])
+
+ # deprecated routines are commonly needed by, for example, suitesparse
# Note that OpenBLAS spack is built with deprecated routines
cmake_args.extend(['-DBUILD_DEPRECATED:BOOL=ON'])
if '+external-blas' in spec:
cmake_args.extend([
'-DUSE_OPTIMIZED_BLAS:BOOL=ON',
- '-DBLAS_LIBRARIES:PATH=%s' % spec['blas'].blas_libs.joined(';')
+ '-DBLAS_LIBRARIES:PATH=%s' % spec['blas'].libs.joined(';')
])
cmake_args.extend(std_cmake_args)
diff --git a/var/spack/repos/builtin/packages/netlib-scalapack/package.py b/var/spack/repos/builtin/packages/netlib-scalapack/package.py
index 578d2d8988..614cbeea4b 100644
--- a/var/spack/repos/builtin/packages/netlib-scalapack/package.py
+++ b/var/spack/repos/builtin/packages/netlib-scalapack/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import sys
-class NetlibScalapack(Package):
+class NetlibScalapack(CMakePackage):
"""ScaLAPACK is a library of high-performance linear algebra routines for
parallel distributed memory machines
"""
@@ -46,9 +46,9 @@ class NetlibScalapack(Package):
description='Build the shared library version'
)
variant(
- 'fpic',
+ 'pic',
default=False,
- description='Build with -fpic compiler option'
+ description='Build position independent code'
)
provides('scalapack')
@@ -60,12 +60,16 @@ class NetlibScalapack(Package):
@property
def scalapack_libs(self):
+ # Note that the default will be to search
+ # for 'libnetlib-scalapack.<suffix>'
shared = True if '+shared' in self.spec else False
return find_libraries(
- ['libscalapack'], root=self.prefix, shared=shared, recurse=True
+ 'libscalapack', root=self.prefix, shared=shared, recurse=True
)
- def install(self, spec, prefix):
+ def cmake_args(self):
+ spec = self.spec
+
options = [
"-DBUILD_SHARED_LIBS:BOOL=%s" % ('ON' if '+shared' in spec else
'OFF'),
@@ -74,8 +78,8 @@ class NetlibScalapack(Package):
]
# Make sure we use Spack's Lapack:
- blas = spec['blas'].blas_libs
- lapack = spec['lapack'].lapack_libs
+ blas = spec['blas'].libs
+ lapack = spec['lapack'].libs
options.extend([
'-DLAPACK_FOUND=true',
'-DLAPACK_INCLUDE_DIRS=%s' % spec['lapack'].prefix.include,
@@ -83,19 +87,16 @@ class NetlibScalapack(Package):
'-DBLAS_LIBRARIES=%s' % (blas.joined(';'))
])
- if '+fpic' in spec:
+ if '+pic' in spec:
options.extend([
- "-DCMAKE_C_FLAGS=-fPIC",
- "-DCMAKE_Fortran_FLAGS=-fPIC"
+ "-DCMAKE_C_FLAGS=%s" % self.compiler.pic_flag,
+ "-DCMAKE_Fortran_FLAGS=%s" % self.compiler.pic_flag
])
- options.extend(std_cmake_args)
-
- with working_dir('spack-build', create=True):
- cmake('..', *options)
- make()
- make("install")
+ return options
+ @run_after('install')
+ def fix_darwin_install(self):
# The shared libraries are not installed correctly on Darwin:
- if (sys.platform == 'darwin') and ('+shared' in spec):
- fix_darwin_install_name(prefix.lib)
+ if (sys.platform == 'darwin') and ('+shared' in self.spec):
+ fix_darwin_install_name(self.spec.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/nettle/package.py b/var/spack/repos/builtin/packages/nettle/package.py
index 7e2b758bc0..591483b2f9 100644
--- a/var/spack/repos/builtin/packages/nettle/package.py
+++ b/var/spack/repos/builtin/packages/nettle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,23 +25,17 @@
from spack import *
-class Nettle(Package):
+class Nettle(AutotoolsPackage):
"""The Nettle package contains the low-level cryptographic library
that is designed to fit easily in many contexts."""
homepage = "https://www.lysator.liu.se/~nisse/nettle/"
- url = "http://ftp.gnu.org/gnu/nettle/nettle-2.7.1.tar.gz"
+ url = "http://ftp.gnu.org/gnu/nettle/nettle-3.3.tar.gz"
- version('3.2', 'afb15b4764ebf1b4e6d06c62bd4d29e4')
- version('2.7', '2caa1bd667c35db71becb93c5d89737f')
+ version('3.3', '10f969f78a463704ae73529978148dbe')
+ version('3.2', 'afb15b4764ebf1b4e6d06c62bd4d29e4')
+ version('2.7.1', '003d5147911317931dd453520eb234a5')
+ version('2.7', '2caa1bd667c35db71becb93c5d89737f')
depends_on('gmp')
depends_on('m4', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- if self.run_tests:
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/nextflow/package.py b/var/spack/repos/builtin/packages/nextflow/package.py
index 54f3dbf915..715964bdc1 100644
--- a/var/spack/repos/builtin/packages/nextflow/package.py
+++ b/var/spack/repos/builtin/packages/nextflow/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,12 +29,20 @@ class Nextflow(Package):
"""Data-driven computational pipelines"""
homepage = "http://www.nextflow.io"
+ url = "https://github.com/nextflow-io/nextflow/releases/download/v0.24.1/nextflow"
+ version('0.25.6', '29d739b6caf8ceb5aa9997310ee8d0e7',
+ expand=False)
+ version('0.24.1', '80ec8c4fe8e766e0bdd1371a50410d1d',
+ expand=False)
+ version('0.23.3', '71fb69275b6788af1c6f1165f40d362e',
+ expand=False)
version('0.20.1', '0e4e0e3eca1c2c97f9b4bffd944b923a',
- url='https://github.com/nextflow-io/nextflow/releases/download/v0.20.1/nextflow',
+ expand=False)
+ version('0.17.3', '5df00105fb1ce6fd0ba019ae735d9617',
expand=False)
- depends_on('jdk')
+ depends_on('java')
def install(self, spec, prefix):
mkdirp(prefix.bin)
diff --git a/var/spack/repos/builtin/packages/nfft/package.py b/var/spack/repos/builtin/packages/nfft/package.py
index 4c1ce2b03d..415ddcf0eb 100644
--- a/var/spack/repos/builtin/packages/nfft/package.py
+++ b/var/spack/repos/builtin/packages/nfft/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,24 +37,51 @@ class Nfft(AutotoolsPackage):
depends_on('fftw')
- def install(self, spec, prefix):
+ def configure(self, spec, prefix):
options = ['--prefix={0}'.format(prefix)]
- configure(*options)
- make()
- if self.run_tests:
- make("check")
- make("install")
+ configure = Executable('../configure')
+
+ if '+double' in spec['fftw']:
+ with working_dir('double', create=True):
+ configure(*options)
+ if '+float' in spec['fftw']:
+ with working_dir('float', create=True):
+ configure('--enable-float', *options)
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double', create=True):
+ configure('--enable-long-double', *options)
+
+ def build(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make()
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make()
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make()
+ def check(self):
+ spec = self.spec
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("check")
if '+float' in spec['fftw']:
- configure('--enable-float', *options)
- make()
- if self.run_tests:
+ with working_dir('float'):
make("check")
- make("install")
if '+long_double' in spec['fftw']:
- configure('--enable-long-double', *options)
- make()
- if self.run_tests:
+ with working_dir('long-double'):
make("check")
- make("install")
+
+ def install(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("install")
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make("install")
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make("install")
diff --git a/var/spack/repos/builtin/packages/nghttp2/package.py b/var/spack/repos/builtin/packages/nghttp2/package.py
new file mode 100644
index 0000000000..62b936e054
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nghttp2/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 Nghttp2(AutotoolsPackage):
+ """nghttp2 is an implementation of HTTP/2 and its header compression
+ algorithm HPACK in C."""
+
+ homepage = "https://nghttp2.org/"
+ url = "https://github.com/nghttp2/nghttp2/releases/download/v1.26.0/nghttp2-1.26.0.tar.gz"
+
+ version('1.26.0', '83fa813b22bacbc6ea80dfb24847569f')
+
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('py-cython@0.19:', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build'))
+
+ def setup_environment(self, spack_env, run_env):
+ site_packages_dir = '/'.join(
+ [self.spec.prefix.lib,
+ ('python' + str(self.spec['python'].version.up_to(2))),
+ 'site-packages'])
+ spack_env.prepend_path('PYTHONPATH', site_packages_dir)
+
+ @run_before('install')
+ def ensure_install_dir_exists(self):
+ site_packages_dir = '/'.join(
+ [self.spec.prefix.lib,
+ ('python' + str(self.spec['python'].version.up_to(2))),
+ 'site-packages'])
+ mkdirp(site_packages_dir)
diff --git a/var/spack/repos/builtin/packages/nginx/package.py b/var/spack/repos/builtin/packages/nginx/package.py
new file mode 100644
index 0000000000..a9b5e93bfb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nginx/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Nginx(AutotoolsPackage):
+ """nginx [engine x] is an HTTP and reverse proxy server, a mail proxy
+ server, and a generic TCP/UDP proxy server, originally written by Igor
+ Sysoev."""
+
+ homepage = "https://nginx.org/en/"
+ url = "https://nginx.org/download/nginx-1.12.0.tar.gz"
+
+ version('1.12.0', '995eb0a140455cf0cfc497e5bd7f94b3')
+
+ depends_on('openssl')
+ depends_on('pcre')
+ depends_on('zlib')
+
+ def configure_args(self):
+ args = ['--with-http_ssl_module']
+ return args
+
+ def setup_environment(self, spack_env, run_env):
+ """Prepend the sbin directory to PATH."""
+ run_env.prepend_path('PATH', join_path(self.prefix, 'sbin'))
diff --git a/var/spack/repos/builtin/packages/ngmlr/package.py b/var/spack/repos/builtin/packages/ngmlr/package.py
new file mode 100644
index 0000000000..e1dbbe709e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ngmlr/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Ngmlr(CMakePackage):
+ """Ngmlr is a long-read mapper designed to align PacBilo or Oxford
+ Nanopore to a reference genome with a focus on reads that span
+ structural variations."""
+
+ homepage = "https://github.com/philres/ngmlr"
+ url = "https://github.com/philres/ngmlr/archive/v0.2.5.tar.gz"
+
+ version('0.2.5', '1b2b1aaeb6a3accc8b9f3e5c29e77037')
diff --git a/var/spack/repos/builtin/packages/ninja-fortran/package.py b/var/spack/repos/builtin/packages/ninja-fortran/package.py
new file mode 100644
index 0000000000..57903928be
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ninja-fortran/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class NinjaFortran(Package):
+ """A Fortran capable fork of ninja."""
+
+ homepage = "https://github.com/Kitware/ninja"
+ url = "https://github.com/Kitware/ninja/archive/v1.7.2.gaad58.kitware.dyndep-1.tar.gz"
+
+ # Each version is a fork off of a specific commit of ninja
+ # Hashes don't sort properly, so manually set newest version
+ version('1.7.2.gaad58', 'eb51b042b9dbaf8ecd79a6fb24de1320', preferred=True)
+ version('1.7.2.gcc0ea', '3982f508c415c0abaca34cb5e92e711a')
+ version('1.7.1.g7ca7f', '187a8d15c1e20e5e9b00c5c3f227ca8a')
+
+ depends_on('python', type=('build', 'run'))
+
+ phases = ['configure', 'install']
+
+ def url_for_version(self, version):
+ url = 'https://github.com/Kitware/ninja/archive/v{0}.kitware.dyndep-1.tar.gz'
+ return url.format(version)
+
+ def configure(self, spec, prefix):
+ python('configure.py', '--bootstrap')
+
+ @run_after('configure')
+ @on_package_attributes(run_tests=True)
+ def test(self):
+ ninja = Executable('./ninja')
+ ninja('-j{0}'.format(make_jobs), 'ninja_test')
+ ninja_test = Executable('./ninja_test')
+ ninja_test()
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('ninja', prefix.bin)
+ install_tree('misc', prefix.misc)
+
+ # Some distros like Fedora install a 'ninja-build' executable
+ # instead of 'ninja'. Install both for uniformity.
+ with working_dir(prefix.bin):
+ symlink('ninja', 'ninja-build')
diff --git a/var/spack/repos/builtin/packages/ninja/package.py b/var/spack/repos/builtin/packages/ninja/package.py
index dcd00576dd..11c46cb81e 100644
--- a/var/spack/repos/builtin/packages/ninja/package.py
+++ b/var/spack/repos/builtin/packages/ninja/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,24 +23,42 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
class Ninja(Package):
- """ A small, fast Make alternative """
- homepage = "https://martine.github.io/ninja/"
- url = "https://github.com/martine/ninja/archive/v1.6.0.tar.gz"
+ """Ninja is a small build system with a focus on speed. It differs from
+ other build systems in two major respects: it is designed to have its input
+ files generated by a higher-level build system, and it is designed to run
+ builds as fast as possible."""
+ homepage = "https://ninja-build.org/"
+ url = "https://github.com/ninja-build/ninja/archive/v1.7.2.tar.gz"
+
+ version('1.8.2', '5fdb04461cc7f5d02536b3bfc0300166')
+ version('1.7.2', '7b482218757acbaeac4d4d54a3cd94e1')
version('1.6.0', '254133059f2da79d8727f654d7198f43')
- extends('python')
+ depends_on('python', type=('build', 'run'))
- def install(self, spec, prefix):
+ phases = ['configure', 'install']
+
+ def configure(self, spec, prefix):
python('configure.py', '--bootstrap')
- cp = which('cp')
+ @run_after('configure')
+ @on_package_attributes(run_tests=True)
+ def test(self):
+ ninja = Executable('./ninja')
+ ninja('-j{0}'.format(make_jobs), 'ninja_test')
+ ninja_test = Executable('./ninja_test')
+ ninja_test()
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('ninja', prefix.bin)
+ install_tree('misc', prefix.misc)
- bindir = os.path.join(prefix, 'bin/')
- mkdir(bindir)
- cp('-a', 'ninja', bindir)
- cp('-a', 'misc', prefix)
+ # Some distros like Fedora install a 'ninja-build' executable
+ # instead of 'ninja'. Install both for uniformity.
+ with working_dir(prefix.bin):
+ symlink('ninja', 'ninja-build')
diff --git a/var/spack/repos/builtin/packages/nmap/package.py b/var/spack/repos/builtin/packages/nmap/package.py
index f4576cde53..e4da0fbdcf 100644
--- a/var/spack/repos/builtin/packages/nmap/package.py
+++ b/var/spack/repos/builtin/packages/nmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,8 +26,8 @@ from spack import *
class Nmap(AutotoolsPackage):
- """Nmap ("Network Mapper") is a free and open source (license)
- utility for network discovery and security auditing.
+ """Nmap ("Network Mapper") is a free and open source (license)
+ utility for network discovery and security auditing.
It also provides ncat an updated nc"""
homepage = "https://nmap.org"
diff --git a/var/spack/repos/builtin/packages/nnvm/cmake.patch b/var/spack/repos/builtin/packages/nnvm/cmake.patch
new file mode 100644
index 0000000000..814a45c83d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nnvm/cmake.patch
@@ -0,0 +1,63 @@
+From e75004208ea98cea0bb2ad9b5f18a59cf6814333 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Mon, 11 Sep 2017 00:26:24 +0800
+Subject: [PATCH] Install nnvm lib and haders. Offer choice to build static or
+ shared lib.
+
+---
+ CMakeLists.txt | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index d40deb5..aac0531 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -17,6 +17,10 @@ set(nnvm_LINKER_LIBS "")
+
+ add_definitions(-DNNVM_EXPORTS)
+
++# Build a shared lib (libnnvm.so) by default
++option(USE_SHARED_NNVM "Build a shared nnvm lib" ON)
++option(USE_STATIC_NNVM "Build a static nnvm lib" OFF)
++
+ # compile
+ if(MSVC)
+ add_definitions(-DDMLC_USE_CXX11)
+@@ -61,8 +65,15 @@ elseif(DMLC_CORE_PATH)
+ include_directories(${DMLC_CORE_PATH}/include)
+ endif()
+
+-add_library(nnvm SHARED ${SOURCE})
+-target_link_libraries(nnvm ${nnvm_LINKER_LIBS})
++if(USE_SHARED_NNVM)
++ add_library(nnvm SHARED ${SOURCE})
++ target_link_libraries(nnvm ${nnvm_LINKER_LIBS})
++endif()
++if(USE_STATIC_NNVM)
++ add_library(nnvm_static STATIC ${SOURCE})
++ target_link_libraries(nnvm_static ${nnvm_LINKER_LIBS})
++ set_target_properties(nnvm_static PROPERTIES OUTPUT_NAME "nnvm")
++endif()
+
+ if(INSTALL_INCLUDE_DIR)
+ add_custom_command(TARGET nnvm POST_BUILD
+@@ -71,6 +82,16 @@ if(INSTALL_INCLUDE_DIR)
+ )
+ endif()
+
++# ---[ Install lib, header and docs
++if(USE_SHARED_NNVM)
++ install(TARGETS nnvm LIBRARY DESTINATION lib)
++endif()
++if(USE_STATIC_NNVM)
++ install(TARGETS nnvm_static ARCHIVE DESTINATION lib)
++endif()
++install(DIRECTORY include DESTINATION .)
++install(DIRECTORY docs DESTINATION .)
++
+ # ---[ Linter target
+ if(MSVC)
+ find_package(PythonInterp 2)
+--
+1.8.3.1
+
diff --git a/var/spack/repos/builtin/packages/nnvm/package.py b/var/spack/repos/builtin/packages/nnvm/package.py
new file mode 100644
index 0000000000..0650df273d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nnvm/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Nnvm(CMakePackage):
+ """nnvm is a modular, decentralized and lightweight
+ part to help build deep learning libraries."""
+
+ homepage = "https://github.com/dmlc/nnvm"
+ url = "https://github.com/dmlc/nnvm.git"
+
+ version('master', git='https://github.com/dmlc/nnvm.git', branch='master')
+ version('20170418', git='https://github.com/dmlc/nnvm.git',
+ commit='b279286304ac954098d94a2695bca599e832effb')
+
+ variant('shared', default=True, description='Build a shared NNVM lib.')
+
+ depends_on('dmlc-core')
+
+ patch('cmake.patch')
+
+ def cmake_args(self):
+ spec = self.spec
+ return [
+ '-DUSE_SHARED_NNVM=%s' % ('ON' if '+shared' in spec else 'OFF'),
+ '-DUSE_STATIC_NNVM=%s' % ('ON' if '~shared' in spec else 'OFF'),
+ ]
diff --git a/var/spack/repos/builtin/packages/node-js/package.py b/var/spack/repos/builtin/packages/node-js/package.py
index 8f129bd3e0..0b7e942400 100644
--- a/var/spack/repos/builtin/packages/node-js/package.py
+++ b/var/spack/repos/builtin/packages/node-js/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -47,10 +47,10 @@ class NodeJs(Package):
depends_on('libtool', type='build', when=sys.platform != 'darwin')
depends_on('pkg-config', type='build')
- depends_on('python@2.7:2.7.999', type='build')
+ depends_on('python@2.7:2.8', type='build')
# depends_on('bash-completion', when="+bash-completion")
depends_on('icu4c', when='+icu4c')
- depends_on('openssl', when='+openssl')
+ depends_on('openssl@1.0.2d:', when='+openssl')
def install(self, spec, prefix):
options = []
@@ -63,10 +63,10 @@ class NodeJs(Package):
# On OSX, the system libtool must be used
# So, we ensure that this is the case by...
if sys.platform == 'darwin':
- process_pipe = subprocess.Popen(["which", "libtool"],
+ process_pipe = subprocess.Popen(["which", "libtool"],
stdout=subprocess.PIPE)
result_which = process_pipe.communicate()[0]
- process_pipe = subprocess.Popen(["whereis", "libtool"],
+ process_pipe = subprocess.Popen(["whereis", "libtool"],
stdout=subprocess.PIPE)
result_whereis = process_pipe.communicate()[0]
assert result_which == result_whereis, (
diff --git a/var/spack/repos/builtin/packages/notmuch/package.py b/var/spack/repos/builtin/packages/notmuch/package.py
new file mode 100644
index 0000000000..11ff488d77
--- /dev/null
+++ b/var/spack/repos/builtin/packages/notmuch/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Notmuch(AutotoolsPackage):
+ """Notmuch is a mail indexer.
+
+ Essentially, is a very thin front end on top of xapian.
+ """
+
+ homepage = "https://notmuchmail.org/"
+ url = "https://notmuchmail.org/releases/notmuch-0.23.7.tar.gz"
+
+ version('0.23.7', '1ad339b6d0c03548140434c7bcdf0624')
+
+ depends_on('zlib')
+ depends_on('talloc')
+ depends_on('gmime@2.6:')
+ depends_on('xapian-core')
diff --git a/var/spack/repos/builtin/packages/npb/package.py b/var/spack/repos/builtin/packages/npb/package.py
new file mode 100644
index 0000000000..65e5294524
--- /dev/null
+++ b/var/spack/repos/builtin/packages/npb/package.py
@@ -0,0 +1,231 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import numbers
+
+from spack import *
+
+
+def is_integral(x):
+ """Any integer value"""
+ try:
+ return isinstance(int(x), numbers.Integral) and not isinstance(x, bool)
+ except ValueError:
+ return False
+
+
+class Npb(MakefilePackage):
+ """The NAS Parallel Benchmarks (NPB) are a small set of programs
+ designed to help evaluate the performance of parallel supercomputers.
+ The benchmarks are derived from computational fluid dynamics (CFD)
+ applications and consist of five kernels and three pseudo-applications
+ in the original "pencil-and-paper" specification (NPB 1). The benchmark
+ suite has been extended to include new benchmarks for unstructured
+ adaptive mesh, parallel I/O, multi-zone applications, and computational
+ grids. Problem sizes in NPB are predefined and indicated as different
+ classes. Reference implementations of NPB are available in commonly-used
+ programming models like MPI and OpenMP (NPB 2 and NPB 3)."""
+
+ homepage = "https://www.nas.nasa.gov/publications/npb.html"
+ url = "https://www.nas.nasa.gov/assets/npb/NPB3.3.1.tar.gz"
+
+ version('3.3.1', '8e5ec2c819480759725df67833619911')
+
+ # Valid Benchmark Names
+ valid_names = (
+ 'is', # Integer Sort, random memory access
+ 'ep', # Embarrassingly Parallel
+ 'cg', # Conjugate Gradient, irregular memory access and communication
+ 'mg', # Multi-Grid on a sequence of meshes, long- and short-distance
+ # communication, memory intensive
+ 'ft', # discrete 3D fast Fourier Transform, all-to-all communication
+ 'bt', # Block Tri-diagonal solver
+ 'sp', # Scalar Penta-diagonal solver
+ 'lu', # Lower-Upper Gauss-Seidel solver
+ )
+
+ # Valid Benchmark Classes
+ valid_classes = (
+ 'S', # Small for quick test purposes
+ 'W', # Workstation size
+ 'A', 'B', 'C', # standard test problems
+ # ~4X size increase going from one class to the next
+ 'D', 'E', # large test problems
+ # ~16X size increase from each of the previous classes
+ )
+
+ # TODO: Combine these into a single mutually exclusive variant
+ variant(
+ 'implementation',
+ default='mpi',
+ values=('serial', 'mpi', 'openmp'),
+ description='Selects one among the available implementations'
+ )
+
+ variant(
+ 'names',
+ default=','.join(valid_names),
+ values=valid_names,
+ multi=True,
+ description='Benchmark names (comma separated list)'
+ )
+
+ variant(
+ 'classes',
+ default=','.join(valid_classes),
+ values=valid_classes,
+ multi=True,
+ description='Benchmark classes (comma separated list)'
+ )
+
+ # This variant only applies to the MPI implementation
+ variant(
+ 'nprocs',
+ default='1,2,4,8,16,32,64,128',
+ values=is_integral,
+ multi=True,
+ description='Number of processes (comma separated list)'
+ )
+
+ depends_on('mpi@2:', when='implementation=mpi')
+
+ phases = ['edit', 'install']
+
+ # Cannot be built in parallel
+ parallel = False
+
+ @property
+ def build_directory(self):
+ if 'implementation=mpi' in self.spec:
+ implementation = 'MPI'
+ elif 'implementation=openmp' in self.spec:
+ implementation = 'OMP'
+ elif 'implementation=serial' in self.spec:
+ implementation = 'SER'
+ else:
+ raise RuntimeError('You must choose an implementation to build')
+
+ return 'NPB{0}-{1}'.format(self.version.up_to(2), implementation)
+
+ def edit(self, spec, prefix):
+ names = spec.variants['names'].value
+ classes = spec.variants['classes'].value
+ nprocs = spec.variants['nprocs'].value
+
+ if 'implementation=mpi' in spec:
+ definitions = {
+ # Parallel Fortran
+ 'MPIF77': spec['mpi'].mpif77,
+ 'FLINK': spec['mpi'].mpif77,
+ 'FMPI_LIB': spec['mpi'].libs.ld_flags,
+ 'FMPI_INC': '-I' + spec['mpi'].prefix.include,
+ 'FFLAGS': '-O3',
+ 'FLINKFLAGS': '-O3',
+ # Parallel C
+ 'MPICC': spec['mpi'].mpicc,
+ 'CLINK': spec['mpi'].mpicc,
+ 'CMPI_LIB': spec['mpi'].libs.ld_flags,
+ 'CMPI_INC': '-I' + spec['mpi'].prefix.include,
+ 'CFLAGS': '-O3',
+ 'CLINKFLAGS': '-O3',
+ # Utilities C
+ 'CC': spack_cc + ' -g',
+ 'BINDIR': prefix.bin,
+ 'RAND': 'randi8',
+ }
+ elif 'implementation=openmp' in spec:
+ definitions = {
+ # Parallel Fortran
+ 'F77': spack_f77,
+ 'FLINK': spack_f77,
+ 'F_LIB': '',
+ 'F_INC': '',
+ 'FFLAGS': '-O3 ' + self.compiler.openmp_flag,
+ 'FLINKFLAGS': '-O3 ' + self.compiler.openmp_flag,
+ # Parallel C
+ 'CC': spack_cc,
+ 'CLINK': spack_cc,
+ 'C_LIB': '-lm',
+ 'C_INC': '',
+ 'CFLAGS': '-O3 ' + self.compiler.openmp_flag,
+ 'CLINKFLAGS': '-O3 ' + self.compiler.openmp_flag,
+ # Utilities C
+ 'UCC': spack_cc,
+ 'BINDIR': prefix.bin,
+ 'RAND': 'randi8',
+ 'WTIME': 'wtime.c',
+ }
+ elif 'implementation=serial' in spec:
+ definitions = {
+ # Parallel Fortran
+ 'F77': spack_f77,
+ 'FLINK': spack_f77,
+ 'F_LIB': '',
+ 'F_INC': '',
+ 'FFLAGS': '-O3',
+ 'FLINKFLAGS': '-O3',
+ # Parallel C
+ 'CC': spack_cc,
+ 'CLINK': spack_cc,
+ 'C_LIB': '-lm',
+ 'C_INC': '',
+ 'CFLAGS': '-O3',
+ 'CLINKFLAGS': '-O3',
+ # Utilities C
+ 'UCC': spack_cc,
+ 'BINDIR': prefix.bin,
+ 'RAND': 'randi8',
+ 'WTIME': 'wtime.c',
+ }
+
+ with working_dir(self.build_directory):
+ with open('config/make.def', 'w') as make_def:
+ for key in definitions:
+ make_def.write('{0} = {1}\n'.format(
+ key, definitions[key]))
+
+ with open('config/suite.def', 'w') as suite_def:
+ for name in names:
+ for classname in classes:
+ # Classes C, D and E are not available for DT
+ if name == 'dt' and classname in ('C', 'D', 'E'):
+ continue
+
+ # Class E is not available for IS
+ if name == 'is' and classname == 'E':
+ continue
+
+ if 'implementation=mpi' in spec:
+ for nproc in nprocs:
+ suite_def.write('{0}\t{1}\t{2}\n'.format(
+ name, classname, nproc))
+ else:
+ suite_def.write('{0}\t{1}\n'.format(
+ name, classname))
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+
+ with working_dir(self.build_directory):
+ make('suite')
diff --git a/var/spack/repos/builtin/packages/npm/package.py b/var/spack/repos/builtin/packages/npm/package.py
index 7910a8af9b..89a46bc19b 100644
--- a/var/spack/repos/builtin/packages/npm/package.py
+++ b/var/spack/repos/builtin/packages/npm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ import os
from spack import *
-class Npm(Package):
+class Npm(AutotoolsPackage):
"""npm: A package manager for javascript."""
homepage = "https://github.com/npm/npm"
@@ -36,19 +36,11 @@ class Npm(Package):
version('3.10.9', 'ec1eb22b466ce87cdd0b90182acce07f')
version('3.10.5', '46002413f4a71de9b0da5b506bf1d992')
- depends_on('node-js')
-
+ depends_on('node-js', type=('build', 'run'))
+
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
npm_config_cache_dir = "%s/npm-cache" % dependent_spec.prefix
if not os.path.isdir(npm_config_cache_dir):
mkdir(npm_config_cache_dir)
run_env.set('npm_config_cache', npm_config_cache_dir)
spack_env.set('npm_config_cache', npm_config_cache_dir)
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- if self.run_tests:
- make('test')
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/npth/package.py b/var/spack/repos/builtin/packages/npth/package.py
new file mode 100644
index 0000000000..c99c01ebb2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/npth/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Npth(AutotoolsPackage):
+ """nPth is a library to provide the GNU Pth API and thus a
+ non-preemptive threads implementation."""
+
+ homepage = "https://gnupg.org/software/npth/index.html"
+ url = "https://gnupg.org/ftp/gcrypt/npth/npth-1.4.tar.bz2"
+
+ version('1.4', '76cef5542e0db6a339cf960641ed86f8')
diff --git a/var/spack/repos/builtin/packages/nspr/package.py b/var/spack/repos/builtin/packages/nspr/package.py
new file mode 100644
index 0000000000..cddcdb16a0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nspr/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Nspr(AutotoolsPackage):
+ """Netscape Portable Runtime (NSPR) provides a platform-neutral API
+ for system level and libc-like functions."""
+
+ homepage = "https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSPR"
+ url = "http://ftp.mozilla.org/pub/nspr/releases/v4.13.1/src/nspr-4.13.1.tar.gz"
+
+ version('4.13.1', '9c44298a6fc478b3c0a4e98f4f9981ed')
+
+ depends_on('perl', type='build')
+
+ configure_directory = 'nspr'
+
+ def configure_args(self):
+ return [
+ '--with-mozilla',
+ '--enable-64bit' # without this, fails when 32-bit glibc not found
+ ]
diff --git a/var/spack/repos/builtin/packages/numactl/package.py b/var/spack/repos/builtin/packages/numactl/package.py
new file mode 100644
index 0000000000..26df59c85a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/numactl/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Numactl(AutotoolsPackage):
+ """NUMA support for Linux"""
+
+ homepage = "http://oss.sgi.com/projects/libnuma/"
+ url = "https://github.com/numactl/numactl/archive/v2.0.11.tar.gz"
+
+ version('2.0.11', 'b56d2367217cde390b4d8087e00773b8')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
diff --git a/var/spack/repos/builtin/packages/numdiff/package.py b/var/spack/repos/builtin/packages/numdiff/package.py
index 0a912d3db9..b584d1156c 100644
--- a/var/spack/repos/builtin/packages/numdiff/package.py
+++ b/var/spack/repos/builtin/packages/numdiff/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,6 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import sys
class Numdiff(AutotoolsPackage):
@@ -34,6 +33,38 @@ class Numdiff(AutotoolsPackage):
homepage = 'https://www.nongnu.org/numdiff'
url = 'http://nongnu.askapache.com/numdiff/numdiff-5.8.1.tar.gz'
- version('5.8.1', 'a295eb391f6cb1578209fc6b4f9d994e')
+ maintainers = ['davydden']
- depends_on('gettext', when=sys.platform == 'darwin')
+ version('5.9.0', '794461a7285d8b9b1f2c4a8149889ea6')
+ version('5.8.1', 'a295eb391f6cb1578209fc6b4f9d994e')
+
+ variant('nls', default=False,
+ description="Enable Natural Language Support")
+ variant('gmp', default=False,
+ description="Use GNU Multiple Precision Arithmetic Library")
+
+ depends_on('gettext', when='+nls')
+ depends_on('gmp', when='+gmp')
+
+ def configure_args(self):
+ spec = self.spec
+ args = []
+ if '+nls' in spec:
+ args.append('--enable-nls')
+ else:
+ args.append('--disable-nls')
+
+ if '+gmp' in spec:
+ # compile with -O0 as per upstream known issue with optimization
+ # and GMP; https://launchpad.net/ubuntu/+source/numdiff/+changelog
+ # http://www.nongnu.org/numdiff/#issues
+ # keep this variant off by default as one still encounter
+ # GNU MP: Cannot allocate memory (size=2305843009206983184)
+ args.extend([
+ '--enable-gmp',
+ 'CFLAGS=-O0'
+ ])
+ else:
+ args.append('--disable-gmp')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/nut/package.py b/var/spack/repos/builtin/packages/nut/package.py
new file mode 100644
index 0000000000..2ff9f77c9c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/nut/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Nut(CMakePackage):
+ """NuT is Monte Carlo code for neutrino transport and
+ is a C++ analog to the Haskell McPhD code.
+ NuT is principally aimed at exploring on-node parallelism
+ and performance issues."""
+
+ homepage = "https://github.com/lanl/NuT"
+ url = "https://github.com/lanl/NuT.git"
+ tags = ['proxy-app']
+
+ version(
+ 'serial', git='https://github.com/lanl/NuT.git',
+ branch='master')
+ version(
+ 'openmp', git='https://github.com/lanl/NuT.git',
+ branch='openmp')
+
+ depends_on('random123')
+
+ # serial must be built with clang
+ conflicts('%gcc', when='@serial')
+ conflicts('%intel', when='@serial')
+ conflicts('%pgi', when='@serial')
+ conflicts('%xl', when='@serial')
+ conflicts('%nag', when='@serial')
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('RANDOM123_DIR', self.spec['random123'].prefix)
+
+ build_targets = ['VERBOSE=on']
+
+ def install(self, spec, prefix):
+ install('README.md', prefix)
+ mkdirp(prefix.bin)
+ install('spack-build/test/nut_unittests', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/nwchem/package.py b/var/spack/repos/builtin/packages/nwchem/package.py
index 556dba34c2..10262be6a8 100644
--- a/var/spack/repos/builtin/packages/nwchem/package.py
+++ b/var/spack/repos/builtin/packages/nwchem/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -43,39 +43,41 @@ class Nwchem(Package):
depends_on('python@2.7:2.8', type=('build', 'run'))
+ # first hash is sha256 of the patch (required for URL patches),
+ # second is sha256 for the archive.
# patches for 6.6-27746:
urls_for_patches = {
'@6.6': [
- ('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch.gz', 'f91c6a04df56e228fe946291d2f38c9a'),
- ('http://www.nwchem-sw.org/images/Tools_lib64.patch.gz', 'b71e8dbad27f1c97b60a53ec34d3f6e0'),
- ('http://www.nwchem-sw.org/images/Config_libs66.patch.gz', 'cc4be792e7b5128c3f9b7b1167ade2cf'),
- ('http://www.nwchem-sw.org/images/Cosmo_meminit.patch.gz', '1d94685bf3b72d8ecd40c46334348ca7'),
- ('http://www.nwchem-sw.org/images/Sym_abelian.patch.gz', 'b19cade61c787916a73a4aaf6e2445d6'),
- ('http://www.nwchem-sw.org/images/Xccvs98.patch.gz', 'b9aecc516a3551dcf871cb2f066598cb'),
- ('http://www.nwchem-sw.org/images/Dplot_tolrho.patch.gz', '0a5bdad63d2d0ffe46b28db7ad6d9cec'),
- ('http://www.nwchem-sw.org/images/Driver_smalleig.patch.gz', 'c3f609947220c0adb524b02c316b5564'),
- ('http://www.nwchem-sw.org/images/Ga_argv.patch.gz', '7a665c981cfc17187455e1826f095f6f'),
- ('http://www.nwchem-sw.org/images/Raman_displ.patch.gz', 'ed334ca0b2fe81ce103ef8cada990c4c'),
- ('http://www.nwchem-sw.org/images/Ga_defs.patch.gz', '0c3cab4d5cbef5acac16ffc5e6f869ef'),
- ('http://www.nwchem-sw.org/images/Zgesvd.patch.gz', '8fd5a11622968ef4351bd3d5cddce8f2'),
- ('http://www.nwchem-sw.org/images/Cosmo_dftprint.patch.gz', '64dcf27f3c6ced2cadfb504fa66e9d08'),
- ('http://www.nwchem-sw.org/images/Txs_gcc6.patch.gz', '56595a7252da051da13f94edc54fe059'),
- ('http://www.nwchem-sw.org/images/Gcc6_optfix.patch.gz', 'c6642c21363c09223784b47b8636047d'),
- ('http://www.nwchem-sw.org/images/Util_gnumakefile.patch.gz', 'af74ea2e32088030137001ce5cb047c5'),
- ('http://www.nwchem-sw.org/images/Util_getppn.patch.gz', '8dec8ee198bf5ec4c3a22a6dbf31683c'),
- ('http://www.nwchem-sw.org/images/Gcc6_macs_optfix.patch.gz', 'a891a2713aac8b0423c8096461c243eb'),
- ('http://www.nwchem-sw.org/images/Notdir_fc.patch.gz', '2dc997d4ab3719ac7964201adbc6fd79')
+ ('http://www.nwchem-sw.org/images/Tddft_mxvec20.patch.gz', 'ae04d4754c25fc324329dab085d4cc64148c94118ee702a7e14fce6152b4a0c5', 'cdfa8a5ae7d6ee09999407573b171beb91e37e1558a3bfb2d651982a85f0bc8f'),
+ ('http://www.nwchem-sw.org/images/Tools_lib64.patch.gz', 'ef2eadef89c055c4651ea807079577bd90e1bc99ef6c89f112f1f0e7560ec9b4', '76b8d3e1b77829b683234c8307fde55bc9249b87410914b605a76586c8f32dae'),
+ ('http://www.nwchem-sw.org/images/Config_libs66.patch.gz', '56f9c4bab362d82fb30d97564469e77819985a38e15ccaf04f647402c1ee248e', 'aa17f03cbb22ad7d883e799e0fddad1b5957f5f30b09f14a1a2caeeb9663cc07'),
+ ('http://www.nwchem-sw.org/images/Cosmo_meminit.patch.gz', 'f05f09ca235ad222fe47d880bfd05a1b88d0148b990ca8c7437fa231924be04b', '569c5ee528f3922ee60ca831eb20ec6591633a36f80efa76cbbe41cabeb9b624'),
+ ('http://www.nwchem-sw.org/images/Sym_abelian.patch.gz', 'e3470fb5786ab30bf2eda3bb4acc1e4c48fb5e640a09554abecf7d22b315c8fd', 'aa693e645a98dbafbb990e26145d65b100d6075254933f36326cf00bac3c29e0'),
+ ('http://www.nwchem-sw.org/images/Xccvs98.patch.gz', '75540e0436c12e193ed0b644cff41f5036d78c101f14141846083f03ad157afa', '1c0b0f1293e3b9b05e9e51e7d5b99977ccf1edb4b072872c8316452f6cea6f13'),
+ ('http://www.nwchem-sw.org/images/Dplot_tolrho.patch.gz', '8c30f92730d15f923ec8a623e3b311291eb2ba8b9d5a9884716db69a18d14f24', '2ebb1a5575c44eef4139da91f0e1e60057b2eccdba7f57a8fb577e840c326cbb'),
+ ('http://www.nwchem-sw.org/images/Driver_smalleig.patch.gz', 'a040df6f1d807402ce552ba6d35c9610d5efea7a9d6342bbfbf03c8d380a4058', 'dd65bfbae6b472b94c8ee81d74f6c3ece37c8fc8766ff7a3551d8005d44815b8'),
+ ('http://www.nwchem-sw.org/images/Ga_argv.patch.gz', '6fcd3920978ab95083483d5ed538cd9a6f2a80c2cafa0c5c7450fa5621f0a314', '8a78cb2af14314b92be9d241b801e9b9fed5527b9cb47a083134c7becdfa7cf1'),
+ ('http://www.nwchem-sw.org/images/Raman_displ.patch.gz', 'ca4312cd3ed1ceacdc3a7d258bb05b7824c393bf44f44c28a789ebeb29a8dba4', '6a16f0f589a5cbb8d316f68bd2e6a0d46cd47f1c699a4b256a3973130061f6c3'),
+ ('http://www.nwchem-sw.org/images/Ga_defs.patch.gz', 'f8ac827fbc11f7d2a9d8ec840c6f79d4759ef782bd4d291f2e88ec81b1b230aa', 'c6f1a48338d196e1db22bcfc6087e2b2e6eea50a34d3a2b2d3e90cccf43742a9'),
+ ('http://www.nwchem-sw.org/images/Zgesvd.patch.gz', 'c333a94ceb2c35a490f24b007485ac6e334e153b03cfc1d093b6037221a03517', '4af592c047dc3e0bc4962376ae2c6ca868eb7a0b40a347ed9b88e887016ad9ed'),
+ ('http://www.nwchem-sw.org/images/Cosmo_dftprint.patch.gz', '449d59983dc68c23b34e6581370b2fb3d5ea425b05c3182f0973e5b0e1a62651', 'd3b73431a68d6733eb7b669d471e18a83e03fa8e40c48e536fe8edecd99250ff'),
+ ('http://www.nwchem-sw.org/images/Txs_gcc6.patch.gz', '1dab87f23b210e941c765f7dd7cc2bed06d292a2621419dede73f10ba1ca1bcd', '139692215718cd7414896470c0cc8b7817a73ece1e4ca93bf752cf1081a195af'),
+ ('http://www.nwchem-sw.org/images/Gcc6_optfix.patch.gz', '8f8a5f8246bc1e42ef0137049acab4448a2e560339f44308703589adf753c148', '15cff43ab0509e0b0e83c49890032a848d6b7116bd6c8e5678e6c933f2d051ab'),
+ ('http://www.nwchem-sw.org/images/Util_gnumakefile.patch.gz', '173e17206a9099c3512b87e3f42441f5b089db82be1d2b306fe2a0070e5c8fad', '5dd82b9bd55583152295c999a0e4d72dd9d5c6ab7aa91117c2aae57a95a14ba1'),
+ ('http://www.nwchem-sw.org/images/Util_getppn.patch.gz', 'c4a23592fdcfb1fb6b65bc6c1906ac36f9966eec4899c4329bc8ce12015d2495', '8be418e1f8750778a31056f1fdf2a693fa4a12ea86a531f1ddf6f3620421027e'),
+ ('http://www.nwchem-sw.org/images/Gcc6_macs_optfix.patch.gz', 'ff33d5f1ccd33385ffbe6ce7a18ec1506d55652be6e7434dc8065af64c879aaa', 'fade16098a1f54983040cdeb807e4e310425d7f66358807554e08392685a7164'),
+ ('http://www.nwchem-sw.org/images/Notdir_fc.patch.gz', '54c722fa807671d6bf1a056586f0923593319d09c654338e7dd461dcd29ff118', 'a6a233951eb254d8aff5b243ca648def21fa491807a66c442f59c437f040ee69')
]
}
# Iterate over patches
- for condition, urls in urls_for_patches.iteritems():
- for url, md5 in urls:
- patch(url, when=condition, level=0, md5=md5)
+ for condition, urls in urls_for_patches.items():
+ for url, sha256, archive_sha256 in urls:
+ patch(url, when=condition, level=0, sha256=sha256, archive_sha256=archive_sha256)
def install(self, spec, prefix):
- scalapack = spec['scalapack'].scalapack_libs
- lapack = spec['lapack'].lapack_libs
- blas = spec['blas'].blas_libs
+ scalapack = spec['scalapack'].libs
+ lapack = spec['lapack'].libs
+ blas = spec['blas'].libs
# see http://www.nwchem-sw.org/index.php/Compiling_NWChem
args = []
args.extend([
@@ -88,7 +90,7 @@ class Nwchem(Package):
'MPI_LOC=%s' % spec['mpi'].prefix,
'USE_PYTHONCONFIG=y',
'PYTHONVERSION=%s' % spec['python'].version.up_to(2),
- 'PYTHONHOME=%s' % spec['python'].prefix,
+ 'PYTHONHOME=%s' % spec['python'].home,
'BLASOPT=%s' % ((lapack + blas).ld_flags),
'BLAS_LIB=%s' % blas.ld_flags,
'LAPACK_LIB=%s' % lapack.ld_flags,
diff --git a/var/spack/repos/builtin/packages/ocaml/package.py b/var/spack/repos/builtin/packages/ocaml/package.py
index 9488d3b7a6..e93d811f06 100644
--- a/var/spack/repos/builtin/packages/ocaml/package.py
+++ b/var/spack/repos/builtin/packages/ocaml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/oce/package.py b/var/spack/repos/builtin/packages/oce/package.py
index 2d518d83c3..6fc6183e40 100644
--- a/var/spack/repos/builtin/packages/oce/package.py
+++ b/var/spack/repos/builtin/packages/oce/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from spack.operating_systems.mac_os import macOS_version
import platform
@@ -32,8 +33,11 @@ class Oce(Package):
Open CASCADE library.
"""
homepage = "https://github.com/tpaviot/oce"
- url = "https://github.com/tpaviot/oce/archive/OCE-0.17.tar.gz"
+ url = "https://github.com/tpaviot/oce/archive/OCE-0.18.tar.gz"
+ version('0.18.2', '6dfd68e459e2c62387579888a867281f')
+ version('0.18.1', '2a7597f4243ee1f03245aeeb02d00956')
+ version('0.18', '226e45e77c16a4a6e127c71fefcd171410703960ae75c7ecc7eb68895446a993')
version('0.17.2', 'bf2226be4cd192606af677cf178088e5')
version('0.17.1', '36c67b87093c675698b483454258af91')
version('0.17', 'f1a89395c4b0d199bea3db62b85f818d')
@@ -42,6 +46,8 @@ class Oce(Package):
variant('tbb', default=True,
description='Build with Intel Threading Building Blocks')
+ variant('X11', default=False,
+ description='Build with X11 enabled')
depends_on('cmake@2.8:', type='build')
depends_on('tbb', when='+tbb')
@@ -54,10 +60,15 @@ class Oce(Package):
# https://github.com/tpaviot/oce/commit/61cb965b9ffeca419005bc15e635e67589c421dd.patch
patch('null.patch', when='@0.16:0.17.1')
+ # OCE depends on xlocale.h from glibc-headers but it was removed in 2.26,
+ # see https://github.com/tpaviot/oce/issues/675
+ patch('xlocale.patch', level=0, when='@0.18.1:')
+
# fix build with Xcode 8 "previous definition of CLOCK_REALTIME"
# reported 27 Sep 2016 https://github.com/tpaviot/oce/issues/643
- if (platform.system() == "Darwin") and (platform.mac_ver()[0] == '10.12'):
- patch('sierra.patch')
+ if (platform.system() == "Darwin") and (
+ macOS_version() == Version('10.12')):
+ patch('sierra.patch', when='@0.17.2:0.18.0')
def install(self, spec, prefix):
options = []
@@ -67,7 +78,8 @@ class Oce(Package):
'-DOCE_BUILD_SHARED_LIB:BOOL=ON',
'-DCMAKE_BUILD_TYPE:STRING=Release',
'-DOCE_DATAEXCHANGE:BOOL=ON',
- '-DOCE_DISABLE_X11:BOOL=ON',
+ '-DOCE_DISABLE_X11:BOOL=%s' % (
+ 'OFF' if '+X11' in spec else 'ON'),
'-DOCE_DRAW:BOOL=OFF',
'-DOCE_MODEL:BOOL=ON',
'-DOCE_MULTITHREAD_LIBRARY:STRING=%s' % (
@@ -85,8 +97,14 @@ class Oce(Package):
'-DOCE_OSX_USE_COCOA:BOOL=ON',
])
- options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
+ if platform.system() == 'Darwin' and (
+ macOS_version() >= Version('10.12')):
+ # use @rpath on Sierra due to limit of dynamic loader
+ options.append('-DCMAKE_MACOSX_RPATH=ON')
+ else:
+ options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
cmake('.', *options)
make("install/strip")
- make("test")
+ if self.run_tests:
+ make("test")
diff --git a/var/spack/repos/builtin/packages/oce/sierra.patch b/var/spack/repos/builtin/packages/oce/sierra.patch
index 8db3af5e37..1c0c86569b 100644
--- a/var/spack/repos/builtin/packages/oce/sierra.patch
+++ b/var/spack/repos/builtin/packages/oce/sierra.patch
@@ -1,45 +1,12 @@
-diff --git a/adm/cmake/TKernel/CMakeLists.txt b/adm/cmake/TKernel/CMakeLists.txt
-index 54e241e..72873c6 100644
---- a/adm/cmake/TKernel/CMakeLists.txt
-+++ b/adm/cmake/TKernel/CMakeLists.txt
-@@ -29,7 +29,7 @@ if(WIN32)
- set(TOOLKIT_LIBS ${TOOLKIT_LIBS} ${CSF_SOCKETLibs_LIB} ${CSF_advapi32_LIB} ${CSF_gdi32_LIB} ${CSF_user32_LIB} ${CSF_kernel32_LIB} ${CSF_psapi_LIB})
- else(WIN32)
- #  An implementation for Mac OS X has been added in src/OSD/gettime_osx.h
-- if(NOT APPLE)
-+ if(APPLE)
- include( CheckFunctionExists )
- check_function_exists( clock_gettime CLOCK_GETTIME_IN_LIBC )
- if(NOT CLOCK_GETTIME_IN_LIBC)
-@@ -40,7 +40,7 @@ else(WIN32)
- endif(NOT CLOCK_GETTIME_IN_LIBRT)
- set(TOOLKIT_LIBS ${TOOLKIT_LIBS} rt)
- endif(NOT CLOCK_GETTIME_IN_LIBC)
-- endif(NOT APPLE)
-+ endif(APPLE)
- endif(WIN32)
-
- # Adde-DHAVE_TBB in TKernel in order to benefit from Standard_MMgrTBBalloc
-@@ -70,4 +70,3 @@ if (OCE_BUILD_TKERNEL_WITH_INSTALL_RPATH)
- set_target_properties_install_rpath(${TOOLKIT} "${OCE_INSTALL_LIB_DIR_RPATH};${OCE_INSTALL_PACKAGE_LIB_DIR_RPATH}")
- set_target_properties(${TOOLKIT} PROPERTIES BUILD_WITH_INSTALL_RPATH ON)
- endif ()
--
diff --git a/src/OSD/OSD_Chronometer.cxx b/src/OSD/OSD_Chronometer.cxx
-index 444f844..25970d0 100644
---- a/src/OSD/OSD_Chronometer.cxx
+index f7374fb..63ac140 100644
+--- a/src/OSD/OSD_Chronometer.cxx.old
+++ b/src/OSD/OSD_Chronometer.cxx
@@ -51,7 +51,7 @@
#include <mach/mach.h>
#endif
-#if defined(__APPLE__) && defined(__MACH__)
-+#if defined(__OOOOPPLE__) && defined(__MACH__)
++#if defined(__APPLE__) && !defined(__MAC_10_12)
#include "gettime_osx.h"
#endif
-
-@@ -283,4 +283,3 @@ void OSD_Chronometer::Show (Standard_Real& user,
- system = Cumul_sys;
- if (!StopSav) Start();
- }
--
diff --git a/var/spack/repos/builtin/packages/oce/xlocale.patch b/var/spack/repos/builtin/packages/oce/xlocale.patch
new file mode 100644
index 0000000000..2c4ba59958
--- /dev/null
+++ b/var/spack/repos/builtin/packages/oce/xlocale.patch
@@ -0,0 +1,13 @@
+--- src/Standard/Standard_CLocaleSentry.hxx.ORIG 2017-08-11 07:51:11.000000000 +0200
++++ src/Standard/Standard_CLocaleSentry.hxx 2017-08-18 01:07:11.639206272 +0200
+@@ -30,7 +30,9 @@
+ #endif
+
+ //! We check _GNU_SOURCE for glibc extensions here and it is always defined by g++ compiler.
+- #if defined(_GNU_SOURCE) && !defined(__ANDROID__)
++ //! Musl libc does not provide xlocale.h
++ //! glibc 2.26+ does not provide xlocale.h (anymore)
++ #if defined(_GNU_SOURCE) && defined(__GLIBC__) && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 26 && !defined(__ANDROID__)
+ #define HAVE_XLOCALE_H
+ #endif
+ #endif // ifndef HAVE_LOCALE_H
diff --git a/var/spack/repos/builtin/packages/oclock/package.py b/var/spack/repos/builtin/packages/oclock/package.py
index 84da93c36e..2d3a40457f 100644
--- a/var/spack/repos/builtin/packages/oclock/package.py
+++ b/var/spack/repos/builtin/packages/oclock/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Oclock(Package):
+class Oclock(AutotoolsPackage):
"""oclock is a simple analog clock using the SHAPE extension to make
a round (possibly transparent) window."""
@@ -42,9 +42,3 @@ class Oclock(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/octave-splines/package.py b/var/spack/repos/builtin/packages/octave-splines/package.py
index 11c9cc5ba7..c9a5f7b01d 100644
--- a/var/spack/repos/builtin/packages/octave-splines/package.py
+++ b/var/spack/repos/builtin/packages/octave-splines/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/octave/package.py b/var/spack/repos/builtin/packages/octave/package.py
index df144c8bbb..79dc74b518 100644
--- a/var/spack/repos/builtin/packages/octave/package.py
+++ b/var/spack/repos/builtin/packages/octave/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import sys
-class Octave(Package):
+class Octave(AutotoolsPackage):
"""GNU Octave is a high-level language, primarily intended for numerical
computations. It provides a convenient command line interface for solving
linear and nonlinear problems numerically, and for performing other
@@ -34,13 +34,19 @@ class Octave(Package):
Matlab. It may also be used as a batch-oriented language."""
homepage = "https://www.gnu.org/software/octave/"
- url = "ftp://ftp.gnu.org/gnu/octave/octave-4.0.0.tar.gz"
+ url = "https://ftp.gnu.org/gnu/octave/octave-4.0.0.tar.gz"
extendable = True
+ version('4.2.1', '80c28f6398576b50faca0e602defb9598d6f7308b0903724442c2a35a605333b')
+ version('4.2.0', '443ba73782f3531c94bcf016f2f0362a58e186ddb8269af7dcce973562795567')
version('4.0.2', 'c2a5cacc6e4c52f924739cdf22c2c687')
version('4.0.0', 'a69f8320a4f20a8480c1b278b1adb799')
+ # patches
+ # see https://savannah.gnu.org/bugs/?50234
+ patch('patch_4.2.1_inline.diff', when='@4.2.1')
+
# Variants
variant('readline', default=True)
variant('arpack', default=False)
@@ -76,7 +82,7 @@ class Octave(Package):
depends_on('readline', when='+readline')
# Optional dependencies
- depends_on('arpack', when='+arpack')
+ depends_on('arpack-ng', when='+arpack')
depends_on('curl', when='+curl')
depends_on('fftw', when='+fftw')
depends_on('fltk', when='+fltk')
@@ -87,7 +93,7 @@ class Octave(Package):
depends_on('gnuplot', when='+gnuplot')
depends_on('image-magick', when='+magick')
depends_on('hdf5', when='+hdf5')
- depends_on('jdk', when='+jdk')
+ depends_on('java', when='+jdk') # TODO: requires Java 6 ?
depends_on('llvm', when='+llvm')
# depends_on('opengl', when='+opengl') # TODO: add package
depends_on('qhull', when='+qhull')
@@ -97,15 +103,18 @@ class Octave(Package):
depends_on('suite-sparse', when='+suitesparse')
depends_on('zlib', when='+zlib')
- def install(self, spec, prefix):
- config_args = [
- "--prefix=%s" % prefix
- ]
+ def configure_args(self):
+ # See
+ # https://github.com/macports/macports-ports/blob/master/math/octave/
+ # https://github.com/Homebrew/homebrew-science/blob/master/octave.rb
+
+ spec = self.spec
+ config_args = []
# Required dependencies
config_args.extend([
- "--with-blas=%s" % spec['blas'].prefix.lib,
- "--with-lapack=%s" % spec['lapack'].prefix.lib
+ "--with-blas=%s" % spec['blas'].libs.ld_flags,
+ "--with-lapack=%s" % spec['lapack'].libs.ld_flags
])
# Strongly recommended dependencies
@@ -116,9 +125,10 @@ class Octave(Package):
# Optional dependencies
if '+arpack' in spec:
+ sa = spec['arpack-ng']
config_args.extend([
- "--with-arpack-includedir=%s" % spec['arpack'].prefix.include,
- "--with-arpack-libdir=%s" % spec['arpack'].prefix.lib
+ "--with-arpack-includedir=%s" % sa.prefix.include,
+ "--with-arpack-libdir=%s" % sa.prefix.lib
])
else:
config_args.append("--without-arpack")
@@ -163,6 +173,8 @@ class Octave(Package):
if '+magick' in spec:
config_args.append("--with-magick=%s"
% spec['image-magick'].prefix.lib)
+ else:
+ config_args.append("--without-magick")
if '+hdf5' in spec:
config_args.extend([
@@ -174,16 +186,19 @@ class Octave(Package):
if '+jdk' in spec:
config_args.extend([
- "--with-java-homedir=%s" % spec['jdk'].prefix,
- "--with-java-includedir=%s" % spec['jdk'].prefix.include,
- "--with-java-libdir=%s" % spec['jdk'].prefix.lib
+ "--with-java-homedir=%s" % spec['java'].prefix,
+ "--with-java-includedir=%s" % spec['java'].prefix.include,
+ "--with-java-libdir=%s" % spec['java'].prefix.lib
])
+ else:
+ config_args.append("--disable-java")
if '~opengl' in spec:
config_args.extend([
"--without-opengl",
"--without-framework-opengl"
])
+ # TODO: opengl dependency and package is missing?
if '+qhull' in spec:
config_args.extend([
@@ -210,16 +225,13 @@ class Octave(Package):
else:
config_args.append("--without-z")
- configure(*config_args)
-
- make()
- make("install")
+ return config_args
# ========================================================================
# Set up environment to make install easy for Octave extensions.
# ========================================================================
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""Called before Octave modules' install() methods.
In most cases, extensions will only need to have one line:
diff --git a/var/spack/repos/builtin/packages/octave/patch_4.2.1_inline.diff b/var/spack/repos/builtin/packages/octave/patch_4.2.1_inline.diff
new file mode 100644
index 0000000000..880818fbce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/octave/patch_4.2.1_inline.diff
@@ -0,0 +1,12 @@
+diff -r 73f7ef7169ac liboctave/system/file-stat.cc
+--- a/liboctave/system/file-stat.cc Thu Feb 23 16:08:44 2017 -0800
++++ b/liboctave/system/file-stat.cc Fri Feb 24 11:02:36 2017 -0800
+@@ -174,7 +174,7 @@ namespace octave
+ update_internal ();
+ }
+
+- inline file_stat::~file_stat () { }
++ file_stat::~file_stat () { }
+
+ void
+ file_stat::update_internal (bool force)
diff --git a/var/spack/repos/builtin/packages/octopus/package.py b/var/spack/repos/builtin/packages/octopus/package.py
index b74befbe35..c450cf6020 100644
--- a/var/spack/repos/builtin/packages/octopus/package.py
+++ b/var/spack/repos/builtin/packages/octopus/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,17 +30,11 @@ class Octopus(Package):
theory code."""
homepage = "http://www.tddft.org/programs/octopus/"
- base_url = "http://www.tddft.org/programs/octopus/down.php?file="
+ url = "http://www.tddft.org/programs/octopus/down.php?file=6.0/octopus-6.0.tar.gz"
version('6.0', '5d1168c2a8d7fd9cb9492eaebaa7182e')
version('5.0.1', '2b6392ab67b843f9d4ca7413fc07e822')
- # Sample url is:
- # "http://www.tddft.org/programs/octopus/down.php?file=5.0.1/octopus-5.0.1.tar.gz"
- def url_for_version(self, version):
- return '{0}/{1}/octopus-{1}.tar.gz'.format(Octopus.base_url,
- version.dotted)
-
variant('scalapack', default=False,
description='Compile with Scalapack')
variant('metis', default=True,
@@ -49,8 +43,8 @@ class Octopus(Package):
description='Compile with ParMETIS')
variant('netcdf', default=False,
description='Compile with Netcdf')
- variant('arpack-ng', default=False,
- description='Compile with ARPACK-ng')
+ variant('arpack', default=False,
+ description='Compile with ARPACK')
depends_on('blas')
depends_on('gsl')
@@ -62,17 +56,15 @@ class Octopus(Package):
depends_on('parmetis', when='+parmetis')
depends_on('scalapack', when='+scalapack')
depends_on('netcdf-fortran', when='+netcdf')
- depends_on('arpack-ng', when='+arpack-ng')
+ depends_on('arpack-ng', when='+arpack')
# optional dependencies:
# TODO: parmetis, etsf-io, sparskit,
# feast, libfm, pfft, isf, pnfft
def install(self, spec, prefix):
- arpack = find_libraries(['libarpack'], root=spec[
- 'arpack-ng'].prefix.lib, shared=True)
- lapack = spec['lapack'].lapack_libs
- blas = spec['blas'].blas_libs
+ lapack = spec['lapack'].libs
+ blas = spec['blas'].libs
args = []
args.extend([
'--prefix=%s' % prefix,
@@ -96,23 +88,28 @@ class Octopus(Package):
if '+netcdf' in spec:
args.extend([
'--with-netcdf-prefix=%s' % spec['netcdf-fortran'].prefix,
- '--with-netcdf-include=%s' %
+ '--with-netcdf-include=%s' %
spec['netcdf-fortran'].prefix.include,
])
- if '+arpack-ng' in spec:
+ if '+arpack' in spec:
+ arpack_libs = spec['arpack-ng'].libs.joined()
args.extend([
- '--with-arpack={0}'.format(arpack.joined()),
+ '--with-arpack={0}'.format(arpack_libs),
])
+ if '+mpi' in spec['arpack-ng']:
+ args.extend([
+ '--with-parpack={0}'.format(arpack_libs),
+ ])
+
if '+scalapack' in spec:
args.extend([
- '--with-blacs=%s' % spec['scalapack'].scalapack_libs,
- '--with-scalapack=%s' % spec['scalapack'].scalapack_libs,
+ '--with-blacs=%s' % spec['scalapack'].libs,
+ '--with-scalapack=%s' % spec['scalapack'].libs
])
+
# --with-etsf-io-prefix=
# --with-sparskit=${prefix}/lib/libskit.a
# --with-pfft-prefix=${prefix} --with-mpifftw-prefix=${prefix}
- # --with-parpack=${prefix}/lib/libparpack.dylib
- # --with-parmetis-prefix=${prefix}
# --with-berkeleygw-prefix=${prefix}
# When preprocessor expands macros (i.e. CFLAGS) defined as quoted
diff --git a/var/spack/repos/builtin/packages/of-adios-write/package.py b/var/spack/repos/builtin/packages/of-adios-write/package.py
new file mode 100644
index 0000000000..0c56f0286c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/of-adios-write/package.py
@@ -0,0 +1,136 @@
+##############################################################################
+# Copyright (c) 2017 Mark Olesen, OpenCFD Ltd.
+#
+# This file was authored by Mark Olesen <mark.olesen@esi-group.com>
+# and is released as part of spack under the LGPL license.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for the LLNL notice and LGPL.
+#
+# License
+# -------
+# 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
+#
+# Legal Notice
+# ------------
+# OPENFOAM is a trademark owned by OpenCFD Ltd
+# (producer and distributor of the OpenFOAM software via www.openfoam.com).
+# The trademark information must remain visible and unadulterated in this
+# file and via the "spack info" and comply with the term set by
+# http://openfoam.com/legal/trademark-policy.php
+#
+# This file is not part of OpenFOAM, nor does it constitute a component of an
+# OpenFOAM distribution.
+#
+##############################################################################
+import os
+
+import llnl.util.tty as tty
+
+from spack import *
+from spack.pkg.builtin.openfoam_com import add_extra_files
+
+
+class OfAdiosWrite(Package):
+ """adios-write supplies additional libraries and function objects
+ for reading/writing OpenFOAM data with ADIOS.
+ This offering is part of the community repository supported by OpenCFD Ltd,
+ producer and distributor of the OpenFOAM software via www.openfoam.com,
+ and owner of the OPENFOAM trademark.
+ OpenCFD Ltd has been developing and releasing OpenFOAM since its debut
+ in 2004.
+ """
+
+ # Currently only via git, but with some branches corresponding to main
+ # OpenFOAM releases.
+ homepage = "https://develop.openfoam.com/Community/feature-adiosWrite/"
+ gitrepo = "https://develop.openfoam.com/Community/feature-adiosWrite.git"
+
+ version('develop', branch='develop', git=gitrepo)
+ version('1706', branch='v1706', git=gitrepo)
+ version('1612', branch='v1612', git=gitrepo)
+
+ variant('source', default=True, description='Install library source')
+
+ depends_on('openfoam-com@develop+source', when='@develop')
+ depends_on('openfoam-com@1706+source', when='@1706')
+ depends_on('openfoam-com@1612+source', when='@1612')
+ depends_on('adios')
+
+ # General patches
+ common = ['change-userdir.sh', 'spack-derived-Allwmake']
+ assets = []
+
+ build_script = './spack-derived-Allwmake'
+ build_userdir = 'spack-userdir' # Build user APPBIN, LIBBIN into here
+
+ phases = ['configure', 'build', 'install']
+
+ #
+ # - End of definitions / setup -
+ #
+
+ def patch(self):
+ """Copy additional files or other patching."""
+ add_extra_files(self, self.common, self.assets)
+ # Emit openfoam version immediately, if we resolved the wrong version
+ # it takes a very long time to rebuild!
+ tty.info('Build for ' + self.spec['openfoam'].format('$_$@$%@+$+'))
+
+ def configure(self, spec, prefix):
+ """Generate spack-config.sh file."""
+ # Local tweaks
+ config = join_path(self.stage.source_path, 'spack-config.sh')
+ with open(config, 'w') as out:
+ out.write(
+ """# Local tweaks for building
+# Location of adios from spack
+export ADIOS_ARCH_PATH={adios_dir}
+
+# Local build (for user appbin, libbin)
+. ./change-userdir.sh $PWD/{user_dir}
+#
+"""
+ .format(
+ adios_dir=spec['adios'].prefix,
+ user_dir=self.build_userdir))
+
+ def build(self, spec, prefix):
+ """Build with Allwmake script, wrapped to source environment first."""
+ args = []
+ if self.parallel: # Parallel build? - pass via environment
+ os.environ['WM_NCOMPPROCS'] = str(make_jobs)
+ builder = Executable(self.build_script)
+ builder(*args)
+
+ def install(self, spec, prefix):
+ """Install under the prefix directory"""
+
+ for f in ['README.md', 'Issues.txt']:
+ if os.path.isfile(f):
+ install(f, join_path(self.prefix, f))
+
+ dirs = ['doc', 'etc', 'tutorials']
+ if '+source' in spec:
+ dirs.append('src')
+
+ for d in dirs:
+ install_tree(d, join_path(self.prefix, d))
+
+ # Place directly under 'lib' (no bin)
+ for d in ['lib']:
+ install_tree(
+ join_path(self.build_userdir, d),
+ join_path(self.prefix, d))
diff --git a/var/spack/repos/builtin/packages/ompss/package.py b/var/spack/repos/builtin/packages/ompss/package.py
index 02925974ea..f3cea1597d 100644
--- a/var/spack/repos/builtin/packages/ompss/package.py
+++ b/var/spack/repos/builtin/packages/ompss/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/ompt-openmp/package.py b/var/spack/repos/builtin/packages/ompt-openmp/package.py
index 40159e4c6c..803f70c7c2 100644
--- a/var/spack/repos/builtin/packages/ompt-openmp/package.py
+++ b/var/spack/repos/builtin/packages/ompt-openmp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class OmptOpenmp(Package):
+class OmptOpenmp(CMakePackage):
"""LLVM/Clang OpenMP runtime with OMPT support. This is a fork of the
OpenMPToolsInterface/LLVM-openmp fork of the official LLVM OpenMP
mirror. This library provides a drop-in replacement of the OpenMP
@@ -35,15 +35,10 @@ class OmptOpenmp(Package):
homepage = "https://github.com/OpenMPToolsInterface/LLVM-openmp"
url = "http://github.com/khuck/LLVM-openmp/archive/v0.1.tar.gz"
- version('0.1', '2334e6a84b52da41b27afd9831ed5370')
+ version('0.1', '59d6933a2e9b7d1423fb9c7c77d5663f')
- depends_on('cmake', type='build')
+ depends_on('cmake@2.8:', type='build')
- def install(self, spec, prefix):
- with working_dir("runtime/build", create=True):
- cmake('-DCMAKE_C_COMPILER=%s' % self.compiler.cc,
- '-DCMAKE_CXX_COMPILER=%s' % self.compiler.cxx,
- '-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '..', *std_cmake_args)
- make()
- make("install")
+ conflicts('%gcc@:4.7')
+
+ root_cmakelists_dir = 'runtime'
diff --git a/var/spack/repos/builtin/packages/oniguruma/package.py b/var/spack/repos/builtin/packages/oniguruma/package.py
new file mode 100644
index 0000000000..28fb33590c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/oniguruma/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/spack/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 Oniguruma(AutotoolsPackage):
+ """Regular expression library."""
+
+ homepage = "https://github.com/kkos/oniguruma"
+ url = "https://github.com/kkos/oniguruma/releases/download/v6.1.3/onig-6.1.3.tar.gz"
+
+ version('6.1.3', '2d105d352c3f852d662414f639e7e859')
diff --git a/var/spack/repos/builtin/packages/ont-albacore/package.py b/var/spack/repos/builtin/packages/ont-albacore/package.py
new file mode 100644
index 0000000000..882b6f6925
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ont-albacore/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 OntAlbacore(Package):
+ """Albacore is a software project that provides an entry point to the Oxford
+ Nanopore basecalling algorithms. It can be run from the command line on
+ Windows and multiple Linux platforms. A selection of configuration files
+ allow basecalling DNA libraries made with our current range of sequencing
+ kits and Flow Cells."""
+
+ homepage = "https://nanoporetech.com"
+ url = "https://mirror.oxfordnanoportal.com/software/analysis/ont_albacore-1.2.4-cp35-cp35m-manylinux1_x86_64.whl"
+
+ version('1.2.4', '559640bec4693af12e4d923e8d77adf6', expand=False)
+ version('1.1.0', 'fab4502ea1bad99d813aa2629e03e83d', expand=False)
+ extends('python')
+
+ depends_on('python@3.5.0:3.5.999', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-numpy@1.13.0', type=('build', 'run'))
+ depends_on('py-dateutil', type=('build', 'run'))
+ depends_on('py-h5py', type=('build', 'run'))
+ depends_on('py-ont-fast5-api', type=('build', 'run'))
+ depends_on('py-pip', type=('build'))
+
+ def install(self, spec, prefix):
+ pip = which('pip')
+ pip('install', self.stage.archive_file, '--prefix={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/opari2/package.py b/var/spack/repos/builtin/packages/opari2/package.py
index 20c67716a4..9b0a4e9c47 100644
--- a/var/spack/repos/builtin/packages/opari2/package.py
+++ b/var/spack/repos/builtin/packages/opari2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Opari2(Package):
+class Opari2(AutotoolsPackage):
"""OPARI2 is a source-to-source instrumentation tool for OpenMP and hybrid
codes. It surrounds OpenMP directives and runtime library calls with calls
to the POMP2 measurement interface. OPARI2 will provide you with a new
@@ -39,14 +39,10 @@ class Opari2(Package):
homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.2.tar.gz"
- version('2.0', '72350dbdb6139f2e68a5055a4f0ba16c',
- url='http://www.vi-hps.org/upload/packages/opari2/opari2-2.0.tar.gz')
- version('1.1.4', '245d3d11147a06de77909b0805f530c0',
- url='http://www.vi-hps.org/upload/packages/opari2/opari2-1.1.4.tar.gz')
+ version('2.0.1', '74af78f1f27b8caaa4271e0b97fb0fba')
+ version('2.0', '72350dbdb6139f2e68a5055a4f0ba16c')
+ version('1.1.4', '245d3d11147a06de77909b0805f530c0')
version('1.1.2', '9a262c7ca05ff0ab5f7775ae96f3539e')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--enable-shared")
- make()
- make("install")
+ def configure_args(self):
+ return ["--enable-shared"]
diff --git a/var/spack/repos/builtin/packages/openbabel/package.py b/var/spack/repos/builtin/packages/openbabel/package.py
new file mode 100644
index 0000000000..b88693d531
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# 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/spack/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 Openbabel(CMakePackage):
+ """Open Babel is a chemical toolbox designed to speak the many languages
+ of chemical data. It's an open, collaborative project allowing anyone to
+ search, convert, analyze, or store data from molecular modeling, chemistry,
+ solid-state materials, biochemistry, or related areas."""
+
+ homepage = "http://openbabel.org/wiki/Main_Page"
+ url = "https://sourceforge.net/projects/openbabel/files/openbabel/2.4.1/openbabel-2.4.1.tar.gz"
+
+ version('2.4.1', 'd9defcd7830b0592fece4fe54a137b99')
+
+ variant('python', default=True, description='Build Python bindings')
+
+ extends('python', when='+python')
+
+ depends_on('python', type=('build', 'run'), when='+python')
+ depends_on('cmake@2.4.8:', type='build')
+ depends_on('pkg-config', type='build')
+ depends_on('cairo') # required to support PNG depiction
+ depends_on('eigen@3.0:') # required if using the language bindings
+ depends_on('libxml2') # required to read/write CML files, XML formats
+ depends_on('zlib') # required to support reading gzipped files
+
+ # Needed for Python 3.6 support
+ patch('python-3.6-rtld-global.patch', when='@:2.4.1+python')
+
+ # Convert tabs to spaces. Allows unit tests to pass
+ patch('testpdbformat-tabs-to-spaces.patch', when='@:2.4.1')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ if '+python' in spec:
+ args.extend([
+ '-DPYTHON_BINDINGS=ON',
+ '-DPYTHON_EXECUTABLE={0}'.format(spec['python'].command.path),
+ ])
+ else:
+ args.append('-DPYTHON_BINDINGS=OFF')
+
+ return args
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ obabel = Executable(join_path(self.prefix.bin, 'obabel'))
+ obabel('-:C1=CC=CC=C1Br', '-omol')
+
+ if '+python' in self.spec:
+ # Attempt to import the Python modules
+ for module in ['openbabel', 'pybel']:
+ python('-c', 'import {0}'.format(module))
diff --git a/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch b/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch
new file mode 100644
index 0000000000..68cd56a1f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/python-3.6-rtld-global.patch
@@ -0,0 +1,42 @@
+The DLFCN module has been removed from python 3.6, as it is not
+documented. Same funtionality can be achive with the os module
+that makes available the os.RTLD_GLOBAL variable for dlopen()
+
+See https://github.com/openbabel/openbabel/pull/372 for the
+source of this patch. The original patch only affects the CMake
+file that SWIG uses to generate openbabel.py. This patch also
+includes changes to openbabel.py.
+
+diff -Nuar a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt
+--- a/scripts/CMakeLists.txt 2017-05-17 10:02:54.408527942 -0500
++++ b/scripts/CMakeLists.txt 2017-05-17 10:04:09.701598715 -0500
+@@ -81,11 +81,8 @@
+ COMMAND ${SWIG_EXECUTABLE} -python -c++ -small -O -templatereduce -naturalvar -I${openbabel_SOURCE_DIR}/include -I${openbabel_BINARY_DIR}/include -o ${openbabel_SOURCE_DIR}/scripts/python/openbabel-python.cpp ${eigen_define} -outdir ${openbabel_SOURCE_DIR}/scripts/python ${openbabel_SOURCE_DIR}/scripts/openbabel-python.i
+ COMMAND ${CMAKE_COMMAND} -E echo "import sys" > ob.py
+ COMMAND ${CMAKE_COMMAND} -E echo "if sys.platform.find('linux'\) != -1:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " try:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " import dl" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " except ImportError:" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " import DLFCN as dl" >> ob.py
+- COMMAND ${CMAKE_COMMAND} -E echo " sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL)" >> ob.py
++ COMMAND ${CMAKE_COMMAND} -E echo " import os" >> ob.py
++ COMMAND ${CMAKE_COMMAND} -E echo " sys.setdlopenflags(sys.getdlopenflags() | os.RTLD_GLOBAL)" >> ob.py
+ COMMAND cat ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py >> ob.py
+ COMMAND ${CMAKE_COMMAND} -E copy ob.py ${openbabel_SOURCE_DIR}/scripts/python/openbabel.py
+ COMMAND ${CMAKE_COMMAND} -E remove ob.py
+diff -Nuar a/scripts/python/openbabel.py b/scripts/python/openbabel.py
+--- a/scripts/python/openbabel.py 2017-05-17 10:02:54.398527534 -0500
++++ b/scripts/python/openbabel.py 2017-05-17 10:04:26.705292138 -0500
+@@ -1,10 +1,7 @@
+ import sys
+ if sys.platform.find('linux') != -1:
+- try:
+- import dl
+- except ImportError:
+- import DLFCN as dl
+- sys.setdlopenflags(sys.getdlopenflags() | dl.RTLD_GLOBAL)
++ import os
++ sys.setdlopenflags(sys.getdlopenflags() | os.RTLD_GLOBAL)
+ # This file was automatically generated by SWIG (http://www.swig.org).
+ # Version 3.0.10
+ #
diff --git a/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch b/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch
new file mode 100644
index 0000000000..0a71a72e01
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openbabel/testpdbformat-tabs-to-spaces.patch
@@ -0,0 +1,47 @@
+From 08cd38485d4cf1df8802da540f3018921dbc735e Mon Sep 17 00:00:00 2001
+From: "Adam J. Stewart" <ajstewart426@gmail.com>
+Date: Wed, 17 May 2017 10:56:23 -0500
+Subject: [PATCH] Convert tabs to spaces in testpdbformat.py
+
+See https://github.com/openbabel/openbabel/pull/1568
+
+---
+ test/testpdbformat.py | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/test/testpdbformat.py b/test/testpdbformat.py
+index 40bd316..ceb8496 100644
+--- a/test/testpdbformat.py
++++ b/test/testpdbformat.py
+@@ -24,12 +24,12 @@ class TestPDBFormat(BaseTest):
+
+ def testInsertionCodes(self):
+ """
+- Testing a PDB entry with insertion codes to distinguish residues
+- upon conversion to FASTA.
++ Testing a PDB entry with insertion codes to distinguish residues
++ upon conversion to FASTA.
+ """
+ self.canFindExecutable("babel")
+
+- self.entryPDBwithInsertioncodes="""ATOM 406 N VAL L 29 58.041 17.797 48.254 1.00 0.00 N
++ self.entryPDBwithInsertioncodes="""ATOM 406 N VAL L 29 58.041 17.797 48.254 1.00 0.00 N
+ ATOM 407 CA VAL L 29 57.124 18.088 47.170 1.00 0.00 C
+ ATOM 408 C VAL L 29 55.739 17.571 47.538 1.00 0.00 C
+ ATOM 409 O VAL L 29 55.535 16.362 47.550 1.00 0.00 O
+@@ -100,9 +100,9 @@ ATOM 473 HE1 TYR L 32 48.512 15.775 42.066 1.00 0.00 H
+ ATOM 474 HE2 TYR L 32 48.145 19.172 44.648 1.00 0.00 H
+ ATOM 475 HH TYR L 32 46.462 17.658 44.280 1.00 0.00 H
+ """
+- output, error = run_exec(self.entryPDBwithInsertioncodes,
+- "babel -ipdb -ofasta")
+- self.assertEqual(output.rstrip().rsplit("\n",1)[1], "VSSSY")
++ output, error = run_exec(self.entryPDBwithInsertioncodes,
++ "babel -ipdb -ofasta")
++ self.assertEqual(output.rstrip().rsplit("\n",1)[1], "VSSSY")
+
+ if __name__ == "__main__":
+ testsuite = []
+--
+2.9.4
+
diff --git a/var/spack/repos/builtin/packages/openblas/openblas0.2.19.diff b/var/spack/repos/builtin/packages/openblas/openblas0.2.19.diff
new file mode 100644
index 0000000000..442612d5cf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/openblas0.2.19.diff
@@ -0,0 +1,847 @@
+diff --git a/cpuid_x86.c b/cpuid_x86.c
+index bbd377f..dff1507 100644
+--- a/cpuid_x86.c
++++ b/cpuid_x86.c
+@@ -1110,6 +1110,9 @@ int get_cpuname(void){
+ break;
+ case 3:
+ switch (model) {
++ case 7:
++ // Bay Trail
++ return CPUTYPE_ATOM;
+ case 10:
+ case 14:
+ // Ivy Bridge
+diff --git a/driver/others/dynamic.c b/driver/others/dynamic.c
+index 18f85c3..a09660f 100644
+--- a/driver/others/dynamic.c
++++ b/driver/others/dynamic.c
+@@ -232,6 +232,7 @@ static gotoblas_t *get_coretype(void){
+ return &gotoblas_NEHALEM; //OS doesn't support AVX. Use old kernels.
+ }
+ }
++ if (model == 7) return &gotoblas_ATOM; //Bay Trail
+ return NULL;
+ case 4:
+ //Intel Haswell
+diff --git a/kernel/x86_64/dgemm_kernel_4x8_sandy.S b/kernel/x86_64/dgemm_kernel_4x8_sandy.S
+index a52bb07..926395c 100644
+--- a/kernel/x86_64/dgemm_kernel_4x8_sandy.S
++++ b/kernel/x86_64/dgemm_kernel_4x8_sandy.S
+@@ -277,7 +277,7 @@ LEAQ (, %rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 8), ptrba;
+ LEAQ (ptrbb, %rax, 4), ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ PREFETCH2 0*SIZE(prebb);
+ XOR_DY yvec15, yvec15, yvec15;
+ PREFETCH2 8*SIZE(prebb);
+@@ -317,7 +317,7 @@ ALIGN_5;
+ .L2_bodyB:;
+ # Computing kernel
+
+-#### Unroll times 1 ####
++//#### Unroll times 1 ####
+ LD_DY 4*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ SHUF_DY $0x03, yvec2, yvec2, yvec4;
+@@ -345,7 +345,7 @@ MUL_DY yvec1, yvec5, yvec7;
+ ADD_DY yvec10, yvec6, yvec10;
+ ADD_DY yvec8, yvec7, yvec8;
+
+-#### Unroll times 2 ####
++//#### Unroll times 2 ####
+ LD_DY 12*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ SHUF_DY $0x03, yvec2, yvec2, yvec4;
+@@ -373,7 +373,7 @@ MUL_DY yvec1, yvec5, yvec7;
+ ADD_DY yvec10, yvec6, yvec10;
+ ADD_DY yvec8, yvec7, yvec8;
+
+-#### Unroll times 3 ####
++//#### Unroll times 3 ####
+ LD_DY 20*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ SHUF_DY $0x03, yvec2, yvec2, yvec4;
+@@ -402,7 +402,7 @@ MUL_DY yvec1, yvec5, yvec7;
+ ADD_DY yvec10, yvec6, yvec10;
+ ADD_DY yvec8, yvec7, yvec8;
+
+-#### Unroll times 4 ####
++//#### Unroll times 4 ####
+ LD_DY 28*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ SHUF_DY $0x03, yvec2, yvec2, yvec4;
+@@ -446,7 +446,7 @@ TEST $2, %rax;
+ JLE .L3_loopE;
+ ALIGN_5
+ .L3_bodyB:
+-#### Unroll times 1 ####
++//#### Unroll times 1 ####
+ PREFETCH0 64*SIZE(ptrba)
+ LD_DY 4*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+@@ -475,7 +475,7 @@ MUL_DY yvec1, yvec5, yvec7;
+ ADD_DY yvec10, yvec6, yvec10;
+ ADD_DY yvec8, yvec7, yvec8;
+
+-#### Unroll times 2 ####
++//#### Unroll times 2 ####
+ PREFETCH0 72*SIZE(ptrba)
+ LD_DY 12*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+@@ -516,7 +516,7 @@ TEST $1, %rax;
+ JLE .L4_loopE;
+ ALIGN_5
+ .L4_bodyB:;
+-#### Unroll times 1 ####
++//#### Unroll times 1 ####
+ PREFETCH0 64*SIZE(ptrba)
+ LD_DY 4*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+@@ -544,9 +544,9 @@ ADD_DY yvec10, yvec6, yvec10;
+ ADD_DY yvec8, yvec7, yvec8;
+
+ .L4_loopE:;
+-#### Load Alpha ####
++//#### Load Alpha ####
+ BROAD_DY MEMALPHA,yvec7;
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ MUL_DY yvec7,yvec15,yvec15;
+ MUL_DY yvec7,yvec14,yvec14;
+ MUL_DY yvec7,yvec13,yvec13;
+@@ -555,7 +555,7 @@ MUL_DY yvec7,yvec11,yvec11;
+ MUL_DY yvec7,yvec10,yvec10;
+ MUL_DY yvec7,yvec9,yvec9;
+ MUL_DY yvec7,yvec8,yvec8;
+-#### Reverse the Results ####
++//#### Reverse the Results ####
+ MOV_DY yvec15,yvec7;
+ REVS_DY $0x0a,yvec13,yvec15,yvec15;
+ REVS_DY $0x0a,yvec7,yvec13,yvec13;
+@@ -568,13 +568,13 @@ REVS_DY $0x0a,yvec7,yvec9,yvec9;
+ MOV_DY yvec10,yvec7;
+ REVS_DY $0x0a,yvec8,yvec10,yvec10;
+ REVS_DY $0x0a,yvec7,yvec8,yvec8;
+-#### Testing alignment ####
++//#### Testing alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L4_loopEx; # Unalign part write back
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1,yvec15,xvec7;
+ EXTRA_DY $1,yvec14,xvec6;
+ EXTRA_DY $1,yvec13,xvec5;
+@@ -776,7 +776,7 @@ LEAQ (, %rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 4), ptrba;
+ LEAQ (ptrbb, %rax, 4), ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ XOR_DY yvec13, yvec13, yvec13;
+ LD_DY 0*SIZE(ptrbb), yvec2;
+@@ -805,7 +805,7 @@ ALIGN_5;
+ .L6_bodyB:;
+ # Computing kernel
+
+-#### Untoll time 1 ####
++//#### Untoll time 1 ####
+ LD_DY 4*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -821,7 +821,7 @@ VPERMILP_DY $0x05, yvec2, yvec3;
+ MUL_DY yvec0, yvec5, yvec7;
+ ADD_DY yvec9, yvec7, yvec9;
+
+-#### Untoll time 2 ####
++//#### Untoll time 2 ####
+ LD_DY 8*SIZE(ptrba), yvec0;
+ MUL_DY yvec1, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -837,7 +837,7 @@ VPERMILP_DY $0x05, yvec2, yvec3;
+ MUL_DY yvec1, yvec5, yvec7;
+ ADD_DY yvec9, yvec7, yvec9;
+
+-#### Untoll time 3 ####
++//#### Untoll time 3 ####
+ LD_DY 12*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -855,7 +855,7 @@ ADDQ $16*SIZE, ptrbb;
+ MUL_DY yvec0, yvec5, yvec7;
+ ADD_DY yvec9, yvec7, yvec9;
+
+-#### Untoll time 4 ####
++//#### Untoll time 4 ####
+ LD_DY 0*SIZE(ptrba), yvec0;
+ MUL_DY yvec1, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -883,7 +883,7 @@ TEST $2, %rax;
+ JLE .L7_loopE;
+ ALIGN_5
+ .L7_bodyB:;
+-#### Untoll time 1 ####
++//#### Untoll time 1 ####
+ LD_DY 4*SIZE(ptrba), yvec1;
+ MUL_DY yvec0, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -901,7 +901,7 @@ ADDQ $8*SIZE, ptrbb;
+ MUL_DY yvec0, yvec5, yvec7;
+ ADD_DY yvec9, yvec7, yvec9;
+
+-#### Untoll time 2 ####
++//#### Untoll time 2 ####
+ LD_DY 0*SIZE(ptrba), yvec0;
+ MUL_DY yvec1, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+@@ -927,7 +927,7 @@ TEST $1, %rax;
+ JLE .L8_loopE;
+ ALIGN_5
+ .L8_bodyB:;
+-#### Untoll time 1 ####
++//#### Untoll time 1 ####
+ MUL_DY yvec0, yvec2, yvec6;
+ ADD_DY yvec15, yvec6, yvec15;
+ SHUF_DY $0x03, yvec2, yvec2, yvec4;
+@@ -943,27 +943,27 @@ MUL_DY yvec0, yvec5, yvec7;
+ ADD_DY yvec9, yvec7, yvec9;
+
+ .L8_loopE:;
+-#### Load Alpha ####
++//#### Load Alpha ####
+ BROAD_DY MEMALPHA, yvec7;
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ MUL_DY yvec7,yvec15,yvec15;
+ MUL_DY yvec7,yvec13,yvec13;
+ MUL_DY yvec7,yvec11,yvec11;
+ MUL_DY yvec7,yvec9,yvec9;
+-#### Reverse the Results ####
++//#### Reverse the Results ####
+ MOV_DY yvec15, yvec7;
+ REVS_DY $0x0a,yvec13,yvec15,yvec15;
+ REVS_DY $0x0a,yvec7,yvec13,yvec13;
+ MOV_DY yvec11,yvec7;
+ REVS_DY $0x0a,yvec9,yvec11,yvec11;
+ REVS_DY $0x0a,yvec7,yvec9,yvec9;
+-#### Testing alignment ####
++//#### Testing alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L8_loopEx; # Unalign part write back
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1,yvec15,xvec7;
+ EXTRA_DY $1,yvec13,xvec5;
+ EXTRA_DY $1,yvec11,xvec3;
+@@ -1076,7 +1076,7 @@ LEAQ (, %rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 2), ptrba;
+ LEAQ (ptrbb, %rax, 4), ptrbb
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ LD_DX 0*SIZE(ptrbb), xvec2;
+ XOR_DY yvec15, yvec15, yvec15;
+ LD_DX 2*SIZE(ptrbb), xvec3;
+@@ -1106,7 +1106,7 @@ ALIGN_5;
+ .L10_bodyB:;
+ # Computing kernel
+
+-##### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 4*SIZE(ptrbb), xvec6;
+ SHUF_DX $0x4e, xvec3, xvec5;
+ MUL_DX xvec0, xvec2, xvec2;
+@@ -1123,7 +1123,7 @@ SHUF_DX $0x4e, xvec6, xvec4;
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec9, xvec9;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 8*SIZE(ptrbb), xvec2;
+ SHUF_DX $0x4e, xvec7, xvec5;
+ MUL_DX xvec1, xvec6, xvec6;
+@@ -1140,7 +1140,7 @@ SHUF_DX $0x4e, xvec2, xvec4;
+ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec9, xvec9;
+
+-##### Unroll time 3 ####
++//#### Unroll time 3 ####
+ LD_DX 12*SIZE(ptrbb), xvec6;
+ SHUF_DX $0x4e, xvec3, xvec5;
+ MUL_DX xvec0, xvec2, xvec2;
+@@ -1159,7 +1159,7 @@ ADDQ $8*SIZE, ptrba;
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec9, xvec9;
+
+-#### Unroll time 4 ####
++//#### Unroll time 4 ####
+ LD_DX 0*SIZE(ptrbb), xvec2;
+ SHUF_DX $0x4e, xvec7, xvec5;
+ MUL_DX xvec1, xvec6, xvec6;
+@@ -1188,7 +1188,7 @@ TEST $2, %rax;
+ JLE .L11_loopE;
+ ALIGN_5
+ .L11_bodyB:;
+-##### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 4*SIZE(ptrbb), xvec6;
+ SHUF_DX $0x4e, xvec3, xvec5;
+ MUL_DX xvec0, xvec2, xvec2;
+@@ -1208,7 +1208,7 @@ ADDQ $4*SIZE, ptrba;
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec9, xvec9;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 0*SIZE(ptrbb), xvec2;
+ SHUF_DX $0x4e, xvec7, xvec5;
+ MUL_DX xvec1, xvec6, xvec6;
+@@ -1251,27 +1251,27 @@ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec9, xvec9;
+
+ .L12_loopE:;
+-#### Load Alpha ####
++//#### Load Alpha ####
+ BROAD_DX MEMALPHA, xvec7;
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ MUL_DX xvec7, xvec15, xvec15;
+ MUL_DX xvec7, xvec13, xvec13;
+ MUL_DX xvec7, xvec11, xvec11;
+ MUL_DX xvec7, xvec9, xvec9;
+-#### Reverse the Results ####
++//#### Reverse the Results ####
+ MOV_DX xvec15, xvec6;
+ REVS_DX xvec13, xvec15, xvec15;
+ REVS_DX xvec6, xvec13, xvec13;
+ MOV_DX xvec11, xvec6;
+ REVS_DX xvec9, xvec11, xvec11;
+ REVS_DX xvec6, xvec9, xvec9;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L12_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ #ifndef TRMMKERNEL
+ ADD_DX 0*SIZE(C0), xvec13, xvec13;
+ ADD_DX 0*SIZE(C0, ldc, 1), xvec15, xvec15;
+@@ -1345,7 +1345,7 @@ LEAQ (,%rax, SIZE), %rax;
+ ADDQ %rax, ptrba;
+ LEAQ (ptrbb, %rax, 4), ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ #ifndef TRMMKERNEL
+ MOVQ bk, k;
+@@ -1429,11 +1429,11 @@ ADDQ $1*SIZE, ptrba;
+ ADDQ $4*SIZE, ptrbb;
+
+ .L16_loopE:
+-#### Load Alpha ####
++//#### Load Alpha ####
+ BROAD_DY MEMALPHA, yvec7;
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ MUL_DY yvec15, yvec7, yvec15;
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1, yvec15, xvec7;
+ #ifndef TRMMKERNEL
+ LDL_DX 0*SIZE(C0), xvec0, xvec0;
+@@ -1497,7 +1497,7 @@ LEAQ (, %rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 8), ptrba;
+ LEAQ (ptrbb, %rax, 2), ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ XOR_DY yvec14, yvec14, yvec14;
+ XOR_DY yvec13, yvec13, yvec13;
+@@ -1526,7 +1526,7 @@ JLE .L211_loopE;
+ ALIGN_5;
+ .L211_bodyB:
+ # Computing kernel
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1563,7 +1563,7 @@ ADD_DX xvec6, xvec9, xvec9;
+ MUL_DX xvec3, xvec7, xvec7;
+ ADD_DX xvec7, xvec8, xvec8;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 8*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1600,7 +1600,7 @@ ADD_DX xvec6, xvec9, xvec9;
+ MUL_DX xvec3, xvec7, xvec7;
+ ADD_DX xvec7, xvec8, xvec8;
+
+-#### Unroll time 3 ####
++//#### Unroll time 3 ####
+ LD_DX 16*SIZE(ptrba), xvec0;
+ LD_DX 4*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1637,7 +1637,7 @@ ADD_DX xvec6, xvec9, xvec9;
+ MUL_DX xvec3, xvec7, xvec7;
+ ADD_DX xvec7, xvec8, xvec8;
+
+-#### Unroll time 4 ####
++//#### Unroll time 4 ####
+ LD_DX 24*SIZE(ptrba), xvec0;
+ LD_DX 6*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1689,7 +1689,7 @@ JLE .L212_loopE;
+ ALIGN_5;
+ .L212_bodyB:
+ # Computing kernel
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1726,7 +1726,7 @@ ADD_DX xvec6, xvec9, xvec9;
+ MUL_DX xvec3, xvec7, xvec7;
+ ADD_DX xvec7, xvec8, xvec8;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 8*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1775,7 +1775,7 @@ TEST $1, %rax;
+ JLE .L213_loopE;
+ ALIGN_5
+ .L213_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1815,7 +1815,7 @@ MUL_DX xvec3, xvec7, xvec7;
+ ADD_DX xvec7, xvec8, xvec8;
+
+ .L213_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DX MEMALPHA, xvec7;
+ MUL_DX xvec7, xvec15, xvec15;
+ MUL_DX xvec7, xvec14, xvec14;
+@@ -1825,7 +1825,7 @@ MUL_DX xvec7, xvec11, xvec11;
+ MUL_DX xvec7, xvec10, xvec10;
+ MUL_DX xvec7, xvec9, xvec9;
+ MUL_DX xvec7, xvec8, xvec8;
+-#### Reverse #####
++//#### Reverse ####
+ MOV_DX xvec15, xvec6;
+ REVS_DX xvec11, xvec15, xvec15;
+ REVS_DX xvec6, xvec11, xvec11;
+@@ -1838,13 +1838,13 @@ REVS_DX xvec6, xvec9, xvec9;
+ MOV_DX xvec12, xvec6;
+ REVS_DX xvec8, xvec12, xvec12;
+ REVS_DX xvec6, xvec8, xvec8;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L213_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ #ifndef TRMMKERNEL
+ ADD_DX 0*SIZE(C0), xvec11, xvec11;
+ ADD_DX 2*SIZE(C0), xvec10, xvec10;
+@@ -1952,7 +1952,7 @@ LEAQ (,%rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 4), ptrba;
+ LEAQ (ptrbb, %rax, 2), ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ XOR_DY yvec14, yvec14, yvec14;
+ XOR_DY yvec11, yvec11, yvec11;
+@@ -1977,7 +1977,7 @@ JLE .L221_loopE;
+ ALIGN_5
+ .L221_bodyB:;
+ # Computing kernel
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -1996,7 +1996,7 @@ ADD_DX xvec4, xvec11, xvec11;
+ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec10, xvec10;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 4*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2015,7 +2015,7 @@ ADD_DX xvec4, xvec11, xvec11;
+ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec10, xvec10;
+
+-#### Unroll time 3 ####
++//#### Unroll time 3 ####
+ LD_DX 8*SIZE(ptrba), xvec0;
+ LD_DX 4*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2034,7 +2034,7 @@ ADD_DX xvec4, xvec11, xvec11;
+ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec10, xvec10;
+
+-#### Unroll time 4 ####
++//#### Unroll time 4 ####
+ LD_DX 12*SIZE(ptrba), xvec0;
+ LD_DX 6*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2067,7 +2067,7 @@ TEST $2, %rax;
+ JLE .L222_loopE;
+ ALIGN_5
+ .L222_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2086,7 +2086,7 @@ ADD_DX xvec4, xvec11, xvec11;
+ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec10, xvec10;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 4*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2116,7 +2116,7 @@ TEST $1, %rax;
+ JLE .L223_loopE;
+ ALIGN_5
+ .L223_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ MOV_DX xvec4, xvec5;
+@@ -2138,26 +2138,26 @@ MUL_DX xvec1, xvec5, xvec5;
+ ADD_DX xvec5, xvec10, xvec10;
+
+ .L223_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DX MEMALPHA, xvec7;
+ MUL_DX xvec7, xvec15, xvec15;
+ MUL_DX xvec7, xvec14, xvec14;
+ MUL_DX xvec7, xvec11, xvec11;
+ MUL_DX xvec7, xvec10, xvec10;
+-#### Reverse #####
++//#### Reverse ####
+ MOV_DX xvec15, xvec6;
+ REVS_DX xvec11, xvec15, xvec15;
+ REVS_DX xvec6, xvec11, xvec11;
+ MOV_DX xvec14, xvec6;
+ REVS_DX xvec10, xvec14, xvec14;
+ REVS_DX xvec6, xvec10, xvec10;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L223_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ #ifndef TRMMKERNEL
+ ADD_DX 0*SIZE(C0), xvec11, xvec11;
+ ADD_DX 2*SIZE(C0), xvec10, xvec10;
+@@ -2220,7 +2220,7 @@ ADDQ $4, kk
+ ADDQ $4*SIZE, C0;
+ ADDQ $4*SIZE, C1;
+ .L22_loopE:;
+-TEST $2, bm; # Rm = 2
++TEST $2, bm; // Rm = 2
+ JLE .L23_loopE;
+ ALIGN_5;
+ .L23_bodyB:
+@@ -2255,7 +2255,7 @@ JLE .L231_loopE;
+ ALIGN_5
+ .L231_bodyB:
+ # Computing kernel
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2264,7 +2264,7 @@ ADD_DX xvec4, xvec15, xvec15;
+
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec11, xvec11;
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 2*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2273,7 +2273,7 @@ ADD_DX xvec4, xvec15, xvec15;
+
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec11, xvec11;
+-#### Unroll time 3 ####
++//#### Unroll time 3 ####
+ LD_DX 4*SIZE(ptrba), xvec0;
+ LD_DX 4*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2282,7 +2282,7 @@ ADD_DX xvec4, xvec15, xvec15;
+
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec11, xvec11;
+-#### Unroll time 4 ####
++//#### Unroll time 4 ####
+ LD_DX 6*SIZE(ptrba), xvec0;
+ LD_DX 6*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2305,7 +2305,7 @@ TEST $2, %rax;
+ JLE .L232_loopE;
+ ALIGN_5
+ .L232_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2314,7 +2314,7 @@ ADD_DX xvec4, xvec15, xvec15;
+
+ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec11, xvec11;
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DX 2*SIZE(ptrba), xvec0;
+ LD_DX 2*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2334,7 +2334,7 @@ TEST $1, %rax;
+ JLE .L233_loopE;
+ ALIGN_5
+ .L233_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DX 0*SIZE(ptrba), xvec0;
+ LD_DX 0*SIZE(ptrbb), xvec4;
+ SHUF_DX $0x4e, xvec4, xvec5;
+@@ -2345,21 +2345,21 @@ MUL_DX xvec0, xvec5, xvec5;
+ ADD_DX xvec5, xvec11, xvec11;
+ ADDQ $2*SIZE, ptrbb;
+ .L233_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DX MEMALPHA, xvec7;
+ MUL_DX xvec7, xvec15, xvec15;
+ MUL_DX xvec7, xvec11, xvec11;
+-#### Reverse #####
++//#### Reverse ####
+ MOV_DX xvec15, xvec6;
+ REVS_DX xvec11, xvec15, xvec15;
+ REVS_DX xvec6, xvec11, xvec11;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L233_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ #ifndef TRMMKERNEL
+ ADD_DX 0*SIZE(C0), xvec11, xvec11;
+ ADD_DX 0*SIZE(C1), xvec15, xvec15;
+@@ -2408,7 +2408,7 @@ ADDQ $2, kk;
+ ADDQ $2*SIZE, C0;
+ ADDQ $2*SIZE, C1;
+ .L23_loopE:
+-TEST $1, bm; # Rm = 1
++TEST $1, bm; // Rm = 1
+ JLE .L24_loopE;
+ ALIGN_5;
+ .L24_bodyB:
+@@ -2534,7 +2534,7 @@ SALQ $4, k;
+ ADDQ k, bb;
+ LEAQ (C, ldc, 2), C;
+ .L20_loopE:;
+-TEST $1, bn; # Rn = 1
++TEST $1, bn; // Rn = 1
+ JLE .L30_loopE;
+ ALIGN_5
+ .L30_bodyB:
+@@ -2558,7 +2558,7 @@ LEAQ (, %rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 8), ptrba;
+ ADDQ %rax, ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ XOR_DY yvec14, yvec14, yvec14;
+ #ifndef TRMMKERNEL
+@@ -2580,7 +2580,7 @@ SARQ $2, k;
+ JLE .L311_loopE;
+ ALIGN_5
+ .L311_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DY 0*SIZE(ptrba), yvec0;
+ LD_DY 4*SIZE(ptrba), yvec1;
+ BROAD_DY 0*SIZE(ptrbb), yvec2;
+@@ -2589,7 +2589,7 @@ ADD_DY yvec0, yvec15, yvec15;
+ MUL_DY yvec2, yvec1, yvec1;
+ ADD_DY yvec1, yvec14, yvec14;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DY 8*SIZE(ptrba), yvec3;
+ LD_DY 12*SIZE(ptrba), yvec4;
+ BROAD_DY 1*SIZE(ptrbb), yvec5;
+@@ -2598,7 +2598,7 @@ ADD_DY yvec3, yvec15, yvec15;
+ MUL_DY yvec5, yvec4, yvec4
+ ADD_DY yvec4, yvec14, yvec14;
+
+-#### Unroll time 3 ####
++//#### Unroll time 3 ####
+ LD_DY 16*SIZE(ptrba), yvec0;
+ LD_DY 20*SIZE(ptrba), yvec1;
+ BROAD_DY 2*SIZE(ptrbb), yvec2;
+@@ -2607,7 +2607,7 @@ ADD_DY yvec0, yvec15, yvec15;
+ MUL_DY yvec2, yvec1, yvec1;
+ ADD_DY yvec1, yvec14, yvec14;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DY 24*SIZE(ptrba), yvec3;
+ LD_DY 28*SIZE(ptrba), yvec4;
+ BROAD_DY 3*SIZE(ptrbb), yvec5;
+@@ -2630,7 +2630,7 @@ TEST $2, %rax;
+ JLE .L312_loopE;
+ ALIGN_5
+ .L312_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DY 0*SIZE(ptrba), yvec0;
+ LD_DY 4*SIZE(ptrba), yvec1;
+ BROAD_DY 0*SIZE(ptrbb), yvec2;
+@@ -2639,7 +2639,7 @@ ADD_DY yvec0, yvec15, yvec15;
+ MUL_DY yvec2, yvec1, yvec1;
+ ADD_DY yvec1, yvec14, yvec14;
+
+-#### Unroll time 2 ####
++//#### Unroll time 2 ####
+ LD_DY 8*SIZE(ptrba), yvec3;
+ LD_DY 12*SIZE(ptrba), yvec4;
+ BROAD_DY 1*SIZE(ptrbb), yvec5;
+@@ -2660,7 +2660,7 @@ TEST $1, %rax;
+ JLE .L313_loopE;
+ ALIGN_5
+ .L313_bodyB:
+-#### Unroll time 1 ####
++//#### Unroll time 1 ####
+ LD_DY 0*SIZE(ptrba), yvec0;
+ LD_DY 4*SIZE(ptrba), yvec1;
+ BROAD_DY 0*SIZE(ptrbb), yvec2;
+@@ -2672,17 +2672,17 @@ ADD_DY yvec1, yvec14, yvec14;
+ ADDQ $1*SIZE, ptrbb;
+
+ .L313_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DY MEMALPHA, yvec7;
+ MUL_DY yvec7, yvec15, yvec15;
+ MUL_DY yvec7, yvec14, yvec14;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L313_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1, yvec15, xvec13;
+ EXTRA_DY $1, yvec14, xvec12;
+ #ifndef TRMMKERNEL
+@@ -2762,7 +2762,7 @@ LEAQ (,%rax, SIZE), %rax;
+ LEAQ (ptrba, %rax, 4), ptrba;
+ ADDQ %rax, ptrbb;
+ #endif
+-#### Initial Results Register ####
++//#### Initial Results Register ####
+ XOR_DY yvec15, yvec15, yvec15;
+ #ifndef TRMMKERNEL
+ MOVQ bk, k;
+@@ -2847,16 +2847,16 @@ ADDQ $4*SIZE, ptrba;
+ ADDQ $1*SIZE, ptrbb;
+
+ .L323_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DY MEMALPHA, yvec7;
+ MUL_DY yvec7, yvec15, yvec15;
+-#### Testing Alignment ####
++//#### Testing Alignment ####
+ MOVQ C0, %rax;
+ OR ldc, %rax;
+ TEST $15, %rax;
+ JNE .L323_loopEx;
+ ALIGN_5
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1, yvec15, xvec14;
+ #ifndef TRMMKERNEL
+ ADD_DX 0*SIZE(C0), xvec15, xvec15;
+@@ -2878,7 +2878,7 @@ ADDQ $4*SIZE, C0;
+ JMP .L32_loopE;
+ ALIGN_5
+ .L323_loopEx:
+-#### Writing Back ####
++//#### Writing Back ####
+ EXTRA_DY $1, yvec15, xvec14;
+ #ifndef TRMMKERNEL
+ LDL_DX 0*SIZE(C0), xvec13, xvec13;
+@@ -2917,7 +2917,7 @@ LEAQ (, %rax, SIZE), %rax
+ LEAQ (ptrba, %rax, 2), ptrba
+ ADDQ %rax, ptrbb;
+ #endif
+-#### Initial Result ####
++//#### Initial Result ####
+ XOR_DY yvec15, yvec15, yvec15;
+ #ifndef TRMMKERNEL
+ MOVQ bk, k;
+@@ -3000,7 +3000,7 @@ ADD_DX xvec2, xvec15, xvec15;
+ ADDQ $2*SIZE, ptrba;
+ ADDQ $1*SIZE, ptrbb;
+ .L333_loopE:
+-#### Multiply Alpha ####
++//#### Multiply Alpha ####
+ BROAD_DX MEMALPHA, xvec7;
+ MUL_DX xvec7, xvec15, xvec15;
+ #ifndef TRMMKERNEL
+@@ -3119,7 +3119,7 @@ addq $1*SIZE, ptrba;
+ addq $1*SIZE, ptrbb;
+
+ .L343_loopE:
+-#### Writing Back ####
++//#### Writing Back ####
+ vmovsd MEMALPHA, xvec7;
+ vmulsd xvec7, xvec15, xvec15;
+ #ifndef TRMMKERNEL
diff --git a/var/spack/repos/builtin/packages/openblas/openblas_icc_fortran.patch b/var/spack/repos/builtin/packages/openblas/openblas_icc_fortran.patch
new file mode 100644
index 0000000000..54b38a297e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/openblas_icc_fortran.patch
@@ -0,0 +1,12 @@
+diff -Naur a/f_check b/f_check
+--- a/f_check 2017-04-27 23:16:41.496684722 -0700
++++ b/f_check 2017-04-27 23:22:38.330563534 -0700
+@@ -322,7 +322,7 @@
+ }
+
+ if ($vendor eq "INTEL"){
+- $linker_a .= "-lgfortran"
++ $linker_a .= "-lifcore"
+ }
+
+ open(MAKEFILE, ">> $makefile") || die "Can't append $makefile";
diff --git a/var/spack/repos/builtin/packages/openblas/openblas_icc_openmp.patch b/var/spack/repos/builtin/packages/openblas/openblas_icc_openmp.patch
new file mode 100644
index 0000000000..f4f436c38e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/openblas_icc_openmp.patch
@@ -0,0 +1,27 @@
+diff -Naur a/Makefile.system b/Makefile.system
+--- a/Makefile.system 2017-04-27 23:11:09.226514927 -0700
++++ b/Makefile.system 2017-04-28 00:00:27.020649577 -0700
+@@ -415,7 +415,7 @@
+ endif
+
+ ifeq ($(C_COMPILER), INTEL)
+-CCOMMON_OPT += -openmp
++CCOMMON_OPT += -qopenmp
+ endif
+
+ ifeq ($(C_COMPILER), PGI)
+@@ -639,13 +639,14 @@
+
+ ifeq ($(F_COMPILER), INTEL)
+ CCOMMON_OPT += -DF_INTERFACE_INTEL
++EXTRALIB += -lifcore
+ ifdef INTERFACE64
+ ifneq ($(INTERFACE64), 0)
+ FCOMMON_OPT += -i8
+ endif
+ endif
+ ifeq ($(USE_OPENMP), 1)
+-FCOMMON_OPT += -openmp
++FCOMMON_OPT += -qopenmp
+ endif
+ endif
diff --git a/var/spack/repos/builtin/packages/openblas/package.py b/var/spack/repos/builtin/packages/openblas/package.py
index d5a70f077b..f85d0e2a02 100644
--- a/var/spack/repos/builtin/packages/openblas/package.py
+++ b/var/spack/repos/builtin/packages/openblas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,53 +22,70 @@
# 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 spack.package_test import *
import os
+from spack import *
+from spack.package_test import compare_output_file, compile_c_and_execute
+import spack.architecture
+
class Openblas(MakefilePackage):
"""OpenBLAS: An optimized BLAS library"""
homepage = 'http://www.openblas.net'
- url = 'http://github.com/xianyi/OpenBLAS/archive/v0.2.15.tar.gz'
+ url = 'http://github.com/xianyi/OpenBLAS/archive/v0.2.19.tar.gz'
+ version('0.2.20', '48637eb29f5b492b91459175dcc574b1')
version('0.2.19', '28c998054fd377279741c6f0b9ea7941')
version('0.2.18', '805e7f660877d588ea7e3792cda2ee65')
version('0.2.17', '664a12807f2a2a7cda4781e3ab2ae0e1')
version('0.2.16', 'fef46ab92463bdbb1479dcec594ef6dc')
version('0.2.15', 'b1190f3d3471685f17cfd1ec1d252ac9')
+ version('develop', git='https://github.com/xianyi/OpenBLAS.git', branch='develop')
variant(
'shared',
default=True,
description='Build shared libraries as well as static libs.'
)
- variant('openmp', default=False, description="Enable OpenMP support.")
+ variant('ilp64', default=False, description='64 bit integers')
variant('pic', default=True, description='Build position independent code')
+ variant('cpu_target', default='',
+ description='Set CPU target architecture (leave empty for '
+ 'autodetection; GENERIC, SSE_GENERIC, NEHALEM, ...)')
+
+ variant(
+ 'threads', default='none',
+ description='Multithreading support',
+ values=('pthreads', 'openmp', 'none'),
+ multi=False
+ )
+
# virtual dependency
provides('blas')
provides('lapack')
- patch('make.patch')
+ patch('make.patch', when='@0.2.16:')
# This patch is in a pull request to OpenBLAS that has not been handled
# https://github.com/xianyi/OpenBLAS/pull/915
- patch('openblas_icc.patch', when='%intel')
+ # UPD: the patch has been merged starting version 0.2.20
+ patch('openblas_icc.patch', when='@:0.2.19%intel')
+ patch('openblas_icc_openmp.patch', when='%intel@16.0:')
+ patch('openblas_icc_fortran.patch', when='%intel@16.0:')
- parallel = False
+ # Fixes compilation error on POWER8 with GCC 7
+ # https://github.com/xianyi/OpenBLAS/pull/1098
+ patch('power8.patch', when='@0.2.18:0.2.19 %gcc@7.1.0: target=ppc64')
- @property
- def blas_libs(self):
- shared = True if '+shared' in self.spec else False
- return find_libraries(
- ['libopenblas'], root=self.prefix, shared=shared, recurse=True
- )
+ # Change file comments to work around clang 3.9 assembler bug
+ # https://github.com/xianyi/OpenBLAS/pull/982
+ patch('openblas0.2.19.diff', when='@0.2.19')
- @property
- def lapack_libs(self):
- return self.blas_libs
+ parallel = False
+
+ conflicts('%intel@16', when='@0.2.15:0.2.19')
- @MakefilePackage.precondition('edit')
+ @run_before('edit')
def check_compilers(self):
# As of 06/2016 there is no mechanism to specify that packages which
# depends on Blas/Lapack need C or/and Fortran symbols. For now
@@ -78,12 +95,16 @@ class Openblas(MakefilePackage):
'OpenBLAS requires both C and Fortran compilers!'
)
# Add support for OpenMP
- if '+openmp' in self.spec and self.spec.satisfies('%clang'):
- # Openblas (as of 0.2.18) hardcoded that OpenMP cannot
- # be used with any (!) compiler named clang, bummer.
- raise InstallError(
- 'OpenBLAS does not support OpenMP with clang!'
- )
+ if (self.spec.satisfies('threads=openmp') and
+ self.spec.satisfies('%clang')):
+ if str(self.spec.compiler.version).endswith('-apple'):
+ raise InstallError("Apple's clang does not support OpenMP")
+ if '@:0.2.19' in self.spec:
+ # Openblas (as of 0.2.19) hardcoded that OpenMP cannot
+ # be used with any (!) compiler named clang, bummer.
+ raise InstallError(
+ 'OpenBLAS @:0.2.19 does not support OpenMP with clang!'
+ )
@property
def make_defs(self):
@@ -98,6 +119,16 @@ class Openblas(MakefilePackage):
'FC={0}'.format(spack_f77),
'MAKE_NO_J=1'
]
+ if self.spec.variants['cpu_target'].value:
+ make_defs += [
+ 'TARGET={0}'.format(self.spec.variants['cpu_target'].value)
+ ]
+ # invoke make with the correct TARGET for aarch64
+ elif 'aarch64' in spack.architecture.sys_type():
+ make_defs += [
+ 'TARGET=PILEDRIVER',
+ 'TARGET=ARMV8'
+ ]
if self.spec.satisfies('%gcc@:4.8.4'):
make_defs += ['NO_AVX2=1']
if '~shared' in self.spec:
@@ -110,9 +141,18 @@ class Openblas(MakefilePackage):
# fix missing _dggsvd_ and _sggsvd_
if self.spec.satisfies('@0.2.16'):
make_defs += ['BUILD_LAPACK_DEPRECATED=1']
- # Add support for OpenMP
- if '+openmp' in self.spec:
- make_defs += ['USE_OPENMP=1']
+
+ # Add support for multithreading
+ if self.spec.satisfies('threads=openmp'):
+ make_defs += ['USE_OPENMP=1', 'USE_THREAD=1']
+ elif self.spec.satisfies('threads=pthreads'):
+ make_defs += ['USE_OPENMP=0', 'USE_THREAD=1']
+ else:
+ make_defs += ['USE_OPENMP=0', 'USE_THREAD=0']
+
+ # 64bit ints
+ if '+ilp64' in self.spec:
+ make_defs += ['INTERFACE64=1']
return make_defs
@@ -126,7 +166,8 @@ class Openblas(MakefilePackage):
return self.make_defs + targets
- @MakefilePackage.sanity_check('build')
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
def check_build(self):
make('tests', *self.make_defs)
@@ -138,7 +179,8 @@ class Openblas(MakefilePackage):
]
return make_args + self.make_defs
- @MakefilePackage.sanity_check('install')
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
def check_install(self):
spec = self.spec
# Openblas may pass its own test but still fail to compile Lapack
@@ -149,13 +191,16 @@ class Openblas(MakefilePackage):
blessed_file = join_path(os.path.dirname(self.module.__file__),
'test_cblas_dgemm.output')
- include_flags = ["-I%s" % join_path(spec.prefix, "include")]
- link_flags = self.lapack_libs.ld_flags.split()
+ include_flags = spec['openblas'].headers.cpp_flags
+ link_flags = spec['openblas'].libs.ld_flags
if self.compiler.name == 'intel':
- link_flags.extend(["-lifcore"])
- link_flags.extend(["-lpthread"])
- if '+openmp' in spec:
- link_flags.extend([self.compiler.openmp_flag])
-
- output = compile_c_and_execute(source_file, include_flags, link_flags)
+ link_flags += ' -lifcore'
+ if self.spec.satisfies('threads=pthreads'):
+ link_flags += ' -lpthread'
+ if spec.satisfies('threads=openmp'):
+ link_flags += ' -lpthread ' + self.compiler.openmp_flag
+
+ output = compile_c_and_execute(
+ source_file, [include_flags], link_flags.split()
+ )
compare_output_file(output, blessed_file)
diff --git a/var/spack/repos/builtin/packages/openblas/power8.patch b/var/spack/repos/builtin/packages/openblas/power8.patch
new file mode 100644
index 0000000000..b89c044c1b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openblas/power8.patch
@@ -0,0 +1,7809 @@
+diff --git a/kernel/power/casum.c b/kernel/power/casum.c
+index aeed0ca78..d1108581d 100644
+--- a/kernel/power/casum.c
++++ b/kernel/power/casum.c
+@@ -53,7 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_16
+
+-static void casum_kernel_16(BLASLONG n, FLOAT *x1, FLOAT *svec)
++static FLOAT casum_kernel_16(BLASLONG n, FLOAT *x1)
+ {
+
+ BLASLONG i=0;
+@@ -92,11 +92,7 @@ static void casum_kernel_16(BLASLONG n, FLOAT *x1, FLOAT *svec)
+
+ }
+
+- svec[0] = sum0+sum1+sum2+sum3;
+- svec[1] = 0.0;
+- svec[2] = 0.0;
+- svec[3] = 0.0;
+-
++ return sum0+sum1+sum2+sum3;
+ }
+
+ #endif
+@@ -106,7 +102,6 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ BLASLONG i=0;
+ BLASLONG ip=0;
+ FLOAT sumf = 0.0;
+- FLOAT svec[4] __attribute__ ((aligned (16)));;
+ BLASLONG n1;
+ BLASLONG inc_x2;
+
+@@ -119,8 +114,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ if ( n1 > 0 )
+ {
+
+- casum_kernel_16(n1, x, svec);
+- sumf = svec[0] + svec[1]+svec[2]+svec[3];
++ sumf = casum_kernel_16(n1, x);
+ i=n1;
+ ip = 2 * n1;
+ }
+diff --git a/kernel/power/casum_microk_power8.c b/kernel/power/casum_microk_power8.c
+index cb50234ce..38a114326 100644
+--- a/kernel/power/casum_microk_power8.c
++++ b/kernel/power/casum_microk_power8.c
+@@ -34,144 +34,145 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_16 1
+-static void casum_kernel_16( BLASLONG n, FLOAT *x, FLOAT *svec) __attribute__ ((noinline));
+
+-static void casum_kernel_16( BLASLONG n, FLOAT *x, FLOAT *svec)
++static float casum_kernel_16 (long n, float *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xvabssp 48, 40 \n\t"
+- "xvabssp 49, 41 \n\t"
+- "xvabssp 50, 42 \n\t"
+- "xvabssp 51, 43 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+-
+- "xvabssp 52, 44 \n\t"
+- "xvabssp 53, 45 \n\t"
+-
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+-
+- "xvabssp 54, 46 \n\t"
+- "xvabssp 55, 47 \n\t"
+-
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+-
+- "xvaddsp 32, 32, 48 \n\t"
+- "xvaddsp 33, 33, 49 \n\t"
+-
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "xvaddsp 34, 34, 50 \n\t"
+- "xvaddsp 35, 35, 51 \n\t"
+- "addi %2, %2, 128 \n\t"
+- "xvaddsp 36, 36, 52 \n\t"
+- "xvaddsp 37, 37, 53 \n\t"
+- "addic. %0 , %0 , -16 \n\t"
+- "xvaddsp 38, 38, 54 \n\t"
+- "xvaddsp 39, 39, 55 \n\t"
+-
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+-
+- "xvabssp 48, 40 \n\t"
+- "xvabssp 49, 41 \n\t"
+- "xvabssp 50, 42 \n\t"
+- "xvabssp 51, 43 \n\t"
+- "xvabssp 52, 44 \n\t"
+- "xvabssp 53, 45 \n\t"
+- "xvabssp 54, 46 \n\t"
+- "xvabssp 55, 47 \n\t"
+-
+- "xvaddsp 32, 32, 48 \n\t"
+- "xvaddsp 33, 33, 49 \n\t"
+- "xvaddsp 34, 34, 50 \n\t"
+- "xvaddsp 35, 35, 51 \n\t"
+- "xvaddsp 36, 36, 52 \n\t"
+- "xvaddsp 37, 37, 53 \n\t"
+- "xvaddsp 38, 38, 54 \n\t"
+- "xvaddsp 39, 39, 55 \n\t"
+-
+- "xvaddsp 32, 32, 33 \n\t"
+- "xvaddsp 34, 34, 35 \n\t"
+- "xvaddsp 36, 36, 37 \n\t"
+- "xvaddsp 38, 38, 39 \n\t"
+-
+- "xvaddsp 32, 32, 34 \n\t"
+- "xvaddsp 36, 36, 38 \n\t"
+-
+- "xvaddsp 32, 32, 36 \n\t"
+-
+-
+- "stxvw4x 32, 0, %3 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (svec), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2", "memory"
+- );
+-
+-}
+-
+-
++ float sum;
++ __vector float t0;
++ __vector float t1;
++ __vector float t2;
++ __vector float t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %8, %2 \n\t"
++ "lxvw4x 42, %9, %2 \n\t"
++ "lxvw4x 43, %10, %2 \n\t"
++ "lxvw4x 44, %11, %2 \n\t"
++ "lxvw4x 45, %12, %2 \n\t"
++ "lxvw4x 46, %13, %2 \n\t"
++ "lxvw4x 47, %14, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvabssp 48, 40 \n\t"
++ "xvabssp 49, 41 \n\t"
++ "xvabssp 50, 42 \n\t"
++ "xvabssp 51, 43 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %8, %2 \n\t"
++
++ "xvabssp %x3, 44 \n\t"
++ "xvabssp %x4, 45 \n\t"
++
++ "lxvw4x 42, %9, %2 \n\t"
++ "lxvw4x 43, %10, %2 \n\t"
++
++ "xvabssp %x5, 46 \n\t"
++ "xvabssp %x6, 47 \n\t"
++
++ "lxvw4x 44, %11, %2 \n\t"
++ "lxvw4x 45, %12, %2 \n\t"
++
++ "xvaddsp 32, 32, 48 \n\t"
++ "xvaddsp 33, 33, 49 \n\t"
++
++ "lxvw4x 46, %13, %2 \n\t"
++ "lxvw4x 47, %14, %2 \n\t"
++
++ "xvaddsp 34, 34, 50 \n\t"
++ "xvaddsp 35, 35, 51 \n\t"
++ "addi %2, %2, 128 \n\t"
++ "xvaddsp 36, 36, %x3 \n\t"
++ "xvaddsp 37, 37, %x4 \n\t"
++ "addic. %1, %1, -16 \n\t"
++ "xvaddsp 38, 38, %x5 \n\t"
++ "xvaddsp 39, 39, %x6 \n\t"
++
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvabssp 48, 40 \n\t"
++ "xvabssp 49, 41 \n\t"
++ "xvabssp 50, 42 \n\t"
++ "xvabssp 51, 43 \n\t"
++ "xvabssp %x3, 44 \n\t"
++ "xvabssp %x4, 45 \n\t"
++ "xvabssp %x5, 46 \n\t"
++ "xvabssp %x6, 47 \n\t"
++
++ "xvaddsp 32, 32, 48 \n\t"
++ "xvaddsp 33, 33, 49 \n\t"
++ "xvaddsp 34, 34, 50 \n\t"
++ "xvaddsp 35, 35, 51 \n\t"
++ "xvaddsp 36, 36, %x3 \n\t"
++ "xvaddsp 37, 37, %x4 \n\t"
++ "xvaddsp 38, 38, %x5 \n\t"
++ "xvaddsp 39, 39, %x6 \n\t"
++
++ "xvaddsp 32, 32, 33 \n\t"
++ "xvaddsp 34, 34, 35 \n\t"
++ "xvaddsp 36, 36, 37 \n\t"
++ "xvaddsp 38, 38, 39 \n\t"
++
++ "xvaddsp 32, 32, 34 \n\t"
++ "xvaddsp 36, 36, 38 \n\t"
++
++ "xvaddsp 32, 32, 36 \n\t"
++
++ "xxsldwi 33, 32, 32, 2 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xxsldwi 33, 32, 32, 1 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xscvspdp %0, 32 \n"
++
++ "#n=%1 x=%3=%2 sum=%0 o16=%8 o32=%9 o48=%10 o64=%11 o80=%12 o96=%13 o112=%14\n"
++ "#t0=%x3 t1=%x4 t2=%x5 t3=%x6"
++ :
++ "=f" (sum), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0), // 3
++ "=wa" (t1), // 4
++ "=wa" (t2), // 5
++ "=wa" (t3) // 6
++ :
++ "m" (*x),
++ "b" (16), // 8
++ "b" (32), // 9
++ "b" (48), // 10
++ "b" (64), // 11
++ "b" (80), // 12
++ "b" (96), // 13
++ "b" (112) // 14
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return sum;
++}
+diff --git a/kernel/power/ccopy_microk_power8.c b/kernel/power/ccopy_microk_power8.c
+index 95b3559ba..b2b1bead1 100644
+--- a/kernel/power/ccopy_microk_power8.c
++++ b/kernel/power/ccopy_microk_power8.c
+@@ -35,140 +35,121 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void ccopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void ccopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void ccopy_kernel_32 (long n, float *x, float *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvw4x 50, 0, %2 \n\t"
+- "lxvw4x 51, %5, %2 \n\t"
+- "lxvw4x 52, %6, %2 \n\t"
+- "lxvw4x 53, %7, %2 \n\t"
+- "lxvw4x 54, %8, %2 \n\t"
+- "lxvw4x 55, %9, %2 \n\t"
+- "lxvw4x 56, %10, %2 \n\t"
+- "lxvw4x 57, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvw4x 40, 0, %1 \n\t"
+- "stxvw4x 41, %5, %1 \n\t"
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "stxvw4x 42, %6, %1 \n\t"
+- "stxvw4x 43, %7, %1 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "stxvw4x 44, %8, %1 \n\t"
+- "stxvw4x 45, %9, %1 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "stxvw4x 46, %10, %1 \n\t"
+- "stxvw4x 47, %11, %1 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "stxvw4x 50, 0, %1 \n\t"
+- "stxvw4x 51, %5, %1 \n\t"
+- "lxvw4x 50, 0, %2 \n\t"
+- "lxvw4x 51, %5, %2 \n\t"
+- "stxvw4x 52, %6, %1 \n\t"
+- "stxvw4x 53, %7, %1 \n\t"
+- "lxvw4x 52, %6, %2 \n\t"
+- "lxvw4x 53, %7, %2 \n\t"
+- "stxvw4x 54, %8, %1 \n\t"
+- "stxvw4x 55, %9, %1 \n\t"
+- "lxvw4x 54, %8, %2 \n\t"
+- "lxvw4x 55, %9, %2 \n\t"
+- "stxvw4x 56, %10, %1 \n\t"
+- "stxvw4x 57, %11, %1 \n\t"
+- "lxvw4x 56, %10, %2 \n\t"
+- "lxvw4x 57, %11, %2 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "stxvw4x 40, 0, %1 \n\t"
+- "stxvw4x 41, %5, %1 \n\t"
+- "stxvw4x 42, %6, %1 \n\t"
+- "stxvw4x 43, %7, %1 \n\t"
+- "stxvw4x 44, %8, %1 \n\t"
+- "stxvw4x 45, %9, %1 \n\t"
+- "stxvw4x 46, %10, %1 \n\t"
+- "stxvw4x 47, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvw4x 50, 0, %1 \n\t"
+- "stxvw4x 51, %5, %1 \n\t"
+- "stxvw4x 52, %6, %1 \n\t"
+- "stxvw4x 53, %7, %1 \n\t"
+- "stxvw4x 54, %8, %1 \n\t"
+- "stxvw4x 55, %9, %1 \n\t"
+- "stxvw4x 56, %10, %1 \n\t"
+- "stxvw4x 57, %11, %1 \n\t"
+-
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ "lxvw4x 32, 0, %2 \n\t"
++ "lxvw4x 33, %5, %2 \n\t"
++ "lxvw4x 34, %6, %2 \n\t"
++ "lxvw4x 35, %7, %2 \n\t"
++ "lxvw4x 36, %8, %2 \n\t"
++ "lxvw4x 37, %9, %2 \n\t"
++ "lxvw4x 38, %10, %2 \n\t"
++ "lxvw4x 39, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %5, %2 \n\t"
++ "lxvw4x 42, %6, %2 \n\t"
++ "lxvw4x 43, %7, %2 \n\t"
++ "lxvw4x 44, %8, %2 \n\t"
++ "lxvw4x 45, %9, %2 \n\t"
++ "lxvw4x 46, %10, %2 \n\t"
++ "lxvw4x 47, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvw4x 32, 0, %3 \n\t"
++ "stxvw4x 33, %5, %3 \n\t"
++ "lxvw4x 32, 0, %2 \n\t"
++ "lxvw4x 33, %5, %2 \n\t"
++ "stxvw4x 34, %6, %3 \n\t"
++ "stxvw4x 35, %7, %3 \n\t"
++ "lxvw4x 34, %6, %2 \n\t"
++ "lxvw4x 35, %7, %2 \n\t"
++ "stxvw4x 36, %8, %3 \n\t"
++ "stxvw4x 37, %9, %3 \n\t"
++ "lxvw4x 36, %8, %2 \n\t"
++ "lxvw4x 37, %9, %2 \n\t"
++ "stxvw4x 38, %10, %3 \n\t"
++ "stxvw4x 39, %11, %3 \n\t"
++ "lxvw4x 38, %10, %2 \n\t"
++ "lxvw4x 39, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "stxvw4x 40, 0, %3 \n\t"
++ "stxvw4x 41, %5, %3 \n\t"
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %5, %2 \n\t"
++ "stxvw4x 42, %6, %3 \n\t"
++ "stxvw4x 43, %7, %3 \n\t"
++ "lxvw4x 42, %6, %2 \n\t"
++ "lxvw4x 43, %7, %2 \n\t"
++ "stxvw4x 44, %8, %3 \n\t"
++ "stxvw4x 45, %9, %3 \n\t"
++ "lxvw4x 44, %8, %2 \n\t"
++ "lxvw4x 45, %9, %2 \n\t"
++ "stxvw4x 46, %10, %3 \n\t"
++ "stxvw4x 47, %11, %3 \n\t"
++ "lxvw4x 46, %10, %2 \n\t"
++ "lxvw4x 47, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "stxvw4x 32, 0, %3 \n\t"
++ "stxvw4x 33, %5, %3 \n\t"
++ "stxvw4x 34, %6, %3 \n\t"
++ "stxvw4x 35, %7, %3 \n\t"
++ "stxvw4x 36, %8, %3 \n\t"
++ "stxvw4x 37, %9, %3 \n\t"
++ "stxvw4x 38, %10, %3 \n\t"
++ "stxvw4x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvw4x 40, 0, %3 \n\t"
++ "stxvw4x 41, %5, %3 \n\t"
++ "stxvw4x 42, %6, %3 \n\t"
++ "stxvw4x 43, %7, %3 \n\t"
++ "stxvw4x 44, %8, %3 \n\t"
++ "stxvw4x 45, %9, %3 \n\t"
++ "stxvw4x 46, %10, %3 \n\t"
++ "stxvw4x 47, %11, %3 \n"
++
++ "#n=%1 x=%4=%2 y=%0=%3 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "=m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y) // 3
++ :
++ "m" (*x),
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/cswap_microk_power8.c b/kernel/power/cswap_microk_power8.c
+index 90ab59c54..1dd03dc88 100644
+--- a/kernel/power/cswap_microk_power8.c
++++ b/kernel/power/cswap_microk_power8.c
+@@ -35,146 +35,124 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void cswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void cswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void cswap_kernel_32 (long n, float *x, float *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "addi %3, %3, -4 \n\t"
+- "addi %4, %4, -4 \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "lxvw4x 32, 0, %2 \n\t"
+- "lxvw4x 33, %5, %2 \n\t"
+- "lxvw4x 34, %6, %2 \n\t"
+- "lxvw4x 35, %7, %2 \n\t"
+- "lxvw4x 36, %8, %2 \n\t"
+- "lxvw4x 37, %9, %2 \n\t"
+- "lxvw4x 38, %10, %2 \n\t"
+- "lxvw4x 39, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvw4x 48, 0, %1 \n\t"
+- "lxvw4x 49, %5, %1 \n\t"
+- "lxvw4x 50, %6, %1 \n\t"
+- "lxvw4x 51, %7, %1 \n\t"
+- "lxvw4x 52, %8, %1 \n\t"
+- "lxvw4x 53, %9, %1 \n\t"
+- "lxvw4x 54, %10, %1 \n\t"
+- "lxvw4x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "lxvw4x 56, 0, %1 \n\t"
+- "lxvw4x 57, %5, %1 \n\t"
+- "lxvw4x 58, %6, %1 \n\t"
+- "lxvw4x 59, %7, %1 \n\t"
+- "lxvw4x 60, %8, %1 \n\t"
+- "lxvw4x 61, %9, %1 \n\t"
+- "lxvw4x 62, %10, %1 \n\t"
+- "lxvw4x 63, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvw4x 32, 0, %3 \n\t"
+- "stxvw4x 33, %5, %3 \n\t"
+- "stxvw4x 34, %6, %3 \n\t"
+- "stxvw4x 35, %7, %3 \n\t"
+- "stxvw4x 36, %8, %3 \n\t"
+- "stxvw4x 37, %9, %3 \n\t"
+- "stxvw4x 38, %10, %3 \n\t"
+- "stxvw4x 39, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvw4x 40, 0, %3 \n\t"
+- "stxvw4x 41, %5, %3 \n\t"
+- "stxvw4x 42, %6, %3 \n\t"
+- "stxvw4x 43, %7, %3 \n\t"
+- "stxvw4x 44, %8, %3 \n\t"
+- "stxvw4x 45, %9, %3 \n\t"
+- "stxvw4x 46, %10, %3 \n\t"
+- "stxvw4x 47, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvw4x 48, 0, %4 \n\t"
+- "stxvw4x 49, %5, %4 \n\t"
+- "stxvw4x 50, %6, %4 \n\t"
+- "stxvw4x 51, %7, %4 \n\t"
+- "stxvw4x 52, %8, %4 \n\t"
+- "stxvw4x 53, %9, %4 \n\t"
+- "stxvw4x 54, %10, %4 \n\t"
+- "stxvw4x 55, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "stxvw4x 56, 0, %4 \n\t"
+- "stxvw4x 57, %5, %4 \n\t"
+- "stxvw4x 58, %6, %4 \n\t"
+- "stxvw4x 59, %7, %4 \n\t"
+- "stxvw4x 60, %8, %4 \n\t"
+- "stxvw4x 61, %9, %4 \n\t"
+- "stxvw4x 62, %10, %4 \n\t"
+- "stxvw4x 63, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (y2), // 3
+- "r" (x2), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "%3", "%4", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "lxvw4x 32, 0, %4 \n\t"
++ "lxvw4x 33, %5, %4 \n\t"
++ "lxvw4x 34, %6, %4 \n\t"
++ "lxvw4x 35, %7, %4 \n\t"
++ "lxvw4x 36, %8, %4 \n\t"
++ "lxvw4x 37, %9, %4 \n\t"
++ "lxvw4x 38, %10, %4 \n\t"
++ "lxvw4x 39, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "lxvw4x 40, 0, %4 \n\t"
++ "lxvw4x 41, %5, %4 \n\t"
++ "lxvw4x 42, %6, %4 \n\t"
++ "lxvw4x 43, %7, %4 \n\t"
++ "lxvw4x 44, %8, %4 \n\t"
++ "lxvw4x 45, %9, %4 \n\t"
++ "lxvw4x 46, %10, %4 \n\t"
++ "lxvw4x 47, %11, %4 \n\t"
++
++ "addi %4, %4, -128 \n\t"
++
++ "lxvw4x 48, 0, %3 \n\t"
++ "lxvw4x 49, %5, %3 \n\t"
++ "lxvw4x 50, %6, %3 \n\t"
++ "lxvw4x 51, %7, %3 \n\t"
++ "lxvw4x 0, %8, %3 \n\t"
++ "lxvw4x 1, %9, %3 \n\t"
++ "lxvw4x 2, %10, %3 \n\t"
++ "lxvw4x 3, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "lxvw4x 4, 0, %3 \n\t"
++ "lxvw4x 5, %5, %3 \n\t"
++ "lxvw4x 6, %6, %3 \n\t"
++ "lxvw4x 7, %7, %3 \n\t"
++ "lxvw4x 8, %8, %3 \n\t"
++ "lxvw4x 9, %9, %3 \n\t"
++ "lxvw4x 10, %10, %3 \n\t"
++ "lxvw4x 11, %11, %3 \n\t"
++
++ "addi %3, %3, -128 \n\t"
++
++ "stxvw4x 32, 0, %3 \n\t"
++ "stxvw4x 33, %5, %3 \n\t"
++ "stxvw4x 34, %6, %3 \n\t"
++ "stxvw4x 35, %7, %3 \n\t"
++ "stxvw4x 36, %8, %3 \n\t"
++ "stxvw4x 37, %9, %3 \n\t"
++ "stxvw4x 38, %10, %3 \n\t"
++ "stxvw4x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvw4x 40, 0, %3 \n\t"
++ "stxvw4x 41, %5, %3 \n\t"
++ "stxvw4x 42, %6, %3 \n\t"
++ "stxvw4x 43, %7, %3 \n\t"
++ "stxvw4x 44, %8, %3 \n\t"
++ "stxvw4x 45, %9, %3 \n\t"
++ "stxvw4x 46, %10, %3 \n\t"
++ "stxvw4x 47, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvw4x 48, 0, %4 \n\t"
++ "stxvw4x 49, %5, %4 \n\t"
++ "stxvw4x 50, %6, %4 \n\t"
++ "stxvw4x 51, %7, %4 \n\t"
++ "stxvw4x 0, %8, %4 \n\t"
++ "stxvw4x 1, %9, %4 \n\t"
++ "stxvw4x 2, %10, %4 \n\t"
++ "stxvw4x 3, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "stxvw4x 4, 0, %4 \n\t"
++ "stxvw4x 5, %5, %4 \n\t"
++ "stxvw4x 6, %6, %4 \n\t"
++ "stxvw4x 7, %7, %4 \n\t"
++ "stxvw4x 8, %8, %4 \n\t"
++ "stxvw4x 9, %9, %4 \n\t"
++ "stxvw4x 10, %10, %4 \n\t"
++ "stxvw4x 11, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "addic. %2, %2, -32 \n\t"
++ "bgt 1b \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y) // 4
++ :
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51","vs0","vs1","vs2","vs3",
++ "vs4","vs5","vs6","vs7","vs8","vs9","vs10","vs11"
++ );
++}
+diff --git a/kernel/power/dasum.c b/kernel/power/dasum.c
+index 77f5345ba..73962c2f2 100644
+--- a/kernel/power/dasum.c
++++ b/kernel/power/dasum.c
+@@ -42,7 +42,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #else
+
+-#define ABS fabsf
++#error supports double only
+
+ #endif
+
+@@ -53,7 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_16
+
+-static void dasum_kernel_16(BLASLONG n, FLOAT *x1, FLOAT *svec)
++static FLOAT dasum_kernel_16(BLASLONG n, FLOAT *x1)
+ {
+
+ BLASLONG i=0;
+@@ -92,9 +92,7 @@ static void dasum_kernel_16(BLASLONG n, FLOAT *x1, FLOAT *svec)
+
+ }
+
+- svec[0] = sum0+sum1+sum2+sum3;
+- svec[1] = 0.0;
+-
++ return sum0+sum1+sum2+sum3;
+ }
+
+ #endif
+@@ -103,7 +101,6 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ {
+ BLASLONG i=0;
+ FLOAT sumf = 0.0;
+- FLOAT svec[2] __attribute__ ((aligned (16)));;
+ BLASLONG n1;
+
+ if (n <= 0 || inc_x <= 0) return(sumf);
+@@ -115,8 +112,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ if ( n1 > 0 )
+ {
+
+- dasum_kernel_16(n1, x, svec);
+- sumf = svec[0] + svec[1];
++ sumf = dasum_kernel_16(n1, x);
+ i=n1;
+ }
+
+diff --git a/kernel/power/dasum_microk_power8.c b/kernel/power/dasum_microk_power8.c
+index cc38c4f7d..880d7d271 100644
+--- a/kernel/power/dasum_microk_power8.c
++++ b/kernel/power/dasum_microk_power8.c
+@@ -34,144 +34,142 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_16 1
+-static void dasum_kernel_16( BLASLONG n, FLOAT *x, FLOAT *svec) __attribute__ ((noinline));
+
+-static void dasum_kernel_16( BLASLONG n, FLOAT *x, FLOAT *svec)
++static double dasum_kernel_16 (long n, double *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xvabsdp 48, 40 \n\t"
+- "xvabsdp 49, 41 \n\t"
+- "xvabsdp 50, 42 \n\t"
+- "xvabsdp 51, 43 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+-
+- "xvabsdp 52, 44 \n\t"
+- "xvabsdp 53, 45 \n\t"
+-
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "xvabsdp 54, 46 \n\t"
+- "xvabsdp 55, 47 \n\t"
+-
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+-
+- "xvadddp 32, 32, 48 \n\t"
+- "xvadddp 33, 33, 49 \n\t"
+-
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "xvadddp 34, 34, 50 \n\t"
+- "xvadddp 35, 35, 51 \n\t"
+- "addi %2, %2, 128 \n\t"
+- "xvadddp 36, 36, 52 \n\t"
+- "xvadddp 37, 37, 53 \n\t"
+- "addic. %0 , %0 , -16 \n\t"
+- "xvadddp 38, 38, 54 \n\t"
+- "xvadddp 39, 39, 55 \n\t"
+-
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+-
+- "xvabsdp 48, 40 \n\t"
+- "xvabsdp 49, 41 \n\t"
+- "xvabsdp 50, 42 \n\t"
+- "xvabsdp 51, 43 \n\t"
+- "xvabsdp 52, 44 \n\t"
+- "xvabsdp 53, 45 \n\t"
+- "xvabsdp 54, 46 \n\t"
+- "xvabsdp 55, 47 \n\t"
+-
+- "xvadddp 32, 32, 48 \n\t"
+- "xvadddp 33, 33, 49 \n\t"
+- "xvadddp 34, 34, 50 \n\t"
+- "xvadddp 35, 35, 51 \n\t"
+- "xvadddp 36, 36, 52 \n\t"
+- "xvadddp 37, 37, 53 \n\t"
+- "xvadddp 38, 38, 54 \n\t"
+- "xvadddp 39, 39, 55 \n\t"
+-
+- "xvadddp 32, 32, 33 \n\t"
+- "xvadddp 34, 34, 35 \n\t"
+- "xvadddp 36, 36, 37 \n\t"
+- "xvadddp 38, 38, 39 \n\t"
+-
+- "xvadddp 32, 32, 34 \n\t"
+- "xvadddp 36, 36, 38 \n\t"
+-
+- "xvadddp 32, 32, 36 \n\t"
+-
+-
+- "stxvd2x 32, 0, %3 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (svec), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2", "memory"
+- );
+-
+-}
++ double sum;
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %8, %2 \n\t"
++ "lxvd2x 42, %9, %2 \n\t"
++ "lxvd2x 43, %10, %2 \n\t"
++ "lxvd2x 44, %11, %2 \n\t"
++ "lxvd2x 45, %12, %2 \n\t"
++ "lxvd2x 46, %13, %2 \n\t"
++ "lxvd2x 47, %14, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvabsdp 48, 40 \n\t"
++ "xvabsdp 49, 41 \n\t"
++ "xvabsdp 50, 42 \n\t"
++ "xvabsdp 51, 43 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %8, %2 \n\t"
++
++ "xvabsdp %x3, 44 \n\t"
++ "xvabsdp %x4, 45 \n\t"
++
++ "lxvd2x 42, %9, %2 \n\t"
++ "lxvd2x 43, %10, %2 \n\t"
++
++ "xvabsdp %x5, 46 \n\t"
++ "xvabsdp %x6, 47 \n\t"
++
++ "lxvd2x 44, %11, %2 \n\t"
++ "lxvd2x 45, %12, %2 \n\t"
++
++ "xvadddp 32, 32, 48 \n\t"
++ "xvadddp 33, 33, 49 \n\t"
++
++ "lxvd2x 46, %13, %2 \n\t"
++ "lxvd2x 47, %14, %2 \n\t"
++
++ "xvadddp 34, 34, 50 \n\t"
++ "xvadddp 35, 35, 51 \n\t"
++ "addi %2, %2, 128 \n\t"
++ "xvadddp 36, 36, %x3 \n\t"
++ "xvadddp 37, 37, %x4 \n\t"
++ "addic. %1, %1, -16 \n\t"
++ "xvadddp 38, 38, %x5 \n\t"
++ "xvadddp 39, 39, %x6 \n\t"
++
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvabsdp 48, 40 \n\t"
++ "xvabsdp 49, 41 \n\t"
++ "xvabsdp 50, 42 \n\t"
++ "xvabsdp 51, 43 \n\t"
++ "xvabsdp %x3, 44 \n\t"
++ "xvabsdp %x4, 45 \n\t"
++ "xvabsdp %x5, 46 \n\t"
++ "xvabsdp %x6, 47 \n\t"
++
++ "xvadddp 32, 32, 48 \n\t"
++ "xvadddp 33, 33, 49 \n\t"
++ "xvadddp 34, 34, 50 \n\t"
++ "xvadddp 35, 35, 51 \n\t"
++ "xvadddp 36, 36, %x3 \n\t"
++ "xvadddp 37, 37, %x4 \n\t"
++ "xvadddp 38, 38, %x5 \n\t"
++ "xvadddp 39, 39, %x6 \n\t"
++
++ "xvadddp 32, 32, 33 \n\t"
++ "xvadddp 34, 34, 35 \n\t"
++ "xvadddp 36, 36, 37 \n\t"
++ "xvadddp 38, 38, 39 \n\t"
++
++ "xvadddp 32, 32, 34 \n\t"
++ "xvadddp 36, 36, 38 \n\t"
++
++ "xvadddp 32, 32, 36 \n\t"
++
++ "xxswapd 33, 32 \n\t"
++ "xsadddp %x0, 32, 33 \n"
++
++ "#n=%1 x=%3=%2 sum=%0 o16=%8 o32=%9 o48=%10 o64=%11 o80=%12 o96=%13 o112=%14\n"
++ "#t0=%x3 t1=%x4 t2=%x5 t3=%x6"
++ :
++ "=d" (sum), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0), // 3
++ "=wa" (t1), // 4
++ "=wa" (t2), // 5
++ "=wa" (t3) // 6
++ :
++ "m" (*x),
++ "b" (16), // 8
++ "b" (32), // 9
++ "b" (48), // 10
++ "b" (64), // 11
++ "b" (80), // 12
++ "b" (96), // 13
++ "b" (112) // 14
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return sum;
++}
+
+
+diff --git a/kernel/power/daxpy.c b/kernel/power/daxpy.c
+index 4365bd88d..df0572e8e 100644
+--- a/kernel/power/daxpy.c
++++ b/kernel/power/daxpy.c
+@@ -43,21 +43,20 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_8
+
+-static void daxpy_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha)
++static void daxpy_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT alpha)
+ {
+ BLASLONG register i = 0;
+- FLOAT a = *alpha;
+
+ while(i < n)
+ {
+- y[i] += a * x[i];
+- y[i+1] += a * x[i+1];
+- y[i+2] += a * x[i+2];
+- y[i+3] += a * x[i+3];
+- y[i+4] += a * x[i+4];
+- y[i+5] += a * x[i+5];
+- y[i+6] += a * x[i+6];
+- y[i+7] += a * x[i+7];
++ y[i] += alpha * x[i];
++ y[i+1] += alpha * x[i+1];
++ y[i+2] += alpha * x[i+2];
++ y[i+3] += alpha * x[i+3];
++ y[i+4] += alpha * x[i+4];
++ y[i+5] += alpha * x[i+5];
++ y[i+6] += alpha * x[i+6];
++ y[i+7] += alpha * x[i+7];
+ i+=8 ;
+
+ }
+@@ -70,11 +69,6 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ {
+ BLASLONG i=0;
+ BLASLONG ix=0,iy=0;
+- FLOAT a2[4];
+- a2[0]=da;
+- a2[1]=da;
+- a2[2]=da;
+- a2[3]=da;
+
+ if ( n <= 0 ) return(0);
+
+@@ -84,7 +78,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ BLASLONG n1 = n & -16;
+
+ if ( n1 )
+- daxpy_kernel_8(n1, x, y , a2 );
++ daxpy_kernel_8(n1, x, y, da);
+
+ i = n1;
+ while(i < n)
+diff --git a/kernel/power/daxpy_microk_power8.c b/kernel/power/daxpy_microk_power8.c
+index bb3f73aca..fb714a3f9 100644
+--- a/kernel/power/daxpy_microk_power8.c
++++ b/kernel/power/daxpy_microk_power8.c
+@@ -35,167 +35,183 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ #define HAVE_KERNEL_8 1
+-static void daxpy_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y , FLOAT *alpha) __attribute__ ((noinline));
+
+-static void daxpy_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha)
++static void daxpy_kernel_8 (long n, double *x, double *y, double alpha)
+ {
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++ __vector double t4;
++ __vector double t5;
++ __vector double t6;
++ __vector double t7;
++ __vector double t8;
++ __vector double t9;
++ __vector double t10;
++ __vector double t11;
++ __vector double t12;
++ __vector double t13;
++ __vector double t14;
++ __vector double t15;
++ __vector double t16;
+
++ __asm__
++ (
++ "xxspltd %x4, %x22, 0 \n\t"
+
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
++ "dcbt 0, %2 \n\t"
++ "dcbt 0, %3 \n\t"
+
+- __asm__ __volatile__
+- (
++ "lxvd2x %x5, 0, %2 \n\t"
++ "lxvd2x %x6, %23, %2 \n\t"
++ "lxvd2x %x7, %24, %2 \n\t"
++ "lxvd2x %x8, %25, %2 \n\t"
+
+- "lxsdx 33, %5, %4 \n\t"
+- "xxspltd 32, 33, 0 \n\t"
+- "addi %8, %8, -8 \n\t"
++ "lxvd2x %x13, 0, %3 \n\t"
++ "lxvd2x %x14, %23, %3 \n\t"
++ "lxvd2x %x15, %24, %3 \n\t"
++ "lxvd2x %x16, %25, %3 \n\t"
+
+- "dcbt %2, %9 \n\t"
+- "dcbt %3, %9 \n\t"
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
+
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
++ "lxvd2x %x9, 0, %2 \n\t"
++ "lxvd2x %x10, %23, %2 \n\t"
++ "lxvd2x %x11, %24, %2 \n\t"
++ "lxvd2x %x12, %25, %2 \n\t"
+
+- "lxvd2x 48, 0, %3 \n\t"
+- "lxvd2x 49, %5, %3 \n\t"
+- "lxvd2x 50, %6, %3 \n\t"
+- "lxvd2x 51, %7, %3 \n\t"
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "lxvd2x 44, 0, %2 \n\t"
+- "lxvd2x 45, %5, %2 \n\t"
+- "lxvd2x 46, %6, %2 \n\t"
+- "lxvd2x 47, %7, %2 \n\t"
+-
+- "lxvd2x 52, 0, %3 \n\t"
+- "lxvd2x 53, %5, %3 \n\t"
+- "lxvd2x 54, %6, %3 \n\t"
+- "lxvd2x 55, %7, %3 \n\t"
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %9 \n\t"
+- "dcbt %3, %9 \n\t"
+-
+- "xvmaddadp 48, 40, 32 \n\t"
+- "xvmaddadp 49, 41, 32 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+-
+- "stxvd2x 48, 0, %8 \n\t"
+- "stxvd2x 49, %5, %8 \n\t"
+-
+- "xvmaddadp 50, 42, 32 \n\t"
+- "xvmaddadp 51, 43, 32 \n\t"
+-
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
+-
+- "lxvd2x 48, 0, %3 \n\t"
+- "lxvd2x 49, %5, %3 \n\t"
+- "lxvd2x 50, %6, %3 \n\t"
+- "lxvd2x 51, %7, %3 \n\t"
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %8, %8, 64 \n\t"
+-
+- "xvmaddadp 52, 44, 32 \n\t"
+- "addi %3, %3, 64 \n\t"
+- "xvmaddadp 53, 45, 32 \n\t"
+-
+- "lxvd2x 44, 0, %2 \n\t"
+- "lxvd2x 45, %5, %2 \n\t"
+-
+- "stxvd2x 52, 0, %8 \n\t"
+- "stxvd2x 53, %5, %8 \n\t"
+-
+- "xvmaddadp 54, 46, 32 \n\t"
+- "xvmaddadp 55, 47, 32 \n\t"
+-
+- "lxvd2x 46, %6, %2 \n\t"
+- "lxvd2x 47, %7, %2 \n\t"
+-
+- "stxvd2x 54, %6, %8 \n\t"
+- "stxvd2x 55, %7, %8 \n\t"
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %8, %8, 64 \n\t"
+-
+- "lxvd2x 52, 0, %3 \n\t"
+- "lxvd2x 53, %5, %3 \n\t"
+- "lxvd2x 54, %6, %3 \n\t"
+- "lxvd2x 55, %7, %3 \n\t"
+-
+- "addi %3, %3, 64 \n\t"
+-
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+-
+- "xvmaddadp 48, 40, 32 \n\t"
+- "xvmaddadp 49, 41, 32 \n\t"
+- "xvmaddadp 50, 42, 32 \n\t"
+- "xvmaddadp 51, 43, 32 \n\t"
+-
+- "xvmaddadp 52, 44, 32 \n\t"
+- "xvmaddadp 53, 45, 32 \n\t"
+- "xvmaddadp 54, 46, 32 \n\t"
+- "xvmaddadp 55, 47, 32 \n\t"
+-
+- "stxvd2x 48, 0, %8 \n\t"
+- "stxvd2x 49, %5, %8 \n\t"
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- "stxvd2x 52, 0, %8 \n\t"
+- "stxvd2x 53, %5, %8 \n\t"
+- "stxvd2x 54, %6, %8 \n\t"
+- "stxvd2x 55, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (y1), // 3
+- "r" (alpha), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (y2), // 8
+- "r" (pre) // 9
+- : "cr0", "%0", "%2" , "%3", "%8", "memory"
+- );
+-
+-}
++ "lxvd2x %x17, 0, %3 \n\t"
++ "lxvd2x %x18, %23, %3 \n\t"
++ "lxvd2x %x19, %24, %3 \n\t"
++ "lxvd2x %x20, %25, %3 \n\t"
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, -64 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".align 5 \n"
++ "1: \n\t"
++
++ "xvmaddadp %x13, %x5, %x4 \n\t"
++ "xvmaddadp %x14, %x6, %x4 \n\t"
++
++ "lxvd2x %x5, 0, %2 \n\t"
++ "lxvd2x %x6, %23, %2 \n\t"
++
++ "stxvd2x %x13, 0, %3 \n\t"
++ "stxvd2x %x14, %23, %3 \n\t"
++
++ "xvmaddadp %x15, %x7, %x4 \n\t"
++ "xvmaddadp %x16, %x8, %x4 \n\t"
++
++ "lxvd2x %x7, %24, %2 \n\t"
++ "lxvd2x %x8, %25, %2 \n\t"
++
++ "stxvd2x %x15, %24, %3 \n\t"
++ "stxvd2x %x16, %25, %3 \n\t"
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "lxvd2x %x13, 0, %3 \n\t"
++ "lxvd2x %x14, %23, %3 \n\t"
++ "lxvd2x %x15, %24, %3 \n\t"
++ "lxvd2x %x16, %25, %3 \n\t"
++
++ "addi %3, %3, -64 \n\t"
++
++ "xvmaddadp %x17, %x9, %x4 \n\t"
++ "xvmaddadp %x18, %x10, %x4 \n\t"
++
++ "lxvd2x %x9, 0, %2 \n\t"
++ "lxvd2x %x10, %23, %2 \n\t"
++
++ "stxvd2x %x17, 0, %3 \n\t"
++ "stxvd2x %x18, %23, %3 \n\t"
++
++ "xvmaddadp %x19, %x11, %x4 \n\t"
++ "xvmaddadp %x20, %x12, %x4 \n\t"
++
++ "lxvd2x %x11, %24, %2 \n\t"
++ "lxvd2x %x12, %25, %2 \n\t"
++
++ "stxvd2x %x19, %24, %3 \n\t"
++ "stxvd2x %x20, %25, %3 \n\t"
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "lxvd2x %x17, 0, %3 \n\t"
++ "lxvd2x %x18, %23, %3 \n\t"
++ "lxvd2x %x19, %24, %3 \n\t"
++ "lxvd2x %x20, %25, %3 \n\t"
++
++ "addi %3, %3, -64 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmaddadp %x13, %x5, %x4 \n\t"
++ "xvmaddadp %x14, %x6, %x4 \n\t"
++ "xvmaddadp %x15, %x7, %x4 \n\t"
++ "xvmaddadp %x16, %x8, %x4 \n\t"
++
++ "xvmaddadp %x17, %x9, %x4 \n\t"
++ "xvmaddadp %x18, %x10, %x4 \n\t"
++ "xvmaddadp %x19, %x11, %x4 \n\t"
++ "xvmaddadp %x20, %x12, %x4 \n\t"
++
++ "stxvd2x %x13, 0, %3 \n\t"
++ "stxvd2x %x14, %23, %3 \n\t"
++ "stxvd2x %x15, %24, %3 \n\t"
++ "stxvd2x %x16, %25, %3 \n\t"
++
++ "addi %3, %3, 64 \n\t"
++
++ "stxvd2x %x17, 0, %3 \n\t"
++ "stxvd2x %x18, %23, %3 \n\t"
++ "stxvd2x %x19, %24, %3 \n\t"
++ "stxvd2x %x20, %25, %3 \n"
++
++ "#n=%1 x=%21=%2 y=%0=%3 alpha=%22 o16=%23 o32=%24 o48=%25\n"
++ "#t0=%x4 t1=%x5 t2=%x6 t3=%x7 t4=%x8 t5=%x9 t6=%x10 t7=%x11 t8=%x12 t9=%x13 t10=%x14 t11=%x15 t12=%x16 t13=%x17 t14=%x18 t15=%x19 t16=%x20"
++ :
++ "+m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y), // 3
++ "=wa" (t0), // 4
++ "=wa" (t1), // 5
++ "=wa" (t2), // 6
++ "=wa" (t3), // 7
++ "=wa" (t4), // 8
++ "=wa" (t5), // 9
++ "=wa" (t6), // 10
++ "=wa" (t7), // 11
++ "=wa" (t8), // 12
++ "=wa" (t9), // 13
++ "=wa" (t10), // 14
++ "=wa" (t11), // 15
++ "=wa" (t12), // 16
++ "=wa" (t13), // 17
++ "=wa" (t14), // 18
++ "=wa" (t15), // 19
++ "=wa" (t16) // 20
++ :
++ "m" (*x),
++ "d" (alpha), // 22
++ "b" (16), // 23
++ "b" (32), // 24
++ "b" (48) // 25
++ :
++ "cr0"
++ );
++
++}
+
+
+diff --git a/kernel/power/dcopy_microk_power8.c b/kernel/power/dcopy_microk_power8.c
+index 04f7db556..261dc04de 100644
+--- a/kernel/power/dcopy_microk_power8.c
++++ b/kernel/power/dcopy_microk_power8.c
+@@ -35,140 +35,121 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void dcopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void dcopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void dcopy_kernel_32 (long n, double *x, double *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 50, 0, %2 \n\t"
+- "lxvd2x 51, %5, %2 \n\t"
+- "lxvd2x 52, %6, %2 \n\t"
+- "lxvd2x 53, %7, %2 \n\t"
+- "lxvd2x 54, %8, %2 \n\t"
+- "lxvd2x 55, %9, %2 \n\t"
+- "lxvd2x 56, %10, %2 \n\t"
+- "lxvd2x 57, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvd2x 40, 0, %1 \n\t"
+- "stxvd2x 41, %5, %1 \n\t"
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "stxvd2x 42, %6, %1 \n\t"
+- "stxvd2x 43, %7, %1 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "stxvd2x 44, %8, %1 \n\t"
+- "stxvd2x 45, %9, %1 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "stxvd2x 46, %10, %1 \n\t"
+- "stxvd2x 47, %11, %1 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "stxvd2x 50, 0, %1 \n\t"
+- "stxvd2x 51, %5, %1 \n\t"
+- "lxvd2x 50, 0, %2 \n\t"
+- "lxvd2x 51, %5, %2 \n\t"
+- "stxvd2x 52, %6, %1 \n\t"
+- "stxvd2x 53, %7, %1 \n\t"
+- "lxvd2x 52, %6, %2 \n\t"
+- "lxvd2x 53, %7, %2 \n\t"
+- "stxvd2x 54, %8, %1 \n\t"
+- "stxvd2x 55, %9, %1 \n\t"
+- "lxvd2x 54, %8, %2 \n\t"
+- "lxvd2x 55, %9, %2 \n\t"
+- "stxvd2x 56, %10, %1 \n\t"
+- "stxvd2x 57, %11, %1 \n\t"
+- "lxvd2x 56, %10, %2 \n\t"
+- "lxvd2x 57, %11, %2 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "stxvd2x 40, 0, %1 \n\t"
+- "stxvd2x 41, %5, %1 \n\t"
+- "stxvd2x 42, %6, %1 \n\t"
+- "stxvd2x 43, %7, %1 \n\t"
+- "stxvd2x 44, %8, %1 \n\t"
+- "stxvd2x 45, %9, %1 \n\t"
+- "stxvd2x 46, %10, %1 \n\t"
+- "stxvd2x 47, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvd2x 50, 0, %1 \n\t"
+- "stxvd2x 51, %5, %1 \n\t"
+- "stxvd2x 52, %6, %1 \n\t"
+- "stxvd2x 53, %7, %1 \n\t"
+- "stxvd2x 54, %8, %1 \n\t"
+- "stxvd2x 55, %9, %1 \n\t"
+- "stxvd2x 56, %10, %1 \n\t"
+- "stxvd2x 57, %11, %1 \n\t"
+-
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %5, %2 \n\t"
++ "lxvd2x 34, %6, %2 \n\t"
++ "lxvd2x 35, %7, %2 \n\t"
++ "lxvd2x 36, %8, %2 \n\t"
++ "lxvd2x 37, %9, %2 \n\t"
++ "lxvd2x 38, %10, %2 \n\t"
++ "lxvd2x 39, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %5, %2 \n\t"
++ "lxvd2x 42, %6, %2 \n\t"
++ "lxvd2x 43, %7, %2 \n\t"
++ "lxvd2x 44, %8, %2 \n\t"
++ "lxvd2x 45, %9, %2 \n\t"
++ "lxvd2x 46, %10, %2 \n\t"
++ "lxvd2x 47, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %5, %2 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "lxvd2x 34, %6, %2 \n\t"
++ "lxvd2x 35, %7, %2 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "lxvd2x 36, %8, %2 \n\t"
++ "lxvd2x 37, %9, %2 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++ "lxvd2x 38, %10, %2 \n\t"
++ "lxvd2x 39, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %5, %2 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "lxvd2x 42, %6, %2 \n\t"
++ "lxvd2x 43, %7, %2 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "lxvd2x 44, %8, %2 \n\t"
++ "lxvd2x 45, %9, %2 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n\t"
++ "lxvd2x 46, %10, %2 \n\t"
++ "lxvd2x 47, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n"
++
++ "#n=%1 x=%4=%2 y=%0=%3 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "=m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y) // 3
++ :
++ "m" (*x),
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/ddot.c b/kernel/power/ddot.c
+index cef60a2e5..e43470e23 100644
+--- a/kernel/power/ddot.c
++++ b/kernel/power/ddot.c
+@@ -43,7 +43,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_8
+
+-static void ddot_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d)
++static FLOAT ddot_kernel_8 (BLASLONG n, FLOAT *x, FLOAT *y)
+ {
+ BLASLONG register i = 0;
+ FLOAT dot = 0.0;
+@@ -62,8 +62,7 @@ static void ddot_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d)
+ i+=8 ;
+
+ }
+- *d += dot;
+-
++ return dot;
+ }
+
+ #endif
+@@ -83,7 +82,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
+ BLASLONG n1 = n & -16;
+
+ if ( n1 )
+- ddot_kernel_8(n1, x, y , &dot );
++ dot = ddot_kernel_8(n1, x, y);
+
+ i = n1;
+ while(i < n)
+diff --git a/kernel/power/ddot_microk_power8.c b/kernel/power/ddot_microk_power8.c
+index b88049212..4e6bc29c9 100644
+--- a/kernel/power/ddot_microk_power8.c
++++ b/kernel/power/ddot_microk_power8.c
+@@ -34,145 +34,138 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_8 1
+-static void ddot_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y , FLOAT *dot) __attribute__ ((noinline));
+
+-static void ddot_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *dot)
++static double ddot_kernel_8 (long n, double *x, double *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "dcbt %2, %12 \n\t"
+- "dcbt %3, %12 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 48, 0, %3 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 49, %5, %3 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 50, %6, %3 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 51, %7, %3 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 52, %8, %3 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 53, %9, %3 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 54, %10, %3 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+- "lxvd2x 55, %11, %3 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+- "addi %3, %3, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %12 \n\t"
+- "dcbt %3, %12 \n\t"
+-
+- "xvmaddadp 32, 40, 48 \n\t"
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 48, 0, %3 \n\t"
+- "xvmaddadp 33, 41, 49 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 49, %5, %3 \n\t"
+- "xvmaddadp 34, 42, 50 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 50, %6, %3 \n\t"
+- "xvmaddadp 35, 43, 51 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 51, %7, %3 \n\t"
+- "xvmaddadp 36, 44, 52 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 52, %8, %3 \n\t"
+- "xvmaddadp 37, 45, 53 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 53, %9, %3 \n\t"
+- "xvmaddadp 38, 46, 54 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 54, %10, %3 \n\t"
+- "xvmaddadp 39, 47, 55 \n\t"
+-
+- "lxvd2x 47, %11, %2 \n\t"
+- "lxvd2x 55, %11, %3 \n\t"
+-
+-
+- "addi %2, %2, 128 \n\t"
+- "addi %3, %3, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmaddadp 32, 40, 48 \n\t"
+- "xvmaddadp 33, 41, 49 \n\t"
+- "xvmaddadp 34, 42, 50 \n\t"
+- "xvmaddadp 35, 43, 51 \n\t"
+- "xvmaddadp 36, 44, 52 \n\t"
+- "xvmaddadp 37, 45, 53 \n\t"
+- "xvmaddadp 38, 46, 54 \n\t"
+- "xvmaddadp 39, 47, 55 \n\t"
+-
+- "xvadddp 32, 32, 33 \n\t"
+- "xvadddp 34, 34, 35 \n\t"
+- "xvadddp 36, 36, 37 \n\t"
+- "xvadddp 38, 38, 39 \n\t"
+-
+- "xvadddp 32, 32, 34 \n\t"
+- "xvadddp 36, 36, 38 \n\t"
+-
+- "xvadddp 32, 32, 36 \n\t"
+-
+- "xxswapd 33, 32 \n\t"
+-
+- "xsadddp 32, 32, 33 \n\t"
+-
+- "stxsdx 32, 0, %4 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (y1), // 3
+- "r" (dot), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112), // 11
+- "r" (pre) // 12
+- : "cr0", "%0", "%2" , "%3", "memory"
+- );
+-
+-}
+-
+-
++ double dot;
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++ "dcbt 0, %3 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 48, 0, %3 \n\t"
++ "lxvd2x 41, %10, %2 \n\t"
++ "lxvd2x 49, %10, %3 \n\t"
++ "lxvd2x 42, %11, %2 \n\t"
++ "lxvd2x 50, %11, %3 \n\t"
++ "lxvd2x 43, %12, %2 \n\t"
++ "lxvd2x 51, %12, %3 \n\t"
++ "lxvd2x 44, %13, %2 \n\t"
++ "lxvd2x %x4, %13, %3 \n\t"
++ "lxvd2x 45, %14, %2 \n\t"
++ "lxvd2x %x5, %14, %3 \n\t"
++ "lxvd2x 46, %15, %2 \n\t"
++ "lxvd2x %x6, %15, %3 \n\t"
++ "lxvd2x 47, %16, %2 \n\t"
++ "lxvd2x %x7, %16, %3 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmaddadp 32, 40, 48 \n\t"
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 48, 0, %3 \n\t"
++ "xvmaddadp 33, 41, 49 \n\t"
++ "lxvd2x 41, %10, %2 \n\t"
++ "lxvd2x 49, %10, %3 \n\t"
++ "xvmaddadp 34, 42, 50 \n\t"
++ "lxvd2x 42, %11, %2 \n\t"
++ "lxvd2x 50, %11, %3 \n\t"
++ "xvmaddadp 35, 43, 51 \n\t"
++ "lxvd2x 43, %12, %2 \n\t"
++ "lxvd2x 51, %12, %3 \n\t"
++ "xvmaddadp 36, 44, %x4 \n\t"
++ "lxvd2x 44, %13, %2 \n\t"
++ "lxvd2x %x4, %13, %3 \n\t"
++ "xvmaddadp 37, 45, %x5 \n\t"
++ "lxvd2x 45, %14, %2 \n\t"
++ "lxvd2x %x5, %14, %3 \n\t"
++ "xvmaddadp 38, 46, %x6 \n\t"
++ "lxvd2x 46, %15, %2 \n\t"
++ "lxvd2x %x6, %15, %3 \n\t"
++ "xvmaddadp 39, 47, %x7 \n\t"
++ "lxvd2x 47, %16, %2 \n\t"
++ "lxvd2x %x7, %16, %3 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmaddadp 32, 40, 48 \n\t"
++ "xvmaddadp 33, 41, 49 \n\t"
++ "xvmaddadp 34, 42, 50 \n\t"
++ "xvmaddadp 35, 43, 51 \n\t"
++ "xvmaddadp 36, 44, %x4 \n\t"
++ "xvmaddadp 37, 45, %x5 \n\t"
++ "xvmaddadp 38, 46, %x6 \n\t"
++ "xvmaddadp 39, 47, %x7 \n\t"
++
++ "xvadddp 32, 32, 33 \n\t"
++ "xvadddp 34, 34, 35 \n\t"
++ "xvadddp 36, 36, 37 \n\t"
++ "xvadddp 38, 38, 39 \n\t"
++
++ "xvadddp 32, 32, 34 \n\t"
++ "xvadddp 36, 36, 38 \n\t"
++
++ "xvadddp 32, 32, 36 \n\t"
++
++ "xxswapd 33, 32 \n\t"
++
++ "xsadddp %x0, 32, 33 \n"
++
++ "#dot=%0 n=%1 x=%8=%2 y=%9=%3 o16=%10 o32=%11 o48=%12 o64=%13 o80=%14 o96=%15 o122=%16\n"
++ "#t0=%x4 t1=%x5 t2=%x6 t3=%x7"
++ :
++ "=d" (dot), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y), // 3
++ "=wa" (t0), // 4
++ "=wa" (t1), // 5
++ "=wa" (t2), // 6
++ "=wa" (t3) // 7
++ :
++ "m" (*x),
++ "m" (*y),
++ "b" (16), // 10
++ "b" (32), // 11
++ "b" (48), // 12
++ "b" (64), // 13
++ "b" (80), // 14
++ "b" (96), // 15
++ "b" (112) // 16
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return dot;
++}
+diff --git a/kernel/power/dgemv_n.c b/kernel/power/dgemv_n.c
+index 812d09d15..57f9f9e72 100644
+--- a/kernel/power/dgemv_n.c
++++ b/kernel/power/dgemv_n.c
+@@ -47,18 +47,18 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_4x4
+
+-static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT *alpha)
++static void dgemv_kernel_4x4(BLASLONG n, FLOAT *a_ptr, BLASLONG lda, FLOAT *xo, FLOAT *y, FLOAT alpha)
+ {
+ BLASLONG i;
+- FLOAT *a0,*a1,*a2,*a3;
+ FLOAT x[4] __attribute__ ((aligned (16)));;
+- a0 = ap[0];
+- a1 = ap[1];
+- a2 = ap[2];
+- a3 = ap[3];
++ FLOAT *a0 = a_ptr;
++ FLOAT *a1 = a0 + lda;
++ FLOAT *a2 = a1 + lda;
++ FLOAT *a3 = a2 + lda;
++
+
+ for ( i=0; i<4; i++)
+- x[i] = xo[i] * *alpha;
++ x[i] = xo[i] * alpha;
+
+ for ( i=0; i< n; i+=4 )
+ {
+@@ -73,16 +73,13 @@ static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT
+
+ #ifndef HAVE_KERNEL_4x2
+
+-static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT *alpha)
++static void dgemv_kernel_4x2(BLASLONG n, FLOAT *a0, FLOAT *a1, FLOAT *xo, FLOAT *y, FLOAT alpha)
+ {
+ BLASLONG i;
+- FLOAT *a0,*a1;
+ FLOAT x[4] __attribute__ ((aligned (16)));;
+- a0 = ap[0];
+- a1 = ap[1];
+
+ for ( i=0; i<2; i++)
+- x[i] = xo[i] * *alpha;
++ x[i] = xo[i] * alpha;
+
+ for ( i=0; i< n; i+=4 )
+ {
+@@ -98,15 +95,13 @@ static void dgemv_kernel_4x2(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT
+
+ #ifndef HAVE_KERNEL_4x1
+
+-static void dgemv_kernel_4x1(BLASLONG n, FLOAT *ap, FLOAT *xo, FLOAT *y, FLOAT *alpha)
++static void dgemv_kernel_4x1(BLASLONG n, FLOAT *a0, FLOAT *xo, FLOAT *y, FLOAT alpha)
+ {
+ BLASLONG i;
+- FLOAT *a0;
+ FLOAT x[4] __attribute__ ((aligned (16)));;
+- a0 = ap;
+
+ for ( i=0; i<1; i++)
+- x[i] = xo[i] * *alpha;
++ x[i] = xo[i] * alpha;
+
+ for ( i=0; i< n; i+=4 )
+ {
+@@ -141,7 +136,6 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+ {
+
+ BLASLONG i;
+- BLASLONG j;
+ FLOAT *a_ptr;
+ FLOAT *x_ptr;
+ FLOAT *y_ptr;
+@@ -151,13 +145,9 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+ BLASLONG m3;
+ BLASLONG n2;
+ BLASLONG lda4 = lda << 2;
+- FLOAT *ap[4] __attribute__ ((aligned (16)));;
+ FLOAT xbuffer[8] __attribute__ ((aligned (16)));;
+- FLOAT alpha_r[4] __attribute__ ((aligned (16)));;
+ FLOAT *ybuffer;
+
+- alpha_r[0] = alpha;
+-
+ if ( m < 1 ) return(0);
+ if ( n < 1 ) return(0);
+
+@@ -187,11 +177,6 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+ a_ptr = a;
+ x_ptr = x;
+
+- ap[0] = a_ptr;
+- ap[1] = a_ptr + lda;
+- ap[2] = ap[1] + lda;
+- ap[3] = ap[2] + lda;
+-
+ if ( inc_y != 1 )
+ memset(ybuffer,0,NB*8);
+ else
+@@ -203,18 +188,14 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+
+ for( i = 0; i < n1 ; i++)
+ {
+- dgemv_kernel_4x4(NB,ap,x_ptr,ybuffer,alpha_r);
+- ap[0] += lda4;
+- ap[1] += lda4;
+- ap[2] += lda4;
+- ap[3] += lda4;
++ dgemv_kernel_4x4(NB,a_ptr,lda,x_ptr,ybuffer,alpha);
+ a_ptr += lda4;
+ x_ptr += 4;
+ }
+
+ if ( n2 & 2 )
+ {
+- dgemv_kernel_4x2(NB,ap,x_ptr,ybuffer,alpha_r);
++ dgemv_kernel_4x2(NB,a_ptr,a_ptr+lda,x_ptr,ybuffer,alpha);
+ a_ptr += lda*2;
+ x_ptr += 2;
+ }
+@@ -222,7 +203,7 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+
+ if ( n2 & 1 )
+ {
+- dgemv_kernel_4x1(NB,a_ptr,x_ptr,ybuffer,alpha_r);
++ dgemv_kernel_4x1(NB,a_ptr,x_ptr,ybuffer,alpha);
+ a_ptr += lda;
+ x_ptr += 1;
+
+@@ -243,11 +224,7 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+ x_ptr += inc_x;
+ xbuffer[3] = x_ptr[0];
+ x_ptr += inc_x;
+- dgemv_kernel_4x4(NB,ap,xbuffer,ybuffer,alpha_r);
+- ap[0] += lda4;
+- ap[1] += lda4;
+- ap[2] += lda4;
+- ap[3] += lda4;
++ dgemv_kernel_4x4(NB,a_ptr,lda,xbuffer,ybuffer,alpha);
+ a_ptr += lda4;
+ }
+
+@@ -255,7 +232,7 @@ int CNAME(BLASLONG m, BLASLONG n, BLASLONG dummy1, FLOAT alpha, FLOAT *a, BLASLO
+ {
+ xbuffer[0] = x_ptr[0];
+ x_ptr += inc_x;
+- dgemv_kernel_4x1(NB,a_ptr,xbuffer,ybuffer,alpha_r);
++ dgemv_kernel_4x1(NB,a_ptr,xbuffer,ybuffer,alpha);
+ a_ptr += lda;
+
+ }
+diff --git a/kernel/power/dgemv_n_microk_power8.c b/kernel/power/dgemv_n_microk_power8.c
+index 9eabe555c..5b42bbb38 100644
+--- a/kernel/power/dgemv_n_microk_power8.c
++++ b/kernel/power/dgemv_n_microk_power8.c
+@@ -35,267 +35,264 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_4x4 1
+
+-static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT *alpha) __attribute__ ((noinline));
+-
+-static void dgemv_kernel_4x4(BLASLONG n, FLOAT **ap, FLOAT *xo, FLOAT *y, FLOAT *alpha)
++static void dgemv_kernel_4x4 (long n, double *ap, long lda, double *x, double *y, double alpha)
+ {
+- BLASLONG i=n;
+- BLASLONG o8 = 8;
+- BLASLONG o16 = 16;
+- BLASLONG o24 = 24;
+- BLASLONG pre = 384;
+-
+- FLOAT *a0,*a1,*a2,*a3;
+- FLOAT *y1=y+1;
+- FLOAT x[4] __attribute__ ((aligned (16)));;
+- a0 = ap[0]+1;
+- a1 = ap[1]+1;
+- a2 = ap[2]+1;
+- a3 = ap[3]+1;
+-
+- x[0]=xo[0] * *alpha;
+- x[1]=xo[1] * *alpha;
+- x[2]=xo[2] * *alpha;
+- x[3]=xo[3] * *alpha;
++ double *a0;
++ double *a1;
++ double *a2;
++ double *a3;
++
++ __asm__
++ (
++ "lxvd2x 34, 0, %9 \n\t" // x0, x1
++ "lxvd2x 35, %10, %9 \n\t" // x2, x3
++ "xxspltd 32, %x8, 0 \n\t" // alpha, alpha
++
++ "sldi %6, %4, 3 \n\t" // lda * sizeof (double)
++
++ "xvmuldp 34, 34, 32 \n\t" // x0 * alpha, x1 * alpha
++ "xvmuldp 35, 35, 32 \n\t" // x2 * alpha, x3 * alpha
++
++ "add %4, %3, %6 \n\t" // a1 = a0 + lda
++ "add %6, %6, %6 \n\t" // 2 * lda
++
++ "xxspltd 32, 34, 0 \n\t" // x0 * alpha, x0 * alpha
++ "xxspltd 33, 34, 1 \n\t" // x1 * alpha, x1 * alpha
++ "xxspltd 34, 35, 0 \n\t" // x2 * alpha, x2 * alpha
++ "xxspltd 35, 35, 1 \n\t" // x3 * alpha, x3 * alpha
++
++ "add %5, %3, %6 \n\t" // a2 = a0 + 2 * lda
++ "add %6, %4, %6 \n\t" // a3 = a1 + 2 * lda
++
++ "dcbt 0, %3 \n\t"
++ "dcbt 0, %4 \n\t"
++ "dcbt 0, %5 \n\t"
++ "dcbt 0, %6 \n\t"
+
++ "lxvd2x 40, 0, %3 \n\t" // a0[0], a0[1]
++ "lxvd2x 41, %10, %3 \n\t" // a0[2], a0[3]
+
+- __asm__ __volatile__
+- (
+- "lxvdsx 32, 0 , %1 \n\t" // x0
+- "lxvdsx 33,%3 , %1 \n\t" // x1
+- "lxvdsx 34,%4 , %1 \n\t" // x2
+- "lxvdsx 35,%5 , %1 \n\t" // x3
+- "addi %2 , %2 , -8 \n\t"
+- "addi %6 , %6 , -8 \n\t"
+- "addi %7 , %7 , -8 \n\t"
+- "addi %8 , %8 , -8 \n\t"
+- "addi %9 , %9 , -8 \n\t"
+-
+- "lxvd2x 48, 0, %6 \n\t" // a0[0], a0[1]
+- "lxvd2x 49,%4, %6 \n\t" // a0[2], a0[3]
+-
+- "lxvd2x 50, 0, %7 \n\t" // a1[0], a1[1]
+- "lxvd2x 51,%4, %7 \n\t" // a1[2], a1[3]
++ "lxvd2x 42, 0, %4 \n\t" // a1[0], a1[1]
++ "lxvd2x 43, %10, %4 \n\t" // a1[2], a1[3]
+
+- "lxvd2x 52, 0, %8 \n\t" // a2[0], a2[1]
+- "lxvd2x 53,%4, %8 \n\t" // a2[2], a2[3]
++ "lxvd2x 44, 0, %5 \n\t" // a2[0], a2[1]
++ "lxvd2x 45, %10, %5 \n\t" // a2[2], a2[3]
+
+- "lxvd2x 54, 0, %9 \n\t" // a3[0], a3[1]
+- "lxvd2x 55,%4, %9 \n\t" // a3[2], a3[3]
++ "lxvd2x 46, 0, %6 \n\t" // a3[0], a3[1]
++ "lxvd2x 47, %10, %6 \n\t" // a3[2], a3[3]
+
+- "addi %6, %6, 32 \n\t"
+- "addi %7, %7, 32 \n\t"
+- "addi %8, %8, 32 \n\t"
+- "addi %9, %9, 32 \n\t"
++ "dcbt 0, %2 \n\t"
+
+- "addic. %0 , %0 , -4 \n\t"
+- "ble 2f \n\t"
++ "addi %3, %3, 32 \n\t"
++ "addi %4, %4, 32 \n\t"
++ "addi %5, %5, 32 \n\t"
++ "addi %6, %6, 32 \n\t"
+
+- ".align 5 \n\t"
+- "1: \n\t"
++ "addic. %1, %1, -4 \n\t"
++ "ble 2f \n\t"
+
+- "dcbt %2, %10 \n\t"
++ ".p2align 5 \n"
++ "1: \n\t"
+
+- "lxvd2x 40, 0, %2 \n\t" // y0, y1
+- "lxvd2x 41,%4, %2 \n\t" // y2, y3
+-
+- "dcbt %6, %10 \n\t"
+- "dcbt %7, %10 \n\t"
+- "dcbt %8, %10 \n\t"
+- "dcbt %9, %10 \n\t"
++ "lxvd2x 36, 0, %2 \n\t" // y0, y1
++ "lxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "xvmaddadp 40, 48, 32 \n\t"
+- "xvmaddadp 41, 49, 32 \n\t"
++ "xvmaddadp 36, 40, 32 \n\t"
++ "xvmaddadp 37, 41, 32 \n\t"
+
+- "lxvd2x 48, 0, %6 \n\t" // a0[0], a0[1]
+- "lxvd2x 49,%4, %6 \n\t" // a0[2], a0[3]
++ "lxvd2x 40, 0, %3 \n\t" // a0[0], a0[1]
++ "lxvd2x 41, %10, %3 \n\t" // a0[2], a0[3]
+
+- "xvmaddadp 40, 50, 33 \n\t"
+- "addi %6, %6, 32 \n\t"
+- "xvmaddadp 41, 51, 33 \n\t"
++ "xvmaddadp 36, 42, 33 \n\t"
++ "addi %3, %3, 32 \n\t"
++ "xvmaddadp 37, 43, 33 \n\t"
+
+- "lxvd2x 50, 0, %7 \n\t" // a1[0], a1[1]
+- "lxvd2x 51,%4, %7 \n\t" // a1[2], a1[3]
++ "lxvd2x 42, 0, %4 \n\t" // a1[0], a1[1]
++ "lxvd2x 43, %10, %4 \n\t" // a1[2], a1[3]
+
+- "xvmaddadp 40, 52, 34 \n\t"
+- "addi %7, %7, 32 \n\t"
+- "xvmaddadp 41, 53, 34 \n\t"
++ "xvmaddadp 36, 44, 34 \n\t"
++ "addi %4, %4, 32 \n\t"
++ "xvmaddadp 37, 45, 34 \n\t"
+
+- "lxvd2x 52, 0, %8 \n\t" // a2[0], a2[1]
+- "lxvd2x 53,%4, %8 \n\t" // a2[2], a2[3]
++ "lxvd2x 44, 0, %5 \n\t" // a2[0], a2[1]
++ "lxvd2x 45, %10, %5 \n\t" // a2[2], a2[3]
+
+- "xvmaddadp 40, 54, 35 \n\t"
+- "addi %8, %8, 32 \n\t"
+- "xvmaddadp 41, 55, 35 \n\t"
++ "xvmaddadp 36, 46, 35 \n\t"
++ "addi %5, %5, 32 \n\t"
++ "xvmaddadp 37, 47, 35 \n\t"
+
+- "stxvd2x 40, 0, %2 \n\t" // y0, y1
+- "stxvd2x 41,%4, %2 \n\t" // y2, y3
++ "stxvd2x 36, 0, %2 \n\t" // y0, y1
++ "stxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "lxvd2x 54, 0, %9 \n\t" // a3[0], a3[1]
+- "lxvd2x 55,%4, %9 \n\t" // a3[2], a3[3]
++ "lxvd2x 46, 0, %6 \n\t" // a3[0], a3[1]
++ "lxvd2x 47, %10, %6 \n\t" // a3[2], a3[3]
+
+- "addi %9, %9, 32 \n\t"
+- "addi %2, %2, 32 \n\t"
++ "addi %6, %6, 32 \n\t"
++ "addi %2, %2, 32 \n\t"
+
+- "addic. %0 , %0 , -4 \n\t"
+- "ble 2f \n\t"
++ "addic. %1, %1, -4 \n\t"
++ "ble 2f \n\t"
+
+
+- "lxvd2x 40, 0, %2 \n\t" // y0, y1
+- "lxvd2x 41,%4, %2 \n\t" // y2, y3
+-
+- "xvmaddadp 40, 48, 32 \n\t"
+- "xvmaddadp 41, 49, 32 \n\t"
++ "lxvd2x 36, 0, %2 \n\t" // y0, y1
++ "lxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "lxvd2x 48, 0, %6 \n\t" // a0[0], a0[1]
+- "lxvd2x 49,%4, %6 \n\t" // a0[2], a0[3]
++ "xvmaddadp 36, 40, 32 \n\t"
++ "xvmaddadp 37, 41, 32 \n\t"
+
+- "xvmaddadp 40, 50, 33 \n\t"
+- "addi %6, %6, 32 \n\t"
+- "xvmaddadp 41, 51, 33 \n\t"
++ "lxvd2x 40, 0, %3 \n\t" // a0[0], a0[1]
++ "lxvd2x 41, %10, %3 \n\t" // a0[2], a0[3]
+
+- "lxvd2x 50, 0, %7 \n\t" // a1[0], a1[1]
+- "lxvd2x 51,%4, %7 \n\t" // a1[2], a1[3]
++ "xvmaddadp 36, 42, 33 \n\t"
++ "addi %3, %3, 32 \n\t"
++ "xvmaddadp 37, 43, 33 \n\t"
+
+- "xvmaddadp 40, 52, 34 \n\t"
+- "addi %7, %7, 32 \n\t"
+- "xvmaddadp 41, 53, 34 \n\t"
++ "lxvd2x 42, 0, %4 \n\t" // a1[0], a1[1]
++ "lxvd2x 43, %10, %4 \n\t" // a1[2], a1[3]
+
+- "lxvd2x 52, 0, %8 \n\t" // a2[0], a2[1]
+- "lxvd2x 53,%4, %8 \n\t" // a2[2], a2[3]
++ "xvmaddadp 36, 44, 34 \n\t"
++ "addi %4, %4, 32 \n\t"
++ "xvmaddadp 37, 45, 34 \n\t"
+
+- "xvmaddadp 40, 54, 35 \n\t"
+- "addi %8, %8, 32 \n\t"
+- "xvmaddadp 41, 55, 35 \n\t"
++ "lxvd2x 44, 0, %5 \n\t" // a2[0], a2[1]
++ "lxvd2x 45, %10, %5 \n\t" // a2[2], a2[3]
+
+- "stxvd2x 40, 0, %2 \n\t" // y0, y1
+- "stxvd2x 41,%4, %2 \n\t" // y2, y3
++ "xvmaddadp 36, 46, 35 \n\t"
++ "addi %5, %5, 32 \n\t"
++ "xvmaddadp 37, 47, 35 \n\t"
+
+- "lxvd2x 54, 0, %9 \n\t" // a3[0], a3[1]
+- "lxvd2x 55,%4, %9 \n\t" // a3[2], a3[3]
++ "stxvd2x 36, 0, %2 \n\t" // y0, y1
++ "stxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "addi %9, %9, 32 \n\t"
+- "addi %2, %2, 32 \n\t"
++ "lxvd2x 46, 0, %6 \n\t" // a3[0], a3[1]
++ "lxvd2x 47, %10, %6 \n\t" // a3[2], a3[3]
+
+- "addic. %0 , %0 , -4 \n\t"
+- "ble 2f \n\t"
++ "addi %6, %6, 32 \n\t"
++ "addi %2, %2, 32 \n\t"
+
++ "addic. %1, %1, -4 \n\t"
++ "ble 2f \n\t"
+
+- "lxvd2x 40, 0, %2 \n\t" // y0, y1
+- "lxvd2x 41,%4, %2 \n\t" // y2, y3
+-
+- "xvmaddadp 40, 48, 32 \n\t"
+- "xvmaddadp 41, 49, 32 \n\t"
+
+- "lxvd2x 48, 0, %6 \n\t" // a0[0], a0[1]
+- "lxvd2x 49,%4, %6 \n\t" // a0[2], a0[3]
++ "lxvd2x 36, 0, %2 \n\t" // y0, y1
++ "lxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "xvmaddadp 40, 50, 33 \n\t"
+- "addi %6, %6, 32 \n\t"
+- "xvmaddadp 41, 51, 33 \n\t"
++ "xvmaddadp 36, 40, 32 \n\t"
++ "xvmaddadp 37, 41, 32 \n\t"
+
+- "lxvd2x 50, 0, %7 \n\t" // a1[0], a1[1]
+- "lxvd2x 51,%4, %7 \n\t" // a1[2], a1[3]
++ "lxvd2x 40, 0, %3 \n\t" // a0[0], a0[1]
++ "lxvd2x 41, %10, %3 \n\t" // a0[2], a0[3]
+
+- "xvmaddadp 40, 52, 34 \n\t"
+- "addi %7, %7, 32 \n\t"
+- "xvmaddadp 41, 53, 34 \n\t"
++ "xvmaddadp 36, 42, 33 \n\t"
++ "addi %3, %3, 32 \n\t"
++ "xvmaddadp 37, 43, 33 \n\t"
+
+- "lxvd2x 52, 0, %8 \n\t" // a2[0], a2[1]
+- "lxvd2x 53,%4, %8 \n\t" // a2[2], a2[3]
++ "lxvd2x 42, 0, %4 \n\t" // a1[0], a1[1]
++ "lxvd2x 43, %10, %4 \n\t" // a1[2], a1[3]
+
+- "xvmaddadp 40, 54, 35 \n\t"
+- "addi %8, %8, 32 \n\t"
+- "xvmaddadp 41, 55, 35 \n\t"
++ "xvmaddadp 36, 44, 34 \n\t"
++ "addi %4, %4, 32 \n\t"
++ "xvmaddadp 37, 45, 34 \n\t"
+
+- "stxvd2x 40, 0, %2 \n\t" // y0, y1
+- "stxvd2x 41,%4, %2 \n\t" // y2, y3
++ "lxvd2x 44, 0, %5 \n\t" // a2[0], a2[1]
++ "lxvd2x 45, %10, %5 \n\t" // a2[2], a2[3]
+
+- "lxvd2x 54, 0, %9 \n\t" // a3[0], a3[1]
+- "lxvd2x 55,%4, %9 \n\t" // a3[2], a3[3]
++ "xvmaddadp 36, 46, 35 \n\t"
++ "addi %5, %5, 32 \n\t"
++ "xvmaddadp 37, 47, 35 \n\t"
+
+- "addi %9, %9, 32 \n\t"
+- "addi %2, %2, 32 \n\t"
++ "stxvd2x 36, 0, %2 \n\t" // y0, y1
++ "stxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "addic. %0 , %0 , -4 \n\t"
+- "ble 2f \n\t"
++ "lxvd2x 46, 0, %6 \n\t" // a3[0], a3[1]
++ "lxvd2x 47, %10, %6 \n\t" // a3[2], a3[3]
+
++ "addi %6, %6, 32 \n\t"
++ "addi %2, %2, 32 \n\t"
+
+- "lxvd2x 40, 0, %2 \n\t" // y0, y1
+- "lxvd2x 41,%4, %2 \n\t" // y2, y3
+-
+- "xvmaddadp 40, 48, 32 \n\t"
+- "xvmaddadp 41, 49, 32 \n\t"
++ "addic. %1, %1, -4 \n\t"
++ "ble 2f \n\t"
+
+- "lxvd2x 48, 0, %6 \n\t" // a0[0], a0[1]
+- "lxvd2x 49,%4, %6 \n\t" // a0[2], a0[3]
+
+- "xvmaddadp 40, 50, 33 \n\t"
+- "addi %6, %6, 32 \n\t"
+- "xvmaddadp 41, 51, 33 \n\t"
++ "lxvd2x 36, 0, %2 \n\t" // y0, y1
++ "lxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "lxvd2x 50, 0, %7 \n\t" // a1[0], a1[1]
+- "lxvd2x 51,%4, %7 \n\t" // a1[2], a1[3]
++ "xvmaddadp 36, 40, 32 \n\t"
++ "xvmaddadp 37, 41, 32 \n\t"
+
+- "xvmaddadp 40, 52, 34 \n\t"
+- "addi %7, %7, 32 \n\t"
+- "xvmaddadp 41, 53, 34 \n\t"
++ "lxvd2x 40, 0, %3 \n\t" // a0[0], a0[1]
++ "lxvd2x 41, %10, %3 \n\t" // a0[2], a0[3]
+
+- "lxvd2x 52, 0, %8 \n\t" // a2[0], a2[1]
+- "lxvd2x 53,%4, %8 \n\t" // a2[2], a2[3]
++ "xvmaddadp 36, 42, 33 \n\t"
++ "addi %3, %3, 32 \n\t"
++ "xvmaddadp 37, 43, 33 \n\t"
+
+- "xvmaddadp 40, 54, 35 \n\t"
+- "addi %8, %8, 32 \n\t"
+- "xvmaddadp 41, 55, 35 \n\t"
++ "lxvd2x 42, 0, %4 \n\t" // a1[0], a1[1]
++ "lxvd2x 43, %10, %4 \n\t" // a1[2], a1[3]
+
+- "stxvd2x 40, 0, %2 \n\t" // y0, y1
+- "stxvd2x 41,%4, %2 \n\t" // y2, y3
++ "xvmaddadp 36, 44, 34 \n\t"
++ "addi %4, %4, 32 \n\t"
++ "xvmaddadp 37, 45, 34 \n\t"
+
+- "lxvd2x 54, 0, %9 \n\t" // a3[0], a3[1]
+- "lxvd2x 55,%4, %9 \n\t" // a3[2], a3[3]
++ "lxvd2x 44, 0, %5 \n\t" // a2[0], a2[1]
++ "lxvd2x 45, %10, %5 \n\t" // a2[2], a2[3]
+
+- "addi %9, %9, 32 \n\t"
+- "addi %2, %2, 32 \n\t"
++ "xvmaddadp 36, 46, 35 \n\t"
++ "addi %5, %5, 32 \n\t"
++ "xvmaddadp 37, 47, 35 \n\t"
+
+- "addic. %0 , %0 , -4 \n\t"
+- "bgt 1b \n\t"
++ "stxvd2x 36, 0, %2 \n\t" // y0, y1
++ "stxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "2: \n\t"
++ "lxvd2x 46, 0, %6 \n\t" // a3[0], a3[1]
++ "lxvd2x 47, %10, %6 \n\t" // a3[2], a3[3]
+
+- "lxvd2x 40, 0, %2 \n\t" // y0, y1
+- "lxvd2x 41,%4, %2 \n\t" // y2, y3
++ "addi %6, %6, 32 \n\t"
++ "addi %2, %2, 32 \n\t"
+
+- "xvmaddadp 40, 48, 32 \n\t"
+- "xvmaddadp 41, 49, 32 \n\t"
++ "addic. %1, %1, -4 \n\t"
++ "bgt 1b \n"
+
+- "xvmaddadp 40, 50, 33 \n\t"
+- "xvmaddadp 41, 51, 33 \n\t"
++ "2: \n\t"
+
+- "xvmaddadp 40, 52, 34 \n\t"
+- "xvmaddadp 41, 53, 34 \n\t"
++ "lxvd2x 36, 0, %2 \n\t" // y0, y1
++ "lxvd2x 37, %10, %2 \n\t" // y2, y3
+
+- "xvmaddadp 40, 54, 35 \n\t"
+- "xvmaddadp 41, 55, 35 \n\t"
++ "xvmaddadp 36, 40, 32 \n\t"
++ "xvmaddadp 37, 41, 32 \n\t"
+
+- "stxvd2x 40, 0, %2 \n\t" // y0, y1
+- "stxvd2x 41,%4, %2 \n\t" // y2, y3
++ "xvmaddadp 36, 42, 33 \n\t"
++ "xvmaddadp 37, 43, 33 \n\t"
+
+- :
+- :
+- "r" (i), // 0
+- "r" (x), // 1
+- "r" (y1), // 2
+- "r" (o8), // 3
+- "r" (o16), // 4
+- "r" (o24), // 5
+- "r" (a0), // 6
+- "r" (a1), // 7
+- "r" (a2), // 8
+- "r" (a3), // 9
+- "r" (pre) // 10
+- : "cr0", "%0", "%2" , "%6", "%7", "%8", "%9", "memory"
+- );
++ "xvmaddadp 36, 44, 34 \n\t"
++ "xvmaddadp 37, 45, 34 \n\t"
+
+-}
++ "xvmaddadp 36, 46, 35 \n\t"
++ "xvmaddadp 37, 47, 35 \n\t"
+
++ "stxvd2x 36, 0, %2 \n\t" // y0, y1
++ "stxvd2x 37, %10, %2 \n" // y2, y3
+
++ "#n=%1 ap=%11 lda=%12 x=%7=%9 y=%0=%2 alpha=%8 o16=%10\n"
++ "#a0=%3 a1=%4 a2=%5 a3=%6"
++ :
++ "=m" (*y),
++ "+r" (n), // 1
++ "+b" (y), // 2
++ "=b" (a0), // 3
++ "=b" (a1), // 4
++ "=&b" (a2), // 5
++ "=&b" (a3) // 6
++ :
++ "m" (*x),
++ "d" (alpha), // 8
++ "r" (x), // 9
++ "b" (16), // 10
++ "3" (ap), // 11
++ "4" (lda) // 12
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/drot.c b/kernel/power/drot.c
+index c93f69b12..3e107486f 100644
+--- a/kernel/power/drot.c
++++ b/kernel/power/drot.c
+@@ -46,7 +46,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_16
+
+-static void drot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
++static void drot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT c, FLOAT s)
+ {
+
+ BLASLONG i=0;
+@@ -56,8 +56,6 @@ static void drot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
+ FLOAT y00, y01, y02, y03;
+ FLOAT *x1=x;
+ FLOAT *y1=y;
+- FLOAT c1=*c;
+- FLOAT s1=*s;
+
+ while ( i<n )
+ {
+@@ -71,14 +69,14 @@ static void drot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
+ x03 = x1[3];
+ y03 = y1[3];
+
+- f0 = c1*x00 + s1*y00;
+- g0 = c1*y00 - s1*x00;
+- f1 = c1*x01 + s1*y01;
+- g1 = c1*y01 - s1*x01;
+- f2 = c1*x02 + s1*y02;
+- g2 = c1*y02 - s1*x02;
+- f3 = c1*x03 + s1*y03;
+- g3 = c1*y03 - s1*x03;
++ f0 = c*x00 + s*y00;
++ g0 = c*y00 - s*x00;
++ f1 = c*x01 + s*y01;
++ g1 = c*y01 - s*x01;
++ f2 = c*x02 + s*y02;
++ g2 = c*y02 - s*x02;
++ f3 = c*x03 + s*y03;
++ g3 = c*y03 - s*x03;
+
+ x1[0] = f0;
+ y1[0] = g0;
+@@ -106,8 +104,6 @@ int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT
+ {
+ BLASLONG i=0;
+ BLASLONG ix=0,iy=0;
+- FLOAT c1[4] __attribute__ ((aligned (16)));;
+- FLOAT s1[4] __attribute__ ((aligned (16)));;
+ FLOAT *x1=x;
+ FLOAT *y1=y;
+ FLOAT temp;
+@@ -120,15 +116,7 @@ int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT
+ BLASLONG n1 = n & -16;
+ if ( n1 > 0 )
+ {
+- c1[0]=c;
+- c1[1]=c;
+- c1[2]=c;
+- c1[3]=c;
+- s1[0]=s;
+- s1[1]=s;
+- s1[2]=s;
+- s1[3]=s;
+- drot_kernel_16(n1, x1, y1, c1, s1);
++ drot_kernel_16(n1, x1, y1, c, s);
+ i=n1;
+ }
+
+diff --git a/kernel/power/drot_microk_power8.c b/kernel/power/drot_microk_power8.c
+index 4444ac7eb..016b7764d 100644
+--- a/kernel/power/drot_microk_power8.c
++++ b/kernel/power/drot_microk_power8.c
+@@ -38,174 +38,176 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_16 1
+
+-static void drot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) __attribute__ ((noinline));
+-
+-static void drot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
++static void drot_kernel_16 (long n, double *x, double *y, double c, double s)
+ {
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++ __vector double t4;
++ __vector double t5;
++ __vector double t6;
++ __vector double t7;
+
++ __asm__
++ (
++ "xxspltd 36, %x13, 0 \n\t" // load c to both dwords
++ "xxspltd 37, %x14, 0 \n\t" // load s to both dwords
+
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxsdx 36 , %5, %3 \n\t" // load c
+- "lxsdx 37 , %5, %4 \n\t" // load s
+- "addi %8 , %8, -8 \n\t"
+- "addi %9 , %9, -8 \n\t"
+-
+- "xxspltd 36 , 36, 0 \n\t"
+- "xxspltd 37 , 37, 0 \n\t"
+-
+- "lxvd2x 32, 0, %1 \n\t" // load x
+- "lxvd2x 33, %5, %1 \n\t"
+- "lxvd2x 34, %6, %1 \n\t"
+- "lxvd2x 35, %7, %1 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t" // load y
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "addi %1, %1, 64 \n\t"
+- "addi %2, %2, 64 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "xvmuldp 48, 32, 36 \n\t" // c * x
+- "xvmuldp 49, 33, 36 \n\t"
+- "xvmuldp 50, 34, 36 \n\t"
+- "xvmuldp 51, 35, 36 \n\t"
+-
+- "xvmuldp 56, 40, 36 \n\t" // c * y
+- "xvmuldp 57, 41, 36 \n\t"
+- "xvmuldp 58, 42, 36 \n\t"
+- "xvmuldp 59, 43, 36 \n\t"
+-
+- "xvmuldp 52, 32, 37 \n\t" // s * x
+- "xvmuldp 53, 33, 37 \n\t"
+-
+- "lxvd2x 32, 0, %1 \n\t" // load x
+- "lxvd2x 33, %5, %1 \n\t"
+-
+- "xvmuldp 54, 34, 37 \n\t"
+- "xvmuldp 55, 35, 37 \n\t"
+-
+- "lxvd2x 34, %6, %1 \n\t"
+- "lxvd2x 35, %7, %1 \n\t"
+-
+- "xvmuldp 60, 40, 37 \n\t" // s * y
+- "xvmuldp 61, 41, 37 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t" // load y
+- "lxvd2x 41, %5, %2 \n\t"
+-
+- "xvmuldp 62, 42, 37 \n\t"
+- "xvmuldp 63, 43, 37 \n\t"
+-
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "xvadddp 48, 48 , 60 \n\t" // c * x + s * y
+- "xvadddp 49, 49 , 61 \n\t" // c * x + s * y
+-
+- "addi %1, %1, 64 \n\t"
+- "addi %2, %2, 64 \n\t"
+-
+- "xvadddp 50, 50 , 62 \n\t" // c * x + s * y
+- "xvadddp 51, 51 , 63 \n\t" // c * x + s * y
+-
+- "xvsubdp 56, 56 , 52 \n\t" // c * y - s * x
+- "xvsubdp 57, 57 , 53 \n\t" // c * y - s * x
+- "xvsubdp 58, 58 , 54 \n\t" // c * y - s * x
+- "xvsubdp 59, 59 , 55 \n\t" // c * y - s * x
+-
+- "stxvd2x 48, 0, %8 \n\t" // store x
+- "stxvd2x 49, %5, %8 \n\t"
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
+-
+- "stxvd2x 56, 0, %9 \n\t" // store y
+- "stxvd2x 57, %5, %9 \n\t"
+- "stxvd2x 58, %6, %9 \n\t"
+- "stxvd2x 59, %7, %9 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+- "addi %9, %9, 64 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmuldp 48, 32, 36 \n\t" // c * x
+- "xvmuldp 49, 33, 36 \n\t"
+- "xvmuldp 50, 34, 36 \n\t"
+- "xvmuldp 51, 35, 36 \n\t"
+-
+- "xvmuldp 56, 40, 36 \n\t" // c * y
+- "xvmuldp 57, 41, 36 \n\t"
+- "xvmuldp 58, 42, 36 \n\t"
+- "xvmuldp 59, 43, 36 \n\t"
+-
+- "xvmuldp 52, 32, 37 \n\t" // s * x
+- "xvmuldp 53, 33, 37 \n\t"
+- "xvmuldp 54, 34, 37 \n\t"
+- "xvmuldp 55, 35, 37 \n\t"
+-
+- "xvmuldp 60, 40, 37 \n\t" // s * y
+- "xvmuldp 61, 41, 37 \n\t"
+- "xvmuldp 62, 42, 37 \n\t"
+- "xvmuldp 63, 43, 37 \n\t"
+-
+- "xvadddp 48, 48 , 60 \n\t" // c * x + s * y
+- "xvadddp 49, 49 , 61 \n\t" // c * x + s * y
+- "xvadddp 50, 50 , 62 \n\t" // c * x + s * y
+- "xvadddp 51, 51 , 63 \n\t" // c * x + s * y
+-
+- "xvsubdp 56, 56 , 52 \n\t" // c * y - s * x
+- "xvsubdp 57, 57 , 53 \n\t" // c * y - s * x
+- "xvsubdp 58, 58 , 54 \n\t" // c * y - s * x
+- "xvsubdp 59, 59 , 55 \n\t" // c * y - s * x
+-
+- "stxvd2x 48, 0, %8 \n\t" // store x
+- "stxvd2x 49, %5, %8 \n\t"
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
++ "lxvd2x 32, 0, %3 \n\t" // load x
++ "lxvd2x 33, %15, %3 \n\t"
++ "lxvd2x 34, %16, %3 \n\t"
++ "lxvd2x 35, %17, %3 \n\t"
+
+- "stxvd2x 56, 0, %9 \n\t" // store y
+- "stxvd2x 57, %5, %9 \n\t"
+- "stxvd2x 58, %6, %9 \n\t"
+- "stxvd2x 59, %7, %9 \n\t"
++ "lxvd2x 48, 0, %4 \n\t" // load y
++ "lxvd2x 49, %15, %4 \n\t"
++ "lxvd2x 50, %16, %4 \n\t"
++ "lxvd2x 51, %17, %4 \n\t"
+
++ "addi %3, %3, 64 \n\t"
++ "addi %4, %4, 64 \n\t"
+
++ "addic. %2, %2, -8 \n\t"
++ "ble 2f \n\t"
+
+- :
+- :
+- "r" (i), // 0
+- "r" (x1), // 1
+- "r" (y1), // 2
+- "r" (c), // 3
+- "r" (s), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (x2), // 8
+- "r" (y2) // 9
+- : "cr0", "%0", "%1" , "%2", "%8", "%9", "memory"
+- );
++ ".p2align 5 \n"
++ "1: \n\t"
+
+-}
++ "xvmuldp 40, 32, 36 \n\t" // c * x
++ "xvmuldp 41, 33, 36 \n\t"
++ "xvmuldp 42, 34, 36 \n\t"
++ "xvmuldp 43, 35, 36 \n\t"
+
++ "xvmuldp %x5, 48, 36 \n\t" // c * y
++ "xvmuldp %x6, 49, 36 \n\t"
++ "xvmuldp %x7, 50, 36 \n\t"
++ "xvmuldp %x8, 51, 36 \n\t"
+
++ "xvmuldp 44, 32, 37 \n\t" // s * x
++ "xvmuldp 45, 33, 37 \n\t"
++
++ "lxvd2x 32, 0, %3 \n\t" // load x
++ "lxvd2x 33, %15, %3 \n\t"
++
++ "xvmuldp 46, 34, 37 \n\t"
++ "xvmuldp 47, 35, 37 \n\t"
++
++ "lxvd2x 34, %16, %3 \n\t"
++ "lxvd2x 35, %17, %3 \n\t"
++
++ "xvmuldp %x9, 48, 37 \n\t" // s * y
++ "xvmuldp %x10, 49, 37 \n\t"
++
++ "lxvd2x 48, 0, %4 \n\t" // load y
++ "lxvd2x 49, %15, %4 \n\t"
++
++ "xvmuldp %x11, 50, 37 \n\t"
++ "xvmuldp %x12, 51, 37 \n\t"
++
++ "lxvd2x 50, %16, %4 \n\t"
++ "lxvd2x 51, %17, %4 \n\t"
++
++ "xvadddp 40, 40, %x9 \n\t" // c * x + s * y
++ "xvadddp 41, 41, %x10 \n\t" // c * x + s * y
++
++ "addi %3, %3, -64 \n\t"
++ "addi %4, %4, -64 \n\t"
++
++ "xvadddp 42, 42, %x11 \n\t" // c * x + s * y
++ "xvadddp 43, 43, %x12 \n\t" // c * x + s * y
++
++ "xvsubdp %x5, %x5, 44 \n\t" // c * y - s * x
++ "xvsubdp %x6, %x6, 45 \n\t" // c * y - s * x
++ "xvsubdp %x7, %x7, 46 \n\t" // c * y - s * x
++ "xvsubdp %x8, %x8, 47 \n\t" // c * y - s * x
++
++ "stxvd2x 40, 0, %3 \n\t" // store x
++ "stxvd2x 41, %15, %3 \n\t"
++ "stxvd2x 42, %16, %3 \n\t"
++ "stxvd2x 43, %17, %3 \n\t"
++
++ "stxvd2x %x5, 0, %4 \n\t" // store y
++ "stxvd2x %x6, %15, %4 \n\t"
++ "stxvd2x %x7, %16, %4 \n\t"
++ "stxvd2x %x8, %17, %4 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %4, %4, 128 \n\t"
++
++ "addic. %2, %2, -8 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmuldp 40, 32, 36 \n\t" // c * x
++ "xvmuldp 41, 33, 36 \n\t"
++ "xvmuldp 42, 34, 36 \n\t"
++ "xvmuldp 43, 35, 36 \n\t"
++
++ "xvmuldp %x5, 48, 36 \n\t" // c * y
++ "xvmuldp %x6, 49, 36 \n\t"
++ "xvmuldp %x7, 50, 36 \n\t"
++ "xvmuldp %x8, 51, 36 \n\t"
++
++ "xvmuldp 44, 32, 37 \n\t" // s * x
++ "xvmuldp 45, 33, 37 \n\t"
++ "xvmuldp 46, 34, 37 \n\t"
++ "xvmuldp 47, 35, 37 \n\t"
++
++ "xvmuldp %x9, 48, 37 \n\t" // s * y
++ "xvmuldp %x10, 49, 37 \n\t"
++ "xvmuldp %x11, 50, 37 \n\t"
++ "xvmuldp %x12, 51, 37 \n\t"
++
++ "addi %3, %3, -64 \n\t"
++ "addi %4, %4, -64 \n\t"
++
++ "xvadddp 40, 40, %x9 \n\t" // c * x + s * y
++ "xvadddp 41, 41, %x10 \n\t" // c * x + s * y
++ "xvadddp 42, 42, %x11 \n\t" // c * x + s * y
++ "xvadddp 43, 43, %x12 \n\t" // c * x + s * y
++
++ "xvsubdp %x5, %x5, 44 \n\t" // c * y - s * x
++ "xvsubdp %x6, %x6, 45 \n\t" // c * y - s * x
++ "xvsubdp %x7, %x7, 46 \n\t" // c * y - s * x
++ "xvsubdp %x8, %x8, 47 \n\t" // c * y - s * x
++
++ "stxvd2x 40, 0, %3 \n\t" // store x
++ "stxvd2x 41, %15, %3 \n\t"
++ "stxvd2x 42, %16, %3 \n\t"
++ "stxvd2x 43, %17, %3 \n\t"
++
++ "stxvd2x %x5, 0, %4 \n\t" // store y
++ "stxvd2x %x6, %15, %4 \n\t"
++ "stxvd2x %x7, %16, %4 \n\t"
++ "stxvd2x %x8, %17, %4 \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 c=%13 s=%14 o16=%15 o32=%16 o48=%17\n"
++ "#t0=%x5 t1=%x6 t2=%x7 t3=%x8 t4=%x9 t5=%x10 t6=%x11 t7=%x12"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y), // 4
++ "=wa" (t0), // 5
++ "=wa" (t1), // 6
++ "=wa" (t2), // 7
++ "=wa" (t3), // 8
++ "=wa" (t4), // 9
++ "=wa" (t5), // 10
++ "=wa" (t6), // 11
++ "=wa" (t7) // 12
++ :
++ "d" (c), // 13
++ "d" (s), // 14
++ "b" (16), // 15
++ "b" (32), // 16
++ "b" (48) // 17
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++}
+diff --git a/kernel/power/dscal.c b/kernel/power/dscal.c
+index c62a56315..f32dc4bad 100644
+--- a/kernel/power/dscal.c
++++ b/kernel/power/dscal.c
+@@ -41,11 +41,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #if !defined(HAVE_KERNEL_8)
+
+-static void dscal_kernel_8( BLASLONG n, FLOAT *da , FLOAT *x )
++static void dscal_kernel_8 (BLASLONG n, FLOAT *x, FLOAT alpha)
+ {
+
+ BLASLONG i;
+- FLOAT alpha = *da;
+
+ for( i=0; i<n; i+=8 )
+ {
+@@ -62,7 +61,7 @@ static void dscal_kernel_8( BLASLONG n, FLOAT *da , FLOAT *x )
+
+ }
+
+-static void dscal_kernel_8_zero( BLASLONG n, FLOAT *da , FLOAT *x )
++static void dscal_kernel_8_zero (BLASLONG n, FLOAT *x)
+ {
+
+ BLASLONG i;
+@@ -102,10 +101,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ BLASLONG n1 = n & -16;
+ if ( n1 > 0 )
+ {
+- FLOAT alpha[2];
+- alpha[0]=da;
+- alpha[1]=da;
+- dscal_kernel_8_zero(n1 , alpha , x);
++ dscal_kernel_8_zero(n1, x);
+ j=n1;
+ }
+
+@@ -123,10 +119,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ BLASLONG n1 = n & -16;
+ if ( n1 > 0 )
+ {
+- FLOAT alpha[2];
+- alpha[0]=da;
+- alpha[1]=da;
+- dscal_kernel_8(n1 , alpha , x);
++ dscal_kernel_8(n1, x, da);
+ j=n1;
+ }
+ while(j < n)
+diff --git a/kernel/power/dscal_microk_power8.c b/kernel/power/dscal_microk_power8.c
+index d90c3d80c..04898eb3d 100644
+--- a/kernel/power/dscal_microk_power8.c
++++ b/kernel/power/dscal_microk_power8.c
+@@ -35,185 +35,149 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_8 1
+
+-static void dscal_kernel_8( BLASLONG n, FLOAT *alpha, FLOAT *x) __attribute__ ((noinline));
+-
+-static void dscal_kernel_8( BLASLONG n, FLOAT *alpha, FLOAT *x)
++static void dscal_kernel_8 (long n, double *x, double alpha)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *x2=x+1;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxsdx 33, 0, %3 \n\t"
+- "xxspltd 32, 33, 0 \n\t"
+- "addi %1, %1, -8 \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "xvmuldp 48, 40, 32 \n\t"
+- "xvmuldp 49, 41, 32 \n\t"
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "xvmuldp 50, 42, 32 \n\t"
+- "xvmuldp 51, 43, 32 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "xvmuldp 52, 44, 32 \n\t"
+- "xvmuldp 53, 45, 32 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "xvmuldp 54, 46, 32 \n\t"
+- "xvmuldp 55, 47, 32 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "stxvd2x 48, 0, %1 \n\t"
+- "stxvd2x 49, %5, %1 \n\t"
+- "stxvd2x 50, %6, %1 \n\t"
+- "stxvd2x 51, %7, %1 \n\t"
+- "stxvd2x 52, %8, %1 \n\t"
+- "stxvd2x 53, %9, %1 \n\t"
+- "stxvd2x 54, %10, %1 \n\t"
+- "stxvd2x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmuldp 48, 40, 32 \n\t"
+- "xvmuldp 49, 41, 32 \n\t"
+- "xvmuldp 50, 42, 32 \n\t"
+- "xvmuldp 51, 43, 32 \n\t"
+- "xvmuldp 52, 44, 32 \n\t"
+- "xvmuldp 53, 45, 32 \n\t"
+- "xvmuldp 54, 46, 32 \n\t"
+- "xvmuldp 55, 47, 32 \n\t"
+-
+- "stxvd2x 48, 0, %1 \n\t"
+- "stxvd2x 49, %5, %1 \n\t"
+- "stxvd2x 50, %6, %1 \n\t"
+- "stxvd2x 51, %7, %1 \n\t"
+- "stxvd2x 52, %8, %1 \n\t"
+- "stxvd2x 53, %9, %1 \n\t"
+- "stxvd2x 54, %10, %1 \n\t"
+- "stxvd2x 55, %11, %1 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (x2), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
+-static void dscal_kernel_8_zero( BLASLONG n, FLOAT *alpha, FLOAT *x) __attribute__ ((noinline));
+-
+-static void dscal_kernel_8_zero( BLASLONG n, FLOAT *alpha, FLOAT *x)
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xxspltd %x3, %x3, 0 \n\t"
++
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %4, %2 \n\t"
++ "lxvd2x 34, %5, %2 \n\t"
++ "lxvd2x 35, %6, %2 \n\t"
++ "lxvd2x 36, %7, %2 \n\t"
++ "lxvd2x 37, %8, %2 \n\t"
++ "lxvd2x 38, %9, %2 \n\t"
++ "lxvd2x 39, %10, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmuldp 40, 32, %x3 \n\t"
++ "xvmuldp 41, 33, %x3 \n\t"
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %4, %2 \n\t"
++ "xvmuldp 42, 34, %x3 \n\t"
++ "xvmuldp 43, 35, %x3 \n\t"
++ "lxvd2x 34, %5, %2 \n\t"
++ "lxvd2x 35, %6, %2 \n\t"
++ "xvmuldp 44, 36, %x3 \n\t"
++ "xvmuldp 45, 37, %x3 \n\t"
++ "lxvd2x 36, %7, %2 \n\t"
++ "lxvd2x 37, %8, %2 \n\t"
++ "xvmuldp 46, 38, %x3 \n\t"
++ "xvmuldp 47, 39, %x3 \n\t"
++ "lxvd2x 38, %9, %2 \n\t"
++ "lxvd2x 39, %10, %2 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "stxvd2x 40, 0, %2 \n\t"
++ "stxvd2x 41, %4, %2 \n\t"
++ "stxvd2x 42, %5, %2 \n\t"
++ "stxvd2x 43, %6, %2 \n\t"
++ "stxvd2x 44, %7, %2 \n\t"
++ "stxvd2x 45, %8, %2 \n\t"
++ "stxvd2x 46, %9, %2 \n\t"
++ "stxvd2x 47, %10, %2 \n\t"
++
++ "addi %2, %2, 256 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmuldp 40, 32, %x3 \n\t"
++ "xvmuldp 41, 33, %x3 \n\t"
++ "xvmuldp 42, 34, %x3 \n\t"
++ "xvmuldp 43, 35, %x3 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "xvmuldp 44, 36, %x3 \n\t"
++ "xvmuldp 45, 37, %x3 \n\t"
++ "xvmuldp 46, 38, %x3 \n\t"
++ "xvmuldp 47, 39, %x3 \n\t"
++
++ "stxvd2x 40, 0, %2 \n\t"
++ "stxvd2x 41, %4, %2 \n\t"
++ "stxvd2x 42, %5, %2 \n\t"
++ "stxvd2x 43, %6, %2 \n\t"
++ "stxvd2x 44, %7, %2 \n\t"
++ "stxvd2x 45, %8, %2 \n\t"
++ "stxvd2x 46, %9, %2 \n\t"
++ "stxvd2x 47, %10, %2 \n"
++
++ "#n=%1 alpha=%3 x=%0=%2 o16=%4 o32=%5 o48=%6 o64=%7 o80=%8 o96=%9 o112=%10"
++ :
++ "+m" (*x),
++ "+r" (n), // 1
++ "+b" (x) // 2
++ :
++ "d" (alpha), // 3
++ "b" (16), // 4
++ "b" (32), // 5
++ "b" (48), // 6
++ "b" (64), // 7
++ "b" (80), // 8
++ "b" (96), // 9
++ "b" (112) // 10
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
++
++
++static void dscal_kernel_8_zero (long n, double *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *x2=x+1;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "xxlxor 32 , 32 , 32 \n\t"
+- "addi %1, %1, -8 \n\t"
+-
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvd2x 32, 0, %1 \n\t"
+- "stxvd2x 32, %5, %1 \n\t"
+- "stxvd2x 32, %6, %1 \n\t"
+- "stxvd2x 32, %7, %1 \n\t"
+- "stxvd2x 32, %8, %1 \n\t"
+- "stxvd2x 32, %9, %1 \n\t"
+- "stxvd2x 32, %10, %1 \n\t"
+- "stxvd2x 32, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (x2), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __vector double t0;
++
++ __asm__
++ (
++ "xxlxor %x3, %x3, %x3 \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvd2x %x3, 0, %2 \n\t"
++ "stxvd2x %x3, %4, %2 \n\t"
++ "stxvd2x %x3, %5, %2 \n\t"
++ "stxvd2x %x3, %6, %2 \n\t"
++ "stxvd2x %x3, %7, %2 \n\t"
++ "stxvd2x %x3, %8, %2 \n\t"
++ "stxvd2x %x3, %9, %2 \n\t"
++ "stxvd2x %x3, %10, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "bgt 1b \n"
++
++ "#n=%1 x=%0=%2 t0=%x3 o16=%4 o32=%5 o48=%6 o64=%7 o80=%8 o96=%9 o112=%10"
++ :
++ "=m" (*x),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0) // 3
++ :
++ "b" (16), // 4
++ "b" (32), // 5
++ "b" (48), // 6
++ "b" (64), // 7
++ "b" (80), // 8
++ "b" (96), // 9
++ "b" (112) // 10
++ :
++ "cr0"
++ );
++}
+diff --git a/kernel/power/dswap_microk_power8.c b/kernel/power/dswap_microk_power8.c
+index 77747c3b9..31eff3449 100644
+--- a/kernel/power/dswap_microk_power8.c
++++ b/kernel/power/dswap_microk_power8.c
+@@ -35,146 +35,124 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void dswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void dswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void dswap_kernel_32 (long n, double *x, double *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "addi %3, %3, -8 \n\t"
+- "addi %4, %4, -8 \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "lxvd2x 32, 0, %2 \n\t"
+- "lxvd2x 33, %5, %2 \n\t"
+- "lxvd2x 34, %6, %2 \n\t"
+- "lxvd2x 35, %7, %2 \n\t"
+- "lxvd2x 36, %8, %2 \n\t"
+- "lxvd2x 37, %9, %2 \n\t"
+- "lxvd2x 38, %10, %2 \n\t"
+- "lxvd2x 39, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 48, 0, %1 \n\t"
+- "lxvd2x 49, %5, %1 \n\t"
+- "lxvd2x 50, %6, %1 \n\t"
+- "lxvd2x 51, %7, %1 \n\t"
+- "lxvd2x 52, %8, %1 \n\t"
+- "lxvd2x 53, %9, %1 \n\t"
+- "lxvd2x 54, %10, %1 \n\t"
+- "lxvd2x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "lxvd2x 56, 0, %1 \n\t"
+- "lxvd2x 57, %5, %1 \n\t"
+- "lxvd2x 58, %6, %1 \n\t"
+- "lxvd2x 59, %7, %1 \n\t"
+- "lxvd2x 60, %8, %1 \n\t"
+- "lxvd2x 61, %9, %1 \n\t"
+- "lxvd2x 62, %10, %1 \n\t"
+- "lxvd2x 63, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvd2x 32, 0, %3 \n\t"
+- "stxvd2x 33, %5, %3 \n\t"
+- "stxvd2x 34, %6, %3 \n\t"
+- "stxvd2x 35, %7, %3 \n\t"
+- "stxvd2x 36, %8, %3 \n\t"
+- "stxvd2x 37, %9, %3 \n\t"
+- "stxvd2x 38, %10, %3 \n\t"
+- "stxvd2x 39, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvd2x 40, 0, %3 \n\t"
+- "stxvd2x 41, %5, %3 \n\t"
+- "stxvd2x 42, %6, %3 \n\t"
+- "stxvd2x 43, %7, %3 \n\t"
+- "stxvd2x 44, %8, %3 \n\t"
+- "stxvd2x 45, %9, %3 \n\t"
+- "stxvd2x 46, %10, %3 \n\t"
+- "stxvd2x 47, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvd2x 48, 0, %4 \n\t"
+- "stxvd2x 49, %5, %4 \n\t"
+- "stxvd2x 50, %6, %4 \n\t"
+- "stxvd2x 51, %7, %4 \n\t"
+- "stxvd2x 52, %8, %4 \n\t"
+- "stxvd2x 53, %9, %4 \n\t"
+- "stxvd2x 54, %10, %4 \n\t"
+- "stxvd2x 55, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "stxvd2x 56, 0, %4 \n\t"
+- "stxvd2x 57, %5, %4 \n\t"
+- "stxvd2x 58, %6, %4 \n\t"
+- "stxvd2x 59, %7, %4 \n\t"
+- "stxvd2x 60, %8, %4 \n\t"
+- "stxvd2x 61, %9, %4 \n\t"
+- "stxvd2x 62, %10, %4 \n\t"
+- "stxvd2x 63, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (y2), // 3
+- "r" (x2), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "%3", "%4", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "lxvd2x 32, 0, %4 \n\t"
++ "lxvd2x 33, %5, %4 \n\t"
++ "lxvd2x 34, %6, %4 \n\t"
++ "lxvd2x 35, %7, %4 \n\t"
++ "lxvd2x 36, %8, %4 \n\t"
++ "lxvd2x 37, %9, %4 \n\t"
++ "lxvd2x 38, %10, %4 \n\t"
++ "lxvd2x 39, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "lxvd2x 40, 0, %4 \n\t"
++ "lxvd2x 41, %5, %4 \n\t"
++ "lxvd2x 42, %6, %4 \n\t"
++ "lxvd2x 43, %7, %4 \n\t"
++ "lxvd2x 44, %8, %4 \n\t"
++ "lxvd2x 45, %9, %4 \n\t"
++ "lxvd2x 46, %10, %4 \n\t"
++ "lxvd2x 47, %11, %4 \n\t"
++
++ "addi %4, %4, -128 \n\t"
++
++ "lxvd2x 48, 0, %3 \n\t"
++ "lxvd2x 49, %5, %3 \n\t"
++ "lxvd2x 50, %6, %3 \n\t"
++ "lxvd2x 51, %7, %3 \n\t"
++ "lxvd2x 0, %8, %3 \n\t"
++ "lxvd2x 1, %9, %3 \n\t"
++ "lxvd2x 2, %10, %3 \n\t"
++ "lxvd2x 3, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "lxvd2x 4, 0, %3 \n\t"
++ "lxvd2x 5, %5, %3 \n\t"
++ "lxvd2x 6, %6, %3 \n\t"
++ "lxvd2x 7, %7, %3 \n\t"
++ "lxvd2x 8, %8, %3 \n\t"
++ "lxvd2x 9, %9, %3 \n\t"
++ "lxvd2x 10, %10, %3 \n\t"
++ "lxvd2x 11, %11, %3 \n\t"
++
++ "addi %3, %3, -128 \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 48, 0, %4 \n\t"
++ "stxvd2x 49, %5, %4 \n\t"
++ "stxvd2x 50, %6, %4 \n\t"
++ "stxvd2x 51, %7, %4 \n\t"
++ "stxvd2x 0, %8, %4 \n\t"
++ "stxvd2x 1, %9, %4 \n\t"
++ "stxvd2x 2, %10, %4 \n\t"
++ "stxvd2x 3, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "stxvd2x 4, 0, %4 \n\t"
++ "stxvd2x 5, %5, %4 \n\t"
++ "stxvd2x 6, %6, %4 \n\t"
++ "stxvd2x 7, %7, %4 \n\t"
++ "stxvd2x 8, %8, %4 \n\t"
++ "stxvd2x 9, %9, %4 \n\t"
++ "stxvd2x 10, %10, %4 \n\t"
++ "stxvd2x 11, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "addic. %2, %2, -32 \n\t"
++ "bgt 1b \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y) // 4
++ :
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51","vs0","vs1","vs2","vs3",
++ "vs4","vs5","vs6","vs7","vs8","vs9","vs10","vs11"
++ );
++}
+diff --git a/kernel/power/sasum.c b/kernel/power/sasum.c
+index 43311f2ba..fb10b1d27 100644
+--- a/kernel/power/sasum.c
++++ b/kernel/power/sasum.c
+@@ -38,7 +38,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #if defined(DOUBLE)
+
+-#define ABS fabs
++#error supports float only
+
+ #else
+
+@@ -53,7 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_32
+
+-static void sasum_kernel_32(BLASLONG n, FLOAT *x1, FLOAT *svec)
++static FLOAT sasum_kernel_32(BLASLONG n, FLOAT *x1)
+ {
+
+ BLASLONG i=0;
+@@ -92,11 +92,7 @@ static void sasum_kernel_32(BLASLONG n, FLOAT *x1, FLOAT *svec)
+
+ }
+
+- svec[0] = sum0+sum1+sum2+sum3;
+- svec[1] = 0.0;
+- svec[2] = 0.0;
+- svec[3] = 0.0;
+-
++ return sum0+sum1+sum2+sum3;
+ }
+
+ #endif
+@@ -105,7 +101,6 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ {
+ BLASLONG i=0;
+ FLOAT sumf = 0.0;
+- FLOAT svec[4] __attribute__ ((aligned (16)));;
+ BLASLONG n1;
+
+ if (n <= 0 || inc_x <= 0) return(sumf);
+@@ -117,8 +112,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ if ( n1 > 0 )
+ {
+
+- sasum_kernel_32(n1, x, svec);
+- sumf = svec[0] + svec[1]+svec[2]+svec[3];
++ sumf = sasum_kernel_32(n1, x);
+ i=n1;
+ }
+
+diff --git a/kernel/power/sasum_microk_power8.c b/kernel/power/sasum_microk_power8.c
+index 847fffe04..25a969d62 100644
+--- a/kernel/power/sasum_microk_power8.c
++++ b/kernel/power/sasum_microk_power8.c
+@@ -34,144 +34,145 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_32 1
+-static void sasum_kernel_32( BLASLONG n, FLOAT *x, FLOAT *svec) __attribute__ ((noinline));
+
+-static void sasum_kernel_32( BLASLONG n, FLOAT *x, FLOAT *svec)
++static float sasum_kernel_32 (long n, float *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xvabssp 48, 40 \n\t"
+- "xvabssp 49, 41 \n\t"
+- "xvabssp 50, 42 \n\t"
+- "xvabssp 51, 43 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+-
+- "xvabssp 52, 44 \n\t"
+- "xvabssp 53, 45 \n\t"
+-
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+-
+- "xvabssp 54, 46 \n\t"
+- "xvabssp 55, 47 \n\t"
+-
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+-
+- "xvaddsp 32, 32, 48 \n\t"
+- "xvaddsp 33, 33, 49 \n\t"
+-
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "xvaddsp 34, 34, 50 \n\t"
+- "xvaddsp 35, 35, 51 \n\t"
+- "addi %2, %2, 128 \n\t"
+- "xvaddsp 36, 36, 52 \n\t"
+- "xvaddsp 37, 37, 53 \n\t"
+- "addic. %0 , %0 , -32 \n\t"
+- "xvaddsp 38, 38, 54 \n\t"
+- "xvaddsp 39, 39, 55 \n\t"
+-
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+-
+- "xvabssp 48, 40 \n\t"
+- "xvabssp 49, 41 \n\t"
+- "xvabssp 50, 42 \n\t"
+- "xvabssp 51, 43 \n\t"
+- "xvabssp 52, 44 \n\t"
+- "xvabssp 53, 45 \n\t"
+- "xvabssp 54, 46 \n\t"
+- "xvabssp 55, 47 \n\t"
+-
+- "xvaddsp 32, 32, 48 \n\t"
+- "xvaddsp 33, 33, 49 \n\t"
+- "xvaddsp 34, 34, 50 \n\t"
+- "xvaddsp 35, 35, 51 \n\t"
+- "xvaddsp 36, 36, 52 \n\t"
+- "xvaddsp 37, 37, 53 \n\t"
+- "xvaddsp 38, 38, 54 \n\t"
+- "xvaddsp 39, 39, 55 \n\t"
+-
+- "xvaddsp 32, 32, 33 \n\t"
+- "xvaddsp 34, 34, 35 \n\t"
+- "xvaddsp 36, 36, 37 \n\t"
+- "xvaddsp 38, 38, 39 \n\t"
+-
+- "xvaddsp 32, 32, 34 \n\t"
+- "xvaddsp 36, 36, 38 \n\t"
+-
+- "xvaddsp 32, 32, 36 \n\t"
+-
+-
+- "stxvw4x 32, 0, %3 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (svec), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2", "memory"
+- );
+-
+-}
+-
+-
++ float sum;
++ __vector float t0;
++ __vector float t1;
++ __vector float t2;
++ __vector float t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %8, %2 \n\t"
++ "lxvw4x 42, %9, %2 \n\t"
++ "lxvw4x 43, %10, %2 \n\t"
++ "lxvw4x 44, %11, %2 \n\t"
++ "lxvw4x 45, %12, %2 \n\t"
++ "lxvw4x 46, %13, %2 \n\t"
++ "lxvw4x 47, %14, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvabssp 48, 40 \n\t"
++ "xvabssp 49, 41 \n\t"
++ "xvabssp 50, 42 \n\t"
++ "xvabssp 51, 43 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %8, %2 \n\t"
++
++ "xvabssp %x3, 44 \n\t"
++ "xvabssp %x4, 45 \n\t"
++
++ "lxvw4x 42, %9, %2 \n\t"
++ "lxvw4x 43, %10, %2 \n\t"
++
++ "xvabssp %x5, 46 \n\t"
++ "xvabssp %x6, 47 \n\t"
++
++ "lxvw4x 44, %11, %2 \n\t"
++ "lxvw4x 45, %12, %2 \n\t"
++
++ "xvaddsp 32, 32, 48 \n\t"
++ "xvaddsp 33, 33, 49 \n\t"
++
++ "lxvw4x 46, %13, %2 \n\t"
++ "lxvw4x 47, %14, %2 \n\t"
++
++ "xvaddsp 34, 34, 50 \n\t"
++ "xvaddsp 35, 35, 51 \n\t"
++ "addi %2, %2, 128 \n\t"
++ "xvaddsp 36, 36, %x3 \n\t"
++ "xvaddsp 37, 37, %x4 \n\t"
++ "addic. %1, %1, -32 \n\t"
++ "xvaddsp 38, 38, %x5 \n\t"
++ "xvaddsp 39, 39, %x6 \n\t"
++
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvabssp 48, 40 \n\t"
++ "xvabssp 49, 41 \n\t"
++ "xvabssp 50, 42 \n\t"
++ "xvabssp 51, 43 \n\t"
++ "xvabssp %x3, 44 \n\t"
++ "xvabssp %x4, 45 \n\t"
++ "xvabssp %x5, 46 \n\t"
++ "xvabssp %x6, 47 \n\t"
++
++ "xvaddsp 32, 32, 48 \n\t"
++ "xvaddsp 33, 33, 49 \n\t"
++ "xvaddsp 34, 34, 50 \n\t"
++ "xvaddsp 35, 35, 51 \n\t"
++ "xvaddsp 36, 36, %x3 \n\t"
++ "xvaddsp 37, 37, %x4 \n\t"
++ "xvaddsp 38, 38, %x5 \n\t"
++ "xvaddsp 39, 39, %x6 \n\t"
++
++ "xvaddsp 32, 32, 33 \n\t"
++ "xvaddsp 34, 34, 35 \n\t"
++ "xvaddsp 36, 36, 37 \n\t"
++ "xvaddsp 38, 38, 39 \n\t"
++
++ "xvaddsp 32, 32, 34 \n\t"
++ "xvaddsp 36, 36, 38 \n\t"
++
++ "xvaddsp 32, 32, 36 \n\t"
++
++ "xxsldwi 33, 32, 32, 2 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xxsldwi 33, 32, 32, 1 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xscvspdp %0, 32 \n"
++
++ "#n=%1 x=%3=%2 sum=%0 o16=%8 o32=%9 o48=%10 o64=%11 o80=%12 o96=%13 o112=%14\n"
++ "#t0=%x3 t1=%x4 t2=%x5 t3=%x6"
++ :
++ "=f" (sum), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0), // 3
++ "=wa" (t1), // 4
++ "=wa" (t2), // 5
++ "=wa" (t3) // 6
++ :
++ "m" (*x),
++ "b" (16), // 8
++ "b" (32), // 9
++ "b" (48), // 10
++ "b" (64), // 11
++ "b" (80), // 12
++ "b" (96), // 13
++ "b" (112) // 14
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return sum;
++}
+diff --git a/kernel/power/scopy_microk_power8.c b/kernel/power/scopy_microk_power8.c
+index 2e08e3561..444a6d4d5 100644
+--- a/kernel/power/scopy_microk_power8.c
++++ b/kernel/power/scopy_microk_power8.c
+@@ -35,97 +35,78 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void scopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void scopy_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void scopy_kernel_32 (long n, float *x, float *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvw4x 40, 0, %1 \n\t"
+- "stxvw4x 41, %5, %1 \n\t"
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "stxvw4x 42, %6, %1 \n\t"
+- "stxvw4x 43, %7, %1 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "stxvw4x 44, %8, %1 \n\t"
+- "stxvw4x 45, %9, %1 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "stxvw4x 46, %10, %1 \n\t"
+- "stxvw4x 47, %11, %1 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "stxvw4x 40, 0, %1 \n\t"
+- "stxvw4x 41, %5, %1 \n\t"
+- "stxvw4x 42, %6, %1 \n\t"
+- "stxvw4x 43, %7, %1 \n\t"
+- "stxvw4x 44, %8, %1 \n\t"
+- "stxvw4x 45, %9, %1 \n\t"
+- "stxvw4x 46, %10, %1 \n\t"
+- "stxvw4x 47, %11, %1 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %5, %2 \n\t"
++ "lxvw4x 42, %6, %2 \n\t"
++ "lxvw4x 43, %7, %2 \n\t"
++ "lxvw4x 44, %8, %2 \n\t"
++ "lxvw4x 45, %9, %2 \n\t"
++ "lxvw4x 46, %10, %2 \n\t"
++ "lxvw4x 47, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvw4x 40, 0, %3 \n\t"
++ "stxvw4x 41, %5, %3 \n\t"
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 41, %5, %2 \n\t"
++ "stxvw4x 42, %6, %3 \n\t"
++ "stxvw4x 43, %7, %3 \n\t"
++ "lxvw4x 42, %6, %2 \n\t"
++ "lxvw4x 43, %7, %2 \n\t"
++ "stxvw4x 44, %8, %3 \n\t"
++ "stxvw4x 45, %9, %3 \n\t"
++ "lxvw4x 44, %8, %2 \n\t"
++ "lxvw4x 45, %9, %2 \n\t"
++ "stxvw4x 46, %10, %3 \n\t"
++ "stxvw4x 47, %11, %3 \n\t"
++ "lxvw4x 46, %10, %2 \n\t"
++ "lxvw4x 47, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "stxvw4x 40, 0, %3 \n\t"
++ "stxvw4x 41, %5, %3 \n\t"
++ "stxvw4x 42, %6, %3 \n\t"
++ "stxvw4x 43, %7, %3 \n\t"
++ "stxvw4x 44, %8, %3 \n\t"
++ "stxvw4x 45, %9, %3 \n\t"
++ "stxvw4x 46, %10, %3 \n\t"
++ "stxvw4x 47, %11, %3 \n"
++
++ "#n=%1 x=%4=%2 y=%0=%3 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "=m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y) // 3
++ :
++ "m" (*x),
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/sdot.c b/kernel/power/sdot.c
+index 52fb1fe24..31f473485 100644
+--- a/kernel/power/sdot.c
++++ b/kernel/power/sdot.c
+@@ -42,7 +42,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_16
+
+-static void sdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d)
++static FLOAT sdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y)
+ {
+ BLASLONG register i = 0;
+ FLOAT dot = 0.0;
+@@ -61,8 +61,7 @@ static void sdot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d)
+ i+=8 ;
+
+ }
+- *d += dot;
+-
++ return dot;
+ }
+
+ #endif
+@@ -82,8 +81,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y)
+ BLASLONG n1 = n & -32;
+
+ if ( n1 )
+- sdot_kernel_16(n1, x, y , &dot );
+-
++ dot = sdot_kernel_16(n1, x, y);
+
+ i = n1;
+ while(i < n)
+diff --git a/kernel/power/sdot_microk_power8.c b/kernel/power/sdot_microk_power8.c
+index 6dd588acd..7f7ccfac3 100644
+--- a/kernel/power/sdot_microk_power8.c
++++ b/kernel/power/sdot_microk_power8.c
+@@ -34,146 +34,142 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_16 1
+-static void sdot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y , FLOAT *dot) __attribute__ ((noinline));
+
+-static void sdot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *dot)
++static float sdot_kernel_16 (long n, float *x, float *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+- FLOAT tempdot[4];
+-
+-
+- __asm__ __volatile__
+- (
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "dcbt %2, %12 \n\t"
+- "dcbt %3, %12 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 48, 0, %3 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 49, %5, %3 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 50, %6, %3 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 51, %7, %3 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 52, %8, %3 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 53, %9, %3 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 54, %10, %3 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+- "lxvw4x 55, %11, %3 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+- "addi %3, %3, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %12 \n\t"
+- "dcbt %3, %12 \n\t"
+-
+- "xvmaddasp 32, 40, 48 \n\t"
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 48, 0, %3 \n\t"
+- "xvmaddasp 33, 41, 49 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 49, %5, %3 \n\t"
+- "xvmaddasp 34, 42, 50 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 50, %6, %3 \n\t"
+- "xvmaddasp 35, 43, 51 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 51, %7, %3 \n\t"
+- "xvmaddasp 36, 44, 52 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 52, %8, %3 \n\t"
+- "xvmaddasp 37, 45, 53 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 53, %9, %3 \n\t"
+- "xvmaddasp 38, 46, 54 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 54, %10, %3 \n\t"
+- "xvmaddasp 39, 47, 55 \n\t"
+-
+- "lxvw4x 47, %11, %2 \n\t"
+- "lxvw4x 55, %11, %3 \n\t"
+-
+-
+- "addi %2, %2, 128 \n\t"
+- "addi %3, %3, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmaddasp 32, 40, 48 \n\t"
+- "xvmaddasp 33, 41, 49 \n\t"
+- "xvmaddasp 34, 42, 50 \n\t"
+- "xvmaddasp 35, 43, 51 \n\t"
+- "xvmaddasp 36, 44, 52 \n\t"
+- "xvmaddasp 37, 45, 53 \n\t"
+- "xvmaddasp 38, 46, 54 \n\t"
+- "xvmaddasp 39, 47, 55 \n\t"
+-
+- "xvaddsp 32, 32 , 33 \n\t"
+- "xvaddsp 34, 34 , 35 \n\t"
+- "xvaddsp 36, 36 , 37 \n\t"
+- "xvaddsp 38, 38 , 39 \n\t"
+-
+- "xvaddsp 32, 32 , 34 \n\t"
+- "xvaddsp 36, 36 , 38 \n\t"
+-
+- "xvaddsp 32, 32 , 36 \n\t"
+-
+- "stxvw4x 32, 0 , %4 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (y1), // 3
+- "r" (tempdot), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112), // 11
+- "r" (pre) // 12
+- : "cr0", "%0", "%2" , "%3", "memory"
+- );
+-
+- *dot = tempdot[0] + tempdot[1] + tempdot[2] + tempdot[3];
+-
+-
+-}
+-
+-
++ float dot;
++ __vector float t0;
++ __vector float t1;
++ __vector float t2;
++ __vector float t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++ "dcbt 0, %3 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 48, 0, %3 \n\t"
++ "lxvw4x 41, %10, %2 \n\t"
++ "lxvw4x 49, %10, %3 \n\t"
++ "lxvw4x 42, %11, %2 \n\t"
++ "lxvw4x 50, %11, %3 \n\t"
++ "lxvw4x 43, %12, %2 \n\t"
++ "lxvw4x 51, %12, %3 \n\t"
++ "lxvw4x 44, %13, %2 \n\t"
++ "lxvw4x %x4, %13, %3 \n\t"
++ "lxvw4x 45, %14, %2 \n\t"
++ "lxvw4x %x5, %14, %3 \n\t"
++ "lxvw4x 46, %15, %2 \n\t"
++ "lxvw4x %x6, %15, %3 \n\t"
++ "lxvw4x 47, %16, %2 \n\t"
++ "lxvw4x %x7, %16, %3 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmaddasp 32, 40, 48 \n\t"
++ "lxvw4x 40, 0, %2 \n\t"
++ "lxvw4x 48, 0, %3 \n\t"
++ "xvmaddasp 33, 41, 49 \n\t"
++ "lxvw4x 41, %10, %2 \n\t"
++ "lxvw4x 49, %10, %3 \n\t"
++ "xvmaddasp 34, 42, 50 \n\t"
++ "lxvw4x 42, %11, %2 \n\t"
++ "lxvw4x 50, %11, %3 \n\t"
++ "xvmaddasp 35, 43, 51 \n\t"
++ "lxvw4x 43, %12, %2 \n\t"
++ "lxvw4x 51, %12, %3 \n\t"
++ "xvmaddasp 36, 44, %x4 \n\t"
++ "lxvw4x 44, %13, %2 \n\t"
++ "lxvw4x %x4, %13, %3 \n\t"
++ "xvmaddasp 37, 45, %x5 \n\t"
++ "lxvw4x 45, %14, %2 \n\t"
++ "lxvw4x %x5, %14, %3 \n\t"
++ "xvmaddasp 38, 46, %x6 \n\t"
++ "lxvw4x 46, %15, %2 \n\t"
++ "lxvw4x %x6, %15, %3 \n\t"
++ "xvmaddasp 39, 47, %x7 \n\t"
++ "lxvw4x 47, %16, %2 \n\t"
++ "lxvw4x %x7, %16, %3 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++ "addi %3, %3, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmaddasp 32, 40, 48 \n\t"
++ "xvmaddasp 33, 41, 49 \n\t"
++ "xvmaddasp 34, 42, 50 \n\t"
++ "xvmaddasp 35, 43, 51 \n\t"
++ "xvmaddasp 36, 44, %x4 \n\t"
++ "xvmaddasp 37, 45, %x5 \n\t"
++ "xvmaddasp 38, 46, %x6 \n\t"
++ "xvmaddasp 39, 47, %x7 \n\t"
++
++ "xvaddsp 32, 32, 33 \n\t"
++ "xvaddsp 34, 34, 35 \n\t"
++ "xvaddsp 36, 36, 37 \n\t"
++ "xvaddsp 38, 38, 39 \n\t"
++
++ "xvaddsp 32, 32, 34 \n\t"
++ "xvaddsp 36, 36, 38 \n\t"
++
++ "xvaddsp 32, 32, 36 \n\t"
++
++ "xxsldwi 33, 32, 32, 2 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xxsldwi 33, 32, 32, 1 \n\t"
++ "xvaddsp 32, 32, 33 \n\t"
++
++ "xscvspdp %x0, 32 \n"
++
++ "#dot=%0 n=%1 x=%8=%2 y=%9=%3 o16=%10 o32=%11 o48=%12 o64=%13 o80=%14 o96=%15 o122=%16\n"
++ "#t0=%x4 t1=%x5 t2=%x6 t3=%x7"
++ :
++ "=f" (dot), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y), // 3
++ "=wa" (t0), // 4
++ "=wa" (t1), // 5
++ "=wa" (t2), // 6
++ "=wa" (t3) // 7
++ :
++ "m" (*x),
++ "m" (*y),
++ "b" (16), // 10
++ "b" (32), // 11
++ "b" (48), // 12
++ "b" (64), // 13
++ "b" (80), // 14
++ "b" (96), // 15
++ "b" (112) // 16
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return dot;
++}
+diff --git a/kernel/power/srot.c b/kernel/power/srot.c
+index d464846a4..d2910ff87 100644
+--- a/kernel/power/srot.c
++++ b/kernel/power/srot.c
+@@ -46,7 +46,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_16
+
+-static void srot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
++static void srot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT c, FLOAT s)
+ {
+
+ BLASLONG i=0;
+@@ -56,8 +56,6 @@ static void srot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
+ FLOAT y00, y01, y02, y03;
+ FLOAT *x1=x;
+ FLOAT *y1=y;
+- FLOAT c1=*c;
+- FLOAT s1=*s;
+
+ while ( i<n )
+ {
+@@ -71,14 +69,14 @@ static void srot_kernel_16(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
+ x03 = x1[3];
+ y03 = y1[3];
+
+- f0 = c1*x00 + s1*y00;
+- g0 = c1*y00 - s1*x00;
+- f1 = c1*x01 + s1*y01;
+- g1 = c1*y01 - s1*x01;
+- f2 = c1*x02 + s1*y02;
+- g2 = c1*y02 - s1*x02;
+- f3 = c1*x03 + s1*y03;
+- g3 = c1*y03 - s1*x03;
++ f0 = c*x00 + s*y00;
++ g0 = c*y00 - s*x00;
++ f1 = c*x01 + s*y01;
++ g1 = c*y01 - s*x01;
++ f2 = c*x02 + s*y02;
++ g2 = c*y02 - s*x02;
++ f3 = c*x03 + s*y03;
++ g3 = c*y03 - s*x03;
+
+ x1[0] = f0;
+ y1[0] = g0;
+@@ -106,8 +104,6 @@ int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT
+ {
+ BLASLONG i=0;
+ BLASLONG ix=0,iy=0;
+- FLOAT c1[4] __attribute__ ((aligned (16)));;
+- FLOAT s1[4] __attribute__ ((aligned (16)));;
+ FLOAT *x1=x;
+ FLOAT *y1=y;
+ FLOAT temp;
+@@ -120,15 +116,7 @@ int CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT
+ BLASLONG n1 = n & -16;
+ if ( n1 > 0 )
+ {
+- c1[0]=c;
+- c1[1]=c;
+- c1[2]=c;
+- c1[3]=c;
+- s1[0]=s;
+- s1[1]=s;
+- s1[2]=s;
+- s1[3]=s;
+- srot_kernel_16(n1, x1, y1, c1, s1);
++ srot_kernel_16(n1, x1, y1, c, s);
+ i=n1;
+ }
+
+diff --git a/kernel/power/srot_microk_power8.c b/kernel/power/srot_microk_power8.c
+index ade65500f..0a18c16e0 100644
+--- a/kernel/power/srot_microk_power8.c
++++ b/kernel/power/srot_microk_power8.c
+@@ -38,171 +38,179 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_16 1
+
+-static void srot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s) __attribute__ ((noinline));
+-
+-static void srot_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *c, FLOAT *s)
++static void srot_kernel_16 (long n, float *x, float *y, float c, float s)
+ {
++ __vector float t0;
++ __vector float t1;
++ __vector float t2;
++ __vector float t3;
++ __vector float t4;
++ __vector float t5;
++ __vector float t6;
++ __vector float t7;
+
++ __asm__
++ (
++ "xscvdpspn 36, %x13 \n\t" // load c to all words
++ "xxspltw 36, 36, 0 \n\t"
+
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvw4x 36 , 0, %3 \n\t" // load c
+- "lxvw4x 37 , 0, %4 \n\t" // load s
+- "addi %8 , %8, -4 \n\t"
+- "addi %9 , %9, -4 \n\t"
+-
+- "lxvw4x 32, 0, %1 \n\t" // load x
+- "lxvw4x 33, %5, %1 \n\t"
+- "lxvw4x 34, %6, %1 \n\t"
+- "lxvw4x 35, %7, %1 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t" // load y
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+-
+- "addi %1, %1, 64 \n\t"
+- "addi %2, %2, 64 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "xvmulsp 48, 32, 36 \n\t" // c * x
+- "xvmulsp 49, 33, 36 \n\t"
+- "xvmulsp 50, 34, 36 \n\t"
+- "xvmulsp 51, 35, 36 \n\t"
+-
+- "xvmulsp 56, 40, 36 \n\t" // c * y
+- "xvmulsp 57, 41, 36 \n\t"
+- "xvmulsp 58, 42, 36 \n\t"
+- "xvmulsp 59, 43, 36 \n\t"
+-
+- "xvmulsp 52, 32, 37 \n\t" // s * x
+- "xvmulsp 53, 33, 37 \n\t"
+-
+- "lxvw4x 32, 0, %1 \n\t" // load x
+- "lxvw4x 33, %5, %1 \n\t"
+-
+- "xvmulsp 54, 34, 37 \n\t"
+- "xvmulsp 55, 35, 37 \n\t"
+-
+- "lxvw4x 34, %6, %1 \n\t"
+- "lxvw4x 35, %7, %1 \n\t"
+-
+- "xvmulsp 60, 40, 37 \n\t" // s * y
+- "xvmulsp 61, 41, 37 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t" // load y
+- "lxvw4x 41, %5, %2 \n\t"
+-
+- "xvmulsp 62, 42, 37 \n\t"
+- "xvmulsp 63, 43, 37 \n\t"
+-
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+-
+- "xvaddsp 48, 48 , 60 \n\t" // c * x + s * y
+- "xvaddsp 49, 49 , 61 \n\t" // c * x + s * y
+-
+- "addi %1, %1, 64 \n\t"
+- "addi %2, %2, 64 \n\t"
+-
+- "xvaddsp 50, 50 , 62 \n\t" // c * x + s * y
+- "xvaddsp 51, 51 , 63 \n\t" // c * x + s * y
+-
+- "xvsubsp 56, 56 , 52 \n\t" // c * y - s * x
+- "xvsubsp 57, 57 , 53 \n\t" // c * y - s * x
+- "xvsubsp 58, 58 , 54 \n\t" // c * y - s * x
+- "xvsubsp 59, 59 , 55 \n\t" // c * y - s * x
+-
+- "stxvw4x 48, 0, %8 \n\t" // store x
+- "stxvw4x 49, %5, %8 \n\t"
+- "stxvw4x 50, %6, %8 \n\t"
+- "stxvw4x 51, %7, %8 \n\t"
+-
+- "stxvw4x 56, 0, %9 \n\t" // store y
+- "stxvw4x 57, %5, %9 \n\t"
+- "stxvw4x 58, %6, %9 \n\t"
+- "stxvw4x 59, %7, %9 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+- "addi %9, %9, 64 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmulsp 48, 32, 36 \n\t" // c * x
+- "xvmulsp 49, 33, 36 \n\t"
+- "xvmulsp 50, 34, 36 \n\t"
+- "xvmulsp 51, 35, 36 \n\t"
+-
+- "xvmulsp 56, 40, 36 \n\t" // c * y
+- "xvmulsp 57, 41, 36 \n\t"
+- "xvmulsp 58, 42, 36 \n\t"
+- "xvmulsp 59, 43, 36 \n\t"
+-
+- "xvmulsp 52, 32, 37 \n\t" // s * x
+- "xvmulsp 53, 33, 37 \n\t"
+- "xvmulsp 54, 34, 37 \n\t"
+- "xvmulsp 55, 35, 37 \n\t"
+-
+- "xvmulsp 60, 40, 37 \n\t" // s * y
+- "xvmulsp 61, 41, 37 \n\t"
+- "xvmulsp 62, 42, 37 \n\t"
+- "xvmulsp 63, 43, 37 \n\t"
+-
+- "xvaddsp 48, 48 , 60 \n\t" // c * x + s * y
+- "xvaddsp 49, 49 , 61 \n\t" // c * x + s * y
+- "xvaddsp 50, 50 , 62 \n\t" // c * x + s * y
+- "xvaddsp 51, 51 , 63 \n\t" // c * x + s * y
+-
+- "xvsubsp 56, 56 , 52 \n\t" // c * y - s * x
+- "xvsubsp 57, 57 , 53 \n\t" // c * y - s * x
+- "xvsubsp 58, 58 , 54 \n\t" // c * y - s * x
+- "xvsubsp 59, 59 , 55 \n\t" // c * y - s * x
++ "xscvdpspn 37, %x14 \n\t" // load s to all words
++ "xxspltw 37, 37, 0 \n\t"
+
+- "stxvw4x 48, 0, %8 \n\t" // store x
+- "stxvw4x 49, %5, %8 \n\t"
+- "stxvw4x 50, %6, %8 \n\t"
+- "stxvw4x 51, %7, %8 \n\t"
++ "lxvw4x 32, 0, %3 \n\t" // load x
++ "lxvw4x 33, %15, %3 \n\t"
++ "lxvw4x 34, %16, %3 \n\t"
++ "lxvw4x 35, %17, %3 \n\t"
+
+- "stxvw4x 56, 0, %9 \n\t" // store y
+- "stxvw4x 57, %5, %9 \n\t"
+- "stxvw4x 58, %6, %9 \n\t"
+- "stxvw4x 59, %7, %9 \n\t"
++ "lxvw4x 48, 0, %4 \n\t" // load y
++ "lxvw4x 49, %15, %4 \n\t"
++ "lxvw4x 50, %16, %4 \n\t"
++ "lxvw4x 51, %17, %4 \n\t"
+
++ "addi %3, %3, 64 \n\t"
++ "addi %4, %4, 64 \n\t"
+
++ "addic. %2, %2, -16 \n\t"
++ "ble 2f \n\t"
+
+- :
+- :
+- "r" (i), // 0
+- "r" (x1), // 1
+- "r" (y1), // 2
+- "r" (c), // 3
+- "r" (s), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (x2), // 8
+- "r" (y2) // 9
+- : "cr0", "%0", "%1" , "%2", "%8", "%9", "memory"
+- );
++ ".p2align 5 \n"
++ "1: \n\t"
+
+-}
++ "xvmulsp 40, 32, 36 \n\t" // c * x
++ "xvmulsp 41, 33, 36 \n\t"
++ "xvmulsp 42, 34, 36 \n\t"
++ "xvmulsp 43, 35, 36 \n\t"
+
++ "xvmulsp %x5, 48, 36 \n\t" // c * y
++ "xvmulsp %x6, 49, 36 \n\t"
++ "xvmulsp %x7, 50, 36 \n\t"
++ "xvmulsp %x8, 51, 36 \n\t"
+
++ "xvmulsp 44, 32, 37 \n\t" // s * x
++ "xvmulsp 45, 33, 37 \n\t"
++
++ "lxvw4x 32, 0, %3 \n\t" // load x
++ "lxvw4x 33, %15, %3 \n\t"
++
++ "xvmulsp 46, 34, 37 \n\t"
++ "xvmulsp 47, 35, 37 \n\t"
++
++ "lxvw4x 34, %16, %3 \n\t"
++ "lxvw4x 35, %17, %3 \n\t"
++
++ "xvmulsp %x9, 48, 37 \n\t" // s * y
++ "xvmulsp %x10, 49, 37 \n\t"
++
++ "lxvw4x 48, 0, %4 \n\t" // load y
++ "lxvw4x 49, %15, %4 \n\t"
++
++ "xvmulsp %x11, 50, 37 \n\t"
++ "xvmulsp %x12, 51, 37 \n\t"
++
++ "lxvw4x 50, %16, %4 \n\t"
++ "lxvw4x 51, %17, %4 \n\t"
++
++ "xvaddsp 40, 40, %x9 \n\t" // c * x + s * y
++ "xvaddsp 41, 41, %x10 \n\t" // c * x + s * y
++
++ "addi %3, %3, -64 \n\t"
++ "addi %4, %4, -64 \n\t"
++
++ "xvaddsp 42, 42, %x11 \n\t" // c * x + s * y
++ "xvaddsp 43, 43, %x12 \n\t" // c * x + s * y
++
++ "xvsubsp %x5, %x5, 44 \n\t" // c * y - s * x
++ "xvsubsp %x6, %x6, 45 \n\t" // c * y - s * x
++ "xvsubsp %x7, %x7, 46 \n\t" // c * y - s * x
++ "xvsubsp %x8, %x8, 47 \n\t" // c * y - s * x
++
++ "stxvw4x 40, 0, %3 \n\t" // store x
++ "stxvw4x 41, %15, %3 \n\t"
++ "stxvw4x 42, %16, %3 \n\t"
++ "stxvw4x 43, %17, %3 \n\t"
++
++ "stxvw4x %x5, 0, %4 \n\t" // store y
++ "stxvw4x %x6, %15, %4 \n\t"
++ "stxvw4x %x7, %16, %4 \n\t"
++ "stxvw4x %x8, %17, %4 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %4, %4, 128 \n\t"
++
++ "addic. %2, %2, -16 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmulsp 40, 32, 36 \n\t" // c * x
++ "xvmulsp 41, 33, 36 \n\t"
++ "xvmulsp 42, 34, 36 \n\t"
++ "xvmulsp 43, 35, 36 \n\t"
++
++ "xvmulsp %x5, 48, 36 \n\t" // c * y
++ "xvmulsp %x6, 49, 36 \n\t"
++ "xvmulsp %x7, 50, 36 \n\t"
++ "xvmulsp %x8, 51, 36 \n\t"
++
++ "xvmulsp 44, 32, 37 \n\t" // s * x
++ "xvmulsp 45, 33, 37 \n\t"
++ "xvmulsp 46, 34, 37 \n\t"
++ "xvmulsp 47, 35, 37 \n\t"
++
++ "xvmulsp %x9, 48, 37 \n\t" // s * y
++ "xvmulsp %x10, 49, 37 \n\t"
++ "xvmulsp %x11, 50, 37 \n\t"
++ "xvmulsp %x12, 51, 37 \n\t"
++
++ "addi %3, %3, -64 \n\t"
++ "addi %4, %4, -64 \n\t"
++
++ "xvaddsp 40, 40, %x9 \n\t" // c * x + s * y
++ "xvaddsp 41, 41, %x10 \n\t" // c * x + s * y
++ "xvaddsp 42, 42, %x11 \n\t" // c * x + s * y
++ "xvaddsp 43, 43, %x12 \n\t" // c * x + s * y
++
++ "xvsubsp %x5, %x5, 44 \n\t" // c * y - s * x
++ "xvsubsp %x6, %x6, 45 \n\t" // c * y - s * x
++ "xvsubsp %x7, %x7, 46 \n\t" // c * y - s * x
++ "xvsubsp %x8, %x8, 47 \n\t" // c * y - s * x
++
++ "stxvw4x 40, 0, %3 \n\t" // store x
++ "stxvw4x 41, %15, %3 \n\t"
++ "stxvw4x 42, %16, %3 \n\t"
++ "stxvw4x 43, %17, %3 \n\t"
++
++ "stxvw4x %x5, 0, %4 \n\t" // store y
++ "stxvw4x %x6, %15, %4 \n\t"
++ "stxvw4x %x7, %16, %4 \n\t"
++ "stxvw4x %x8, %17, %4 \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 c=%13 s=%14 o16=%15 o32=%16 o48=%17\n"
++ "#t0=%x5 t1=%x6 t2=%x7 t3=%x8 t4=%x9 t5=%x10 t6=%x11 t7=%x12"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y), // 4
++ "=wa" (t0), // 5
++ "=wa" (t1), // 6
++ "=wa" (t2), // 7
++ "=wa" (t3), // 8
++ "=wa" (t4), // 9
++ "=wa" (t5), // 10
++ "=wa" (t6), // 11
++ "=wa" (t7) // 12
++ :
++ "f" (c), // 13
++ "f" (s), // 14
++ "b" (16), // 15
++ "b" (32), // 16
++ "b" (48) // 17
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++}
+diff --git a/kernel/power/sscal.c b/kernel/power/sscal.c
+index c6ef5e969..bd5cdc43f 100644
+--- a/kernel/power/sscal.c
++++ b/kernel/power/sscal.c
+@@ -42,11 +42,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #if !defined(HAVE_KERNEL_16)
+
+-static void sscal_kernel_16( BLASLONG n, FLOAT *da , FLOAT *x )
++static void sscal_kernel_16 (BLASLONG n, FLOAT *x, FLOAT alpha)
+ {
+
+ BLASLONG i;
+- FLOAT alpha = *da;
+
+ for( i=0; i<n; i+=8 )
+ {
+@@ -63,7 +62,7 @@ static void sscal_kernel_16( BLASLONG n, FLOAT *da , FLOAT *x )
+
+ }
+
+-static void sscal_kernel_16_zero( BLASLONG n, FLOAT *da , FLOAT *x )
++static void sscal_kernel_16_zero( BLASLONG n, FLOAT *x )
+ {
+
+ BLASLONG i;
+@@ -90,7 +89,6 @@ static void sscal_kernel_16_zero( BLASLONG n, FLOAT *da , FLOAT *x )
+ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLONG inc_y, FLOAT *dummy, BLASLONG dummy2)
+ {
+ BLASLONG i=0,j=0;
+- FLOAT alpha[4] __attribute__ ((aligned (16)));;
+
+ if ( n <= 0 || inc_x <=0 )
+ return(0);
+@@ -105,11 +103,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ BLASLONG n1 = n & -32;
+ if ( n1 > 0 )
+ {
+- alpha[0]=da;
+- alpha[1]=da;
+- alpha[2]=da;
+- alpha[3]=da;
+- sscal_kernel_16_zero(n1 , alpha , x);
++ sscal_kernel_16_zero(n1, x);
+ j=n1;
+ }
+
+@@ -127,11 +121,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da, FLOAT *x, BLAS
+ BLASLONG n1 = n & -32;
+ if ( n1 > 0 )
+ {
+- alpha[0]=da;
+- alpha[1]=da;
+- alpha[2]=da;
+- alpha[3]=da;
+- sscal_kernel_16(n1 , alpha , x);
++ sscal_kernel_16(n1, x, da);
+ j=n1;
+ }
+ while(j < n)
+diff --git a/kernel/power/sscal_microk_power8.c b/kernel/power/sscal_microk_power8.c
+index 963cec777..49862a329 100644
+--- a/kernel/power/sscal_microk_power8.c
++++ b/kernel/power/sscal_microk_power8.c
+@@ -35,184 +35,150 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_16 1
+
+-static void sscal_kernel_16( BLASLONG n, FLOAT *alpha, FLOAT *x) __attribute__ ((noinline));
+-
+-static void sscal_kernel_16( BLASLONG n, FLOAT *alpha, FLOAT *x)
++static void sscal_kernel_16 (long n, float *x, float alpha)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *x2=x+1;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvw4x 32, 0, %3 \n\t"
+- "addi %1, %1, -4 \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "xvmulsp 48, 40, 32 \n\t"
+- "xvmulsp 49, 41, 32 \n\t"
+- "lxvw4x 40, 0, %2 \n\t"
+- "lxvw4x 41, %5, %2 \n\t"
+- "xvmulsp 50, 42, 32 \n\t"
+- "xvmulsp 51, 43, 32 \n\t"
+- "lxvw4x 42, %6, %2 \n\t"
+- "lxvw4x 43, %7, %2 \n\t"
+- "xvmulsp 52, 44, 32 \n\t"
+- "xvmulsp 53, 45, 32 \n\t"
+- "lxvw4x 44, %8, %2 \n\t"
+- "lxvw4x 45, %9, %2 \n\t"
+- "xvmulsp 54, 46, 32 \n\t"
+- "xvmulsp 55, 47, 32 \n\t"
+- "lxvw4x 46, %10, %2 \n\t"
+- "lxvw4x 47, %11, %2 \n\t"
+-
+- "stxvw4x 48, 0, %1 \n\t"
+- "stxvw4x 49, %5, %1 \n\t"
+- "stxvw4x 50, %6, %1 \n\t"
+- "stxvw4x 51, %7, %1 \n\t"
+- "stxvw4x 52, %8, %1 \n\t"
+- "stxvw4x 53, %9, %1 \n\t"
+- "stxvw4x 54, %10, %1 \n\t"
+- "stxvw4x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmulsp 48, 40, 32 \n\t"
+- "xvmulsp 49, 41, 32 \n\t"
+- "xvmulsp 50, 42, 32 \n\t"
+- "xvmulsp 51, 43, 32 \n\t"
+- "xvmulsp 52, 44, 32 \n\t"
+- "xvmulsp 53, 45, 32 \n\t"
+- "xvmulsp 54, 46, 32 \n\t"
+- "xvmulsp 55, 47, 32 \n\t"
+-
+- "stxvw4x 48, 0, %1 \n\t"
+- "stxvw4x 49, %5, %1 \n\t"
+- "stxvw4x 50, %6, %1 \n\t"
+- "stxvw4x 51, %7, %1 \n\t"
+- "stxvw4x 52, %8, %1 \n\t"
+- "stxvw4x 53, %9, %1 \n\t"
+- "stxvw4x 54, %10, %1 \n\t"
+- "stxvw4x 55, %11, %1 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (x2), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
+-static void sscal_kernel_16_zero( BLASLONG n, FLOAT *alpha, FLOAT *x) __attribute__ ((noinline));
+-
+-static void sscal_kernel_16_zero( BLASLONG n, FLOAT *alpha, FLOAT *x)
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xscvdpspn %x3, %x3 \n\t"
++ "xxspltw %x3, %x3, 0 \n\t"
++
++ "lxvw4x 32, 0, %2 \n\t"
++ "lxvw4x 33, %4, %2 \n\t"
++ "lxvw4x 34, %5, %2 \n\t"
++ "lxvw4x 35, %6, %2 \n\t"
++ "lxvw4x 36, %7, %2 \n\t"
++ "lxvw4x 37, %8, %2 \n\t"
++ "lxvw4x 38, %9, %2 \n\t"
++ "lxvw4x 39, %10, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmulsp 40, 32, %x3 \n\t"
++ "xvmulsp 41, 33, %x3 \n\t"
++ "lxvw4x 32, 0, %2 \n\t"
++ "lxvw4x 33, %4, %2 \n\t"
++ "xvmulsp 42, 34, %x3 \n\t"
++ "xvmulsp 43, 35, %x3 \n\t"
++ "lxvw4x 34, %5, %2 \n\t"
++ "lxvw4x 35, %6, %2 \n\t"
++ "xvmulsp 44, 36, %x3 \n\t"
++ "xvmulsp 45, 37, %x3 \n\t"
++ "lxvw4x 36, %7, %2 \n\t"
++ "lxvw4x 37, %8, %2 \n\t"
++ "xvmulsp 46, 38, %x3 \n\t"
++ "xvmulsp 47, 39, %x3 \n\t"
++ "lxvw4x 38, %9, %2 \n\t"
++ "lxvw4x 39, %10, %2 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "stxvw4x 40, 0, %2 \n\t"
++ "stxvw4x 41, %4, %2 \n\t"
++ "stxvw4x 42, %5, %2 \n\t"
++ "stxvw4x 43, %6, %2 \n\t"
++ "stxvw4x 44, %7, %2 \n\t"
++ "stxvw4x 45, %8, %2 \n\t"
++ "stxvw4x 46, %9, %2 \n\t"
++ "stxvw4x 47, %10, %2 \n\t"
++
++ "addi %2, %2, 256 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmulsp 40, 32, %x3 \n\t"
++ "xvmulsp 41, 33, %x3 \n\t"
++ "xvmulsp 42, 34, %x3 \n\t"
++ "xvmulsp 43, 35, %x3 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "xvmulsp 44, 36, %x3 \n\t"
++ "xvmulsp 45, 37, %x3 \n\t"
++ "xvmulsp 46, 38, %x3 \n\t"
++ "xvmulsp 47, 39, %x3 \n\t"
++
++ "stxvw4x 40, 0, %2 \n\t"
++ "stxvw4x 41, %4, %2 \n\t"
++ "stxvw4x 42, %5, %2 \n\t"
++ "stxvw4x 43, %6, %2 \n\t"
++ "stxvw4x 44, %7, %2 \n\t"
++ "stxvw4x 45, %8, %2 \n\t"
++ "stxvw4x 46, %9, %2 \n\t"
++ "stxvw4x 47, %10, %2 \n"
++
++ "#n=%1 alpha=%3 x=%0=%2 o16=%4 o32=%5 o48=%6 o64=%7 o80=%8 o96=%9 o112=%10"
++ :
++ "+m" (*x),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+f" (alpha) // 3
++ :
++ "b" (16), // 4
++ "b" (32), // 5
++ "b" (48), // 6
++ "b" (64), // 7
++ "b" (80), // 8
++ "b" (96), // 9
++ "b" (112) // 10
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
++
++
++static void sscal_kernel_16_zero (long n, float *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *x2=x+1;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "xxlxor 32 , 32 , 32 \n\t"
+- "addi %1, %1, -4 \n\t"
+-
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvw4x 32, 0, %1 \n\t"
+- "stxvw4x 32, %5, %1 \n\t"
+- "stxvw4x 32, %6, %1 \n\t"
+- "stxvw4x 32, %7, %1 \n\t"
+- "stxvw4x 32, %8, %1 \n\t"
+- "stxvw4x 32, %9, %1 \n\t"
+- "stxvw4x 32, %10, %1 \n\t"
+- "stxvw4x 32, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (x2), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __vector float t0;
++
++ __asm__
++ (
++ "xxlxor %x3, %x3, %x3 \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvw4x %x3, 0, %2 \n\t"
++ "stxvw4x %x3, %4, %2 \n\t"
++ "stxvw4x %x3, %5, %2 \n\t"
++ "stxvw4x %x3, %6, %2 \n\t"
++ "stxvw4x %x3, %7, %2 \n\t"
++ "stxvw4x %x3, %8, %2 \n\t"
++ "stxvw4x %x3, %9, %2 \n\t"
++ "stxvw4x %x3, %10, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -32 \n\t"
++ "bgt 1b \n"
++
++ "#n=%1 x=%0=%2 t0=%x3 o16=%4 o32=%5 o48=%6 o64=%7 o80=%8 o96=%9 o112=%10"
++ :
++ "=m" (*x),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0) // 3
++ :
++ "b" (16), // 4
++ "b" (32), // 5
++ "b" (48), // 6
++ "b" (64), // 7
++ "b" (80), // 8
++ "b" (96), // 9
++ "b" (112) // 10
++ :
++ "cr0"
++ );
++}
+diff --git a/kernel/power/sswap_microk_power8.c b/kernel/power/sswap_microk_power8.c
+index c48e743de..d44f16765 100644
+--- a/kernel/power/sswap_microk_power8.c
++++ b/kernel/power/sswap_microk_power8.c
+@@ -35,102 +35,74 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_32 1
+
+-static void sswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void sswap_kernel_32( BLASLONG n, FLOAT *x, FLOAT *y)
++static void sswap_kernel_32 (long n, float *x, float *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "addi %3, %3, -4 \n\t"
+- "addi %4, %4, -4 \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "lxvw4x 32, 0, %2 \n\t"
+- "lxvw4x 33, %5, %2 \n\t"
+- "lxvw4x 34, %6, %2 \n\t"
+- "lxvw4x 35, %7, %2 \n\t"
+- "lxvw4x 36, %8, %2 \n\t"
+- "lxvw4x 37, %9, %2 \n\t"
+- "lxvw4x 38, %10, %2 \n\t"
+- "lxvw4x 39, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvw4x 48, 0, %1 \n\t"
+- "lxvw4x 49, %5, %1 \n\t"
+- "lxvw4x 50, %6, %1 \n\t"
+- "lxvw4x 51, %7, %1 \n\t"
+- "lxvw4x 52, %8, %1 \n\t"
+- "lxvw4x 53, %9, %1 \n\t"
+- "lxvw4x 54, %10, %1 \n\t"
+- "lxvw4x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvw4x 32, 0, %3 \n\t"
+- "stxvw4x 33, %5, %3 \n\t"
+- "stxvw4x 34, %6, %3 \n\t"
+- "stxvw4x 35, %7, %3 \n\t"
+- "stxvw4x 36, %8, %3 \n\t"
+- "stxvw4x 37, %9, %3 \n\t"
+- "stxvw4x 38, %10, %3 \n\t"
+- "stxvw4x 39, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvw4x 48, 0, %4 \n\t"
+- "stxvw4x 49, %5, %4 \n\t"
+- "stxvw4x 50, %6, %4 \n\t"
+- "stxvw4x 51, %7, %4 \n\t"
+- "stxvw4x 52, %8, %4 \n\t"
+- "stxvw4x 53, %9, %4 \n\t"
+- "stxvw4x 54, %10, %4 \n\t"
+- "stxvw4x 55, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "addic. %0 , %0 , -32 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (y2), // 3
+- "r" (x2), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "%3", "%4", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "lxvw4x 32, 0, %4 \n\t"
++ "lxvw4x 33, %5, %4 \n\t"
++ "lxvw4x 34, %6, %4 \n\t"
++ "lxvw4x 35, %7, %4 \n\t"
++ "lxvw4x 36, %8, %4 \n\t"
++ "lxvw4x 37, %9, %4 \n\t"
++ "lxvw4x 38, %10, %4 \n\t"
++ "lxvw4x 39, %11, %4 \n\t"
++
++ "lxvw4x 40, 0, %3 \n\t"
++ "lxvw4x 41, %5, %3 \n\t"
++ "lxvw4x 42, %6, %3 \n\t"
++ "lxvw4x 43, %7, %3 \n\t"
++ "lxvw4x 44, %8, %3 \n\t"
++ "lxvw4x 45, %9, %3 \n\t"
++ "lxvw4x 46, %10, %3 \n\t"
++ "lxvw4x 47, %11, %3 \n\t"
++
++ "stxvw4x 32, 0, %3 \n\t"
++ "stxvw4x 33, %5, %3 \n\t"
++ "stxvw4x 34, %6, %3 \n\t"
++ "stxvw4x 35, %7, %3 \n\t"
++ "stxvw4x 36, %8, %3 \n\t"
++ "stxvw4x 37, %9, %3 \n\t"
++ "stxvw4x 38, %10, %3 \n\t"
++ "stxvw4x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvw4x 40, 0, %4 \n\t"
++ "stxvw4x 41, %5, %4 \n\t"
++ "stxvw4x 42, %6, %4 \n\t"
++ "stxvw4x 43, %7, %4 \n\t"
++ "stxvw4x 44, %8, %4 \n\t"
++ "stxvw4x 45, %9, %4 \n\t"
++ "stxvw4x 46, %10, %4 \n\t"
++ "stxvw4x 47, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "addic. %2, %2, -32 \n\t"
++ "bgt 1b \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y) // 4
++ :
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/zasum.c b/kernel/power/zasum.c
+index abd6ec08a..0b6b87d46 100644
+--- a/kernel/power/zasum.c
++++ b/kernel/power/zasum.c
+@@ -53,7 +53,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_8
+
+-static void zasum_kernel_8(BLASLONG n, FLOAT *x1, FLOAT *svec)
++static FLOAT zasum_kernel_8(BLASLONG n, FLOAT *x1)
+ {
+
+ BLASLONG i=0;
+@@ -92,9 +92,7 @@ static void zasum_kernel_8(BLASLONG n, FLOAT *x1, FLOAT *svec)
+
+ }
+
+- svec[0] = sum0+sum1+sum2+sum3;
+- svec[1] = 0.0;
+-
++ return sum0+sum1+sum2+sum3;
+ }
+
+ #endif
+@@ -104,7 +102,6 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ BLASLONG i=0;
+ BLASLONG ip=0;
+ FLOAT sumf = 0.0;
+- FLOAT svec[2] __attribute__ ((aligned (16)));;
+ BLASLONG n1;
+ BLASLONG inc_x2;
+
+@@ -117,8 +114,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x)
+ if ( n1 > 0 )
+ {
+
+- zasum_kernel_8(n1, x, svec);
+- sumf = svec[0] + svec[1];
++ sumf = zasum_kernel_8(n1, x);
+ i=n1;
+ ip=2*n1;
+ }
+diff --git a/kernel/power/zasum_microk_power8.c b/kernel/power/zasum_microk_power8.c
+index b9f6c0ac6..82366902d 100644
+--- a/kernel/power/zasum_microk_power8.c
++++ b/kernel/power/zasum_microk_power8.c
+@@ -34,144 +34,140 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_8 1
+-static void zasum_kernel_8( BLASLONG n, FLOAT *x, FLOAT *svec) __attribute__ ((noinline));
+
+-static void zasum_kernel_8( BLASLONG n, FLOAT *x, FLOAT *svec)
++static double zasum_kernel_8 (long n, double *x)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2 , %4 \n\t"
+-
+- "xvabsdp 48, 40 \n\t"
+- "xvabsdp 49, 41 \n\t"
+- "xvabsdp 50, 42 \n\t"
+- "xvabsdp 51, 43 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+-
+- "xvabsdp 52, 44 \n\t"
+- "xvabsdp 53, 45 \n\t"
+-
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "xvabsdp 54, 46 \n\t"
+- "xvabsdp 55, 47 \n\t"
+-
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+-
+- "xvadddp 32, 32, 48 \n\t"
+- "xvadddp 33, 33, 49 \n\t"
+-
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "xvadddp 34, 34, 50 \n\t"
+- "xvadddp 35, 35, 51 \n\t"
+- "addi %2, %2, 128 \n\t"
+- "xvadddp 36, 36, 52 \n\t"
+- "xvadddp 37, 37, 53 \n\t"
+- "addic. %0 , %0 , -8 \n\t"
+- "xvadddp 38, 38, 54 \n\t"
+- "xvadddp 39, 39, 55 \n\t"
+-
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+-
+- "xvabsdp 48, 40 \n\t"
+- "xvabsdp 49, 41 \n\t"
+- "xvabsdp 50, 42 \n\t"
+- "xvabsdp 51, 43 \n\t"
+- "xvabsdp 52, 44 \n\t"
+- "xvabsdp 53, 45 \n\t"
+- "xvabsdp 54, 46 \n\t"
+- "xvabsdp 55, 47 \n\t"
+-
+- "xvadddp 32, 32, 48 \n\t"
+- "xvadddp 33, 33, 49 \n\t"
+- "xvadddp 34, 34, 50 \n\t"
+- "xvadddp 35, 35, 51 \n\t"
+- "xvadddp 36, 36, 52 \n\t"
+- "xvadddp 37, 37, 53 \n\t"
+- "xvadddp 38, 38, 54 \n\t"
+- "xvadddp 39, 39, 55 \n\t"
+-
+- "xvadddp 32, 32, 33 \n\t"
+- "xvadddp 34, 34, 35 \n\t"
+- "xvadddp 36, 36, 37 \n\t"
+- "xvadddp 38, 38, 39 \n\t"
+-
+- "xvadddp 32, 32, 34 \n\t"
+- "xvadddp 36, 36, 38 \n\t"
+-
+- "xvadddp 32, 32, 36 \n\t"
+-
+-
+- "stxvd2x 32, 0, %3 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (svec), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2", "memory"
+- );
+-
+-}
+-
+-
++ double sum;
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %8, %2 \n\t"
++ "lxvd2x 42, %9, %2 \n\t"
++ "lxvd2x 43, %10, %2 \n\t"
++ "lxvd2x 44, %11, %2 \n\t"
++ "lxvd2x 45, %12, %2 \n\t"
++ "lxvd2x 46, %13, %2 \n\t"
++ "lxvd2x 47, %14, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvabsdp 48, 40 \n\t"
++ "xvabsdp 49, 41 \n\t"
++ "xvabsdp 50, 42 \n\t"
++ "xvabsdp 51, 43 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %8, %2 \n\t"
++
++ "xvabsdp %x3, 44 \n\t"
++ "xvabsdp %x4, 45 \n\t"
++
++ "lxvd2x 42, %9, %2 \n\t"
++ "lxvd2x 43, %10, %2 \n\t"
++
++ "xvabsdp %x5, 46 \n\t"
++ "xvabsdp %x6, 47 \n\t"
++
++ "lxvd2x 44, %11, %2 \n\t"
++ "lxvd2x 45, %12, %2 \n\t"
++
++ "xvadddp 32, 32, 48 \n\t"
++ "xvadddp 33, 33, 49 \n\t"
++
++ "lxvd2x 46, %13, %2 \n\t"
++ "lxvd2x 47, %14, %2 \n\t"
++
++ "xvadddp 34, 34, 50 \n\t"
++ "xvadddp 35, 35, 51 \n\t"
++ "addi %2, %2, 128 \n\t"
++ "xvadddp 36, 36, %x3 \n\t"
++ "xvadddp 37, 37, %x4 \n\t"
++ "addic. %1, %1, -8 \n\t"
++ "xvadddp 38, 38, %x5 \n\t"
++ "xvadddp 39, 39, %x6 \n\t"
++
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvabsdp 48, 40 \n\t"
++ "xvabsdp 49, 41 \n\t"
++ "xvabsdp 50, 42 \n\t"
++ "xvabsdp 51, 43 \n\t"
++ "xvabsdp %x3, 44 \n\t"
++ "xvabsdp %x4, 45 \n\t"
++ "xvabsdp %x5, 46 \n\t"
++ "xvabsdp %x6, 47 \n\t"
++
++ "xvadddp 32, 32, 48 \n\t"
++ "xvadddp 33, 33, 49 \n\t"
++ "xvadddp 34, 34, 50 \n\t"
++ "xvadddp 35, 35, 51 \n\t"
++ "xvadddp 36, 36, %x3 \n\t"
++ "xvadddp 37, 37, %x4 \n\t"
++ "xvadddp 38, 38, %x5 \n\t"
++ "xvadddp 39, 39, %x6 \n\t"
++
++ "xvadddp 32, 32, 33 \n\t"
++ "xvadddp 34, 34, 35 \n\t"
++ "xvadddp 36, 36, 37 \n\t"
++ "xvadddp 38, 38, 39 \n\t"
++
++ "xvadddp 32, 32, 34 \n\t"
++ "xvadddp 36, 36, 38 \n\t"
++
++ "xvadddp 32, 32, 36 \n\t"
++
++ "xxswapd 33, 32 \n\t"
++ "xsadddp %x0, 32, 33 \n"
++
++ "#n=%1 x=%3=%2 sum=%0 o16=%8 o32=%9 o48=%10 o64=%11 o80=%12 o96=%13 o112=%14\n"
++ "#t0=%x3 t1=%x4 t2=%x5 t3=%x6"
++ :
++ "=d" (sum), // 0
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0), // 3
++ "=wa" (t1), // 4
++ "=wa" (t2), // 5
++ "=wa" (t3) // 6
++ :
++ "m" (*x),
++ "b" (16), // 8
++ "b" (32), // 9
++ "b" (48), // 10
++ "b" (64), // 11
++ "b" (80), // 12
++ "b" (96), // 13
++ "b" (112) // 14
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++
++ return sum;
++}
+diff --git a/kernel/power/zaxpy.c b/kernel/power/zaxpy.c
+index 0ee0c1bf9..dd7ab6c3c 100644
+--- a/kernel/power/zaxpy.c
++++ b/kernel/power/zaxpy.c
+@@ -78,7 +78,6 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
+ {
+ BLASLONG i=0;
+ BLASLONG ix=0,iy=0;
+- FLOAT da[4];
+
+ if ( n <= 0 ) return(0);
+
+@@ -89,11 +88,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r, FLOAT da_i,
+
+ if ( n1 )
+ {
+- da[0] = da_r;
+- da[1] = da_r;
+- da[2] = da_i;
+- da[3] = da_i;
+- zaxpy_kernel_4(n1, x, y , da );
++ zaxpy_kernel_4 (n1, x, y, da_r, da_i);
+ ix = 2 * n1;
+ }
+ i = n1;
+diff --git a/kernel/power/zaxpy_microk_power8.c b/kernel/power/zaxpy_microk_power8.c
+index c8a529fd9..124614f62 100644
+--- a/kernel/power/zaxpy_microk_power8.c
++++ b/kernel/power/zaxpy_microk_power8.c
+@@ -35,216 +35,225 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+ #define HAVE_KERNEL_4 1
+-static void zaxpy_kernel_4( BLASLONG n, FLOAT *x, FLOAT *y , FLOAT *alpha) __attribute__ ((noinline));
+-
+-static void zaxpy_kernel_4( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *alpha)
++static void zaxpy_kernel_4 (long n, double *x, double *y,
++ double alpha_r, double alpha_i)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
+-
+ #if !defined(CONJ)
+- FLOAT mvec[2] = { -1.0, 1.0 };
++ static const double mvec[2] = { -1.0, 1.0 };
+ #else
+- FLOAT mvec[2] = { 1.0, -1.0 };
++ static const double mvec[2] = { 1.0, -1.0 };
+ #endif
+-
+-
+- __asm__ __volatile__
+- (
+-
+- "lxsdx 34, 0 , %4 \n\t" // alpha_r
+- "lxsdx 35, %5, %4 \n\t" // alpha_i
+- "xxspltd 32, 34, 0 \n\t"
+- "xxspltd 33, 35, 0 \n\t"
+-
+- "lxvd2x 36, 0, %9 \n\t" // mvec
++ const double *mvecp = mvec;
++
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++ __vector double t4;
++ __vector double t5;
++ __vector double t6;
++ __vector double t7;
++ __vector double t8;
++ __vector double t9;
++ __vector double t10;
++ __vector double t11;
++ long ytmp;
++
++ __asm__
++ (
++ "xxspltd 32, %x19, 0 \n\t" // alpha_r
++ "xxspltd 33, %x20, 0 \n\t" // alpha_i
++
++ "lxvd2x 36, 0, %21 \n\t" // mvec
+
+ #if !defined(CONJ)
+- "xvmuldp 33, 33 , 36 \n\t" // alpha_i * mvec
++ "xvmuldp 33, 33, 36 \n\t" // alpha_i * mvec
+ #else
+- "xvmuldp 32, 32 , 36 \n\t" // alpha_r * mvec
++ "xvmuldp 32, 32, 36 \n\t" // alpha_r * mvec
+ #endif
+
+- "addi %8, %8, -8 \n\t"
+-
+- "dcbt %2, %10 \n\t"
+- "dcbt %3, %10 \n\t"
+-
+-
+- "lxvd2x 40, 0, %2 \n\t" // x0
+- "lxvd2x 41, %5, %2 \n\t" // x1
+- "lxvd2x 42, %6, %2 \n\t" // x2
+- "lxvd2x 43, %7, %2 \n\t" // x3
+-
+- "lxvd2x 48, 0, %3 \n\t" // y0
+- "lxvd2x 49, %5, %3 \n\t" // y1
+- "lxvd2x 50, %6, %3 \n\t" // y2
+- "lxvd2x 51, %7, %3 \n\t" // y3
+-
+- "xxswapd 56, 40 \n\t" // exchange real and imag part
+- "xxswapd 57, 41 \n\t" // exchange real and imag part
+- "xxswapd 58, 42 \n\t" // exchange real and imag part
+- "xxswapd 59, 43 \n\t" // exchange real and imag part
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "lxvd2x 44, 0, %2 \n\t" // x4
+- "lxvd2x 45, %5, %2 \n\t" // x5
+- "lxvd2x 46, %6, %2 \n\t" // x6
+- "lxvd2x 47, %7, %2 \n\t" // x7
+-
+- "lxvd2x 52, 0, %3 \n\t" // y4
+- "lxvd2x 53, %5, %3 \n\t" // y5
+- "lxvd2x 54, %6, %3 \n\t" // y6
+- "lxvd2x 55, %7, %3 \n\t" // y7
+-
+- "xxswapd 60, 44 \n\t" // exchange real and imag part
+- "xxswapd 61, 45 \n\t" // exchange real and imag part
+- "xxswapd 62, 46 \n\t" // exchange real and imag part
+- "xxswapd 63, 47 \n\t" // exchange real and imag part
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %10 \n\t"
+- "dcbt %3, %10 \n\t"
+-
+- "xvmaddadp 48, 40, 32 \n\t" // alpha_r * x0_r , alpha_r * x0_i
+- "xvmaddadp 49, 41, 32 \n\t"
+- "lxvd2x 40, 0, %2 \n\t" // x0
+- "lxvd2x 41, %5, %2 \n\t" // x1
+- "xvmaddadp 50, 42, 32 \n\t"
+- "xvmaddadp 51, 43, 32 \n\t"
+- "lxvd2x 42, %6, %2 \n\t" // x2
+- "lxvd2x 43, %7, %2 \n\t" // x3
+-
+- "xvmaddadp 52, 44, 32 \n\t"
+- "addi %2, %2, 64 \n\t"
+- "xvmaddadp 53, 45, 32 \n\t"
+- "lxvd2x 44, 0, %2 \n\t" // x4
+- "lxvd2x 45, %5, %2 \n\t" // x5
+- "xvmaddadp 54, 46, 32 \n\t"
+- "xvmaddadp 55, 47, 32 \n\t"
+- "lxvd2x 46, %6, %2 \n\t" // x6
+- "lxvd2x 47, %7, %2 \n\t" // x7
+-
+- "xvmaddadp 48, 56, 33 \n\t" // alpha_i * x0_i , alpha_i * x0_r
+- "addi %2, %2, 64 \n\t"
+- "xvmaddadp 49, 57, 33 \n\t"
+- "xvmaddadp 50, 58, 33 \n\t"
+- "xvmaddadp 51, 59, 33 \n\t"
+-
+- "xvmaddadp 52, 60, 33 \n\t"
+- "xvmaddadp 53, 61, 33 \n\t"
+- "xvmaddadp 54, 62, 33 \n\t"
+- "xvmaddadp 55, 63, 33 \n\t"
+-
+- "stxvd2x 48, 0, %8 \n\t"
+- "stxvd2x 49, %5, %8 \n\t"
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- "stxvd2x 52, 0, %8 \n\t"
+- "stxvd2x 53, %5, %8 \n\t"
+- "stxvd2x 54, %6, %8 \n\t"
+- "stxvd2x 55, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- "xxswapd 56, 40 \n\t" // exchange real and imag part
+- "xxswapd 57, 41 \n\t" // exchange real and imag part
+- "lxvd2x 48, 0, %3 \n\t" // y0
+- "lxvd2x 49, %5, %3 \n\t" // y1
+- "xxswapd 58, 42 \n\t" // exchange real and imag part
+- "xxswapd 59, 43 \n\t" // exchange real and imag part
+- "lxvd2x 50, %6, %3 \n\t" // y2
+- "lxvd2x 51, %7, %3 \n\t" // y3
+-
+- "xxswapd 60, 44 \n\t" // exchange real and imag part
+- "addi %3, %3, 64 \n\t"
+- "xxswapd 61, 45 \n\t" // exchange real and imag part
+- "lxvd2x 52, 0, %3 \n\t" // y4
+- "lxvd2x 53, %5, %3 \n\t" // y5
+- "xxswapd 62, 46 \n\t" // exchange real and imag part
+- "xxswapd 63, 47 \n\t" // exchange real and imag part
+- "lxvd2x 54, %6, %3 \n\t" // y6
+- "lxvd2x 55, %7, %3 \n\t" // y7
+-
+- "addi %3, %3, 64 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmaddadp 48, 40, 32 \n\t" // alpha_r * x0_r , alpha_r * x0_i
+- "xvmaddadp 49, 41, 32 \n\t"
+- "xvmaddadp 50, 42, 32 \n\t"
+- "xvmaddadp 51, 43, 32 \n\t"
+-
+- "xvmaddadp 52, 44, 32 \n\t"
+- "xvmaddadp 53, 45, 32 \n\t"
+- "xvmaddadp 54, 46, 32 \n\t"
+- "xvmaddadp 55, 47, 32 \n\t"
+-
+- "xvmaddadp 48, 56, 33 \n\t" // alpha_i * x0_i , alpha_i * x0_r
+- "xvmaddadp 49, 57, 33 \n\t"
+- "xvmaddadp 50, 58, 33 \n\t"
+- "xvmaddadp 51, 59, 33 \n\t"
+-
+- "xvmaddadp 52, 60, 33 \n\t"
+- "xvmaddadp 53, 61, 33 \n\t"
+- "xvmaddadp 54, 62, 33 \n\t"
+- "xvmaddadp 55, 63, 33 \n\t"
+-
+-
+- "stxvd2x 48, 0, %8 \n\t"
+- "stxvd2x 49, %5, %8 \n\t"
+- "stxvd2x 50, %6, %8 \n\t"
+- "stxvd2x 51, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- "stxvd2x 52, 0, %8 \n\t"
+- "stxvd2x 53, %5, %8 \n\t"
+- "stxvd2x 54, %6, %8 \n\t"
+- "stxvd2x 55, %7, %8 \n\t"
+-
+- "addi %8, %8, 64 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (y1), // 3
+- "r" (alpha), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (y2), // 8
+- "r" (mvec), // 9
+- "r" (pre) // 10
+- : "cr0", "%0", "%2" , "%3", "%8", "memory"
+- );
+-
+-}
+-
+-
++ "mr %16, %3 \n\t"
++ "dcbt 0, %2 \n\t"
++ "dcbt 0, %3 \n\t"
++
++
++ "lxvd2x 40, 0, %2 \n\t" // x0
++ "lxvd2x 41, %22, %2 \n\t" // x1
++ "lxvd2x 42, %23, %2 \n\t" // x2
++ "lxvd2x 43, %24, %2 \n\t" // x3
++
++ "lxvd2x 48, 0, %3 \n\t" // y0
++ "lxvd2x 49, %22, %3 \n\t" // y1
++ "lxvd2x 50, %23, %3 \n\t" // y2
++ "lxvd2x 51, %24, %3 \n\t" // y3
++
++ "xxswapd %x8, 40 \n\t" // exchange real and imag part
++ "xxswapd %x9, 41 \n\t" // exchange real and imag part
++ "xxswapd %x10, 42 \n\t" // exchange real and imag part
++ "xxswapd %x11, 43 \n\t" // exchange real and imag part
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "lxvd2x 44, 0, %2 \n\t" // x4
++ "lxvd2x 45, %22, %2 \n\t" // x5
++ "lxvd2x 46, %23, %2 \n\t" // x6
++ "lxvd2x 47, %24, %2 \n\t" // x7
++
++ "lxvd2x %x4, 0, %3 \n\t" // y4
++ "lxvd2x %x5, %22, %3 \n\t" // y5
++ "lxvd2x %x6, %23, %3 \n\t" // y6
++ "lxvd2x %x7, %24, %3 \n\t" // y7
++
++ "xxswapd %x12, 44 \n\t" // exchange real and imag part
++ "xxswapd %x13, 45 \n\t" // exchange real and imag part
++ "xxswapd %x14, 46 \n\t" // exchange real and imag part
++ "xxswapd %x15, 47 \n\t" // exchange real and imag part
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmaddadp 48, 40, 32 \n\t" // alpha_r * x0_r , alpha_r * x0_i
++ "xvmaddadp 49, 41, 32 \n\t"
++ "lxvd2x 40, 0, %2 \n\t" // x0
++ "lxvd2x 41, %22, %2 \n\t" // x1
++ "xvmaddadp 50, 42, 32 \n\t"
++ "xvmaddadp 51, 43, 32 \n\t"
++ "lxvd2x 42, %23, %2 \n\t" // x2
++ "lxvd2x 43, %24, %2 \n\t" // x3
++
++ "xvmaddadp %x4, 44, 32 \n\t"
++ "addi %2, %2, 64 \n\t"
++ "xvmaddadp %x5, 45, 32 \n\t"
++ "lxvd2x 44, 0, %2 \n\t" // x4
++ "lxvd2x 45, %22, %2 \n\t" // x5
++ "xvmaddadp %x6, 46, 32 \n\t"
++ "xvmaddadp %x7, 47, 32 \n\t"
++ "lxvd2x 46, %23, %2 \n\t" // x6
++ "lxvd2x 47, %24, %2 \n\t" // x7
++
++ "xvmaddadp 48, %x8, 33 \n\t" // alpha_i * x0_i , alpha_i * x0_r
++ "addi %2, %2, 64 \n\t"
++ "xvmaddadp 49, %x9, 33 \n\t"
++ "xvmaddadp 50, %x10, 33 \n\t"
++ "xvmaddadp 51, %x11, 33 \n\t"
++
++ "xvmaddadp %x4, %x12, 33 \n\t"
++ "xvmaddadp %x5, %x13, 33 \n\t"
++ "xvmaddadp %x6, %x14, 33 \n\t"
++ "xvmaddadp %x7, %x15, 33 \n\t"
++
++ "stxvd2x 48, 0, %16 \n\t"
++ "stxvd2x 49, %22, %16 \n\t"
++ "stxvd2x 50, %23, %16 \n\t"
++ "stxvd2x 51, %24, %16 \n\t"
++
++ "addi %16, %16, 64 \n\t"
++
++ "stxvd2x %x4, 0, %16 \n\t"
++ "stxvd2x %x5, %22, %16 \n\t"
++ "stxvd2x %x6, %23, %16 \n\t"
++ "stxvd2x %x7, %24, %16 \n\t"
++
++ "addi %16, %16, 64 \n\t"
++
++ "xxswapd %x8, 40 \n\t" // exchange real and imag part
++ "xxswapd %x9, 41 \n\t" // exchange real and imag part
++ "lxvd2x 48, 0, %3 \n\t" // y0
++ "lxvd2x 49, %22, %3 \n\t" // y1
++ "xxswapd %x10, 42 \n\t" // exchange real and imag part
++ "xxswapd %x11, 43 \n\t" // exchange real and imag part
++ "lxvd2x 50, %23, %3 \n\t" // y2
++ "lxvd2x 51, %24, %3 \n\t" // y3
++
++ "xxswapd %x12, 44 \n\t" // exchange real and imag part
++ "addi %3, %3, 64 \n\t"
++ "xxswapd %x13, 45 \n\t" // exchange real and imag part
++ "lxvd2x %x4, 0, %3 \n\t" // y4
++ "lxvd2x %x5, %22, %3 \n\t" // y5
++ "xxswapd %x14, 46 \n\t" // exchange real and imag part
++ "xxswapd %x15, 47 \n\t" // exchange real and imag part
++ "lxvd2x %x6, %23, %3 \n\t" // y6
++ "lxvd2x %x7, %24, %3 \n\t" // y7
++
++ "addi %3, %3, 64 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmaddadp 48, 40, 32 \n\t" // alpha_r * x0_r , alpha_r * x0_i
++ "xvmaddadp 49, 41, 32 \n\t"
++ "xvmaddadp 50, 42, 32 \n\t"
++ "xvmaddadp 51, 43, 32 \n\t"
++
++ "xvmaddadp %x4, 44, 32 \n\t"
++ "xvmaddadp %x5, 45, 32 \n\t"
++ "xvmaddadp %x6, 46, 32 \n\t"
++ "xvmaddadp %x7, 47, 32 \n\t"
++
++ "xvmaddadp 48, %x8, 33 \n\t" // alpha_i * x0_i , alpha_i * x0_r
++ "xvmaddadp 49, %x9, 33 \n\t"
++ "xvmaddadp 50, %x10, 33 \n\t"
++ "xvmaddadp 51, %x11, 33 \n\t"
++
++ "xvmaddadp %x4, %x12, 33 \n\t"
++ "xvmaddadp %x5, %x13, 33 \n\t"
++ "xvmaddadp %x6, %x14, 33 \n\t"
++ "xvmaddadp %x7, %x15, 33 \n\t"
++
++ "stxvd2x 48, 0, %16 \n\t"
++ "stxvd2x 49, %22, %16 \n\t"
++ "stxvd2x 50, %23, %16 \n\t"
++ "stxvd2x 51, %24, %16 \n\t"
++
++ "addi %16, %16, 64 \n\t"
++
++ "stxvd2x %x4, 0, %16 \n\t"
++ "stxvd2x %x5, %22, %16 \n\t"
++ "stxvd2x %x6, %23, %16 \n\t"
++ "stxvd2x %x7, %24, %16 \n"
++
++ "#n=%1 x=%17=%2 y=%0=%3 alpha=(%19,%20) mvecp=%18=%16 o16=%22 o32=%23 o48=%24 ytmp=%16\n"
++ "#t0=%x4 t1=%x5 t2=%x6 t3=%x7 t4=%x8 t5=%x9 t6=%x10 t7=%x11 t8=%x12 t9=%x13 t10=%x14 t11=%x15"
++ :
++ "+m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y), // 3
++ "=wa" (t0), // 4
++ "=wa" (t1), // 5
++ "=wa" (t2), // 6
++ "=wa" (t3), // 7
++ "=wa" (t4), // 8
++ "=wa" (t5), // 9
++ "=wa" (t6), // 10
++ "=wa" (t7), // 11
++ "=wa" (t8), // 12
++ "=wa" (t9), // 13
++ "=wa" (t10), // 14
++ "=wa" (t11), // 15
++ "=b" (ytmp) // 16
++ :
++ "m" (*x),
++ "m" (*mvecp),
++ "d" (alpha_r), // 19
++ "d" (alpha_i), // 20
++ "16" (mvecp), // 21
++ "b" (16), // 22
++ "b" (32), // 23
++ "b" (48) // 24
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++}
+diff --git a/kernel/power/zcopy_microk_power8.c b/kernel/power/zcopy_microk_power8.c
+index 73abe084e..5ca34b633 100644
+--- a/kernel/power/zcopy_microk_power8.c
++++ b/kernel/power/zcopy_microk_power8.c
+@@ -35,140 +35,121 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_16 1
+
+-static void zcopy_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void zcopy_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y)
++static void zcopy_kernel_16 (long n, FLOAT *x, FLOAT *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 50, 0, %2 \n\t"
+- "lxvd2x 51, %5, %2 \n\t"
+- "lxvd2x 52, %6, %2 \n\t"
+- "lxvd2x 53, %7, %2 \n\t"
+- "lxvd2x 54, %8, %2 \n\t"
+- "lxvd2x 55, %9, %2 \n\t"
+- "lxvd2x 56, %10, %2 \n\t"
+- "lxvd2x 57, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "stxvd2x 40, 0, %1 \n\t"
+- "stxvd2x 41, %5, %1 \n\t"
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "stxvd2x 42, %6, %1 \n\t"
+- "stxvd2x 43, %7, %1 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "stxvd2x 44, %8, %1 \n\t"
+- "stxvd2x 45, %9, %1 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "stxvd2x 46, %10, %1 \n\t"
+- "stxvd2x 47, %11, %1 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "stxvd2x 50, 0, %1 \n\t"
+- "stxvd2x 51, %5, %1 \n\t"
+- "lxvd2x 50, 0, %2 \n\t"
+- "lxvd2x 51, %5, %2 \n\t"
+- "stxvd2x 52, %6, %1 \n\t"
+- "stxvd2x 53, %7, %1 \n\t"
+- "lxvd2x 52, %6, %2 \n\t"
+- "lxvd2x 53, %7, %2 \n\t"
+- "stxvd2x 54, %8, %1 \n\t"
+- "stxvd2x 55, %9, %1 \n\t"
+- "lxvd2x 54, %8, %2 \n\t"
+- "lxvd2x 55, %9, %2 \n\t"
+- "stxvd2x 56, %10, %1 \n\t"
+- "stxvd2x 57, %11, %1 \n\t"
+- "lxvd2x 56, %10, %2 \n\t"
+- "lxvd2x 57, %11, %2 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "stxvd2x 40, 0, %1 \n\t"
+- "stxvd2x 41, %5, %1 \n\t"
+- "stxvd2x 42, %6, %1 \n\t"
+- "stxvd2x 43, %7, %1 \n\t"
+- "stxvd2x 44, %8, %1 \n\t"
+- "stxvd2x 45, %9, %1 \n\t"
+- "stxvd2x 46, %10, %1 \n\t"
+- "stxvd2x 47, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvd2x 50, 0, %1 \n\t"
+- "stxvd2x 51, %5, %1 \n\t"
+- "stxvd2x 52, %6, %1 \n\t"
+- "stxvd2x 53, %7, %1 \n\t"
+- "stxvd2x 54, %8, %1 \n\t"
+- "stxvd2x 55, %9, %1 \n\t"
+- "stxvd2x 56, %10, %1 \n\t"
+- "stxvd2x 57, %11, %1 \n\t"
+-
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %5, %2 \n\t"
++ "lxvd2x 34, %6, %2 \n\t"
++ "lxvd2x 35, %7, %2 \n\t"
++ "lxvd2x 36, %8, %2 \n\t"
++ "lxvd2x 37, %9, %2 \n\t"
++ "lxvd2x 38, %10, %2 \n\t"
++ "lxvd2x 39, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %5, %2 \n\t"
++ "lxvd2x 42, %6, %2 \n\t"
++ "lxvd2x 43, %7, %2 \n\t"
++ "lxvd2x 44, %8, %2 \n\t"
++ "lxvd2x 45, %9, %2 \n\t"
++ "lxvd2x 46, %10, %2 \n\t"
++ "lxvd2x 47, %11, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "lxvd2x 32, 0, %2 \n\t"
++ "lxvd2x 33, %5, %2 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "lxvd2x 34, %6, %2 \n\t"
++ "lxvd2x 35, %7, %2 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "lxvd2x 36, %8, %2 \n\t"
++ "lxvd2x 37, %9, %2 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++ "lxvd2x 38, %10, %2 \n\t"
++ "lxvd2x 39, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "lxvd2x 40, 0, %2 \n\t"
++ "lxvd2x 41, %5, %2 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "lxvd2x 42, %6, %2 \n\t"
++ "lxvd2x 43, %7, %2 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "lxvd2x 44, %8, %2 \n\t"
++ "lxvd2x 45, %9, %2 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n\t"
++ "lxvd2x 46, %10, %2 \n\t"
++ "lxvd2x 47, %11, %2 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -16 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n"
++
++ "#n=%1 x=%4=%2 y=%0=%3 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "=m" (*y),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y) // 3
++ :
++ "m" (*x),
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47"
++ );
++}
+diff --git a/kernel/power/zdot.c b/kernel/power/zdot.c
+index bc1a95e22..b83f832b1 100644
+--- a/kernel/power/zdot.c
++++ b/kernel/power/zdot.c
+@@ -43,8 +43,6 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_8
+
+-static void zdot_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d) __attribute__ ((noinline));
+-
+ static void zdot_kernel_8(BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *d)
+ {
+ BLASLONG register i = 0;
+diff --git a/kernel/power/zdot_microk_power8.c b/kernel/power/zdot_microk_power8.c
+index 296d3d469..71078b66c 100644
+--- a/kernel/power/zdot_microk_power8.c
++++ b/kernel/power/zdot_microk_power8.c
+@@ -34,186 +34,174 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ **************************************************************************************/
+
+ #define HAVE_KERNEL_8 1
+-static void zdot_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y , FLOAT *dot) __attribute__ ((noinline));
+
+-static void zdot_kernel_8( BLASLONG n, FLOAT *x, FLOAT *y, FLOAT *dot)
++static void zdot_kernel_8 (long n, double *x, double *y, double *dot)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+- "xxlxor 32,32,32 \n\t"
+- "xxlxor 33,33,33 \n\t"
+- "xxlxor 34,34,34 \n\t"
+- "xxlxor 35,35,35 \n\t"
+- "xxlxor 36,36,36 \n\t"
+- "xxlxor 37,37,37 \n\t"
+- "xxlxor 38,38,38 \n\t"
+- "xxlxor 39,39,39 \n\t"
+-
+- "dcbt %2, %8 \n\t"
+- "dcbt %3, %8 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
+- "lxvd2x 48, 0, %3 \n\t" // y0_r, y0_i
+- "lxvd2x 41, %5, %2 \n\t" // x1_r, x1_i
+- "lxvd2x 49, %5, %3 \n\t" // y1_r, y1_i
+- "lxvd2x 42, %6, %2 \n\t" // x2_r, x2_i
+- "lxvd2x 50, %6, %3 \n\t" // y2_r, y2_i
+- "lxvd2x 43, %7, %2 \n\t" // x3_r, x3_i
+- "lxvd2x 51, %7, %3 \n\t" // y3_r, y3_i
+-
+- "xxswapd 52,48 \n\t" // y0_i, y0_r
+- "xxswapd 53,49 \n\t" // y1_i, y1_r
+- "xxswapd 54,50 \n\t" // y2_i, y2_r
+- "xxswapd 55,51 \n\t" // y3_i, y3_r
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+-
+- "lxvd2x 44, 0, %2 \n\t" // x0_r, x0_i
+- "lxvd2x 56, 0, %3 \n\t" // y0_r, y0_i
+- "lxvd2x 45, %5, %2 \n\t" // x1_r, x1_i
+- "lxvd2x 57, %5, %3 \n\t" // y1_r, y1_i
+- "lxvd2x 46, %6, %2 \n\t" // x2_r, x2_i
+- "lxvd2x 58, %6, %3 \n\t" // y2_r, y2_i
+- "lxvd2x 47, %7, %2 \n\t" // x3_r, x3_i
+- "lxvd2x 59, %7, %3 \n\t" // y3_r, y3_i
+-
+- "xxswapd 60,56 \n\t" // y0_i, y0_r
+- "xxswapd 61,57 \n\t" // y1_i, y1_r
+- "xxswapd 62,58 \n\t" // y2_i, y2_r
+- "xxswapd 63,59 \n\t" // y3_i, y3_r
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %8 \n\t"
+- "dcbt %3, %8 \n\t"
+-
+- "xvmaddadp 32, 40, 48 \n\t" // x0_r * y0_r , x0_i * y0_i
+- "lxvd2x 48, 0, %3 \n\t" // y0_r, y0_i
+- "xvmaddadp 34, 41, 49 \n\t" // x1_r * y1_r , x1_i * y1_i
+- "lxvd2x 49, %5, %3 \n\t" // y1_r, y1_i
+-
+- "xvmaddadp 36, 42, 50 \n\t" // x2_r * y2_r , x2_i * y2_i
+- "lxvd2x 50, %6, %3 \n\t" // y2_r, y2_i
+- "xvmaddadp 38, 43, 51 \n\t" // x3_r * y3_r , x3_i * y3_i
+- "lxvd2x 51, %7, %3 \n\t" // y3_r, y3_i
+-
+- "xvmaddadp 33, 40, 52 \n\t" // x0_r * y0_i , x0_i * y0_r
+- "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
+- "xvmaddadp 35, 41, 53 \n\t" // x1_r * y1_i , x1_i * y1_r
+- "lxvd2x 41, %5, %2 \n\t" // x1_r, x1_i
+-
+- "xvmaddadp 37, 42, 54 \n\t" // x2_r * y2_i , x2_i * y2_r
+- "lxvd2x 42, %6, %2 \n\t" // x2_r, x2_i
+- "xvmaddadp 39, 43, 55 \n\t" // x3_r * y3_i , x3_i * y3_r
+- "lxvd2x 43, %7, %2 \n\t" // x3_r, x3_i
+-
+- "xxswapd 52,48 \n\t" // y0_i, y0_r
+- "xxswapd 53,49 \n\t" // y1_i, y1_r
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "xxswapd 54,50 \n\t" // y2_i, y2_r
+- "xxswapd 55,51 \n\t" // y3_i, y3_r
+-
+- "xvmaddadp 32, 44, 56 \n\t" // x0_r * y0_r , x0_i * y0_i
+- "lxvd2x 56, 0, %3 \n\t" // y0_r, y0_i
+- "xvmaddadp 34, 45, 57 \n\t" // x1_r * y1_r , x1_i * y1_i
+- "lxvd2x 57, %5, %3 \n\t" // y1_r, y1_i
+- "xvmaddadp 36, 46, 58 \n\t" // x2_r * y2_r , x2_i * y2_i
+- "lxvd2x 58, %6, %3 \n\t" // y2_r, y2_i
+- "xvmaddadp 38, 47, 59 \n\t" // x3_r * y3_r , x3_i * y3_i
+- "lxvd2x 59, %7, %3 \n\t" // y3_r, y3_i
+-
+- "xvmaddadp 33, 44, 60 \n\t" // x0_r * y0_i , x0_i * y0_r
+- "lxvd2x 44, 0, %2 \n\t" // x0_r, x0_i
+- "xvmaddadp 35, 45, 61 \n\t" // x1_r * y1_i , x1_i * y1_r
+- "lxvd2x 45, %5, %2 \n\t" // x1_r, x1_i
+- "xvmaddadp 37, 46, 62 \n\t" // x2_r * y2_i , x2_i * y2_r
+- "lxvd2x 46, %6, %2 \n\t" // x2_r, x2_i
+- "xvmaddadp 39, 47, 63 \n\t" // x3_r * y3_i , x3_i * y3_r
+- "lxvd2x 47, %7, %2 \n\t" // x3_r, x3_i
+-
+- "xxswapd 60,56 \n\t" // y0_i, y0_r
+- "xxswapd 61,57 \n\t" // y1_i, y1_r
+-
+- "addi %2, %2, 64 \n\t"
+- "addi %3, %3, 64 \n\t"
+-
+- "xxswapd 62,58 \n\t" // y2_i, y2_r
+- "xxswapd 63,59 \n\t" // y3_i, y3_r
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmaddadp 32, 40, 48 \n\t" // x0_r * y0_r , x0_i * y0_i
+- "xvmaddadp 34, 41, 49 \n\t" // x1_r * y1_r , x1_i * y1_i
+- "xvmaddadp 36, 42, 50 \n\t" // x2_r * y2_r , x2_i * y2_i
+- "xvmaddadp 38, 43, 51 \n\t" // x3_r * y3_r , x3_i * y3_i
+-
+- "xvmaddadp 33, 40, 52 \n\t" // x0_r * y0_i , x0_i * y0_r
+- "xvmaddadp 35, 41, 53 \n\t" // x1_r * y1_i , x1_i * y1_r
+- "xvmaddadp 37, 42, 54 \n\t" // x2_r * y2_i , x2_i * y2_r
+- "xvmaddadp 39, 43, 55 \n\t" // x3_r * y3_i , x3_i * y3_r
+-
+- "xvmaddadp 32, 44, 56 \n\t" // x0_r * y0_r , x0_i * y0_i
+- "xvmaddadp 34, 45, 57 \n\t" // x1_r * y1_r , x1_i * y1_i
+- "xvmaddadp 36, 46, 58 \n\t" // x2_r * y2_r , x2_i * y2_i
+- "xvmaddadp 38, 47, 59 \n\t" // x3_r * y3_r , x3_i * y3_i
+-
+- "xvmaddadp 33, 44, 60 \n\t" // x0_r * y0_i , x0_i * y0_r
+- "xvmaddadp 35, 45, 61 \n\t" // x1_r * y1_i , x1_i * y1_r
+- "xvmaddadp 37, 46, 62 \n\t" // x2_r * y2_i , x2_i * y2_r
+- "xvmaddadp 39, 47, 63 \n\t" // x3_r * y3_i , x3_i * y3_r
+-
+-
+- "xvadddp 32, 32, 34 \n\t"
+- "xvadddp 36, 36, 38 \n\t"
+-
+- "xvadddp 33, 33, 35 \n\t"
+- "xvadddp 37, 37, 39 \n\t"
+-
+- "xvadddp 32, 32, 36 \n\t"
+- "xvadddp 33, 33, 37 \n\t"
+-
+- "stxvd2x 32, 0, %4 \n\t"
+- "stxvd2x 33, %5, %4 \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (n), // 1
+- "r" (x1), // 2
+- "r" (y1), // 3
+- "r" (dot), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (pre) // 8
+- : "cr0", "%0", "%2" , "%3", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++ "dcbt 0, %3 \n\t"
++
++ "xxlxor 32, 32, 32 \n\t"
++ "xxlxor 33, 33, 33 \n\t"
++ "xxlxor 34, 34, 34 \n\t"
++ "xxlxor 35, 35, 35 \n\t"
++ "xxlxor 36, 36, 36 \n\t"
++ "xxlxor 37, 37, 37 \n\t"
++ "xxlxor 38, 38, 38 \n\t"
++ "xxlxor 39, 39, 39 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
++ "lxvd2x 48, 0, %3 \n\t" // y0_r, y0_i
++ "lxvd2x 41, %7, %2 \n\t" // x1_r, x1_i
++ "lxvd2x 49, %7, %3 \n\t" // y1_r, y1_i
++ "lxvd2x 42, %8, %2 \n\t" // x2_r, x2_i
++ "lxvd2x 50, %8, %3 \n\t" // y2_r, y2_i
++ "lxvd2x 43, %9, %2 \n\t" // x3_r, x3_i
++ "lxvd2x 51, %9, %3 \n\t" // y3_r, y3_i
++
++ "xxswapd 0, 48 \n\t" // y0_i, y0_r
++ "xxswapd 1, 49 \n\t" // y1_i, y1_r
++ "xxswapd 2, 50 \n\t" // y2_i, y2_r
++ "xxswapd 3, 51 \n\t" // y3_i, y3_r
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "lxvd2x 44, 0, %2 \n\t" // x0_r, x0_i
++ "lxvd2x 4, 0, %3 \n\t" // y0_r, y0_i
++ "lxvd2x 45, %7, %2 \n\t" // x1_r, x1_i
++ "lxvd2x 5, %7, %3 \n\t" // y1_r, y1_i
++ "lxvd2x 46, %8, %2 \n\t" // x2_r, x2_i
++ "lxvd2x 6, %8, %3 \n\t" // y2_r, y2_i
++ "lxvd2x 47, %9, %2 \n\t" // x3_r, x3_i
++ "lxvd2x 7, %9, %3 \n\t" // y3_r, y3_i
++
++ "xxswapd 8, 4 \n\t" // y0_i, y0_r
++ "xxswapd 9, 5 \n\t" // y1_i, y1_r
++ "xxswapd 10, 6 \n\t" // y2_i, y2_r
++ "xxswapd 11, 7 \n\t" // y3_i, y3_r
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmaddadp 32, 40, 48 \n\t" // x0_r * y0_r , x0_i * y0_i
++ "lxvd2x 48, 0, %3 \n\t" // y0_r, y0_i
++ "xvmaddadp 34, 41, 49 \n\t" // x1_r * y1_r , x1_i * y1_i
++ "lxvd2x 49, %7, %3 \n\t" // y1_r, y1_i
++
++ "xvmaddadp 36, 42, 50 \n\t" // x2_r * y2_r , x2_i * y2_i
++ "lxvd2x 50, %8, %3 \n\t" // y2_r, y2_i
++ "xvmaddadp 38, 43, 51 \n\t" // x3_r * y3_r , x3_i * y3_i
++ "lxvd2x 51, %9, %3 \n\t" // y3_r, y3_i
++
++ "xvmaddadp 33, 40, 0 \n\t" // x0_r * y0_i , x0_i * y0_r
++ "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
++ "xvmaddadp 35, 41, 1 \n\t" // x1_r * y1_i , x1_i * y1_r
++ "lxvd2x 41, %7, %2 \n\t" // x1_r, x1_i
++
++ "xvmaddadp 37, 42, 2 \n\t" // x2_r * y2_i , x2_i * y2_r
++ "lxvd2x 42, %8, %2 \n\t" // x2_r, x2_i
++ "xvmaddadp 39, 43, 3 \n\t" // x3_r * y3_i , x3_i * y3_r
++ "lxvd2x 43, %9, %2 \n\t" // x3_r, x3_i
++
++ "xxswapd 0,48 \n\t" // y0_i, y0_r
++ "xxswapd 1,49 \n\t" // y1_i, y1_r
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "xxswapd 2,50 \n\t" // y2_i, y2_r
++ "xxswapd 3,51 \n\t" // y3_i, y3_r
++
++ "xvmaddadp 32, 44, 4 \n\t" // x0_r * y0_r , x0_i * y0_i
++ "lxvd2x 4, 0, %3 \n\t" // y0_r, y0_i
++ "xvmaddadp 34, 45, 5 \n\t" // x1_r * y1_r , x1_i * y1_i
++ "lxvd2x 5, %7, %3 \n\t" // y1_r, y1_i
++ "xvmaddadp 36, 46, 6 \n\t" // x2_r * y2_r , x2_i * y2_i
++ "lxvd2x 6, %8, %3 \n\t" // y2_r, y2_i
++ "xvmaddadp 38, 47, 7 \n\t" // x3_r * y3_r , x3_i * y3_i
++ "lxvd2x 7, %9, %3 \n\t" // y3_r, y3_i
++
++ "xvmaddadp 33, 44, 8 \n\t" // x0_r * y0_i , x0_i * y0_r
++ "lxvd2x 44, 0, %2 \n\t" // x0_r, x0_i
++ "xvmaddadp 35, 45, 9 \n\t" // x1_r * y1_i , x1_i * y1_r
++ "lxvd2x 45, %7, %2 \n\t" // x1_r, x1_i
++ "xvmaddadp 37, 46, 10 \n\t" // x2_r * y2_i , x2_i * y2_r
++ "lxvd2x 46, %8, %2 \n\t" // x2_r, x2_i
++ "xvmaddadp 39, 47, 11 \n\t" // x3_r * y3_i , x3_i * y3_r
++ "lxvd2x 47, %9, %2 \n\t" // x3_r, x3_i
++
++ "xxswapd 8,4 \n\t" // y0_i, y0_r
++ "xxswapd 9,5 \n\t" // y1_i, y1_r
++
++ "addi %2, %2, 64 \n\t"
++ "addi %3, %3, 64 \n\t"
++
++ "xxswapd 10,6 \n\t" // y2_i, y2_r
++ "xxswapd 11,7 \n\t" // y3_i, y3_r
++
++ "addic. %1, %1, -8 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmaddadp 32, 40, 48 \n\t" // x0_r * y0_r , x0_i * y0_i
++ "xvmaddadp 34, 41, 49 \n\t" // x1_r * y1_r , x1_i * y1_i
++ "xvmaddadp 36, 42, 50 \n\t" // x2_r * y2_r , x2_i * y2_i
++ "xvmaddadp 38, 43, 51 \n\t" // x3_r * y3_r , x3_i * y3_i
++
++ "xvmaddadp 33, 40, 0 \n\t" // x0_r * y0_i , x0_i * y0_r
++ "xvmaddadp 35, 41, 1 \n\t" // x1_r * y1_i , x1_i * y1_r
++ "xvmaddadp 37, 42, 2 \n\t" // x2_r * y2_i , x2_i * y2_r
++ "xvmaddadp 39, 43, 3 \n\t" // x3_r * y3_i , x3_i * y3_r
++
++ "xvmaddadp 32, 44, 4 \n\t" // x0_r * y0_r , x0_i * y0_i
++ "xvmaddadp 34, 45, 5 \n\t" // x1_r * y1_r , x1_i * y1_i
++ "xvmaddadp 36, 46, 6 \n\t" // x2_r * y2_r , x2_i * y2_i
++ "xvmaddadp 38, 47, 7 \n\t" // x3_r * y3_r , x3_i * y3_i
++
++ "xvmaddadp 33, 44, 8 \n\t" // x0_r * y0_i , x0_i * y0_r
++ "xvmaddadp 35, 45, 9 \n\t" // x1_r * y1_i , x1_i * y1_r
++ "xvmaddadp 37, 46, 10 \n\t" // x2_r * y2_i , x2_i * y2_r
++ "xvmaddadp 39, 47, 11 \n\t" // x3_r * y3_i , x3_i * y3_r
++
++ "xvadddp 32, 32, 34 \n\t"
++ "xvadddp 36, 36, 38 \n\t"
++
++ "xvadddp 33, 33, 35 \n\t"
++ "xvadddp 37, 37, 39 \n\t"
++
++ "xvadddp 32, 32, 36 \n\t"
++ "xvadddp 33, 33, 37 \n\t"
++
++ "stxvd2x 32, 0, %6 \n\t"
++ "stxvd2x 33, %7, %6 \n"
++
++ "#n=%1 x=%4=%2 y=%5=%3 dot=%0=%6 o16=%7 o32=%8 o48=%9"
++ :
++ "=m" (*dot),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "+b" (y) // 3
++ :
++ "m" (*x),
++ "m" (*y),
++ "b" (dot), // 6
++ "b" (16), // 7
++ "b" (32), // 8
++ "b" (48) // 9
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51","vs0","vs1","vs2","vs3",
++ "vs4","vs5","vs6","vs7","vs8","vs9","vs10","vs11"
++ );
++}
+diff --git a/kernel/power/zscal.c b/kernel/power/zscal.c
+index 410fc9840..14d677f24 100644
+--- a/kernel/power/zscal.c
++++ b/kernel/power/zscal.c
+@@ -47,15 +47,15 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #ifndef HAVE_KERNEL_8
+
+-static void zscal_kernel_8(BLASLONG n, FLOAT *x, FLOAT *alpha)
++static void zscal_kernel_8(BLASLONG n, FLOAT *x, FLOAT da_r, FLOAT da_i)
+ {
+
+ BLASLONG i=0;
+ FLOAT *x1=x;
+- FLOAT alpha_r1=alpha[0];
+- FLOAT alpha_r2=alpha[1];
+- FLOAT alpha_i1=alpha[2];
+- FLOAT alpha_i2=alpha[3];
++ FLOAT alpha_r1=da_r;
++ FLOAT alpha_r2=da_r;
++ FLOAT alpha_i1=-da_i;
++ FLOAT alpha_i2=da_i;
+ FLOAT temp00, temp01, temp10, temp11, temp20, temp21, temp30, temp31;
+ FLOAT x0_r, x0_i, x1_r, x1_i, x2_r, x2_i, x3_r, x3_i;
+
+@@ -116,7 +116,6 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
+ BLASLONG inc_x2;
+ BLASLONG ip = 0;
+ FLOAT temp;
+- FLOAT alpha[4] __attribute__ ((aligned (16)));;
+ BLASLONG n1;
+
+ if ( n <= 0 )
+@@ -147,11 +146,7 @@ int CNAME(BLASLONG n, BLASLONG dummy0, BLASLONG dummy1, FLOAT da_r,FLOAT da_i, F
+ n1 = n & -8;
+ if ( n1 > 0 )
+ {
+- alpha[0] = da_r;
+- alpha[1] = da_r;
+- alpha[2] = -da_i;
+- alpha[3] = da_i;
+- zscal_kernel_8(n1, x, alpha);
++ zscal_kernel_8(n1, x, da_r, da_i);
+ i=n1;
+ ip = n1 * 2;
+
+diff --git a/kernel/power/zscal_microk_power8.c b/kernel/power/zscal_microk_power8.c
+index 5e09d8d79..aba9029a0 100644
+--- a/kernel/power/zscal_microk_power8.c
++++ b/kernel/power/zscal_microk_power8.c
+@@ -38,187 +38,202 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_8 1
+
+-static void zscal_kernel_8( BLASLONG n, FLOAT *x, FLOAT *alpha) __attribute__ ((noinline));
+-
+-static void zscal_kernel_8( BLASLONG n, FLOAT *x, FLOAT *alpha)
++static void zscal_kernel_8 (long n, double *x, double alpha_r, double alpha_i)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *x2=x+1;
+- BLASLONG pre = 384;
+-
+- __asm__ __volatile__
+- (
+-
+- "lxvd2x 32, 0, %3 \n\t" // alpha_r , alpha_r
+- "lxvd2x 33, %5, %3 \n\t" // -alpha_i , alpha_i
+- "addi %1, %1, -8 \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "ble 2f \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "dcbt %2, %4 \n\t"
+-
+- "xvmuldp 48, 40, 32 \n\t" // x0_r * alpha_r, x0_i * alpha_r
+- "xvmuldp 49, 41, 32 \n\t"
+- "xvmuldp 50, 42, 32 \n\t"
+- "xvmuldp 51, 43, 32 \n\t"
+- "xvmuldp 52, 44, 32 \n\t"
+- "xvmuldp 53, 45, 32 \n\t"
+- "xvmuldp 54, 46, 32 \n\t"
+- "xvmuldp 55, 47, 32 \n\t"
+-
+- "xxswapd 56, 40 \n\t"
+- "xxswapd 57, 41 \n\t"
+- "xxswapd 58, 42 \n\t"
+- "xxswapd 59, 43 \n\t"
+- "xxswapd 60, 44 \n\t"
+- "xxswapd 61, 45 \n\t"
+- "xxswapd 62, 46 \n\t"
+- "xxswapd 63, 47 \n\t"
+-
+- "xvmuldp 56, 56, 33 \n\t" // x0_i * -alpha_i, x0_r * alpha_i
+- "xvmuldp 57, 57, 33 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
+- "lxvd2x 41, %5, %2 \n\t"
+-
+- "xvmuldp 58, 58, 33 \n\t"
+- "xvmuldp 59, 59, 33 \n\t"
+-
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+-
+- "xvmuldp 60, 60, 33 \n\t"
+- "xvmuldp 61, 61, 33 \n\t"
+-
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+-
+- "xvmuldp 62, 62, 33 \n\t"
+- "xvmuldp 63, 63, 33 \n\t"
+-
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "xvadddp 48, 48 , 56 \n\t"
+- "xvadddp 49, 49 , 57 \n\t"
+- "xvadddp 50, 50 , 58 \n\t"
+- "xvadddp 51, 51 , 59 \n\t"
+-
+- "stxvd2x 48, 0, %1 \n\t"
+- "stxvd2x 49, %5, %1 \n\t"
+-
+- "xvadddp 52, 52 , 60 \n\t"
+- "xvadddp 53, 53 , 61 \n\t"
+-
+- "stxvd2x 50, %6, %1 \n\t"
+- "stxvd2x 51, %7, %1 \n\t"
+-
+- "xvadddp 54, 54 , 62 \n\t"
+- "xvadddp 55, 55 , 63 \n\t"
+-
+- "stxvd2x 52, %8, %1 \n\t"
+- "stxvd2x 53, %9, %1 \n\t"
+- "stxvd2x 54, %10, %1 \n\t"
+- "stxvd2x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+- "addi %2, %2, 128 \n\t"
+-
+- "addic. %0 , %0 , -8 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- "xvmuldp 48, 40, 32 \n\t" // x0_r * alpha_r, x0_i * alpha_r
+- "xvmuldp 49, 41, 32 \n\t"
+- "xvmuldp 50, 42, 32 \n\t"
+- "xvmuldp 51, 43, 32 \n\t"
+- "xvmuldp 52, 44, 32 \n\t"
+- "xvmuldp 53, 45, 32 \n\t"
+- "xvmuldp 54, 46, 32 \n\t"
+- "xvmuldp 55, 47, 32 \n\t"
+-
+- "xxswapd 56, 40 \n\t"
+- "xxswapd 57, 41 \n\t"
+- "xxswapd 58, 42 \n\t"
+- "xxswapd 59, 43 \n\t"
+- "xxswapd 60, 44 \n\t"
+- "xxswapd 61, 45 \n\t"
+- "xxswapd 62, 46 \n\t"
+- "xxswapd 63, 47 \n\t"
+-
+- "xvmuldp 56, 56, 33 \n\t" // x0_i * -alpha_i, x0_r * alpha_i
+- "xvmuldp 57, 57, 33 \n\t"
+- "xvmuldp 58, 58, 33 \n\t"
+- "xvmuldp 59, 59, 33 \n\t"
+- "xvmuldp 60, 60, 33 \n\t"
+- "xvmuldp 61, 61, 33 \n\t"
+- "xvmuldp 62, 62, 33 \n\t"
+- "xvmuldp 63, 63, 33 \n\t"
+-
+- "xvadddp 48, 48 , 56 \n\t"
+- "xvadddp 49, 49 , 57 \n\t"
+- "xvadddp 50, 50 , 58 \n\t"
+- "xvadddp 51, 51 , 59 \n\t"
+- "xvadddp 52, 52 , 60 \n\t"
+- "xvadddp 53, 53 , 61 \n\t"
+- "xvadddp 54, 54 , 62 \n\t"
+- "xvadddp 55, 55 , 63 \n\t"
+-
+- "stxvd2x 48, 0, %1 \n\t"
+- "stxvd2x 49, %5, %1 \n\t"
+- "stxvd2x 50, %6, %1 \n\t"
+- "stxvd2x 51, %7, %1 \n\t"
+- "stxvd2x 52, %8, %1 \n\t"
+- "stxvd2x 53, %9, %1 \n\t"
+- "stxvd2x 54, %10, %1 \n\t"
+- "stxvd2x 55, %11, %1 \n\t"
+-
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (x2), // 1
+- "r" (x1), // 2
+- "r" (alpha), // 3
+- "r" (pre), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "memory"
+- );
+-
+-}
+-
+-
++ __vector double t0;
++ __vector double t1;
++ __vector double t2;
++ __vector double t3;
++ __vector double t4;
++ __vector double t5;
++ __vector double t6;
++ __vector double t7;
++ __vector double t8;
++ __vector double t9;
++ __vector double t10;
++ __vector double t11;
++
++ __asm__
++ (
++ "dcbt 0, %2 \n\t"
++
++ "xsnegdp 33, %x16 \n\t" // -alpha_i
++ "xxspltd 32, %x15, 0 \n\t" // alpha_r , alpha_r
++ "xxmrghd 33, 33, %x16 \n\t" // -alpha_i , alpha_i
++
++ "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
++ "lxvd2x 41, %17, %2 \n\t"
++ "lxvd2x 42, %18, %2 \n\t"
++ "lxvd2x 43, %19, %2 \n\t"
++ "lxvd2x 44, %20, %2 \n\t"
++ "lxvd2x 45, %21, %2 \n\t"
++ "lxvd2x 46, %22, %2 \n\t"
++ "lxvd2x 47, %23, %2 \n\t"
++
++ "addi %2, %2, 128 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "ble 2f \n\t"
++
++ ".p2align 5 \n"
++ "1: \n\t"
++
++ "xvmuldp 48, 40, 32 \n\t" // x0_r * alpha_r, x0_i * alpha_r
++ "xvmuldp 49, 41, 32 \n\t"
++ "xvmuldp 50, 42, 32 \n\t"
++ "xvmuldp 51, 43, 32 \n\t"
++ "xvmuldp %x3, 44, 32 \n\t"
++ "xvmuldp %x4, 45, 32 \n\t"
++ "xvmuldp %x5, 46, 32 \n\t"
++ "xvmuldp %x6, 47, 32 \n\t"
++
++ "xxswapd %x7, 40 \n\t"
++ "xxswapd %x8, 41 \n\t"
++ "xxswapd %x9, 42 \n\t"
++ "xxswapd %x10, 43 \n\t"
++ "xxswapd %x11, 44 \n\t"
++ "xxswapd %x12, 45 \n\t"
++ "xxswapd %x13, 46 \n\t"
++ "xxswapd %x14, 47 \n\t"
++
++ "xvmuldp %x7, %x7, 33 \n\t" // x0_i * -alpha_i, x0_r * alpha_i
++ "xvmuldp %x8, %x8, 33 \n\t"
++
++ "lxvd2x 40, 0, %2 \n\t" // x0_r, x0_i
++ "lxvd2x 41, %17, %2 \n\t"
++
++ "xvmuldp %x9, %x9, 33 \n\t"
++ "xvmuldp %x10, %x10, 33 \n\t"
++
++ "lxvd2x 42, %18, %2 \n\t"
++ "lxvd2x 43, %19, %2 \n\t"
++
++ "xvmuldp %x11, %x11, 33 \n\t"
++ "xvmuldp %x12, %x12, 33 \n\t"
++
++ "lxvd2x 44, %20, %2 \n\t"
++ "lxvd2x 45, %21, %2 \n\t"
++
++ "xvmuldp %x13, %x13, 33 \n\t"
++ "xvmuldp %x14, %x14, 33 \n\t"
++
++ "lxvd2x 46, %22, %2 \n\t"
++ "lxvd2x 47, %23, %2 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "xvadddp 48, 48, %x7 \n\t"
++ "xvadddp 49, 49, %x8 \n\t"
++ "xvadddp 50, 50, %x9 \n\t"
++ "xvadddp 51, 51, %x10 \n\t"
++
++ "stxvd2x 48, 0, %2 \n\t"
++ "stxvd2x 49, %17, %2 \n\t"
++
++ "xvadddp %x3, %x3, %x11 \n\t"
++ "xvadddp %x4, %x4, %x12 \n\t"
++
++ "stxvd2x 50, %18, %2 \n\t"
++ "stxvd2x 51, %19, %2 \n\t"
++
++ "xvadddp %x5, %x5, %x13 \n\t"
++ "xvadddp %x6, %x6, %x14 \n\t"
++
++ "stxvd2x %x3, %20, %2 \n\t"
++ "stxvd2x %x4, %21, %2 \n\t"
++ "stxvd2x %x5, %22, %2 \n\t"
++ "stxvd2x %x6, %23, %2 \n\t"
++
++ "addi %2, %2, 256 \n\t"
++
++ "addic. %1, %1, -8 \n\t"
++ "bgt 1b \n"
++
++ "2: \n\t"
++
++ "xvmuldp 48, 40, 32 \n\t" // x0_r * alpha_r, x0_i * alpha_r
++ "xvmuldp 49, 41, 32 \n\t"
++ "xvmuldp 50, 42, 32 \n\t"
++ "xvmuldp 51, 43, 32 \n\t"
++ "xvmuldp %x3, 44, 32 \n\t"
++ "xvmuldp %x4, 45, 32 \n\t"
++ "xvmuldp %x5, 46, 32 \n\t"
++ "xvmuldp %x6, 47, 32 \n\t"
++
++ "xxswapd %x7, 40 \n\t"
++ "xxswapd %x8, 41 \n\t"
++ "xxswapd %x9, 42 \n\t"
++ "xxswapd %x10, 43 \n\t"
++ "xxswapd %x11, 44 \n\t"
++ "xxswapd %x12, 45 \n\t"
++ "xxswapd %x13, 46 \n\t"
++ "xxswapd %x14, 47 \n\t"
++
++ "addi %2, %2, -128 \n\t"
++
++ "xvmuldp %x7, %x7, 33 \n\t" // x0_i * -alpha_i, x0_r * alpha_i
++ "xvmuldp %x8, %x8, 33 \n\t"
++ "xvmuldp %x9, %x9, 33 \n\t"
++ "xvmuldp %x10, %x10, 33 \n\t"
++ "xvmuldp %x11, %x11, 33 \n\t"
++ "xvmuldp %x12, %x12, 33 \n\t"
++ "xvmuldp %x13, %x13, 33 \n\t"
++ "xvmuldp %x14, %x14, 33 \n\t"
++
++ "xvadddp 48, 48, %x7 \n\t"
++ "xvadddp 49, 49, %x8 \n\t"
++ "xvadddp 50, 50, %x9 \n\t"
++ "xvadddp 51, 51, %x10 \n\t"
++
++ "stxvd2x 48, 0, %2 \n\t"
++ "stxvd2x 49, %17, %2 \n\t"
++
++ "xvadddp %x3, %x3, %x11 \n\t"
++ "xvadddp %x4, %x4, %x12 \n\t"
++
++ "stxvd2x 50, %18, %2 \n\t"
++ "stxvd2x 51, %19, %2 \n\t"
++
++ "xvadddp %x5, %x5, %x13 \n\t"
++ "xvadddp %x6, %x6, %x14 \n\t"
++
++ "stxvd2x %x3, %20, %2 \n\t"
++ "stxvd2x %x4, %21, %2 \n\t"
++ "stxvd2x %x5, %22, %2 \n\t"
++ "stxvd2x %x6, %23, %2 \n"
++
++ "#n=%1 x=%0=%2 alpha=(%15,%16) o16=%17 o32=%18 o48=%19 o64=%20 o80=%21 o96=%22 o112=%23\n"
++ "#t0=%x3 t1=%x4 t2=%x5 t3=%x6 t4=%x7 t5=%x8 t6=%x9 t7=%x10 t8=%x11 t9=%x12 t10=%x13 t11=%x14"
++ :
++ "+m" (*x),
++ "+r" (n), // 1
++ "+b" (x), // 2
++ "=wa" (t0), // 3
++ "=wa" (t1), // 4
++ "=wa" (t2), // 5
++ "=wa" (t3), // 6
++ "=wa" (t4), // 7
++ "=wa" (t5), // 8
++ "=wa" (t6), // 9
++ "=wa" (t7), // 10
++ "=wa" (t8), // 11
++ "=wa" (t9), // 12
++ "=wa" (t10), // 13
++ "=wa" (t11) // 14
++ :
++ "d" (alpha_r), // 15
++ "d" (alpha_i), // 16
++ "b" (16), // 17
++ "b" (32), // 18
++ "b" (48), // 19
++ "b" (64), // 20
++ "b" (80), // 21
++ "b" (96), // 22
++ "b" (112) // 23
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51"
++ );
++}
+diff --git a/kernel/power/zswap_microk_power8.c b/kernel/power/zswap_microk_power8.c
+index 9e5623752..54391ba5d 100644
+--- a/kernel/power/zswap_microk_power8.c
++++ b/kernel/power/zswap_microk_power8.c
+@@ -35,146 +35,123 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ #define HAVE_KERNEL_16 1
+
+-static void zswap_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y) __attribute__ ((noinline));
+-
+-static void zswap_kernel_16( BLASLONG n, FLOAT *x, FLOAT *y)
++static void
++zswap_kernel_16 (long n, double *x, double *y)
+ {
+-
+-
+- BLASLONG i = n;
+- BLASLONG o16 = 16;
+- BLASLONG o32 = 32;
+- BLASLONG o48 = 48;
+- BLASLONG o64 = 64;
+- BLASLONG o80 = 80;
+- BLASLONG o96 = 96;
+- BLASLONG o112 = 112;
+- FLOAT *x1=x;
+- FLOAT *y1=y;
+- FLOAT *x2=x+1;
+- FLOAT *y2=y+1;
+- BLASLONG pre = 384;
+- BLASLONG alpha=0;
+-
+- __asm__ __volatile__
+- (
+-
+- "addi %3, %3, -8 \n\t"
+- "addi %4, %4, -8 \n\t"
+-
+- ".align 5 \n\t"
+- "1: \n\t"
+-
+- "lxvd2x 32, 0, %2 \n\t"
+- "lxvd2x 33, %5, %2 \n\t"
+- "lxvd2x 34, %6, %2 \n\t"
+- "lxvd2x 35, %7, %2 \n\t"
+- "lxvd2x 36, %8, %2 \n\t"
+- "lxvd2x 37, %9, %2 \n\t"
+- "lxvd2x 38, %10, %2 \n\t"
+- "lxvd2x 39, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 40, 0, %2 \n\t"
+- "lxvd2x 41, %5, %2 \n\t"
+- "lxvd2x 42, %6, %2 \n\t"
+- "lxvd2x 43, %7, %2 \n\t"
+- "lxvd2x 44, %8, %2 \n\t"
+- "lxvd2x 45, %9, %2 \n\t"
+- "lxvd2x 46, %10, %2 \n\t"
+- "lxvd2x 47, %11, %2 \n\t"
+-
+- "addi %2, %2, 128 \n\t"
+-
+- "lxvd2x 48, 0, %1 \n\t"
+- "lxvd2x 49, %5, %1 \n\t"
+- "lxvd2x 50, %6, %1 \n\t"
+- "lxvd2x 51, %7, %1 \n\t"
+- "lxvd2x 52, %8, %1 \n\t"
+- "lxvd2x 53, %9, %1 \n\t"
+- "lxvd2x 54, %10, %1 \n\t"
+- "lxvd2x 55, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "lxvd2x 56, 0, %1 \n\t"
+- "lxvd2x 57, %5, %1 \n\t"
+- "lxvd2x 58, %6, %1 \n\t"
+- "lxvd2x 59, %7, %1 \n\t"
+- "lxvd2x 60, %8, %1 \n\t"
+- "lxvd2x 61, %9, %1 \n\t"
+- "lxvd2x 62, %10, %1 \n\t"
+- "lxvd2x 63, %11, %1 \n\t"
+-
+- "addi %1, %1, 128 \n\t"
+-
+- "stxvd2x 32, 0, %3 \n\t"
+- "stxvd2x 33, %5, %3 \n\t"
+- "stxvd2x 34, %6, %3 \n\t"
+- "stxvd2x 35, %7, %3 \n\t"
+- "stxvd2x 36, %8, %3 \n\t"
+- "stxvd2x 37, %9, %3 \n\t"
+- "stxvd2x 38, %10, %3 \n\t"
+- "stxvd2x 39, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvd2x 40, 0, %3 \n\t"
+- "stxvd2x 41, %5, %3 \n\t"
+- "stxvd2x 42, %6, %3 \n\t"
+- "stxvd2x 43, %7, %3 \n\t"
+- "stxvd2x 44, %8, %3 \n\t"
+- "stxvd2x 45, %9, %3 \n\t"
+- "stxvd2x 46, %10, %3 \n\t"
+- "stxvd2x 47, %11, %3 \n\t"
+-
+- "addi %3, %3, 128 \n\t"
+-
+- "stxvd2x 48, 0, %4 \n\t"
+- "stxvd2x 49, %5, %4 \n\t"
+- "stxvd2x 50, %6, %4 \n\t"
+- "stxvd2x 51, %7, %4 \n\t"
+- "stxvd2x 52, %8, %4 \n\t"
+- "stxvd2x 53, %9, %4 \n\t"
+- "stxvd2x 54, %10, %4 \n\t"
+- "stxvd2x 55, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "stxvd2x 56, 0, %4 \n\t"
+- "stxvd2x 57, %5, %4 \n\t"
+- "stxvd2x 58, %6, %4 \n\t"
+- "stxvd2x 59, %7, %4 \n\t"
+- "stxvd2x 60, %8, %4 \n\t"
+- "stxvd2x 61, %9, %4 \n\t"
+- "stxvd2x 62, %10, %4 \n\t"
+- "stxvd2x 63, %11, %4 \n\t"
+-
+- "addi %4, %4, 128 \n\t"
+-
+- "addic. %0 , %0 , -16 \n\t"
+- "bgt 1b \n\t"
+-
+- "2: \n\t"
+-
+- :
+- :
+- "r" (i), // 0
+- "r" (y1), // 1
+- "r" (x1), // 2
+- "r" (y2), // 3
+- "r" (x2), // 4
+- "r" (o16), // 5
+- "r" (o32), // 6
+- "r" (o48), // 7
+- "r" (o64), // 8
+- "r" (o80), // 9
+- "r" (o96), // 10
+- "r" (o112) // 11
+- : "cr0", "%0", "%2" , "%1", "%3", "%4", "memory"
+- );
+-
+-}
+-
+-
++ __asm__
++ (
++ ".p2align 5 \n"
++ "1: \n\t"
++ "lxvd2x 32, 0, %4 \n\t"
++ "lxvd2x 33, %5, %4 \n\t"
++ "lxvd2x 34, %6, %4 \n\t"
++ "lxvd2x 35, %7, %4 \n\t"
++ "lxvd2x 36, %8, %4 \n\t"
++ "lxvd2x 37, %9, %4 \n\t"
++ "lxvd2x 38, %10, %4 \n\t"
++ "lxvd2x 39, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "lxvd2x 40, 0, %4 \n\t"
++ "lxvd2x 41, %5, %4 \n\t"
++ "lxvd2x 42, %6, %4 \n\t"
++ "lxvd2x 43, %7, %4 \n\t"
++ "lxvd2x 44, %8, %4 \n\t"
++ "lxvd2x 45, %9, %4 \n\t"
++ "lxvd2x 46, %10, %4 \n\t"
++ "lxvd2x 47, %11, %4 \n\t"
++
++ "addi %4, %4, -128 \n\t"
++
++ "lxvd2x 48, 0, %3 \n\t"
++ "lxvd2x 49, %5, %3 \n\t"
++ "lxvd2x 50, %6, %3 \n\t"
++ "lxvd2x 51, %7, %3 \n\t"
++ "lxvd2x 0, %8, %3 \n\t"
++ "lxvd2x 1, %9, %3 \n\t"
++ "lxvd2x 2, %10, %3 \n\t"
++ "lxvd2x 3, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "lxvd2x 4, 0, %3 \n\t"
++ "lxvd2x 5, %5, %3 \n\t"
++ "lxvd2x 6, %6, %3 \n\t"
++ "lxvd2x 7, %7, %3 \n\t"
++ "lxvd2x 8, %8, %3 \n\t"
++ "lxvd2x 9, %9, %3 \n\t"
++ "lxvd2x 10, %10, %3 \n\t"
++ "lxvd2x 11, %11, %3 \n\t"
++
++ "addi %3, %3, -128 \n\t"
++
++ "stxvd2x 32, 0, %3 \n\t"
++ "stxvd2x 33, %5, %3 \n\t"
++ "stxvd2x 34, %6, %3 \n\t"
++ "stxvd2x 35, %7, %3 \n\t"
++ "stxvd2x 36, %8, %3 \n\t"
++ "stxvd2x 37, %9, %3 \n\t"
++ "stxvd2x 38, %10, %3 \n\t"
++ "stxvd2x 39, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 40, 0, %3 \n\t"
++ "stxvd2x 41, %5, %3 \n\t"
++ "stxvd2x 42, %6, %3 \n\t"
++ "stxvd2x 43, %7, %3 \n\t"
++ "stxvd2x 44, %8, %3 \n\t"
++ "stxvd2x 45, %9, %3 \n\t"
++ "stxvd2x 46, %10, %3 \n\t"
++ "stxvd2x 47, %11, %3 \n\t"
++
++ "addi %3, %3, 128 \n\t"
++
++ "stxvd2x 48, 0, %4 \n\t"
++ "stxvd2x 49, %5, %4 \n\t"
++ "stxvd2x 50, %6, %4 \n\t"
++ "stxvd2x 51, %7, %4 \n\t"
++ "stxvd2x 0, %8, %4 \n\t"
++ "stxvd2x 1, %9, %4 \n\t"
++ "stxvd2x 2, %10, %4 \n\t"
++ "stxvd2x 3, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++
++ "stxvd2x 4, 0, %4 \n\t"
++ "stxvd2x 5, %5, %4 \n\t"
++ "stxvd2x 6, %6, %4 \n\t"
++ "stxvd2x 7, %7, %4 \n\t"
++ "stxvd2x 8, %8, %4 \n\t"
++ "stxvd2x 9, %9, %4 \n\t"
++ "stxvd2x 10, %10, %4 \n\t"
++ "stxvd2x 11, %11, %4 \n\t"
++
++ "addi %4, %4, 128 \n\t"
++ "addic. %2, %2, -16 \n\t"
++ "bgt 1b \n"
++
++ "#n=%2 x=%0=%3 y=%1=%4 o16=%5 o32=%6 o48=%7 o64=%8 o80=%9 o96=%10 o112=%11"
++ :
++ "+m" (*x),
++ "+m" (*y),
++ "+r" (n), // 2
++ "+b" (x), // 3
++ "+b" (y) // 4
++ :
++ "b" (16), // 5
++ "b" (32), // 6
++ "b" (48), // 7
++ "b" (64), // 8
++ "b" (80), // 9
++ "b" (96), // 10
++ "b" (112) // 11
++ :
++ "cr0",
++ "vs32","vs33","vs34","vs35","vs36","vs37","vs38","vs39",
++ "vs40","vs41","vs42","vs43","vs44","vs45","vs46","vs47",
++ "vs48","vs49","vs50","vs51","vs0","vs1","vs2","vs3",
++ "vs4","vs5","vs6","vs7","vs8","vs9","vs10","vs11"
++ );
++}
diff --git a/var/spack/repos/builtin/packages/opencoarrays/package.py b/var/spack/repos/builtin/packages/opencoarrays/package.py
index 387bc45946..cba5651fc7 100644
--- a/var/spack/repos/builtin/packages/opencoarrays/package.py
+++ b/var/spack/repos/builtin/packages/opencoarrays/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,12 +34,19 @@ class Opencoarrays(CMakePackage):
"""
homepage = "http://www.opencoarrays.org/"
- url = "https://github.com/sourceryinstitute/opencoarrays/releases/download/1.7.4/OpenCoarrays-1.7.4.tar.gz"
+ url = "https://github.com/sourceryinstitute/OpenCoarrays/releases/download/1.8.4/OpenCoarrays-1.8.4.tar.gz"
+ version('1.8.10', '9ba1670647db4d986634abf743abfd6a')
+ version('1.8.4', '7c9eaffc3a0b5748d0d840e52ec9d4ad')
version('1.8.0', 'ca78d1507b2a118c75128c6c2e093e27')
version('1.7.4', '85ba87def461e3ff5a164de2e6482930')
version('1.6.2', '5a4da993794f3e04ea7855a6678981ba')
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo',
+ 'MinSizeRel', 'CodeCoverage'))
+
depends_on('mpi')
def cmake_args(self):
diff --git a/var/spack/repos/builtin/packages/opencv/package.py b/var/spack/repos/builtin/packages/opencv/package.py
index 8a721032a6..e76f763ffb 100644
--- a/var/spack/repos/builtin/packages/opencv/package.py
+++ b/var/spack/repos/builtin/packages/opencv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,10 +23,9 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-from glob import glob
-class Opencv(Package):
+class Opencv(CMakePackage):
"""OpenCV is released under a BSD license and hence it's free for both
academic and commercial use. It has C++, C, Python and Java interfaces and
supports Windows, Linux, Mac OS, iOS and Android. OpenCV was designed for
@@ -43,12 +42,19 @@ class Opencv(Package):
homepage = 'http://opencv.org/'
url = 'https://github.com/Itseez/opencv/archive/3.1.0.tar.gz'
- version('3.1.0', '70e1dd07f0aa06606f1bc0e3fa15abd3')
+ version('master', git="https://github.com/opencv/opencv.git", branch="master")
+ version('3.3.0', '98a4e4c6f23ec725e808a891dc11eec4')
+ version('3.2.0', 'a43b65488124ba33dde195fea9041b70')
+ version('3.1.0', '70e1dd07f0aa06606f1bc0e3fa15abd3')
+ version('2.4.13.2', 'fe52791ce523681a67036def4c25261b')
+ version('2.4.13.1', 'f6d354500d5013e60dc0fc44b07a63d1')
+ version('2.4.13', '8feb45a71adad89b8017a777477c3eff')
+ version('2.4.12.3', '2496a4a4caf8fecfbfc294fbe6a814b0')
+ version('2.4.12.2', 'bc0c60c2ea1cf4078deef99569912fc7')
+ version('2.4.12.1', '7192f51434710904b5e3594872b897c3')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
variant('eigen', default=True, description='Activates support for eigen')
variant('ipp', default=True, description='Activates support for IPP')
@@ -61,32 +67,38 @@ class Opencv(Package):
description='Enables the build of Python extensions')
variant('java', default=False,
description='Activates support for Java')
-
- depends_on('cmake', type='build')
- depends_on('eigen', when='+eigen', type='build')
-
- depends_on('zlib')
- depends_on('libpng')
- depends_on('libjpeg-turbo')
- depends_on('libtiff')
+ variant('openmp', default=False, description='Activates support for OpenMP threads')
+ variant('core', default=True, description='Include opencv_core module into the OpenCV build')
+ variant('highgui', default=False, description='Include opencv_highgui module into the OpenCV build')
+ variant('imgproc', default=False, description='Include opencv_imgproc module into the OpenCV build')
+ variant('jpeg', default=False, description='Include JPEG support')
+ variant('png', default=False, description='Include PNG support')
+ variant('tiff', default=False, description='Include TIFF support')
+ variant('zlib', default=False, description='Build zlib from source')
+ variant('dnn', default=False, description='Build DNN support')
+
+ depends_on('eigen~mpfr', when='+eigen', type='build')
+
+ depends_on('zlib', when='+zlib')
+ depends_on('libpng', when='+png')
+ depends_on('jpeg', when='+jpeg')
+ depends_on('libtiff', when='+tiff')
depends_on('jasper', when='+jasper')
depends_on('cuda', when='+cuda')
depends_on('gtkplus', when='+gtk')
depends_on('vtk', when='+vtk')
depends_on('qt', when='+qt')
- depends_on('jdk', when='+java')
+ depends_on('java', when='+java')
depends_on('py-numpy', when='+python', type=('build', 'run'))
+ depends_on('protobuf@3.1.0', when='@3.3.0: +dnn')
extends('python', when='+python')
- def install(self, spec, prefix):
- cmake_options = []
- cmake_options.extend(std_cmake_args)
+ def cmake_args(self):
+ spec = self.spec
- cmake_options.extend([
- '-DCMAKE_BUILD_TYPE:STRING={0}'.format((
- 'Debug' if '+debug' in spec else 'Release')),
+ args = [
'-DBUILD_SHARED_LIBS:BOOL={0}'.format((
'ON' if '+shared' in spec else 'OFF')),
'-DENABLE_PRECOMPILED_HEADERS:BOOL=OFF',
@@ -100,89 +112,102 @@ class Opencv(Package):
'ON' if '+vtk' in spec else 'OFF')),
'-DBUILD_opencv_java:BOOL={0}'.format((
'ON' if '+java' in spec else 'OFF')),
- ])
+ '-DBUILD_opencv_core:BOOL={0}'.format((
+ 'ON' if '+core' in spec else 'OFF')),
+ '-DBUILD_opencv_highgui:BOOL={0}'.format((
+ 'ON' if '+highgui' in spec else 'OFF')),
+ '-DBUILD_opencv_imgproc:BOOL={0}'.format((
+ 'ON' if '+imgproc' in spec else 'OFF')),
+ '-DWITH_JPEG:BOOL={0}'.format((
+ 'ON' if '+jpeg' in spec else 'OFF')),
+ '-DWITH_PNG:BOOL={0}'.format((
+ 'ON' if '+png' in spec else 'OFF')),
+ '-DWITH_TIFF:BOOL={0}'.format((
+ 'ON' if '+tiff' in spec else 'OFF')),
+ '-DWITH_ZLIB:BOOL={0}'.format((
+ 'ON' if '+zlib' in spec else 'OFF')),
+ '-DWITH_OPENMP:BOOL={0}'.format((
+ 'ON' if '+openmp' in spec else 'OFF')),
+ '-DBUILD_opencv_dnn:BOOL={0}'.format((
+ 'ON' if '+dnn' in spec else 'OFF')),
+ ]
# Media I/O
- zlib = spec['zlib']
- cmake_options.extend([
- '-DZLIB_LIBRARY_{0}:FILEPATH={1}'.format((
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
- join_path(zlib.prefix.lib,
- 'libz.{0}'.format(dso_suffix))),
- '-DZLIB_INCLUDE_DIR:PATH={0}'.format(zlib.prefix.include)
- ])
-
- libpng = spec['libpng']
- cmake_options.extend([
- '-DPNG_LIBRARY_{0}:FILEPATH={1}'.format((
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
- join_path(libpng.prefix.lib,
- 'libpng.{0}'.format(dso_suffix))),
- '-DPNG_INCLUDE_DIR:PATH={0}'.format(libpng.prefix.include)
- ])
-
- libjpeg = spec['libjpeg-turbo']
- cmake_options.extend([
- '-DJPEG_LIBRARY:FILEPATH={0}'.format(
- join_path(libjpeg.prefix.lib,
- 'libjpeg.{0}'.format(dso_suffix))),
- '-DJPEG_INCLUDE_DIR:PATH={0}'.format(libjpeg.prefix.include)
- ])
-
- libtiff = spec['libtiff']
- cmake_options.extend([
- '-DTIFF_LIBRARY_{0}:FILEPATH={1}'.format((
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
- join_path(libtiff.prefix.lib,
- 'libtiff.{0}'.format(dso_suffix))),
- '-DTIFF_INCLUDE_DIR:PATH={0}'.format(libtiff.prefix.include)
- ])
-
- jasper = spec['jasper']
- cmake_options.extend([
- '-DJASPER_LIBRARY_{0}:FILEPATH={1}'.format((
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
- join_path(jasper.prefix.lib,
- 'libjasper.{0}'.format(dso_suffix))),
- '-DJASPER_INCLUDE_DIR:PATH={0}'.format(jasper.prefix.include)
- ])
+ if '+zlib' in spec:
+ zlib = spec['zlib']
+ args.extend([
+ '-DZLIB_LIBRARY_{0}:FILEPATH={1}'.format((
+ 'DEBUG' if '+debug' in spec else 'RELEASE'),
+ join_path(zlib.prefix.lib,
+ 'libz.{0}'.format(dso_suffix))),
+ '-DZLIB_INCLUDE_DIR:PATH={0}'.format(zlib.prefix.include)
+ ])
+
+ if '+png' in spec:
+ libpng = spec['libpng']
+ args.extend([
+ '-DPNG_LIBRARY_{0}:FILEPATH={1}'.format((
+ 'DEBUG' if '+debug' in spec else 'RELEASE'),
+ join_path(libpng.prefix.lib,
+ 'libpng.{0}'.format(dso_suffix))),
+ '-DPNG_INCLUDE_DIR:PATH={0}'.format(libpng.prefix.include)
+ ])
+
+ if '+jpeg' in spec:
+ libjpeg = spec['jpeg']
+ args.extend([
+ '-DBUILD_JPEG:BOOL=OFF',
+ '-DJPEG_LIBRARY:FILEPATH={0}'.format(
+ join_path(libjpeg.prefix.lib,
+ 'libjpeg.{0}'.format(dso_suffix))),
+ '-DJPEG_INCLUDE_DIR:PATH={0}'.format(libjpeg.prefix.include)
+ ])
+
+ if '+tiff' in spec:
+ libtiff = spec['libtiff']
+ args.extend([
+ '-DTIFF_LIBRARY_{0}:FILEPATH={1}'.format((
+ 'DEBUG' if '+debug' in spec else 'RELEASE'),
+ join_path(libtiff.prefix.lib,
+ 'libtiff.{0}'.format(dso_suffix))),
+ '-DTIFF_INCLUDE_DIR:PATH={0}'.format(libtiff.prefix.include)
+ ])
+
+ if '+jasper' in spec:
+ jasper = spec['jasper']
+ args.extend([
+ '-DJASPER_LIBRARY_{0}:FILEPATH={1}'.format((
+ 'DEBUG' if '+debug' in spec else 'RELEASE'),
+ join_path(jasper.prefix.lib,
+ 'libjasper.{0}'.format(dso_suffix))),
+ '-DJASPER_INCLUDE_DIR:PATH={0}'.format(jasper.prefix.include)
+ ])
# GUI
if '+gtk' not in spec:
- cmake_options.extend([
+ args.extend([
'-DWITH_GTK:BOOL=OFF',
'-DWITH_GTK_2_X:BOOL=OFF'
])
elif '^gtkplus@3:' in spec:
- cmake_options.extend([
+ args.extend([
'-DWITH_GTK:BOOL=ON',
'-DWITH_GTK_2_X:BOOL=OFF'
])
elif '^gtkplus@2:3' in spec:
- cmake_options.extend([
+ args.extend([
'-DWITH_GTK:BOOL=OFF',
'-DWITH_GTK_2_X:BOOL=ON'
])
# Python
if '+python' in spec:
- python = spec['python']
-
- try:
- python_lib = glob(join_path(
- python.prefix.lib, 'libpython*.{0}'.format(dso_suffix)))[0]
- except KeyError:
- raise InstallError('Cannot find libpython')
-
- try:
- python_include_dir = glob(join_path(python.prefix.include,
- 'python*'))[0]
- except KeyError:
- raise InstallError('Cannot find python include directory')
+ python_exe = spec['python'].command.path
+ python_lib = spec['python'].libs[0]
+ python_include_dir = spec['python'].headers.directories[0]
if '^python@3:' in spec:
- python_exe = join_path(python.prefix.bin, 'python3')
- cmake_options.extend([
+ args.extend([
'-DBUILD_opencv_python3=ON',
'-DPYTHON3_EXECUTABLE={0}'.format(python_exe),
'-DPYTHON3_LIBRARY={0}'.format(python_lib),
@@ -190,8 +215,7 @@ class Opencv(Package):
'-DBUILD_opencv_python2=OFF',
])
elif '^python@2:3' in spec:
- python_exe = join_path(python.prefix.bin, 'python2')
- cmake_options.extend([
+ args.extend([
'-DBUILD_opencv_python2=ON',
'-DPYTHON2_EXECUTABLE={0}'.format(python_exe),
'-DPYTHON2_LIBRARY={0}'.format(python_lib),
@@ -199,12 +223,9 @@ class Opencv(Package):
'-DBUILD_opencv_python3=OFF',
])
else:
- cmake_options.extend([
+ args.extend([
'-DBUILD_opencv_python2=OFF',
'-DBUILD_opencv_python3=OFF'
])
- with working_dir('spack_build', create=True):
- cmake('..', *cmake_options)
- make('VERBOSE=1')
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/openexr/package.py b/var/spack/repos/builtin/packages/openexr/package.py
index 3619bd063c..ad463bc792 100644
--- a/var/spack/repos/builtin/packages/openexr/package.py
+++ b/var/spack/repos/builtin/packages/openexr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/openfast/package.py b/var/spack/repos/builtin/packages/openfast/package.py
new file mode 100644
index 0000000000..74d1881de9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfast/package.py
@@ -0,0 +1,93 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Openfast(CMakePackage):
+ """Wind turbine simulation package from NREL"""
+
+ homepage = "http://openfast.readthedocs.io/en/latest/"
+ url = "https://github.com/OpenFAST/openfast.git"
+
+ maintainers = ['jrood-nrel']
+
+ version('develop',
+ git='https://github.com/OpenFAST/openfast.git',
+ branch='dev')
+ version('master',
+ git='https://github.com/OpenFAST/openfast.git',
+ branch='master')
+
+ variant('shared', default=False,
+ description="Build shared libraries")
+ variant('double-precision', default=True,
+ description="Treat REAL as double precision")
+ variant('dll-interface', default=True,
+ description="Enable dynamic library loading interface")
+ variant('cxx', default=False,
+ description="Enable C++ bindings")
+
+ # Dependencies for OpenFAST Fortran
+ depends_on('blas')
+ depends_on('lapack')
+
+ # Additional dependencies when compiling C++ library
+ depends_on('mpi', when='+cxx')
+ depends_on('yaml-cpp', when='+cxx')
+ depends_on('hdf5+mpi+cxx', when='+cxx')
+ depends_on('zlib', when='+cxx')
+ depends_on('libxml2', when='+cxx')
+
+ # Disable parallel builds because of OpenFOAM Types modules dependencies
+ parallel = False
+
+ def cmake_args(self):
+ spec = self.spec
+
+ options = []
+
+ options.extend([
+ '-DBUILD_SHARED_LIBS:BOOL=%s' % (
+ 'ON' if '+shared' in spec else 'OFF'),
+ '-DDOUBLE_PRECISION:BOOL=%s' % (
+ 'ON' if '+double-precision' in spec else 'OFF'),
+ '-DUSE_DLL_INTERFACE:BOOL=%s' % (
+ 'ON' if '+dll-interface' in spec else 'OFF'),
+ '-DBUILD_FAST_CPP_API:BOOL=%s' % (
+ 'ON' if '+cxx' in spec else 'OFF'),
+ ])
+
+ if '+cxx' in spec:
+ options.extend([
+ '-DHDF5_ROOT:PATH=%s' % spec['hdf5'].prefix,
+ '-DYAML_ROOT:PATH=%s' % spec['yaml-cpp'].prefix,
+ ])
+
+ if '~shared' in spec:
+ options.extend([
+ '-DHDF5_USE_STATIC_LIBRARIES=ON',
+ ])
+
+ return options
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-bin.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-bin.patch
new file mode 100644
index 0000000000..b9e87a7ec8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-bin.patch
@@ -0,0 +1,503 @@
+--- OpenFOAM-v1612+.orig/bin/foamEtcFile 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/bin/foamEtcFile 2017-03-23 10:08:37.296887070 +0100
+@@ -4,7 +4,7 @@
+ # \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ # \\ / O peration |
+ # \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
+-# \\/ M anipulation |
++# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
+ #-------------------------------------------------------------------------------
+ # License
+ # This file is part of OpenFOAM.
+@@ -26,7 +26,7 @@
+ # foamEtcFile
+ #
+ # Description
+-# Locate user/group/shipped file with semantics similar to the
++# Locate user/group/other files with semantics similar to the
+ # ~OpenFOAM/fileName expansion.
+ #
+ # The -mode option can be used to allow chaining from
+@@ -34,40 +34,53 @@
+ #
+ # For example, within the user ~/.OpenFOAM/<VER>/prefs.sh:
+ # \code
+-# foamPrefs=`$WM_PROJECT_DIR/bin/foamEtcFile -m go prefs.sh` \
+-# && _foamSource $foamPrefs
++# eval $(foamEtcFile -sh -mode=go prefs.sh)
+ # \endcode
+ #
++# Environment
++# - WM_PROJECT: (unset defaults to OpenFOAM)
++# - WM_PROJECT_SITE: (unset defaults to PREFIX/site)
++# - WM_PROJECT_VERSION: (unset defaults to detect from path)
++#
+ # Note
+-# This script must exist in $FOAM_INST_DIR/OpenFOAM-<VERSION>/bin/
+-# or $FOAM_INST_DIR/openfoam<VERSION>/bin/ (for the debian version)
++# This script must exist in one of these locations:
++# - $WM_PROJECT_INST_DIR/OpenFOAM-<VERSION>/bin
++# - $WM_PROJECT_INST_DIR/openfoam-<VERSION>/bin
++# - $WM_PROJECT_INST_DIR/OpenFOAM+<VERSION>/bin
++# - $WM_PROJECT_INST_DIR/openfoam+<VERSION>/bin
++# - $WM_PROJECT_INST_DIR/openfoam<VERSION>/bin (debian version)
+ #
+ #-------------------------------------------------------------------------------
++unset optQuiet optSilent
+ usage() {
+ [ "${optQuiet:-$optSilent}" = true ] && exit 1
+-
+ exec 1>&2
+ while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+ cat<<USAGE
+
+-Usage: ${0##*/} [OPTION] fileName
+- ${0##*/} [OPTION] -list
++Usage: foamEtcFile [OPTION] fileName
++ foamEtcFile [OPTION] [-list|-list-test] [fileName]
+ options:
+- -all return all files (otherwise stop after the first match)
+- -list list the directories to be searched
+- -mode <mode> any combination of u(user), g(group), o(other)
+- -prefix <dir> specify an alternative installation prefix
+- -quiet suppress all normal output
+- -silent suppress all stderr output
+- -version <ver> specify an alternative OpenFOAM version
+- in the form Maj.Min.Rev (eg, 1.7.0)
+- -help print the usage
++ -a, -all Return all files (otherwise stop after the first match)
++ -l, -list List directories or files to be checked
++ -list-test List (existing) directories or files to be checked
++ -mode=MODE Any combination of u(user), g(group), o(other)
++ -prefix=DIR Specify an alternative installation prefix
++ -version=VER Specify alternative OpenFOAM version (eg, 3.0, 1612, ...)
++ -csh | -sh Produce output suitable for a csh or sh 'eval'
++ -csh-verbose | -sh-verbose
++ As per -csh | -sh, with additional verbosity
++ -q, -quiet Suppress all normal output
++ -s, -silent Suppress stderr, except -csh-verbose, -sh-verbose output
++ -help Print the usage
+
+- Locate user/group/shipped file with semantics similar to the
++ Locate user/group/other file with semantics similar to the
+ ~OpenFOAM/fileName expansion.
+
+- The options can also be specified as a single character
+- (eg, '-q' instead of '-quiet'), but must not be grouped.
++ Single character options must not be grouped. Equivalent options:
++ -mode=MODE, -mode MODE, -m MODE
++ -prefix=DIR, -prefix DIR, -p DIR
++ -version=VER, -version VER, -v VER
+
+ Exit status
+ 0 when the file is found. Print resolved path to stdout.
+@@ -78,61 +91,117 @@
+ exit 1
+ }
+
+-#-------------------------------------------------------------------------------
++# Report error and exit
++die()
++{
++ [ "${optQuiet:-$optSilent}" = true ] && exit 1
++ exec 1>&2
++ echo
++ echo "Error encountered:"
++ while [ "$#" -ge 1 ]; do echo " $1"; shift; done
++ echo
++ echo "See 'foamEtcFile -help' for usage"
++ echo
++ exit 1
++}
+
+-# the bin dir:
+-binDir="${0%/*}"
++#-------------------------------------------------------------------------------
++binDir="${0%/*}" # The bin dir
++projectDir="${binDir%/bin}" # The project dir
++prefixDir="${projectDir%/*}" # The prefix dir (same as $WM_PROJECT_INST_DIR)
+
+-# the project dir:
++# Could not resolve projectDir, prefixDir? (eg, called as ./bin/foamEtcFile)
++if [ "$prefixDir" = "$projectDir" ]
++then
++ binDir="$(cd $binDir && pwd -L)"
+ projectDir="${binDir%/bin}"
+-
+-# the prefix dir (same as $FOAM_INST_DIR):
+ prefixDir="${projectDir%/*}"
++fi
++projectDirName="${projectDir##*/}" # The project directory name
+
+-# the name used for the project directory
+-projectDirName="${projectDir##*/}"
++projectName="${WM_PROJECT:-OpenFOAM}" # The project name
++projectVersion="$WM_PROJECT_VERSION" # Empty? - will be treated later
+
+-# version number used for debian packaging
+-unset versionNum
+
++#-------------------------------------------------------------------------------
++
++# Guess project version or simply get the stem part of the projectDirName.
++# Handle standard and debian naming conventions.
+ #
+-# handle standard and debian naming convention
++# - projectVersion: update unless already set
+ #
+-case "$projectDirName" in
+-OpenFOAM-*) # standard naming convention OpenFOAM-<VERSION>
+- version="${projectDirName##OpenFOAM-}"
+- ;;
++# Helper variables:
++# - dirBase (for reassembling name) == projectDirName without the version
++# - versionNum (debian packaging)
++unset dirBase versionNum
++guessVersion()
++{
++ local version
+
+-openfoam[0-9]* | openfoam-dev) # debian naming convention 'openfoam<VERSION>'
+- versionNum="${projectDirName##openfoam}"
+- case "$versionNum" in
+- ??) # convert 2 digit version number to decimal delineated
+- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)@\1.\2@')
+- ;;
+- ???) # convert 3 digit version number to decimal delineated
+- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)@\1.\2.\3@')
+- ;;
+- ????) # convert 4 digit version number to decimal delineated
+- version=$(echo "$versionNum" | sed -e 's@\(.\)\(.\)\(.\)\(.\)@\1.\2.\3.\4@')
+- ;;
+- *) # failback - use current environment setting
+- version="$WM_PROJECT_VERSION"
++ case "$projectDirName" in
++ (OpenFOAM-* | openfoam-*)
++ # Standard naming: OpenFOAM-<VERSION> or openfoam-<VERSION>
++ dirBase="${projectDirName%%-*}-"
++ version="${projectDirName#*-}"
++ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
++ ;;
++
++ (OpenFOAM+* | openfoam+*)
++ # Alternative naming: OpenFOAM+<VERSION> or openfoam+<VERSION>
++ dirBase="${projectDirName%%+*}+"
++ version="${projectDirName#*+}"
++ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
++ ;;
++
++ (openfoam[0-9]*)
++ # Debian naming: openfoam<VERSION>
++ dirBase="openfoam"
++ version="${projectDirName#openfoam}"
++ versionNum="$version"
++
++ # Convert digits version number to decimal delineated
++ case "${#versionNum}" in (2|3|4)
++ version=$(echo "$versionNum" | sed -e 's@\([0-9]\)@\1.@g')
++ version="${version%.}"
+ ;;
+ esac
++
++ # Ignore special treatment if no decimals were inserted.
++ [ "${#version}" -gt "${#versionNum}" ] || unset versionNum
+ ;;
+
+-*)
+- echo "Error : unknown/unsupported naming convention"
+- exit 1
++ (*)
++ die "unknown/unsupported naming convention for '$projectDirName'"
+ ;;
+ esac
+
++ # Set projectVersion if required
++ : ${projectVersion:=$version}
++}
++
++
++# Set projectVersion and update versionNum, projectDirName accordingly
++setVersion()
++{
++ projectVersion="$1"
++
++ # Need dirBase when reassembling projectDirName
++ [ -n "$dirBase" ] || guessVersion
++
++ # Debian: update x.y.z -> xyz version
++ if [ -n "$versionNum" ]
++ then
++ versionNum=$(echo "$projectVersion" | sed -e 's@\.@@g')
++ fi
++
++ projectDirName="$dirBase${versionNum:-$projectVersion}"
++}
++
+
+-# default mode is 'ugo'
+-mode=ugo
+-unset optAll optList optQuiet optSilent
++optMode=ugo # Default mode is always 'ugo'
++unset optAll optList optShell optVersion
+
+-# parse options
++# Parse options
+ while [ "$#" -gt 0 ]
+ do
+ case "$1" in
+@@ -141,27 +210,45 @@
+ ;;
+ -a | -all)
+ optAll=true
++ unset optShell
+ ;;
+ -l | -list)
+ optList=true
++ unset optShell
++ ;;
++ -list-test)
++ optList='test'
++ unset optShell
++ ;;
++ -csh | -sh | -csh-verbose | -sh-verbose)
++ optShell="${1#-}"
++ unset optAll
++ ;;
++ -mode=[ugo]*)
++ optMode="${1#*=}"
++ ;;
++ -prefix=/*)
++ prefixDir="${1#*=}"
++ prefixDir="${prefixDir%/}"
++ ;;
++ -version=*)
++ optVersion="${1#*=}"
+ ;;
+ -m | -mode)
+- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+- mode="$2"
+-
+- # sanity check:
+- case "$mode" in
+- *u* | *g* | *o* )
++ optMode="$2"
++ shift
++ # Sanity check. Handles missing argument too.
++ case "$optMode" in
++ ([ugo]*)
+ ;;
+- *)
+- usage "'$1' option with invalid mode '$mode'"
++ (*)
++ die "invalid mode '$optMode'"
+ ;;
+ esac
+- shift
+ ;;
+ -p | -prefix)
+- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+- prefixDir="$2"
++ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
++ prefixDir="${2%/}"
+ shift
+ ;;
+ -q | -quiet)
+@@ -171,13 +258,8 @@
+ optSilent=true
+ ;;
+ -v | -version)
+- [ "$#" -ge 2 ] || usage "'$1' option requires an argument"
+- version="$2"
+- # convert x.y.z -> xyz version (if installation looked like debian)
+- if [ -n "$versionNum" ]
+- then
+- versionNum=$(echo "$version" | sed -e 's@\.@@g')
+- fi
++ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
++ optVersion="$2"
+ shift
+ ;;
+ --)
+@@ -185,7 +267,7 @@
+ break
+ ;;
+ -*)
+- usage "unknown option: '$*'"
++ die "unknown option: '$1'"
+ ;;
+ *)
+ break
+@@ -195,11 +277,28 @@
+ done
+
+
+-# debugging:
+-# echo "Installed locations:"
+-# for i in projectDir prefixDir projectDirName version versionNum
++#-------------------------------------------------------------------------------
++
++if [ -n "$optVersion" ]
++then
++ setVersion $optVersion
++elif [ -z "$projectVersion" ]
++then
++ guessVersion
++fi
++
++# Updates:
++# - projectDir for changes via -prefix or -version
++# - projectSite for changes via -prefix
++projectDir="$prefixDir/$projectDirName"
++projectSite="${WM_PROJECT_SITE:-$prefixDir/site}"
++
++
++# Debugging:
++# echo "Installed locations:" 1>&2
++# for i in projectDir prefixDir projectDirName projectVersion
+ # do
+-# eval echo "$i=\$$i"
++# eval echo "$i=\$$i" 1>&2
+ # done
+
+
+@@ -210,30 +309,18 @@
+
+ # Define the various places to be searched:
+ unset dirList
+-case "$mode" in
+-*u*) # user
+- userDir="$HOME/.${WM_PROJECT:-OpenFOAM}"
+- dirList="$dirList $userDir/$version $userDir"
++case "$optMode" in (*u*) # (U)ser
++ dirList="$dirList $HOME/.$projectName/$projectVersion $HOME/.$projectName"
+ ;;
+ esac
+
+-case "$mode" in
+-*g*) # group (site)
+- siteDir="${WM_PROJECT_SITE:-$prefixDir/site}"
+- dirList="$dirList $siteDir/$version $siteDir"
++case "$optMode" in (*g*) # (G)roup == site
++ dirList="$dirList $projectSite/$projectVersion $projectSite"
+ ;;
+ esac
+
+-case "$mode" in
+-*o*) # other (shipped)
+- if [ -n "$versionNum" ]
+- then
+- # debian packaging
+- dirList="$dirList $prefixDir/openfoam$versionNum/etc"
+- else
+- # standard packaging
+- dirList="$dirList $prefixDir/${WM_PROJECT:-OpenFOAM}-$version/etc"
+- fi
++case "$optMode" in (*o*) # (O)ther == shipped
++ dirList="$dirList $projectDir/etc"
+ ;;
+ esac
+ set -- $dirList
+@@ -244,50 +331,87 @@
+ #
+
+ exitCode=0
+-if [ "$optList" = true ]
++if [ -n "$optList" ]
+ then
+
+- # list directories, or potential file locations
+- [ "$nArgs" -le 1 ] || usage
++ # List directories, or potential file locations
++ [ "$nArgs" -le 1 ] || \
++ die "-list expects 0 or 1 filename, but $nArgs provided"
++
++ # A silly combination, but -quiet does have precedence
++ [ -n "$optQuiet" ] && exit 0
+
+- # a silly combination, but -quiet does have precedence
+- [ "$optQuiet" = true ] && exit 0
++ # Test for directory or file too?
++ if [ "$optList" = "test" ]
++ then
++ exitCode=2 # Fallback to a general error (file not found)
+
++ if [ "$nArgs" -eq 1 ]
++ then
+ for dir
+ do
+- if [ "$nArgs" -eq 1 ]
++ resolved="$dir/$fileName"
++ if [ -f "$resolved" ]
+ then
+- echo "$dir/$fileName"
++ echo "$resolved"
++ exitCode=0 # OK
++ fi
++ done
+ else
++ for dir
++ do
++ if [ -d "$dir" ]
++ then
+ echo "$dir"
++ exitCode=0 # OK
+ fi
+ done
++ fi
++ else
++ for dir
++ do
++ echo "$dir${fileName:+/}$fileName"
++ done
++ fi
+
+ else
+
+- [ "$nArgs" -eq 1 ] || usage
++ [ "$nArgs" -eq 1 ] || die "One filename expected - $nArgs provided"
+
+- # general error, eg file not found
+- exitCode=2
++ exitCode=2 # Fallback to a general error (file not found)
+
+ for dir
+ do
+ if [ -f "$dir/$fileName" ]
+ then
+ exitCode=0
+- if [ "$optQuiet" = true ]
+- then
++ [ -n "$optQuiet" ] && break
++
++ case "$optShell" in
++ (*verbose)
++ echo "Using: $dir/$fileName" 1>&2
++ ;;
++ esac
++
++ case "$optShell" in
++ csh*)
++ echo "source $dir/$fileName"
+ break
+- else
++ ;;
++ sh*)
++ echo ". $dir/$fileName"
++ break
++ ;;
++ *)
+ echo "$dir/$fileName"
+- [ "$optAll" = true ] || break
+- fi
++ [ -n "$optAll" ] || break
++ ;;
++ esac
+ fi
+ done
+
+ fi
+
+-
+ exit $exitCode
+
+ #------------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-build.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-build.patch
new file mode 100644
index 0000000000..26e2d8f085
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-build.patch
@@ -0,0 +1,17 @@
+--- OpenFOAM-v1612+.orig/Allwmake 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/Allwmake 2017-03-29 09:08:15.503865203 +0200
+@@ -17,6 +17,14 @@
+ exit 1
+ }
+
++#------------------------------------------------------------------------------
++echo "========================================"
++date "+%Y-%m-%d %H:%M:%S %z" 2>/dev/null || echo "date is unknown"
++echo "Starting ${WM_PROJECT_DIR##*/} ${0##*}"
++echo " $WM_COMPILER $WM_COMPILER_TYPE compiler"
++echo " ${WM_OPTIONS}, with ${WM_MPLIB} ${FOAM_MPI}"
++echo
++
+ # Compile wmake support applications
+ (cd wmake/src && make)
+
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-etc.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-etc.patch
new file mode 100644
index 0000000000..dd8146e953
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-etc.patch
@@ -0,0 +1,41 @@
+--- OpenFOAM-v1612+.orig/etc/bashrc 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/bashrc 2017-03-22 16:05:05.751237072 +0100
+@@ -42,7 +42,8 @@
+ #
+ # Please set to the appropriate path if the default is not correct.
+ #
+-[ $BASH_SOURCE ] && FOAM_INST_DIR=$(\cd ${BASH_SOURCE%/*/*/*} && \pwd -P) || \
++rc="${BASH_SOURCE:-${ZSH_NAME:+$0}}"
++[ -n "$rc" ] && FOAM_INST_DIR=$(\cd $(dirname $rc)/../.. && \pwd -L) || \
+ FOAM_INST_DIR=$HOME/$WM_PROJECT
+ # FOAM_INST_DIR=~$WM_PROJECT
+ # FOAM_INST_DIR=/opt/$WM_PROJECT
+@@ -135,8 +136,10 @@
+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ . $WM_PROJECT_DIR/etc/config.sh/functions
+
+-# Add in preset user or site preferences:
+-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.sh`
++# Override definitions via prefs, with 'other' first so the sys-admin
++# can provide base values independent of WM_PROJECT_SITE
++_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode o prefs.sh`
++_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode ug prefs.sh`
+
+ # Evaluate command-line parameters and record settings for later
+ # these can be used to set/unset values, or specify alternative pref files
+diff -uw OpenFOAM-v1612+.orig/etc/cshrc OpenFOAM-v1612+/etc/cshrc
+--- OpenFOAM-v1612+.orig/etc/cshrc 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/cshrc 2017-03-22 16:04:51.839291067 +0100
+@@ -148,8 +148,10 @@
+ # Source files, possibly with some verbosity
+ alias _foamSource 'if ($?FOAM_VERBOSE && $?prompt) echo "Sourcing: \!*"; if (\!* != "") source \!*'
+
+-# Add in preset user or site preferences:
+-_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile prefs.csh`
++# Override definitions via prefs, with 'other' first so the sys-admin
++# can provide base values independent of WM_PROJECT_SITE
++_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode o prefs.csh`
++_foamSource `$WM_PROJECT_DIR/bin/foamEtcFile -mode ug prefs.csh`
+
+ # Evaluate command-line parameters and record settings for later
+ # these can be used to set/unset values, or specify alternative pref files
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-mgridgen-lib.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-mgridgen-lib.patch
new file mode 100644
index 0000000000..8dc0b995ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-mgridgen-lib.patch
@@ -0,0 +1,41 @@
+--- OpenFOAM-v1612+.orig/src/fvAgglomerationMethods/Allwmake 2017-01-02 09:56:17.578558265 +0100
++++ OpenFOAM-v1612+/src/fvAgglomerationMethods/Allwmake 2017-04-18 18:58:38.236795902 +0200
+@@ -4,9 +4,13 @@
+ # Parse arguments for library compilation
+ . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
+
+-export ParMGridGen=$WM_THIRD_PARTY_DIR/ParMGridGen-1.0
++unset MGRIDGEN_ARCH_PATH
++if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/mgridgen)
++then
++ . $settings
++fi
+
+-if [ -e "$FOAM_LIBBIN/libMGridGen.so" ]
++if [ -e "$MGRIDGEN_ARCH_PATH/include/mgridgen.h" ]
+ then
+ wmake $targetType MGridGenGamgAgglomeration
+ fi
+--- OpenFOAM-v1612+.orig/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options 2017-01-02 09:56:17.578558265 +0100
++++ OpenFOAM-v1612+/src/fvAgglomerationMethods/MGridGenGamgAgglomeration/Make/options 2017-04-18 18:59:16.860662811 +0200
+@@ -1,15 +1,9 @@
+-/* Needs ParMGridGen environment variable set. (see Allwmake script) */
+-
+-TYPE_REAL=
+-#if defined(WM_SP)
+-TYPE_REAL=-DTYPE_REAL
+-#endif
+-
+ EXE_INC = \
+ -I$(LIB_SRC)/finiteVolume/lnInclude \
+- -I$(ParMGridGen)/MGridGen/Lib/lnInclude \
+- -I$(ParMGridGen)/MGridGen/IMlib/lnInclude \
+- $(TYPE_REAL)
++ -I$(MGRIDGEN_ARCH_PATH)/include
+
+ LIB_LIBS = \
+- -L$(FOAM_EXT_LIBBIN) -lMGridGen
++ -L$(FOAM_EXT_LIBBIN) \
++ -L$(MGRIDGEN_ARCH_PATH)/lib \
++ -L$(MGRIDGEN_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
++ -lmgrid
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-mpi.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-mpi.patch
new file mode 100644
index 0000000000..b3663b0a49
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-mpi.patch
@@ -0,0 +1,36 @@
+--- OpenFOAM-v1612+.orig/etc/config.sh/mpi 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.sh/mpi 2017-03-29 13:55:57.507980699 +0200
+@@ -75,8 +75,15 @@
+ _foamAddMan $MPI_ARCH_PATH/share/man
+ ;;
+
++USERMPI)
++ # Use an arbitrary, user-specified mpi implementation
++ export FOAM_MPI=mpi-user
++ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi-user`
++ ;;
++
+ SYSTEMMPI)
+ export FOAM_MPI=mpi-system
++ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.sh/mpi-system`
+
+ if [ -z "$MPI_ROOT" ]
+ then
+--- OpenFOAM-v1612+.orig/etc/config.csh/mpi 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.csh/mpi 2017-03-29 13:56:36.347835938 +0200
+@@ -71,8 +71,15 @@
+ _foamAddMan $MPI_ARCH_PATH/share/man
+ breaksw
+
++case USERMPI:
++ # Use an arbitrary, user-specified mpi implementation
++ setenv FOAM_MPI mpi-user
++ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi-user`
++ breaksw
++
+ case SYSTEMMPI:
+ setenv FOAM_MPI mpi-system
++ _foamSource `$WM_PROJECT_DIR/bin/foamEtcFile config.csh/mpi-system`
+
+ if ( ! ($?MPI_ROOT) ) then
+ echo
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-scotch-metis-lib.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-scotch-metis-lib.patch
new file mode 100644
index 0000000000..b7530e6320
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-scotch-metis-lib.patch
@@ -0,0 +1,48 @@
+--- OpenFOAM-v1612+.orig/src/parallel/decompose/Allwmake 2017-03-21 16:34:44.599021283 +0100
++++ OpenFOAM-v1612+/src/parallel/decompose/Allwmake 2017-03-21 16:28:57.243969660 +0100
+@@ -36,6 +36,7 @@
+
+ # Library
+ [ -r $FOAM_EXT_LIBBIN/libmetis.so ] || \
++ [ -r $METIS_ARCH_PATH/lib/libmetis.so ] || \
+ [ -r $METIS_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libmetis.so ] || \
+ [ "${METIS_ARCH_PATH##*-}" = system ] || {
+ echo "$warning (missing library)"
+@@ -90,6 +91,7 @@
+
+ # Library
+ [ -r $FOAM_EXT_LIBBIN/libscotch.so ] || \
++ [ -r $SCOTCH_ARCH_PATH/lib/libscotch.so ] || \
+ [ -r $SCOTCH_ARCH_PATH/lib$WM_COMPILER_LIB_ARCH/libscotch.so ] || \
+ [ "${SCOTCH_ARCH_PATH##*-}" = system ] || {
+ echo "$warning (missing library)"
+--- OpenFOAM-v1612+.orig/src/parallel/decompose/metisDecomp/Make/options 2017-03-21 16:34:25.383075328 +0100
++++ OpenFOAM-v1612+/src/parallel/decompose/metisDecomp/Make/options 2017-03-21 16:30:15.727758338 +0100
+@@ -8,6 +8,7 @@
+ * to support central, non-thirdparty installations
+ */
+ LIB_LIBS = \
++ -L$(METIS_ARCH_PATH)/lib \
+ -L$(METIS_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+ -L$(FOAM_EXT_LIBBIN) \
+ -lmetis
+--- OpenFOAM-v1612+.orig/src/parallel/decompose/ptscotchDecomp/Make/options 2017-03-21 16:34:34.607049385 +0100
++++ OpenFOAM-v1612+/src/parallel/decompose/ptscotchDecomp/Make/options 2017-03-21 16:30:00.479799399 +0100
+@@ -16,6 +16,7 @@
+ * to support central, non-thirdparty installations
+ */
+ LIB_LIBS = \
++ -L$(SCOTCH_ARCH_PATH)/lib \
+ -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+ -L$(FOAM_EXT_LIBBIN) \
+ -L$(FOAM_EXT_LIBBIN)/$(FOAM_MPI) \
+--- OpenFOAM-v1612+.orig/src/parallel/decompose/scotchDecomp/Make/options 2017-03-21 16:34:39.159036582 +0100
++++ OpenFOAM-v1612+/src/parallel/decompose/scotchDecomp/Make/options 2017-03-21 16:29:46.719836452 +0100
+@@ -16,6 +16,7 @@
+ * to support central, non-thirdparty installations
+ */
+ LIB_LIBS = \
++ -L$(SCOTCH_ARCH_PATH)/lib \
+ -L$(SCOTCH_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
+ -L$(FOAM_EXT_LIBBIN) \
+ -lscotch \
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-site.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-site.patch
new file mode 100644
index 0000000000..d988c2f9b8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-site.patch
@@ -0,0 +1,42 @@
+diff -uw OpenFOAM-v1612+.orig/etc/config.sh/settings OpenFOAM-v1612+/etc/config.sh/settings
+--- OpenFOAM-v1612+.orig/etc/config.sh/settings 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.sh/settings 2017-03-23 12:22:52.002101020 +0100
+@@ -141,7 +141,7 @@
+ #------------------------------------------------------------------------------
+
+ # Location of the jobControl directory
+-export FOAM_JOB_DIR=$WM_PROJECT_INST_DIR/jobControl
++export FOAM_JOB_DIR=$HOME/.OpenFOAM/jobControl #SPACK: non-central location
+
+ # wmake configuration
+ export WM_DIR=$WM_PROJECT_DIR/wmake
+@@ -157,7 +157,7 @@
+ export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib
+
+ # Site-specific directory
+-siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_INST_DIR/site}"
++siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_DIR/site}" #SPACK: not in parent directory
+
+ # Shared site executables/libraries
+ # Similar naming convention as ~OpenFOAM expansion
+diff -uw OpenFOAM-v1612+.orig/etc/config.csh/settings OpenFOAM-v1612+/etc/config.csh/settings
+--- OpenFOAM-v1612+.orig/etc/config.csh/settings 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.csh/settings 2017-03-23 12:23:52.737891912 +0100
+@@ -137,7 +137,7 @@
+ #------------------------------------------------------------------------------
+
+ # Location of the jobControl directory
+-setenv FOAM_JOB_DIR $WM_PROJECT_INST_DIR/jobControl
++setenv FOAM_JOB_DIR=$HOME/.OpenFOAM/jobControl #SPACK: non-central location
+
+ # wmake configuration
+ setenv WM_DIR $WM_PROJECT_DIR/wmake
+@@ -156,7 +156,7 @@
+ if ( $?WM_PROJECT_SITE ) then
+ set siteDir=$WM_PROJECT_SITE
+ else
+- set siteDir=$WM_PROJECT_INST_DIR/site
++ set siteDir=$WM_PROJECT_DIR/site #SPACK: not in parent directory
+ endif
+
+ # Shared site executables/libraries
diff --git a/var/spack/repos/builtin/packages/openfoam-com/1612-zoltan-lib.patch b/var/spack/repos/builtin/packages/openfoam-com/1612-zoltan-lib.patch
new file mode 100644
index 0000000000..712e6a7dfd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/1612-zoltan-lib.patch
@@ -0,0 +1,84 @@
+--- OpenFOAM-v1612+.orig/applications/utilities/mesh/manipulation/renumberMesh/Allwmake 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/applications/utilities/mesh/manipulation/renumberMesh/Allwmake 2017-03-28 11:13:35.222727218 +0200
+@@ -4,20 +4,35 @@
+ # Parse arguments for compilation (at least for error catching)
+ . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
+
+-export COMPILE_FLAGS=''
+-export LINK_FLAGS=''
++unset COMP_FLAGS LINK_FLAGS
+
+ if [ -f "${FOAM_LIBBIN}/libSloanRenumber.so" ]
+ then
+- echo "Found libSloanRenumber.so -- enabling Sloan renumbering support."
++ echo " found libSloanRenumber -- enabling sloan renumbering support."
+ export LINK_FLAGS="${LINK_FLAGS} -lSloanRenumber"
+ fi
+
+-if [ -f "${ZOLTAN_ARCH_PATH}/lib/libzoltan.a" -a -f "${FOAM_LIBBIN}/libzoltanRenumber.so" ]
++if [ -f "${FOAM_LIBBIN}/libzoltanRenumber.so" ]
+ then
+- echo "Found libzoltanRenumber.so -- enabling zoltan renumbering support."
+- export COMPILE_FLAGS="-DFOAM_USE_ZOLTAN"
+- export LINK_FLAGS="${LINK_FLAGS} -lzoltanRenumber -L${ZOLTAN_ARCH_PATH}/lib -lzoltan"
++ if [ -z "$ZOLTAN_ARCH_PATH" ]
++ then
++ # Optional: get ZOLTAN_ARCH_PATH
++ if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
++ then
++ . $settings
++ fi
++ fi
++
++ for libdir in lib "lib${WM_COMPILER_LIB_ARCH}"
++ do
++ if [ -f "$ZOLTAN_ARCH_PATH/$libdir/libzoltan.a" ]
++ then
++ echo " found libzoltanRenumber -- enabling zoltan renumbering support."
++ export COMP_FLAGS="-DFOAM_USE_ZOLTAN"
++ export LINK_FLAGS="${LINK_FLAGS} -lzoltanRenumber -L$ZOLTAN_ARCH_PATH/$libdir -lzoltan"
++ break
++ fi
++ done
+ fi
+
+ wmake $targetType
+--- OpenFOAM-v1612+.orig/src/renumber/Allwmake 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/src/renumber/Allwmake 2017-03-28 11:10:22.195543610 +0200
+@@ -5,14 +5,11 @@
+ targetType=libso
+ . $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments
+
+-## Get ZOLTAN_ARCH_PATH
+-#if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
+-#then
+-# . $settings
+-# echo "using ZOLTAN_ARCH_PATH=$ZOLTAN_ARCH_PATH"
+-#else
+-# echo "Error: no config.sh/zoltan settings"
+-#fi
++# Optional: get ZOLTAN_ARCH_PATH
++if settings=$($WM_PROJECT_DIR/bin/foamEtcFile config.sh/zoltan)
++then
++ . $settings
++fi
+
+ wmake $targetType renumberMethods
+
+--- OpenFOAM-v1612+.orig/src/renumber/zoltanRenumber/Make/options 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/src/renumber/zoltanRenumber/Make/options 2017-03-28 11:50:46.484343848 +0200
+@@ -4,10 +4,13 @@
+ EXE_INC = \
+ /* -DFULLDEBUG -g -O0 */ \
+ $(PFLAGS) $(PINC) \
++ ${c++LESSWARN} \
+ -I$(FOAM_SRC)/renumber/renumberMethods/lnInclude \
+ -I$(ZOLTAN_ARCH_PATH)/include/ \
+ -I$(LIB_SRC)/meshTools/lnInclude
+
+ LIB_LIBS = \
+- /* -L$(ZOLTAN_ARCH_PATH)/lib -lzoltan */ \
++ -L$(ZOLTAN_ARCH_PATH)/lib \
++ -L$(ZOLTAN_ARCH_PATH)/lib$(WM_COMPILER_LIB_ARCH) \
++ -lzoltan \
+ -lmeshTools
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/README b/var/spack/repos/builtin/packages/openfoam-com/common/README
new file mode 100644
index 0000000000..d116bbaa23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/README
@@ -0,0 +1,2 @@
+Some helper tools for packaging applications/libraries dependent on an
+openfoam provider.
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/README-spack b/var/spack/repos/builtin/packages/openfoam-com/common/README-spack
new file mode 100644
index 0000000000..83b606dda1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/README-spack
@@ -0,0 +1,15 @@
+Additional notes for spack
+--------------------------
+
+OpenFOAM largely manages its own PATH and LD_LIBRARY_PATH settings.
+The spack build currently also follows this and only provides
+a minimum modules environment.
+
+The variable FOAM_PROJECT_DIR points to the location of the OpenFOAM project
+and shall contain a $FOAM_PROJECT_DIR/etc/bashrc file for OpenFOAM.
+The variable FOAM_INST_DIR may also be provided for older OpenFOAM versions.
+
+It is the aim for the future to use spack to provide the environment directly,
+but this still needs more work.
+
+2017-04-18
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/change-sitedir.sh b/var/spack/repos/builtin/packages/openfoam-com/common/change-sitedir.sh
new file mode 100644
index 0000000000..61d9c3ea8b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/change-sitedir.sh
@@ -0,0 +1,94 @@
+#----------------------------------*-sh-*--------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
+# \\/ M anipulation |
+#------------------------------------------------------------------------------
+# License
+# This file is part of OpenFOAM.
+#
+# OpenFOAM is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# OpenFOAM 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 GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
+#
+# Script
+# . change-sitedir.sh PREFIX [SUFFIX]
+#
+# Shortcuts (prefix)
+# -prefix "$WM_PROJECT_INST_DIR/site"
+# -project "$WM_PROJECT_DIR/site"
+# -none remove from environment
+#
+# Shortcuts (suffix)
+# -platforms "platforms/$WM_OPTIONS"
+#
+# Description
+# Change WM_PROJECT_SITE, FOAM_SITE_APPBIN, FOAM_SITE_LIBBIN
+# and the respective entries in PATH, LD_LIBRARY_PATH.
+#
+# This can be useful when temporarily reassigning the site directory
+# when packaging OpenFOAM.
+#
+# The suffix value should normally include "platforms/$WM_OPTIONS"
+#
+# Example
+# . /path/change-sitedir.sh -prefix -platforms
+#
+# corresponds to the standard site location:
+#
+# $WM_PROJECT_INST_DIR/site{/$WM_PROJECT_VERSION/platforms/$WM_OPTIONS}
+#
+#------------------------------------------------------------------------------
+
+if [ "$#" -ge 1 ]
+then
+ prefix="$1"
+ suffix="$2"
+
+ foamOldDirs="$FOAM_SITE_APPBIN $FOAM_SITE_LIBBIN \
+ $WM_PROJECT_SITE $WM_PROJECT_INST_DIR/site $WM_PROJECT_DIR/site"
+ foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
+ if [ -x "$foamClean" ]
+ then
+ cleaned=$($foamClean "$PATH" "$foamOldDirs") && PATH="$cleaned"
+ cleaned=$($foamClean "$LD_LIBRARY_PATH" "$foamOldDirs") \
+ && LD_LIBRARY_PATH="$cleaned"
+ fi
+
+ case "$suffix" in
+ -plat*) suffix="platforms/$WM_OPTIONS" ;;
+ esac
+ case "$prefix" in
+ -prefix) prefix="$WM_PROJECT_INST_DIR/site" ;;
+ -project) prefix="$WM_PROJECT_DIR/site" ;;
+ -none) unset prefix ;;
+ esac
+
+ if [ -n "$prefix" ]
+ then
+ export WM_PROJECT_SITE="$prefix"
+
+ prefix="$prefix/${WM_PROJECT_VERSION:-unknown}${suffix:+/}${suffix}"
+
+ export FOAM_SITE_APPBIN="$prefix/bin"
+ export FOAM_SITE_LIBBIN="$prefix/lib"
+ PATH="$FOAM_SITE_APPBIN:$PATH"
+ LD_LIBRARY_PATH="$FOAM_SITE_LIBBIN:$LD_LIBRARY_PATH"
+ else
+ unset WM_PROJECT_SITE FOAM_SITE_APPBIN FOAM_SITE_LIBBIN
+ fi
+fi
+
+unset foamClean foamOldDirs cleaned prefix suffix
+
+#------------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/change-userdir.sh b/var/spack/repos/builtin/packages/openfoam-com/common/change-userdir.sh
new file mode 100644
index 0000000000..d126fcfe5d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/change-userdir.sh
@@ -0,0 +1,94 @@
+#----------------------------------*-sh-*--------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2017 OpenCFD Ltd.
+# \\/ M anipulation |
+#------------------------------------------------------------------------------
+# License
+# This file is part of OpenFOAM.
+#
+# OpenFOAM is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# OpenFOAM 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 GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
+#
+# Script
+# . change-userdir.sh PREFIX [SUFFIX]
+#
+# Shortcuts (prefix)
+# -home "$HOME/OpenFOAM/$USER-$WM_PROJECT_VERSION"
+# -none remove from environment
+#
+# Shortcuts (suffix)
+# -platforms "platforms/$WM_OPTIONS"
+#
+# Description
+# Change WM_PROJECT_USER_DIR, FOAM_USER_APPBIN, FOAM_USER_LIBBIN
+# and the respective entries in PATH, LD_LIBRARY_PATH.
+# Also adjusts FOAM_RUN.
+#
+# This can be useful with compiling additional OpenFOAM programs
+# (that use FOAM_USER_APPBIN, FOAM_USER_LIBBIN for their build),
+# to avoid conflicts with the normal user bin/lib files.
+#
+# The suffix value should normally include "platforms/$WM_OPTIONS"
+#
+# Example
+# . /path/change-userdir.sh -home -platforms
+#
+# corresponds to the standard user location:
+#
+# $HOME/OpenFOAM/$USER-$WM_PROJECT_VERSION/platforms/$WM_OPTIONS
+#
+#------------------------------------------------------------------------------
+
+if [ "$#" -ge 1 ]
+then
+ prefix="$1"
+ suffix="$2"
+
+ foamOldDirs="$FOAM_USER_APPBIN $FOAM_USER_LIBBIN"
+ foamClean=$WM_PROJECT_DIR/bin/foamCleanPath
+ if [ -x "$foamClean" ]
+ then
+ cleaned=$($foamClean "$PATH" "$foamOldDirs") && PATH="$cleaned"
+ cleaned=$($foamClean "$LD_LIBRARY_PATH" "$foamOldDirs") \
+ && LD_LIBRARY_PATH="$cleaned"
+ fi
+
+ case "$suffix" in
+ -plat*) suffix="platforms/$WM_OPTIONS" ;;
+ esac
+ case "$prefix" in
+ -home) prefix="$HOME/OpenFOAM/$USER-${WM_PROJECT_VERSION:-unknown}" ;;
+ -none) unset prefix ;;
+ esac
+
+ if [ -n "$prefix" ]
+ then
+ export WM_PROJECT_USER_DIR="$prefix"
+ export FOAM_RUN="$prefix/run"
+
+ prefix="$prefix${suffix:+/}${suffix}"
+ export FOAM_USER_APPBIN="$prefix/bin"
+ export FOAM_USER_LIBBIN="$prefix/lib"
+
+ PATH="$FOAM_USER_APPBIN:$PATH"
+ LD_LIBRARY_PATH="$FOAM_USER_LIBBIN:$LD_LIBRARY_PATH"
+ else
+ unset WM_PROJECT_USER_DIR FOAM_RUN FOAM_USER_APPBIN FOAM_USER_LIBBIN
+ fi
+fi
+
+unset foamClean foamOldDirs cleaned prefix suffix
+
+#------------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/spack-Allwmake b/var/spack/repos/builtin/packages/openfoam-com/common/spack-Allwmake
new file mode 100755
index 0000000000..cff22daf10
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/spack-Allwmake
@@ -0,0 +1,22 @@
+#!/bin/bash
+# Build wrapper script - FOAM_INST_DIR is only required by foam-extend
+export FOAM_INST_DIR=$(cd .. && pwd -L)
+. $PWD/etc/bashrc '' # No arguments
+mkdir -p $FOAM_APPBIN $FOAM_LIBBIN 2>/dev/null # Allow interrupt
+echo "Build openfoam with SPACK ($@)"
+echo WM_PROJECT_DIR = $WM_PROJECT_DIR
+./Allwmake $@ # Pass arguments
+
+# Link non-dummy MPI_FOAM type to parent-dir, where rpath can find it
+if [ "${FOAM_MPI:=dummy}" != dummy -a -d "$FOAM_LIBBIN/$FOAM_MPI" ]
+then
+(
+ cd "$FOAM_LIBBIN" || exit 1
+ for i in $FOAM_MPI/lib*.so
+ do
+ [ -f $i ] && ln -sf $i "${i##*/}"
+ done
+)
+fi
+
+# -----------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-com/common/spack-derived-Allwmake b/var/spack/repos/builtin/packages/openfoam-com/common/spack-derived-Allwmake
new file mode 100755
index 0000000000..407ad734e8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/common/spack-derived-Allwmake
@@ -0,0 +1,26 @@
+#!/bin/bash
+# The openfoam providers must export 'FOAM_PROJECT_DIR'
+# The package is expected to supply an appropriate Allwmake file.
+
+[ -d "$FOAM_PROJECT_DIR" -a -f "$FOAM_PROJECT_DIR/etc/bashrc" ] || {
+ echo "Error: no PROJECT=$FOAM_PROJECT_DIR" 1>&2
+ echo " or no etc/bashrc found" 1>&2
+ exit 1
+}
+
+export FOAM_INST_DIR=$(cd $FOAM_PROJECT_DIR/.. && pwd -L) # Needed by foam-extend
+. $FOAM_PROJECT_DIR/etc/bashrc '' # No arguments
+
+# Package-specific adjustments
+[ -f spack-config.sh ] && . ./spack-config.sh '' # No arguments
+
+echo "========================================"
+date "+%Y-%m-%d %H:%M:%S %z" 2>/dev/null || echo "date is unknown"
+echo "Build with ${WM_PROJECT}-${WM_PROJECT_VERSION}"
+echo " WM_PROJECT_DIR = $WM_PROJECT_DIR"
+echo " $WM_COMPILER $WM_COMPILER_TYPE compiler"
+echo " $WM_OPTIONS - with $WM_MPLIB $FOAM_MPI"
+echo
+
+./Allwmake $@ # Pass arguments
+# -----------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-com/openfoam-site.patch b/var/spack/repos/builtin/packages/openfoam-com/openfoam-site.patch
new file mode 100644
index 0000000000..a1f5d8a08a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/openfoam-site.patch
@@ -0,0 +1,35 @@
+diff -uw OpenFOAM-plus.orig/etc/config.sh/settings OpenFOAM-plus/etc/config.sh/settings
+--- OpenFOAM-plus.orig/etc/config.sh/settings 2017-04-04 17:34:29.875873400 +0200
++++ OpenFOAM-plus/etc/config.sh/settings 2017-04-04 17:38:40.174992466 +0200
+@@ -154,10 +154,10 @@
+ export FOAM_LIBBIN=$WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib
+
+ # External (ThirdParty) libraries
+-export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib
++unset FOAM_EXT_LIBBIN #SPACK: none
+
+ # Site-specific directory
+-siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_INST_DIR/site}"
++siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_DIR/site}" #SPACK: not in parent directory
+
+ # Shared site executables/libraries
+ # Similar naming convention as ~OpenFOAM expansion
+diff -uw OpenFOAM-plus.orig/etc/config.csh/settings OpenFOAM-plus/etc/config.csh/settings
+--- OpenFOAM-plus.orig/etc/config.csh/settings 2017-04-04 17:34:28.255879107 +0200
++++ OpenFOAM-plus/etc/config.csh/settings 2017-04-04 17:39:22.214844670 +0200
+@@ -151,13 +151,13 @@
+ setenv FOAM_LIBBIN $WM_PROJECT_DIR/platforms/$WM_OPTIONS/lib
+
+ # External (ThirdParty) libraries
+-setenv FOAM_EXT_LIBBIN $WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib
++unsetenv FOAM_EXT_LIBBIN #SPACK: none
+
+ # Site-specific directory
+ if ( $?WM_PROJECT_SITE ) then
+ set siteDir=$WM_PROJECT_SITE
+ else
+- set siteDir=$WM_PROJECT_INST_DIR/site
++ set siteDir=$WM_PROJECT_DIR/site #SPACK: not in parent directory
+ endif
+
+ # Shared site executables/libraries
diff --git a/var/spack/repos/builtin/packages/openfoam-com/package.py b/var/spack/repos/builtin/packages/openfoam-com/package.py
new file mode 100644
index 0000000000..d184365720
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-com/package.py
@@ -0,0 +1,807 @@
+##############################################################################
+# Copyright (c) 2017 Mark Olesen, OpenCFD Ltd.
+#
+# This file was authored by Mark Olesen <mark.olesen@esi-group.com>
+# and is released as part of spack under the LGPL license.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for the LLNL notice and LGPL.
+#
+# License
+# -------
+# 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
+#
+# Legal Notice
+# ------------
+# OPENFOAM is a trademark owned by OpenCFD Ltd
+# (producer and distributor of the OpenFOAM software via www.openfoam.com).
+# The trademark information must remain visible and unadulterated in this
+# file and via the "spack info" and comply with the term set by
+# http://openfoam.com/legal/trademark-policy.php
+#
+# This file is not part of OpenFOAM, nor does it constitute a component of an
+# OpenFOAM distribution.
+#
+##############################################################################
+#
+# Notes
+# - mpi handling: WM_MPLIB=USERMPI and use spack to populate an appropriate
+# configuration and generate wmake rules for 'USER' and 'USERMPI'
+# mpi implementations.
+#
+# - Resolution of flex, zlib needs more attention (within OpenFOAM)
+# - +paraview:
+# depends_on should just be 'paraview+plugins' but that resolves poorly.
+# Workaround: use preferred variants "+plugins +qt"
+# packages:
+# paraview:
+# variants: +plugins +qt
+# in ~/.spack/packages.yaml
+#
+# Known issues
+# - Combining +zoltan with +int64 has not been tested, but probably won't work.
+# - Combining +mgridgen with +int64 or +float32 probably won't work.
+#
+# The spack 'develop' version of openfoam-com retains the upstream
+# WM_PROJECT_VERSION=plus naming internally.
+#
+##############################################################################
+import glob
+import re
+import shutil
+import os
+
+from spack import *
+import llnl.util.tty as tty
+
+
+# Not the nice way of doing things, but is a start for refactoring
+__all__ = [
+ 'add_extra_files',
+ 'write_environ',
+ 'rewrite_environ_files',
+ 'mplib_content',
+ 'foamAddPath',
+ 'foamAddLib',
+ 'OpenfoamArch',
+]
+
+
+def add_extra_files(foam_pkg, common, local, **kwargs):
+ """Copy additional common and local files into the stage.source_path
+ from the openfoam-com/common and the package/assets directories,
+ respectively
+ """
+ outdir = foam_pkg.stage.source_path
+
+ indir = join_path(os.path.dirname(__file__), 'common')
+ for f in common:
+ tty.info('Added file {0}'.format(f))
+ install(join_path(indir, f), join_path(outdir, f))
+
+ indir = join_path(foam_pkg.package_dir, 'assets')
+ for f in local:
+ tty.info('Added file {0}'.format(f))
+ install(join_path(indir, f), join_path(outdir, f))
+
+
+def format_export(key, value):
+ """Format key,value pair as 'export' with newline for POSIX shell.
+ A leading '#' for key adds a comment character to the entire line.
+ A value of 'None' corresponds to 'unset'.
+ """
+ if key.startswith('#'):
+ return '## export {0}={1}\n'.format(re.sub(r'^#+\s*', '', key), value)
+ elif value is None:
+ return 'unset {0}\n'.format(key)
+ else:
+ return 'export {0}={1}\n'.format(key, value)
+
+
+def format_setenv(key, value):
+ """Format key,value pair as 'setenv' with newline for C-shell.
+ A leading '#' for key adds a comment character to the entire line.
+ A value of 'None' corresponds to 'unsetenv'.
+ """
+ if key.startswith('#'):
+ return '## setenv {0} {1}\n'.format(re.sub(r'^#+\s*', '', key), value)
+ elif value is None:
+ return 'unsetenv {0}\n'.format(key)
+ else:
+ return 'setenv {0} {1}\n'.format(key, value)
+
+
+def _write_environ_entries(outfile, environ, formatter):
+ """Write environment settings as 'export' or 'setenv'.
+ If environ is a dict, write in sorted order.
+ If environ is a list, write pair-wise.
+ Also descends into sub-dict and sub-list, but drops the key.
+ """
+ if isinstance(environ, dict):
+ for key in sorted(environ):
+ entry = environ[key]
+ if isinstance(entry, dict):
+ _write_environ_entries(outfile, entry, formatter)
+ elif isinstance(entry, list):
+ _write_environ_entries(outfile, entry, formatter)
+ else:
+ outfile.write(formatter(key, entry))
+ elif isinstance(environ, list):
+ for item in environ:
+ outfile.write(formatter(item[0], item[1]))
+
+
+def _write_environ_file(output, environ, formatter):
+ """Write environment settings as 'export' or 'setenv'.
+ If environ is a dict, write in sorted order.
+ If environ is a list, write pair-wise.
+ Also descends into sub-dict and sub-list, but drops the key.
+ """
+ with open(output, 'w') as outfile:
+ outfile.write('# SPACK settings\n\n')
+ _write_environ_entries(outfile, environ, formatter)
+
+
+def write_environ(environ, **kwargs):
+ """Write environment settings as 'export' or 'setenv'.
+ If environ is a dict, write in sorted order.
+ If environ is a list, write pair-wise.
+
+ Keyword Options:
+ posix[=None] If set, the name of the POSIX file to rewrite.
+ cshell[=None] If set, the name of the C-shell file to rewrite.
+ """
+ posix = kwargs.get('posix', None)
+ if posix:
+ _write_environ_file(posix, environ, format_export)
+ cshell = kwargs.get('cshell', None)
+ if cshell:
+ _write_environ_file(cshell, environ, format_setenv)
+
+
+def rewrite_environ_files(environ, **kwargs):
+ """Use filter_file to rewrite (existing) POSIX shell or C-shell files.
+ Keyword Options:
+ posix[=None] If set, the name of the POSIX file to rewrite.
+ cshell[=None] If set, the name of the C-shell file to rewrite.
+ """
+ posix = kwargs.get('posix', None)
+ if posix and os.path.isfile(posix):
+ for k, v in environ.items():
+ filter_file(
+ r'^(\s*export\s+%s)=.*$' % k,
+ r'\1=%s' % v,
+ posix,
+ backup=False)
+ cshell = kwargs.get('cshell', None)
+ if cshell and os.path.isfile(cshell):
+ for k, v in environ.items():
+ filter_file(
+ r'^(\s*setenv\s+%s)\s+.*$' % k,
+ r'\1 %s' % v,
+ cshell,
+ backup=False)
+
+
+def foamAddPath(*args):
+ """A string with args prepended to 'PATH'"""
+ return '"' + ':'.join(args) + ':${PATH}"'
+
+
+def foamAddLib(*args):
+ """A string with args prepended to 'LD_LIBRARY_PATH'"""
+ return '"' + ':'.join(args) + ':${LD_LIBRARY_PATH}"'
+
+
+def pkglib(package, pre=None):
+ """Get lib64 or lib from package prefix.
+
+ Optional parameter 'pre' to provide alternative prefix
+ """
+ libdir = package.prefix.lib64
+ if not os.path.isdir(libdir):
+ libdir = package.prefix.lib
+ if pre:
+ return join_path(pre, os.path.basename(libdir))
+ else:
+ return libdir
+
+
+def mplib_content(spec, pre=None):
+ """The mpi settings to have wmake
+ use spack information with minimum modifications to OpenFOAM.
+
+ Optional parameter 'pre' to provide alternative prefix
+ """
+ mpi_spec = spec['mpi']
+ bin = mpi_spec.prefix.bin
+ inc = mpi_spec.prefix.include
+ lib = pkglib(mpi_spec)
+ if pre:
+ bin = join_path(pre, os.path.basename(bin))
+ inc = join_path(pre, os.path.basename(inc))
+ lib = join_path(pre, os.path.basename(lib))
+ else:
+ pre = mpi_spec.prefix
+
+ info = {
+ 'name': '{0}-{1}'.format(mpi_spec.name, mpi_spec.version),
+ 'prefix': pre,
+ 'include': inc,
+ 'bindir': bin,
+ 'libdir': lib,
+ 'FLAGS': '-DOMPI_SKIP_MPICXX -DMPICH_IGNORE_CXX_SEEK',
+ 'PINC': '-I{0}'.format(inc),
+ 'PLIBS': '-L{0} -lmpi'.format(lib),
+ }
+ return info
+
+
+# -----------------------------------------------------------------------------
+
+class OpenfoamCom(Package):
+ """OpenFOAM is a GPL-opensource C++ CFD-toolbox.
+ This offering is supported by OpenCFD Ltd,
+ producer and distributor of the OpenFOAM software via www.openfoam.com,
+ and owner of the OPENFOAM trademark.
+ OpenCFD Ltd has been developing and releasing OpenFOAM since its debut
+ in 2004.
+ """
+
+ homepage = "http://www.openfoam.com/"
+ baseurl = "https://sourceforge.net/projects/openfoamplus/files/"
+ gitrepo = "https://develop.openfoam.com/Development/OpenFOAM-plus.git"
+
+ version('1706', '630d30770f7b54d6809efbf94b7d7c8f',
+ url=baseurl + 'v1706/OpenFOAM-v1706.tgz')
+ version('1612', 'ca02c491369150ab127cbb88ec60fbdf',
+ url=baseurl + 'v1612+/OpenFOAM-v1612+.tgz')
+ version('develop', branch='develop', git=gitrepo) # Needs credentials
+
+ variant('int64', default=False,
+ description='Compile with 64-bit label')
+ variant('float32', default=False,
+ description='Compile with 32-bit scalar (single-precision)')
+ variant('knl', default=False,
+ description='Use KNL compiler settings')
+ variant('scotch', default=True,
+ description='With scotch/ptscotch for decomposition')
+ variant('metis', default=False,
+ description='With metis for decomposition')
+ variant('zoltan', default=False,
+ description='With zoltan renumbering')
+ # TODO?# variant('scalasca', default=False,
+ # TODO?# description='With scalasca profiling')
+ variant('mgridgen', default=False, description='With mgridgen support')
+ variant('paraview', default=True,
+ description='Build paraview plugins and runtime post-processing')
+ variant('source', default=True,
+ description='Install library/application sources and tutorials')
+
+ provides('openfoam')
+ depends_on('mpi')
+
+ # After 1712 require openmpi+thread_multiple for collated output
+ conflicts('^openmpi~thread_multiple', when='@1712:')
+
+ depends_on('zlib')
+ depends_on('fftw')
+ depends_on('boost')
+ depends_on('cgal')
+ depends_on('flex', type='build')
+ depends_on('cmake', type='build')
+
+ # Require scotch with ptscotch - corresponds to standard OpenFOAM setup
+ depends_on('scotch~metis+mpi~int64', when='+scotch~int64')
+ depends_on('scotch~metis+mpi+int64', when='+scotch+int64')
+ depends_on('metis@5:', when='+metis')
+ depends_on('metis+int64', when='+metis+int64')
+ # mgridgen is statically linked
+ depends_on('parmgridgen', when='+mgridgen', type='build')
+ depends_on('zoltan', when='+zoltan')
+ # TODO?# depends_on('scalasca', when='+scalasca')
+
+ # For OpenFOAM plugins and run-time post-processing this should just be
+ # 'paraview+plugins' but that resolves poorly.
+ # Workaround: use preferred variants "+plugins +qt" in
+ # ~/.spack/packages.yaml
+
+ # 1706 ok with newer paraview but avoid pv-5.2, pv-5.3 readers
+ depends_on('paraview@5.4:', when='@1706:+paraview')
+ # 1612 plugins need older paraview
+ depends_on('paraview@:5.0.1', when='@1612+paraview')
+
+ # General patches
+ common = ['spack-Allwmake', 'README-spack']
+ assets = []
+
+ # Version-specific patches
+ patch('1612-bin.patch', when='@1612')
+ patch('1612-build.patch', when='@1612')
+ patch('1612-etc.patch', when='@1612')
+ patch('1612-site.patch', when='@1612')
+ patch('1612-mpi.patch', when='@1612')
+ patch('1612-mgridgen-lib.patch', when='@1612')
+ patch('1612-scotch-metis-lib.patch', when='@1612')
+ patch('1612-zoltan-lib.patch', when='@1612')
+
+ # This patch is reasonably version-invariant
+ # 1) default site directly under WM_PROJECT_DIR
+ # 2) no FOAM_EXT_LIBBIN required
+ patch('openfoam-site.patch', when='@1706:')
+
+ # Some user config settings
+ # default: 'compile-option': 'RpathOpt',
+ # default: 'mplib': 'USERMPI', # Use user mpi for spack
+ config = {
+ # Add links into bin/, lib/ (eg, for other applications)
+ 'link': False
+ }
+
+ # The openfoam architecture, compiler information etc
+ _foam_arch = None
+
+ # Content for etc/prefs.{csh,sh}
+ etc_prefs = {}
+
+ # Content for etc/config.{csh,sh}/ files
+ etc_config = {}
+
+ phases = ['configure', 'build', 'install']
+ build_script = './spack-Allwmake' # From patch() method.
+
+ #
+ # - End of definitions / setup -
+ #
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('FOAM_PROJECT_DIR', self.projectdir)
+ run_env.set('WM_PROJECT_DIR', self.projectdir)
+ for d in ['wmake', self.archbin]: # bin already added automatically
+ run_env.prepend_path('PATH', join_path(self.projectdir, d))
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Provide location of the OpenFOAM project.
+ This is identical to the WM_PROJECT_DIR value, but we avoid that
+ variable since it would mask the normal OpenFOAM cleanup of
+ previous versions.
+ """
+ spack_env.set('FOAM_PROJECT_DIR', self.projectdir)
+
+ @property
+ def projectdir(self):
+ """Absolute location of project directory: WM_PROJECT_DIR/"""
+ return self.prefix # <- install directly under prefix
+
+ @property
+ def foam_arch(self):
+ if not self._foam_arch:
+ self._foam_arch = OpenfoamArch(self.spec, **self.config)
+ return self._foam_arch
+
+ @property
+ def archbin(self):
+ """Relative location of architecture-specific executables"""
+ return join_path('platforms', self.foam_arch, 'bin')
+
+ @property
+ def archlib(self):
+ """Relative location of architecture-specific libraries"""
+ return join_path('platforms', self.foam_arch, 'lib')
+
+ def patch(self):
+ """Adjust OpenFOAM build for spack.
+ Where needed, apply filter as an alternative to normal patching."""
+ add_extra_files(self, self.common, self.assets)
+
+ # Avoid WM_PROJECT_INST_DIR for ThirdParty, site or jobControl.
+ # Use openfoam-site.patch to handle jobControl, site.
+ #
+ # Filtering: bashrc,cshrc (using a patch is less flexible)
+ edits = {
+ 'WM_THIRD_PARTY_DIR':
+ r'$WM_PROJECT_DIR/ThirdParty #SPACK: No separate third-party',
+ }
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path('etc', 'bashrc'),
+ cshell=join_path('etc', 'cshrc'))
+
+ def configure(self, spec, prefix):
+ """Make adjustments to the OpenFOAM configuration files in their various
+ locations: etc/bashrc, etc/config.sh/FEATURE and customizations that
+ don't properly fit get placed in the etc/prefs.sh file (similiarly for
+ csh).
+ """
+ # Filtering bashrc, cshrc
+ edits = {}
+ edits.update(self.foam_arch.foam_dict())
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path('etc', 'bashrc'),
+ cshell=join_path('etc', 'cshrc'))
+
+ # Content for etc/prefs.{csh,sh}
+ self.etc_prefs = {
+ # TODO
+ # 'CMAKE_ARCH_PATH': spec['cmake'].prefix,
+ # 'FLEX_ARCH_PATH': spec['flex'].prefix,
+ # 'ZLIB_ARCH_PATH': spec['zlib'].prefix,
+ }
+
+ # MPI content, using MPI_ARCH_PATH
+ user_mpi = mplib_content(spec, '${MPI_ARCH_PATH}')
+
+ # Content for etc/config.{csh,sh}/ files
+ self.etc_config = {
+ 'CGAL': [
+ ('BOOST_ARCH_PATH', spec['boost'].prefix),
+ ('CGAL_ARCH_PATH', spec['cgal'].prefix),
+ ('LD_LIBRARY_PATH',
+ foamAddLib(
+ pkglib(spec['boost'], '${BOOST_ARCH_PATH}'),
+ pkglib(spec['cgal'], '${CGAL_ARCH_PATH}'))),
+ ],
+ 'FFTW': [
+ ('FFTW_ARCH_PATH', spec['fftw'].prefix), # Absolute
+ ('LD_LIBRARY_PATH',
+ foamAddLib(
+ pkglib(spec['fftw'], '${BOOST_ARCH_PATH}'))),
+ ],
+ # User-defined MPI
+ 'mpi-user': [
+ ('MPI_ARCH_PATH', spec['mpi'].prefix), # Absolute
+ ('LD_LIBRARY_PATH', foamAddLib(user_mpi['libdir'])),
+ ('PATH', foamAddPath(user_mpi['bindir'])),
+ ],
+ 'scotch': {},
+ 'metis': {},
+ 'paraview': [],
+ 'gperftools': [], # Currently unused
+ }
+
+ if '+scotch' in spec:
+ self.etc_config['scotch'] = {
+ 'SCOTCH_ARCH_PATH': spec['scotch'].prefix,
+ # For src/parallel/decompose/Allwmake
+ 'SCOTCH_VERSION': 'scotch-{0}'.format(spec['scotch'].version),
+ }
+
+ if '+metis' in spec:
+ self.etc_config['metis'] = {
+ 'METIS_ARCH_PATH': spec['metis'].prefix,
+ }
+
+ if '+paraview' in spec:
+ pvMajor = 'paraview-{0}'.format(spec['paraview'].version.up_to(2))
+ self.etc_config['paraview'] = [
+ ('ParaView_DIR', spec['paraview'].prefix),
+ ('ParaView_INCLUDE_DIR', '${ParaView_DIR}/include/' + pvMajor),
+ ('PV_PLUGIN_PATH', '$FOAM_LIBBIN/' + pvMajor),
+ ('PATH', foamAddPath('${ParaView_DIR}/bin')),
+ ]
+
+ # Optional
+ if '+mgridgen' in spec:
+ self.etc_config['mgridgen'] = {
+ 'MGRIDGEN_ARCH_PATH': spec['parmgridgen'].prefix
+ }
+
+ # Optional
+ if '+zoltan' in spec:
+ self.etc_config['zoltan'] = {
+ 'ZOLTAN_ARCH_PATH': spec['zoltan'].prefix
+ }
+
+ # Write prefs files according to the configuration.
+ # Only need prefs.sh for building, but install both for end-users
+ if self.etc_prefs:
+ write_environ(
+ self.etc_prefs,
+ posix=join_path('etc', 'prefs.sh'),
+ cshell=join_path('etc', 'prefs.csh'))
+
+ # Adjust components to use SPACK variants
+ for component, subdict in self.etc_config.items():
+ write_environ(
+ subdict,
+ posix=join_path('etc', 'config.sh', component),
+ cshell=join_path('etc', 'config.csh', component))
+
+ def build(self, spec, prefix):
+ """Build using the OpenFOAM Allwmake script, with a wrapper to source
+ its environment first.
+ Only build if the compiler is known to be supported.
+ """
+ self.foam_arch.has_rule(self.stage.source_path)
+ self.foam_arch.create_rules(self.stage.source_path, self)
+
+ args = ['-silent']
+ if self.parallel: # Build in parallel? - pass as an argument
+ args.append('-j{0}'.format(make_jobs))
+ builder = Executable(self.build_script)
+ builder(*args)
+
+ def install(self, spec, prefix):
+ """Install under the projectdir"""
+ mkdirp(self.projectdir)
+ projdir = os.path.basename(self.projectdir)
+ # Filtering: bashrc, cshrc
+ edits = {
+ 'WM_PROJECT_INST_DIR': os.path.dirname(self.projectdir),
+ 'WM_PROJECT_DIR': join_path('$WM_PROJECT_INST_DIR', projdir),
+ }
+
+ # All top-level files, except spack build info and possibly Allwmake
+ if '+source' in spec:
+ ignored = re.compile(r'^spack-.*')
+ else:
+ ignored = re.compile(r'^(Allwmake|spack-).*')
+
+ files = [
+ f for f in glob.glob("*")
+ if os.path.isfile(f) and not ignored.search(f)
+ ]
+ for f in files:
+ install(f, self.projectdir)
+
+ # Having wmake and ~source is actually somewhat pointless...
+ # Install 'etc' before 'bin' (for symlinks)
+ dirs = ['etc', 'bin', 'wmake']
+ if '+source' in spec:
+ dirs.extend(['applications', 'src', 'tutorials'])
+
+ for d in dirs:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ symlinks=True)
+
+ dirs = ['platforms']
+ if '+source' in spec:
+ dirs.extend(['doc'])
+
+ # Install platforms (and doc) skipping intermediate targets
+ ignored = ['src', 'applications', 'html', 'Guides']
+ for d in dirs:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ ignore=shutil.ignore_patterns(*ignored),
+ symlinks=True)
+
+ etc_dir = join_path(self.projectdir, 'etc')
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path(etc_dir, 'bashrc'),
+ cshell=join_path(etc_dir, 'cshrc'))
+ self.install_links()
+
+ def install_links(self):
+ """Add symlinks into bin/, lib/ (eg, for other applications)"""
+ # Make build log visible - it contains OpenFOAM-specific information
+ with working_dir(self.projectdir):
+ os.symlink(
+ join_path('.spack', 'build.out'),
+ join_path('log.' + str(self.foam_arch)))
+
+ if not self.config['link']:
+ return
+
+ # ln -s platforms/linux64GccXXX/lib lib
+ with working_dir(self.projectdir):
+ if os.path.isdir(self.archlib):
+ os.symlink(self.archlib, 'lib')
+
+ # (cd bin && ln -s ../platforms/linux64GccXXX/bin/* .)
+ with working_dir(join_path(self.projectdir, 'bin')):
+ for f in [
+ f for f in glob.glob(join_path('..', self.archbin, "*"))
+ if os.path.isfile(f)
+ ]:
+ os.symlink(f, os.path.basename(f))
+
+ def openfoam_run_environment(self, projdir):
+ # This seems to bomb out with an ImportError 'site'!
+ # mods = EnvironmentModifications.from_sourcing_files(
+ # join_path(projdir, 'etc/bashrc'))
+ pass
+
+
+# -----------------------------------------------------------------------------
+
+class OpenfoamArch(object):
+ """OpenfoamArch represents architecture/compiler settings for OpenFOAM.
+ The string representation is WM_OPTIONS.
+
+ Keywords
+ label-size=[True] supports int32/int64
+ compile-option[=RpathOpt]
+ mplib[=USERMPI]
+ """
+
+ #: Map spack compiler names to OpenFOAM compiler names
+ # By default, simply capitalize the first letter
+ compiler_mapping = {'intel': 'icc'}
+
+ def __init__(self, spec, **kwargs):
+ # Some user settings, to be adjusted manually or via variants
+ self.compiler = None # <- %compiler
+ self.arch_option = '64' # (32/64-bit on x86_64)
+ self.label_size = None # <- +int64
+ self.precision_option = 'DP' # <- +float32
+ self.compile_option = kwargs.get('compile-option', 'RpathOpt')
+ self.arch = None
+ self.options = None
+ self.rule = None
+ self.mplib = kwargs.get('mplib', 'USERMPI')
+
+ # Normally support WM_LABEL_OPTION, but not yet for foam-extend
+ if '+int64' in spec:
+ self.label_size = '64'
+ elif kwargs.get('label-size', True):
+ self.label_size = '32'
+
+ if '+float32' in spec:
+ self.precision_option = 'SP'
+
+ # spec.architecture.platform is like `uname -s`, but lower-case
+ platform = spec.architecture.platform
+
+ # spec.architecture.target is like `uname -m`
+ target = spec.architecture.target
+
+ if platform == 'linux':
+ if target == 'i686':
+ self.arch_option = '32' # Force consistency
+ elif target == 'x86_64':
+ if self.arch_option == '64':
+ platform += '64'
+ elif target == 'ia64':
+ platform += 'ia64'
+ elif target == 'armv7l':
+ platform += 'ARM7'
+ elif target == 'ppc64':
+ platform += 'PPC64'
+ elif target == 'ppc64le':
+ platform += 'PPC64le'
+ elif platform == 'darwin':
+ if target == 'x86_64':
+ platform += 'Intel'
+ if self.arch_option == '64':
+ platform += '64'
+ # ... and others?
+
+ self.arch = platform
+
+ # Capitalized version of the compiler name, which usually corresponds
+ # to how OpenFOAM will camel-case things.
+ # Use compiler_mapping to handing special cases.
+ # Also handle special compiler options (eg, KNL)
+ comp = spec.compiler.name
+
+ if comp in self.compiler_mapping:
+ comp = self.compiler_mapping[comp]
+ comp = comp.capitalize()
+
+ if '+knl' in spec:
+ comp += 'KNL'
+ self.compiler = comp
+ self.rule = self.arch + self.compiler
+
+ # Build WM_OPTIONS
+ # ----
+ # WM_LABEL_OPTION=Int$WM_LABEL_SIZE
+ # WM_OPTIONS=$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION$WM_COMPILE_OPTION
+ # or
+ # WM_OPTIONS=$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_COMPILE_OPTION
+ # ----
+ self.options = ''.join([
+ self.rule,
+ self.precision_option,
+ ('Int' + self.label_size if self.label_size else ''),
+ self.compile_option])
+
+ def __str__(self):
+ return self.options
+
+ def __repr__(self):
+ return str(self)
+
+ def foam_dict(self):
+ """Returns a dictionary for OpenFOAM prefs, bashrc, cshrc."""
+ return dict([
+ ('WM_COMPILER', self.compiler),
+ ('WM_ARCH_OPTION', self.arch_option),
+ ('WM_LABEL_SIZE', self.label_size),
+ ('WM_PRECISION_OPTION', self.precision_option),
+ ('WM_COMPILE_OPTION', self.compile_option),
+ ('WM_MPLIB', self.mplib),
+ ])
+
+ def _rule_directory(self, projdir=None, general=False):
+ """The wmake/rules/ compiler directory"""
+ if general:
+ relative = os.path.join('wmake', 'rules', 'General')
+ else:
+ relative = os.path.join('wmake', 'rules', self.rule)
+ if projdir:
+ return os.path.join(projdir, relative)
+ else:
+ return relative
+
+ def has_rule(self, projdir):
+ """Verify that a wmake/rules/ compiler rule exists in the project
+ directory.
+ """
+ # Insist on a wmake rule for this architecture/compiler combination
+ rule_dir = self._rule_directory(projdir)
+
+ if not os.path.isdir(rule_dir):
+ raise InstallError(
+ 'No wmake rule for {0}'.format(self.rule))
+ if not re.match(r'.+Opt$', self.compile_option):
+ raise InstallError(
+ "WM_COMPILE_OPTION={0} is not type '*Opt'"
+ .format(self.compile_option))
+ return True
+
+ def create_rules(self, projdir, foam_pkg):
+ """ Create cRpathOpt,c++RpathOpt and mplibUSER,mplibUSERMPI
+ rules in the specified project directory.
+ The compiler rules are based on the respective cOpt,c++Opt rules
+ but with additional rpath information for the OpenFOAM libraries.
+
+ The rpath rules allow wmake to use spack information with minimal
+ modification to OpenFOAM.
+ The rpath is used for the installed libpath (continue to use
+ LD_LIBRARY_PATH for values during the build).
+ """
+ # Note: the 'c' rules normally don't need rpath, since they are just
+ # used for statically linked wmake utilities, but left in anyhow.
+
+ # rpath for installed OpenFOAM libraries
+ rpath = '{0}{1}'.format(
+ foam_pkg.compiler.cxx_rpath_arg,
+ join_path(foam_pkg.projectdir, foam_pkg.archlib))
+
+ user_mpi = mplib_content(foam_pkg.spec)
+ rule_dir = self._rule_directory(projdir)
+
+ with working_dir(rule_dir):
+ # Compiler: copy existing cOpt,c++Opt and modify '*DBUG' value
+ for lang in ['c', 'c++']:
+ src = '{0}Opt'.format(lang)
+ dst = '{0}{1}'.format(lang, self.compile_option)
+ with open(src, 'r') as infile:
+ with open(dst, 'w') as outfile:
+ for line in infile:
+ line = line.rstrip()
+ outfile.write(line)
+ if re.match(r'^\S+DBUG\s*=', line):
+ outfile.write(' ')
+ outfile.write(rpath)
+ outfile.write('\n')
+
+ # MPI rules
+ for mplib in ['mplibUSER', 'mplibUSERMPI']:
+ with open(mplib, 'w') as out:
+ out.write("""# Use mpi from spack ({name})\n
+PFLAGS = {FLAGS}
+PINC = {PINC}
+PLIBS = {PLIBS}
+""".format(**user_mpi))
+
+# -----------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-org/41-etc.patch b/var/spack/repos/builtin/packages/openfoam-org/41-etc.patch
new file mode 100644
index 0000000000..6fe3b7b4d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-org/41-etc.patch
@@ -0,0 +1,25 @@
+--- OpenFOAM-4.x.orig/etc/bashrc 2016-10-16 16:11:45.000000000 +0200
++++ OpenFOAM-4.x/etc/bashrc 2017-03-24 12:41:25.233267894 +0100
+@@ -43,17 +43,17 @@
+ # Please set to the appropriate path if the default is not correct.
+ #
+ [ $BASH_SOURCE ] && \
+-export FOAM_INST_DIR=$(cd ${BASH_SOURCE%/*/*/*} && pwd -P) || \
+-export FOAM_INST_DIR=$HOME/$WM_PROJECT
+-# export FOAM_INST_DIR=~$WM_PROJECT
+-# export FOAM_INST_DIR=/opt/$WM_PROJECT
+-# export FOAM_INST_DIR=/usr/local/$WM_PROJECT
++FOAM_INST_DIR=$(\cd $(dirname $BASH_SOURCE)/../.. && \pwd -P) || \
++FOAM_INST_DIR=$HOME/$WM_PROJECT
++# FOAM_INST_DIR=/opt/$WM_PROJECT
++# FOAM_INST_DIR=/usr/local/$WM_PROJECT
+ #
+ # Build foamyHexMesh
+ export FOAMY_HEX_MESH=yes
+ #
+ # END OF (NORMAL) USER EDITABLE PART
+ ################################################################################
++export FOAM_INST_DIR
+
+ # The default environment variables below can be overridden in a prefs.sh file
+ # located in ~/.OpenFOAM/$WM_PROJECT_VERSION, ~/.OpenFOAM,
diff --git a/var/spack/repos/builtin/packages/openfoam-org/41-site.patch b/var/spack/repos/builtin/packages/openfoam-org/41-site.patch
new file mode 100644
index 0000000000..d988c2f9b8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-org/41-site.patch
@@ -0,0 +1,42 @@
+diff -uw OpenFOAM-v1612+.orig/etc/config.sh/settings OpenFOAM-v1612+/etc/config.sh/settings
+--- OpenFOAM-v1612+.orig/etc/config.sh/settings 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.sh/settings 2017-03-23 12:22:52.002101020 +0100
+@@ -141,7 +141,7 @@
+ #------------------------------------------------------------------------------
+
+ # Location of the jobControl directory
+-export FOAM_JOB_DIR=$WM_PROJECT_INST_DIR/jobControl
++export FOAM_JOB_DIR=$HOME/.OpenFOAM/jobControl #SPACK: non-central location
+
+ # wmake configuration
+ export WM_DIR=$WM_PROJECT_DIR/wmake
+@@ -157,7 +157,7 @@
+ export FOAM_EXT_LIBBIN=$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER$WM_PRECISION_OPTION$WM_LABEL_OPTION/lib
+
+ # Site-specific directory
+-siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_INST_DIR/site}"
++siteDir="${WM_PROJECT_SITE:-$WM_PROJECT_DIR/site}" #SPACK: not in parent directory
+
+ # Shared site executables/libraries
+ # Similar naming convention as ~OpenFOAM expansion
+diff -uw OpenFOAM-v1612+.orig/etc/config.csh/settings OpenFOAM-v1612+/etc/config.csh/settings
+--- OpenFOAM-v1612+.orig/etc/config.csh/settings 2016-12-23 15:22:59.000000000 +0100
++++ OpenFOAM-v1612+/etc/config.csh/settings 2017-03-23 12:23:52.737891912 +0100
+@@ -137,7 +137,7 @@
+ #------------------------------------------------------------------------------
+
+ # Location of the jobControl directory
+-setenv FOAM_JOB_DIR $WM_PROJECT_INST_DIR/jobControl
++setenv FOAM_JOB_DIR=$HOME/.OpenFOAM/jobControl #SPACK: non-central location
+
+ # wmake configuration
+ setenv WM_DIR $WM_PROJECT_DIR/wmake
+@@ -156,7 +156,7 @@
+ if ( $?WM_PROJECT_SITE ) then
+ set siteDir=$WM_PROJECT_SITE
+ else
+- set siteDir=$WM_PROJECT_INST_DIR/site
++ set siteDir=$WM_PROJECT_DIR/site #SPACK: not in parent directory
+ endif
+
+ # Shared site executables/libraries
diff --git a/var/spack/repos/builtin/packages/openfoam-org/assets/bin/foamEtcFile b/var/spack/repos/builtin/packages/openfoam-org/assets/bin/foamEtcFile
new file mode 100755
index 0000000000..294cc26505
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-org/assets/bin/foamEtcFile
@@ -0,0 +1,417 @@
+#!/bin/sh
+#------------------------------------------------------------------------------
+# ========= |
+# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+# \\ / O peration |
+# \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
+# \\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
+#-------------------------------------------------------------------------------
+# License
+# This file is part of OpenFOAM.
+#
+# OpenFOAM is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# OpenFOAM 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 GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
+#
+# Script
+# foamEtcFile
+#
+# Description
+# Locate user/group/other files with semantics similar to the
+# ~OpenFOAM/fileName expansion.
+#
+# The -mode option can be used to allow chaining from
+# personal settings to site-wide settings.
+#
+# For example, within the user ~/.OpenFOAM/<VER>/prefs.sh:
+# \code
+# eval $(foamEtcFile -sh -mode=go prefs.sh)
+# \endcode
+#
+# Environment
+# - WM_PROJECT: (unset defaults to OpenFOAM)
+# - WM_PROJECT_SITE: (unset defaults to PREFIX/site)
+# - WM_PROJECT_VERSION: (unset defaults to detect from path)
+#
+# Note
+# This script must exist in one of these locations:
+# - $WM_PROJECT_INST_DIR/OpenFOAM-<VERSION>/bin
+# - $WM_PROJECT_INST_DIR/openfoam-<VERSION>/bin
+# - $WM_PROJECT_INST_DIR/OpenFOAM+<VERSION>/bin
+# - $WM_PROJECT_INST_DIR/openfoam+<VERSION>/bin
+# - $WM_PROJECT_INST_DIR/openfoam<VERSION>/bin (debian version)
+#
+#-------------------------------------------------------------------------------
+unset optQuiet optSilent
+usage() {
+ [ "${optQuiet:-$optSilent}" = true ] && exit 1
+ exec 1>&2
+ while [ "$#" -ge 1 ]; do echo "$1"; shift; done
+ cat<<USAGE
+
+Usage: foamEtcFile [OPTION] fileName
+ foamEtcFile [OPTION] [-list|-list-test] [fileName]
+
+options:
+ -a, -all Return all files (otherwise stop after the first match)
+ -l, -list List directories or files to be checked
+ -list-test List (existing) directories or files to be checked
+ -mode=MODE Any combination of u(user), g(group), o(other)
+ -prefix=DIR Specify an alternative installation prefix
+ -version=VER Specify alternative OpenFOAM version (eg, 3.0, 1612, ...)
+ -csh | -sh Produce output suitable for a csh or sh 'eval'
+ -csh-verbose | -sh-verbose
+ As per -csh | -sh, with additional verbosity
+ -q, -quiet Suppress all normal output
+ -s, -silent Suppress stderr, except -csh-verbose, -sh-verbose output
+ -help Print the usage
+
+Locate user/group/other file with semantics similar to the
+~OpenFOAM/fileName expansion.
+
+Single character options must not be grouped. Equivalent options:
+ -mode=MODE, -mode MODE, -m MODE
+ -prefix=DIR, -prefix DIR, -p DIR
+ -version=VER, -version VER, -v VER
+
+Exit status
+ 0 when the file is found. Print resolved path to stdout.
+ 1 for miscellaneous errors.
+ 2 when the file is not found.
+
+USAGE
+ exit 1
+}
+
+# Report error and exit
+die()
+{
+ [ "${optQuiet:-$optSilent}" = true ] && exit 1
+ exec 1>&2
+ echo
+ echo "Error encountered:"
+ while [ "$#" -ge 1 ]; do echo " $1"; shift; done
+ echo
+ echo "See 'foamEtcFile -help' for usage"
+ echo
+ exit 1
+}
+
+#-------------------------------------------------------------------------------
+binDir="${0%/*}" # The bin dir
+projectDir="${binDir%/bin}" # The project dir
+prefixDir="${projectDir%/*}" # The prefix dir (same as $WM_PROJECT_INST_DIR)
+
+# Could not resolve projectDir, prefixDir? (eg, called as ./bin/foamEtcFile)
+if [ "$prefixDir" = "$projectDir" ]
+then
+ binDir="$(cd $binDir && pwd -L)"
+ projectDir="${binDir%/bin}"
+ prefixDir="${projectDir%/*}"
+fi
+projectDirName="${projectDir##*/}" # The project directory name
+
+projectVersion="$WM_PROJECT_VERSION" # Empty? - will be treated later
+userDir="$HOME/.OpenFOAM" # Hard-coded as per foamVersion.H
+
+#-------------------------------------------------------------------------------
+
+# Guess project version or simply get the stem part of the projectDirName.
+# Handle standard and debian naming conventions.
+#
+# - projectVersion: update unless already set
+#
+# Helper variables:
+# - dirBase (for reassembling name) == projectDirName without the version
+# - versionNum (debian packaging)
+unset dirBase versionNum
+guessVersion()
+{
+ local version
+
+ case "$projectDirName" in
+ (OpenFOAM-* | openfoam-*)
+ # Standard naming: OpenFOAM-<VERSION> or openfoam-<VERSION>
+ dirBase="${projectDirName%%-*}-"
+ version="${projectDirName#*-}"
+ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
+ ;;
+
+ (OpenFOAM+* | openfoam+*)
+ # Alternative naming: OpenFOAM+<VERSION> or openfoam+<VERSION>
+ dirBase="${projectDirName%%+*}+"
+ version="${projectDirName#*+}"
+ version="${version%%*-}" # Extra safety, eg openfoam-version-packager
+ ;;
+
+ (openfoam[0-9]*)
+ # Debian naming: openfoam<VERSION>
+ dirBase="openfoam"
+ version="${projectDirName#openfoam}"
+ versionNum="$version"
+
+ # Convert digits version number to decimal delineated
+ case "${#versionNum}" in (2|3|4)
+ version=$(echo "$versionNum" | sed -e 's@\([0-9]\)@\1.@g')
+ version="${version%.}"
+ ;;
+ esac
+
+ # Ignore special treatment if no decimals were inserted.
+ [ "${#version}" -gt "${#versionNum}" ] || unset versionNum
+ ;;
+
+ (*)
+ die "unknown/unsupported naming convention for '$projectDirName'"
+ ;;
+ esac
+
+ # Set projectVersion if required
+ : ${projectVersion:=$version}
+}
+
+
+# Set projectVersion and update versionNum, projectDirName accordingly
+setVersion()
+{
+ projectVersion="$1"
+
+ # Need dirBase when reassembling projectDirName
+ [ -n "$dirBase" ] || guessVersion
+
+ # Debian: update x.y.z -> xyz version
+ if [ -n "$versionNum" ]
+ then
+ versionNum=$(echo "$projectVersion" | sed -e 's@\.@@g')
+ fi
+
+ projectDirName="$dirBase${versionNum:-$projectVersion}"
+}
+
+
+optMode=ugo # Default mode is always 'ugo'
+unset optAll optList optShell optVersion
+
+# Parse options
+while [ "$#" -gt 0 ]
+do
+ case "$1" in
+ -h | -help)
+ usage
+ ;;
+ -a | -all)
+ optAll=true
+ unset optShell
+ ;;
+ -l | -list)
+ optList=true
+ unset optShell
+ ;;
+ -list-test)
+ optList='test'
+ unset optShell
+ ;;
+ -csh | -sh | -csh-verbose | -sh-verbose)
+ optShell="${1#-}"
+ unset optAll
+ ;;
+ -mode=[ugo]*)
+ optMode="${1#*=}"
+ ;;
+ -prefix=/*)
+ prefixDir="${1#*=}"
+ prefixDir="${prefixDir%/}"
+ ;;
+ -version=*)
+ optVersion="${1#*=}"
+ ;;
+ -m | -mode)
+ optMode="$2"
+ shift
+ # Sanity check. Handles missing argument too.
+ case "$optMode" in
+ ([ugo]*)
+ ;;
+ (*)
+ die "invalid mode '$optMode'"
+ ;;
+ esac
+ ;;
+ -p | -prefix)
+ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
+ prefixDir="${2%/}"
+ shift
+ ;;
+ -q | -quiet)
+ optQuiet=true
+ ;;
+ -s | -silent)
+ optSilent=true
+ ;;
+ -v | -version)
+ [ "$#" -ge 2 ] || die "'$1' option requires an argument"
+ optVersion="$2"
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ -*)
+ die "unknown option: '$1'"
+ ;;
+ *)
+ break
+ ;;
+ esac
+ shift
+done
+
+
+#-------------------------------------------------------------------------------
+
+if [ -n "$optVersion" ]
+then
+ setVersion $optVersion
+elif [ -z "$projectVersion" ]
+then
+ guessVersion
+fi
+
+# Updates:
+# - projectDir for changes via -prefix or -version
+# - groupDir for changes via -prefix
+projectDir="$prefixDir/$projectDirName"
+groupDir="${WM_PROJECT_SITE:-$prefixDir/site}"
+
+
+# Debugging:
+# echo "Installed locations:" 1>&2
+# for i in projectDir prefixDir projectDirName projectVersion
+# do
+# eval echo "$i=\$$i" 1>&2
+# done
+
+
+# Save the essential bits of information
+# silently remove leading ~OpenFOAM/ (used in Foam::findEtcFile)
+nArgs=$#
+fileName="${1#~OpenFOAM/}"
+
+# Define the various places to be searched:
+unset dirList
+case "$optMode" in (*u*) # (U)ser
+ dirList="$dirList $userDir/$projectVersion $userDir"
+ ;;
+esac
+
+case "$optMode" in (*g*) # (G)roup == site
+ dirList="$dirList $groupDir/$projectVersion $groupDir"
+ ;;
+esac
+
+case "$optMode" in (*o*) # (O)ther == shipped
+ dirList="$dirList $projectDir/etc"
+ ;;
+esac
+set -- $dirList
+
+
+#
+# The main routine
+#
+
+exitCode=0
+if [ -n "$optList" ]
+then
+
+ # List directories, or potential file locations
+ [ "$nArgs" -le 1 ] || \
+ die "-list expects 0 or 1 filename, but $nArgs provided"
+
+ # A silly combination, but -quiet does have precedence
+ [ -n "$optQuiet" ] && exit 0
+
+ # Test for directory or file too?
+ if [ "$optList" = "test" ]
+ then
+ exitCode=2 # Fallback to a general error (file not found)
+
+ if [ "$nArgs" -eq 1 ]
+ then
+ for dir
+ do
+ resolved="$dir/$fileName"
+ if [ -f "$resolved" ]
+ then
+ echo "$resolved"
+ exitCode=0 # OK
+ fi
+ done
+ else
+ for dir
+ do
+ if [ -d "$dir" ]
+ then
+ echo "$dir"
+ exitCode=0 # OK
+ fi
+ done
+ fi
+ else
+ for dir
+ do
+ echo "$dir${fileName:+/}$fileName"
+ done
+ fi
+
+else
+
+ [ "$nArgs" -eq 1 ] || die "One filename expected - $nArgs provided"
+
+ exitCode=2 # Fallback to a general error (file not found)
+
+ for dir
+ do
+ if [ -f "$dir/$fileName" ]
+ then
+ exitCode=0
+ [ -n "$optQuiet" ] && break
+
+ case "$optShell" in
+ (*verbose)
+ echo "Using: $dir/$fileName" 1>&2
+ ;;
+ esac
+
+ case "$optShell" in
+ csh*)
+ echo "source $dir/$fileName"
+ break
+ ;;
+ sh*)
+ echo ". $dir/$fileName"
+ break
+ ;;
+ *)
+ echo "$dir/$fileName"
+ [ -n "$optAll" ] || break
+ ;;
+ esac
+ fi
+ done
+
+fi
+
+exit $exitCode
+
+#------------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfoam-org/package.py b/var/spack/repos/builtin/packages/openfoam-org/package.py
new file mode 100644
index 0000000000..c176adcbe5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfoam-org/package.py
@@ -0,0 +1,359 @@
+##############################################################################
+# Copyright (c) 2017 Mark Olesen, OpenCFD Ltd.
+#
+# This file was authored by Mark Olesen <mark.olesen@esi-group.com>
+# and is released as part of spack under the LGPL license.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/spack
+# Please also see the NOTICE and LICENSE files for the LLNL notice and LGPL.
+#
+# License
+# -------
+# 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
+#
+# Legal Notice
+# ------------
+# OPENFOAM is a trademark owned by OpenCFD Ltd
+# (producer and distributor of the OpenFOAM software via www.openfoam.com).
+# The trademark information must remain visible and unadulterated in this
+# file and via the "spack info" and comply with the term set by
+# http://openfoam.com/legal/trademark-policy.php
+#
+# This file is not part of OpenFOAM, nor does it constitute a component of an
+# OpenFOAM distribution.
+#
+##############################################################################
+#
+# Notes
+# - The openfoam-org package is a modified version of the openfoam-com package.
+# If changes are needed here, consider if they should also be applied there.
+#
+# - Building with boost/cgal is not included, since some of the logic is not
+# entirely clear and thus untested.
+# - Resolution of flex, zlib needs more attention (within OpenFOAM)
+#
+# - mpi handling: WM_MPLIB=SYSTEMMPI and use spack to populate prefs.sh for it.
+# Provide wmake rules for special purpose 'USER' and 'USERMPI'
+# mpi implementations, in case these are required.
+#
+# Known issues
+# - Combining +zoltan with +int64 has not been tested, but probably won't work.
+# - Combining +mgridgen with +int64 or +float32 probably won't work.
+#
+##############################################################################
+import glob
+import re
+import shutil
+import os
+
+import llnl.util.tty as tty
+
+from spack import *
+from spack.pkg.builtin.openfoam_com import add_extra_files
+from spack.pkg.builtin.openfoam_com import write_environ
+from spack.pkg.builtin.openfoam_com import rewrite_environ_files
+from spack.pkg.builtin.openfoam_com import mplib_content
+from spack.pkg.builtin.openfoam_com import OpenfoamArch
+
+
+class OpenfoamOrg(Package):
+ """OpenFOAM is a GPL-opensource C++ CFD-toolbox.
+ The openfoam.org release is managed by the OpenFOAM Foundation Ltd as
+ a licensee of the OPENFOAM trademark.
+ This offering is not approved or endorsed by OpenCFD Ltd,
+ producer and distributor of the OpenFOAM software via www.openfoam.com,
+ and owner of the OPENFOAM trademark.
+ """
+
+ homepage = "http://www.openfoam.org/"
+ baseurl = "https://github.com/OpenFOAM"
+ url = "https://github.com/OpenFOAM/OpenFOAM-4.x/archive/version-4.1.tar.gz"
+
+ version('4.1', '318a446c4ae6366c7296b61184acd37c',
+ url=baseurl + '/OpenFOAM-4.x/archive/version-4.1.tar.gz')
+ version('develop', git='https://github.com/OpenFOAM/OpenFOAM-dev.git')
+
+ variant('int64', default=False,
+ description='Compile with 64-bit label')
+ variant('float32', default=False,
+ description='Compile with 32-bit scalar (single-precision)')
+ variant('source', default=True,
+ description='Install library/application sources and tutorials')
+
+ provides('openfoam')
+ depends_on('mpi')
+ depends_on('zlib')
+ depends_on('flex', type='build')
+ depends_on('cmake', type='build')
+
+ # Require scotch with ptscotch - corresponds to standard OpenFOAM setup
+ depends_on('scotch~metis+mpi~int64', when='~int64')
+ depends_on('scotch~metis+mpi+int64', when='+int64')
+
+ # General patches - foamEtcFile as per openfoam.com (robuster)
+ common = ['spack-Allwmake', 'README-spack']
+ assets = ['bin/foamEtcFile']
+
+ # Version-specific patches
+ patch('41-etc.patch', when='@4.1')
+ patch('41-site.patch', when='@4.1')
+
+ # Some user config settings
+ config = {
+ 'mplib': 'SYSTEMMPI', # Use system mpi for spack
+ # Add links into bin/, lib/ (eg, for other applications)
+ 'link': False
+ }
+
+ # The openfoam architecture, compiler information etc
+ _foam_arch = None
+
+ # Content for etc/prefs.{csh,sh}
+ etc_prefs = {}
+
+ # Content for etc/config.{csh,sh}/ files
+ etc_config = {}
+
+ phases = ['configure', 'build', 'install']
+ build_script = './spack-Allwmake' # <- Added by patch() method.
+
+ #
+ # - End of definitions / setup -
+ #
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('FOAM_PROJECT_DIR', self.projectdir)
+ run_env.set('WM_PROJECT_DIR', self.projectdir)
+ for d in ['wmake', self.archbin]: # bin already added automatically
+ run_env.prepend_path('PATH', join_path(self.projectdir, d))
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Provide location of the OpenFOAM project.
+ This is identical to the WM_PROJECT_DIR value, but we avoid that
+ variable since it would mask the normal OpenFOAM cleanup of
+ previous versions.
+ """
+ spack_env.set('FOAM_PROJECT_DIR', self.projectdir)
+
+ @property
+ def projectdir(self):
+ """Absolute location of project directory: WM_PROJECT_DIR/"""
+ return self.prefix # <- install directly under prefix
+
+ @property
+ def foam_arch(self):
+ if not self._foam_arch:
+ self._foam_arch = OpenfoamArch(self.spec, **self.config)
+ return self._foam_arch
+
+ @property
+ def archbin(self):
+ """Relative location of architecture-specific executables"""
+ return join_path('platforms', self.foam_arch, 'bin')
+
+ @property
+ def archlib(self):
+ """Relative location of architecture-specific libraries"""
+ return join_path('platforms', self.foam_arch, 'lib')
+
+ def rename_source(self):
+ """This is fairly horrible.
+ The github tarfiles have weird names that do not correspond to the
+ canonical name. We need to rename these, but leave a symlink for
+ spack to work with.
+ """
+ # Note that this particular OpenFOAM requires absolute directories
+ # to build correctly!
+ parent = os.path.dirname(self.stage.source_path)
+ original = os.path.basename(self.stage.source_path)
+ target = 'OpenFOAM-{0}'.format(self.version)
+ # Could also grep through etc/bashrc for WM_PROJECT_VERSION
+ with working_dir(parent):
+ if original != target and not os.path.lexists(target):
+ os.rename(original, target)
+ os.symlink(target, original)
+ tty.info('renamed {0} -> {1}'.format(original, target))
+
+ def patch(self):
+ """Adjust OpenFOAM build for spack.
+ Where needed, apply filter as an alternative to normal patching."""
+ self.rename_source()
+ add_extra_files(self, self.common, self.assets)
+
+ # Avoid WM_PROJECT_INST_DIR for ThirdParty, site or jobControl.
+ # Use openfoam-site.patch to handle jobControl, site.
+ #
+ # Filtering: bashrc,cshrc (using a patch is less flexible)
+ edits = {
+ 'WM_THIRD_PARTY_DIR':
+ r'$WM_PROJECT_DIR/ThirdParty #SPACK: No separate third-party',
+ 'WM_VERSION': self.version, # consistency
+ 'FOAMY_HEX_MESH': '', # This is horrible (unset variable?)
+ }
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path('etc', 'bashrc'),
+ cshell=join_path('etc', 'cshrc'))
+
+ def configure(self, spec, prefix):
+ """Make adjustments to the OpenFOAM configuration files in their various
+ locations: etc/bashrc, etc/config.sh/FEATURE and customizations that
+ don't properly fit get placed in the etc/prefs.sh file (similiarly for
+ csh).
+ """
+ # Filtering bashrc, cshrc
+ edits = {}
+ edits.update(self.foam_arch.foam_dict())
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path('etc', 'bashrc'),
+ cshell=join_path('etc', 'cshrc'))
+
+ # MPI content, with absolute paths
+ user_mpi = mplib_content(spec)
+
+ # Content for etc/prefs.{csh,sh}
+ self.etc_prefs = {
+ r'MPI_ROOT': spec['mpi'].prefix, # Absolute
+ r'MPI_ARCH_FLAGS': '"%s"' % user_mpi['FLAGS'],
+ r'MPI_ARCH_INC': '"%s"' % user_mpi['PINC'],
+ r'MPI_ARCH_LIBS': '"%s"' % user_mpi['PLIBS'],
+ }
+
+ # Content for etc/config.{csh,sh}/ files
+ self.etc_config = {
+ 'CGAL': {},
+ 'scotch': {},
+ 'metis': {},
+ 'paraview': [],
+ 'gperftools': [], # Currently unused
+ }
+
+ if True:
+ self.etc_config['scotch'] = {
+ 'SCOTCH_ARCH_PATH': spec['scotch'].prefix,
+ # For src/parallel/decompose/Allwmake
+ 'SCOTCH_VERSION': 'scotch-{0}'.format(spec['scotch'].version),
+ }
+
+ # Write prefs files according to the configuration.
+ # Only need prefs.sh for building, but install both for end-users
+ if self.etc_prefs:
+ write_environ(
+ self.etc_prefs,
+ posix=join_path('etc', 'prefs.sh'),
+ cshell=join_path('etc', 'prefs.csh'))
+
+ # Adjust components to use SPACK variants
+ for component, subdict in self.etc_config.items():
+ write_environ(
+ subdict,
+ posix=join_path('etc', 'config.sh', component),
+ cshell=join_path('etc', 'config.csh', component))
+
+ def build(self, spec, prefix):
+ """Build using the OpenFOAM Allwmake script, with a wrapper to source
+ its environment first.
+ Only build if the compiler is known to be supported.
+ """
+ self.foam_arch.has_rule(self.stage.source_path)
+ self.foam_arch.create_rules(self.stage.source_path, self)
+
+ args = []
+ if self.parallel: # Build in parallel? - pass via the environment
+ os.environ['WM_NCOMPPROCS'] = str(make_jobs)
+ builder = Executable(self.build_script)
+ builder(*args)
+
+ def install(self, spec, prefix):
+ """Install under the projectdir"""
+ mkdirp(self.projectdir)
+ projdir = os.path.basename(self.projectdir)
+ # Filtering: bashrc, cshrc
+ edits = {
+ 'WM_PROJECT_INST_DIR': os.path.dirname(self.projectdir),
+ 'WM_PROJECT_DIR': join_path('$WM_PROJECT_INST_DIR', projdir),
+ }
+
+ # All top-level files, except spack build info and possibly Allwmake
+ if '+source' in spec:
+ ignored = re.compile(r'^spack-.*')
+ else:
+ ignored = re.compile(r'^(Allwmake|spack-).*')
+
+ files = [
+ f for f in glob.glob("*")
+ if os.path.isfile(f) and not ignored.search(f)
+ ]
+ for f in files:
+ install(f, self.projectdir)
+
+ # Having wmake and ~source is actually somewhat pointless...
+ # Install 'etc' before 'bin' (for symlinks)
+ dirs = ['etc', 'bin', 'wmake']
+ if '+source' in spec:
+ dirs.extend(['applications', 'src', 'tutorials'])
+
+ for d in dirs:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ symlinks=True)
+
+ dirs = ['platforms']
+ if '+source' in spec:
+ dirs.extend(['doc'])
+
+ # Install platforms (and doc) skipping intermediate targets
+ ignored = ['src', 'applications', 'html', 'Guides']
+ for d in dirs:
+ install_tree(
+ d,
+ join_path(self.projectdir, d),
+ ignore=shutil.ignore_patterns(*ignored),
+ symlinks=True)
+
+ etc_dir = join_path(self.projectdir, 'etc')
+ rewrite_environ_files( # Adjust etc/bashrc and etc/cshrc
+ edits,
+ posix=join_path(etc_dir, 'bashrc'),
+ cshell=join_path(etc_dir, 'cshrc'))
+ self.install_links()
+
+ def install_links(self):
+ """Add symlinks into bin/, lib/ (eg, for other applications)"""
+ # Make build log visible - it contains OpenFOAM-specific information
+ with working_dir(self.projectdir):
+ os.symlink(
+ join_path('.spack', 'build.out'),
+ join_path('log.' + str(self.foam_arch)))
+
+ if not self.config['link']:
+ return
+
+ # ln -s platforms/linux64GccXXX/lib lib
+ with working_dir(self.projectdir):
+ if os.path.isdir(self.archlib):
+ os.symlink(self.archlib, 'lib')
+
+ # (cd bin && ln -s ../platforms/linux64GccXXX/bin/* .)
+ with working_dir(join_path(self.projectdir, 'bin')):
+ for f in [
+ f for f in glob.glob(join_path('..', self.archbin, "*"))
+ if os.path.isfile(f)
+ ]:
+ os.symlink(f, os.path.basename(f))
+
+# -----------------------------------------------------------------------------
diff --git a/var/spack/repos/builtin/packages/openfst/openfst-1.4.1.patch b/var/spack/repos/builtin/packages/openfst/openfst-1.4.1.patch
new file mode 100644
index 0000000000..1037b24231
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfst/openfst-1.4.1.patch
@@ -0,0 +1,227 @@
+*** openfst-1.4.1/src/include/fst/minimize.h
+***************
+*** 134,140 ****
+ typedef typename A::Weight Weight;
+ typedef ReverseArc<A> RevA;
+
+! CyclicMinimizer(const ExpandedFst<A>& fst) {
+ Initialize(fst);
+ Compute(fst);
+ }
+--- 134,147 ----
+ typedef typename A::Weight Weight;
+ typedef ReverseArc<A> RevA;
+
+! CyclicMinimizer(const ExpandedFst<A>& fst):
+! // tell the Partition data-member to expect multiple repeated
+! // calls to SplitOn with the same element if we are non-deterministic.
+! P_(fst.Properties(kIDeterministic, true) == 0) {
+! if(fst.Properties(kIDeterministic, true) == 0)
+! CHECK(Weight::Properties() & kIdempotent); // this minimization
+! // algorithm for non-deterministic FSTs can only work with idempotent
+! // semirings.
+ Initialize(fst);
+ Compute(fst);
+ }
+***************
+*** 315,321 ****
+ typedef typename A::StateId ClassId;
+ typedef typename A::Weight Weight;
+
+! AcyclicMinimizer(const ExpandedFst<A>& fst) {
+ Initialize(fst);
+ Refine(fst);
+ }
+--- 322,334 ----
+ typedef typename A::StateId ClassId;
+ typedef typename A::Weight Weight;
+
+! AcyclicMinimizer(const ExpandedFst<A>& fst):
+! // tell the Partition data-member to expect multiple repeated
+! // calls to SplitOn with the same element if we are non-deterministic.
+! partition_(fst.Properties(kIDeterministic, true) == 0) {
+! if(fst.Properties(kIDeterministic, true) == 0)
+! CHECK(Weight::Properties() & kIdempotent); // minimization for
+! // non-deterministic FSTs can only work with idempotent semirings.
+ Initialize(fst);
+ Refine(fst);
+ }
+***************
+*** 531,543 ****
+ void Minimize(MutableFst<A>* fst,
+ MutableFst<A>* sfst = 0,
+ float delta = kDelta) {
+! uint64 props = fst->Properties(kAcceptor | kIDeterministic|
+! kWeighted | kUnweighted, true);
+! if (!(props & kIDeterministic)) {
+! FSTERROR() << "FST is not deterministic";
+! fst->SetProperties(kError, kError);
+! return;
+! }
+
+ if (!(props & kAcceptor)) { // weighted transducer
+ VectorFst< GallicArc<A, STRING_LEFT> > gfst;
+--- 544,550 ----
+ void Minimize(MutableFst<A>* fst,
+ MutableFst<A>* sfst = 0,
+ float delta = kDelta) {
+! uint64 props = fst->Properties(kAcceptor | kWeighted | kUnweighted, true);
+
+ if (!(props & kAcceptor)) { // weighted transducer
+ VectorFst< GallicArc<A, STRING_LEFT> > gfst;
+*** openfst-1.4.1/src/include/fst/partition.h
+***************
+*** 43,50 ****
+ friend class PartitionIterator<T>;
+
+ struct Element {
+! Element() : value(0), next(0), prev(0) {}
+! Element(T v) : value(v), next(0), prev(0) {}
+
+ T value;
+ Element* next;
+--- 43,50 ----
+ friend class PartitionIterator<T>;
+
+ struct Element {
+! Element() : value(0), next(0), prev(0) {}
+! Element(T v) : value(v), next(0), prev(0) {}
+
+ T value;
+ Element* next;
+***************
+*** 52,60 ****
+ };
+
+ public:
+! Partition() {}
+
+! Partition(T num_states) {
+ Initialize(num_states);
+ }
+
+--- 52,62 ----
+ };
+
+ public:
+! Partition(bool allow_repeated_split):
+! allow_repeated_split_(allow_repeated_split) {}
+
+! Partition(bool allow_repeated_split, T num_states):
+! allow_repeated_split_(allow_repeated_split) {
+ Initialize(num_states);
+ }
+
+***************
+*** 137,152 ****
+ if (class_size_[class_id] == 1) return;
+
+ // first time class is split
+! if (split_size_[class_id] == 0)
+ visited_classes_.push_back(class_id);
+!
+ // increment size of split (set of element at head of chain)
+ split_size_[class_id]++;
+!
+ // update split point
+! if (class_split_[class_id] == 0)
+! class_split_[class_id] = classes_[class_id];
+! if (class_split_[class_id] == elements_[element_id])
+ class_split_[class_id] = elements_[element_id]->next;
+
+ // move to head of chain in same class
+--- 139,154 ----
+ if (class_size_[class_id] == 1) return;
+
+ // first time class is split
+! if (split_size_[class_id] == 0) {
+ visited_classes_.push_back(class_id);
+! class_split_[class_id] = classes_[class_id];
+! }
+ // increment size of split (set of element at head of chain)
+ split_size_[class_id]++;
+!
+ // update split point
+! if (class_split_[class_id] != 0
+! && class_split_[class_id] == elements_[element_id])
+ class_split_[class_id] = elements_[element_id]->next;
+
+ // move to head of chain in same class
+***************
+*** 157,180 ****
+ // class indices of the newly created class. Returns the new_class id
+ // or -1 if no new class was created.
+ T SplitRefine(T class_id) {
+ // only split if necessary
+! if (class_size_[class_id] == split_size_[class_id]) {
+! class_split_[class_id] = 0;
+ split_size_[class_id] = 0;
+ return -1;
+ } else {
+-
+ T new_class = AddClass();
+ size_t remainder = class_size_[class_id] - split_size_[class_id];
+ if (remainder < split_size_[class_id]) { // add smaller
+- Element* split_el = class_split_[class_id];
+ classes_[new_class] = split_el;
+- class_size_[class_id] = split_size_[class_id];
+- class_size_[new_class] = remainder;
+ split_el->prev->next = 0;
+ split_el->prev = 0;
+ } else {
+- Element* split_el = class_split_[class_id];
+ classes_[new_class] = classes_[class_id];
+ class_size_[class_id] = remainder;
+ class_size_[new_class] = split_size_[class_id];
+--- 159,189 ----
+ // class indices of the newly created class. Returns the new_class id
+ // or -1 if no new class was created.
+ T SplitRefine(T class_id) {
++
++ Element* split_el = class_split_[class_id];
+ // only split if necessary
+! //if (class_size_[class_id] == split_size_[class_id]) {
+! if(split_el == NULL) { // we split on everything...
+ split_size_[class_id] = 0;
+ return -1;
+ } else {
+ T new_class = AddClass();
++
++ if(allow_repeated_split_) { // split_size_ is possibly
++ // inaccurate, so work it out exactly.
++ size_t split_count; Element *e;
++ for(split_count=0,e=classes_[class_id];
++ e != split_el; split_count++, e=e->next);
++ split_size_[class_id] = split_count;
++ }
+ size_t remainder = class_size_[class_id] - split_size_[class_id];
+ if (remainder < split_size_[class_id]) { // add smaller
+ classes_[new_class] = split_el;
+ split_el->prev->next = 0;
+ split_el->prev = 0;
++ class_size_[class_id] = split_size_[class_id];
++ class_size_[new_class] = remainder;
+ } else {
+ classes_[new_class] = classes_[class_id];
+ class_size_[class_id] = remainder;
+ class_size_[new_class] = split_size_[class_id];
+***************
+*** 245,254 ****
+--- 254,269 ----
+ vector<T> class_size_;
+
+ // size of split for each class
++ // in the nondeterministic case, split_size_ is actually an upper
++ // bound on the size of split for each class.
+ vector<T> split_size_;
+
+ // set of visited classes to be used in split refine
+ vector<T> visited_classes_;
++
++ // true if input fst was deterministic: we can make
++ // certain assumptions in this case that speed up the algorithm.
++ bool allow_repeated_split_;
+ };
+
+
+
diff --git a/var/spack/repos/builtin/packages/openfst/openfst_gcc41up.patch b/var/spack/repos/builtin/packages/openfst/openfst_gcc41up.patch
new file mode 100644
index 0000000000..0e3eb87e8b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfst/openfst_gcc41up.patch
@@ -0,0 +1,28 @@
+*** openfst-1.4.1/src/include/fst/lock.h
+***************
+*** 78,85 ****
+ RefCounter() : count_(1) {}
+
+ int count() const { return count_; }
+! int Incr() const { return ++count_; }
+! int Decr() const { return --count_; }
+
+ private:
+ mutable int count_;
+--- 78,93 ----
+ RefCounter() : count_(1) {}
+
+ int count() const { return count_; }
+!
+! // below lines are modifications of openfst for multi-thrads support,
+! // from tools/extras/openfst_gcc41up.patch, applied by tools/Makefile,
+! // applicable to gcc 4.1 or above
+! // int Incr() const { return ++count_; }
+! // int Decr() const { return --count_; }
+!
+! int Incr() const { return __sync_add_and_fetch(&count_, 1); }
+! int Decr() const { return __sync_sub_and_fetch(&count_, 1); }
+! // end modifications
+
+ private:
+ mutable int count_;
diff --git a/var/spack/repos/builtin/packages/openfst/package.py b/var/spack/repos/builtin/packages/openfst/package.py
new file mode 100644
index 0000000000..29b5eca02d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openfst/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 Openfst(AutotoolsPackage):
+ """OpenFst is a library for constructing, combining, optimizing,
+ and searching weighted finite-state transducers (FSTs). Weighted
+ finite-state transducers are automata where each transition has
+ an input label, an output label, and a weight."""
+
+ homepage = "http://www.openfst.org"
+ url = "http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.6.1.tar.gz"
+ list_url = "http://www.openfst.org/twiki/bin/view/FST/FstDownload"
+
+ version('1.6.1', '1173066ed987072183b950b54bdc9315')
+ version('1.6.0', '2b7bcfde6b629857dc5f9ad7edd6ece9')
+ version('1.5.4', 'e52bd59ec9d9edde0c1268a382662741')
+ version('1.5.3', 'f04e580b5bc574571854304c9656a3e2')
+ version('1.5.2', 'e9d43874f7cadf791394caab3925eee4')
+ version('1.5.1', '8869e44c5a4af65409ae78b9f482b40e')
+ version('1.5.0', 'a24fee5ffe28744c6fb7b1a49e0006c4')
+ version('1.4.1-patch', 'ca8f1730b9b9b281e515611fa9ae23c0',
+ url='http://www.openfst.org/twiki/pub/FST/FstDownload/openfst-1.4.1.tar.gz')
+ version('1.4.1', 'ca8f1730b9b9b281e515611fa9ae23c0')
+ version('1.4.0', '662367ec91084ffab48ee9b5716de39c')
+
+ conflicts('%intel@16:')
+ conflicts('%gcc@6:')
+
+ # Patch openfst-1.4.1 for kaldi@c024e8
+ # See https://github.com/kaldi-asr/kaldi/blob/c024e8aa0a727bf76c91a318f76a1f8b0b59249e/tools/Makefile#L82-L88
+ patch('openfst-1.4.1.patch', when='@1.4.1-patch')
+ patch('openfst_gcc41up.patch', when='@1.4.1-patch')
diff --git a/var/spack/repos/builtin/packages/openjpeg/package.py b/var/spack/repos/builtin/packages/openjpeg/package.py
index 9790c52e7d..1998885502 100644
--- a/var/spack/repos/builtin/packages/openjpeg/package.py
+++ b/var/spack/repos/builtin/packages/openjpeg/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -43,7 +43,3 @@ class Openjpeg(CMakePackage):
version('2.0', 'cdf266530fee8af87454f15feb619609')
version('1.5.2', '545f98923430369a6b046ef3632ef95c')
version('1.5.1', 'd774e4b5a0db5f0f171c4fc0aabfa14e')
-
- def url_for_version(self, version):
- fmt = 'https://github.com/uclouvain/openjpeg/archive/version.{0}.tar.gz'
- return fmt.format(version.dotted)
diff --git a/var/spack/repos/builtin/packages/openmc/package.py b/var/spack/repos/builtin/packages/openmc/package.py
new file mode 100644
index 0000000000..b48928c02c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmc/package.py
@@ -0,0 +1,91 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Openmc(MakefilePackage):
+ """The OpenMC project aims to provide a fully-featured Monte Carlo particle
+ transport code based on modern methods. It is a constructive solid
+ geometry, continuous-energy transport code that uses ACE format cross
+ sections. The project started under the Computational Reactor Physics
+ Group at MIT."""
+
+ homepage = "https://github.com/ANL-CESAR/"
+ url = "https://github.com/ANL-CESAR/openmc.git"
+
+ tags = ['proxy-app']
+
+ version('develop', git='https://github.com/ANL-CESAR/openmc.git')
+
+ build_directory = 'src'
+
+ parallel = False
+
+ @property
+ def build_targets(self):
+
+ targets = []
+
+ if self.compiler.name == 'gcc':
+ targets.append('COMPILER=gnu')
+ targets.append('MACHINE=UNKNOWN')
+ if self.compiler.name == 'intel':
+ targets.append('COMPILER=intel')
+ if self.compiler.name == 'pgi':
+ targets.append('COMPILER=pgi')
+ if self.compiler.name == 'xl':
+ targets.append('COMPILER=ibm')
+ if self.compiler.name == 'cce':
+ targets.append('COMPILER=cray')
+
+ return targets
+
+ def install(self, spec, prefix):
+ with working_dir('src'):
+ pth_st_cmp = join_path(prefix.bin, 'statepoint_cmp')
+ pth_st_histogram = join_path(prefix.bin, 'statepoint_histogram')
+ pth_st_meshpoint = join_path(prefix.bin, 'statepoint_meshpoint')
+ pth_openmc = join_path(prefix, 'share/man/man1/openmc.1')
+ pth_copyright = join_path(prefix, 'share/doc/openmc/copyright')
+ mkdir(prefix.bin)
+ mkdirp(pth_st_cmp)
+ mkdirp(pth_st_histogram)
+ mkdirp(pth_st_meshpoint)
+ mkdirp(pth_openmc)
+ mkdirp(pth_copyright)
+
+ install('openmc', prefix.bin)
+ install('utils/statepoint_cmp.py', pth_st_cmp)
+ install('utils/statepoint_histogram.py',
+ pth_st_histogram)
+ install('utils/statepoint_meshplot.py',
+ pth_st_meshpoint)
+ install('man/man1/openmc.1', pth_openmc)
+ install('LICENSE', pth_copyright)
+ install_tree('docs/', prefix.docs)
+ install_tree('examples/', prefix.examples)
+ install_tree('data/', prefix.data)
+ install_tree('tests/', prefix.tests)
diff --git a/var/spack/repos/builtin/packages/openmpi/fix_multidef_pmi_class.patch b/var/spack/repos/builtin/packages/openmpi/fix_multidef_pmi_class.patch
new file mode 100644
index 0000000000..28ebd9aeca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openmpi/fix_multidef_pmi_class.patch
@@ -0,0 +1,54 @@
+diff -Naur openmpi-2.0.1.orig/opal/mca/pmix/cray/pmix_cray.c openmpi-2.0.1/opal/mca/pmix/cray/pmix_cray.c
+--- openmpi-2.0.1.orig/opal/mca/pmix/cray/pmix_cray.c 2016-08-23 04:56:37.000000000 +0800
++++ openmpi-2.0.1/opal/mca/pmix/cray/pmix_cray.c 2017-01-31 01:05:34.302807465 +0800
+@@ -6,7 +6,7 @@
+ * Copyright (c) 2011-2015 Los Alamos National Security, LLC. All
+ * rights reserved.
+ * Copyright (c) 2013-2015 Intel, Inc. All rights reserved.
+- * Copyright (c) 2014-2015 Research Organization for Information Science
++ * Copyright (c) 2014-2016 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
+ * $COPYRIGHT$
+ *
+@@ -127,7 +127,7 @@
+ opal_pmix_op_cbfunc_t opcbfunc;
+ void *cbdata;
+ } pmi_opcaddy_t;
+-OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
++static OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
+ opal_object_t,
+ NULL, NULL);
+
+diff -Naur openmpi-2.0.1.orig/opal/mca/pmix/s1/pmix_s1.c openmpi-2.0.1/opal/mca/pmix/s1/pmix_s1.c
+--- openmpi-2.0.1.orig/opal/mca/pmix/s1/pmix_s1.c 2016-08-23 04:56:37.000000000 +0800
++++ openmpi-2.0.1/opal/mca/pmix/s1/pmix_s1.c 2017-01-31 01:06:08.014808847 +0800
+@@ -1,7 +1,7 @@
+ /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */
+ /*
+ * Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
+- * Copyright (c) 2014-2015 Research Organization for Information Science
++ * Copyright (c) 2014-2016 Research Organization for Information Science
+ * and Technology (RIST). All rights reserved.
+ * $COPYRIGHT$
+ *
+@@ -88,7 +88,7 @@
+ opal_pmix_op_cbfunc_t opcbfunc;
+ void *cbdata;
+ } pmi_opcaddy_t;
+-OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
++static OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
+ opal_object_t,
+ NULL, NULL);
+
+diff -Naur openmpi-2.0.1.orig/opal/mca/pmix/s2/pmix_s2.c openmpi-2.0.1/opal/mca/pmix/s2/pmix_s2.c
+--- openmpi-2.0.1.orig/opal/mca/pmix/s2/pmix_s2.c 2016-08-23 04:56:37.000000000 +0800
++++ openmpi-2.0.1/opal/mca/pmix/s2/pmix_s2.c 2017-01-31 01:06:27.718809655 +0800
+@@ -95,7 +95,7 @@
+ opal_pmix_op_cbfunc_t opcbfunc;
+ void *cbdata;
+ } pmi_opcaddy_t;
+-OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
++static OBJ_CLASS_INSTANCE(pmi_opcaddy_t,
+ opal_object_t,
+ NULL, NULL);
+
diff --git a/var/spack/repos/builtin/packages/openmpi/package.py b/var/spack/repos/builtin/packages/openmpi/package.py
index 754cc8d93e..5563198649 100644
--- a/var/spack/repos/builtin/packages/openmpi/package.py
+++ b/var/spack/repos/builtin/packages/openmpi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,13 +22,16 @@
# 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 *
+
import os
+from spack import *
+
def _verbs_dir():
"""Try to find the directory where the OpenFabrics verbs package is
- installed. Return None if not found."""
+ installed. Return None if not found.
+ """
try:
# Try to locate Verbs by looking for a utility in the path
ibv_devices = which("ibv_devices")
@@ -39,8 +42,25 @@ def _verbs_dir():
# Remove executable name and "bin" directory
path = os.path.dirname(path)
path = os.path.dirname(path)
+ # There's usually no "/include" on Unix; use "/usr/include" instead
+ if path == "/":
+ path = "/usr"
return path
- except:
+ except TypeError:
+ return None
+ except ProcessError:
+ return None
+
+
+def _mxm_dir():
+ """Look for default directory where the Mellanox package is
+ installed. Return None if not found.
+ """
+ # Only using default directory; make this more flexible in the future
+ path = "/opt/mellanox/mxm"
+ if os.path.isdir(path):
+ return path
+ else:
return None
@@ -56,39 +76,117 @@ class Openmpi(AutotoolsPackage):
"""
homepage = "http://www.open-mpi.org"
- url = "http://www.open-mpi.org/software/ompi/v1.10/downloads/openmpi-1.10.1.tar.bz2"
+ url = "https://www.open-mpi.org/software/ompi/v3.0/downloads/openmpi-3.0.0.tar.bz2"
list_url = "http://www.open-mpi.org/software/ompi/"
- list_depth = 3
- version('2.0.1', '6f78155bd7203039d2448390f3b51c96')
- version('2.0.0', 'cdacc800cb4ce690c1f1273cb6366674')
- version('1.10.3', 'e2fe4513200e2aaa1500b762342c674b')
- version('1.10.2', 'b2f43d9635d2d52826e5ef9feb97fd4c')
- version('1.10.1', 'f0fcd77ed345b7eafb431968124ba16e')
- version('1.10.0', '280cf952de68369cebaca886c5ce0304')
- version('1.8.8', '0dab8e602372da1425e9242ae37faf8c')
- version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475')
+ # Current
+ version('3.0.0', '757d51719efec08f9f1a7f32d58b3305') # libmpi.so.40.00.0
+
+ # Still supported
+ version('2.1.2', 'ff2e55cc529802e7b0738cf87acd3ee4') # libmpi.so.20.10.2
+ version('2.1.1', 'ae542f5cf013943ffbbeb93df883731b') # libmpi.so.20.10.1
+ version('2.1.0', '4838a5973115c44e14442c01d3f21d52') # libmpi.so.20.10.0
+ version('2.0.3', '6c09e56ac2230c4f9abd8ba029f03edd') # libmpi.so.20.0.3
+ version('2.0.2', 'ecd99aa436a1ca69ce936a96d6a3fa48') # libmpi.so.20.0.2
+ version('2.0.1', '6f78155bd7203039d2448390f3b51c96') # libmpi.so.20.0.1
+ version('2.0.0', 'cdacc800cb4ce690c1f1273cb6366674') # libmpi.so.20.0.0
+
+ version('1.10.7', 'c87c613f9acb1a4eee21fa1ac8042579') # libmpi.so.12.0.7
+ version('1.10.6', '2e65008c1867b1f47c32f9f814d41706') # libmpi.so.12.0.6
+ version('1.10.5', 'd32ba9530a869d9c1eae930882ea1834') # libmpi.so.12.0.5
+ version('1.10.4', '9d2375835c5bc5c184ecdeb76c7c78ac') # libmpi.so.12.0.4
+ version('1.10.3', 'e2fe4513200e2aaa1500b762342c674b') # libmpi.so.12.0.3
+ version('1.10.2', 'b2f43d9635d2d52826e5ef9feb97fd4c') # libmpi.so.12.0.2
+ version('1.10.1', 'f0fcd77ed345b7eafb431968124ba16e') # libmpi.so.12.0.1
+ version('1.10.0', '280cf952de68369cebaca886c5ce0304') # libmpi.so.12.0.0
+
+ # Retired
+ version('1.8.8', '0dab8e602372da1425e9242ae37faf8c') # libmpi.so.1.6.3
+ version('1.8.7', '2485ed6fa0fab9bb5b4e7a9f63718630') # libmpi.so.1.6.2
+ version('1.8.6', 'eb569e7dc97eeaa5b1876cccf114f377') # libmpi.so.1.6.1
+ version('1.8.5', '93e958914ff0e4d9634d668d2d48c793') # libmpi.so.1.6.0
+ version('1.8.4', '93b7ea2c4ebae76947f942579608ae4a') # libmpi.so.1.6.0
+ version('1.8.3', '2067d00853e0c33d498153fc7d268d2b') # libmpi.so.1.6.0
+ version('1.8.2', '339a9fc199563bacbb359875ce8c9e20') # libmpi.so.1.5.2
+ version('1.8.1', '0e12c24a28a605f681ff9a19a1aca2f1') # libmpi.so.1.5.0
+ version('1.8', '5999cfb177a50c480b5d0bced379aff1') # libmpi.so.1.5.0
+
+ version('1.7.5', '321ab81147ac69a5bbca72652fb3b468') # libmpi.so.1.4.0
+ version('1.7.4', '4aea4fb00f8956dd56ccf50e5784e03f') # libmpi.so.1.3.0
+ version('1.7.3', '7d0779f73c43eb1d098ad037d60649bc') # libmpi.so.1.2.0
+ version('1.7.2', 'b897b92100bd13b367e651df483421d5') # libmpi.so.1.1.2
+ version('1.7.1', 'f25b446a9dcbbd6a105a99d926d34441') # libmpi.so.1.1.1
+ version('1.7', 'c0e3c4b3bfcd8b8bbd027f6f4c164acb') # libmpi.so.1.1.0
+
+ version('1.6.5', '03aed2a4aa4d0b27196962a2a65fc475') # libmpi.so.1.0.8
+ version('1.6.4', '62119579ab92b2592cd96b6a9d2a8cc3') # libmpi.so.1.0.7
+ version('1.6.3', 'eedb73155a7a40b0b07718494298fb25') # libmpi.so.1.0.6
+ version('1.6.2', '219754715a8e40beb468bbc8f0b3251a') # libmpi.so.1.0.3
+ version('1.6.1', '33d2782c20ff6be79130a703b85da8f0') # libmpi.so.1.0.3
+ version('1.6', 'dd6f5bd4b3cb14d93bbf530e50e46e60') # libmpi.so.1.0.3
+
+ # Ancient
+ version('1.5.5', 'f882fd61ff89db856bfd8f0dfa42e1bd') # libmpi.so.1.0.3
+ version('1.5.4', '51153d794c49ce6d275dba2793ab0c68') # libmpi.so.1.0.2
+ version('1.5.3', '0eb8ec2aa05c74a4bc7602b01847131e') # libmpi.so.1.0.1
+ version('1.5.2', 'faaee6a2777bf607d7fa1297c0b3a9ed') # libmpi.so.1.0.1
+ version('1.5.1', '3f9409f5d3b617c04dea48ba8fbd703a') # libmpi.so.1.0.0
+ version('1.5', '86bf5f9ef7337231abbca3350b31f112') # libmpi.so.1.0.0
+
+ version('1.4.5', '84ddd2772f46d35da79e1db8a274c99d') # libmpi.so.0.0.4
+ version('1.4.4', 'e58a1ea7b8af62453aaa0ddaee5f26a0') # libmpi.so.0.0.3
+ version('1.4.3', 'd2ead141c43b915343f5c5a18f3b5016') # libmpi.so.0.0.2
+ version('1.4.2', '53b26fa2586aedaf73cf40effbfcc2f3') # libmpi.so.0.0.2
+ version('1.4.1', '28a820c85e02973809df881fdeddd15e') # libmpi.so.0.0.1
+ version('1.4', '9786ec0698afed9498ce43dc3978a435') # libmpi.so.0.0.1
+
+ version('1.3.4', '978c29f3b671856daa0fc67459b73e01') # libmpi.so.0.0.1
+ version('1.3.3', 'f6cdc9c195daa8571b2e509e952d6755') # libmpi.so.0.0.0
+ version('1.3.2', '75781dc31255cd841701c065e239d994') # libmpi.so.0.0.0
+ version('1.3.1', 'd759523b0752139872c534714d641d64') # libmpi.so.0.0.0
+ version('1.3', 'efbba7d652d1e430d456f65d7a2e339b') # libmpi.so.0.0.0
+
+ version('1.2.9', '78c2aebbb746610ed12bdedcc2b6ec0e') # libmpi.so.0.0.0
+ version('1.2.8', '7f2d5af02101c5f01173f4f6de296549') # libmpi.so.0.0.0
+ version('1.2.7', 'b5ae3059fba71eba4a89a2923da8223f') # libmpi.so.0.0.0
+ version('1.2.6', 'f126793b68e71f5ec4a192c40675af2d') # libmpi.so.0.0.0
+ version('1.2.5', 'c6e82aab6cdcd425bf29217e8317d7dc') # libmpi.so.0.0.0
+ version('1.2.4', '311b38c597f54d8d6b277225ef458666') # libmpi.so.0.0.0
+ version('1.2.3', 'ae980bb00f9686934a1143701cc041e4') # libmpi.so.0.0.0
+ version('1.2.2', '7f553317e388c4efe479e908b66f910d') # libmpi.so.0.0.0
+ version('1.2.1', 'ceaa42891edba2324a94fdd0b87e46ca') # libmpi.so.0.0.0
+ version('1.2', '37e8d4edad54a8d8c3127fbef87ebda1') # libmpi.so.0.0.0
+
+ version('1.1.5', '6aada92896a1830ece6d3ba1e66a17fa') # libmpi.so.0.0.0
+ version('1.1.4', '28940b182156478fa442397b0c9660e1') # libmpi.so.0.0.0
+ version('1.1.3', 'bbaa7fe9d556212d877d872544a31569') # libmpi.so.0.0.0
+ version('1.1.2', '53877ec8bca5f6e505496b6b94b1d850') # libmpi.so.0.0.0
+ version('1.1.1', '498b9322ae0ad512026a008a30c7e0b5') # libmpi.so.0.0.0
+ version('1.1', '821af8bbb7a8e85ec707cb4c3b6bcbf6') # libmpi.so.0.0.0
+
+ version('1.0.2', 'fd32861d643f9fe539a01d0d5b836f41') # libmpi.so.0.0.0
+ version('1.0.1', '8abccca5cdddc81a6d9d9e22b3bb6db9') # libmpi.so.0.0.0
+ version('1.0', 'f5dcb5d3a98f2e5a9c2a0caaef54d806') # libmpi.so.0.0.0
patch('ad_lustre_rwcontig_open_source.patch', when="@1.6.5")
patch('llnl-platforms.patch', when="@1.6.5")
- patch('configure.patch', when="@1.10.0:1.10.1")
-
- # Fabrics
- variant('psm', default=False, description='Build support for the PSM library')
- variant('psm2', default=False,
- description='Build support for the Intel PSM2 library')
- variant('pmi', default=False,
- description='Build support for PMI-based launchers')
- variant('verbs', default=_verbs_dir() is not None,
- description='Build support for OpenFabrics verbs')
- variant('mxm', default=False, description='Build Mellanox Messaging support')
-
- # Schedulers
- # TODO: support for alps and loadleveler is missing
- variant('tm', default=False,
- description='Build TM (Torque, PBSPro, and compatible) support')
- variant('slurm', default=False,
- description='Build SLURM scheduler component')
+ patch('configure.patch', when="@1.10.1")
+ patch('fix_multidef_pmi_class.patch', when="@2.0.0:2.0.1")
+
+ variant(
+ 'fabrics',
+ default=None if _verbs_dir() is None else 'verbs',
+ description='List of fabrics that are enabled',
+ values=('psm', 'psm2', 'pmi', 'verbs', 'mxm'),
+ multi=True
+ )
+
+ variant(
+ 'schedulers',
+ description='List of schedulers for which support is enabled',
+ values=('alps', 'lsf', 'tm', 'slurm', 'sge', 'loadleveler'),
+ multi=True
+ )
# Additional support options
variant('java', default=False, description='Build Java support')
@@ -96,20 +194,38 @@ class Openmpi(AutotoolsPackage):
variant('vt', default=True, description='Build VampirTrace support')
variant('thread_multiple', default=False,
description='Enable MPI_THREAD_MULTIPLE support')
+ variant('cuda', default=False, description='Enable CUDA support')
- # TODO: support for CUDA is missing
-
+ provides('mpi')
provides('mpi@:2.2', when='@1.6.5')
provides('mpi@:3.0', when='@1.7.5:')
provides('mpi@:3.1', when='@2.0.0:')
depends_on('hwloc')
- depends_on('jdk', when='+java')
- depends_on('sqlite', when='+sqlite3')
+ depends_on('hwloc +cuda', when='+cuda')
+ depends_on('java', when='+java')
+ depends_on('sqlite', when='+sqlite3@:1.11')
+
+ conflicts('+cuda', when='@:1.6') # CUDA support was added in 1.7
+ conflicts('fabrics=psm2', when='@:1.8') # PSM2 support was added in 1.10.0
+ conflicts('fabrics=pmi', when='@:1.5.4') # PMI support was added in 1.5.5
+ conflicts('fabrics=mxm', when='@:1.5.3') # MXM support was added in 1.5.4
def url_for_version(self, version):
- return "http://www.open-mpi.org/software/ompi/v%s/downloads/openmpi-%s.tar.bz2" % (
- version.up_to(2), version)
+ url = "http://www.open-mpi.org/software/ompi/v{0}/downloads/openmpi-{1}.tar.bz2"
+ return url.format(version.up_to(2), version)
+
+ @property
+ def libs(self):
+ query_parameters = self.spec.last_query.extra_parameters
+ libraries = ['libmpi']
+
+ if 'cxx' in query_parameters:
+ libraries = ['libmpi_cxx'] + libraries
+
+ return find_libraries(
+ libraries, root=self.prefix, shared=True, recurse=True
+ )
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
spack_env.set('MPICC', join_path(self.prefix.bin, 'mpicc'))
@@ -122,7 +238,7 @@ class Openmpi(AutotoolsPackage):
spack_env.set('OMPI_FC', spack_fc)
spack_env.set('OMPI_F77', spack_f77)
- def setup_dependent_package(self, module, dep_spec):
+ def setup_dependent_package(self, module, dependent_spec):
self.spec.mpicc = join_path(self.prefix.bin, 'mpicc')
self.spec.mpicxx = join_path(self.prefix.bin, 'mpic++')
self.spec.mpifc = join_path(self.prefix.bin, 'mpif90')
@@ -132,17 +248,35 @@ class Openmpi(AutotoolsPackage):
join_path(self.prefix.lib, 'libmpi.{0}'.format(dso_suffix))
]
- @property
- def verbs(self):
+ def with_or_without_verbs(self, activated):
# Up through version 1.6, this option was previously named
# --with-openib
- if self.spec.satisfies('@:1.6'):
- return 'openib'
+ opt = 'openib'
# In version 1.7, it was renamed to be --with-verbs
- elif self.spec.satisfies('@1.7:'):
- return 'verbs'
-
- @AutotoolsPackage.precondition('autoreconf')
+ if self.spec.satisfies('@1.7:'):
+ opt = 'verbs'
+ # If the option has not been activated return
+ # --without-openib or --without-verbs
+ if not activated:
+ return '--without-{0}'.format(opt)
+ line = '--with-{0}'.format(opt)
+ path = _verbs_dir()
+ if (path is not None) and (path not in ('/usr', '/usr/local')):
+ line += '={0}'.format(path)
+ return line
+
+ def with_or_without_mxm(self, activated):
+ opt = 'mxm'
+ # If the option has not been activated return --without-mxm
+ if not activated:
+ return '--without-{0}'.format(opt)
+ line = '--with-{0}'.format(opt)
+ path = _mxm_dir()
+ if (path is not None):
+ line += '={0}'.format(path)
+ return line
+
+ @run_before('autoreconf')
def die_without_fortran(self):
# Until we can pass variants such as +fortran through virtual
# dependencies depends_on('mpi'), require Fortran compiler to
@@ -154,48 +288,17 @@ class Openmpi(AutotoolsPackage):
def configure_args(self):
spec = self.spec
-
config_args = [
'--enable-shared',
- '--enable-static',
- '--enable-mpi-cxx',
- # Schedulers
- '--with-tm' if '+tm' in spec else '--without-tm',
- '--with-slurm' if '+slurm' in spec else '--without-slurm',
- # Fabrics
- '--with-psm' if '+psm' in spec else '--without-psm',
+ '--enable-static'
]
+ if self.spec.satisfies('@2.0:'):
+ # for Open-MPI 2.0:, C++ bindings are disabled by default.
+ config_args.extend(['--enable-mpi-cxx'])
- # Intel PSM2 support
- if spec.satisfies('@1.10:'):
- if '+psm2' in spec:
- config_args.append('--with-psm2')
- else:
- config_args.append('--without-psm2')
-
- # PMI support
- if spec.satisfies('@1.5.5:'):
- if '+pmi' in spec:
- config_args.append('--with-pmi')
- else:
- config_args.append('--without-pmi')
-
- # Mellanox Messaging support
- if spec.satisfies('@1.5.4:'):
- if '+mxm' in spec:
- config_args.append('--with-mxm')
- else:
- config_args.append('--without-mxm')
-
- # OpenFabrics verbs support
- if '+verbs' in spec:
- path = _verbs_dir()
- if path is not None and path not in ('/usr', '/usr/local'):
- config_args.append('--with-{0}={1}'.format(self.verbs, path))
- else:
- config_args.append('--with-{0}'.format(self.verbs))
- else:
- config_args.append('--without-{0}'.format(self.verbs))
+ # Fabrics and schedulers
+ config_args.extend(self.with_or_without('fabrics'))
+ config_args.extend(self.with_or_without('schedulers'))
# Hwloc support
if spec.satisfies('@1.5.2:'):
@@ -207,7 +310,7 @@ class Openmpi(AutotoolsPackage):
config_args.extend([
'--enable-java',
'--enable-mpi-java',
- '--with-jdk-dir={0}'.format(spec['jdk'].prefix)
+ '--with-jdk-dir={0}'.format(spec['java'].prefix)
])
else:
config_args.extend([
@@ -234,16 +337,43 @@ class Openmpi(AutotoolsPackage):
else:
config_args.append('--disable-mpi-thread-multiple')
+ # CUDA support
+ # See https://www.open-mpi.org/faq/?category=buildcuda
+ if spec.satisfies('@1.7:'):
+ if '+cuda' in spec:
+ # OpenMPI dynamically loads libcuda.so, requires dlopen
+ config_args.append('--enable-dlopen')
+ # Searches for header files in DIR/include
+ config_args.append('--with-cuda={0}'.format(
+ spec['cuda'].prefix))
+ if spec.satisfies('@1.7:1.7.2'):
+ # This option was removed from later versions
+ config_args.append('--with-cuda-libdir={0}'.format(
+ spec['cuda'].libs.directories[0]))
+ if spec.satisfies('@1.7.2'):
+ # There was a bug in 1.7.2 when --enable-static is used
+ config_args.append('--enable-mca-no-build=pml-bfo')
+ if spec.satisfies('%pgi^cuda@7.0:7.999'):
+ # OpenMPI has problems with CUDA 7 and PGI
+ config_args.append(
+ '--with-wrapper-cflags=-D__LP64__ -ta:tesla')
+ if spec.satisfies('%pgi@:15.8'):
+ # With PGI 15.9 and later compilers, the
+ # CFLAGS=-D__LP64__ is no longer needed.
+ config_args.append('CFLAGS=-D__LP64__')
+ else:
+ config_args.append('--without-cuda')
+
return config_args
- @AutotoolsPackage.sanity_check('install')
+ @run_after('install')
def filter_compilers(self):
"""Run after install to make the MPI compilers use the
- compilers that Spack built the package with.
+ compilers that Spack built the package with.
- If this isn't done, they'll have CC, CXX and FC set
- to Spack's generic cc, c++ and f90. We want them to
- be bound to whatever compiler they were built with.
+ If this isn't done, they'll have CC, CXX and FC set
+ to Spack's generic cc, c++ and f90. We want them to
+ be bound to whatever compiler they were built with.
"""
kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
wrapper_basepath = join_path(self.prefix, 'share', 'openmpi')
diff --git a/var/spack/repos/builtin/packages/openscenegraph/package.py b/var/spack/repos/builtin/packages/openscenegraph/package.py
index 565941ff0e..915848fc23 100644
--- a/var/spack/repos/builtin/packages/openscenegraph/package.py
+++ b/var/spack/repos/builtin/packages/openscenegraph/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Openscenegraph(Package):
+class Openscenegraph(CMakePackage):
"""OpenSceneGraph is an open source, high performance 3D graphics toolkit
that's used in a variety of visual simulation applications."""
@@ -36,42 +36,34 @@ class Openscenegraph(Package):
version('3.2.3', '02ffdad7744c747d8fad0d7babb58427')
version('3.1.5', '1c90b851b109849c985006486ef59822')
- variant('debug', default=False, description='Builds a debug version of the library')
variant('shared', default=True, description='Builds a shared version of the library')
depends_on('cmake@2.8.7:', type='build')
depends_on('qt@4:')
depends_on('zlib')
- def install(self, spec, prefix):
- build_type = 'Debug' if '+debug' in spec else 'Release'
+ def cmake_args(self):
+ spec = self.spec
+
shared_status = 'ON' if '+shared' in spec else 'OFF'
- cmake_args = std_cmake_args[:]
- cmake_args.extend([
- '-DCMAKE_BUILD_TYPE={0}'.format(build_type),
+ args = [
'-DDYNAMIC_OPENSCENEGRAPH={0}'.format(shared_status),
'-DDYNAMIC_OPENTHREADS={0}'.format(shared_status),
- ])
+ '-DZLIB_INCLUDE_DIR={0}'.format(spec['zlib'].prefix.include),
+ '-DZLIB_LIBRARY={0}/libz.{1}'.format(spec['zlib'].prefix.lib,
+ dso_suffix),
+ '-DBUILD_OSG_APPLICATIONS=OFF',
+ '-DOSG_NOTIFY_DISABLED=ON',
+ '-DLIB_POSTFIX=',
+ ]
# NOTE: This is necessary in order to allow OpenSceneGraph to compile
# despite containing a number of implicit bool to int conversions.
if spec.satisfies('%gcc'):
- cmake_args.extend([
+ args.extend([
'-DCMAKE_C_FLAGS=-fpermissive',
'-DCMAKE_CXX_FLAGS=-fpermissive',
])
- with working_dir('spack-build', create=True):
- cmake(
- '..',
- '-DZLIB_INCLUDE_DIR={0}'.format(spec['zlib'].prefix.include),
- '-DZLIB_LIBRARY={0}/libz.{1}'.format(spec['zlib'].prefix.lib,
- dso_suffix),
- '-DBUILD_OSG_APPLICATIONS=OFF',
- '-DOSG_NOTIFY_DISABLED=ON',
- '-DLIB_POSTFIX=',
- *cmake_args
- )
- make()
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/openspeedshop/package.py b/var/spack/repos/builtin/packages/openspeedshop/package.py
index 2e908b4099..36e9fb06e4 100644
--- a/var/spack/repos/builtin/packages/openspeedshop/package.py
+++ b/var/spack/repos/builtin/packages/openspeedshop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
##############################################################################
-# Copyright (c) 2015-2016 Krell Institute. All Rights Reserved.
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
@@ -45,7 +45,7 @@ import os
import os.path
-class Openspeedshop(Package):
+class Openspeedshop(CMakePackage):
"""OpenSpeedShop is a community effort by The Krell Institute with
current direct funding from DOEs NNSA. It builds on top of a
broad list of community infrastructures, most notably Dyninst
@@ -60,18 +60,12 @@ class Openspeedshop(Package):
"""
homepage = "http://www.openspeedshop.org"
- url = "https://github.com/OpenSpeedShop"
- version('2.2', '16cb051179c2038de4e8a845edf1d573')
+ url = "https://github.com/OpenSpeedShop"
+
# Use when the git repository is available
version('2.3', branch='master',
git='https://github.com/OpenSpeedShop/openspeedshop.git')
- # Optional mirror template
- # url = "file:/home/jeg/OpenSpeedShop_ROOT/SOURCES/openspeedshop-2.3.tar.gz"
- # version('2.3', '517a7798507241ad8abd8b0626a4d2cf')
-
- parallel = False
-
variant('offline', default=False,
description="build with offline instrumentor enabled.")
variant('cbtf', default=True,
@@ -83,11 +77,13 @@ class Openspeedshop(Package):
to point to target build.")
variant('cuda', default=False,
description="build with cuda packages included.")
- variant('ptgf', default=False,
- description="build with the PTGF based gui package enabled.")
- variant('rtfe', default=False,
- description="build for clusters heterogeneous processors \
- on fe/be nodes.")
+
+ variant('gui', default='qt3', values=('none', 'qt3', 'qt4'),
+ description='Build or not build a GUI of choice'
+ )
+
+ variant('build_type', default='None', values=('None'),
+ description='CMake build type')
# MPI variants
variant('openmpi', default=False,
@@ -112,16 +108,19 @@ class Openspeedshop(Package):
depends_on("cmake@3.0.2:", type='build')
# Dependencies for openspeedshop that are common to all
# the variants of the OpenSpeedShop build
+ depends_on("libtool", type='build')
depends_on("bison", type='build')
depends_on("flex", type='build')
- depends_on("binutils@2.24+krellpatch", type='build')
- depends_on("libelf")
+ depends_on("binutils", type='build')
+ depends_on("elf", type="link")
depends_on("libdwarf")
depends_on("sqlite")
depends_on("boost@1.50.0:1.59.0")
- depends_on("dyninst@9.2.0")
+ depends_on("dyninst@9.3.2")
depends_on("libxml2+python")
- depends_on("qt@3.3.8b+krellpatch")
+ depends_on("qt@3.3.8b+krellpatch", when='gui=qt3')
+ # Actively working on adding this gui package
+ # depends_on("cbtf-argonavis-gui", when='gui=qt4')
# Dependencies only for the openspeedshop offline package.
depends_on("libunwind", when='+offline')
@@ -136,53 +135,118 @@ class Openspeedshop(Package):
# Dependencies only for the openspeedshop cbtf package.
depends_on("cbtf", when='+cbtf')
- depends_on("cbtf-krell", when='+cbtf')
+ depends_on('cbtf-krell', when='+cbtf')
+ depends_on('cbtf-krell+mpich', when='+cbtf+mpich')
+ depends_on('cbtf-krell+mpich2', when='+cbtf+mpich2')
+ depends_on('cbtf-krell+mpt', when='+cbtf+mpt')
+ depends_on('cbtf-krell+mvapich', when='+cbtf+mvapich')
+ depends_on('cbtf-krell+mvapich2', when='+cbtf+mvapich2')
+ depends_on('cbtf-krell+openmpi', when='+cbtf+openmpi')
depends_on("cbtf-argonavis", when='+cbtf+cuda')
depends_on("mrnet@5.0.1:+lwthreads", when='+cbtf')
- def adjustBuildTypeParams_cmakeOptions(self, spec, cmakeOptions):
- # Sets build type parameters into cmakeOptions the
- # options that will enable the cbtf-krell built type settings
+ parallel = False
+ build_directory = 'build_openspeedshop'
+
+ def cmake_args(self):
+ spec = self.spec
compile_flags = "-O2 -g"
- BuildTypeOptions = []
- # Set CMAKE_BUILD_TYPE to what cbtf-krell wants it
- # to be, not the stdcmakeargs
- for word in cmakeOptions[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_CXX_FLAGS'):
- cmakeOptions.remove(word)
- if word.startswith('-DCMAKE_C_FLAGS'):
- cmakeOptions.remove(word)
- BuildTypeOptions.extend(['-DCMAKE_BUILD_TYPE=None',
- '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
- '-DCMAKE_C_FLAGS=%s' % compile_flags])
-
- cmakeOptions.extend(BuildTypeOptions)
+
+ if '+offline' in spec:
+ # Indicate building offline vers (writes rawdata files)
+ instrumentor_setting = "offline"
+ if '+runtime' in spec:
+ cmake_args = [
+ '-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DINSTRUMENTOR=%s' % instrumentor_setting,
+ '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
+ '-DLIBUNWIND_DIR=%s' % spec['libunwind'].prefix,
+ '-DPAPI_DIR=%s' % spec['papi'].prefix]
+
+ # Add any MPI implementations coming from variant settings
+ self.set_mpi_cmakeOptions(spec, cmake_args)
+
+ else:
+ cmake_args = []
+
+ # Appends base options to cmake_args
+ self.set_defaultbase_cmakeOptions(spec, cmake_args)
+
+ cmake_args.extend(
+ ['-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DINSTRUMENTOR=%s' % instrumentor_setting,
+ '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
+ '-DLIBUNWIND_DIR=%s' % spec['libunwind'].prefix,
+ '-DPAPI_DIR=%s' % spec['papi'].prefix,
+ '-DSQLITE3_DIR=%s' % spec['sqlite'].prefix,
+ '-DQTLIB_DIR=%s' % spec['qt'].prefix])
+
+ # Add any MPI implementations coming from variant settings
+ self.set_mpi_cmakeOptions(spec, cmake_args)
+
+ elif '+cbtf' in spec:
+ # Indicate building cbtf vers (transfer rawdata files)
+ instrumentor_setting = "cbtf"
+
+ if '+runtime' in spec:
+ # Appends base options to cmake_args
+ self.set_defaultbase_cmakeOptions(spec, cmake_args)
+
+ cmake_args.extend(
+ ['-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DINSTRUMENTOR=%s' % instrumentor_setting,
+ '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
+ '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix])
+
+ else:
+ cmake_args = []
+
+ # Appends base options to cmake_args
+ self.set_defaultbase_cmakeOptions(spec, cmake_args)
+ guitype = self.spec.variants['gui'].value
+ cmake_args.extend(
+ ['-DCMAKE_CXX_FLAGS=%s' % compile_flags,
+ '-DCMAKE_C_FLAGS=%s' % compile_flags,
+ '-DINSTRUMENTOR=%s' % instrumentor_setting,
+ '-DSQLITE3_DIR=%s' % spec['sqlite'].prefix,
+ '-DCBTF_DIR=%s' % spec['cbtf'].prefix,
+ '-DCBTF_KRELL_DIR=%s' % spec['cbtf-krell'].prefix,
+ '-DMRNET_DIR=%s' % spec['mrnet'].prefix])
+
+ if guitype == 'none':
+ cmake_args.extend(
+ ['-DBUILD_QT3_GUI=FALSE'])
+ elif guitype == 'qt4':
+ cmake_args.extend(
+ ['-DBUILD_QT3_GUI=FALSE'])
+ elif guitype == 'qt3':
+ cmake_args.extend(
+ ['-DQTLIB_DIR=%s'
+ % spec['qt'].prefix])
+
+ return cmake_args
def set_defaultbase_cmakeOptions(self, spec, cmakeOptions):
# Appends to cmakeOptions the options that will enable
# the appropriate base level options to the openspeedshop
# cmake build.
- python_vers = format(spec['python'].version.up_to(2))
- python_pv = '/python' + python_vers
- python_pvs = '/libpython' + python_vers + '.' + format(dso_suffix)
+ python_exe = spec['python'].command.path
+ python_library = spec['python'].libs[0]
+ python_include = spec['python'].headers.directories[0]
BaseOptions = []
BaseOptions.append('-DBINUTILS_DIR=%s' % spec['binutils'].prefix)
- BaseOptions.append('-DLIBELF_DIR=%s' % spec['libelf'].prefix)
+ BaseOptions.append('-DLIBELF_DIR=%s' % spec['elf'].prefix)
BaseOptions.append('-DLIBDWARF_DIR=%s' % spec['libdwarf'].prefix)
- BaseOptions.append(
- '-DPYTHON_EXECUTABLE=%s'
- % join_path(spec['python'].prefix + '/bin/python'))
- BaseOptions.append(
- '-DPYTHON_INCLUDE_DIR=%s'
- % join_path(spec['python'].prefix.include) + python_pv)
- BaseOptions.append(
- '-DPYTHON_LIBRARY=%s'
- % join_path(spec['python'].prefix.lib) + python_pvs)
+ BaseOptions.append('-DPYTHON_EXECUTABLE=%s' % python_exe)
+ BaseOptions.append('-DPYTHON_INCLUDE_DIR=%s' % python_include)
+ BaseOptions.append('-DPYTHON_LIBRARY=%s' % python_library)
BaseOptions.append('-DBoost_NO_SYSTEM_PATHS=TRUE')
BaseOptions.append('-DBoost_NO_BOOST_CMAKE=TRUE')
BaseOptions.append('-DBOOST_ROOT=%s' % spec['boost'].prefix)
@@ -230,7 +294,7 @@ class Openspeedshop(Package):
# set the DYNINSTAPI_RT_LIB library which is
# required for OpenSpeedShop to find loop level
# performance information
- dyninst_libdir = find_libraries(['libdyninstAPI_RT'],
+ dyninst_libdir = find_libraries('libdyninstAPI_RT',
root=self.spec['dyninst'].prefix,
shared=True, recurse=True)
@@ -238,7 +302,7 @@ class Openspeedshop(Package):
run_env.set('DYNINSTAPI_RT_LIB', dyninst_libdir)
# Find openspeedshop library path
- oss_libdir = find_libraries(['libopenss-framework'],
+ oss_libdir = find_libraries('libopenss-framework',
root=self.spec['openspeedshop'].prefix,
shared=True, recurse=True)
run_env.prepend_path('LD_LIBRARY_PATH',
@@ -277,144 +341,3 @@ class Openspeedshop(Package):
run_env.set('OPENSS_MPI_IMPLEMENTATION', 'mvapich2')
if '+openmpi' in self.spec:
run_env.set('OPENSS_MPI_IMPLEMENTATION', 'openmpi')
-
- def install(self, spec, prefix):
-
- if '+offline' in spec:
- instrumentor_setting = "offline"
- if '+runtime' in spec:
- with working_dir('build_runtime', create=True):
-
- cmakeOptions = []
- cmakeOptions.extend([
- '-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '-DINSTRUMENTOR=%s' % instrumentor_setting,
- '-DLIBMONITOR_DIR=%s' % spec['libmonitor'].prefix,
- '-DLIBUNWIND_DIR=%s' % spec['libunwind'].prefix,
- '-DPAPI_DIR=%s' % spec['papi'].prefix])
-
- # Add any MPI implementations coming from variant settings
- self.set_mpi_cmakeOptions(spec, cmakeOptions)
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the build options to the favored
- # ones for this build
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
- else:
- cmake_prefix_path = join_path(spec['dyninst'].prefix)
- with working_dir('build', create=True):
- cmakeOptions = []
-
- # Appends base options to cmakeOptions
- self.set_defaultbase_cmakeOptions(spec, cmakeOptions)
-
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s'
- % prefix,
- '-DCMAKE_PREFIX_PATH=%s'
- % cmake_prefix_path,
- '-DINSTRUMENTOR=%s'
- % instrumentor_setting,
- '-DLIBMONITOR_DIR=%s'
- % spec['libmonitor'].prefix,
- '-DLIBUNWIND_DIR=%s'
- % spec['libunwind'].prefix,
- '-DPAPI_DIR=%s'
- % spec['papi'].prefix,
- '-DSQLITE3_DIR=%s'
- % spec['sqlite'].prefix,
- '-DQTLIB_DIR=%s'
- % spec['qt'].prefix])
-
- # Add any MPI implementations coming from variant settings
- self.set_mpi_cmakeOptions(spec, cmakeOptions)
- cmakeOptions.extend(std_cmake_args)
-
- # Adjust the build options to the favored
- # ones for this build
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
-
- elif '+cbtf' in spec:
- instrumentor_setting = "cbtf"
- # resolve_symbols = "symtabapi"
- cmake_prefix_path = join_path(spec['cbtf'].prefix) \
- + ':' + join_path(spec['cbtf-krell'].prefix)\
- + ':' + join_path(spec['dyninst'].prefix)
-
- if '+runtime' in spec:
- with working_dir('build_cbtf_runtime', create=True):
- cmakeOptions = []
-
- # Appends base options to cmakeOptions
- self.set_defaultbase_cmakeOptions(spec, cmakeOptions)
-
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s'
- % prefix,
- '-DCMAKE_PREFIX_PATH=%s'
- % cmake_prefix_path,
- '-DINSTRUMENTOR=%s'
- % instrumentor_setting,
- '-DCBTF_DIR=%s'
- % spec['cbtf'].prefix,
- '-DCBTF_KRELL_DIR=%s'
- % spec['cbtf-krell'].prefix,
- '-DMRNET_DIR=%s'
- % spec['mrnet'].prefix])
-
- # Adjust the build options to the
- # favored ones for this build
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
-
- else:
- with working_dir('build_cbtf', create=True):
- cmakeOptions = []
-
- # Appends base options to cmakeOptions
- self.set_defaultbase_cmakeOptions(spec, cmakeOptions)
-
- cmakeOptions.extend(
- ['-DCMAKE_INSTALL_PREFIX=%s'
- % prefix,
- '-DCMAKE_PREFIX_PATH=%s'
- % cmake_prefix_path,
- '-DINSTRUMENTOR=%s'
- % instrumentor_setting,
- '-DSQLITE3_DIR=%s'
- % spec['sqlite'].prefix,
- '-DCBTF_DIR=%s'
- % spec['cbtf'].prefix,
- '-DCBTF_KRELL_DIR=%s'
- % spec['cbtf-krell'].prefix,
- '-DQTLIB_DIR=%s'
- % spec['qt'].prefix,
- '-DMRNET_DIR=%s'
- % spec['mrnet'].prefix])
-
- # Adjust the build options to the favored
- # ones for this build
- self.adjustBuildTypeParams_cmakeOptions(spec, cmakeOptions)
-
- cmake('..', *cmakeOptions)
-
- make("clean")
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/openssh/package.py b/var/spack/repos/builtin/packages/openssh/package.py
new file mode 100644
index 0000000000..aab102efbd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/openssh/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 Openssh(AutotoolsPackage):
+ """OpenSSH is the premier connectivity tool for remote login with the
+ SSH protocol. It encrypts all traffic to eliminate
+ eavesdropping, connection hijacking, and other attacks. In
+ addition, OpenSSH provides a large suite of secure tunneling
+ capabilities, several authentication methods, and sophisticated
+ configuration options.
+ """
+
+ homepage = "https://www.openssh.com/"
+ url = "https://mirrors.sonic.net/pub/OpenBSD/OpenSSH/portable/openssh-7.5p1.tar.gz"
+
+ version('7.5p1', '652fdc7d8392f112bef11cacf7e69e23')
+ version('7.4p1', 'b2db2a83caf66a208bb78d6d287cdaa3')
+ version('7.3p1', 'dfadd9f035d38ce5d58a3bf130b86d08')
+ version('7.2p2', '13009a9156510d8f27e752659075cced')
+ version('7.1p2', '4d8547670e2a220d5ef805ad9e47acf2')
+ version('7.0p1', '831883f251ac34f0ab9c812acc24ee69')
+ version('6.9p1', '0b161c44fc31fbc6b76a6f8ae639f16f')
+ version('6.8p1', '08f72de6751acfbd0892b5f003922701')
+ version('6.7p1', '3246aa79317b1d23cae783a3bf8275d6')
+ version('6.6p1', '3e9800e6bca1fbac0eea4d41baa7f239')
+
+ depends_on('openssl')
+ depends_on('libedit')
+ depends_on('ncurses')
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py
index 12b5ed9c52..72f35ac4d5 100644
--- a/var/spack/repos/builtin/packages/openssl/package.py
+++ b/var/spack/repos/builtin/packages/openssl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,27 @@
import llnl.util.tty as tty
from spack import *
+import spack.architecture
class Openssl(Package):
- """The OpenSSL Project is a collaborative effort to develop a
- robust, commercial-grade, full-featured, and Open Source
- toolkit implementing the Secure Sockets Layer (SSL v2/v3) and
- Transport Layer Security (TLS v1) protocols as well as a
- full-strength general purpose cryptography library."""
+ """OpenSSL is an open source project that provides a robust,
+ commercial-grade, and full-featured toolkit for the Transport
+ Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
+ It is also a general-purpose cryptography library."""
homepage = "http://www.openssl.org"
- url = "ftp://openssl.org/source/openssl-1.0.1h.tar.gz"
+ # URL must remain http:// so Spack can bootstrap curl
+ url = "http://www.openssl.org/source/openssl-1.0.1h.tar.gz"
+ list_url = "https://www.openssl.org/source/old/"
+ list_depth = 1
+
+ version('1.1.0e', '51c42d152122e474754aea96f66928c6')
+ version('1.1.0d', '711ce3cd5f53a99c0e12a7d5804f0f63')
+ version('1.1.0c', '601e8191f72b18192a937ecf1a800f3f')
+ # Note: Version 1.0.2 is the "long-term support" version that will
+ # remain supported until 2019.
+ version('1.0.2k', 'f965fc0bf01bf882b31314b61391ae65', preferred=True)
version('1.0.2j', '96322138f0b69e61b7212bc53d5e912b')
version('1.0.2i', '678374e63f8df456a697d3e5e5a931fb')
version('1.0.2h', '9392e65072ce4b614c1392eefc1f23d0')
@@ -48,7 +58,13 @@ class Openssl(Package):
version('1.0.1r', '1abd905e079542ccae948af37e393d28')
version('1.0.1h', '8d6d684a9430d5cc98a62a5d8fbda8cf')
- depends_on("zlib")
+ depends_on('zlib')
+
+ # TODO: 'make test' requires Perl module Test::More version 0.96
+ # TODO: uncomment when test dependency types are supported.
+ # TODO: This is commented in the meantime to avoid dependnecy bloat.
+ # depends_on('perl@5.14.0:', type='build', when='+tests')
+
parallel = False
def handle_fetch_error(self, error):
@@ -67,11 +83,19 @@ class Openssl(Package):
# where it happens automatically?)
env['KERNEL_BITS'] = '64'
- options = ['zlib', 'no-krb5', 'shared']
+ options = ['zlib', 'shared']
+ if spec.satisfies('@1.0'):
+ options.append('no-krb5')
+ # clang does not support the .arch directive in assembly files.
+ if 'clang' in self.compiler.cc and \
+ 'aarch64' in spack.architecture.sys_type():
+ options.append('no-asm')
config = Executable('./config')
config('--prefix=%s' % prefix,
'--openssldir=%s' % join_path(prefix, 'etc', 'openssl'),
+ '-I{0}'.format(self.spec['zlib'].prefix.include),
+ '-L{0}'.format(self.spec['zlib'].prefix.lib),
*options)
# Remove non-standard compiler options if present. These options are
@@ -80,4 +104,7 @@ class Openssl(Package):
filter_file(r'-arch x86_64', '', 'Makefile')
make()
+ # TODO: add this back when we have a 'test' dependency type. See above.
+ # if self.run_tests:
+ # make('test') # 'VERBOSE=1'
make('install')
diff --git a/var/spack/repos/builtin/packages/opium/package.py b/var/spack/repos/builtin/packages/opium/package.py
index 521f917230..5ce1d8b332 100644
--- a/var/spack/repos/builtin/packages/opium/package.py
+++ b/var/spack/repos/builtin/packages/opium/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,7 @@ class Opium(Package):
depends_on('lapack')
def install(self, spec, prefix):
- libs = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ libs = spec['lapack'].libs + spec['blas'].libs
options = ['LDFLAGS=%s' % libs.ld_flags]
configure(*options)
diff --git a/var/spack/repos/builtin/packages/opus/package.py b/var/spack/repos/builtin/packages/opus/package.py
new file mode 100644
index 0000000000..03d434926d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/opus/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 Opus(AutotoolsPackage):
+ """Opus is a totally open, royalty-free, highly versatile audio codec."""
+
+ homepage = "http://opus-codec.org/"
+ url = "http://downloads.xiph.org/releases/opus/opus-1.1.4.tar.gz"
+
+ version('1.1.4', 'a2c09d995d0885665ff83b5df2505a5f')
+ version('1.1.3', '32bbb6b557fe1b6066adc0ae1f08b629')
+ version('1.1.2', '1f08a661bc72930187893a07f3741a91')
+ version('1.1.1', 'cfb354d4c65217ca32a762f8ab15f2ac')
+ version('1.1', 'c5a8cf7c0b066759542bc4ca46817ac6')
+ version('1.0.3', '86eedbd3c5a0171d2437850435e6edff')
+ version('1.0.2', 'c503ad05a59ddb44deab96204401be03')
+ version('1.0.1', 'bbac19996957b404a1139816e2f357f5')
+ version('1.0.0', 'ec3ff0a16d9ad8c31a8856d13d97b155')
+ version('0.9.14', 'c7161b247a8437ae6b0f11dd872e69e8')
+ version('0.9.10', 'afbda2fd20dc08e6075db0f60297a137')
+ version('0.9.9', '0c18f0aac37f1ed955f5d694ddd88000')
+ version('0.9.8', '76c1876eae9169dee808ff4710d847cf')
+ version('0.9.7', '49834324ab618105cf112e161770b422')
+ version('0.9.6', '030556bcaebb241505f8577e92abe6d4')
+ version('0.9.5', '6bec090fd28996da0336e165b153ebd8')
+ version('0.9.3', '934226d4f572d01c5848bd70538248f5')
+ version('0.9.2', '8b9047956c4a781e05d3ac8565cd28f5')
+ version('0.9.1', 'f58214e530928aa3db1dec217d5dfcd4')
+ version('0.9.0', '8a729db587430392e64280a499e9d061')
+
+ depends_on('libvorbis')
diff --git a/var/spack/repos/builtin/packages/orfm/package.py b/var/spack/repos/builtin/packages/orfm/package.py
new file mode 100644
index 0000000000..4b59bca7b6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/orfm/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Orfm(AutotoolsPackage):
+ """A simple and not slow open reading frame (ORF) caller. No bells or
+ whistles like frameshift detection, just a straightforward goal of
+ returning a FASTA file of open reading frames over a certain length
+ from a FASTA/Q file of nucleotide sequences."""
+
+ homepage = "https://github.com/wwood/OrfM"
+ url = "https://github.com/wwood/OrfM/releases/download/v0.7.1/orfm-0.7.1.tar.gz"
+
+ version('0.7.1', 'fcf18283a028cea2af90663a76a73a2a')
diff --git a/var/spack/repos/builtin/packages/orthomcl/package.py b/var/spack/repos/builtin/packages/orthomcl/package.py
new file mode 100644
index 0000000000..98bef74726
--- /dev/null
+++ b/var/spack/repos/builtin/packages/orthomcl/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Orthomcl(Package):
+ """OrthoMCL is a genome-scale algorithm for grouping orthologous protein
+ sequences."""
+
+ homepage = "http://orthomcl.org/orthomcl/"
+ url = "http://orthomcl.org/common/downloads/software/v2.0/orthomclSoftware-v2.0.9.tar.gz"
+
+ version('2.0.9', '2e0202ed4e36a753752c3567edb9bba9')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('blast-plus')
+ depends_on('mcl')
+ depends_on('mariadb')
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('config', prefix.config)
+ install_tree('doc', prefix.doc)
+ install_tree('lib', prefix.lib)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
index 161ba6254a..8e5c7be65a 100644
--- a/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
+++ b/var/spack/repos/builtin/packages/osu-micro-benchmarks/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
-class OsuMicroBenchmarks(Package):
+class OsuMicroBenchmarks(AutotoolsPackage):
"""The Ohio MicroBenchmark suite is a collection of independent MPI
message passing performance microbenchmarks developed and written at
The Ohio State University. It includes traditional benchmarks and
@@ -42,12 +43,11 @@ class OsuMicroBenchmarks(Package):
depends_on('mpi')
depends_on('cuda', when='+cuda')
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
config_args = [
- 'CC=%s' % spec['mpi'].prefix.bin + '/mpicc',
- 'CXX=%s' % spec['mpi'].prefix.bin + '/mpicxx',
- 'LDFLAGS=-lrt',
- '--prefix=%s' % prefix
+ 'CC=%s' % spec['mpi'].mpicc,
+ 'CXX=%s' % spec['mpi'].mpicxx
]
if '+cuda' in spec:
@@ -56,7 +56,8 @@ class OsuMicroBenchmarks(Package):
'--with-cuda=%s' % spec['cuda'].prefix,
])
- configure(*config_args)
+ # librt not available on darwin (and not required)
+ if not sys.platform == 'darwin':
+ config_args.append('LDFLAGS=-lrt')
- make()
- make('install')
+ return config_args
diff --git a/var/spack/repos/builtin/packages/otf/package.py b/var/spack/repos/builtin/packages/otf/package.py
index 39eb5a85aa..4df0a12bdf 100644
--- a/var/spack/repos/builtin/packages/otf/package.py
+++ b/var/spack/repos/builtin/packages/otf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/otf2/package.py b/var/spack/repos/builtin/packages/otf2/package.py
index ee39f448eb..ee08a44328 100644
--- a/var/spack/repos/builtin/packages/otf2/package.py
+++ b/var/spack/repos/builtin/packages/otf2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,30 +26,24 @@
from spack import *
-class Otf2(Package):
+class Otf2(AutotoolsPackage):
"""The Open Trace Format 2 is a highly scalable, memory efficient event
trace data format plus support library.
"""
- homepage = "http://www.vi-hps.org/score-p"
+ homepage = "http://www.vi-hps.org/projects/score-p"
url = "http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz"
- version('2.0', '5b546188b25bc1c4e285e06dddf75dfc',
- url="http://www.vi-hps.org/upload/packages/otf2/otf2-2.0.tar.gz")
- version('1.5.1', '16a9df46e0da78e374f5d12c8cdc1109',
- url='http://www.vi-hps.org/upload/packages/otf2/otf2-1.5.1.tar.gz')
- version('1.4', 'a23c42e936eb9209c4e08b61c3cf5092',
- url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.4.tar.gz")
- version('1.3.1', 'd0ffc4e858455ace4f596f910e68c9f2',
- url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.3.1.tar.gz")
- version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8',
- url="http://www.vi-hps.org/upload/packages/otf2/otf2-1.2.1.tar.gz")
+ version('2.1', 'e2994e53d9b7c2cbd0c4f564d638751e')
+ version('2.0', '5b546188b25bc1c4e285e06dddf75dfc')
+ version('1.5.1', '16a9df46e0da78e374f5d12c8cdc1109')
+ version('1.4', 'a23c42e936eb9209c4e08b61c3cf5092')
+ version('1.3.1', 'd0ffc4e858455ace4f596f910e68c9f2')
+ version('1.2.1', '8fb3e11fb7489896596ae2c7c83d7fc8')
- def install(self, spec, prefix):
- configure_args = ["--prefix=%s" % prefix,
- "--enable-shared",
- "CFLAGS=-fPIC",
- "CXXFLAGS=-fPIC"]
- configure(*configure_args)
- make()
- make("install")
+ def configure_args(self):
+ return [
+ '--enable-shared',
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ 'CXXFLAGS={0}'.format(self.compiler.pic_flag)
+ ]
diff --git a/var/spack/repos/builtin/packages/p4est/package.py b/var/spack/repos/builtin/packages/p4est/package.py
index da58f5a7e7..56c1ffbc93 100644
--- a/var/spack/repos/builtin/packages/p4est/package.py
+++ b/var/spack/repos/builtin/packages/p4est/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,12 +25,15 @@
from spack import *
-class P4est(Package):
+class P4est(AutotoolsPackage):
"""Dynamic management of a collection (a forest) of adaptive octrees in
parallel"""
homepage = "http://www.p4est.org"
url = "http://p4est.github.io/release/p4est-1.1.tar.gz"
+ maintainers = ['davydden']
+
+ version('2.0', 'c522c5b69896aab39aa5a81399372a19a6b03fc6200d2d5d677d9a22fe31029a')
version('1.1', '37ba7f4410958cfb38a2140339dbf64f')
# build dependencies
@@ -42,8 +45,8 @@ class P4est(Package):
depends_on('mpi')
depends_on('zlib')
- def install(self, spec, prefix):
- options = [
+ def configure_args(self):
+ return [
'--enable-mpi',
'--enable-shared',
'--disable-vtk-binary',
@@ -55,10 +58,3 @@ class P4est(Package):
'FC=%s' % self.spec['mpi'].mpifc,
'F77=%s' % self.spec['mpi'].mpif77
]
-
- configure('--prefix=%s' % prefix, *options)
-
- make()
- if self.run_tests:
- make("check")
- make("install")
diff --git a/var/spack/repos/builtin/packages/p7zip/package.py b/var/spack/repos/builtin/packages/p7zip/package.py
new file mode 100644
index 0000000000..90b7479d80
--- /dev/null
+++ b/var/spack/repos/builtin/packages/p7zip/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 P7zip(MakefilePackage):
+ """A Unix port of the 7z file archiver"""
+
+ homepage = "http://p7zip.sourceforge.net"
+ url = "https://downloads.sourceforge.net/project/p7zip/p7zip/16.02/p7zip_16.02_src_all.tar.bz2"
+
+ version('16.02', 'a0128d661cfe7cc8c121e73519c54fbf')
+
+ # all3 includes 7z, 7za, and 7zr
+ build_targets = ['all3']
+
+ @property
+ def install_targets(self):
+ return ['DEST_HOME={0}'.format(self.prefix), 'install']
diff --git a/var/spack/repos/builtin/packages/pacbio-daligner/package.py b/var/spack/repos/builtin/packages/pacbio-daligner/package.py
new file mode 100644
index 0000000000..e568c7170e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pacbio-daligner/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 PacbioDaligner(MakefilePackage):
+ """Daligner: The Dazzler "Overlap" Module. This is a special fork
+ required for some pacbio utilities."""
+
+ homepage = "https://github.com/PacificBiosciences/DALIGNER"
+ url = "https://github.com/PacificBiosciences/DALIGNER"
+
+ version('2017-08-05',
+ git='https://github.com/PacificBiosciences/DALIGNER.git',
+ commit='0fe5240d2cc6b55bf9e04465b700b76110749c9d')
+
+ depends_on('gmake', type='build')
+ depends_on('pacbio-dazz-db')
+
+ def edit(self, spec, prefix):
+ mkdir(prefix.bin)
+ makefile = FileFilter('Makefile')
+ makefile.filter('DEST_DIR\s*=\s*~/bin', 'DEST_DIR = ' + prefix.bin)
+ gmf = FileFilter('GNUmakefile')
+ gmf.filter('rsync\s*-av\s*\$\{ALL\}\s*\$\{PREFIX\}/bin',
+ 'cp ${ALL} ' + prefix.bin)
diff --git a/var/spack/repos/builtin/packages/pacbio-damasker/package.py b/var/spack/repos/builtin/packages/pacbio-damasker/package.py
new file mode 100644
index 0000000000..cc32df052b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pacbio-damasker/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PacbioDamasker(MakefilePackage):
+ """Damasker: The Dazzler Repeat Masking Suite. This is a special fork
+ required for some pacbio utilities."""
+
+ homepage = "https://github.com/PacificBiosciences/DAMASKER"
+ url = "https://github.com/PacificBiosciences/DAMASKER"
+
+ version('2017-02-11',
+ git='https://github.com/PacificBiosciences/DAMASKER.git',
+ commit='144244b77d52cb785cb1b3b8ae3ab6f3f0c63264')
+
+ depends_on('gmake', type='build')
+
+ def edit(self, spec, prefix):
+ mkdirp(prefix.bin)
+ makefile = FileFilter('Makefile')
+ makefile.filter('DEST_DIR\s*=\s*~/bin', 'DEST_DIR = ' + prefix.bin)
+ gmf = FileFilter('GNUmakefile')
+ gmf.filter('rsync\s*-av\s*\$\{ALL\}\s*\$\{PREFIX\}/bin',
+ 'cp ${ALL} ' + prefix.bin)
diff --git a/var/spack/repos/builtin/packages/pacbio-dazz-db/package.py b/var/spack/repos/builtin/packages/pacbio-dazz-db/package.py
new file mode 100644
index 0000000000..595ab4cd15
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pacbio-dazz-db/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 PacbioDazzDb(MakefilePackage):
+ """The Dazzler Database Library. This version is a special fork
+ required for some pacbio utilities."""
+
+ homepage = "https://github.com/PacificBiosciences/DAZZ_DB"
+ url = "https://github.com/PacificBiosciences/DAZZ_DB"
+
+ version('2017-04-10',
+ git='https://github.com/PacificBiosciences/DAZZ_DB.git',
+ commit='f29d27d51f460563481cd227d17f4bdc5e288365')
+
+ depends_on('gmake', type='build')
+
+ def edit(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.lib)
+ mkdirp(prefix.include)
+ makefile = FileFilter('Makefile')
+ makefile.filter('DEST_DIR\s*=\s*~/bin', 'DEST_DIR = ' + prefix.bin)
+ gmf = FileFilter('GNUmakefile')
+ gmf.filter('rsync\s*-av\s*\$\{ALL\}\s*\$\{PREFIX\}/bin',
+ 'cp ${ALL} ' + prefix.bin)
+ gmf.filter('rsync\s*-av\s*libdazzdb.*\s*\$\{PREFIX\}/lib',
+ 'cp libdazzdb.* ' + prefix.lib)
+ gmf.filter(('rsync\s*-av\s*\$\(wildcard\s*\$\{THISDIR\}/\*.h'
+ '\)\s*\$\{PREFIX\}/include'),
+ 'cp *.h ' + prefix.include)
diff --git a/var/spack/repos/builtin/packages/pacbio-dextractor/package.py b/var/spack/repos/builtin/packages/pacbio-dextractor/package.py
new file mode 100644
index 0000000000..75bc553733
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pacbio-dextractor/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 PacbioDextractor(MakefilePackage):
+ """The Dextractor and Compression Command Library. This is a special
+ fork required by some pacbio utilities."""
+
+ homepage = "https://github.com/PacificBiosciences/DEXTRACTOR"
+ url = "https://github.com/PacificBiosciences/DEXTRACTOR"
+
+ version('2016-08-09',
+ git='https://github.com/PacificBiosciences/DEXTRACTOR.git',
+ commit='89726800346d0bed15d98dcc577f4c7733aab4b1')
+
+ depends_on('hdf5')
+ depends_on('gmake', type='build')
+
+ def edit(self, spec, prefix):
+ mkdirp(prefix.bin)
+ makefile = FileFilter('Makefile')
+ makefile.filter('PATH_HDF5\s*=\s*/sw/apps/hdf5/current',
+ 'PATH_HDF5 = ' + spec['hdf5'].prefix)
+ makefile.filter('PATH_HDF5\*s=\s*/usr/local/hdf5', '')
+ makefile.filter('DEST_DIR\s*=\s*~/bin', 'DEST_DIR = ' + prefix.bin)
+ gmf = FileFilter('GNUmakefile')
+ gmf.filter('rsync\s*-av\s*\$\{ALL\}\s*\$\{PREFIX\}/bin',
+ 'cp ${ALL} ' + prefix.bin)
diff --git a/var/spack/repos/builtin/packages/pagit/package.py b/var/spack/repos/builtin/packages/pagit/package.py
new file mode 100644
index 0000000000..7c40da934b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pagit/package.py
@@ -0,0 +1,68 @@
+##############################################################################
+# 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/spack/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 Pagit(Package):
+ """PAGIT addresses the need for software to generate high quality draft
+ genomes."""
+
+ homepage = "http://www.sanger.ac.uk/science/tools/pagit"
+ url = "ftp://ftp.sanger.ac.uk/pub/resources/software/pagit/PAGIT.V1.01.64bit.tgz"
+
+ version('1.01', '2c4e8512c8c02073146b50b328962e9d')
+
+ depends_on('java', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+
+ def url_for_version(self, version):
+ url = 'ftp://ftp.sanger.ac.uk/pub/resources/software/pagit/PAGIT.V{0}.64bit.tgz'
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ with working_dir('PAGIT'):
+ install_tree('ABACAS', prefix.ABACAS)
+ install_tree('bin', prefix.bin)
+ install_tree('ICORN', prefix.ICORN)
+ install_tree('IMAGE', prefix.IMAGE)
+ install_tree('lib', prefix.lib)
+ install_tree('RATT', prefix.RATT)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('PAGIT_HOME', self.prefix)
+ run_env.set('PILEUP_HOME', join_path(self.prefix.bin, 'pileup_v0.5'))
+ run_env.set('ICORN_HOME', self.prefix.icorn)
+ run_env.set('SNPOMATIC_HOME', self.prefix.bin)
+ run_env.set('RATT_HOME', self.prefix.RATT)
+ run_env.set('RATT_CONFIG', join_path(self.prefix.RATT, 'RATT_config'))
+ run_env.prepend_path('PATH', join_path(self.prefix.bin, 'pileup_v0.5',
+ 'ssaha2'))
+ run_env.prepend_path('PATH', join_path(self.prefix.bin,
+ 'pileup_v0.5'))
+ run_env.prepend_path('PATH', self.prefix.IMAGE)
+ run_env.prepend_path('PATH', self.prefix.ABACAS)
+ run_env.prepend_path('PATH', self.prefix.ICORN)
+ run_env.prepend_path('PATH', self.prefix.RATT)
+ run_env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pagmo/package.py b/var/spack/repos/builtin/packages/pagmo/package.py
new file mode 100644
index 0000000000..0d30d847f0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pagmo/package.py
@@ -0,0 +1,118 @@
+##############################################################################
+# 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/spack/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 Pagmo(CMakePackage):
+ """Parallel Global Multiobjective Optimizer (and its Python alter ego
+ PyGMO) is a C++ / Python platform to perform parallel computations of
+ optimisation tasks (global and local) via the asynchronous generalized
+ island model."""
+
+ # Multiple homepages:
+ # C++ interface: https://esa.github.io/pagmo/
+ # Python interface: https://esa.github.io/pygmo/
+
+ homepage = "https://esa.github.io/pagmo/"
+ url = "https://github.com/esa/pagmo/archive/1.1.7.tar.gz"
+
+ version('1.1.7', '57ee65a5871ae36ab97087af5199cb89')
+
+ variant('examples', default=False, description='Build examples')
+ variant('cxx', default=True, description='Build the C++ interface')
+ variant('python', default=True, description='Build Python bindings')
+ variant('gsl', default=True, description='Enable support for GSL minimisers')
+ variant('gtop', default=False, description='Build GTOP database problems')
+ variant('ipopt', default=False, description='Enable support for IPOPT minimiser')
+ variant('mpi', default=True, description='Enable support for MPI')
+ variant('nlopt', default=False, description='Enable support for NLopt minimisers')
+ variant('snopt', default=False, description='Enable support for SNOPT minimiser')
+ variant('worhp', default=False, description='Enable support for WORHP minimiser')
+ variant('headers', default=True, description='Installs the header files')
+ variant('blas', default=True, description='Enable support for BLAS')
+ variant('scipy', default=True, description='Enable support for scipy')
+ variant('networkx', default=False, description='Enable support for networkx')
+ variant('vpython', default=False, description='Enable support for vpython')
+ variant('pykep', default=False, description='Enable support for pykep')
+
+ extends('python', when='+python')
+
+ # Concretization in Spack is currently broken
+ # depends_on('boost+system+serialization+thread')
+ # depends_on('boost+python', when='+python')
+ # depends_on('boost+date_time', when='+gtop')
+
+ # Workaround for now
+ depends_on('boost+system+serialization+thread', when='~python~gtop')
+ depends_on('boost+system+serialization+thread+python', when='+python~gtop')
+ depends_on('boost+system+serialization+thread+date_time', when='~python+gtop')
+ depends_on('boost+system+serialization+thread+python+date_time', when='+python+gtop')
+
+ depends_on('gsl@1.15:', when='+gsl')
+ depends_on('ipopt', when='+ipopt')
+ depends_on('mpi@1.2:', when='+mpi')
+ depends_on('blas', when='+blas')
+ depends_on('py-scipy', type=('build', 'run'), when='+scipy')
+ depends_on('py-networkx', type=('build', 'run'), when='+networkx')
+
+ # TODO: Add packages for missing dependencies
+ # depends_on('nlopt+cxx', when='+nlopt')
+ # depends_on('snopt', when='+snopt')
+ # depends_on('py-vpython', type=('build', 'run'), when='+vpython')
+ # depends_on('py-pykep@1.15:', type=('build', 'run'), when='+gtop')
+ # depends_on('py-pykep@1.15:', type=('build', 'run'), when='+pykep')
+
+ depends_on('cmake@2.8:', type='build')
+
+ def variant_to_bool(self, variant):
+ return 'ON' if variant in self.spec else 'OFF'
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DBUILD_EXAMPLES={0}'.format(self.variant_to_bool('+examples')),
+ '-DBUILD_MAIN={0}'.format(self.variant_to_bool('+cxx')),
+ '-DBUILD_PYGMO={0}'.format(self.variant_to_bool('+python')),
+ '-DENABLE_GSL={0}'.format(self.variant_to_bool('+gsl')),
+ '-DENABLE_GTOP_DATABASE={0}'.format(self.variant_to_bool('+gtop')),
+ '-DENABLE_IPOPT={0}'.format(self.variant_to_bool('+ipopt')),
+ '-DENABLE_MPI={0}'.format(self.variant_to_bool('+mpi')),
+ '-DENABLE_NLOPT={0}'.format(self.variant_to_bool('+nlopt')),
+ '-DENABLE_SNOPT={0}'.format(self.variant_to_bool('+snopt')),
+ '-DENABLE_WORHP={0}'.format(self.variant_to_bool('+worhp')),
+ '-DINSTALL_HEADERS={0}'.format(self.variant_to_bool('+headers')),
+ '-DENABLE_TESTS={0}'.format('ON' if self.run_tests else 'OFF'),
+ ]
+
+ if '+python' in spec:
+ args.extend([
+ # By default picks up the system python not the Spack build
+ '-DPYTHON_EXECUTABLE={0}'.format(spec['python'].command.path),
+ # By default installs to the python prefix not the pagmo prefix
+ '-DPYTHON_MODULES_DIR={0}'.format(site_packages_dir),
+ ])
+
+ return args
diff --git a/var/spack/repos/builtin/packages/paml/package.py b/var/spack/repos/builtin/packages/paml/package.py
new file mode 100644
index 0000000000..81d9e7c25b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/paml/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Paml(MakefilePackage):
+ """PAML is a package of programs for phylogenetic analyses of DNA or
+ protein sewuences using maximum likelihood."""
+
+ homepage = "http://abacus.gene.ucl.ac.uk/software/paml.html"
+ url = "http://abacus.gene.ucl.ac.uk/software/paml4.9e.tgz"
+
+ version('4.9e', 'ac5a062bfea1f4eaac79008434030acf')
+
+ build_directory = 'src'
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir(self.build_directory):
+ install('baseml', prefix.bin)
+ install('basemlg', prefix.bin)
+ install('chi2', prefix.bin)
+ install('codeml', prefix.bin)
+ install('evolver', prefix.bin)
+ install('infinitesites', prefix.bin)
+ install('mcmctree', prefix.bin)
+ install('pamp', prefix.bin)
+ install('yn00', prefix.bin)
+ install_tree('dat', prefix.dat)
+ install_tree('Technical', prefix.Technical)
diff --git a/var/spack/repos/builtin/packages/panda/package.py b/var/spack/repos/builtin/packages/panda/package.py
index e30c2c869d..30323fa65a 100644
--- a/var/spack/repos/builtin/packages/panda/package.py
+++ b/var/spack/repos/builtin/packages/panda/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,20 +26,14 @@
from spack import *
-class Panda(Package):
+class Panda(CMakePackage):
"""PANDA: Parallel AdjaceNcy Decomposition Algorithm"""
homepage = "http://comopt.ifi.uni-heidelberg.de/software/PANDA/index.html"
- url = "http://comopt.ifi.uni-heidelberg.de/software/PANDA/downloads/current_panda.tar"
+ url = "http://comopt.ifi.uni-heidelberg.de/software/PANDA/downloads/panda-2016-03-07.tar"
- version('current', 'b06dc312ee56e13eefea9c915b70fcef')
+ version('2016-03-07', 'b06dc312ee56e13eefea9c915b70fcef')
# Note: Panda can also be built without MPI support
- depends_on("cmake", type="build")
- depends_on("mpi")
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake("..", *std_cmake_args)
- make()
- make("install")
+ depends_on('cmake@2.6.4:', type='build')
+ depends_on('mpi')
diff --git a/var/spack/repos/builtin/packages/pango/package.py b/var/spack/repos/builtin/packages/pango/package.py
index c45054be58..26ba05df6a 100644
--- a/var/spack/repos/builtin/packages/pango/package.py
+++ b/var/spack/repos/builtin/packages/pango/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Pango(Package):
+class Pango(AutotoolsPackage):
"""Pango is a library for laying out and rendering of text, with
an emphasis on internationalization. It can be used anywhere
that text layout is needed, though most of the work on Pango so
@@ -33,7 +33,7 @@ class Pango(Package):
homepage = "http://www.pango.org"
url = "http://ftp.gnome.org/pub/GNOME/sources/pango/1.40/pango-1.40.3.tar.xz"
list_url = "http://ftp.gnome.org/pub/gnome/sources/pango/"
- list_depth = 2
+ list_depth = 1
version('1.40.3', 'abba8b5ce728520c3a0f1535eab19eac3c14aeef7faa5aded90017ceac2711d3')
version('1.40.1', 'e27af54172c72b3ac6be53c9a4c67053e16c905e02addcf3a603ceb2005c1a40')
@@ -46,9 +46,23 @@ class Pango(Package):
depends_on("cairo")
depends_on("cairo~X", when='~X')
depends_on("cairo+X", when='+X')
+ depends_on("libxft", when='+X')
depends_on("glib")
+ depends_on('gobject-introspection')
+
+ def configure_args(self):
+ args = []
+ if self.spec.satisfies('+X'):
+ args.append('--with-xft')
+ else:
+ args.append('--without-xft')
+ return args
def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
make("install", parallel=False)
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
+ run_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/papi/package.py b/var/spack/repos/builtin/packages/papi/package.py
index 90a7490e75..4809295bb6 100644
--- a/var/spack/repos/builtin/packages/papi/package.py
+++ b/var/spack/repos/builtin/packages/papi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -41,6 +41,7 @@ class Papi(Package):
homepage = "http://icl.cs.utk.edu/papi/index.html"
url = "http://icl.cs.utk.edu/projects/papi/downloads/papi-5.4.1.tar.gz"
+ version('5.5.1', '86a8a6f3d0f34cd83251da3514aae15d')
version('5.5.0', '5e1244a04ca031d4cc29b46ce3dd05b5')
version('5.4.3', '3211b5a5bb389fe692370f5cf4cc2412')
version('5.4.1', '9134a99219c79767a11463a76b0b01a2')
diff --git a/var/spack/repos/builtin/packages/paradiseo/package.py b/var/spack/repos/builtin/packages/paradiseo/package.py
index c91b01c964..036d7cdb4f 100644
--- a/var/spack/repos/builtin/packages/paradiseo/package.py
+++ b/var/spack/repos/builtin/packages/paradiseo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Paradiseo(Package):
+class Paradiseo(CMakePackage):
"""A C++ white-box object-oriented framework dedicated to the reusable
design of metaheuristics."""
homepage = "http://paradiseo.gforge.inria.fr/"
@@ -50,15 +50,12 @@ class Paradiseo(Package):
variant('edo', default=True,
description='Compile with (Experimental) EDO module')
- # variant('tests', default=False, description='Compile with build tests')
# variant('doc', default=False, description='Compile with documentation')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
variant('openmp', default=False, description='Enable OpenMP support')
variant('gnuplot', default=False, description='Enable GnuPlot support')
# Required dependencies
- depends_on("cmake", type='build')
+ depends_on("cmake@2.8:", type='build')
# Optional dependencies
depends_on("mpi", when="+mpi")
@@ -74,32 +71,19 @@ class Paradiseo(Package):
patch('fix_tests.patch')
patch('fix_tutorials.patch')
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
+ def cmake_args(self):
+ spec = self.spec
- options.extend([
- '-DCMAKE_BUILD_TYPE:STRING=%s' % (
- 'Debug' if '+debug' in spec else 'Release'),
+ return [
'-DINSTALL_TYPE:STRING=MIN',
'-DMPI:BOOL=%s' % ('TRUE' if '+mpi' in spec else 'FALSE'),
# Note: This requires a C++11 compatible compiler
'-DSMP:BOOL=%s' % ('TRUE' if '+smp' in spec else 'FALSE'),
'-DEDO:BOOL=%s' % ('TRUE' if '+edo' in spec else 'FALSE'),
'-DENABLE_CMAKE_TESTING:BOOL=%s' % (
- 'TRUE' if '+tests' in spec else 'FALSE'),
+ 'TRUE' if self.run_tests else 'FALSE'),
'-DENABLE_OPENMP:BOOL=%s' % (
'TRUE' if '+openmp' in spec else 'FALSE'),
'-DENABLE_GNUPLOT:BOOL=%s' % (
'TRUE' if '+gnuplot' in spec else 'FALSE')
- ])
-
- with working_dir('spack-build', create=True):
- # Configure
- cmake('..', *options)
-
- # Build, test and install
- make("VERBOSE=1")
- if '+tests' in spec:
- make("test")
- make("install")
+ ]
diff --git a/var/spack/repos/builtin/packages/parallel-netcdf/package.py b/var/spack/repos/builtin/packages/parallel-netcdf/package.py
index 65512017ef..4d49ae6f8b 100644
--- a/var/spack/repos/builtin/packages/parallel-netcdf/package.py
+++ b/var/spack/repos/builtin/packages/parallel-netcdf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,13 +32,15 @@ class ParallelNetcdf(AutotoolsPackage):
homepage = "https://trac.mcs.anl.gov/projects/parallel-netcdf"
url = "http://cucis.ece.northwestern.edu/projects/PnetCDF/Release/parallel-netcdf-1.6.1.tar.gz"
+ list_url = "http://cucis.ece.northwestern.edu/projects/PnetCDF/download.html"
+ version('1.8.0', '825825481aa629eb82f21ca37afff1609b8eeb07')
version('1.7.0', '267eab7b6f9dc78c4d0e6def2def3aea4bc7c9f0')
version('1.6.1', '62a094eb952f9d1e15f07d56e535052604f1ac34')
variant('cxx', default=True, description='Build the C++ Interface')
variant('fortran', default=True, description='Build the Fortran Interface')
- variant('fpic', default=True,
+ variant('pic', default=True,
description='Produce position-independent code (for shared libs)')
depends_on('mpi')
@@ -51,11 +53,18 @@ class ParallelNetcdf(AutotoolsPackage):
spec = self.spec
args = ['--with-mpi={0}'.format(spec['mpi'].prefix)]
+ args.append('SEQ_CC={0}'.format(spack_cc))
+
+ if '+pic' in spec:
+ args.extend([
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
+ 'FFLAGS={0}'.format(self.compiler.pic_flag)
+ ])
- if '+fpic' in spec:
- args.extend(['CFLAGS=-fPIC', 'CXXFLAGS=-fPIC', 'FFLAGS=-fPIC'])
if '~cxx' in spec:
args.append('--disable-cxx')
+
if '~fortran' in spec:
args.append('--disable-fortran')
diff --git a/var/spack/repos/builtin/packages/parallel/package.py b/var/spack/repos/builtin/packages/parallel/package.py
index 81c0195651..407eb4af09 100644
--- a/var/spack/repos/builtin/packages/parallel/package.py
+++ b/var/spack/repos/builtin/packages/parallel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,36 @@
from spack import *
-class Parallel(Package):
+class Parallel(AutotoolsPackage):
"""GNU parallel is a shell tool for executing jobs in parallel using
one or more computers. A job can be a single command or a small
script that has to be run for each of the lines in the input.
"""
homepage = "http://www.gnu.org/software/parallel/"
- url = "http://ftp.gnu.org/gnu/parallel/parallel-20160422.tar.bz2"
+ url = "http://ftp.gnu.org/gnu/parallel/parallel-20170122.tar.bz2"
+ version('20170322', '4fe1b8d2e3974d26c77f0b514988214d')
+ version('20170122', 'c9f0ec01463dc75dbbf292fd8be5f1eb')
version('20160422', '24621f684130472694333709bd4454cb')
version('20160322', '4e81e0d36902ab4c4e969ee6f35e6e57')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
+ def check(self):
+ # The Makefile has a 'test' target, but it does not work
+ make('check')
- make()
- make("install")
+ depends_on('perl', type=('build', 'run'))
+
+ @run_before('install')
+ def filter_sbang(self):
+ """Run before install so that the standard Spack sbang install hook
+ can fix up the path to the perl binary.
+ """
+ perl = self.spec['perl'].command
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+
+ with working_dir('src'):
+ match = '^#!/usr/bin/env perl|^#!/usr/bin/perl.*'
+ substitute = "#!{perl}".format(perl=perl)
+ files = ['parallel', 'niceload', 'parcat', 'sql', ]
+ filter_file(match, substitute, *files, **kwargs)
diff --git a/var/spack/repos/builtin/packages/paraver/package.py b/var/spack/repos/builtin/packages/paraver/package.py
index 0a2ffdbb84..3a015d4b63 100644
--- a/var/spack/repos/builtin/packages/paraver/package.py
+++ b/var/spack/repos/builtin/packages/paraver/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,12 +31,13 @@ class Paraver(Package):
based on traces that can be used to analyse any information that
is expressed on its input trace format. Traces for parallel MPI,
OpenMP and other programs can be genereated with Extrae."""
- homepage = "http://www.bsc.es/computer-sciences/performance-tools/paraver"
- url = "http://www.bsc.es/ssl/apps/performanceTools/files/paraver-sources-4.6.2.tar.gz"
+ homepage = "https://tools.bsc.es/paraver"
+ url = "https://ftp.tools.bsc.es/paraver/wxparaver-4.6.3-src.tar.bz2"
# NOTE: Paraver provides only latest version for download.
# Don't keep/add older versions.
- version('4.6.2', 'c54e124382b597574628b00e31649803')
+ version('4.6.3', '7940a2651f56712c4e8a21138b4bf16c')
+ version('4.6.2', '3f5b3e207d98b2c44101f1ff5685aa55')
depends_on("boost")
# depends_on("extrae")
diff --git a/var/spack/repos/builtin/packages/paraview/gcc-compiler-pv501.patch b/var/spack/repos/builtin/packages/paraview/gcc-compiler-pv501.patch
new file mode 100644
index 0000000000..bb3be1832f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/paraview/gcc-compiler-pv501.patch
@@ -0,0 +1,22 @@
+--- ParaView-5.0.1.orig/VTK/CMake/vtkCompilerExtras.cmake 2016-03-28 17:07:10.000000000 +0200
++++ ParaView-5.0.1/VTK/CMake/vtkCompilerExtras.cmake 2016-12-13 17:21:25.382720945 +0100
+@@ -32,7 +32,7 @@
+ OUTPUT_VARIABLE _gcc_version_info
+ ERROR_VARIABLE _gcc_version_info)
+
+- string (REGEX MATCH "[345]\\.[0-9]\\.[0-9]*"
++ string (REGEX MATCH "[3-9]\\.[0-9]\\.[0-9]*"
+ _gcc_version "${_gcc_version_info}")
+ if(NOT _gcc_version)
+ string (REGEX REPLACE ".*\\(GCC\\).*([34]\\.[0-9]).*" "\\1.0"
+--- ParaView-5.0.1.orig/VTK/CMake/GenerateExportHeader.cmake 2016-03-28 17:07:10.000000000 +0200
++++ ParaView-5.0.1/VTK/CMake/GenerateExportHeader.cmake 2016-12-13 17:21:25.382720945 +0100
+@@ -166,7 +166,7 @@
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ARGS --version
+ OUTPUT_VARIABLE _gcc_version_info
+ ERROR_VARIABLE _gcc_version_info)
+- string(REGEX MATCH "[345]\\.[0-9]\\.[0-9]*"
++ string(REGEX MATCH "[3-9]\\.[0-9]\\.[0-9]*"
+ _gcc_version "${_gcc_version_info}")
+ # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
+ # patch level, handle this here:
diff --git a/var/spack/repos/builtin/packages/paraview/package.py b/var/spack/repos/builtin/packages/paraview/package.py
index 252f58247f..8bf43b6132 100644
--- a/var/spack/repos/builtin/packages/paraview/package.py
+++ b/var/spack/repos/builtin/packages/paraview/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,34 +23,43 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import os
-class Paraview(Package):
- homepage = 'http://www.paraview.org'
- url = 'http://www.paraview.org/files/v5.0/ParaView-v'
- _url_str = 'http://www.paraview.org/files/v%s/ParaView-v%s-source.tar.gz'
+class Paraview(CMakePackage):
+ """ParaView is an open-source, multi-platform data analysis and
+ visualization application."""
+ homepage = 'http://www.paraview.org'
+ url = "http://www.paraview.org/files/v5.3/ParaView-v5.3.0.tar.gz"
+ _urlfmt = 'http://www.paraview.org/files/v{0}/ParaView-v{1}{2}.tar.gz'
+
+ version('5.4.1', '4030c70477ec5a85aa72d6fc86a30753')
+ version('5.4.0', 'b92847605bac9036414b644f33cb7163')
+ version('5.3.0', '68fbbbe733aa607ec13d1db1ab5eba71')
+ version('5.2.0', '4570d1a2a183026adb65b73c7125b8b0')
+ version('5.1.2', '44fb32fc8988fcdfbc216c9e40c3e925')
+ version('5.0.1', 'fdf206113369746e2276b95b257d2c9b')
version('4.4.0', 'fa1569857dd680ebb4d7ff89c2227378')
- version('5.0.0', '4598f0b421460c8bbc635c9a1c3bdbee')
+ variant('plugins', default=True,
+ description='Install include files for plugins support')
variant('python', default=False, description='Enable Python support')
-
- variant('tcl', default=False, description='Enable TCL support')
-
variant('mpi', default=True, description='Enable MPI support')
-
variant('osmesa', default=False, description='Enable OSMesa support')
- variant('qt', default=False, description='Enable Qt support')
- variant('opengl2', default=False, description='Enable OpenGL2 backend')
+ variant('qt', default=False, description='Enable Qt (gui) support')
+ variant('opengl2', default=True, description='Enable OpenGL2 backend')
- depends_on('python@2:2.7', when='+python')
+ depends_on('python@2:2.8', when='+python')
depends_on('py-numpy', when='+python', type='run')
depends_on('py-matplotlib', when='+python', type='run')
- depends_on('tcl', when='+tcl')
depends_on('mpi', when='+mpi')
- depends_on('qt@:4', when='+qt')
+ depends_on('qt', when='@5.3.0:+qt')
+ depends_on('qt@:4', when='@:5.2.0+qt')
+
+ depends_on('mesa+swrender', when='+osmesa')
+ conflicts('+qt', when='+osmesa')
- depends_on('cmake', type='build')
depends_on('bzip2')
depends_on('freetype')
# depends_on('hdf5+mpi', when='+mpi')
@@ -64,62 +73,97 @@ class Paraview(Package):
# depends_on('protobuf') # version mismatches?
# depends_on('sqlite') # external version not supported
depends_on('zlib')
+ depends_on('cmake@3.3:', type='build')
+
+ patch('stl-reader-pv440.patch', when='@4.4.0')
+
+ # Broken gcc-detection - improved in 5.1.0, redundant later
+ patch('gcc-compiler-pv501.patch', when='@:5.0.1')
+
+ # Broken installation (ui_pqExportStateWizard.h) - fixed in 5.2.0
+ patch('ui_pqExportStateWizard.patch', when='@:5.1.2')
def url_for_version(self, version):
"""Handle ParaView version-based custom URLs."""
- return self._url_str % (version.up_to(2), version)
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- def feature_to_bool(feature, on='ON', off='OFF'):
- if feature in spec:
- return on
- return off
-
- def nfeature_to_bool(feature):
- return feature_to_bool(feature, on='OFF', off='ON')
-
- feature_args = std_cmake_args[:]
- feature_args.append(
- '-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % feature_to_bool('+qt'))
- feature_args.append('-DPARAVIEW_ENABLE_PYTHON:BOOL=%s' %
- feature_to_bool('+python'))
- if '+python' in spec:
- feature_args.append(
- '-DPYTHON_EXECUTABLE:FILEPATH=%s/bin/python'
- % spec['python'].prefix)
- feature_args.append('-DPARAVIEW_USE_MPI:BOOL=%s' %
- feature_to_bool('+mpi'))
- if '+mpi' in spec:
- feature_args.append(
- '-DMPIEXEC:FILEPATH=%s/bin/mpiexec' % spec['mpi'].prefix)
- feature_args.append(
- '-DVTK_ENABLE_TCL_WRAPPING:BOOL=%s' % feature_to_bool('+tcl'))
- feature_args.append('-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' %
- feature_to_bool('+osmesa'))
- feature_args.append('-DVTK_USE_X:BOOL=%s' %
- nfeature_to_bool('+osmesa'))
- feature_args.append(
- '-DVTK_RENDERING_BACKEND:STRING=%s' %
- feature_to_bool('+opengl2', 'OpenGL2', 'OpenGL'))
-
- feature_args.extend(std_cmake_args)
-
- if 'darwin' in self.spec.architecture:
- feature_args.append('-DVTK_USE_X:BOOL=OFF')
- feature_args.append(
- '-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON')
-
- cmake('..',
- '-DCMAKE_INSTALL_PREFIX:PATH=%s' % prefix,
- '-DBUILD_TESTING:BOOL=OFF',
- '-DVTK_USE_SYSTEM_FREETYPE:BOOL=ON',
- '-DVTK_USE_SYSTEM_HDF5:BOOL=OFF',
- '-DVTK_USE_SYSTEM_JPEG:BOOL=ON',
- '-DVTK_USE_SYSTEM_LIBXML2:BOOL=ON',
- '-DVTK_USE_SYSTEM_NETCDF:BOOL=OFF',
- '-DVTK_USE_SYSTEM_TIFF:BOOL=ON',
- '-DVTK_USE_SYSTEM_ZLIB:BOOL=ON',
- *feature_args)
- make()
- make('install')
+ if version < Version('5.1.0'):
+ return self._urlfmt.format(version.up_to(2), version, '-source')
+ else:
+ return self._urlfmt.format(version.up_to(2), version, '')
+
+ def setup_environment(self, spack_env, run_env):
+ if os.path.isdir(self.prefix.lib64):
+ lib_dir = self.prefix.lib64
+ else:
+ lib_dir = self.prefix.lib
+ paraview_version = 'paraview-%s' % self.spec.version.up_to(2)
+ run_env.prepend_path('LIBRARY_PATH', join_path(lib_dir,
+ paraview_version))
+ run_env.prepend_path('LD_LIBRARY_PATH', join_path(lib_dir,
+ paraview_version))
+
+ def cmake_args(self):
+ """Populate cmake arguments for ParaView."""
+ spec = self.spec
+
+ def variant_bool(feature, on='ON', off='OFF'):
+ """Ternary for spec variant to ON/OFF string"""
+ if feature in spec:
+ return on
+ return off
+
+ def nvariant_bool(feature):
+ """Negated ternary for spec variant to OFF/ON string"""
+ return variant_bool(feature, on='OFF', off='ON')
+
+ rendering = variant_bool('+opengl2', 'OpenGL2', 'OpenGL')
+ includes = variant_bool('+plugins')
+
+ cmake_args = [
+ '-DPARAVIEW_BUILD_QT_GUI:BOOL=%s' % variant_bool('+qt'),
+ '-DVTK_OPENGL_HAS_OSMESA:BOOL=%s' % variant_bool('+osmesa'),
+ '-DVTK_USE_X:BOOL=%s' % nvariant_bool('+osmesa'),
+ '-DVTK_RENDERING_BACKEND:STRING=%s' % rendering,
+ '-DPARAVIEW_INSTALL_DEVELOPMENT_FILES:BOOL=%s' % includes,
+ '-DBUILD_TESTING:BOOL=OFF',
+ '-DVTK_USE_SYSTEM_FREETYPE:BOOL=ON',
+ '-DVTK_USE_SYSTEM_HDF5:BOOL=OFF',
+ '-DVTK_USE_SYSTEM_JPEG:BOOL=ON',
+ '-DVTK_USE_SYSTEM_LIBXML2:BOOL=ON',
+ '-DVTK_USE_SYSTEM_NETCDF:BOOL=OFF',
+ '-DVTK_USE_SYSTEM_TIFF:BOOL=ON',
+ '-DVTK_USE_SYSTEM_ZLIB:BOOL=ON',
+ ]
+
+ # The assumed qt version changed to QT5 (as of paraview 5.2.1),
+ # so explicitly specify which QT major version is actually being used
+ if '+qt' in spec:
+ cmake_args.extend([
+ '-DPARAVIEW_QT_VERSION=%s' % spec['qt'].version[0],
+ ])
+
+ if '+python' in spec:
+ cmake_args.extend([
+ '-DPARAVIEW_ENABLE_PYTHON:BOOL=ON',
+ '-DPYTHON_EXECUTABLE:FILEPATH=%s' % spec['python'].command.path
+ ])
+
+ if '+mpi' in spec:
+ cmake_args.extend([
+ '-DPARAVIEW_USE_MPI:BOOL=ON',
+ '-DMPIEXEC:FILEPATH=%s/bin/mpiexec' % spec['mpi'].prefix
+ ])
+
+ if 'darwin' in spec.architecture:
+ cmake_args.extend([
+ '-DVTK_USE_X:BOOL=OFF',
+ '-DPARAVIEW_DO_UNIX_STYLE_INSTALLS:BOOL=ON',
+ ])
+
+ # Hide git from Paraview so it will not use `git describe`
+ # to find its own version number
+ if spec.satisfies('@5.4.0:5.4.1'):
+ cmake_args.extend([
+ '-DGIT_EXECUTABLE=FALSE'
+ ])
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/paraview/stl-reader-pv440.patch b/var/spack/repos/builtin/packages/paraview/stl-reader-pv440.patch
new file mode 100644
index 0000000000..06907fd895
--- /dev/null
+++ b/var/spack/repos/builtin/packages/paraview/stl-reader-pv440.patch
@@ -0,0 +1,11 @@
+--- ParaView-4.4.0.orig/VTK/IO/Geometry/vtkSTLReader.cxx 2015-09-11 19:59:24.000000000 +0200
++++ ParaView-4.4.0/VTK/IO/Geometry/vtkSTLReader.cxx 2016-06-19 12:59:50.769770143 +0200
+@@ -448,7 +448,7 @@
+ done = done || (fscanf(fp,"%s", line)==EOF);
+ }
+ }
+- if (!done)
++ else if (!done)
+ {
+ done = (fgets(line, 255, fp) == 0);
+ lineCount++;
diff --git a/var/spack/repos/builtin/packages/paraview/ui_pqExportStateWizard.patch b/var/spack/repos/builtin/packages/paraview/ui_pqExportStateWizard.patch
new file mode 100644
index 0000000000..2983af56ef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/paraview/ui_pqExportStateWizard.patch
@@ -0,0 +1,11 @@
+--- ParaView-5.0.1.orig/Qt/Components/CMakeLists.txt 2016-03-28 17:07:03.000000000 +0200
++++ ParaView-5.0.1/Qt/Components/CMakeLists.txt 2016-12-13 17:38:42.713553032 +0100
+@@ -656,7 +656,7 @@
+ #the pqSGExportStateWizard has subclasses that directly access
+ #the UI file, and currently we don't have a clean way to break this hard
+ #dependency, so for no we install this ui file.
+-if(PARAVIEW_INSTALL_DEVELOPMENT_FILES)
++if(PARAVIEW_INSTALL_DEVELOPMENT_FILES AND PARAVIEW_ENABLE_PYTHON)
+ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/ui_pqExportStateWizard.h"
+ DESTINATION "${VTK_INSTALL_INCLUDE_DIR}")
+ endif()
diff --git a/var/spack/repos/builtin/packages/parmetis/package.py b/var/spack/repos/builtin/packages/parmetis/package.py
index 74e00cc9e0..927a7715e6 100644
--- a/var/spack/repos/builtin/packages/parmetis/package.py
+++ b/var/spack/repos/builtin/packages/parmetis/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,8 @@ class Parmetis(Package):
computing fill-reducing orderings of sparse matrices."""
homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/parmetis/overview'
- base_url = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis'
+ url = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/parmetis-4.0.3.tar.gz'
+ list_url = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis/OLD'
version('4.0.3', 'f69c479586bf6bb7aff6a9bc0c739628')
version('4.0.2', '0912a953da5bb9b5e5e10542298ffdce')
@@ -54,8 +55,11 @@ class Parmetis(Package):
patch('pkg-parmetis-82409d68aa1d6cbc70740d0f35024aae17f7d5cb.patch')
def url_for_version(self, version):
- verdir = 'OLD/' if version < Version('3.2.0') else ''
- return '%s/%sparmetis-%s.tar.gz' % (Parmetis.base_url, verdir, version)
+ url = 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/parmetis'
+ if version < Version('3.2.0'):
+ url += '/OLD'
+ url += '/parmetis-{0}.tar.gz'.format(version)
+ return url
def install(self, spec, prefix):
source_directory = self.stage.source_path
@@ -66,11 +70,23 @@ class Parmetis(Package):
'-DGKLIB_PATH:PATH=%s/GKlib' % spec['metis'].prefix.include,
'-DMETIS_PATH:PATH=%s' % spec['metis'].prefix,
'-DCMAKE_C_COMPILER:STRING=%s' % spec['mpi'].mpicc,
- '-DCMAKE_CXX_COMPILER:STRING=%s' % spec['mpi'].mpicxx
+ '-DCMAKE_CXX_COMPILER:STRING=%s' % spec['mpi'].mpicxx,
+ '-DCMAKE_C_FLAGS:STRING=%s' % (
+ '-c11' if '%pgi' in spec else ''),
])
if '+shared' in spec:
options.append('-DSHARED:BOOL=ON')
+ else:
+ # Remove all RPATH options
+ # (RPATHxxx options somehow trigger cmake to link dynamically)
+ rpath_options = []
+ for o in options:
+ if o.find('RPATH') >= 0:
+ rpath_options.append(o)
+ for o in rpath_options:
+ options.remove(o)
+
if '+debug' in spec:
options.extend(['-DDEBUG:BOOL=ON',
'-DCMAKE_BUILD_TYPE:STRING=Debug'])
diff --git a/var/spack/repos/builtin/packages/parmgridgen/package.py b/var/spack/repos/builtin/packages/parmgridgen/package.py
index 02be777c36..bbacf519fa 100644
--- a/var/spack/repos/builtin/packages/parmgridgen/package.py
+++ b/var/spack/repos/builtin/packages/parmgridgen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,11 +26,12 @@
from spack import *
+# Note: should probably be named 'mgridgen+mpi' (as per scotch, metis etc)
class Parmgridgen(Package):
"""MGRIDGEN is a serial library written entirely in ANSI C that implements
(serial) algorithms for obtaining a sequence of successive coarse grids
that are well-suited for geometric multigrid methods.
- ParMGridGen is the parallel version of MGridGen
+ ParMGridGen is the parallel version of MGridGen.
"""
homepage = "http://www-users.cs.umn.edu/~moulitsa/software.html"
@@ -38,34 +39,41 @@ class Parmgridgen(Package):
version('1.0', '2872fa95b7fb91d6bd525490eed62038')
- depends_on('mpi')
+ variant('mpi', default=True,
+ description='Activate the compilation of parallel libraries')
+
+ depends_on('mpi', when='+mpi')
def install(self, spec, prefix):
make_opts = [
'make=make',
- 'COPTIONS=-fPIC',
- 'LDOPTIONS=-fPIC',
+ 'COPTIONS={0}'.format(self.compiler.pic_flag),
+ 'LDOPTIONS={0}'.format(self.compiler.pic_flag),
'CC={0}'.format(self.compiler.cc),
- 'PARCC={0}'.format(spec['mpi'].mpicc),
'LD={0}'.format(self.compiler.cc),
- 'PARLD={0}'.format(spec['mpi'].mpicc),
'LIBDIR=-L../..',
- 'PARLIBS=-L../../ -lparmgrid -lmgrid -lm',
- 'LIBS=-L../../ -lmgrid -lm',
- 'parallel'
+ 'LIBS=-L../.. -lmgrid -lm',
]
+ if '+mpi' in spec:
+ make_opts.extend([
+ 'PARCC={0}'.format(spec['mpi'].mpicc),
+ 'PARLD={0}'.format(spec['mpi'].mpicc),
+ 'PARLIBS=-L../.. -lparmgrid -lmgrid -lm',
+ 'parallel'
+ ])
+ else:
+ make_opts.append('serial')
+
make(*make_opts, parallel=False)
mkdirp(prefix.include, prefix.lib, prefix.bin)
install("mgridgen.h", prefix.include)
- install("parmgridgen.h", prefix.include)
-
- install("MGridGen/IMlib/libIMlib.a",
- join_path(prefix.lib, 'libIMlib.a'))
install("libmgrid.a", prefix.lib)
- install("libparmgrid.a", prefix.lib)
+ install("mgridgen", prefix.bin)
- install("mgridgen", prefix.bin)
- install("parmgridgen", prefix.bin)
+ if '+mpi' in spec:
+ install("parmgridgen.h", prefix.include)
+ install("libparmgrid.a", prefix.lib)
+ install("parmgridgen", prefix.bin)
diff --git a/var/spack/repos/builtin/packages/parpack/package.py b/var/spack/repos/builtin/packages/parpack/package.py
deleted file mode 100644
index 84bc88b3b0..0000000000
--- a/var/spack/repos/builtin/packages/parpack/package.py
+++ /dev/null
@@ -1,68 +0,0 @@
-##############################################################################
-# Copyright (c) 2013-2016, 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 *
-import os
-import shutil
-
-
-class Parpack(Package):
- """ARPACK is a collection of Fortran77 subroutines designed to solve large
- scale eigenvalue problems."""
-
- homepage = "http://www.caam.rice.edu/software/ARPACK/download.html"
- url = "http://www.caam.rice.edu/software/ARPACK/SRC/parpack96.tar.Z"
-
- version('96', 'a175f70ff71837a33ff7e4b0b6054f43')
-
- depends_on('mpi')
- depends_on('blas')
- depends_on('lapack')
-
- def patch(self):
- # Filter the CJ makefile to make a spack one.
- shutil.move('ARMAKES/ARmake.CJ', 'ARmake.inc')
- mf = FileFilter('ARmake.inc')
-
- # Be sure to use Spack F77 wrapper
- mf.filter('^FC.*', 'FC = f77')
- mf.filter('^FFLAGS.*', 'FFLAGS = -O2 -g')
-
- # Set up some variables.
- mf.filter('^PLAT.*', 'PLAT = ')
- mf.filter('^home.*', 'home = %s' % os.getcwd())
- mf.filter('^BLASdir.*', 'BLASdir = %s' % self.spec['blas'].prefix)
- mf.filter('^LAPACKdir.*', 'LAPACKdir = %s' %
- self.spec['lapack'].prefix)
- mf.filter('^MAKE.*', 'MAKE = make')
-
- # build the library in our own prefix.
- mf.filter('^ARPACKLIB.*', 'PARPACKLIB = %s/libparpack.a' % os.getcwd())
-
- def install(self, spec, prefix):
- with working_dir('PARPACK/SRC/MPI'):
- make('all')
-
- mkdirp(prefix.lib)
- install('libparpack.a', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/parsimonator/package.py b/var/spack/repos/builtin/packages/parsimonator/package.py
new file mode 100644
index 0000000000..462f81e6cf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/parsimonator/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Parsimonator(MakefilePackage):
+ """Parsimonator is a no-frills light-weight implementation for building
+ starting trees under parsimony for RAxML"""
+
+ homepage = "http://www.exelixis-lab.org/"
+ url = "https://github.com/stamatak/Parsimonator-1.0.2"
+
+ version('1.0.2', git='https://github.com/stamatak/Parsimonator-1.0.2.git', commit='78368c6ab1e9adc7e9c6ec9256dd7ff2a5bb1b0a')
+
+ variant('sse', default=True, description='Enable SSE in order to substantially speed up execution')
+ variant('avx', default=False, description='Enable AVX in order to substantially speed up execution')
+
+ conflicts('+avx', when='+sse')
+
+ @property
+ def makefile_file(self):
+ if '+sse' in self.spec:
+ return 'Makefile.SSE3.gcc'
+ elif '+avx' in self.spec:
+ return 'Makefile.AVX.gcc'
+ else:
+ return 'Makefile.gcc'
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter(self.makefile_file)
+ makefile.filter('CC = gcc', 'CC = %s' % spack_cc)
+
+ def build(self, spec, prefix):
+ make('-f', self.makefile_file)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ if '+sse' in spec:
+ install('parsimonator-SSE3', prefix.bin)
+ elif '+avx' in spec:
+ install('parsimonator-AVX', prefix.bin)
+ else:
+ install('parsimonator', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/parsplice/package.py b/var/spack/repos/builtin/packages/parsplice/package.py
new file mode 100644
index 0000000000..24b950548f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/parsplice/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Parsplice(CMakePackage):
+ """ParSplice code implements the Parallel Trajectory Splicing algorithm"""
+
+ homepage = "https://gitlab.com/exaalt/parsplice"
+ url = "https://gitlab.com/exaalt/parsplice/repository/archive.tar.gz?ref=v1.1"
+
+ version('1.1', '3a72340d49d731a076e8942f2ae2f4e9')
+ version('develop', git='https://gitlab.com/exaalt/parsplice', branch='master')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on("berkeley-db")
+ depends_on("nauty")
+ depends_on("boost")
+ depends_on("mpi")
+ depends_on("eigen@3:")
+ depends_on("lammps+lib@20170901:")
+
+ def cmake_args(self):
+ options = ['-DBUILD_SHARED_LIBS=ON']
+
+ return options
diff --git a/var/spack/repos/builtin/packages/partitionfinder/package.py b/var/spack/repos/builtin/packages/partitionfinder/package.py
new file mode 100644
index 0000000000..3089eca783
--- /dev/null
+++ b/var/spack/repos/builtin/packages/partitionfinder/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Partitionfinder(Package):
+ """PartitionFinder is free open source software to select best-fit
+ partitioning schemes and models of molecular evolution for
+ phylogenetic analyses."""
+
+ homepage = "https://github.com/brettc/partitionfinder"
+ url = "https://github.com/brettc/partitionfinder/archive/v2.1.1.tar.gz"
+
+ version('2.1.1', 'b1b6539f93146c69b967cf92459ae28a')
+
+ depends_on('python@2.7.10:2.999', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-pandas', type=('build', 'run'))
+ depends_on('py-pytables', type=('build', 'run'))
+ depends_on('py-pyparsing', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-scikit-learn', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install_tree('partfinder', prefix.partfinder)
+ install_tree('timings', prefix.timings)
+ install('PartitionFinderMorphology.py', prefix.bin)
+ install('PartitionFinderProtein.py', prefix.bin)
+ install('PartitionFinder.py', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/patch/package.py b/var/spack/repos/builtin/packages/patch/package.py
index df890c057a..6c69b7994f 100644
--- a/var/spack/repos/builtin/packages/patch/package.py
+++ b/var/spack/repos/builtin/packages/patch/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,3 +35,5 @@ class Patch(AutotoolsPackage):
url = "http://ftp.gnu.org/gnu/patch/patch-2.7.5.tar.xz"
version('2.7.5', 'e3da7940431633fb65a01b91d3b7a27a')
+
+ build_directory = 'spack-build'
diff --git a/var/spack/repos/builtin/packages/patchelf/package.py b/var/spack/repos/builtin/packages/patchelf/package.py
index c391f491eb..273d10486c 100644
--- a/var/spack/repos/builtin/packages/patchelf/package.py
+++ b/var/spack/repos/builtin/packages/patchelf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Patchelf(Package):
+class Patchelf(AutotoolsPackage):
"""PatchELF is a small utility to modify the dynamic linker and RPATH of
ELF executables."""
@@ -33,12 +33,7 @@ class Patchelf(Package):
url = "http://nixos.org/releases/patchelf/patchelf-0.8/patchelf-0.8.tar.gz"
list_url = "http://nixos.org/releases/patchelf/"
- list_depth = 2
+ list_depth = 1
version('0.9', '3c265508526760f233620f35d79c79fc')
version('0.8', '407b229e6a681ffb0e2cdd5915cb2d01')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/daal/package.py b/var/spack/repos/builtin/packages/pathfinder/package.py
index a39064df9e..79bba915d0 100644
--- a/var/spack/repos/builtin/packages/daal/package.py
+++ b/var/spack/repos/builtin/packages/pathfinder/package.py
@@ -1,12 +1,12 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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
+# For details, see https://github.com/spack/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
@@ -22,31 +22,34 @@
# 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 *
-import os
-from spack.pkg.builtin.intel import IntelInstaller
+class Pathfinder(MakefilePackage):
+ """Proxy Application. Signature search."""
+
+ homepage = "https://mantevo.org/packages/"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/PathFinder/PathFinder_1.0.0.tgz"
-class Daal(IntelInstaller):
- """Intel Data Analytics Acceleration Library.
+ tags = ['proxy-app']
- Note: You will have to add the download file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+ version('1.0.0', '374269e8d42c305eda3e392444e22dde')
- homepage = "https://software.intel.com/en-us/daal"
+ build_targets = ['--directory=PathFinder_ref', 'CC=cc']
- version('2016.2.181', 'aad2aa70e5599ebfe6f85b29d8719d46',
- url="file://%s/l_daal_2016.2.181.tgz" % os.getcwd())
- version('2016.3.210', 'ad747c0dd97dace4cad03cf2266cad28',
- url="file://%s/l_daal_2016.3.210.tgz" % os.getcwd())
+ def edit(self, spec, prefix):
+ makefile = FileFilter('PathFinder_ref/Makefile')
+ makefile.filter('-fopenmp', self.compiler.openmp_flag)
def install(self, spec, prefix):
+ # Manual installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc)
- self.intel_prefix = os.path.join(prefix, "pkg")
- IntelInstaller.install(self, spec, prefix)
+ install('PathFinder_ref/PathFinder.x', prefix.bin)
+ install('PathFinder_ref/MicroTestData.adj_list', prefix.bin)
+ install('README', prefix.doc)
- daal_dir = os.path.join(self.intel_prefix, "daal")
- for f in os.listdir(daal_dir):
- os.symlink(os.path.join(daal_dir, f), os.path.join(self.prefix, f))
+ install_tree('generatedData/', prefix.doc.generatedData)
+ install_tree('scaleData/', prefix.doc.scaleData)
diff --git a/var/spack/repos/builtin/packages/pax-utils/package.py b/var/spack/repos/builtin/packages/pax-utils/package.py
new file mode 100644
index 0000000000..0230419ac0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pax-utils/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 PaxUtils(AutotoolsPackage):
+ """ELF utils that can check files for security relevant properties"""
+
+ homepage = "https://wiki.gentoo.org/index.php?title=Project:Hardened/PaX_Utilities"
+ url = "https://dev.gentoo.org/~vapier/dist/pax-utils-1.2.2.tar.xz"
+
+ version('1.2.2', 'a580468318f0ff42edf4a8cd314cc942')
diff --git a/var/spack/repos/builtin/packages/pbmpi/package.py b/var/spack/repos/builtin/packages/pbmpi/package.py
new file mode 100644
index 0000000000..a8bbece03d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pbmpi/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Pbmpi(MakefilePackage):
+ """A Bayesian software for phylogenetic reconstruction using mixture models
+ """
+
+ homepage = "http://megasun.bch.umontreal.ca/People/lartillot/www/index.htm"
+ url = "https://github.com/bayesiancook/pbmpi"
+
+ version('partition', git='https://github.com/bayesiancook/pbmpi.git', branch='partition')
+
+ depends_on('mpi')
+ depends_on('libfabric')
+
+ build_directory = 'sources'
+
+ @run_before('build')
+ def make_data_dir(self):
+ mkdirp(self.stage.source_path, 'data')
+
+ def install(self, spec, prefix):
+ install_tree('data', prefix.bin)
+ install_tree('sources', prefix.sources)
diff --git a/var/spack/repos/builtin/packages/pcma/package.py b/var/spack/repos/builtin/packages/pcma/package.py
new file mode 100644
index 0000000000..d4f998d104
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pcma/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Pcma(MakefilePackage):
+ """PCMA is a progressive multiple sequence alignment program that combines
+ two different alignment strategies."""
+
+ homepage = "http://prodata.swmed.edu/pcma/pcma.php"
+ url = "http://prodata.swmed.edu/download/pub/PCMA/pcma.tar.gz"
+
+ version('2.0', 'e78449b2f6b0e90348a0a6747d266f9b')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('makefile')
+ makefile.filter('gcc', spack_cc)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('pcma', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/pcre/package.py b/var/spack/repos/builtin/packages/pcre/package.py
index a2236e682b..213a49f731 100644
--- a/var/spack/repos/builtin/packages/pcre/package.py
+++ b/var/spack/repos/builtin/packages/pcre/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,28 +25,35 @@
from spack import *
-class Pcre(Package):
+class Pcre(AutotoolsPackage):
"""The PCRE package contains Perl Compatible Regular Expression
- libraries. These are useful for implementing regular expression
- pattern matching using the same syntax and semantics as Perl 5."""
- homepage = "http://www.pcre.org"""
- url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.36.tar.bz2"
+ libraries. These are useful for implementing regular expression
+ pattern matching using the same syntax and semantics as Perl 5."""
+ homepage = "http://www.pcre.org"
+ url = "https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.bz2"
+
+ version('8.40', '41a842bf7dcecd6634219336e2167d1d')
version('8.39', 'e3fca7650a0556a2647821679d81f585')
version('8.38', '00aabbfe56d5a48b270f999b508c5ad2')
- patch("intel.patch", when='@8.38')
+ patch('intel.patch', when='@8.38')
+
+ variant('jit', default=False,
+ description='Enable JIT support.')
variant('utf', default=True,
description='Enable support for UTF-8/16/32, '
'incompatible with EBCDIC.')
- def install(self, spec, prefix):
- configure_args = ['--prefix=%s' % prefix]
- if '+utf' in spec:
- configure_args.append('--enable-utf')
- configure_args.append('--enable-unicode-properties')
+ def configure_args(self):
+ args = []
+
+ if '+jit' in self.spec:
+ args.append('--enable-jit')
+
+ if '+utf' in self.spec:
+ args.append('--enable-utf')
+ args.append('--enable-unicode-properties')
- configure(*configure_args)
- make()
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/pcre2/package.py b/var/spack/repos/builtin/packages/pcre2/package.py
index a2739e0584..531a175ef7 100644
--- a/var/spack/repos/builtin/packages/pcre2/package.py
+++ b/var/spack/repos/builtin/packages/pcre2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,11 @@
from spack import *
-class Pcre2(Package):
+class Pcre2(AutotoolsPackage):
"""The PCRE2 package contains Perl Compatible Regular Expression
libraries. These are useful for implementing regular expression
pattern matching using the same syntax and semantics as Perl 5."""
homepage = "http://www.pcre.org"""
- url = "ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.20.tar.bz2"
+ url = "https://ftp.pcre.org/pub/pcre/pcre2-10.20.tar.bz2"
version('10.20', 'dcd027c57ecfdc8a6c3af9d0acf5e3f7')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/pdsh/package.py b/var/spack/repos/builtin/packages/pdsh/package.py
new file mode 100644
index 0000000000..708dea108c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pdsh/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Pdsh(AutotoolsPackage):
+ """
+ PDSH: a high performance, parallel remote shell utility
+ """
+
+ homepage = "https://github.com/grondo/pdsh"
+ url = "https://github.com/grondo/pdsh/archive/pdsh-2.31.tar.gz"
+
+ version('2.31', 'cab34b0ca78f3cf596fd648b265223ed')
+
+ variant('ssh', default=True, description="Build with ssh module")
+
+ variant('static_modules', default=True, description="Build with static modules")
+
+ def configure_args(self):
+ args = []
+ if '+ssh' in self.spec:
+ args.append('--with-ssh')
+ if '+static_modules' in self.spec:
+ args.append('--enable-static-modules')
+ return args
diff --git a/var/spack/repos/builtin/packages/pdt/package.py b/var/spack/repos/builtin/packages/pdt/package.py
index bed01aeefb..ef8592e44d 100644
--- a/var/spack/repos/builtin/packages/pdt/package.py
+++ b/var/spack/repos/builtin/packages/pdt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,11 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import os
from spack import *
-class Pdt(Package):
+class Pdt(AutotoolsPackage):
"""Program Database Toolkit (PDT) is a framework for analyzing source
code written in several programming languages and for making rich
program knowledge accessible to developers of static and dynamic
@@ -44,7 +45,31 @@ class Pdt(Package):
version('3.19', '5c5e1e6607086aa13bf4b1b9befc5864')
version('3.18.1', 'e401534f5c476c3e77f05b7f73b6c4f2')
- def install(self, spec, prefix):
- configure('-prefix=%s' % prefix)
- make()
- make('install')
+ def patch(self):
+ if self.spec.satisfies('%clang'):
+ filter_file(r'PDT_GXX=g\+\+ ',
+ r'PDT_GXX=clang++ ', 'ductape/Makefile')
+
+ def configure(self, spec, prefix):
+ options = ['-prefix=%s' % prefix]
+ if self.compiler.name == 'xl':
+ options.append('-XLC')
+ elif self.compiler.name == 'intel':
+ options.append('-icpc')
+ elif self.compiler.name == 'pgi':
+ options.append('-pgCC')
+
+ configure(*options)
+
+ @run_after('install')
+ def link_arch_dirs(self):
+ # Link arch-specific directories into prefix
+ for dir in os.listdir(self.prefix):
+ path = join_path(self.prefix, dir)
+ if not os.path.isdir(path) or os.path.islink(path):
+ continue
+ for d in ('bin', 'lib'):
+ src = join_path(path, d)
+ dst = join_path(self.prefix, d)
+ if os.path.isdir(src) and not os.path.exists(dst):
+ os.symlink(join_path(dir, d), dst)
diff --git a/var/spack/repos/builtin/packages/pegtl/package.py b/var/spack/repos/builtin/packages/pegtl/package.py
new file mode 100644
index 0000000000..c297854797
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pegtl/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 *
+
+
+# package has a Makefile, but only to build examples
+class Pegtl(CMakePackage):
+ """The Parsing Expression Grammar Template Library (PEGTL) is a
+ zero-dependency C++11 header-only library for creating parsers
+ according to a Parsing Expression Grammar (PEG).
+ """
+
+ homepage = "https://github.com/taocpp/PEGTL"
+ url = "https://github.com/taocpp/PEGTL/tarball/1.3.1"
+
+ version('develop', git='https://github.com/taocpp/PEGTL', branch='master')
+ version('2.1.4', 'e5288b6968e6e910287fce93dc5557bf')
+ version('2.0.0', 'c772828e7188459338a920c21f9896db')
diff --git a/var/spack/repos/builtin/packages/pennant/package.py b/var/spack/repos/builtin/packages/pennant/package.py
new file mode 100644
index 0000000000..e318cd991d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pennant/package.py
@@ -0,0 +1,99 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Pennant(MakefilePackage):
+ """PENNANT is an unstructured mesh physics mini-app designed
+ for advanced architecture research. It contains mesh data
+ structures and a few physics algorithms adapted
+ from the LANL rad-hydro code FLAG, and gives a sample of
+ the typical memory access patterns of FLAG.
+ """
+
+ homepage = "https://github.com/lanl/PENNANT"
+ url = "https://github.com/lanl/PENNANT/archive/pennant_v0.9.tar.gz"
+ tags = ['proxy-app']
+
+ version('0.9', '4f21ba3836b2721436277308c2e33f45')
+ version('0.8', 'a1afff4914fef8140c3024a02d7c993c')
+ version('0.7', 'd642a030d5388f65f799504803794a4e')
+ version('0.6', '8ab2d4b47ec9870643bfe6f262cd47a4')
+ version('0.5', '534547878c698b9926e2886c74e10831')
+ version('0.4', '0f67d8da0a92bd42d92a4823d3e4dbe1')
+
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('openmp', default=True, description='Build with OpenMP support')
+ variant('debug', default=False, description='Enable debug')
+
+ depends_on('mpi', when='+mpi')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('Makefile')
+ debug = '-g'
+ opt = '-O3'
+
+ if self.compiler.name == 'intel':
+ opt += ' -fast -fno-alias'
+ if self.compiler.name == 'pgi':
+ opt += ' -fastsse'
+
+ makefile.filter(
+ 'CXXFLAGS_DEBUG .*',
+ 'CXXFLAGS_DEBUG := {0}'.format(debug))
+ makefile.filter(
+ 'CXXFLAGS_OPT .*',
+ 'CXXFLAGS_OPT := {0}'.format(opt))
+ makefile.filter(
+ 'CXXFLAGS_OPENMP .*',
+ 'CXXFLAGS_OPENMP := {0}'.format(self.compiler.openmp_flag))
+
+ if '+mpi' in spec:
+ makefile.filter(
+ 'CXX .*',
+ 'CXX := {0}'.format(spec['mpi'].mpicxx))
+ else:
+ makefile.filter('-DUSE_MPI', '#')
+ makefile.filter('CXX .*', 'CXX := c++')
+
+ if '+openmp' not in spec:
+ makefile.filter('.*CXXFLAGS_OPENMP.*', '#')
+
+ if '+debug' in spec:
+ makefile.filter(
+ '.*(CXXFLAGS_OPT).*',
+ 'CXXFLAGS := $(CXXFLAGS_DEBUG)')
+
+ def install(self, spec, prefix):
+
+ def install_dir(dirname):
+ install_tree(dirname, join_path(prefix, dirname))
+
+ mkdirp(prefix.bin)
+ install('build/pennant', prefix.bin)
+ install_dir('doc')
+ install_dir('test')
+ install('LICENSE', prefix)
+ install('README', prefix)
diff --git a/var/spack/repos/builtin/packages/perl-algorithm-diff/package.py b/var/spack/repos/builtin/packages/perl-algorithm-diff/package.py
new file mode 100644
index 0000000000..79f4076da5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-algorithm-diff/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/spack/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 PerlAlgorithmDiff(PerlPackage):
+ """Compute 'intelligent' differences between two files / lists"""
+
+ homepage = "http://search.cpan.org/~tyemq/Algorithm-Diff-1.1903/lib/Algorithm/Diff.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/T/TY/TYEMQ/Algorithm-Diff-1.1903.tar.gz"
+
+ version('1.1903', '0e8add21a641b8d66436df0c2024bf3b')
diff --git a/var/spack/repos/builtin/packages/perl-b-hooks-endofscope/package.py b/var/spack/repos/builtin/packages/perl-b-hooks-endofscope/package.py
new file mode 100644
index 0000000000..eecd0b69cc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-b-hooks-endofscope/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlBHooksEndofscope(PerlPackage):
+ """Execute code after a scope finished compilation."""
+
+ homepage = "http://search.cpan.org/~ether/B-Hooks-EndOfScope-0.21/lib/B/Hooks/EndOfScope.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/B-Hooks-EndOfScope-0.21.tar.gz"
+
+ version('0.21', 'df9dacbf55a01d7a444b1ebc616435ae')
+
+ depends_on('perl-sub-exporter-progressive', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-bio-perl/package.py b/var/spack/repos/builtin/packages/perl-bio-perl/package.py
new file mode 100644
index 0000000000..afbef8001c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-bio-perl/package.py
@@ -0,0 +1,71 @@
+##############################################################################
+# 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/spack/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 *
+import inspect
+
+
+class PerlBioPerl(PerlPackage):
+ """Functional access to BioPerl for people who don't know objects"""
+
+ homepage = "http://search.cpan.org/~cjfields/BioPerl-1.007002/Bio/Perl.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/C/CJ/CJFIELDS/BioPerl-1.007002.tar.gz"
+
+ version('1.007002', 'a912c92b56d009198f1786b4cf560d5c')
+
+ depends_on('perl-module-build', type='build')
+ depends_on('perl-uri-escape', type=('build', 'run'))
+ depends_on('perl-io-string', type=('build', 'run'))
+ depends_on('perl-data-stag', type=('build', 'run'))
+ depends_on('perl-test-most', type=('build', 'run'))
+
+ def configure(self, spec, prefix):
+ # Overriding default configure method in order to cater to interactive
+ # Build.pl
+ self.build_method = 'Build.PL'
+ self.build_executable = Executable(
+ join_path(self.stage.source_path, 'Build'))
+
+ # Config questions consist of:
+ # Do you want to run the Bio::DB::GFF or Bio::DB::SeqFeature::Store
+ # live database tests? y/n [n]
+ #
+ # Install [a]ll BioPerl scripts, [n]one, or choose groups
+ # [i]nteractively? [a]
+ #
+ # Do you want to run tests that require connection to servers across
+ # the internet (likely to cause some failures)? y/n [n]
+ #
+ # Eventually, someone can add capability for the other options, but
+ # the current answers are the most practical for a spack install.
+
+ config_answers = ['n\n', 'a\n', 'n\n']
+ config_answers_filename = 'spack-config.in'
+
+ with open(config_answers_filename, 'w') as f:
+ f.writelines(config_answers)
+
+ with open(config_answers_filename, 'r') as f:
+ inspect.getmodule(self).perl('Build.PL', '--install_base=%s' %
+ self.prefix, input=f)
diff --git a/var/spack/repos/builtin/packages/perl-capture-tiny/package.py b/var/spack/repos/builtin/packages/perl-capture-tiny/package.py
new file mode 100644
index 0000000000..952ff2999c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-capture-tiny/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/spack/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 PerlCaptureTiny(PerlPackage):
+ """Capture STDOUT and STDERR from Perl, XS or external programs"""
+
+ homepage = "http://search.cpan.org/~dagolden/Capture-Tiny-0.46/lib/Capture/Tiny.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Capture-Tiny-0.46.tar.gz"
+
+ version('0.46', 'd718af07729d26a793949ca6ba2580a7')
diff --git a/var/spack/repos/builtin/packages/perl-class-data-inheritable/package.py b/var/spack/repos/builtin/packages/perl-class-data-inheritable/package.py
new file mode 100644
index 0000000000..2fd349b077
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-class-data-inheritable/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/spack/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 PerlClassDataInheritable(PerlPackage):
+ """For creating accessor/mutators to class data."""
+
+ homepage = "http://search.cpan.org/~tmtm/Class-Data-Inheritable-0.08/lib/Class/Data/Inheritable.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.08.tar.gz"
+
+ version('0.08', 'fc0fe65926eb8fb932743559feb54eb9')
diff --git a/var/spack/repos/builtin/packages/perl-class-load-xs/package.py b/var/spack/repos/builtin/packages/perl-class-load-xs/package.py
new file mode 100644
index 0000000000..11130afd97
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-class-load-xs/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PerlClassLoadXs(PerlPackage):
+ """This module provides an XS implementation for portions of
+ Class::Load."""
+
+ homepage = "http://search.cpan.org/~ether/Class-Load-XS-0.10/lib/Class/Load/XS.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Class-Load-XS-0.10.tar.gz"
+
+ version('0.10', '2c15488b5b28afadbb5315e44a721e05')
+
+ depends_on('perl-class-load', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-class-load/package.py b/var/spack/repos/builtin/packages/perl-class-load/package.py
new file mode 100644
index 0000000000..0d10f82813
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-class-load/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/spack/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 PerlClassLoad(PerlPackage):
+ """A working (require "Class::Name") and more"""
+
+ homepage = "http://search.cpan.org/~ether/Class-Load-0.24/lib/Class/Load.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Class-Load-0.24.tar.gz"
+
+ version('0.24', 'daf8aeedf4d19ed6d3f75cd3e720116d')
diff --git a/var/spack/repos/builtin/packages/perl-cpan-meta-check/package.py b/var/spack/repos/builtin/packages/perl-cpan-meta-check/package.py
new file mode 100644
index 0000000000..7fe16bb2a0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-cpan-meta-check/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PerlCpanMetaCheck(PerlPackage):
+ """This module verifies if requirements described in a CPAN::Meta object
+ are present.."""
+
+ homepage = "http://search.cpan.org/~leont/CPAN-Meta-Check-0.014/lib/CPAN/Meta/Check.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/CPAN-Meta-Check-0.014.tar.gz"
+
+ version('0.014', 'ccd4448a7b08e1e3ef6f475030b282c9')
+
+ depends_on('perl-test-deep', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-data-optlist/package.py b/var/spack/repos/builtin/packages/perl-data-optlist/package.py
new file mode 100644
index 0000000000..4eaeaca1a4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-data-optlist/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlDataOptlist(PerlPackage):
+ """Parse and validate simple name/value option pairs"""
+
+ homepage = "http://search.cpan.org/~rjbs/Data-OptList-0.110/lib/Data/OptList.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Data-OptList-0.110.tar.gz"
+
+ version('0.110', 'f9236c9ea5607134ad8a2b3dc901c4c5')
+
+ depends_on('perl-sub-install', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-data-stag/package.py b/var/spack/repos/builtin/packages/perl-data-stag/package.py
new file mode 100644
index 0000000000..fd1bff285f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-data-stag/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlDataStag(PerlPackage):
+ """Structured Tags datastructures"""
+
+ homepage = "http://search.cpan.org/~cmungall/Data-Stag-0.14/Data/Stag.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/C/CM/CMUNGALL/Data-Stag-0.14.tar.gz"
+
+ version('0.14', 'f803acf74f1bfccc118aeac5483ee871')
+
+ depends_on('perl-io-string', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-dbfile/package.py b/var/spack/repos/builtin/packages/perl-dbfile/package.py
new file mode 100644
index 0000000000..3a5d8fea94
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-dbfile/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PerlDbfile(PerlPackage):
+ """DB_File is a module which allows Perl programs to make use of the
+ facilities provided by Berkeley DB version 1.x (if you have a newer version
+ of DB, see "Using DB_File with Berkeley DB version 2 or greater").
+ It is assumed that you have a copy of the Berkeley DB manual pages at hand
+ when reading this documentation. The interface defined here mirrors the
+ Berkeley DB interface closely."""
+
+ homepage = "https://metacpan.org/pod/DB_File"
+ url = "https://cpan.metacpan.org/authors/id/P/PM/PMQS/DB_File-1.840.tar.gz"
+
+ version('1.840', '8a2e98d457a216840ac893913c24141e')
+
+ depends_on('perl-extutils-makemaker', type='build')
diff --git a/var/spack/repos/builtin/packages/perl-dbi/package.py b/var/spack/repos/builtin/packages/perl-dbi/package.py
new file mode 100644
index 0000000000..a6e5e76cc5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-dbi/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlDbi(PerlPackage):
+ """The DBI is the standard database interface module for Perl. It defines
+ a set of methods, variables and conventions that provide a consistent
+ database interface independent of the actual database being used."""
+
+ homepage = "https://dbi.perl.org/"
+ url = "http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.636.tar.gz"
+
+ version('1.636', '60f291e5f015550dde71d1858dfe93ba')
diff --git a/var/spack/repos/builtin/packages/perl-devel-cycle/package.py b/var/spack/repos/builtin/packages/perl-devel-cycle/package.py
new file mode 100644
index 0000000000..ad4c575025
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-devel-cycle/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/spack/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 PerlDevelCycle(PerlPackage):
+ """Find memory cycles in objects"""
+
+ homepage = "http://search.cpan.org/~lds/Devel-Cycle-1.12/lib/Devel/Cycle.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/L/LD/LDS/Devel-Cycle-1.12.tar.gz"
+
+ version('1.12', '3d9a963da87b17398fab9acbef63f277')
diff --git a/var/spack/repos/builtin/packages/perl-devel-globaldestruction/package.py b/var/spack/repos/builtin/packages/perl-devel-globaldestruction/package.py
new file mode 100644
index 0000000000..aca5245611
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-devel-globaldestruction/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/spack/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 PerlDevelGlobaldestruction(PerlPackage):
+ """Makes Perl's global destruction less tricky to deal with"""
+
+ homepage = "http://search.cpan.org/~haarg/Devel-GlobalDestruction-0.14/lib/Devel/GlobalDestruction.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/Devel-GlobalDestruction-0.14.tar.gz"
+
+ version('0.14', '24221ba322cf2dc46a1fc99b53e2380b')
diff --git a/var/spack/repos/builtin/packages/perl-devel-overloadinfo/package.py b/var/spack/repos/builtin/packages/perl-devel-overloadinfo/package.py
new file mode 100644
index 0000000000..60a80aed90
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-devel-overloadinfo/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlDevelOverloadinfo(PerlPackage):
+ """Returns information about overloaded operators for a given class"""
+
+ homepage = "http://search.cpan.org/~ilmari/Devel-OverloadInfo-0.004/lib/Devel/OverloadInfo.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/I/IL/ILMARI/Devel-OverloadInfo-0.004.tar.gz"
+
+ version('0.004', '97a27e31858b073daba54121d57be705')
+
+ depends_on('perl-mro-compat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-devel-stacktrace/package.py b/var/spack/repos/builtin/packages/perl-devel-stacktrace/package.py
new file mode 100644
index 0000000000..d6b7b8f484
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-devel-stacktrace/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/spack/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 PerlDevelStacktrace(PerlPackage):
+ """An object representing a stack trace."""
+
+ homepage = "http://search.cpan.org/~drolsky/Devel-StackTrace-2.02/lib/Devel/StackTrace.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-2.02.tar.gz"
+
+ version('2.02', 'bcc49dc2744d1fae906de0de3df07cca')
diff --git a/var/spack/repos/builtin/packages/perl-dist-checkconflicts/package.py b/var/spack/repos/builtin/packages/perl-dist-checkconflicts/package.py
new file mode 100644
index 0000000000..f09ebd4a31
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-dist-checkconflicts/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/spack/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 PerlDistCheckconflicts(PerlPackage):
+ """Declare version conflicts for your dist"""
+
+ homepage = "http://search.cpan.org/~doy/Dist-CheckConflicts-0.11/lib/Dist/CheckConflicts.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DO/DOY/Dist-CheckConflicts-0.11.tar.gz"
+
+ version('0.11', 'c8725a92b9169708b0f63036812070f2')
diff --git a/var/spack/repos/builtin/packages/perl-eval-closure/package.py b/var/spack/repos/builtin/packages/perl-eval-closure/package.py
new file mode 100644
index 0000000000..d79d119140
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-eval-closure/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/spack/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 PerlEvalClosure(PerlPackage):
+ """Safely and cleanly create closures via string eval"""
+
+ homepage = "http://search.cpan.org/~doy/Eval-Closure-0.14/lib/Eval/Closure.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DO/DOY/Eval-Closure-0.14.tar.gz"
+
+ version('0.14', 'ceeb1fc579ac9af981fa6b600538c285')
diff --git a/var/spack/repos/builtin/packages/perl-exception-class/package.py b/var/spack/repos/builtin/packages/perl-exception-class/package.py
new file mode 100644
index 0000000000..715830432d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-exception-class/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PerlExceptionClass(PerlPackage):
+ """A module that allows you to declare real exception classes in Perl"""
+
+ homepage = "http://search.cpan.org/~drolsky/Exception-Class-1.43/lib/Exception/Class.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Exception-Class-1.43.tar.gz"
+
+ version('1.43', 'ff3fa5c26fa417b68d1f2d0a14cce7f1')
+
+ depends_on('perl-devel-stacktrace', type=('build', 'run'))
+ depends_on('perl-class-data-inheritable', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-extutils-makemaker/package.py b/var/spack/repos/builtin/packages/perl-extutils-makemaker/package.py
new file mode 100644
index 0000000000..c346cead50
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-extutils-makemaker/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PerlExtutilsMakemaker(PerlPackage):
+ """ExtUtils::MakeMaker - Create a module Makefile. This utility is designed
+ to write a Makefile for an extension module from a Makefile.PL. It is based
+ on the Makefile.SH model provided by Andy Dougherty and the perl5-porters.
+ """
+ homepage = "https://github.com/Perl-Toolchain-Gang/ExtUtils-MakeMaker"
+ url = "http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/ExtUtils-MakeMaker-7.24.tar.gz"
+
+ version('7.24', '15c67ba2ea2c9e20a3d976b738adb113')
+
+ depends_on('perl@5.6.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-extutils-pkgconfig/package.py b/var/spack/repos/builtin/packages/perl-extutils-pkgconfig/package.py
new file mode 100644
index 0000000000..547d2d2866
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-extutils-pkgconfig/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/spack/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 PerlExtutilsPkgconfig(PerlPackage):
+ """simplistic interface to pkg-config"""
+
+ homepage = "http://search.cpan.org/~xaoc/ExtUtils-PkgConfig-1.16/lib/ExtUtils/PkgConfig.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/X/XA/XAOC/ExtUtils-PkgConfig-1.16.tar.gz"
+
+ version('1.16', 'b86318f2b6ac6af3ee985299e1e38fe5')
diff --git a/var/spack/repos/builtin/packages/perl-file-pushd/package.py b/var/spack/repos/builtin/packages/perl-file-pushd/package.py
new file mode 100644
index 0000000000..fea45e0f9e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-file-pushd/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/spack/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 PerlFilePushd(PerlPackage):
+ """Change directory temporarily for a limited scope"""
+
+ homepage = "http://search.cpan.org/~dagolden/File-pushd-1.014/lib/File/pushd.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/File-pushd-1.014.tar.gz"
+
+ version('1.014', '09c03001fb653c35663842191e315f5f')
diff --git a/var/spack/repos/builtin/packages/perl-font-ttf/package.py b/var/spack/repos/builtin/packages/perl-font-ttf/package.py
new file mode 100644
index 0000000000..81ddbf20b5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-font-ttf/package.py
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 PerlFontTtf(PerlPackage):
+ """Perl module for TrueType Font hacking"""
+
+ homepage = "http://search.cpan.org/~bhallissy/Font-TTF-1.06/lib/Font/TTF.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/B/BH/BHALLISSY/Font-TTF-1.06.tar.gz"
+
+ version('1.06', '241b59310ad4450e6e050d5e790f1b21')
diff --git a/var/spack/repos/builtin/packages/perl-gd-graph/package.py b/var/spack/repos/builtin/packages/perl-gd-graph/package.py
new file mode 100644
index 0000000000..9e68fb208a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-gd-graph/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PerlGdGraph(PerlPackage):
+ """Graph Plotting Module for Perl 5"""
+
+ homepage = "http://search.cpan.org/~bwarfield/GDGraph/Graph.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/B/BW/BWARFIELD/GDGraph-1.44.tar.gz"
+
+ version('1.4308', 'fcdd34d5e09ae917b5d264887734b3b1')
+
+ depends_on('perl-capture-tiny', type=('build', 'run'))
+ depends_on('perl-test-exception', type=('build', 'run'))
+ depends_on('perl-gd-text', type=('build', 'run'))
+ depends_on('perl-gd', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-gd-text/package.py b/var/spack/repos/builtin/packages/perl-gd-text/package.py
new file mode 100644
index 0000000000..a0a512352a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-gd-text/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlGdText(PerlPackage):
+ """Text utilities for use with GD"""
+
+ homepage = "http://search.cpan.org/~mverb/GDTextUtil-0.86/Text.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/M/MV/MVERB/GDTextUtil-0.86.tar.gz"
+
+ version('0.86', '941ad06eadc86b47f3a32da405665c41')
+
+ depends_on('perl-gd', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-gd/package.py b/var/spack/repos/builtin/packages/perl-gd/package.py
new file mode 100644
index 0000000000..77e5c01aee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-gd/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PerlGd(PerlPackage):
+ """Interface to Gd Graphics Library"""
+
+ homepage = "http://search.cpan.org/~lds/GD-2.53/GD.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/L/LD/LDS/GD-2.53.tar.gz"
+
+ version('2.53', 'd2c9b18123bcaff8672eb50f2eb37ed3')
+
+ depends_on('perl-module-build', type='build')
+ depends_on('perl-extutils-makemaker', type=('build', 'run'))
+ depends_on('perl-extutils-pkgconfig', type=('build', 'run'))
+ depends_on('libgd')
diff --git a/var/spack/repos/builtin/packages/perl-intervaltree/package.py b/var/spack/repos/builtin/packages/perl-intervaltree/package.py
new file mode 100644
index 0000000000..1a3a31f9d7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-intervaltree/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PerlIntervaltree(PerlPackage):
+ """Set::IntervalTree uses Interval Trees to store and efficiently look up
+ ranges using a range-based lookup."""
+
+ homepage = "https://metacpan.org/release/Set-IntervalTree"
+ url = "https://cpan.metacpan.org/authors/id/B/BE/BENBOOTH/Set-IntervalTree-0.10.tar.gz"
+
+ version('0.10', '42efe9369f1b30e7fd04e10c07226b06')
+
+ depends_on('perl-extutils-makemaker', type='build')
diff --git a/var/spack/repos/builtin/packages/perl-io-string/package.py b/var/spack/repos/builtin/packages/perl-io-string/package.py
new file mode 100644
index 0000000000..ec08ac3078
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-io-string/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/spack/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 PerlIoString(PerlPackage):
+ """Emulate file interface for in-core strings"""
+
+ homepage = "http://search.cpan.org/~gaas/IO-String-1.08/String.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/IO-String-1.08.tar.gz"
+
+ version('1.08', '250e5424f290299fc3d6b5d1e9da3835')
diff --git a/var/spack/repos/builtin/packages/perl-math-cdf/package.py b/var/spack/repos/builtin/packages/perl-math-cdf/package.py
new file mode 100644
index 0000000000..094b08dd1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-math-cdf/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 PerlMathCdf(PerlPackage):
+ """Generate probabilities and quantiles from several statistical
+ probability functions"""
+
+ homepage = "http://search.cpan.org/~callahan/Math-CDF-0.1/CDF.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/C/CA/CALLAHAN/Math-CDF-0.1.tar.gz"
+
+ version('0.1', '7866c7b6b9d27f0ce4b7637334478ab7')
diff --git a/var/spack/repos/builtin/packages/perl-module-build/package.py b/var/spack/repos/builtin/packages/perl-module-build/package.py
new file mode 100644
index 0000000000..53bc80a062
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-module-build/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PerlModuleBuild(PerlPackage):
+ """Module::Build is a system for building, testing, and installing Perl
+ modules. It is meant to be an alternative to ExtUtils::MakeMaker.
+ Developers may alter the behavior of the module through subclassing in a
+ much more straightforward way than with MakeMaker. It also does not
+ require a make on your system - most of the Module::Build code is
+ pure-perl and written in a very cross-platform way.
+ """
+
+ homepage = "http://search.cpan.org/perldoc/Module::Build"
+ url = "http://search.cpan.org/CPAN/authors/id/L/LE/LEONT/Module-Build-0.4220.tar.gz"
+
+ version('0.4220', '9df204e188462a4410d496f316c2c531')
diff --git a/var/spack/repos/builtin/packages/perl-module-runtime-conflicts/package.py b/var/spack/repos/builtin/packages/perl-module-runtime-conflicts/package.py
new file mode 100644
index 0000000000..1b499ce7f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-module-runtime-conflicts/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/spack/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 PerlModuleRuntimeConflicts(PerlPackage):
+ """Provide information on conflicts for Module::Runtime"""
+
+ homepage = "http://search.cpan.org/~ether/Module-Runtime-Conflicts-0.003/lib/Module/Runtime/Conflicts.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Module-Runtime-Conflicts-0.003.tar.gz"
+
+ version('0.003', '67aaf699072063cc00c5b6afd4c67a6f')
diff --git a/var/spack/repos/builtin/packages/perl-moose/package.py b/var/spack/repos/builtin/packages/perl-moose/package.py
new file mode 100644
index 0000000000..2a0261599f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-moose/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 PerlMoose(PerlPackage):
+ """A postmodern object system for Perl 5"""
+
+ homepage = "http://search.cpan.org/~ether/Moose-2.2006/lib/Moose.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Moose-2.2006.tar.gz"
+
+ version('2.2006', '929c6b3877a6054ef617cf7ef1e220b5')
+
+ depends_on('perl-cpan-meta-check', type=('build', 'run'))
+ depends_on('perl-test-cleannamespaces', type=('build', 'run'))
+ depends_on('perl-devel-overloadinfo', type=('build', 'run'))
+ depends_on('perl-class-load-xs', type=('build', 'run'))
+ depends_on('perl-devel-stacktrace', type=('build', 'run'))
+ depends_on('perl-eval-closure', type=('build', 'run'))
+ depends_on('perl-sub-name', type=('build', 'run'))
+ depends_on('perl-module-runtime-conflicts', type=('build', 'run'))
+ depends_on('perl-devel-globaldestruction', type=('build', 'run'))
+ depends_on('perl-package-deprecationmanager', type=('build', 'run'))
+ depends_on('perl-package-stash-xs', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-mro-compat/package.py b/var/spack/repos/builtin/packages/perl-mro-compat/package.py
new file mode 100644
index 0000000000..81b6f19ffa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-mro-compat/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/spack/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 PerlMroCompat(PerlPackage):
+ """Provides several utilities for dealing with method resolution order."""
+
+ homepage = "http://search.cpan.org/~haarg/MRO-Compat-0.13/lib/MRO/Compat.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/MRO-Compat-0.13.tar.gz"
+
+ version('0.13', 'd2e603e8ae9dc6934162d190eb085385')
diff --git a/var/spack/repos/builtin/packages/perl-namespace-clean/package.py b/var/spack/repos/builtin/packages/perl-namespace-clean/package.py
new file mode 100644
index 0000000000..8dc2492430
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-namespace-clean/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlNamespaceClean(PerlPackage):
+ """Keep imports and functions out of your namespace."""
+
+ homepage = "http://search.cpan.org/~ribasushi/namespace-clean-0.27/lib/namespace/clean.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RI/RIBASUSHI/namespace-clean-0.27.tar.gz"
+
+ version('0.27', 'cba97f39ef7e594bd8489b4fdcddb662')
+
+ depends_on('perl-b-hooks-endofscope', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-package-deprecationmanager/package.py b/var/spack/repos/builtin/packages/perl-package-deprecationmanager/package.py
new file mode 100644
index 0000000000..89e1690fdd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-package-deprecationmanager/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/spack/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 PerlPackageDeprecationmanager(PerlPackage):
+ """Manage deprecation warnings for your distribution"""
+
+ homepage = "http://search.cpan.org/~drolsky/Package-DeprecationManager-0.17/lib/Package/DeprecationManager.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Package-DeprecationManager-0.17.tar.gz"
+
+ version('0.17', '7b46e92aaae3047ede3c67c1714ab88e')
diff --git a/var/spack/repos/builtin/packages/perl-package-stash-xs/package.py b/var/spack/repos/builtin/packages/perl-package-stash-xs/package.py
new file mode 100644
index 0000000000..7d627ffb65
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-package-stash-xs/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/spack/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 PerlPackageStashXs(PerlPackage):
+ """Faster and more correct implementation of the Package::Stash API"""
+
+ homepage = "http://search.cpan.org/~doy/Package-Stash-XS-0.28/lib/Package/Stash/XS.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DO/DOY/Package-Stash-XS-0.28.tar.gz"
+
+ version('0.28', '9664356ec3be02626cbd3081ec246b70')
diff --git a/var/spack/repos/builtin/packages/perl-package-stash/package.py b/var/spack/repos/builtin/packages/perl-package-stash/package.py
new file mode 100644
index 0000000000..abc8a5ccfe
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-package-stash/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PerlPackageStash(PerlPackage):
+ """Routines for manipulating stashes"""
+
+ homepage = "http://search.cpan.org/~doy/Package-Stash-0.37/lib/Package/Stash.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DO/DOY/Package-Stash-0.37.tar.gz"
+
+ version('0.37', '7e47a8261312e1cf3d12bd2007916b66')
+
+ depends_on('perl-test-requires', type=('build', 'run'))
+ depends_on('perl-test-fatal', type=('build', 'run'))
+ depends_on('perl-module-implementation', type=('build', 'run'))
+ depends_on('perl-dist-checkconflicts', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-padwalker/package.py b/var/spack/repos/builtin/packages/perl-padwalker/package.py
new file mode 100644
index 0000000000..0ffef9cf18
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-padwalker/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/spack/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 PerlPadwalker(PerlPackage):
+ """play with other peoples' lexical variables"""
+
+ homepage = "http://search.cpan.org/~robin/PadWalker-2.2/PadWalker.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RO/ROBIN/PadWalker-2.2.tar.gz"
+
+ version('2.2', '6bcc741f77b1831a893b2a22c785e31a')
diff --git a/var/spack/repos/builtin/packages/perl-params-util/package.py b/var/spack/repos/builtin/packages/perl-params-util/package.py
new file mode 100644
index 0000000000..834601512b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-params-util/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/spack/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 PerlParamsUtil(PerlPackage):
+ """Simple, compact and correct param-checking functions"""
+
+ homepage = "http://search.cpan.org/~adamk/Params-Util-1.07/lib/Params/Util.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Params-Util-1.07.tar.gz"
+
+ version('1.07', '02db120c0eef87aae1830cc62bdec37b')
diff --git a/var/spack/repos/builtin/packages/perl-pdf-api2/package.py b/var/spack/repos/builtin/packages/perl-pdf-api2/package.py
new file mode 100644
index 0000000000..216971529c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-pdf-api2/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PerlPdfApi2(PerlPackage):
+ """Facilitates the creation and modification of PDF files"""
+
+ homepage = "http://search.cpan.org/~ssimms/PDF-API2-2.033/lib/PDF/API2.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/S/SS/SSIMMS/PDF-API2-2.033.tar.gz"
+
+ version('2.033', '4223a38add42741f996bd67d5f2f8e5b')
+
+ depends_on('perl-test-exception', type=('build', 'run'))
+ depends_on('perl-test-memory-cycle', type=('build', 'run'))
+ depends_on('perl-font-ttf', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-star-fusion/package.py b/var/spack/repos/builtin/packages/perl-star-fusion/package.py
new file mode 100644
index 0000000000..5985bd7fd3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-star-fusion/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 glob import glob
+
+
+class PerlStarFusion(Package):
+ """STAR-Fusion is a component of the Trinity Cancer Transcriptome Analysis
+ Toolkit (CTAT). STAR-Fusion uses the STAR aligner to identify candidate
+ fusion transcripts supported by Illumina reads. STAR-Fusion further
+ processes the output generated by the STAR aligner to map junction reads
+ and spanning reads to a reference annotation set."""
+
+ homepage = "https://github.com/STAR-Fusion/STAR-Fusion"
+ url = "https://github.com/STAR-Fusion/STAR-Fusion.git"
+
+ version('master', git='https://github.com/STAR-Fusion/STAR-Fusion.git', commit='a16a0a8')
+
+ extends('perl')
+
+ depends_on('star', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+ depends_on('perl-intervaltree', type=('build', 'run'))
+ depends_on('perl-dbi', type=('build', 'run'))
+ depends_on('perl-dbfile', type=('build', 'run'))
+ depends_on('perl-uri-escape', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('STAR-Fusion', prefix.bin)
+ mkdirp(perl_lib_dir)
+ with working_dir('PerlLib'):
+ for pm in glob("*.pm"):
+ install(pm, perl_lib_dir)
+ with working_dir('util'):
+ for files in glob("*"):
+ install(files, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/perl-sub-exporter-progressive/package.py b/var/spack/repos/builtin/packages/perl-sub-exporter-progressive/package.py
new file mode 100644
index 0000000000..a6642fce2c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-exporter-progressive/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/spack/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 PerlSubExporterProgressive(PerlPackage):
+ """Progressive Sub::Exporter"""
+
+ homepage = "http://search.cpan.org/~frew/Sub-Exporter-Progressive-0.001013/lib/Sub/Exporter/Progressive.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/F/FR/FREW/Sub-Exporter-Progressive-0.001013.tar.gz"
+
+ version('0.001013', '72cf6acdd2a0a8b105821a4db98e4ebe')
diff --git a/var/spack/repos/builtin/packages/perl-sub-exporter/package.py b/var/spack/repos/builtin/packages/perl-sub-exporter/package.py
new file mode 100644
index 0000000000..0b13cb870e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-exporter/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PerlSubExporter(PerlPackage):
+ """A sophisticated exporter for custom-built routines"""
+
+ homepage = "http://search.cpan.org/~rjbs/Sub-Exporter-0.987/lib/Sub/Exporter.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Exporter-0.987.tar.gz"
+
+ version('0.987', '5332d269a7ba387773fcd140b72a0ed2')
+
+ depends_on('perl-params-util', type=('build', 'run'))
+ depends_on('perl-data-optlist', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-sub-identify/package.py b/var/spack/repos/builtin/packages/perl-sub-identify/package.py
new file mode 100644
index 0000000000..e173ebfeae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-identify/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/spack/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 PerlSubIdentify(PerlPackage):
+ """Retrieve names of code references"""
+
+ homepage = "http://search.cpan.org/~rgarcia/Sub-Identify-0.14/lib/Sub/Identify.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RG/RGARCIA/Sub-Identify-0.14.tar.gz"
+
+ version('0.14', '014f19e72698b6a2cbcb54adc9691825')
diff --git a/var/spack/repos/builtin/packages/perl-sub-install/package.py b/var/spack/repos/builtin/packages/perl-sub-install/package.py
new file mode 100644
index 0000000000..8354eb5be7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-install/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/spack/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 PerlSubInstall(PerlPackage):
+ """Install subroutines into packages easily"""
+
+ homepage = "http://search.cpan.org/~rjbs/Sub-Install-0.928/lib/Sub/Install.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Sub-Install-0.928.tar.gz"
+
+ version('0.928', 'e1ce4f9cb6b2f6b8778b036c31afa5ab')
diff --git a/var/spack/repos/builtin/packages/perl-sub-name/package.py b/var/spack/repos/builtin/packages/perl-sub-name/package.py
new file mode 100644
index 0000000000..74df14dbd1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-name/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/spack/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 PerlSubName(PerlPackage):
+ """Name or rename a sub"""
+
+ homepage = "http://search.cpan.org/~ether/Sub-Name-0.21/lib/Sub/Name.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Sub-Name-0.21.tar.gz"
+
+ version('0.21', '7e7a181e30b3249d0b81585f55e36621')
diff --git a/var/spack/repos/builtin/packages/perl-sub-uplevel/package.py b/var/spack/repos/builtin/packages/perl-sub-uplevel/package.py
new file mode 100644
index 0000000000..049c844e1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-sub-uplevel/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/spack/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 PerlSubUplevel(PerlPackage):
+ """apparently run a function in a higher stack frame"""
+
+ homepage = "http://search.cpan.org/~dagolden/Sub-Uplevel-0.2800/lib/Sub/Uplevel.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Sub-Uplevel-0.2800.tar.gz"
+
+ version('0.2800', '6c6a174861fd160e8d5871a86df00baf')
diff --git a/var/spack/repos/builtin/packages/perl-term-readkey/package.py b/var/spack/repos/builtin/packages/perl-term-readkey/package.py
new file mode 100644
index 0000000000..b25e34c04d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-term-readkey/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PerlTermReadkey(PerlPackage):
+ """Term::ReadKey is a compiled perl module dedicated to providing simple
+ control over terminal driver modes (cbreak, raw, cooked, etc.,) support
+ for non-blocking reads, if the architecture allows, and some generalized
+ handy functions for working with terminals. One of the main goals is to
+ have the functions as portable as possible, so you can just plug in
+ "use Term::ReadKey" on any architecture and have a good likelihood of it
+ working."""
+
+ homepage = "http://search.cpan.org/perldoc/Term::ReadKey"
+ url = "http://www.cpan.org/authors/id/J/JS/JSTOWE/TermReadKey-2.37.tar.gz"
+
+ version('2.37', 'e8ea15c16333ac4f8d146d702e83cc0c')
diff --git a/var/spack/repos/builtin/packages/perl-test-cleannamespaces/package.py b/var/spack/repos/builtin/packages/perl-test-cleannamespaces/package.py
new file mode 100644
index 0000000000..86e8bfae4a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-cleannamespaces/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PerlTestCleannamespaces(PerlPackage):
+ """This module lets you check your module's namespaces for imported
+ functions you might have forgotten to remove"""
+
+ homepage = "http://search.cpan.org/~ether/Test-CleanNamespaces-0.22/lib/Test/CleanNamespaces.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Test-CleanNamespaces-0.22.tar.gz"
+
+ version('0.22', '8c48bb0427f2077edce57c50491468ec')
+
+ depends_on('perl-sub-exporter', type=('build', 'run'))
+ depends_on('perl-module-runtime', type=('build', 'run'))
+ depends_on('perl-test-needs', type=('build', 'run'))
+ depends_on('perl-test-deep', type=('build', 'run'))
+ depends_on('perl-test-warnings', type=('build', 'run'))
+ depends_on('perl-file-pushd', type=('build', 'run'))
+ depends_on('perl-package-stash', type=('build', 'run'))
+ depends_on('perl-sub-identify', type=('build', 'run'))
+ depends_on('perl-namespace-clean', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-deep/package.py b/var/spack/repos/builtin/packages/perl-test-deep/package.py
new file mode 100644
index 0000000000..d1a6d248f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-deep/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/spack/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 PerlTestDeep(PerlPackage):
+ """Extremely flexible deep comparison"""
+
+ homepage = "http://search.cpan.org/~rjbs/Test-Deep-1.127/lib/Test/Deep.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Deep-1.127.tar.gz"
+
+ version('1.127', 'eeafe5795ba20ba051a1423f4fa86dd6')
diff --git a/var/spack/repos/builtin/packages/perl-test-differences/package.py b/var/spack/repos/builtin/packages/perl-test-differences/package.py
new file mode 100644
index 0000000000..b37442fc28
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-differences/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PerlTestDifferences(PerlPackage):
+ """Test strings and data structures and show differences if not ok"""
+
+ homepage = "http://search.cpan.org/~dcantrell/Test-Differences-0.64/lib/Test/Differences.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/D/DC/DCANTRELL/Test-Differences-0.64.tar.gz"
+
+ version('0.64', 'ecfda620fe133e36a6e392d94ab8424d')
+
+ depends_on('perl-module-build', type='build')
+ depends_on('perl-capture-tiny', type=('build', 'run'))
+ depends_on('perl-text-diff', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-exception/package.py b/var/spack/repos/builtin/packages/perl-test-exception/package.py
new file mode 100644
index 0000000000..32b902221e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-exception/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlTestException(PerlPackage):
+ """Test exception-based code"""
+
+ homepage = "http://search.cpan.org/~exodist/Test-Exception-0.43/lib/Test/Exception.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/E/EX/EXODIST/Test-Exception-0.43.tar.gz"
+
+ version('0.43', '572d355026fb0b87fc2b8c64b83cada0')
+
+ depends_on('perl-sub-uplevel', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-fatal/package.py b/var/spack/repos/builtin/packages/perl-test-fatal/package.py
new file mode 100644
index 0000000000..314fee9df6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-fatal/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlTestFatal(PerlPackage):
+ """Incredibly simple helpers for testing code with exceptions"""
+
+ homepage = "http://search.cpan.org/~rjbs/Test-Fatal-0.014/lib/Test/Fatal.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Fatal-0.014.tar.gz"
+
+ version('0.014', '7954f6d2e3607be10c0fbd69063a3d1b')
+
+ depends_on('perl-try-tiny', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-memory-cycle/package.py b/var/spack/repos/builtin/packages/perl-test-memory-cycle/package.py
new file mode 100644
index 0000000000..b9132952b2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-memory-cycle/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PerlTestMemoryCycle(PerlPackage):
+ """Check for memory leaks and circular memory references"""
+
+ homepage = "http://search.cpan.org/~petdance/Test-Memory-Cycle-1.06/Cycle.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/P/PE/PETDANCE/Test-Memory-Cycle-1.06.tar.gz"
+
+ version('1.06', '397e709ba33d3883b5fb2bc49e3a70b0')
+
+ depends_on('perl-padwalker', type=('build', 'run'))
+ depends_on('perl-devel-cycle', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-most/package.py b/var/spack/repos/builtin/packages/perl-test-most/package.py
new file mode 100644
index 0000000000..a6a3650c42
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-most/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PerlTestMost(PerlPackage):
+ """Most commonly needed test functions and features."""
+
+ homepage = "http://search.cpan.org/~ovid/Test-Most-0.35/lib/Test/Most.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/O/OV/OVID/Test-Most-0.35.tar.gz"
+
+ version('0.35', '03dbabd34d6f40af8bd47f5fbb0c6989')
+
+ depends_on('perl-exception-class', type=('build', 'run'))
+ depends_on('perl-test-differences', type=('build', 'run'))
+ depends_on('perl-test-exception', type=('build', 'run'))
+ depends_on('perl-test-warn', type=('build', 'run'))
+ depends_on('perl-test-deep', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-test-needs/package.py b/var/spack/repos/builtin/packages/perl-test-needs/package.py
new file mode 100644
index 0000000000..9006067309
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-needs/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/spack/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 PerlTestNeeds(PerlPackage):
+ """Skip tests when modules not available."""
+
+ homepage = "http://search.cpan.org/~haarg/Test-Needs-0.002005/lib/Test/Needs.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/Test-Needs-0.002005.tar.gz"
+
+ version('0.002005', '356634a56c99282e8059f290f5d534c8')
diff --git a/var/spack/repos/builtin/packages/perl-test-requires/package.py b/var/spack/repos/builtin/packages/perl-test-requires/package.py
new file mode 100644
index 0000000000..79bfb211a0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-requires/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/spack/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 PerlTestRequires(PerlPackage):
+ """Checks to see if the module can be loaded."""
+
+ homepage = "http://search.cpan.org/~tokuhirom/Test-Requires-0.10/lib/Test/Requires.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/T/TO/TOKUHIROM/Test-Requires-0.10.tar.gz"
+
+ version('0.10', '0d5da779609d0c8fa6f796b45ff8c6f3')
diff --git a/var/spack/repos/builtin/packages/perl-test-warn/package.py b/var/spack/repos/builtin/packages/perl-test-warn/package.py
new file mode 100644
index 0000000000..e1e9a873a6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-warn/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/spack/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 PerlTestWarn(PerlPackage):
+ """Perl extension to test methods for warnings"""
+
+ homepage = "http://search.cpan.org/~chorny/Test-Warn-0.30/Warn.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/Test-Warn-0.30.tar.gz"
+
+ version('0.30', '8306b998a96d2cc69266b5248d550472')
diff --git a/var/spack/repos/builtin/packages/perl-test-warnings/package.py b/var/spack/repos/builtin/packages/perl-test-warnings/package.py
new file mode 100644
index 0000000000..dc3640fe33
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-test-warnings/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/spack/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 PerlTestWarnings(PerlPackage):
+ """Test for warnings and the lack of them"""
+
+ homepage = "http://deps.cpantesters.org/?module=Test%3A%3ACleanNamespaces;perl=latest"
+ url = "http://search.cpan.org/CPAN/authors/id/E/ET/ETHER/Test-Warnings-0.026.tar.gz"
+
+ version('0.026', '1a379f7eac4c89155d98e652459593a7')
diff --git a/var/spack/repos/builtin/packages/perl-text-diff/package.py b/var/spack/repos/builtin/packages/perl-text-diff/package.py
new file mode 100644
index 0000000000..4c61b3cbb1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-text-diff/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PerlTextDiff(PerlPackage):
+ """Provides a basic set of services akin to the GNU diff utility."""
+
+ homepage = "http://search.cpan.org/~neilb/Text-Diff-1.45/lib/Text/Diff.pm"
+ url = "http://search.cpan.org/CPAN/authors/id/N/NE/NEILB/Text-Diff-1.45.tar.gz"
+
+ version('1.45', 'edf57b6189f7651a6be454062a4e6d9c')
+
+ depends_on('perl-algorithm-diff', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/perl-uri-escape/package.py b/var/spack/repos/builtin/packages/perl-uri-escape/package.py
new file mode 100644
index 0000000000..29f96003e3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-uri-escape/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PerlUriEscape(PerlPackage):
+ """This module provides functions to percent-encode and percent-decode URI
+ strings as defined by RFC 3986. Percent-encoding URI's is informally called
+ "URI escaping". This is the terminology used by this module, which predates
+ the formalization of the terms by the RFC by several years."""
+
+ homepage = "https://metacpan.org/pod/URI::Escape"
+ url = "https://cpan.metacpan.org/authors/id/E/ET/ETHER/URI-1.71.tar.gz"
+
+ version('1.71', '247c3da29a794f72730e01aa5a715daf')
+
+ depends_on('perl-extutils-makemaker', type='build')
diff --git a/var/spack/repos/builtin/packages/perl-xml-parser/package.py b/var/spack/repos/builtin/packages/perl-xml-parser/package.py
new file mode 100644
index 0000000000..baa337319d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl-xml-parser/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PerlXmlParser(PerlPackage):
+ """XML::Parser - A perl module for parsing XML documents"""
+
+ homepage = "http://search.cpan.org/perldoc/XML::Parser"
+ url = "http://search.cpan.org/CPAN/authors/id/T/TO/TODDR/XML-Parser-2.44.tar.gz"
+
+ version('2.44', 'af4813fe3952362451201ced6fbce379')
+
+ depends_on('expat')
+
+ def configure_args(self):
+ args = []
+
+ p = self.spec['expat'].prefix.lib
+ args.append('EXPATLIBPATH={0}'.format(p))
+ p = self.spec['expat'].prefix.include
+ args.append('EXPATINCPATH={0}'.format(p))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/perl/package.py b/var/spack/repos/builtin/packages/perl/package.py
index d71a7492ba..fbf788d106 100644
--- a/var/spack/repos/builtin/packages/perl/package.py
+++ b/var/spack/repos/builtin/packages/perl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,26 +23,53 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
#
+# Author: Milton Woods <milton.woods@bom.gov.au>
+# Date: March 22, 2017
# Author: George Hartzell <hartzell@alerce.com>
# Date: July 21, 2016
# Author: Justin Too <justin@doubleotoo.com>
# Date: September 6, 2015
#
from spack import *
+import os
+from contextlib import contextmanager
+import spack
+from llnl.util.lang import match_predicate
-class Perl(Package):
+class Perl(Package): # Perl doesn't use Autotools, it should subclass Package
"""Perl 5 is a highly capable, feature-rich programming language with over
27 years of development."""
+
homepage = "http://www.perl.org"
- url = "http://www.cpan.org/src/5.0/perl-5.22.2.tar.gz"
+ # URL must remain http:// so Spack can bootstrap curl
+ url = "http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz"
+
+ # Development releases
+ version('5.25.11', '37a398682c36cd85992b34b5c1c25dc1')
+
+ # Maintenance releases (recommended)
+ version('5.24.1', '765ef511b5b87a164e2531403ee16b3c', preferred=True)
+ version('5.22.3', 'aa4f236dc2fc6f88b871436b8d0fda95')
- version('5.24.0', 'c5bf7f3285439a2d3b6a488e14503701')
+ # Misc releases that people need
version('5.22.2', '5767e2a10dd62a46d7b57f74a90d952b')
+ version('5.22.1', '19295bbb775a3c36123161b9bf4892f1')
+ version('5.22.0', 'e32cb6a8dda0084f2a43dac76318d68d')
+
+ # End of life releases
version('5.20.3', 'd647d0ea5a7a8194c34759ab9f2610cd')
- # 5.18.4 fails with gcc-5
- # https://rt.perl.org/Public/Bug/Display.html?id=123784
- # version('5.18.4' , '1f9334ff730adc05acd3dd7130d295db')
+ version('5.18.4', '1f9334ff730adc05acd3dd7130d295db')
+ version('5.16.3', 'eb5c40f2575df6c155bc99e3fe0a9d82')
+
+ extendable = True
+
+ depends_on('gdbm')
+
+ # there has been a long fixed issue with 5.22.0 with regard to the ccflags
+ # definition. It is well documented here:
+ # https://rt.perl.org/Public/Bug/Display.html?id=126468
+ patch('protect-quotes-in-ccflags.patch', when='@5.22.0')
# Installing cpanm alongside the core makes it safe and simple for
# people/projects to install their own sets of perl modules. Not
@@ -51,6 +78,9 @@ class Perl(Package):
variant('cpanm', default=True,
description='Optionally install cpanm with the core packages.')
+ variant('shared', default=True,
+ description='Build a shared libperl.so library')
+
resource(
name="cpanm",
url="http://search.cpan.org/CPAN/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7042.tar.gz",
@@ -59,17 +89,191 @@ class Perl(Package):
placement="cpanm"
)
- def install(self, spec, prefix):
+ phases = ['configure', 'build', 'install']
+
+ def configure_args(self):
+ spec = self.spec
+ prefix = self.prefix
+
+ config_args = [
+ '-des',
+ '-Dprefix={0}'.format(prefix),
+ '-Dlocincpth=' + self.spec['gdbm'].prefix.include,
+ '-Dloclibpth=' + self.spec['gdbm'].prefix.lib,
+ ]
+
+ # Extensions are installed into their private tree via
+ # `INSTALL_BASE`/`--install_base` (see [1]) which results in a
+ # "predictable" installation tree that sadly does not match the
+ # Perl core's @INC structure. This means that when activation
+ # merges the extension into the extendee[2], the directory tree
+ # containing the extensions is not on @INC and the extensions can
+ # not be found.
+ #
+ # This bit prepends @INC with the directory that is used when
+ # extensions are activated [3].
+ #
+ # [1] https://metacpan.org/pod/ExtUtils::MakeMaker#INSTALL_BASE
+ # [2] via the activate method in the PackageBase class
+ # [3] https://metacpan.org/pod/distribution/perl/INSTALL#APPLLIB_EXP
+ config_args.append('-Accflags=-DAPPLLIB_EXP=\\"' +
+ self.prefix.lib.perl5 + '\\"')
+
+ # Discussion of -fPIC for Intel at:
+ # https://github.com/spack/spack/pull/3081 and
+ # https://github.com/spack/spack/pull/4416
+ if spec.satisfies('%intel'):
+ config_args.append('-Accflags={0}'.format(self.compiler.pic_flag))
+
+ if '+shared' in spec:
+ config_args.append('-Duseshrplib')
+
+ return config_args
+
+ def configure(self, spec, prefix):
configure = Executable('./Configure')
- configure("-des", "-Dprefix=" + prefix)
+ configure(*self.configure_args())
+
+ def build(self, spec, prefix):
make()
- if self.run_tests:
- make("test")
- make("install")
+
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
+ def test(self):
+ make('test')
+
+ def install(self, spec, prefix):
+ make('install')
+
+ @run_after('install')
+ def install_cpanm(self):
+ spec = self.spec
if '+cpanm' in spec:
with working_dir(join_path('cpanm', 'cpanm')):
- perl = Executable(join_path(prefix.bin, 'perl'))
+ perl = spec['perl'].command
perl('Makefile.PL')
make()
make('install')
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Set PATH and PERL5LIB to include the extension and
+ any other perl extensions it depends on,
+ assuming they were installed with INSTALL_BASE defined."""
+ perl_lib_dirs = []
+ perl_bin_dirs = []
+ for d in dependent_spec.traverse(
+ deptype=('build', 'run'), deptype_query='run'):
+ if d.package.extends(self.spec):
+ perl_lib_dirs.append(d.prefix.lib.perl5)
+ perl_bin_dirs.append(d.prefix.bin)
+ if perl_bin_dirs:
+ perl_bin_path = ':'.join(perl_bin_dirs)
+ spack_env.prepend_path('PATH', perl_bin_path)
+ run_env.prepend_path('PATH', perl_bin_path)
+ if perl_lib_dirs:
+ perl_lib_path = ':'.join(perl_lib_dirs)
+ spack_env.prepend_path('PERL5LIB', perl_lib_path)
+ run_env.prepend_path('PERL5LIB', perl_lib_path)
+
+ def setup_dependent_package(self, module, dependent_spec):
+ """Called before perl modules' install() methods.
+ In most cases, extensions will only need to have one line:
+ perl('Makefile.PL','INSTALL_BASE=%s' % self.prefix)
+ """
+
+ # perl extension builds can have a global perl executable function
+ module.perl = self.spec['perl'].command
+
+ # Add variables for library directory
+ module.perl_lib_dir = dependent_spec.prefix.lib.perl5
+
+ # Make the site packages directory for extensions,
+ # if it does not exist already.
+ if dependent_spec.package.is_extension:
+ mkdirp(module.perl_lib_dir)
+
+ @run_after('install')
+ def filter_config_dot_pm(self):
+ """Run after install so that Config.pm records the compiler that Spack
+ built the package with. If this isn't done, $Config{cc} will
+ be set to Spack's cc wrapper script. These files are read-only, which
+ frustrates filter_file on some filesystems (NFSv4), so make them
+ temporarily writable.
+ """
+
+ kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
+
+ # Find the actual path to the installed Config.pm file.
+ perl = self.spec['perl'].command
+ config_dot_pm = perl('-MModule::Loaded', '-MConfig', '-e',
+ 'print is_loaded(Config)', output=str)
+
+ with self.make_briefly_writable(config_dot_pm):
+ match = 'cc *=>.*'
+ substitute = "cc => '{cc}',".format(cc=self.compiler.cc)
+ filter_file(match, substitute, config_dot_pm, **kwargs)
+
+ # And the path Config_heavy.pl
+ d = os.path.dirname(config_dot_pm)
+ config_heavy = join_path(d, 'Config_heavy.pl')
+
+ with self.make_briefly_writable(config_heavy):
+ match = '^cc=.*'
+ substitute = "cc='{cc}'".format(cc=self.compiler.cc)
+ filter_file(match, substitute, config_heavy, **kwargs)
+
+ match = '^ld=.*'
+ substitute = "ld='{ld}'".format(ld=self.compiler.cc)
+ filter_file(match, substitute, config_heavy, **kwargs)
+
+ @contextmanager
+ def make_briefly_writable(self, path):
+ """Temporarily make a file writable, then reset"""
+ perm = os.stat(path).st_mode
+ os.chmod(path, perm | 0o200)
+ yield
+ os.chmod(path, perm)
+
+ # ========================================================================
+ # Handle specifics of activating and deactivating perl modules.
+ # ========================================================================
+
+ def perl_ignore(self, ext_pkg, args):
+ """Add some ignore files to activate/deactivate args."""
+ ignore_arg = args.get('ignore', lambda f: False)
+
+ # Many perl packages describe themselves in a perllocal.pod file,
+ # so the files conflict when multiple packages are activated.
+ # We could merge the perllocal.pod files in activated packages,
+ # but this is unnecessary for correct operation of perl.
+ # For simplicity, we simply ignore all perllocal.pod files:
+ patterns = [r'perllocal\.pod$']
+
+ return match_predicate(ignore_arg, patterns)
+
+ def activate(self, ext_pkg, **args):
+ ignore = self.perl_ignore(ext_pkg, args)
+ args.update(ignore=ignore)
+
+ super(Perl, self).activate(ext_pkg, **args)
+
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
+ exts = extensions_layout.extension_map(self.spec)
+ exts[ext_pkg.name] = ext_pkg.spec
+
+ def deactivate(self, ext_pkg, **args):
+ ignore = self.perl_ignore(ext_pkg, args)
+ args.update(ignore=ignore)
+
+ super(Perl, self).deactivate(ext_pkg, **args)
+
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
+ exts = extensions_layout.extension_map(self.spec)
+ # Make deactivate idempotent
+ if ext_pkg.name in exts:
+ del exts[ext_pkg.name]
diff --git a/var/spack/repos/builtin/packages/perl/protect-quotes-in-ccflags.patch b/var/spack/repos/builtin/packages/perl/protect-quotes-in-ccflags.patch
new file mode 100644
index 0000000000..f3500d52f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/perl/protect-quotes-in-ccflags.patch
@@ -0,0 +1,36 @@
+From 111bd177427ec912ef9d64a6d055ca5e9abc359d Mon Sep 17 00:00:00 2001
+From: Jarkko Hietaniemi <jhi@iki.fi>
+Date: Wed, 28 Oct 2015 07:56:23 -0400
+Subject: [PATCH] For perl #126468: protect quotes in ccflags.
+
+---
+ cflags.SH | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/cflags.SH b/cflags.SH
+index f3e44ad..33c6c93 100755
+--- a/cflags.SH
++++ b/cflags.SH
+@@ -387,6 +387,9 @@ echo "cflags.SH: warn = $warn"
+ # Code to set any extra flags here.
+ extra=''
+
++# Protect double or single quotes.
++myccflags=`echo $ccflags | sed -e 's/"/\\\"/g' -e "s/'/\\\'/g"`
++
+ echo "Extracting cflags (with variable substitutions)"
+ # This section of the file will have variable substitutions done on it.
+ # Move anything that needs config subs from !NO!SUBS! section to !GROK!THIS!.
+@@ -401,7 +404,8 @@ $startsh
+ # This file is generated by cflags.SH
+
+ # Used to restore possible edits by cflags.SH.
+-myccflags="$ccflags"
++myccflags="$myccflags"
++
+ # Extra warnings, used e.g. for gcc.
+ warn="$warn"
+ # Extra standardness.
+--
+2.6.0
+
diff --git a/var/spack/repos/builtin/packages/petsc/macos-clang-8.1.0.diff b/var/spack/repos/builtin/packages/petsc/macos-clang-8.1.0.diff
new file mode 100644
index 0000000000..b4384d3ac3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/petsc/macos-clang-8.1.0.diff
@@ -0,0 +1,18 @@
+diff --git a/config/BuildSystem/config/libraries.py b/config/BuildSystem/config/libraries.py
+index 0af92f0..8644b55 100644
+--- a/config/BuildSystem/config/libraries.py
++++ b/config/BuildSystem/config/libraries.py
+@@ -50,12 +50,7 @@ class Configure(config.base.Configure):
+ flagName = self.language[-1]+'SharedLinkerFlag'
+ flagSubst = self.language[-1].upper()+'_LINKER_SLFLAG'
+ dirname = os.path.dirname(library).replace('\\ ',' ').replace(' ', '\\ ').replace('\\(','(').replace('(', '\\(').replace('\\)',')').replace(')', '\\)')
+- if hasattr(self.setCompilers, flagName) and not getattr(self.setCompilers, flagName) is None:
+- return [getattr(self.setCompilers, flagName)+dirname,'-L'+dirname,'-l'+name]
+- if flagSubst in self.argDB:
+- return [self.argDB[flagSubst]+dirname,'-L'+dirname,'-l'+name]
+- else:
+- return ['-L'+dirname,' -l'+name]
++ return ['-L'+dirname,' -l'+name]
+ else:
+ return ['-l'+name]
+ if os.path.splitext(library)[1] == '.so':
diff --git a/var/spack/repos/builtin/packages/petsc/package.py b/var/spack/repos/builtin/packages/petsc/package.py
index a9d4ff6065..838369f4e4 100644
--- a/var/spack/repos/builtin/packages/petsc/package.py
+++ b/var/spack/repos/builtin/packages/petsc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,10 +37,16 @@ class Petsc(Package):
homepage = "http://www.mcs.anl.gov/petsc/index.html"
url = "http://ftp.mcs.anl.gov/pub/petsc/release-snapshots/petsc-3.5.3.tar.gz"
+ maintainers = ['balay', 'barrysmith']
+
version('develop', git='https://bitbucket.org/petsc/petsc.git', tag='master')
- version('for-pflotran-0.1.0', git='https://bitbucket.org/petsc/petsc.git',
- commit='7943f4e1472fff9cf1fc630a1100136616e4970f')
+ version('xsdk-0.2.0', git='https://bitbucket.org/petsc/petsc.git', tag='xsdk-0.2.0')
+ version('3.8.2', '00666e1c4cbfa8dd6eebf91ff8180f79')
+ version('3.8.1', '3ed75c1147800fc156fe1f1e515a68a7')
+ version('3.8.0', '02680f1f78a0d4c5a9de80a366793eb8')
+ version('3.7.7', 'c2cfb76677d32839810c4cf51a2f9cf5')
+ version('3.7.6', '977aa84b85aa3146c695592cd0a11057')
version('3.7.5', 'f00f6e6a3bac39052350dd47194b58a3')
version('3.7.4', 'aaf94fa54ef83022c14091f10866eedf')
version('3.7.2', '50da49867ce7a49e7a0c1b37f4ec7b34')
@@ -66,14 +72,28 @@ class Petsc(Package):
variant('boost', default=True, description='Activates support for Boost')
variant('hypre', default=True,
description='Activates support for Hypre (only parallel)')
- variant('mumps', default=True,
+ # Mumps is disabled by default, because it depends on Scalapack
+ # which is not portable to all HPC systems
+ variant('mumps', default=False,
description='Activates support for MUMPS (only parallel'
' and 32bit indices)')
variant('superlu-dist', default=True,
description='Activates support for SuperluDist (only parallel)')
+ variant('trilinos', default=False,
+ description='Activates support for Trilinos (only parallel)')
variant('int64', default=False,
description='Compile with 64bit indices')
+ # 3.8.0 has a build issue with MKL - so list this conflict explicitly
+ conflicts('^intel-mkl', when='@3.8.0')
+
+ # temporary workaround Clang 8.1.0 with XCode 8.3 on macOS, see
+ # https://bitbucket.org/petsc/petsc/commits/4f290403fdd060d09d5cb07345cbfd52670e3cbc
+ # the patch is an adaptation of the original commit to 3.7.5
+ if sys.platform == "darwin":
+ patch('macos-clang-8.1.0.diff',
+ when='@3.7.5%clang@8.1.0:')
+
# Virtual dependencies
# Git repository needs sowing to build Fortran interface
depends_on('sowing', when='@develop')
@@ -85,29 +105,43 @@ class Petsc(Package):
depends_on('mpi', when='+mpi')
# Build dependencies
- depends_on('python @2.6:2.7', type='build')
+ depends_on('python@2.6:2.8', type='build')
# Other dependencies
depends_on('boost', when='@:3.5+boost')
- depends_on('metis@5:~int64', when='+metis~int64')
- depends_on('metis@5:+int64', when='+metis+int64')
+ depends_on('metis@5:~int64+real64', when='+metis~int64+double')
+ depends_on('metis@5:+int64', when='+metis+int64~double')
+ depends_on('metis@5:~int64+real64', when='+metis~int64+double')
+ depends_on('metis@5:+int64', when='+metis+int64~double')
- depends_on('hdf5+mpi', when='+hdf5+mpi')
+ depends_on('hdf5+mpi+hl', when='+hdf5+mpi')
+ depends_on('zlib', when='+hdf5')
depends_on('parmetis', when='+metis+mpi')
# Hypre does not support complex numbers.
# Also PETSc prefer to build it without internal superlu, likely due to
# conflict in headers see
# https://bitbucket.org/petsc/petsc/src/90564b43f6b05485163c147b464b5d6d28cde3ef/config/BuildSystem/config/packages/hypre.py
depends_on('hypre~internal-superlu~int64', when='+hypre+mpi~complex~int64')
+ depends_on('hypre@xsdk-0.2.0~internal-superlu+int64', when='@xsdk-0.2.0+hypre+mpi~complex+int64')
+ depends_on('hypre@xsdk-0.2.0~internal-superlu~int64', when='@xsdk-0.2.0+hypre+mpi~complex~int64')
+ depends_on('hypre@develop~internal-superlu+int64', when='@develop+hypre+mpi~complex+int64')
+ depends_on('hypre@develop~internal-superlu~int64', when='@develop+hypre+mpi~complex~int64')
depends_on('hypre~internal-superlu+int64', when='+hypre+mpi~complex+int64')
depends_on('superlu-dist@:4.3~int64', when='@3.4.4:3.6.4+superlu-dist+mpi~int64')
depends_on('superlu-dist@:4.3+int64', when='@3.4.4:3.6.4+superlu-dist+mpi+int64')
- depends_on('superlu-dist@5.0.0:~int64', when='@3.7:+superlu-dist+mpi~int64')
- depends_on('superlu-dist@5.0.0:+int64', when='@3.7:+superlu-dist+mpi+int64')
- depends_on('superlu-dist@5.0.0:~int64', when='@for-pflotran-0.1.0+superlu-dist+mpi~int64')
- depends_on('superlu-dist@5.0.0:+int64', when='@for-pflotran-0.1.0+superlu-dist+mpi+int64')
+ depends_on('superlu-dist@5.0.0:~int64', when='@3.7:3.7.99+superlu-dist+mpi~int64')
+ depends_on('superlu-dist@5.0.0:+int64', when='@3.7:3.7.99+superlu-dist+mpi+int64')
+ depends_on('superlu-dist@5.2:5.2.99~int64', when='@3.8:3.8.99+superlu-dist+mpi~int64')
+ depends_on('superlu-dist@5.2:5.2.99+int64', when='@3.8:3.8.99+superlu-dist+mpi+int64')
+ depends_on('superlu-dist@xsdk-0.2.0~int64', when='@xsdk-0.2.0+superlu-dist+mpi~int64')
+ depends_on('superlu-dist@xsdk-0.2.0+int64', when='@xsdk-0.2.0+superlu-dist+mpi+int64')
+ depends_on('superlu-dist@develop~int64', when='@develop+superlu-dist+mpi~int64')
+ depends_on('superlu-dist@develop+int64', when='@develop+superlu-dist+mpi+int64')
depends_on('mumps+mpi', when='+mumps+mpi~int64')
depends_on('scalapack', when='+mumps+mpi~int64')
+ depends_on('trilinos@12.6.2:', when='@3.7.0:+trilinos+mpi')
+ depends_on('trilinos@xsdk-0.2.0', when='@xsdk-0.2.0+trilinos+mpi')
+ depends_on('trilinos@develop', when='@xdevelop+trilinos+mpi')
def mpi_dependent_options(self):
if '~mpi' in self.spec:
@@ -133,14 +167,10 @@ class Petsc(Package):
raise RuntimeError('\n'.join(errors))
else:
compiler_opts = [
- '--with-mpi=1',
- '--with-mpi-dir=%s' % self.spec['mpi'].prefix,
+ '--with-cc=%s' % self.spec['mpi'].mpicc,
+ '--with-cxx=%s' % self.spec['mpi'].mpicxx,
+ '--with-fc=%s' % self.spec['mpi'].mpifc
]
- if sys.platform != "darwin":
- compiler_opts.extend([
- '--with-cpp=cpp',
- '--with-cxxcpp=cpp',
- ])
return compiler_opts
def install(self, spec, prefix):
@@ -161,14 +191,29 @@ class Petsc(Package):
])
# Make sure we use exactly the same Blas/Lapack libraries
# across the DAG. To that end list them explicitly
- lapack_blas = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
options.extend([
'--with-blas-lapack-lib=%s' % lapack_blas.joined()
])
+ if 'trilinos' in spec:
+ options.append('--with-cxx-dialect=C++11')
+
+ # Help PETSc pick up Scalapack from MKL:
+ if 'scalapack' in spec:
+ scalapack = spec['scalapack'].libs
+ options.extend([
+ '--with-scalapack-lib=%s' % scalapack.joined(),
+ '--with-scalapack=1'
+ ])
+ else:
+ options.extend([
+ '--with-scalapack=0'
+ ])
+
# Activates library support if needed
for library in ('metis', 'boost', 'hdf5', 'hypre', 'parmetis',
- 'mumps', 'scalapack'):
+ 'mumps', 'trilinos', 'zlib'):
options.append(
'--with-{library}={value}'.format(
library=library, value=('1' if library in spec else '0'))
diff --git a/var/spack/repos/builtin/packages/pexsi/make.inc b/var/spack/repos/builtin/packages/pexsi/make.inc
index a8020fb370..ec619a7dba 100644
--- a/var/spack/repos/builtin/packages/pexsi/make.inc
+++ b/var/spack/repos/builtin/packages/pexsi/make.inc
@@ -36,7 +36,7 @@ DSUPERLU_INCLUDE = -I${DSUPERLU_DIR}/include
INCLUDES = ${PEXSI_INCLUDE} ${DSUPERLU_INCLUDE}
# Libraries
-CPP_LIB = @STDCXX_LIB @MPICXX_LIB
+CPP_LIB = @MPICXX_LIB @STDCXX_LIB
#GFORTRAN_LIB = /usr/lib/gcc/x86_64-linux-gnu/4.8/libgfortran.a
LAPACK_LIB = @LAPACK_LIBS
BLAS_LIB = @BLAS_LIBS
@@ -63,7 +63,7 @@ CXXFLAGS = ${COMPILE_FLAG} ${CPPFLAG} ${PROFILE_FLAG} ${INCLUDES}
CCDEFS = ${COMPILE_DEF}
CPPDEFS = ${COMPILE_DEF}
LOADOPTS = ${PROFILE_FLAG} ${LIBS}
-FLOADOPTS = ${PROFILE_FLAG} ${LIBS} ${CPP_LIB}
+FLOADOPTS = @FLDFLAGS ${PROFILE_FLAG} ${LIBS} ${CPP_LIB}
# Generate auto-dependencies
%.d: %.c
diff --git a/var/spack/repos/builtin/packages/pexsi/package.py b/var/spack/repos/builtin/packages/pexsi/package.py
index 9fc71d4c52..63819923af 100644
--- a/var/spack/repos/builtin/packages/pexsi/package.py
+++ b/var/spack/repos/builtin/packages/pexsi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ import shutil
from spack import *
-class Pexsi(Package):
+class Pexsi(MakefilePackage):
"""The PEXSI library is written in C++, and uses message passing interface
(MPI) to parallelize the computation on distributed memory computing
systems and achieve scalability on more than 10,000 processors.
@@ -46,20 +46,29 @@ class Pexsi(Package):
homepage = 'https://math.berkeley.edu/~linlin/pexsi/index.html'
url = 'https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v0.9.0.tar.gz'
+ # version('1.0', '4600b03e235935fe623acf500df0edfa')
+ version('0.10.2', '012f6800098671ec39c2ed7b38935e27')
+ version('0.9.2', '0ce491a3a922d271c4edf9b20aa93076')
version('0.9.0', '0c1a2de891ba1445dfc184b2fa270ed8')
depends_on('parmetis')
- depends_on('superlu-dist@3.3', when='@0.9.0')
+ depends_on('superlu-dist@3.3:3.999', when='@:0.9.0')
+ depends_on('superlu-dist@4.3:4.999', when='@0.9.2')
+ depends_on('superlu-dist@5.1.2:', when='@0.10.2:')
+
+ variant(
+ 'fortran', default=False, description='Builds the Fortran interface'
+ )
parallel = False
- def install(self, spec, prefix):
+ def edit(self, spec, prefix):
substitutions = {
'@MPICC': self.spec['mpi'].mpicc,
'@MPICXX': self.spec['mpi'].mpicxx,
'@MPIFC': self.spec['mpi'].mpifc,
- '@MPICXX_LIB': ' '.join(self.spec['mpi'].mpicxx_shared_libs),
+ '@MPICXX_LIB': self.spec['mpi:cxx'].libs.joined(),
'@RANLIB': 'ranlib',
'@PEXSI_STAGE': self.stage.source_path,
'@SUPERLU_PREFIX': self.spec['superlu-dist'].prefix,
@@ -67,11 +76,16 @@ class Pexsi(Package):
'@PARMETIS_PREFIX': self.spec['parmetis'].prefix,
'@LAPACK_PREFIX': self.spec['lapack'].prefix,
'@BLAS_PREFIX': self.spec['blas'].prefix,
- '@LAPACK_LIBS': self.spec['lapack'].lapack_libs.joined(),
- '@BLAS_LIBS': self.spec['lapack'].blas_libs.joined(),
- '@STDCXX_LIB': ' '.join(self.compiler.stdcxx_libs)
+ '@LAPACK_LIBS': self.spec['lapack'].libs.joined(),
+ '@BLAS_LIBS': self.spec['blas'].libs.joined(),
+ # FIXME : what to do with compiler provided libraries ?
+ '@STDCXX_LIB': ' '.join(self.compiler.stdcxx_libs),
+ '@FLDFLAGS': ''
}
+ if '@0.9.2' in self.spec:
+ substitutions['@FLDFLAGS'] = '-Wl,--allow-multiple-definition'
+
template = join_path(
os.path.dirname(inspect.getmodule(self).__file__),
'make.inc'
@@ -84,20 +98,29 @@ class Pexsi(Package):
for key, value in substitutions.items():
filter_file(key, value, makefile)
- make()
+ def build(self, spec, prefix):
+ super(Pexsi, self).build(spec, prefix)
+ if '+fortran' in self.spec:
+ make('-C', 'fortran')
+
+ def install(self, spec, prefix):
+
# 'make install' does not exist, despite what documentation says
mkdirp(self.prefix.lib)
+
install(
join_path(self.stage.source_path, 'src', 'libpexsi_linux.a'),
join_path(self.prefix.lib, 'libpexsi.a')
)
+
install_tree(
join_path(self.stage.source_path, 'include'),
self.prefix.include
)
+
# fortran "interface"
- make('-C', 'fortran')
- install_tree(
- join_path(self.stage.source_path, 'fortran'),
- join_path(self.prefix, 'fortran')
- )
+ if '+fortran' in self.spec:
+ install_tree(
+ join_path(self.stage.source_path, 'fortran'),
+ join_path(self.prefix, 'fortran')
+ )
diff --git a/var/spack/repos/builtin/packages/pfft/package.py b/var/spack/repos/builtin/packages/pfft/package.py
index 575f0af3c5..93f0222a48 100644
--- a/var/spack/repos/builtin/packages/pfft/package.py
+++ b/var/spack/repos/builtin/packages/pfft/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -39,26 +39,53 @@ class Pfft(AutotoolsPackage):
depends_on('fftw+mpi+pfft_patches')
depends_on('mpi')
- def install(self, spec, prefix):
+ def configure(self, spec, prefix):
options = ['--prefix={0}'.format(prefix)]
if not self.compiler.f77 or not self.compiler.fc:
options.append("--disable-fortran")
- configure(*options)
- make()
- if self.run_tests:
- make("check")
- make("install")
+ configure = Executable('../configure')
+
+ if '+double' in spec['fftw']:
+ with working_dir('double', create=True):
+ configure(*options)
+ if '+float' in spec['fftw']:
+ with working_dir('float', create=True):
+ configure('--enable-float', *options)
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double', create=True):
+ configure('--enable-long-double', *options)
+
+ def build(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make()
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make()
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make()
+ def check(self):
+ spec = self.spec
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("check")
if '+float' in spec['fftw']:
- configure('--enable-float', *options)
- make()
- if self.run_tests:
+ with working_dir('float'):
make("check")
- make("install")
if '+long_double' in spec['fftw']:
- configure('--enable-long-double', *options)
- make()
- if self.run_tests:
+ with working_dir('long-double'):
make("check")
- make("install")
+
+ def install(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("install")
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make("install")
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make("install")
diff --git a/var/spack/repos/builtin/packages/pflotran/package.py b/var/spack/repos/builtin/packages/pflotran/package.py
index 347f792453..e04e33a1db 100644
--- a/var/spack/repos/builtin/packages/pflotran/package.py
+++ b/var/spack/repos/builtin/packages/pflotran/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,13 +33,12 @@ class Pflotran(AutotoolsPackage):
homepage = "http://www.pflotran.org"
- version('develop', hg='https://bitbucket.org/pflotran/pflotran-xsdk')
- version('0.1.0', hg='https://bitbucket.org/pflotran/pflotran-xsdk',
- commmit='4734cf5e606b')
+ version('develop', git='https://bitbucket.org/pflotran/pflotran')
+ version('xsdk-0.2.0', git='https://bitbucket.org/pflotran/pflotran', tag='master')
depends_on('mpi')
- depends_on('hdf5@1.8.12+mpi+fortran')
- depends_on('petsc@develop+hdf5+metis',when='@develop')
- depends_on('petsc@for-pflotran-0.1.0+hdf5+metis',when='@0.1.0')
+ depends_on('hdf5@1.8.12:+mpi+fortran')
+ depends_on('petsc@develop+hdf5+metis', when='@develop')
+ depends_on('petsc@xsdk-0.2.0+hdf5+metis', when='@xsdk-0.2.0')
parallel = False
diff --git a/var/spack/repos/builtin/packages/pgdspider/package.py b/var/spack/repos/builtin/packages/pgdspider/package.py
new file mode 100644
index 0000000000..39a518113f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pgdspider/package.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/spack/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 *
+import os.path
+
+
+class Pgdspider(Package):
+ """"PGDSpider is a powerful automated data conversion tool for population
+ genetic and genomics programs"""
+
+ homepage = "http://www.cmpg.unibe.ch/software/PGDSpider"
+ url = "http://www.cmpg.unibe.ch/software/PGDSpider/PGDSpider_2.1.1.2.zip"
+
+ version('2.1.1.2', '170e5b4a002277ff66866486da920693')
+
+ depends_on('java', type=('build', 'run'))
+ depends_on('bcftools')
+ depends_on('bwa')
+ depends_on('samtools')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ jar_file = 'PGDSpider{0}-cli.jar'.format(self.version.up_to(1))
+ install(jar_file, prefix.bin)
+
+ script_sh = join_path(os.path.dirname(__file__), "pgdspider.sh")
+ script = prefix.bin.pgdspider
+ install(script_sh, script)
+ set_executable(script)
+
+ java = self.spec['java'].prefix.bin.java
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('pgdspider.jar', join_path(prefix.bin, jar_file),
+ script, **kwargs)
diff --git a/var/spack/repos/builtin/packages/pgdspider/pgdspider.sh b/var/spack/repos/builtin/packages/pgdspider/pgdspider.sh
new file mode 100644
index 0000000000..5ac0f66c08
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pgdspider/pgdspider.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the astral jar file
+java $JAVA_ARGS $JAVA_OPTS -jar pgdspider.jar "$@"
diff --git a/var/spack/repos/builtin/packages/pgi/package.py b/var/spack/repos/builtin/packages/pgi/package.py
index e8a2f53497..63592d6cc6 100644
--- a/var/spack/repos/builtin/packages/pgi/package.py
+++ b/var/spack/repos/builtin/packages/pgi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from spack.util.prefix import Prefix
import os
@@ -30,19 +31,20 @@ class Pgi(Package):
"""PGI optimizing multi-core x64 compilers for Linux, MacOS & Windows
with support for debugging and profiling of local MPI processes.
- Note: The PGI compilers are licensed software. You will need to create
- an account on the PGI homepage and download PGI yourself. Once the download
- finishes, rename the file (which may contain information such as the
- architecture) to the format: pgi-<version>.tar.gz. Spack will search your
- current directory for a file of this format. Alternatively, add this
+ Note: The PGI compilers are licensed software. You will need to create an
+ account on the PGI homepage and download PGI yourself. Spack will search
+ your current directory for the download tarball. Alternatively, add this
file to a mirror so that Spack can find it. For instructions on how to
set up a mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
homepage = "http://www.pgroup.com/"
- version('16.5', 'a40e8852071b5d600cb42f31631b3de1')
- version('16.3', '618cb7ddbc57d4e4ed1f21a0ab25f427')
- version('15.7', '84a689217b17cdaf78c39270c70bea5d')
+ version('17.4', 'a311d2756ddda657860bad8e5725597b')
+ version('17.3', '6eefc42f85e756cbaba76467ed640902')
+ version('16.10', '9bb6bfb7b1052f9e6a45829ba7a24e47')
+ version('16.5', 'a40e8852071b5d600cb42f31631b3de1')
+ version('16.3', '618cb7ddbc57d4e4ed1f21a0ab25f427')
+ version('15.7', '84a689217b17cdaf78c39270c70bea5d')
variant('network', default=True,
description="Perform a network install")
@@ -99,3 +101,17 @@ class Pgi(Package):
# Run install script
os.system("./install")
+
+ def setup_environment(self, spack_env, run_env):
+ prefix = Prefix(join_path(self.prefix, 'linux86-64', self.version))
+
+ run_env.set('CC', join_path(prefix.bin, 'pgcc'))
+ run_env.set('CXX', join_path(prefix.bin, 'pgc++'))
+ run_env.set('F77', join_path(prefix.bin, 'pgfortran'))
+ run_env.set('FC', join_path(prefix.bin, 'pgfortran'))
+
+ run_env.prepend_path('PATH', prefix.bin)
+ run_env.prepend_path('CPATH', prefix.include)
+ run_env.prepend_path('LIBRARY_PATH', prefix.lib)
+ run_env.prepend_path('LD_LIBRARY_PATH', prefix.lib)
+ run_env.prepend_path('MANPATH', prefix.man)
diff --git a/var/spack/repos/builtin/packages/phasta/package.py b/var/spack/repos/builtin/packages/phasta/package.py
new file mode 100644
index 0000000000..a73c90848b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/phasta/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Phasta(CMakePackage):
+ """SCOREC RPI's Parallel Hierarchic Adaptive Stabilized Transient Analysis
+ (PHASTA) of compressible and incompressible Navier Stokes equations."""
+
+ homepage = "https://www.scorec.rpi.edu/software.php"
+ url = "https://github.com/PHASTA/phasta.git"
+
+ version('0.0.1', git='https://github.com/PHASTA/phasta.git',
+ commit='11f431f2d1a53a529dab4b0f079ab8aab7ca1109')
+ version('develop', git='https://github.com/PHASTA/phasta.git',
+ branch='master')
+
+ depends_on('mpi')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DPHASTA_USE_MPI=ON',
+ '-DPHASTA_BUILD_CONVERTERIO=OFF',
+ '-DPHASTA_BUILD_ACUSTAT=OFF',
+ '-DPHASTA_BUILD_M2N=OFF',
+ '-DPHASTA_BUILD_M2NFixBnd=OFF',
+ '-DPHASTA_USE_LESLIB=OFF',
+ '-DPHASTA_USE_PETSC=OFF',
+ '-DPHASTA_USE_SVLS=ON',
+ '-DPHASTA_INCOMPRESSIBLE=ON',
+ '-DPHASTA_COMPRESSIBLE=ON',
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+ ]
+
+ return args
diff --git a/var/spack/repos/builtin/packages/phylip/package.py b/var/spack/repos/builtin/packages/phylip/package.py
new file mode 100644
index 0000000000..1ebe04f4ca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/phylip/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Phylip(Package):
+ """PHYLIP (the PHYLogeny Inference Package) is a package of programs for
+ inferring phylogenies (evolutionary trees)."""
+
+ homepage = "http://evolution.genetics.washington.edu/phylip/"
+ url = "http://evolution.gs.washington.edu/phylip/download/phylip-3.696.tar.gz"
+
+ version('3.696', 'dbe5abc26f6089ead3dba41c2db526ee')
+
+ def install(self, spec, prefix):
+ with working_dir('src'):
+ if self.spec.satisfies('platform=darwin'):
+ make('all', '-f', 'Makefile.osx')
+ make('put', '-f', 'Makefile.osx')
+ else:
+ make('all', '-f', 'Makefile.unx')
+ make('put', '-f', 'Makefile.unx')
+ install_tree('exe', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/picard/package.py b/var/spack/repos/builtin/packages/picard/package.py
new file mode 100644
index 0000000000..744479a7f3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/picard/package.py
@@ -0,0 +1,75 @@
+##############################################################################
+# 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/spack/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 *
+from shutil import copyfile
+import glob
+import os.path
+import re
+
+
+class Picard(Package):
+ """Picard is a set of command line tools for manipulating high-throughput
+ sequencing (HTS) data and formats such as SAM/BAM/CRAM and VCF.
+ """
+
+ homepage = "http://broadinstitute.github.io/picard/"
+ url = "https://github.com/broadinstitute/picard/releases/download/2.9.2/picard.jar"
+
+ # They started distributing a single jar file at v2.6.0, prior to
+ # that it was a .zip file with multiple .jar and .so files
+ version('2.9.2', '0449279a6a89830917e8bcef3a976ef7', expand=False,
+ url="https://github.com/broadinstitute/picard/releases/download/2.9.2/picard.jar")
+ version('1.140', '308f95516d94c1f3273a4e7e2b315ec2',
+ url='https://github.com/broadinstitute/picard/releases/download/1.140/picard-tools-1.140.zip')
+
+ depends_on('java@8:', type='run')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ # The list of files to install varies with release...
+ # ... but skip the spack-{build.env}.out files.
+ files = [x for x in glob.glob("*") if not re.match("^spack-", x)]
+ for f in files:
+ install(f, prefix.bin)
+
+ # Set up a helper script to call java on the jar file,
+ # explicitly codes the path for java and the jar file.
+ script_sh = join_path(os.path.dirname(__file__), "picard.sh")
+ script = join_path(prefix.bin, "picard")
+ copyfile(script_sh, script)
+ set_executable(script)
+
+ # Munge the helper script to explicitly point to java and the
+ # jar file.
+ java = join_path(self.spec['java'].prefix, 'bin', 'java')
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('picard.jar', join_path(prefix.bin, 'picard.jar'),
+ script, **kwargs)
+
+ def setup_environment(self, spack_env, run_env):
+ """The Picard docs suggest setting this as a convenience."""
+ run_env.prepend_path('PICARD',
+ join_path(self.prefix, 'bin', 'picard.jar'))
diff --git a/var/spack/repos/builtin/packages/picard/picard.sh b/var/spack/repos/builtin/packages/picard/picard.sh
new file mode 100644
index 0000000000..6d4864f118
--- /dev/null
+++ b/var/spack/repos/builtin/packages/picard/picard.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the picard jar file
+java -jar picard.jar "$@"
diff --git a/var/spack/repos/builtin/packages/pidx/package.py b/var/spack/repos/builtin/packages/pidx/package.py
index e19bb9e470..bc3977d733 100644
--- a/var/spack/repos/builtin/packages/pidx/package.py
+++ b/var/spack/repos/builtin/packages/pidx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Pidx(Package):
+class Pidx(CMakePackage):
"""PIDX Parallel I/O Library.
PIDX is an efficient parallel I/O library that reads and writes
@@ -37,11 +37,5 @@ class Pidx(Package):
version('1.0', git='https://github.com/sci-visus/PIDX.git',
commit='6afa1cf71d1c41263296dc049c8fabaf73c296da')
- depends_on('cmake', type='build')
- depends_on("mpi")
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
- make()
- make("install")
+ depends_on('cmake@2.8.4:', type='build')
+ depends_on('mpi')
diff --git a/var/spack/repos/builtin/packages/pigz/package.py b/var/spack/repos/builtin/packages/pigz/package.py
new file mode 100644
index 0000000000..fe933c4f54
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pigz/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Pigz(MakefilePackage):
+ """A parallel implementation of gzip for modern multi-processor,
+ multi-core machines."""
+
+ homepage = "http://zlib.net/pigz/"
+ url = "http://zlib.net/pigz/pigz-2.3.4.tar.gz"
+
+ version('2.3.4', '08e6b2e682bbf65ccf12c8966d633fc6')
+
+ depends_on('zlib')
+
+ def build(self, spec, prefix):
+ make()
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.man.man1)
+ install('pigz', "%s/pigz" % prefix.bin)
+ install('pigz.1', "%s/pigz.1" % prefix.man.man1)
diff --git a/var/spack/repos/builtin/packages/piranha/package.py b/var/spack/repos/builtin/packages/piranha/package.py
index dbf949f000..9f4b26d050 100644
--- a/var/spack/repos/builtin/packages/piranha/package.py
+++ b/var/spack/repos/builtin/packages/piranha/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Piranha(Package):
+class Piranha(CMakePackage):
"""Piranha is a computer-algebra library for the symbolic manipulation of
sparse multivariate polynomials and other closely-related symbolic objects
(such as Poisson series)."""
@@ -40,7 +40,7 @@ class Piranha(Package):
description='Build the Python bindings')
# Build dependencies
- depends_on('cmake@3.0:', type='build')
+ depends_on('cmake@3.2.0:', type='build')
extends('python', when='+pyranha')
depends_on('python@2.6:', type='build', when='+pyranha')
@@ -53,21 +53,8 @@ class Piranha(Package):
depends_on('gmp') # mpir is a drop-in replacement for this
depends_on('mpfr') # Could also be built against mpir
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
-
- # Python bindings
- options.extend([
- '-DBUILD_PYRANHA=%s' % (
- 'ON' if '+python' in spec else 'OFF'),
+ def cmake_args(self):
+ return [
+ '-DBUILD_PYRANHA=%s' % ('ON' if '+python' in self.spec else 'OFF'),
'-DBUILD_TESTS:BOOL=ON',
- ])
-
- with working_dir('spack-build', create=True):
- cmake('..', *options)
-
- make()
- make('install')
- if self.run_tests:
- make('test')
+ ]
diff --git a/var/spack/repos/builtin/packages/pixman/package.py b/var/spack/repos/builtin/packages/pixman/package.py
index c780fd64aa..4191550803 100644
--- a/var/spack/repos/builtin/packages/pixman/package.py
+++ b/var/spack/repos/builtin/packages/pixman/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import sys
-class Pixman(Package):
+class Pixman(AutotoolsPackage):
"""The Pixman package contains a library that provides low-level
pixel manipulation features such as image compositing and
trapezoid rasterization."""
@@ -37,18 +37,16 @@ class Pixman(Package):
version('0.34.0', 'e80ebae4da01e77f68744319f01d52a3')
version('0.32.6', '3a30859719a41bd0f5cccffbfefdd4c2')
- depends_on('pkg-config', type='build')
+ depends_on('pkg-config@0.9.0:', type='build')
depends_on('libpng')
- def install(self, spec, prefix):
- config_args = ["--prefix=" + prefix,
- "--disable-gtk"]
+ def configure_args(self):
+ args = [
+ '--enable-libpng',
+ '--disable-gtk',
+ ]
- if sys.platform == "darwin":
- config_args.append("--disable-mmx")
+ if sys.platform == 'darwin':
+ args.append('--disable-mmx')
- configure(*config_args)
-
- make()
- make('check')
- make('install')
+ return args
diff --git a/var/spack/repos/builtin/packages/pkg-config/package.py b/var/spack/repos/builtin/packages/pkg-config/package.py
index a98f65fb07..22a8833a11 100644
--- a/var/spack/repos/builtin/packages/pkg-config/package.py
+++ b/var/spack/repos/builtin/packages/pkg-config/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,32 +25,45 @@
from spack import *
-class PkgConfig(Package):
+class PkgConfig(AutotoolsPackage):
"""pkg-config is a helper tool used when compiling applications
and libraries"""
homepage = "http://www.freedesktop.org/wiki/Software/pkg-config/"
- url = "http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz"
+ url = "http://pkgconfig.freedesktop.org/releases/pkg-config-0.29.2.tar.gz"
+ version('0.29.2', 'f6e931e319531b736fadc017f470e68a')
version('0.29.1', 'f739a28cae4e0ca291f82d1d41ef107d')
version('0.28', 'aa3c86e67551adc3ac865160e34a2a0d')
- parallel = False
variant('internal_glib', default=True,
description='Builds with internal glib')
# The following patch is needed for gcc-6.1
- patch('g_date_strftime.patch')
+ patch('g_date_strftime.patch', when='@:0.29.1')
+
+ parallel = False
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """spack built pkg-config on cray's requires adding /usr/local/
+ and /usr/lib64/ to PKG_CONFIG_PATH in order to access cray '.pc'
+ files.
+ Adds the ACLOCAL path for autotools."""
+ spack_env.append_path('ACLOCAL_PATH',
+ join_path(self.prefix.share, 'aclocal'))
+ if 'platform=cray' in self.spec:
+ spack_env.append_path('PKG_CONFIG_PATH',
+ '/usr/lib64/pkgconfig')
+ spack_env.append_path('PKG_CONFIG_PATH',
+ '/usr/local/lib64/pkgconfig')
+
+ def configure_args(self):
+ config_args = ['--enable-shared']
- def install(self, spec, prefix):
- args = ["--prefix={0}".format(prefix),
- "--enable-shared"]
- if "+internal_glib" in spec:
+ if '+internal_glib' in self.spec:
# There's a bootstrapping problem here;
# glib uses pkg-config as well, so break
# the cycle by using the internal glib.
- args.append("--with-internal-glib")
- configure(*args)
+ config_args.append('--with-internal-glib')
- make()
- make("install")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/pkgconf/package.py b/var/spack/repos/builtin/packages/pkgconf/package.py
new file mode 100644
index 0000000000..7b4b570945
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pkgconf/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Pkgconf(AutotoolsPackage):
+ """pkgconf is a program which helps to configure compiler and linker
+ flags for development frameworks. It is similar to pkg-config from
+ freedesktop.org, providing additional functionality while also
+ maintaining compatibility."""
+
+ homepage = "http://pkgconf.org/"
+ url = "https://distfiles.dereferenced.org/pkgconf/pkgconf-1.3.8.tar.xz"
+
+ version('1.3.8', '484ba3360d983ce07416843d5bc916a8')
+
+ @run_after('install')
+ def link_pkg_config(self):
+ symlink('pkgconf', '{0}/pkg-config'.format(self.prefix.bin))
+ symlink('pkgconf.1',
+ '{0}/pkg-config.1'.format(self.prefix.share.man.man1))
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/fortran.patch b/var/spack/repos/builtin/packages/planck-likelihood/fortran.patch
new file mode 100644
index 0000000000..b63d268eca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/planck-likelihood/fortran.patch
@@ -0,0 +1,11 @@
+--- a/src/bflike/bflike_smw.f90
++++ b/src/bflike/bflike_smw.f90
+@@ -1600,6 +1600,8 @@
+ ok = .false.
+
+ call fid%init()
++
++ unit = 3001
+
+ open(unit = unit,file=trim(filein),status='old',action='read',&
+ iostat=istat)
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/make.patch b/var/spack/repos/builtin/packages/planck-likelihood/make.patch
new file mode 100644
index 0000000000..6f3ce81b80
--- /dev/null
+++ b/var/spack/repos/builtin/packages/planck-likelihood/make.patch
@@ -0,0 +1,21 @@
+--- a/Makefile
++++ b/Makefile
+@@ -336,15 +336,15 @@
+
+ $(BDIR)/libclik_f90.$(SO): $(BDIR)/libclik.$(SO) $(addprefix $(ODIR)/,clik_fortran.o clik.f90.o)
+ @$(ECHO) "build $(BLUE_COLOR)$(@) $(NO_COLOR)"
+- @$(LD) $(SHARED) $(LDFLAG) $(LAPACK) -L$(BDIR) -lclik $^ -o $@
++ @$(LD) -o $@ $(addprefix $(ODIR)/,clik_fortran.o clik.f90.o) -L$(BDIR) -lclik $(SHARED) $(LAPACK) $(LDFLAG)
+
+ $(BDIR)/clik_example_C: $(ODIR)/clik_example_c.o $(BDIR)/libclik.$(SO)
+ @$(ECHO) "build $(BLUE_COLOR)$(@) $(NO_COLOR)"
+- @$(CC) $(LDFLAG) $(LAPACK) -L$(BDIR) -lclik $< -o $@
++ @$(CC) -o $@ $(ODIR)/clik_example_c.o -L$(BDIR) -lclik $(LAPACK) $(LDFLAG)
+
+ $(BDIR)/clik_example_f90: $(ODIR)/clik_example_f90.f90.o $(BDIR)/libclik_f90.$(SO)
+ @$(ECHO) "build $(BLUE_COLOR)$(@) $(NO_COLOR)"
+- @$(FC) $(LDFLAG) $(LAPACK) -L$(BDIR) -lclik_f90 -lclik $< -o $@
++ @$(FC) -o $@ $(ODIR)/clik_example_f90.f90.o -L$(BDIR) -lclik_f90 -lclik $(LAPACK) $(LDFLAG)
+
+ $(BDIR)/liblapack_clik.$(SO): |$(BDIR)
+ ifndef MKL_LIB_FULLPATH
diff --git a/var/spack/repos/builtin/packages/planck-likelihood/package.py b/var/spack/repos/builtin/packages/planck-likelihood/package.py
new file mode 100644
index 0000000000..a92fc328db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/planck-likelihood/package.py
@@ -0,0 +1,148 @@
+##############################################################################
+# 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/spack/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 PlanckLikelihood(Package):
+ """2015 Cosmic Microwave Background (CMB) spectra and likelihood code"""
+
+ homepage = "https://wiki.cosmos.esa.int/planckpla2015/index.php/CMB_spectrum_%26_Likelihood_Code"
+ url = "http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Code-v2.0.R2.00.tar.bz2"
+
+ version('2.00', '7a081679ff249dc4f94fb7177e16e818',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Code-v2.0.R2.00.tar.bz2")
+
+ variant('lensing-ext', default=False,
+ description="Provide lensing-ext data")
+ variant('plik-DS', default=False,
+ description="Provide plik-DS data")
+ variant('plik-HM-ext', default=False,
+ description="Provide plik-HM-ext data")
+ variant('plik-unbinned', default=False,
+ description="Provide plik-unbinned data")
+
+ patch('fortran.patch')
+ patch('make.patch')
+
+ resource(
+ name='baseline',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Data-baseline_R2.00.tar.gz",
+ md5='7e784819cea65dbc290ea3619420295a',
+ destination='.')
+ resource(
+ name='lensing-ext',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Data-extra-lensing-ext.R2.00.tar.gz",
+ md5='091736f73b47a09162050bee27d68399',
+ destination='.',
+ when='+lensing-ext')
+ resource(
+ name='plik-DS',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Data-extra-plik-DS.R2.00.tar.gz",
+ md5='76ac04f989025eecab3825aba7e41f36',
+ destination='.',
+ when='+plik-DS')
+ resource(
+ name='plik-HM-ext',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Data-extra-plik-HM-ext.R2.00.tar.gz",
+ md5='1c3bd8221f973b7bf7e76647451fd6e5',
+ destination='.',
+ when='+plik-HM-ext')
+ resource(
+ name='plik-unbinned',
+ url="http://irsa.ipac.caltech.edu/data/Planck/release_2/software/COM_Likelihood_Data-extra-plik-unbinned.R2.00.tar.gz",
+ md5='c5869aa6b6581b6863d2a6e0ffd3826c',
+ destination='.',
+ when='+plik-unbinned')
+
+ depends_on('blas')
+ depends_on('cfitsio +shared')
+ depends_on('lapack')
+
+ # Note: Could also install Python bindings
+
+ parallel = False
+
+ def install(self, spec, prefix):
+ # Configure
+
+ # Don't hide build commands
+ filter_file("^\t@", "\t", "Makefile")
+
+ makeflags = [
+ 'PREFIX=%s' % prefix,
+ 'COLORS=0',
+ 'CFITSIOPATH=%s' % spec['cfitsio'].prefix,
+ 'CC=cc',
+ 'FC=fc',
+ 'IFORTLIBPATH=',
+ 'IFORTRUNTIME=-lintlc -limf -lsvml -liomp5 -lifportmt -lifcoremt',
+ 'GFORTRANLIBPATH=',
+ 'GFORTRANRUNTIME=-lgfortran -lgomp',
+ 'LAPACKLIBPATH=',
+ 'LAPACK=%s' % (spec['lapack'].libs + spec['blas'].libs).ld_flags,
+ 'COPENMP=%s' % self.compiler.openmp_flag,
+ 'FOPENMP=%s' % self.compiler.openmp_flag,
+ ]
+
+ # Build
+ make(*makeflags)
+
+ # Install
+ make('install', *makeflags)
+ fix_darwin_install_name(prefix.lib)
+ dirs = ['plc_2.0']
+ if '+lensing-ext' in spec:
+ dirs.append('lensing_ext')
+ if '+plik-DS' in spec:
+ dirs.append('plik_DS')
+ if '+plik-HM-ext' in spec:
+ dirs.append('plik_HM_ext')
+ if '+plik-unbinned' in spec:
+ dirs.append('plik_unbinned')
+ for dir in dirs:
+ install_tree(dir, join_path(prefix, 'share', 'clik', dir))
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ prefix = self.prefix
+ spack_env.set('CLIK_PATH', prefix)
+ spack_env.set('CLIK_DATA', join_path(prefix, 'share', 'clik'))
+ spack_env.set('CLIK_PLUGIN', 'rel2015')
+
+ def setup_environment(self, spack_env, run_env):
+ prefix = self.prefix
+ run_env.set('CLIK_PATH', prefix)
+ run_env.set('CLIK_DATA', join_path(prefix, 'share', 'clik'))
+ run_env.set('CLIK_PLUGIN', 'rel2015')
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ prefix = self.prefix
+ clik_example_C = Executable(join_path(prefix.bin, 'clik_example_C'))
+ with working_dir('spack-check', create=True):
+ clik_example_C(join_path(prefix, 'share', 'clik',
+ 'plc_2.0', 'hi_l', 'plik',
+ 'plik_dx11dr2_HM_v18_TT.clik'))
diff --git a/var/spack/repos/builtin/packages/plasma/package.py b/var/spack/repos/builtin/packages/plasma/package.py
new file mode 100644
index 0000000000..46b662d63d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/plasma/package.py
@@ -0,0 +1,90 @@
+##############################################################################
+# Copyright (c) 2017, Innovative Computing Laboratory
+# Produced at the Innovative Computing Laboratory.
+#
+# Created by Piotr Luszczek, luszczek@icl.utk.edu, All rights reserved.
+#
+# For details, see https://github.com/spack/spack
+#
+##############################################################################
+#
+from spack import *
+
+
+class Plasma(MakefilePackage):
+ """Parallel Linear Algebra Software for Multicore Architectures, PLASMA is
+ a software package for solving problems in dense linear algebra using
+ multicore processors and Xeon Phi coprocessors. PLASMA provides
+ implementations of state-of-the-art algorithms using cutting-edge task
+ scheduling techniques. PLASMA currently offers a collection of routines for
+ solving linear systems of equations, least squares problems, eigenvalue
+ problems, and singular value problems."""
+
+ homepage = "https://bitbucket.org/icl/plasma/"
+ url = "https://bitbucket.org/icl/plasma/downloads/plasma-17.1.tar.gz"
+
+ version("17.1", "64b410b76023a41b3f07a5f0dca554e1")
+
+ version("develop", hg="https://luszczek@bitbucket.org/icl/plasma")
+
+ depends_on("blas")
+ depends_on("lapack")
+
+ conflicts("atlas") # does not have LAPACKE interface
+ conflicts("netlib-lapack@:2.999") # missing LAPACKE features
+ # clashes with OpenBLAS declarations and has a problem compiling on its own
+ conflicts("cblas")
+ conflicts("openblas-with-lapack") # incomplete LAPACK implementation
+ conflicts("veclibfort")
+
+ # only GCC 7+ and higher have sufficient support for OpenMP 4+ tasks+deps
+ conflicts("%gcc@:6.999")
+ conflicts("%cce")
+ conflicts("%clang")
+ conflicts("%intel")
+ conflicts("%nag")
+ conflicts("%pgi")
+ conflicts("%xl")
+ conflicts("%xl_r")
+
+ patch("remove_absolute_mkl_include.patch", when="@17.1")
+
+ def edit(self, spec, prefix):
+ # copy "make.inc.mkl-gcc" provided by default into "make.inc"
+ open("make.inc", "w").write(open("make.inc.mkl-gcc").read())
+
+ make_inc = FileFilter("make.inc")
+
+ if not spec.satisfies("^mkl"):
+ make_inc.filter("-DPLASMA_WITH_MKL", "") # not using MKL
+
+ header_flags = ""
+ # accumulate CPP flags for headers: <cblas.h> and <lapacke.h>
+ for dep in ("blas", "lapack"):
+ try: # in case the dependency does not provide header flags
+ header_flags += " " + spec[dep].headers.cpp_flags
+ except AttributeError:
+ pass
+
+ make_inc.filter("CFLAGS +[+]=", "CFLAGS += " + header_flags + " ")
+
+ # pass prefix variable from "make.inc" to "Makefile"
+ make_inc.filter("# --*", "prefix={0}".format(self.prefix))
+
+ # make sure CC variable comes from build environment
+ make_inc.filter("CC *[?]*= * .*cc", "")
+
+ @property
+ def build_targets(self):
+ targets = list()
+
+ # use $CC set by Spack
+ targets.append("CC = {0}".format(self.compiler.cc))
+
+ if self.spec.satisfies("^mkl"):
+ targets.append("MKLROOT = {0}/mkl".format(env["MKLROOT"]))
+
+ # pass BLAS library flags
+ targets.append("LIBS = {0}".format(self.spec["blas"].libs.ld_flags))
+
+ return targets
diff --git a/var/spack/repos/builtin/packages/plasma/remove_absolute_mkl_include.patch b/var/spack/repos/builtin/packages/plasma/remove_absolute_mkl_include.patch
new file mode 100644
index 0000000000..2c9ef151e8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/plasma/remove_absolute_mkl_include.patch
@@ -0,0 +1,55 @@
+--- a/compute/zgbtrf.c 2017-01-13 13:59:46.000000000 -0500
++++ b/compute/zgbtrf.c 2017-09-21 17:18:46.550538802 -0400
+@@ -18,7 +18,7 @@
+ #include "plasma_types.h"
+ #include "plasma_workspace.h"
+
+-#include "mkl_lapacke.h"
++#include "core_lapack.h"
+
+ /***************************************************************************//**
+ *
+--- a/compute/zgetrf.c 2017-01-13 13:59:46.000000000 -0500
++++ b/compute/zgetrf.c 2017-09-21 17:18:46.550538802 -0400
+@@ -18,7 +18,7 @@
+ #include "plasma_types.h"
+ #include "plasma_workspace.h"
+
+-#include "mkl_lapacke.h"
++#include "core_lapack.h"
+
+ /***************************************************************************//**
+ *
+--- a/compute/zgetrs.c 2017-01-13 13:59:46.000000000 -0500
++++ b/compute/zgetrs.c 2017-09-21 17:18:46.550538802 -0400
+@@ -18,7 +18,7 @@
+ #include "plasma_types.h"
+ #include "plasma_workspace.h"
+
+-#include "mkl_lapacke.h"
++#include "core_lapack.h"
+
+ /***************************************************************************//**
+ *
+--- a/compute/zgesv.c 2017-01-13 13:59:46.000000000 -0500
++++ b/compute/zgesv.c 2017-09-21 17:18:46.550538802 -0400
+@@ -18,7 +18,7 @@
+ #include "plasma_types.h"
+ #include "plasma_workspace.h"
+
+-#include "mkl_lapacke.h"
++#include "core_lapack.h"
+
+ /***************************************************************************//**
+ *
+--- a/compute/zgbsv.c 2017-01-13 13:59:46.000000000 -0500
++++ b/compute/zgbsv.c 2017-09-21 17:18:46.550538802 -0400
+@@ -18,7 +18,7 @@
+ #include "plasma_types.h"
+ #include "plasma_workspace.h"
+
+-#include "mkl_lapacke.h"
++#include "core_lapack.h"
+
+ /***************************************************************************//**
+ *
diff --git a/var/spack/repos/builtin/packages/plink/package.py b/var/spack/repos/builtin/packages/plink/package.py
new file mode 100644
index 0000000000..b6df013978
--- /dev/null
+++ b/var/spack/repos/builtin/packages/plink/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Plink(Package):
+ """PLINK is a free, open-source whole genome association analysis toolset,
+ designed to perform a range of basic, large-scale analyses in a
+ computationally efficient manner."""
+
+ homepage = "https://www.cog-genomics.org/plink/1.9/"
+
+ version('1.9', 'a2325881594856c0f1b7523290d1e04f',
+ url='https://www.cog-genomics.org/static/bin/plink170815/plink_linux_x86_64.zip')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('plink', prefix.bin)
+ install('prettify', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/plumed/package.py b/var/spack/repos/builtin/packages/plumed/package.py
index 60dfdf7405..cac4f4254f 100644
--- a/var/spack/repos/builtin/packages/plumed/package.py
+++ b/var/spack/repos/builtin/packages/plumed/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,12 +22,12 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import subprocess
+import collections
from spack import *
-class Plumed(Package):
+class Plumed(AutotoolsPackage):
"""PLUMED is an open source library for free energy calculations in
molecular systems which works together with some of the most popular
molecular dynamics engines.
@@ -43,17 +43,21 @@ class Plumed(Package):
homepage = 'http://www.plumed.org/'
url = 'https://github.com/plumed/plumed2/archive/v2.2.3.tar.gz'
+ version('2.3.3', '9f5729e406e79a06a16976fcb020e024')
+ version('2.3.0', 'a9b5728f115dca8f0519111f1f5a6fa5')
+ version('2.2.4', 'afb00da25a3fbd47acf377e53342059d')
version('2.2.3', 'a6e3863e40aac07eb8cf739cbd14ecf8')
# Variants. PLUMED by default builds a number of optional modules.
# The ones listed here are not built by default for various reasons,
# such as stability, lack of testing, or lack of demand.
- variant('crystallization', default=False,
- description='Build support for optional crystallization module.')
- variant('imd', default=False,
- description='Build support for optional imd module.')
- variant('manyrestraints', default=False,
- description='Build support for optional manyrestraints module.')
+ # FIXME: This needs to be an optional
+ variant(
+ 'optional_modules',
+ default='all',
+ values=lambda x: True,
+ description='String that is used to build optional modules'
+ )
variant('shared', default=True, description='Builds shared libraries')
variant('mpi', default=True, description='Activates MPI support')
variant('gsl', default=True, description='Activates GSL support')
@@ -67,44 +71,58 @@ class Plumed(Package):
depends_on('gsl', when='+gsl')
depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
- # Dictionary mapping PLUMED versions to the patches it provides
- # interactively
- plumed_patches = {
- '2.2.3': {
- 'amber-14': '1',
- 'gromacs-4.5.7': '2',
- 'gromacs-4.6.7': '3',
- 'gromacs-5.0.7': '4',
- 'gromacs-5.1.2': '5',
- 'lammps-6Apr13': '6',
- 'namd-2.8': '7',
- 'namd-2.9': '8',
- 'espresso-5.0.2': '9'
- }
- }
+ force_autoreconf = True
+
+ parallel = False
def apply_patch(self, other):
- plumed = subprocess.Popen(
- [join_path(self.spec.prefix.bin, 'plumed'), 'patch', '-p'],
- stdin=subprocess.PIPE
+
+ # The name of MD engines differ slightly from the ones used in Spack
+ format_strings = collections.defaultdict(
+ lambda: '{0.name}-{0.version}'
)
- opts = Plumed.plumed_patches[str(self.version)]
- search = '{0.name}-{0.version}'.format(other)
- choice = opts[search] + '\n'
- plumed.stdin.write(choice)
- plumed.wait()
+ format_strings['espresso'] = 'q{0.name}-{0.version}'
+ format_strings['amber'] = '{0.name}{0.version}'
+
+ get_md = lambda x: format_strings[x.name].format(x)
+
+ # Get available patches
+ plumed_patch = Executable(
+ join_path(self.spec.prefix.bin, 'plumed-patch')
+ )
+
+ out = plumed_patch('-q', '-l', output=str)
+ available = out.split(':')[-1].split()
+
+ # Check that `other` is among the patchable applications
+ if get_md(other) not in available:
+ msg = '{0.name}@{0.version} is not among the MD engine'
+ msg += ' that can be patched by {1.name}@{1.version}.\n'
+ msg += 'Supported engines are:\n'
+ for x in available:
+ msg += x + '\n'
+ raise RuntimeError(msg.format(other, self.spec))
- def setup_dependent_package(self, module, ext_spec):
+ # Call plumed-patch to patch executables
+ target = format_strings[other.name].format(other)
+ plumed_patch('-p', '-e', target)
+
+ def setup_dependent_package(self, module, dependent_spec):
# Make plumed visible from dependent packages
- module.plumed = Executable(join_path(self.spec.prefix.bin, 'plumed'))
+ module.plumed = dependent_spec['plumed'].command
- def install(self, spec, prefix):
+ @run_before('autoreconf')
+ def filter_gslcblas(self):
# This part is needed to avoid linking with gsl cblas
# interface which will mask the cblas interface
# provided by optimized libraries due to linking order
filter_file('-lgslcblas', '', 'configure.ac')
- autoreconf('-ivf')
+
+ def configure_args(self):
+ spec = self.spec
# From plumed docs :
# Also consider that this is different with respect to what some other
@@ -114,7 +132,11 @@ class Plumed(Package):
# with MPI you should use:
#
# > ./configure CXX="$MPICXX"
- configure_opts = ['--prefix=' + prefix]
+
+ # The configure.ac script may detect the wrong linker for
+ # LD_RO which causes issues at link time. Here we work around
+ # the issue saying we have no LD_RO executable.
+ configure_opts = ['--disable-ld-r']
# If using MPI then ensure the correct compiler wrapper is used.
if '+mpi' in spec:
@@ -126,11 +148,19 @@ class Plumed(Package):
# If the MPI dependency is provided by the intel-mpi package then
# the following additional argument is required to allow it to
# build.
- if spec.satisfies('^intel-mpi'):
+ if 'intel-mpi' in spec:
configure_opts.extend([
'STATIC_LIBS=-mt_mpi'
])
+ # Set flags to help find gsl
+ if '+gsl' in self.spec:
+ gsl_libs = self.spec['gsl'].libs
+ blas_libs = self.spec['blas'].libs
+ configure_opts.append('LDFLAGS={0}'.format(
+ (gsl_libs + blas_libs).ld_flags
+ ))
+
# Additional arguments
configure_opts.extend([
'--enable-shared={0}'.format('yes' if '+shared' in spec else 'no'),
@@ -138,21 +168,16 @@ class Plumed(Package):
])
# Construct list of optional modules
- module_opts = []
- module_opts.extend([
- '+crystallization' if (
- '+crystallization' in spec) else '-crystallization',
- '+imd' if '+imd' in spec else '-imd',
- '+manyrestraints' if (
- '+manyrestraints' in spec) else '-manyrestraints'
- ])
# If we have specified any optional modules then add the argument to
# enable or disable them.
- if module_opts:
- configure_opts.extend([
- '--enable-modules={0}'.format("".join(module_opts))])
-
- configure(*configure_opts)
- make()
- make('install')
+ optional_modules = self.spec.variants['optional_modules'].value
+ if optional_modules:
+ # From 'configure --help' @2.3:
+ # all/none/reset or : separated list such as
+ # +crystallization:-bias default: reset
+ configure_opts.append(
+ '--enable-modules={0}'.format(optional_modules)
+ )
+
+ return configure_opts
diff --git a/var/spack/repos/builtin/packages/pmgr-collective/package.py b/var/spack/repos/builtin/packages/pmgr-collective/package.py
index f6466a7954..c96e777e5b 100644
--- a/var/spack/repos/builtin/packages/pmgr-collective/package.py
+++ b/var/spack/repos/builtin/packages/pmgr-collective/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/pmix/package.py b/var/spack/repos/builtin/packages/pmix/package.py
new file mode 100644
index 0000000000..0763dfbaed
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pmix/package.py
@@ -0,0 +1,71 @@
+##############################################################################
+# 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/spack/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 Pmix(AutotoolsPackage):
+ """The Process Management Interface (PMI) has been used for quite some time
+ as a means of exchanging wireup information needed for interprocess
+ communication. Two versions (PMI-1 and PMI-2) have been released as part
+ of the MPICH effort. While PMI-2 demonstrates better scaling properties
+ than its PMI-1 predecessor, attaining rapid launch and wireup of the
+ roughly 1M processes executing across 100k nodes expected for exascale
+ operations remains challenging. PMI Exascale (PMIx) represents an
+ attempt to resolve these questions by providing an extended version
+ of the PMI definitions specifically designed to support clusters up
+ to and including exascale sizes. The overall objective of the project
+ is not to branch the existing definitions - in fact, PMIx fully
+ supports both of the existing PMI-1 and PMI-2 APIs - but rather to
+ (a) augment and extend those APIs to eliminate some current restrictions
+ that impact scalability, (b) establish a standards-like body for
+ maintaining the definitions, and (c) provide a reference implementation
+ of the PMIx standard that demonstrates the desired level of
+ scalability."""
+
+ homepage = "https://pmix.github.io/pmix"
+ url = "https://github.com/pmix/pmix/releases/download/v2.0.1/pmix-2.0.1.tar.bz2"
+
+ version('2.0.1', 'ba3193b485843516e6b4e8641e443b1e')
+ version('2.0.0', '3e047c2ea0ba8ee9925ed92b205fd92e')
+ version('1.2.3', '102b1cc650018b62348b45d572b158e9')
+ version('1.2.2', 'd85c8fd437bd88f984549425ad369e9f')
+ version('1.2.1', 'f090f524681c52001ea2db3b0285596f')
+ version('1.2.0', '6a42472d5a32e1c31ce5da19d50fc21a')
+
+ depends_on('libevent')
+
+ def configure_args(self):
+ spec = self.spec
+ config_args = [
+ '--enable-shared',
+ '--enable-static'
+ ]
+
+ # external libevent support (needed to keep Open MPI happy)
+ config_args.append(
+ '--with-libevent={0}'.format(spec['libevent'].prefix))
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/pnfft/package.py b/var/spack/repos/builtin/packages/pnfft/package.py
new file mode 100644
index 0000000000..fbb6b636b1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pnfft/package.py
@@ -0,0 +1,88 @@
+##############################################################################
+# 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/spack/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 Pnfft(AutotoolsPackage):
+ """PNFFT is a parallel software library for the calculation of
+ three-dimensional nonequispaced FFTs."""
+
+ homepage = "https://www-user.tu-chemnitz.de/~potts/workgroup/pippig/software.php.en"
+ url = "https://www-user.tu-chemnitz.de/~potts/workgroup/pippig/software/pnfft-1.0.7-alpha.tar.gz"
+
+ version('1.0.7-alpha', '5caa7f214eed99de2281043ca2367e9e')
+
+ depends_on('pfft')
+
+ def configure(self, spec, prefix):
+ options = ['--prefix={0}'.format(prefix)]
+ if not self.compiler.f77 or not self.compiler.fc:
+ options.append("--disable-fortran")
+
+ configure = Executable('../configure')
+
+ if '+double' in spec['fftw']:
+ with working_dir('double', create=True):
+ configure(*options)
+ if '+float' in spec['fftw']:
+ with working_dir('float', create=True):
+ configure('--enable-float', *options)
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double', create=True):
+ configure('--enable-long-double', *options)
+
+ def build(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make()
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make()
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make()
+
+ def check(self):
+ spec = self.spec
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("check")
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make("check")
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make("check")
+
+ def install(self, spec, prefix):
+ if '+double' in spec['fftw']:
+ with working_dir('double'):
+ make("install")
+ if '+float' in spec['fftw']:
+ with working_dir('float'):
+ make("install")
+ if '+long_double' in spec['fftw']:
+ with working_dir('long-double'):
+ make("install")
diff --git a/var/spack/repos/builtin/packages/pngwriter/package.py b/var/spack/repos/builtin/packages/pngwriter/package.py
index 4c0370a7ef..896b660ac6 100644
--- a/var/spack/repos/builtin/packages/pngwriter/package.py
+++ b/var/spack/repos/builtin/packages/pngwriter/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Pngwriter(Package):
+class Pngwriter(CMakePackage):
"""PNGwriter is a very easy to use open source graphics library that uses
PNG as its output format. The interface has been designed to be as simple
and intuitive as possible. It supports plotting and reading pixels in the
@@ -38,21 +38,13 @@ class Pngwriter(Package):
homepage = "http://pngwriter.sourceforge.net/"
url = "https://github.com/pngwriter/pngwriter/archive/0.5.6.tar.gz"
- version('dev', branch='dev',
+ version('develop', branch='dev',
git='https://github.com/pngwriter/pngwriter.git')
version('master', branch='master',
git='https://github.com/pngwriter/pngwriter.git')
+ version('0.6.0', '0a19bc55c5f6379fea7343752fd3ffae')
version('0.5.6', 'c13bd1fdc0e331a246e6127b5f262136')
- depends_on('cmake', type='build')
depends_on('libpng')
depends_on('zlib')
depends_on('freetype')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('-DCMAKE_INSTALL_PREFIX=%s' % prefix,
- '..', *std_cmake_args)
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/poamsa/package.py b/var/spack/repos/builtin/packages/poamsa/package.py
new file mode 100644
index 0000000000..dba8a03546
--- /dev/null
+++ b/var/spack/repos/builtin/packages/poamsa/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Poamsa(MakefilePackage):
+ """POA is Partial Order Alignment, a fast program for multiple sequence
+ alignment in bioinformatics. Its advantages are speed, scalability,
+ sensitivity, and the superior ability to handle branching / indels
+ in the alignment."""
+
+ homepage = "https://sourceforge.net/projects/poamsa"
+ url = "https://downloads.sourceforge.net/project/poamsa/poamsa/2.0/poaV2.tar.gz"
+
+ version('2.0', '9e2eb270d4867114406f53dab1311b2b')
+
+ def url_for_version(self, version):
+ url = "https://downloads.sourceforge.net/project/poamsa/poamsa/{0}/poaV{1}.tar.gz"
+ return url.format(version.dotted, version.up_to(1))
+
+ def build(self, spec, prefix):
+ make('poa')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.lib)
+ install('poa', prefix.bin)
+ install('liblpo.a', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/pocl/example1.c b/var/spack/repos/builtin/packages/pocl/example1.c
new file mode 100644
index 0000000000..84c3e5e30f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pocl/example1.c
@@ -0,0 +1,232 @@
+/* example1 - Simple example from OpenCL specification.
+
+ Copyright (c) 2011 Universidad Rey Juan Carlos
+
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use, copy,
+ modify, merge, publish, distribute, sublicense, and/or sell copies
+ of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE.
+*/
+
+#include <CL/opencl.h>
+#include <poclu.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#define N 128
+
+void delete_memobjs(cl_mem *memobjs, int n) {
+ for (int i = 0; i < n; ++i)
+ clReleaseMemObject(memobjs[i]);
+}
+
+int exec_dot_product_kernel(const char *program_source, int n, cl_float4 *srcA,
+ cl_float4 *srcB, cl_float *dst) {
+ cl_context context = poclu_create_any_context();
+ if (context == (cl_context)0)
+ return -1;
+
+ // get the list of GPU devices associated with context
+ size_t cb;
+ clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &cb);
+ cl_device_id *devices = malloc(cb);
+ clGetContextInfo(context, CL_CONTEXT_DEVICES, cb, devices, NULL);
+
+ // create a command-queue
+ cl_command_queue cmd_queue =
+ clCreateCommandQueue(context, devices[0], 0, NULL);
+ if (cmd_queue == 0) {
+ clReleaseContext(context);
+ free(devices);
+ return -1;
+ }
+
+ // don't know why this is necessary
+ for (int i = 0; i < n; ++i) {
+ poclu_bswap_cl_float_array(devices[0], &srcA[i], 4);
+ poclu_bswap_cl_float_array(devices[0], &srcB[i], 4);
+ }
+
+ // allocate the buffer memory objects
+ cl_mem memobjs[3];
+
+ memobjs[0] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
+ sizeof(cl_float4) * n, srcA, NULL);
+ if (memobjs[0] == 0) {
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ memobjs[1] = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
+ sizeof(cl_float4) * n, srcB, NULL);
+ if (memobjs[1] == 0) {
+ delete_memobjs(memobjs, 1);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ memobjs[2] = clCreateBuffer(context, CL_MEM_READ_WRITE, sizeof(cl_float) * n,
+ NULL, NULL);
+ if (memobjs[2] == 0) {
+ delete_memobjs(memobjs, 2);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // create the program
+ cl_program program =
+ clCreateProgramWithSource(context, 1, &program_source, NULL, NULL);
+ if (program == 0) {
+ delete_memobjs(memobjs, 3);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // build the program
+ cl_int err = clBuildProgram(program, 0, NULL, NULL, NULL, NULL);
+ if (err != CL_SUCCESS) {
+ delete_memobjs(memobjs, 3);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // create the kernel
+ cl_kernel kernel = clCreateKernel(program, "dot_product", NULL);
+ if (kernel == 0) {
+ delete_memobjs(memobjs, 3);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // set the args values
+ err = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&memobjs[0]);
+ err |= clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&memobjs[1]);
+ err |= clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&memobjs[2]);
+
+ if (err != CL_SUCCESS) {
+ delete_memobjs(memobjs, 3);
+ clReleaseKernel(kernel);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // set work-item dimensions
+ size_t global_work_size[1];
+ global_work_size[0] = n;
+ size_t local_work_size[1];
+ local_work_size[0] = 128;
+
+ // execute kernel
+ err = clEnqueueNDRangeKernel(cmd_queue, kernel, 1, NULL, global_work_size,
+ local_work_size, 0, NULL, NULL);
+ if (err != CL_SUCCESS) {
+ delete_memobjs(memobjs, 3);
+ clReleaseKernel(kernel);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ // read output image
+ err = clEnqueueReadBuffer(cmd_queue, memobjs[2], CL_TRUE, 0,
+ n * sizeof(cl_float), dst, 0, NULL, NULL);
+ if (err != CL_SUCCESS) {
+ delete_memobjs(memobjs, 3);
+ clReleaseKernel(kernel);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+ return -1;
+ }
+
+ for (int i = 0; i < n; ++i) {
+ poclu_bswap_cl_float_array(devices[0], &dst[i], 1);
+ poclu_bswap_cl_float_array(devices[0], &srcA[i], 4);
+ poclu_bswap_cl_float_array(devices[0], &srcB[i], 4);
+ }
+
+ free(devices);
+
+ // release kernel, program, and memory objects
+ delete_memobjs(memobjs, 3);
+ clReleaseKernel(kernel);
+ clReleaseProgram(program);
+ clReleaseCommandQueue(cmd_queue);
+ clReleaseContext(context);
+
+ // success
+ return 0;
+}
+
+int main(void) {
+ const char *source = "__kernel void dot_product(\n"
+ " __global const float4 *a,\n"
+ " __global const float4 *b,\n"
+ " __global float *c)\n"
+ "{\n"
+ " int gid = get_global_id(0);\n"
+ " float4 prod = a[gid] * b[gid];\n"
+ " c[gid] = prod.x + prod.y + prod.z + prod.w;\n"
+ "}\n";
+
+ cl_float4 *srcA = malloc(N * sizeof(cl_float4));
+ cl_float4 *srcB = malloc(N * sizeof(cl_float4));
+ cl_float *dst = malloc(N * sizeof(cl_float));
+
+ for (int i = 0; i < N; ++i) {
+ srcA[i].s[0] = (cl_float)i;
+ srcA[i].s[1] = (cl_float)i;
+ srcA[i].s[2] = (cl_float)i;
+ srcA[i].s[3] = (cl_float)i;
+ srcB[i].s[0] = (cl_float)i;
+ srcB[i].s[1] = (cl_float)i;
+ srcB[i].s[2] = (cl_float)i;
+ srcB[i].s[3] = (cl_float)i;
+ }
+
+ if (exec_dot_product_kernel(source, N, srcA, srcB, dst)) {
+ printf("Error running the tests\n");
+ return -1;
+ }
+
+ for (int i = 0; i < 4; ++i) {
+ printf("(%f, %f, %f, %f) . (%f, %f, %f, %f) = %f\n", srcA[i].s[0],
+ srcA[i].s[1], srcA[i].s[2], srcA[i].s[3], srcB[i].s[0], srcB[i].s[1],
+ srcB[i].s[2], srcB[i].s[3], dst[i]);
+ if (srcA[i].s[0] * srcB[i].s[0] + srcA[i].s[1] * srcB[i].s[1] +
+ srcA[i].s[2] * srcB[i].s[2] + srcA[i].s[3] * srcB[i].s[3] !=
+ dst[i]) {
+ printf("FAIL\n");
+ return -1;
+ }
+ }
+
+ printf("OK\n");
+ return 0;
+}
diff --git a/var/spack/repos/builtin/packages/pocl/example1.out b/var/spack/repos/builtin/packages/pocl/example1.out
new file mode 100644
index 0000000000..ef35a124f8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pocl/example1.out
@@ -0,0 +1,5 @@
+(0.000000, 0.000000, 0.000000, 0.000000) . (0.000000, 0.000000, 0.000000, 0.000000) = 0.000000
+(1.000000, 1.000000, 1.000000, 1.000000) . (1.000000, 1.000000, 1.000000, 1.000000) = 4.000000
+(2.000000, 2.000000, 2.000000, 2.000000) . (2.000000, 2.000000, 2.000000, 2.000000) = 16.000000
+(3.000000, 3.000000, 3.000000, 3.000000) . (3.000000, 3.000000, 3.000000, 3.000000) = 36.000000
+OK
diff --git a/var/spack/repos/builtin/packages/pocl/package.py b/var/spack/repos/builtin/packages/pocl/package.py
new file mode 100644
index 0000000000..ec4ef09bbe
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pocl/package.py
@@ -0,0 +1,115 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import os
+
+from spack import *
+from spack.package_test import compile_c_and_execute, compare_output_file
+
+
+class Pocl(CMakePackage):
+ """Portable Computing Language (pocl) is an open source implementation
+ of the OpenCL standard which can be easily adapted for new targets
+ and devices, both for homogeneous CPU and heterogeneous
+ GPUs/accelerators."""
+
+ homepage = "http://portablecl.org"
+ url = "http://portablecl.org/downloads/pocl-0.13.tar.gz"
+
+ version("master", git="https://github.com/pocl/pocl.git")
+ version('0.14', '1d35f09299e76b9e3918c42826555194')
+ # version("0.14-rc",
+ # git="https://github.com/pocl/pocl.git", branch="release_0_14")
+ version("0.13", "344480864d4269f2f63f1509395898bd")
+ version("0.12", "e197ba3aa01a35f40581c48e053330dd")
+ version("0.11", "9be0640cde2983062c47393d9e8e8fe7")
+ version("0.10", "0096be4f595c7b5cbfa42430c8b3af6a")
+
+ # This is Github's pocl/pocl#373
+ patch("uint.patch", when="@:0.13")
+ patch("vecmathlib.patch", when="@:0.13")
+
+ # Note: We should describe correctly which pocl versions provide
+ # which version of the OpenCL standard
+ # OpenCL standard versions are: 1.0, 1.1, 1.2, 2.0, 2.1, 2.2
+ provides('opencl@:2.0')
+
+ depends_on("cmake @2.8.12:", type="build")
+ depends_on("hwloc")
+ depends_on("libtool", type=("build", "run"))
+ # We don't request LLVM's shared libraries because these are not
+ # enabled by default, and also because they fail to build for us
+ # (see #1616)
+ depends_on("llvm +clang")
+ depends_on("pkg-config", type="build")
+
+ # These are the supported LLVM versions
+ depends_on("llvm @3.7:3.9", when="@master")
+ depends_on("llvm @3.7:4.0", when="@0.14")
+ depends_on("llvm @3.7:3.8", when="@0.13")
+ depends_on("llvm @3.2:3.7", when="@0.12")
+ depends_on("llvm @3.2:3.6", when="@0.11")
+ depends_on("llvm @3.2:3.5", when="@0.10")
+
+ variant("distro", default=False,
+ description=("Support several CPU architectures, "
+ "suitable e.g. in a build "
+ "that will be made available for download"))
+ variant("icd", default=False,
+ description="Support a system-wide ICD loader")
+
+ def cmake_args(self):
+ spec = self.spec
+ args = ["-DINSTALL_OPENCL_HEADERS=ON"]
+ if "~shared" in spec["llvm"]:
+ args += ["-DSTATIC_LLVM"]
+ if "+distro" in spec:
+ args += ["-DKERNELLIB_HOST_CPU_VARIANTS=distro"]
+ args += ["-DENABLE_ICD=%s" % ("ON" if "+icd" in spec else "OFF")]
+ return args
+
+ @run_after('install')
+ def symlink_opencl(self):
+ with working_dir(self.build_directory):
+ os.symlink("OpenCL", join_path(self.prefix.include, "CL"))
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
+ def check_install(self):
+ # Build and run a small program to test the installed OpenCL library
+ spec = self.spec
+ print("Checking pocl installation...")
+ checkdir = "spack-check"
+ with working_dir(checkdir, create=True):
+ source = join_path(os.path.dirname(self.module.__file__),
+ "example1.c")
+ cflags = spec["pocl"].headers.cpp_flags.split()
+ # ldflags = spec["pocl"].libs.ld_flags.split()
+ ldflags = ["-L%s" % spec["pocl"].prefix.lib,
+ "-lOpenCL", "-lpoclu"]
+ output = compile_c_and_execute(source, cflags, ldflags)
+ compare_output_file(
+ output,
+ join_path(os.path.dirname(self.module.__file__),
+ "example1.out"))
diff --git a/var/spack/repos/builtin/packages/pocl/uint.patch b/var/spack/repos/builtin/packages/pocl/uint.patch
new file mode 100644
index 0000000000..1a620cd901
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pocl/uint.patch
@@ -0,0 +1,11 @@
+--- a/lib/CL/clCreateSubDevices.c
++++ b/lib/CL/clCreateSubDevices.c
+@@ -46,7 +46,7 @@
+ cl_device_id *new_devs = NULL;
+ // number of elements in (copies of) properties, including terminating null
+ cl_uint num_props = 0;
+- uint i;
++ cl_uint i;
+
+ POCL_GOTO_ERROR_COND((in_device == NULL), CL_INVALID_DEVICE);
+ POCL_GOTO_ERROR_COND((properties == NULL), CL_INVALID_VALUE);
diff --git a/var/spack/repos/builtin/packages/pocl/vecmathlib.patch b/var/spack/repos/builtin/packages/pocl/vecmathlib.patch
new file mode 100644
index 0000000000..73d2742e43
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pocl/vecmathlib.patch
@@ -0,0 +1,75 @@
+diff --git a/lib/kernel/vecmathlib/vec_sse_double1.h b/lib/kernel/vecmathlib/vec_sse_double1.h
+index d727de8..dc582b3 100644
+--- a/lib/kernel/vecmathlib/vec_sse_double1.h
++++ b/lib/kernel/vecmathlib/vec_sse_double1.h
+@@ -397,8 +397,8 @@ public:
+ }
+ return r;
+ }
+- boolvec_t isfinite() const { return vml_std::isfinite(v); }
+- boolvec_t isinf() const { return vml_std::isinf(v); }
++ boolvec_t isfinite() const { return bool(vml_std::isfinite(v)); }
++ boolvec_t isinf() const { return bool(vml_std::isinf(v)); }
+ boolvec_t isnan() const {
+ // This is wrong:
+ // return _mm_ucomineq_sd(from_double(v), from_double(v));
+@@ -407,9 +407,9 @@ public:
+ // __asm__("ucomisd %[v],%[v]; setp %[r]": [r]"=q"(r): [v]"x"(v));
+ // return boolvec_t::scalar_t(r);
+ // This works as well:
+- return vml_std::isnan(v);
++ return bool(vml_std::isnan(v));
+ }
+- boolvec_t isnormal() const { return vml_std::isnormal(v); }
++ boolvec_t isnormal() const { return bool(vml_std::isnormal(v)); }
+ realvec_t ldexp(int_t n) const { return vml_std::ldexp(v, n); }
+ realvec_t ldexp(intvec_t n) const { return vml_std::ldexp(v, n); }
+ realvec_t log() const { return MF::vml_log(*this); }
+@@ -433,7 +433,7 @@ public:
+ }
+ realvec_t round() const { return MF::vml_round(*this); }
+ realvec_t rsqrt() const { return MF::vml_rsqrt(*this); }
+- boolvec_t signbit() const { return vml_std::signbit(v); }
++ boolvec_t signbit() const { return bool(vml_std::signbit(v)); }
+ realvec_t sin() const { return MF::vml_sin(*this); }
+ realvec_t sinh() const { return MF::vml_sinh(*this); }
+ realvec_t sqrt() const {
+diff --git a/lib/kernel/vecmathlib/vec_sse_float1.h b/lib/kernel/vecmathlib/vec_sse_float1.h
+index a84a046..4868b2c 100644
+--- a/lib/kernel/vecmathlib/vec_sse_float1.h
++++ b/lib/kernel/vecmathlib/vec_sse_float1.h
+@@ -394,8 +394,8 @@ public:
+ }
+ return r;
+ }
+- boolvec_t isfinite() const { return vml_std::isfinite(v); }
+- boolvec_t isinf() const { return vml_std::isinf(v); }
++ boolvec_t isfinite() const { return bool(vml_std::isfinite(v)); }
++ boolvec_t isinf() const { return bool(vml_std::isinf(v)); }
+ boolvec_t isnan() const {
+ #if defined VML_HAVE_NAN
+ // This is wrong:
+@@ -405,12 +405,12 @@ public:
+ // __asm__("ucomiss %[v],%[v]; setp %[r]": [r]"=q"(r): [v]"x"(v));
+ // return boolvec_t::scalar_t(r);
+ // This works as well:
+- return vml_std::isnan(v);
++ return bool(vml_std::isnan(v));
+ #else
+ return BV(false);
+ #endif
+ }
+- boolvec_t isnormal() const { return vml_std::isnormal(v); }
++ boolvec_t isnormal() const { return bool(vml_std::isnormal(v)); }
+ realvec_t ldexp(int_t n) const { return vml_std::ldexp(v, n); }
+ realvec_t ldexp(intvec_t n) const { return vml_std::ldexp(v, n); }
+ realvec_t log() const { return MF::vml_log(*this); }
+@@ -434,7 +434,7 @@ public:
+ }
+ realvec_t round() const { return MF::vml_round(*this); }
+ realvec_t rsqrt() const { return MF::vml_rsqrt(*this); }
+- boolvec_t signbit() const { return vml_std::signbit(v); }
++ boolvec_t signbit() const { return bool(vml_std::signbit(v)); }
+ realvec_t sin() const { return MF::vml_sin(*this); }
+ realvec_t sinh() const { return MF::vml_sinh(*this); }
+ realvec_t sqrt() const { return to_float(_mm_sqrt_ss(from_float(v))); }
diff --git a/var/spack/repos/builtin/packages/polymake/package.py b/var/spack/repos/builtin/packages/polymake/package.py
index c0bb9082ae..0fbfe52640 100644
--- a/var/spack/repos/builtin/packages/polymake/package.py
+++ b/var/spack/repos/builtin/packages/polymake/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/porta/package.py b/var/spack/repos/builtin/packages/porta/package.py
index b620daf78f..e54187188f 100644
--- a/var/spack/repos/builtin/packages/porta/package.py
+++ b/var/spack/repos/builtin/packages/porta/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/portage/package.py b/var/spack/repos/builtin/packages/portage/package.py
new file mode 100644
index 0000000000..b70139c3ed
--- /dev/null
+++ b/var/spack/repos/builtin/packages/portage/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Portage(CMakePackage):
+ """Portage is a framework that computational physics applications can use
+ to build a highly customized, hybrid parallel (MPI+X) conservative
+ remapping library for transfer of field data between meshes.
+ """
+ homepage = "http://portage.lanl.gov/"
+ url = "https://github.com/laristra/portage/tarball/v1.0"
+
+ # tarballs don't have submodules, so use git tags
+ version('1.1.1', git='https://github.com/laristra/portage', tag='v1.1.1', submodules=True)
+ version('1.1.0', git='https://github.com/laristra/portage', tag='v1.1.0', submodules=True)
+ version('develop', git='https://github.com/laristra/portage', branch='master', submodules=True)
+
+ variant('mpi', default=True, description='Support MPI')
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on('mpi', when='+mpi')
+ depends_on('lapack')
+
+ def cmake_args(self):
+ options = ['-DENABLE_UNIT_TESTS=ON', '-DENABLE_APP_TESTS=ON']
+
+ if '+mpi' in self.spec:
+ options.extend([
+ '-DENABLE_MPI=ON',
+ '-DENABLE_MPI_CXX_BINDINGS=ON',
+ '-DCMAKE_CXX_COMPILER=%s' % self.spec['mpi'].mpicxx,
+ '-DCMAKE_C_COMPILER=%s' % self.spec['mpi'].mpicc,
+ ])
+ else:
+ options.append('-DENABLE_MPI=OFF')
+
+ return options
diff --git a/var/spack/repos/builtin/packages/postgresql/package.py b/var/spack/repos/builtin/packages/postgresql/package.py
index caf3768362..1323405b1f 100644
--- a/var/spack/repos/builtin/packages/postgresql/package.py
+++ b/var/spack/repos/builtin/packages/postgresql/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Postgresql(Package):
+class Postgresql(AutotoolsPackage):
"""PostgreSQL is a powerful, open source object-relational database system.
It has more than 15 years of active development and a proven architecture
that has earned it a strong reputation for reliability, data integrity, and
@@ -40,8 +40,13 @@ class Postgresql(Package):
depends_on('openssl')
depends_on('readline')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--with-openssl")
- make()
- make("install")
+ variant('threadsafe', default=False, description='Build with thread safe.')
+
+ def configure_arg(self):
+ config_args = ["--with-openssl"]
+ if '+threadsafe' in self.spec:
+ config_args.append("--enable-thread-safety")
+ else:
+ config_args.append("--disable-thread-safety")
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/ppl/package.py b/var/spack/repos/builtin/packages/ppl/package.py
index 73404103f0..0a5636d457 100644
--- a/var/spack/repos/builtin/packages/ppl/package.py
+++ b/var/spack/repos/builtin/packages/ppl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/prank/package.py b/var/spack/repos/builtin/packages/prank/package.py
index d627e8a0b6..740cb63b85 100644
--- a/var/spack/repos/builtin/packages/prank/package.py
+++ b/var/spack/repos/builtin/packages/prank/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class Prank(Package):
"""A powerful multiple sequence alignment browser."""
homepage = "http://wasabiapp.org/software/prank/"
- url = "http://wasabiapp.org/download/prank/prank.source.140603.tgz"
+ url = "http://wasabiapp.org/download/prank/prank.source.150803.tgz"
version('150803', '71ac2659e91c385c96473712c0a23e8a')
diff --git a/var/spack/repos/builtin/packages/presentproto/package.py b/var/spack/repos/builtin/packages/presentproto/package.py
index ca145abb6b..e31490a07c 100644
--- a/var/spack/repos/builtin/packages/presentproto/package.py
+++ b/var/spack/repos/builtin/packages/presentproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Presentproto(Package):
+class Presentproto(AutotoolsPackage):
"""Present protocol specification and Xlib/Xserver headers."""
homepage = "https://cgit.freedesktop.org/xorg/proto/presentproto/"
@@ -35,8 +35,3 @@ class Presentproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/preseq/package.py b/var/spack/repos/builtin/packages/preseq/package.py
new file mode 100644
index 0000000000..136bbb62b9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/preseq/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Preseq(MakefilePackage):
+ """The preseq package is aimed at predicting and estimating the complexity
+ of a genomic sequencing library, equivalent to predicting and
+ estimating the number of redundant reads from a given sequencing depth
+ and how many will be expected from additional sequencing using an
+ initial sequencing experiment."""
+
+ homepage = "https://github.com/smithlabcode/preseq"
+ url = "https://github.com/smithlabcode/preseq/releases/download/v2.0.2/preseq_v2.0.2.tar.bz2"
+
+ version('2.0.2', '9f2a7b597c9f08b821db6ee55e2ea39c')
+
+ depends_on('samtools')
+ depends_on('gsl')
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('PREFIX', self.prefix)
diff --git a/var/spack/repos/builtin/packages/price/package.py b/var/spack/repos/builtin/packages/price/package.py
new file mode 100644
index 0000000000..ee47d600b8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/price/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Price(MakefilePackage):
+ """PRICE (Paired-Read Iterative Contig Extension): a de novo genome
+ assembler implemented in C++."""
+
+ homepage = "http://derisilab.ucsf.edu/software/price/"
+ url = "http://derisilab.ucsf.edu/software/price/PriceSource140408.tar.gz"
+
+ version('140408', '2880274a514c34b812718b13a620813e')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('PriceTI', prefix.bin)
+ install('PriceSeqFilter', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/primer3/package.py b/var/spack/repos/builtin/packages/primer3/package.py
new file mode 100644
index 0000000000..5a747d8dec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/primer3/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Primer3(MakefilePackage):
+ """Primer3 is a widely used program for designing PCR primers
+ (PCR = "Polymerase Chain Reaction"). PCR is an essential and
+ ubiquitous tool in genetics and molecular biology. Primer3
+ can also design hybridization probes and sequencing primers."""
+
+ homepage = "http://primer3.sourceforge.net/"
+ url = "https://sourceforge.net/projects/primer3/files/primer3/2.3.7/primer3-2.3.7.tar.gz/download"
+
+ version('2.3.7', 'c6b89067bf465e62b6b1fd830b5b4418')
+
+ build_directory = 'src'
+
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ mkdirp(prefix.bin)
+ for binary in ('primer3_core', 'ntdpal', 'oligotm',
+ 'long_seq_tm_test'):
+ install(binary, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/printproto/package.py b/var/spack/repos/builtin/packages/printproto/package.py
index 151924dd49..c3d0e28e8f 100644
--- a/var/spack/repos/builtin/packages/printproto/package.py
+++ b/var/spack/repos/builtin/packages/printproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Printproto(Package):
+class Printproto(AutotoolsPackage):
"""Xprint extension to the X11 protocol - a portable, network-transparent
printing system."""
@@ -36,8 +36,3 @@ class Printproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/probconsrna/package.py b/var/spack/repos/builtin/packages/probconsrna/package.py
new file mode 100644
index 0000000000..56abd8b59e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/probconsrna/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Probconsrna(Package):
+ """Experimental version of PROBCONS with parameters estimated via
+ unsupervised training on BRAliBASE """
+
+ homepage = "http://probcons.stanford.edu/"
+ url = "http://probcons.stanford.edu/probconsRNA.tar.gz"
+
+ version('2005-6-7', '2aa13012124208ca5dd6b0a1d508208d')
+
+ def install(self, build, prefix):
+ mkdirp(prefix.bin)
+ install('compare', prefix.bin)
+ install('makegnuplot', prefix.bin)
+ install('probcons', prefix.bin)
+ # needed for tcoffee
+ install('probcons', prefix.bin.probconsRNA)
+ install('project', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/proj/package.py b/var/spack/repos/builtin/packages/proj/package.py
index 06ab6108b6..efddcb876c 100644
--- a/var/spack/repos/builtin/packages/proj/package.py
+++ b/var/spack/repos/builtin/packages/proj/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Proj(Package):
+class Proj(AutotoolsPackage):
"""Cartographic Projections"""
homepage = "https://github.com/OSGeo/proj.4/wiki"
url = "http://download.osgeo.org/proj/proj-4.9.2.tar.gz"
@@ -35,11 +35,3 @@ class Proj(Package):
version('4.8.0', 'd815838c92a29179298c126effbb1537')
version('4.7.0', '927d34623b52e0209ba2bfcca18fe8cd')
version('4.6.1', '7dbaab8431ad50c25669fd3fb28dc493')
-
- # No dependencies
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/protobuf/package.py b/var/spack/repos/builtin/packages/protobuf/package.py
index bf0073b16a..038c208864 100644
--- a/var/spack/repos/builtin/packages/protobuf/package.py
+++ b/var/spack/repos/builtin/packages/protobuf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,18 +23,44 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import spack.util.web
-class Protobuf(Package):
+class Protobuf(CMakePackage):
"""Google's data interchange format."""
homepage = "https://developers.google.com/protocol-buffers"
- url = "https://github.com/google/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.bz2"
+ url = "https://github.com/google/protobuf/archive/v3.2.0.tar.gz"
+ root_cmakelists_dir = "cmake"
- version('2.5.0', 'a72001a9067a4c2c4e0e836d0f92ece4')
+ version('3.4.0', '1d077a7d4db3d75681f5c333f2de9b1a')
+ version('3.3.0', 'f0f712e98de3db0c65c0c417f5e7aca8')
+ version('3.2.0', 'efaa08ae635664fb5e7f31421a41a995')
+ version('3.1.0', '39d6a4fa549c0cce164aa3064b1492dc')
+ version('3.0.2', '7349a7f43433d72c6d805c6ca22b7eeb')
+ # does not build with CMake:
+ # version('2.5.0', '9c21577a03adc1879aba5b52d06e25cf')
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("check")
- make("install")
+ depends_on('zlib')
+
+ conflicts('%gcc@:4.6') # Requires c++11
+
+ # first fixed in 3.4.0: https://github.com/google/protobuf/pull/3406
+ patch('pkgconfig.patch', when='@:3.3.2')
+
+ def fetch_remote_versions(self):
+ """Ignore additional source artifacts uploaded with releases,
+ only keep known versions
+ fix for https://github.com/spack/spack/issues/5356"""
+ return dict(map(
+ lambda u: (u, self.url_for_version(u)),
+ spack.util.web.find_versions_of_archive(
+ self.all_urls, self.list_url, self.list_depth)
+ ))
+
+ def cmake_args(self):
+ args = [
+ '-Dprotobuf_BUILD_TESTS:BOOL=OFF',
+ '-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON'
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/protobuf/pkgconfig.patch b/var/spack/repos/builtin/packages/protobuf/pkgconfig.patch
new file mode 100644
index 0000000000..a0e8b4b3b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/protobuf/pkgconfig.patch
@@ -0,0 +1,58 @@
+diff --git a/cmake/install.cmake b/cmake/install.cmake
+index 28dc90d..441bf55 100644
+--- a/cmake/install.cmake
++++ b/cmake/install.cmake
+@@ -1,5 +1,10 @@
+ include(GNUInstallDirs)
+
++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf.pc.cmake
++ ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc @ONLY)
++configure_file(${CMAKE_CURRENT_SOURCE_DIR}/protobuf-lite.pc.cmake
++ ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc @ONLY)
++
+ foreach(_library
+ libprotobuf-lite
+ libprotobuf
+@@ -17,6 +22,8 @@ endforeach()
+ install(TARGETS protoc EXPORT protobuf-targets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT protoc)
+
++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/protobuf.pc ${CMAKE_CURRENT_BINARY_DIR}/protobuf-lite.pc DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
++
+ file(STRINGS extract_includes.bat.in _extract_strings
+ REGEX "^copy")
+ foreach(_extract_string ${_extract_strings})
+diff --git a/cmake/protobuf-lite.pc.cmake b/cmake/protobuf-lite.pc.cmake
+new file mode 100644
+index 0000000..cbe5426
+--- /dev/null
++++ b/cmake/protobuf-lite.pc.cmake
+@@ -0,0 +1,11 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=@CMAKE_INSTALL_PREFIX@
++libdir=@CMAKE_INSTALL_FULL_LIBDIR@
++includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
++
++Name: Protocol Buffers
++Description: Google's Data Interchange Format
++Version: @protobuf_VERSION@
++Libs: -L${libdir} -lprotobuf-lite @CMAKE_THREAD_LIBS_INIT@
++Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@
++Conflicts: protobuf
+diff --git a/cmake/protobuf.pc.cmake b/cmake/protobuf.pc.cmake
+new file mode 100644
+index 0000000..2e30763
+--- /dev/null
++++ b/cmake/protobuf.pc.cmake
+@@ -0,0 +1,11 @@
++prefix=@CMAKE_INSTALL_PREFIX@
++exec_prefix=@CMAKE_INSTALL_PREFIX@
++libdir=@CMAKE_INSTALL_FULL_LIBDIR@
++includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
++
++Name: Protocol Buffers
++Description: Google's Data Interchange Format
++Version: @protobuf_VERSION@
++Libs: -L${libdir} -lprotobuf @CMAKE_THREAD_LIBS_INIT@
++Cflags: -I${includedir} @CMAKE_THREAD_LIBS_INIT@
++Conflicts: protobuf-lite
diff --git a/var/spack/repos/builtin/packages/proxymngr/package.py b/var/spack/repos/builtin/packages/proxymngr/package.py
index 896f4a516b..cc38d6ae55 100644
--- a/var/spack/repos/builtin/packages/proxymngr/package.py
+++ b/var/spack/repos/builtin/packages/proxymngr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Proxymngr(Package):
+class Proxymngr(AutotoolsPackage):
"""The proxy manager (proxymngr) is responsible for resolving requests from
xfindproxy (and other similar clients), starting new proxies when
appropriate, and keeping track of all of the available proxy services.
@@ -44,9 +44,3 @@ class Proxymngr(Package):
depends_on('xproxymanagementprotocol', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/pruners-ninja/package.py b/var/spack/repos/builtin/packages/pruners-ninja/package.py
new file mode 100644
index 0000000000..c8e93ad997
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pruners-ninja/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PrunersNinja(AutotoolsPackage):
+ """NINJA: Noise Inject agent tool to expose subtle and unintended message
+ races."""
+ homepage = "https://github.com/PRUNERS/NINJA"
+ url = "https://github.com/PRUNERS/NINJA/releases/download/v1.0.0/NINJA-1.0.0.tar.gz"
+
+ version("1.0.1", "f0728cad61d8f1f970dffb7bb430addb")
+ version("1.0.0", "fee53c4712ac521ebec3cd8692e5185a")
+
+ depends_on("mpi")
+ depends_on("autoconf", type='build')
+ depends_on("automake", type='build')
+ depends_on("libtool", type='build')
diff --git a/var/spack/repos/builtin/packages/ps-lite/cmake.patch b/var/spack/repos/builtin/packages/ps-lite/cmake.patch
new file mode 100644
index 0000000000..246a8d820c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ps-lite/cmake.patch
@@ -0,0 +1,22 @@
+From b787a6413d6d54c46db476176656fec108c57527 Mon Sep 17 00:00:00 2001
+From: Jianwen WEI <weijianwen@gmail.com>
+Date: Wed, 5 Apr 2017 19:53:51 +0800
+Subject: [PATCH] Add install() for ps-lite in CMake.
+
+---
+ CMakeLists.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e5d13d0..d68491c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -63,3 +63,8 @@ set(pslite_LINKER_LIBS ${pslite_LINKER_LIBS_L} PARENT_SCOPE)
+ set(pslite_LINKER_LIBS_RELEASE ${pslite_LINKER_LIBS_L_RELEASE} PARENT_SCOPE)
+ set(pslite_LINKER_LIBS_DEBUG ${pslite_LINKER_LIBS_L_DEBUG} PARENT_SCOPE)
+ set(pslite_INCLUDE_DIR ${pslite_INCLUDE_DIR_L} PARENT_SCOPE)
++
++install(TARGETS pslite ARCHIVE DESTINATION lib)
++install(DIRECTORY include DESTINATION .)
++install(DIRECTORY docs DESTINATION .)
++install(DIRECTORY make DESTINATION .)
diff --git a/var/spack/repos/builtin/packages/ps-lite/package.py b/var/spack/repos/builtin/packages/ps-lite/package.py
new file mode 100644
index 0000000000..b78315c060
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ps-lite/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class PsLite(CMakePackage):
+ """ps-lite is A light and efficient implementation
+ of the parameter server framework."""
+
+ homepage = "https://github.com/dmlc/ps-lite"
+ url = "https://github.com/dmlc/ps-lite.git"
+
+ version('master', git='https://github.com/dmlc/ps-lite.git', branch='master')
+ version('20170328', git='https://github.com/dmlc/ps-lite.git',
+ commit='acdb698fa3bb80929ef83bb37c705f025e119b82')
+
+ depends_on('protobuf@3:')
+ depends_on('zeromq')
+
+ patch('cmake.patch')
diff --git a/var/spack/repos/builtin/packages/psi4/package.py b/var/spack/repos/builtin/packages/psi4/package.py
index 4248c24646..f322e6c1ca 100644
--- a/var/spack/repos/builtin/packages/psi4/package.py
+++ b/var/spack/repos/builtin/packages/psi4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@ from spack import *
import os
-class Psi4(Package):
+class Psi4(CMakePackage):
"""Psi4 is an open-source suite of ab initio quantum chemistry
programs designed for efficient, high-accuracy simulations of
a variety of molecular properties."""
@@ -36,20 +36,16 @@ class Psi4(Package):
version('0.5', '53041b8a9be3958384171d0d22f9fdd0')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
+
# Required dependencies
depends_on('blas')
depends_on('lapack')
- depends_on('boost'
- '+chrono'
- '+filesystem'
- '+python'
- '+regex'
- '+serialization'
- '+system'
- '+timer'
- '+thread')
+ depends_on('boost+chrono+filesystem+python+regex+serialization+system+timer+thread')
depends_on('python')
- depends_on('cmake', type='build')
+ depends_on('cmake@3.3:', type='build')
depends_on('py-numpy', type=('build', 'run'))
# Optional dependencies
@@ -59,28 +55,21 @@ class Psi4(Package):
# depends_on('pcm-solver')
# depends_on('chemps2')
- def install(self, spec, prefix):
- cmake_args = [
+ def cmake_args(self):
+ spec = self.spec
+
+ return [
'-DBLAS_TYPE={0}'.format(spec['blas'].name.upper()),
- '-DBLAS_LIBRARIES={0}'.format(spec['blas'].blas_libs.joined()),
+ '-DBLAS_LIBRARIES={0}'.format(spec['blas'].libs.joined()),
'-DLAPACK_TYPE={0}'.format(spec['lapack'].name.upper()),
'-DLAPACK_LIBRARIES={0}'.format(
- spec['lapack'].lapack_libs.joined()),
+ spec['lapack'].libs.joined()),
'-DBOOST_INCLUDEDIR={0}'.format(spec['boost'].prefix.include),
'-DBOOST_LIBRARYDIR={0}'.format(spec['boost'].prefix.lib),
'-DENABLE_CHEMPS2=OFF'
]
- cmake_args.extend(std_cmake_args)
-
- with working_dir('spack-build', create=True):
- cmake('..', *cmake_args)
-
- make()
- make('install')
-
- self.filter_compilers(spec, prefix)
-
+ @run_after('install')
def filter_compilers(self, spec, prefix):
"""Run after install to tell the configuration files to
use the compilers that Spack built the package with.
@@ -115,8 +104,7 @@ class Psi4(Package):
' -I'.join([
os.path.join(spec['psi4'].prefix.include, 'psi4'),
os.path.join(spec['boost'].prefix.include, 'boost'),
- os.path.join(spec['python'].prefix.include, 'python{0}'.format(
- spec['python'].version.up_to(2))),
+ os.path.join(spec['python'].headers.directories[0]),
spec['lapack'].prefix.include,
spec['blas'].prefix.include,
'/usr/include'
diff --git a/var/spack/repos/builtin/packages/pstreams/package.py b/var/spack/repos/builtin/packages/pstreams/package.py
new file mode 100644
index 0000000000..2bf7fa63c9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pstreams/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Pstreams(Package):
+ """C++ wrapper for the POSIX.2 functions popen(3) and pclose(3)"""
+
+ homepage = "http://pstreams.sourceforge.net/"
+ url = "https://superb-sea2.dl.sourceforge.net/project/pstreams/pstreams/Release%201.0/pstreams-1.0.1.tar.gz"
+
+ version('1.0.1', '23199e3d12a644a2a0c66ec889d4c064')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.include)
+ install('pstream.h', prefix.include)
diff --git a/var/spack/repos/builtin/packages/pugixml/package.py b/var/spack/repos/builtin/packages/pugixml/package.py
new file mode 100644
index 0000000000..5cab25c3b3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pugixml/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Pugixml(CMakePackage):
+ """Light-weight, simple, and fast XML parser for C++ with XPath support"""
+
+ homepage = "http://pugixml.org/"
+ url = "http://github.com/zeux/pugixml/tarball/v1.8.1"
+
+ version('1.8.1', 'bff935f82fa45bee4d31257d948bcba2')
diff --git a/var/spack/repos/builtin/packages/pumi/package.py b/var/spack/repos/builtin/packages/pumi/package.py
new file mode 100644
index 0000000000..f4f65a33d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pumi/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 *
+import sys
+
+
+class Pumi(CMakePackage):
+ """SCOREC RPI's Parallel Unstructured Mesh Infrastructure (PUMI).
+ An efficient distributed mesh data structure and methods to support
+ parallel adaptive analysis including general mesh-based operations,
+ such as mesh entity creation/deletion, adjacency and geometric
+ classification, iterators, arbitrary (field) data attachable to mesh
+ entities, efficient communication involving entities duplicated
+ across multiple tasks, migration of mesh entities between tasks,
+ and dynamic load balancing."""
+
+ homepage = "https://www.scorec.rpi.edu/pumi"
+ url = "https://github.com/SCOREC/core.git"
+
+ version('0.0.1', git='https://github.com/SCOREC/core.git',
+ commit='0c315e82b3f2478dc18bdd6cfa89f1cddb85cd6a')
+ version('develop', git='https://github.com/SCOREC/core.git',
+ branch='master')
+
+ if sys.platform == 'darwin':
+ patch('phiotimer.cc.darwin.patch', level=0) # !clock_gettime
+
+ variant('zoltan', default=False, description='Enable Zoltan Features')
+
+ depends_on('mpi')
+ depends_on('zoltan', when='+zoltan')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DSCOREC_CXX_WARNINGS=OFF',
+ '-DENABLE_ZOLTAN=%s' % ('ON' if '+zoltan' in spec else 'OFF'),
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+ ]
+
+ return args
diff --git a/var/spack/repos/builtin/packages/pumi/phiotimer.cc.darwin.patch b/var/spack/repos/builtin/packages/pumi/phiotimer.cc.darwin.patch
new file mode 100644
index 0000000000..52c6e63fca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pumi/phiotimer.cc.darwin.patch
@@ -0,0 +1,21 @@
+*** ./phasta/phiotimer.cc 2017-05-03 12:26:25.000000000 -0700
+--- ./phasta/phiotimer.cc.patched 2017-05-03 12:26:11.000000000 -0700
+***************
+*** 56,63 ****
+ }
+ #else
+ void phastaio_time(phastaioTime* t) {
+! int err;
+! err = clock_gettime(CLOCK_MONOTONIC,t);
+ PCU_ALWAYS_ASSERT(!err);
+ }
+ /*return elapsed time in micro seconds*/
+--- 56,63 ----
+ }
+ #else
+ void phastaio_time(phastaioTime* t) {
+! int err=0;
+! /*err = clock_gettime(CLOCK_MONOTONIC,t);*/
+ PCU_ALWAYS_ASSERT(!err);
+ }
+ /*return elapsed time in micro seconds*/
diff --git a/var/spack/repos/builtin/packages/pvm/package.py b/var/spack/repos/builtin/packages/pvm/package.py
new file mode 100644
index 0000000000..de4848413d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/pvm/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 *
+import subprocess
+
+
+class Pvm(MakefilePackage):
+ """PVM (Parallel Virtual Machine) is a software package that permits a
+ heterogeneous collection of Unix and/or Windows computers hooked together
+ by a network to be used as a single large parallel computer."""
+
+ homepage = "http://www.csm.ornl.gov/pvm/pvm_home.html"
+ url = "http://www.netlib.org/pvm3/pvm3.4.6.tgz"
+
+ version('3.4.6', '7b5f0c80ea50b6b4b10b6128e197747b')
+
+ parallel = False
+
+ @property
+ def pvm_arch(self):
+ """Returns the appropriate PVM_ARCH."""
+ process = subprocess.Popen(['lib/pvmgetarch'], stdout=subprocess.PIPE)
+ return process.communicate()[0].strip()
+
+ def edit(self, spec, prefix):
+ # Before building PVM, you must set the environment
+ # variable "PVM_ROOT" to the path where PVM resides
+ env['PVM_ROOT'] = self.stage.source_path
+
+ def install(self, spec, prefix):
+ pvm_arch = self.pvm_arch
+
+ install_tree(join_path('bin', pvm_arch), prefix.bin)
+ install_tree('include', prefix.include)
+ install_tree(join_path('lib', pvm_arch), prefix.lib)
+ install_tree('man', prefix.man)
+
+ def setup_environment(self, spack_env, run_env):
+ # Before running PVM, you must set the environment
+ # variable "PVM_ROOT" to the path where PVM resides
+ run_env.set('PVM_ROOT', self.prefix)
diff --git a/var/spack/repos/builtin/packages/py-3to2/package.py b/var/spack/repos/builtin/packages/py-3to2/package.py
index 80b95fcbfd..1a1a6f8805 100644
--- a/var/spack/repos/builtin/packages/py-3to2/package.py
+++ b/var/spack/repos/builtin/packages/py-3to2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,6 @@ class Py3to2(PythonPackage):
for Python version 3.x into Python version 2.x."""
homepage = "https://pypi.python.org/pypi/3to2"
- url = "https://pypi.python.org/packages/source/3/3to2/3to2-1.1.1.zip"
+ url = "https://pypi.io/packages/source/3/3to2/3to2-1.1.1.zip"
version('1.1.1', 'cbeed28e350dbdaef86111ace3052824')
diff --git a/var/spack/repos/builtin/packages/py-4suite-xml/package.py b/var/spack/repos/builtin/packages/py-4suite-xml/package.py
new file mode 100644
index 0000000000..e0fa713fd8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-4suite-xml/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Py4suiteXml(PythonPackage):
+ """XML tools and libraries for Python: Domlette, XPath, XSLT, XPointer,
+ XLink, XUpdate"""
+
+ homepage = "http://4suite.org/"
+ url = "https://pypi.io/packages/source/4/4Suite-XML/4Suite-XML-1.0.2.tar.gz"
+
+ version('1.0.2', '3ca3db95cb0263ad80beba034d1ff6ea')
+
+ depends_on('python@2.2.1:')
diff --git a/var/spack/repos/builtin/packages/py-abipy/package.py b/var/spack/repos/builtin/packages/py-abipy/package.py
new file mode 100644
index 0000000000..dc07aaebd2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-abipy/package.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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 PyAbipy(PythonPackage):
+ """Python package to automate ABINIT calculations and analyze
+ the results."""
+
+ homepage = "https://github.com/abinit/abipy"
+ url = "https://pypi.io/packages/source/a/abipy/abipy-0.2.0.tar.gz"
+
+ version('0.2.0', 'af9bc5cf7d5ca1a56ff73e2a65c5bcbd')
+
+ variant('gui', default=False, description='Build the GUI')
+ variant('ipython', default=False, description='Build IPython support')
+
+ extends('python', ignore='bin/(feff_.*|gaussian_analyzer|get_environment|html2text|nc3tonc4|nc4tonc3|ncinfo|pmg|pydii|tabulate|tqdm)')
+
+ depends_on('python@2.7:')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-prettytable', type=('build', 'run'))
+ depends_on('py-tabulate', type=('build', 'run'))
+ depends_on('py-apscheduler@2.1.0', type=('build', 'run'))
+ depends_on('py-pydispatcher@2.0.5:', type=('build', 'run'))
+ depends_on('py-tqdm', type=('build', 'run'))
+ depends_on('py-html2text', type=('build', 'run'))
+ depends_on('py-pyyaml@3.11:', type=('build', 'run'))
+ depends_on('py-pandas', type=('build', 'run'))
+ depends_on('py-numpy@1.9:', type=('build', 'run'))
+ depends_on('py-scipy@0.14:', type=('build', 'run'))
+ depends_on('py-spglib', type=('build', 'run'))
+ depends_on('py-pymatgen@4.7.2:', type=('build', 'run'))
+ depends_on('py-netcdf4', type=('build', 'run'))
+ depends_on('py-matplotlib@1.5:', type=('build', 'run'))
+ depends_on('py-seaborn', type=('build', 'run'))
+
+ depends_on('py-wxpython', type=('build', 'run'), when='+gui')
+ depends_on('py-wxmplot', type=('build', 'run'), when='+gui')
+
+ depends_on('py-ipython', type=('build', 'run'), when='+ipython')
+ depends_on('py-jupyter', type=('build', 'run'), when='+ipython')
+ depends_on('py-nbformat', type=('build', 'run'), when='+ipython')
+
+ def build_args(self, spec, prefix):
+ args = []
+
+ if '+ipython' in spec:
+ args.append('--with-ipython')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/py-alabaster/package.py b/var/spack/repos/builtin/packages/py-alabaster/package.py
index f2402c9bc6..2f718ca9e8 100644
--- a/var/spack/repos/builtin/packages/py-alabaster/package.py
+++ b/var/spack/repos/builtin/packages/py-alabaster/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,10 +29,12 @@ class PyAlabaster(PythonPackage):
"""Alabaster is a visually (c)lean, responsive, configurable theme
for the Sphinx documentation system."""
- homepage = "https://pypi.python.org/pypi/alabaster"
- url = "https://pypi.python.org/packages/source/a/alabaster/alabaster-0.7.9.tar.gz"
+ homepage = "https://alabaster.readthedocs.io/"
+ url = "https://pypi.io/packages/source/a/alabaster/alabaster-0.7.10.tar.gz"
- version('0.7.9', 'b29646a8bbe7aa52830375b7d17b5d7a',
- url="https://pypi.python.org/packages/71/c3/70da7d8ac18a4f4c502887bd2549e05745fa403e2cd9d06a8a9910a762bc/alabaster-0.7.9.tar.gz")
+ import_modules = ['alabaster']
+
+ version('0.7.10', '7934dccf38801faa105f6e7b4784f493')
+ version('0.7.9', 'b29646a8bbe7aa52830375b7d17b5d7a')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-apache-libcloud/package.py b/var/spack/repos/builtin/packages/py-apache-libcloud/package.py
new file mode 100644
index 0000000000..c46987f2ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-apache-libcloud/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyApacheLibcloud(PythonPackage):
+ """Python library for multiple cloud provider APIs"""
+
+ homepage = "http://libcloud.apache.org"
+ url = "https://pypi.io/packages/source/a/apache-libcloud/apache-libcloud-1.2.1.tar.gz"
+
+ version('1.2.1', '912e6fb1f2d13f7d3b58ee982b9f9d1f')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-apipkg/package.py b/var/spack/repos/builtin/packages/py-apipkg/package.py
new file mode 100644
index 0000000000..ee0f979b63
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-apipkg/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyApipkg(PythonPackage):
+ """apipkg: namespace control and lazy-import mechanism"""
+
+ homepage = "https://pypi.python.org/pypi/apipkg"
+ url = "https://pypi.io/packages/source/a/apipkg/apipkg-1.4.tar.gz"
+
+ version('1.4', '17e5668601a2322aff41548cb957e7c8')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-appdirs/package.py b/var/spack/repos/builtin/packages/py-appdirs/package.py
new file mode 100644
index 0000000000..4fd412bb39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-appdirs/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PyAppdirs(PythonPackage):
+ """A small Python module for determining appropriate platform-specific
+ dirs, e.g. a "user data dir"."""
+
+ homepage = "https://github.com/ActiveState/appdirs"
+ url = "https://pypi.io/packages/source/a/appdirs/appdirs-1.4.3.tar.gz"
+
+ import_modules = ['appdirs']
+
+ version('1.4.3', '44c679904082a2133f5566c8a0d3ab42')
+ version('1.4.0', '1d17b4c9694ab84794e228f28dc3275b')
+
+ patch('setuptools-import.patch', when='@:1.4.0')
+
+ # Newer versions of setuptools require appdirs. Although setuptools is an
+ # optional dependency of appdirs, if it is not found, setup.py will
+ # fallback on distutils.core instead. Don't add a setuptools dependency
+ # or we won't be able to bootstrap setuptools.
+
+ # depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-appdirs/setuptools-import.patch b/var/spack/repos/builtin/packages/py-appdirs/setuptools-import.patch
new file mode 100644
index 0000000000..55b3ce7b38
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-appdirs/setuptools-import.patch
@@ -0,0 +1,17 @@
+diff --git a/setup.py b/setup.py
+index ccd1e72..5d907aa 100644
+--- a/setup.py
++++ b/setup.py
+@@ -2,7 +2,11 @@
+ import sys
+ import os
+ import os.path
+-from setuptools import setup
++# appdirs is a dependency of setuptools, so allow installing without it.
++try:
++ from setuptools import setup
++except ImportError:
++ from distutils.core import setup
+ import appdirs
+
+ tests_require = []
diff --git a/var/spack/repos/builtin/packages/py-appnope/package.py b/var/spack/repos/builtin/packages/py-appnope/package.py
new file mode 100644
index 0000000000..98d3e44032
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-appnope/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/spack/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 PyAppnope(PythonPackage):
+ """Disable App Nap on OS X 10.9"""
+
+ homepage = "https://github.com/minrk/appnope"
+ url = "https://pypi.io/packages/source/a/appnope/appnope-0.1.0.tar.gz"
+
+ version('0.1.0', '932fbaa73792c9b06754755a774dcac5')
diff --git a/var/spack/repos/builtin/packages/py-apscheduler/package.py b/var/spack/repos/builtin/packages/py-apscheduler/package.py
new file mode 100644
index 0000000000..47404f9944
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-apscheduler/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyApscheduler(PythonPackage):
+ """In-process task scheduler with Cron-like capabilities."""
+
+ homepage = "https://github.com/agronholm/apscheduler"
+ url = "https://pypi.io/packages/source/A/APScheduler/APScheduler-3.3.1.tar.gz"
+
+ version('3.3.1', '6342b3b78b41920a8aa54fd3cd4a299d')
+ version('2.1.0', 'b837d23822fc46651862dd2186ec361a')
+
+ depends_on('py-setuptools@0.7:', type='build')
+
+ depends_on('py-six@1.4.0:', type=('build', 'run'))
+ depends_on('py-pytz', type=('build', 'run'))
+ depends_on('py-tzlocal@1.2:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-argcomplete/package.py b/var/spack/repos/builtin/packages/py-argcomplete/package.py
index 585540f23b..9c08f46b19 100644
--- a/var/spack/repos/builtin/packages/py-argcomplete/package.py
+++ b/var/spack/repos/builtin/packages/py-argcomplete/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class PyArgcomplete(PythonPackage):
"""Bash tab completion for argparse."""
homepage = "https://pypi.python.org/pypi/argcomplete"
- url = "https://pypi.python.org/packages/source/a/argcomplete/argcomplete-1.1.1.tar.gz"
+ url = "https://pypi.io/packages/source/a/argcomplete/argcomplete-1.1.1.tar.gz"
version('1.1.1', '89a3839096c9f991ad33828e72d21abf')
diff --git a/var/spack/repos/builtin/packages/py-argparse/package.py b/var/spack/repos/builtin/packages/py-argparse/package.py
new file mode 100644
index 0000000000..c89e30fdb2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-argparse/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyArgparse(PythonPackage):
+ """Python command-line parsing library."""
+
+ homepage = "https://github.com/ThomasWaldmann/argparse/"
+ url = "https://pypi.io/packages/source/a/argparse/argparse-1.4.0.tar.gz"
+
+ version('1.4.0', '08062d2ceb6596fcbc5a7e725b53746f')
+
+ depends_on('python@2.3:')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-ase/package.py b/var/spack/repos/builtin/packages/py-ase/package.py
new file mode 100644
index 0000000000..0030615861
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-ase/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyAse(PythonPackage):
+ """The Atomic Simulation Environment (ASE) is a set of tools
+ and Python modules for setting up, manipulating, running,
+ visualizing and analyzing atomistic simulations."""
+
+ homepage = "https://wiki.fysik.dtu.dk/ase/"
+ url = "https://pypi.io/packages/source/a/ase/ase-3.13.0.tar.gz"
+
+ version('3.13.0', 'e946a0addc5b61e5e2e75857e0f99b89')
+
+ depends_on('python@2.6:')
+ depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-asn1crypto/package.py b/var/spack/repos/builtin/packages/py-asn1crypto/package.py
new file mode 100644
index 0000000000..1e1e408b4a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-asn1crypto/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyAsn1crypto(PythonPackage):
+ """Python ASN.1 library with a focus on performance and a pythonic API """
+
+ homepage = "https://github.com/wbond/asn1crypto"
+ url = "https://pypi.io/packages/source/a/asn1crypto/asn1crypto-0.22.0.tar.gz"
+
+ version('0.22.0', '74a8b9402625b38ef19cf3fa69ef8470')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-astroid/package.py b/var/spack/repos/builtin/packages/py-astroid/package.py
index f275813d86..63be8ae470 100644
--- a/var/spack/repos/builtin/packages/py-astroid/package.py
+++ b/var/spack/repos/builtin/packages/py-astroid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-astropy/package.py b/var/spack/repos/builtin/packages/py-astropy/package.py
index 8688e0ee7e..e40fee11c6 100644
--- a/var/spack/repos/builtin/packages/py-astropy/package.py
+++ b/var/spack/repos/builtin/packages/py-astropy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,12 +31,13 @@ class PyAstropy(PythonPackage):
Python astronomy packages."""
homepage = 'http://www.astropy.org/'
- url = 'https://pypi.python.org/packages/source/a/astropy/astropy-1.1.2.tar.gz'
+ url = 'https://pypi.io/packages/source/a/astropy/astropy-1.1.2.tar.gz'
version('1.1.2', 'cbe32023b5b1177d1e2498a0d00cda51')
version('1.1.post1', 'b52919f657a37d45cc45f5cb0f58c44d')
# Required dependencies
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
# Optional dependencies
diff --git a/var/spack/repos/builtin/packages/py-attrs/package.py b/var/spack/repos/builtin/packages/py-attrs/package.py
new file mode 100644
index 0000000000..04daf75da4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-attrs/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyAttrs(PythonPackage):
+ """Python Attributes Without Boilerplate"""
+
+ homepage = "http://attrs.org/"
+ url = "https://pypi.io/packages/source/a/attrs/attrs-16.3.0.tar.gz"
+
+ version('16.3.0', '4ec003c49360853cf935113d1ae56151')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-autopep8/package.py b/var/spack/repos/builtin/packages/py-autopep8/package.py
index c892e2979c..3dff029a8a 100644
--- a/var/spack/repos/builtin/packages/py-autopep8/package.py
+++ b/var/spack/repos/builtin/packages/py-autopep8/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,21 +30,14 @@ class PyAutopep8(PythonPackage):
PEP 8 style guide."""
homepage = "https://github.com/hhatto/autopep8"
- url = "https://github.com/hhatto/autopep8/archive/v1.2.4.tar.gz"
+ url = "https://pypi.io/packages/source/a/autopep8/autopep8-1.2.4.tar.gz"
- version('1.2.4', '0458db85159a9e1b45f3e71ce6c158da')
- version('1.2.2', 'def3d023fc9dfd1b7113602e965ad8e1')
+ version('1.2.4', 'fcea19c0c5e505b425e2a78afb771f5c')
+ version('1.2.2', '3d97f9c89d14a0975bffd32a2c61c36c')
extends('python', ignore='bin/pep8')
- depends_on('python@2.6:2.7,3.2:')
+ depends_on('python@2.6:2.8,3.2:')
depends_on('py-pycodestyle@1.5.7:1.7.0', type=('build', 'run'))
depends_on('py-setuptools', type='build')
-
- def url_for_version(self, version):
- url = "https://github.com/hhatto/autopep8/archive/{0}{1}.tar.gz"
- if version >= Version('1.2.3'):
- return url.format('v', version)
- else:
- return url.format('ver', version)
diff --git a/var/spack/repos/builtin/packages/py-babel/package.py b/var/spack/repos/builtin/packages/py-babel/package.py
index 844ceab34e..8b20318c20 100644
--- a/var/spack/repos/builtin/packages/py-babel/package.py
+++ b/var/spack/repos/builtin/packages/py-babel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,10 +31,12 @@ class PyBabel(PythonPackage):
emphasis on web-based applications."""
homepage = "http://babel.pocoo.org/en/latest/"
- url = "https://pypi.python.org/packages/source/B/Babel/Babel-2.3.4.tar.gz"
+ url = "https://pypi.io/packages/source/B/Babel/Babel-2.4.0.tar.gz"
- version('2.3.4', 'afa20bc55b0e991833030129ad498f35',
- url="https://pypi.python.org/packages/6e/96/ba2a2462ed25ca0e651fb7b66e7080f5315f91425a07ea5b34d7c870c114/Babel-2.3.4.tar.gz")
+ import_modules = ['babel', 'babel.localtime', 'babel.messages']
+
+ version('2.4.0', '90e7a0add19b2036a9b415630a0d9388')
+ version('2.3.4', 'afa20bc55b0e991833030129ad498f35')
depends_on('py-setuptools', type='build')
depends_on('py-pytz', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-backports-abc/package.py b/var/spack/repos/builtin/packages/py-backports-abc/package.py
index 7d062bff6a..69cd6165b5 100644
--- a/var/spack/repos/builtin/packages/py-backports-abc/package.py
+++ b/var/spack/repos/builtin/packages/py-backports-abc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-backports-shutil-get-terminal-size/package.py b/var/spack/repos/builtin/packages/py-backports-shutil-get-terminal-size/package.py
index 5950faa765..daa019daef 100644
--- a/var/spack/repos/builtin/packages/py-backports-shutil-get-terminal-size/package.py
+++ b/var/spack/repos/builtin/packages/py-backports-shutil-get-terminal-size/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,5 +34,7 @@ class PyBackportsShutilGetTerminalSize(PythonPackage):
version('1.0.0', '03267762480bd86b50580dc19dff3c66')
- depends_on('py-setuptools', type='build')
- depends_on('python@:3.2.999')
+ # newer setuptools version mess with "namespace" packages in an
+ # incompatible way cf. https://github.com/pypa/setuptools/issues/900
+ depends_on('py-setuptools@:30.999.999', type='build')
+ depends_on('python@:3.2')
diff --git a/var/spack/repos/builtin/packages/py-backports-ssl-match-hostname/package.py b/var/spack/repos/builtin/packages/py-backports-ssl-match-hostname/package.py
index bf4679556b..88edc5b571 100644
--- a/var/spack/repos/builtin/packages/py-backports-ssl-match-hostname/package.py
+++ b/var/spack/repos/builtin/packages/py-backports-ssl-match-hostname/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,5 +32,3 @@ class PyBackportsSslMatchHostname(PythonPackage):
url = "https://pypi.io/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_hostname-3.5.0.1.tar.gz"
version('3.5.0.1', 'c03fc5e2c7b3da46b81acf5cbacfe1e6')
-
- depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-basemap/package.py b/var/spack/repos/builtin/packages/py-basemap/package.py
index 4a35134e40..4e127f9626 100644
--- a/var/spack/repos/builtin/packages/py-basemap/package.py
+++ b/var/spack/repos/builtin/packages/py-basemap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,7 +23,6 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
class PyBasemap(PythonPackage):
@@ -35,7 +34,10 @@ class PyBasemap(PythonPackage):
version('1.0.7', '48c0557ced9e2c6e440b28b3caff2de8')
- depends_on('py-setuptools', type='build')
+ # Per Github issue #3813, setuptools is required at runtime in order
+ # to make mpl_toolkits a namespace package that can span multiple
+ # directories (i.e., matplotlib and basemap)
+ depends_on('py-setuptools', type=('build', 'run'))
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run'))
depends_on('pil', type=('build', 'run'))
@@ -43,79 +45,3 @@ class PyBasemap(PythonPackage):
def setup_environment(self, spack_env, run_env):
spack_env.set('GEOS_DIR', self.spec['geos'].prefix)
-
- @PythonPackage.sanity_check('install')
- def post_install_patch(self):
- spec = self.spec
- # We are not sure if this fix is needed before Python 3.5.2.
- # If it is needed, this test should be changed.
- # See: https://github.com/LLNL/spack/pull/1964
- if spec['python'].version >= Version('3.5.2'):
- # Use symlinks to join the two mpl_toolkits/ directories into
- # one, inside of basemap. This is because Basemap tries to
- # "add to" an existing package in Matplotlib, which is only
- # legal Python for "Implicit Namespace Packages":
- # https://www.python.org/dev/peps/pep-0420/
- # https://github.com/Homebrew/homebrew-python/issues/112
- # In practice, Python will see only the basemap version of
- # mpl_toolkits
- path_m = find_package_dir(
- spec['py-matplotlib'].prefix, 'mpl_toolkits')
- path_b = find_package_dir(spec.prefix, 'mpl_toolkits')
- link_dir(path_m, path_b)
-
-
-def find_package_dir(spack_package_root, name):
-
- """Finds directory with a specific name, somewhere inside a Spack
- package.
-
- spack_package_root:
- Root directory to start searching
- oldname:
- Original name of package (not fully qualified, just the leaf)
- newname:
- What to rename it to
-
- """
- for root, dirs, files in os.walk(spack_package_root):
- path = os.path.join(root, name)
-
- # Make sure it's a directory
- if not os.path.isdir(path):
- continue
-
- # Make sure it's really a package
- if not os.path.exists(os.path.join(path, '__init__.py')):
- continue
-
- return path
-
- return None
-
-
-def link_dir(src_root, dest_root, link=os.symlink):
- """Link all files in src_root into directory dest_root"""
-
- for src_path, dirnames, filenames in os.walk(src_root):
- if not filenames:
- continue # avoid explicitly making empty dirs
-
- # Avoid internal Python stuff
- src_leaf = os.path.split(src_path)[1]
- if src_leaf.startswith('__'):
- continue
-
- # Make sure the destination directory exists
- dest_path = os.path.join(dest_root, src_path[len(src_root) + 1:])
- try:
- os.makedirs(dest_path)
- except:
- pass
-
- # Link all files from src to dest directory
- for fname in filenames:
- src = os.path.join(src_path, fname)
- dst = os.path.join(dest_path, fname)
- if not os.path.exists(dst):
- link(src, dst)
diff --git a/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py b/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
index 3a90d02127..4874f1cba5 100644
--- a/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
+++ b/var/spack/repos/builtin/packages/py-beautifulsoup4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,11 +31,10 @@ class PyBeautifulsoup4(PythonPackage):
of navigating, searching, and modifying the parse tree."""
homepage = "https://www.crummy.com/software/BeautifulSoup"
- url = "https://pypi.python.org/packages/source/b/beautifulsoup4/beautifulsoup4-4.4.1.tar.gz"
+ url = "https://pypi.io/packages/source/b/beautifulsoup4/beautifulsoup4-4.5.3.tar.gz"
- version('4.5.1', '994abd90e691beaf7d42c00ffb2f3a67',
- url='https://www.crummy.com/software/BeautifulSoup/bs4/'
- 'download/4.5/beautifulsoup4-4.5.1.tar.gz')
+ version('4.5.3', '937e0df0d699a1237646f38fd567f0c6')
+ version('4.5.1', '994abd90e691beaf7d42c00ffb2f3a67')
version('4.4.1', '8fbd9a7cac0704645fa20d1419036815')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-binwalk/package.py b/var/spack/repos/builtin/packages/py-binwalk/package.py
new file mode 100644
index 0000000000..25f9eb5dd0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-binwalk/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyBinwalk(PythonPackage):
+ """Binwalk is a fast, easy to use tool for analyzing, reverse engineering,
+ and extracting firmware images."""
+
+ homepage = "https://github.com/devttys0/binwalk"
+ url = "https://pypi.io/packages/source/b/binwalk/binwalk-2.1.0.tar.gz"
+
+ version('2.1.0', '054867d9abe6a05f43200cf2591051e6')
+
+ depends_on('python')
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-biom-format/package.py b/var/spack/repos/builtin/packages/py-biom-format/package.py
new file mode 100644
index 0000000000..1323ddee3b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-biom-format/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 PyBiomFormat(PythonPackage):
+ """The BIOM file format (canonically pronounced biome) is designed to be
+ a general-use format for representing biological sample by observation
+ contingency tables."""
+
+ homepage = "https://pypi.python.org/pypi/biom-format/2.1.6"
+ url = "https://pypi.io/packages/source/b/biom-format/biom-format-2.1.6.tar.gz"
+
+ version('2.1.6', '1dd4925b74c56e8ee864d5e1973068de')
+
+ variant('h5py', default=True, description='For use with BIOM 2.0+ files')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-h5py', type=('build', 'run'), when='+h5py')
+ depends_on('py-click', type=('build', 'run'))
+ depends_on('py-numpy@1.3.0:', type=('build', 'run'))
+ depends_on('py-future@0.16.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.13.0:', type=('build', 'run'))
+ depends_on('py-pandas@0.19.2:', type=('build', 'run'))
+ depends_on('py-six@1.10.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-biopython/package.py b/var/spack/repos/builtin/packages/py-biopython/package.py
index 3411e244f9..4fcfeaf81d 100644
--- a/var/spack/repos/builtin/packages/py-biopython/package.py
+++ b/var/spack/repos/builtin/packages/py-biopython/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-bleach/package.py b/var/spack/repos/builtin/packages/py-bleach/package.py
index 4a6d7ed9d2..aa7866c3c3 100644
--- a/var/spack/repos/builtin/packages/py-bleach/package.py
+++ b/var/spack/repos/builtin/packages/py-bleach/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,11 +29,11 @@ class PyBleach(PythonPackage):
"""An easy whitelist-based HTML-sanitizing tool."""
homepage = "http://github.com/mozilla/bleach"
- url = "https://pypi.python.org/packages/99/00/25a8fce4de102bf6e3cc76bc4ea60685b2fee33bde1b34830c70cacc26a7/bleach-1.5.0.tar.gz"
+ url = "https://pypi.io/packages/source/b/bleach/bleach-1.5.0.tar.gz"
version('1.5.0', 'b663300efdf421b3b727b19d7be9c7e7')
- depends_on('python@2.6:2.7,3.2:3.5')
+ depends_on('python@2.6:2.8,3.2:3.5')
depends_on('py-setuptools', type='build')
depends_on('py-six', type=('build', 'run'))
depends_on('py-html5lib@0.999,0.999999:0.9999999', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-blessings/package.py b/var/spack/repos/builtin/packages/py-blessings/package.py
index b38f34b412..9f5b57c469 100644
--- a/var/spack/repos/builtin/packages/py-blessings/package.py
+++ b/var/spack/repos/builtin/packages/py-blessings/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyBlessings(PythonPackage):
"""A nicer, kinder way to write to the terminal """
homepage = "https://github.com/erikrose/blessings"
- url = "https://pypi.python.org/packages/source/b/blessings/blessings-1.6.tar.gz"
+ url = "https://pypi.io/packages/source/b/blessings/blessings-1.6.tar.gz"
version('1.6', '4f552a8ebcd4982693c92571beb99394')
diff --git a/var/spack/repos/builtin/packages/py-bokeh/package.py b/var/spack/repos/builtin/packages/py-bokeh/package.py
new file mode 100644
index 0000000000..00850c51aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-bokeh/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PyBokeh(PythonPackage):
+ """Statistical and novel interactive HTML plots for Python"""
+
+ homepage = "http://github.com/bokeh/bokeh"
+ url = "https://pypi.io/packages/source/b/bokeh/bokeh-0.12.2.tar.gz"
+
+ version('0.12.2', '2d1621bffe6e2ab9d42efbf733861c4f')
+
+ depends_on('python@2.6:')
+ depends_on('py-six@1.5.2:', type=('build', 'run'))
+ depends_on('py-requests@1.2.3:', type=('build', 'run'))
+ depends_on('py-pyyaml@3.10:', type=('build', 'run'))
+ depends_on('py-dateutil@2.1:', type=('build', 'run'))
+ depends_on('py-jinja2@2.7:', type=('build', 'run'))
+ depends_on('py-numpy@1.7.1:', type=('build', 'run'))
+ depends_on('py-tornado@4.3:', type=('build', 'run'))
+ depends_on('py-futures@3.0.3:', type=('build', 'run'),
+ when='^python@2.7:2.8')
diff --git a/var/spack/repos/builtin/packages/py-boltons/package.py b/var/spack/repos/builtin/packages/py-boltons/package.py
new file mode 100644
index 0000000000..54355ad7f1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-boltons/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyBoltons(PythonPackage):
+ """When they're not builtins, they're boltons.
+
+ Functionality that should be in the standard library. Like builtins,
+ but Boltons.
+
+ Otherwise known as, "everyone's util.py," but cleaned up and tested.
+ """
+ homepage = "https://boltons.readthedocs.io/"
+ url = "https://pypi.io/packages/source/b/boltons/boltons-16.5.1.tar.gz"
+
+ version('16.5.1', '014b10f240fa509fc333ebff4978111b')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-bottleneck/package.py b/var/spack/repos/builtin/packages/py-bottleneck/package.py
index a1215ce39e..4fe32139b6 100644
--- a/var/spack/repos/builtin/packages/py-bottleneck/package.py
+++ b/var/spack/repos/builtin/packages/py-bottleneck/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,8 +28,9 @@ from spack import *
class PyBottleneck(PythonPackage):
"""A collection of fast NumPy array functions written in Cython."""
homepage = "https://pypi.python.org/pypi/Bottleneck/1.0.0"
- url = "https://pypi.python.org/packages/source/B/Bottleneck/Bottleneck-1.0.0.tar.gz"
+ url = "https://pypi.io/packages/source/B/Bottleneck/Bottleneck-1.0.0.tar.gz"
version('1.0.0', '380fa6f275bd24f27e7cf0e0d752f5d2')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-brian/package.py b/var/spack/repos/builtin/packages/py-brian/package.py
new file mode 100644
index 0000000000..68ed005b4a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-brian/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyBrian(PythonPackage):
+ """A clock-driven simulator for spiking neural networks"""
+
+ homepage = "http://www.briansimulator.org"
+ url = "https://pypi.io/packages/source/b/brian/brian-1.4.3.tar.gz"
+
+ version('1.4.3', '0570099bcce4d7afde73ff4126e6c30f')
+
+ depends_on('py-matplotlib@0.90.1:', type=('build', 'run'))
+ depends_on('py-numpy@1.4.1:', type=('build', 'run'))
+ depends_on('py-scipy@0.7.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-brian2/package.py b/var/spack/repos/builtin/packages/py-brian2/package.py
new file mode 100644
index 0000000000..bf28c5cda2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-brian2/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 PyBrian2(PythonPackage):
+ """A clock-driven simulator for spiking neural networks"""
+
+ homepage = "http://www.briansimulator.org"
+ url = "https://pypi.io/packages/source/B/Brian2/Brian2-2.0.1.tar.gz"
+
+ version('2.0.1', 'df5990e9a71f7344887bc02f54dfd0f0')
+ version('2.0rc3', '3100c5e4eb9eb83a06ff0413a7d43152')
+
+ variant('docs', default=False, description='Build the documentation')
+
+ # depends on py-setuptools@6: for windows, if spack targets windows,
+ # this will need to be added here
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.8.2:', type=('build', 'run'))
+ depends_on('py-sympy@0.7.6:', type=('build', 'run'))
+ depends_on('py-pyparsing', type=('build', 'run'))
+ depends_on('py-jinja2@2.7:', type=('build', 'run'))
+ depends_on('py-cpuinfo@0.1.6:', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nosetests@1.0:', type='test')
+ depends_on('py-sphinx@1.4.2:', type=('build', 'run'), when='+docs')
diff --git a/var/spack/repos/builtin/packages/py-bsddb3/package.py b/var/spack/repos/builtin/packages/py-bsddb3/package.py
new file mode 100644
index 0000000000..91b8d72665
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-bsddb3/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyBsddb3(PythonPackage):
+ """This module provides a nearly complete wrapping of the Oracle/Sleepycat
+ C API for the Database Environment, Database, Cursor, Log Cursor,
+ Sequence and Transaction objects, and each of these is exposed
+ as a Python type in the bsddb3.db module."""
+
+ homepage = "://pypi.python.org/pypi/bsddb3/6.2.5"
+ url = "https://pypi.python.org/packages/ba/a7/131dfd4e3a5002ef30e20bee679d5e6bcb2fcc6af21bd5079dc1707a132c/bsddb3-6.2.5.tar.gz#md5=610267c189964c905a931990e1ba438c"
+
+ version('6.2.5', '610267c189964c905a931990e1ba438c')
+
+ depends_on('python@2.6:')
+ depends_on('py-setuptools')
diff --git a/var/spack/repos/builtin/packages/py-cclib/package.py b/var/spack/repos/builtin/packages/py-cclib/package.py
index b59376d7b8..7d47dcf3fb 100644
--- a/var/spack/repos/builtin/packages/py-cclib/package.py
+++ b/var/spack/repos/builtin/packages/py-cclib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-cdat-lite/package.py b/var/spack/repos/builtin/packages/py-cdat-lite/package.py
new file mode 100644
index 0000000000..a7bf68d50f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-cdat-lite/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 PyCdatLite(PythonPackage):
+ """Cdat-lite is a Python package for managing and analysing climate
+ science data. It is a subset of the Climate Data Analysis Tools (CDAT)
+ developed by PCMDI at Lawrence Livermore National Laboratory."""
+
+ homepage = "http://proj.badc.rl.ac.uk/cedaservices/wiki/CdatLite"
+ url = "https://pypi.io/packages/source/c/cdat-lite/cdat-lite-6.0.1.tar.gz"
+
+ version('6.0.1', '6d5a6e86f15ce15291d25feab8793248')
+
+ depends_on("netcdf")
+ depends_on("python@2.5:2.8", type=('build', 'run'))
+ depends_on("py-numpy", type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+
+ phases = ['install']
+
+ def install(self, spec, prefix):
+ """Install everything from build directory."""
+ install_args = self.install_args(spec, prefix)
+ # Combine all phases into a single setup.py command,
+ # otherwise extensions are rebuilt without rpath by install phase:
+ self.setup_py('build_ext', '--rpath=%s' % ":".join(self.rpath),
+ 'build_py', 'build_scripts',
+ 'install', *install_args)
diff --git a/var/spack/repos/builtin/packages/py-cdo/package.py b/var/spack/repos/builtin/packages/py-cdo/package.py
index 5eb8f414a8..c5b6d39982 100644
--- a/var/spack/repos/builtin/packages/py-cdo/package.py
+++ b/var/spack/repos/builtin/packages/py-cdo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,13 +30,12 @@ class PyCdo(PythonPackage):
Operators from Python."""
homepage = "https://pypi.python.org/pypi/cdo"
- url = "https://pypi.python.org/packages/sources/c/cdo/cdo-1.3.2.tar.gz"
+ url = "https://pypi.io/packages/source/c/cdo/cdo-1.3.2.tar.gz"
- version('1.3.2', '4b3686ec1b9b891f166c1c466c6db745',
- url="https://pypi.python.org/packages/d6/13/908e7c1451e1f5fb68405f341cdcb3196a16952ebfe1f172cb788f864aa9/cdo-1.3.2.tar.gz")
+ version('1.3.2', '4b3686ec1b9b891f166c1c466c6db745')
depends_on('cdo')
depends_on('py-setuptools', type='build')
depends_on('py-scipy', type=('build', 'run'))
- depends_on('py-netcdf', type=('build', 'run'))
+ depends_on('py-netcdf4', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-certifi/package.py b/var/spack/repos/builtin/packages/py-certifi/package.py
index 959c0221ed..8a5df53a27 100644
--- a/var/spack/repos/builtin/packages/py-certifi/package.py
+++ b/var/spack/repos/builtin/packages/py-certifi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,12 @@ class PyCertifi(PythonPackage):
"""Certifi: A carefully curated collection of Root Certificates for validating
the trustworthiness of SSL certificates while verifying the identity of TLS
hosts."""
- homepage = "https://github.com/certifi/python-certifi"
- url = "https://github.com/certifi/python-certifi/archive/2016.02.28.tar.gz"
+ homepage = "http://certifi.io/"
+ url = "https://pypi.io/packages/source/c/certifi/certifi-2017.1.23.tar.gz"
+ import_modules = ['certifi']
+
+ version('2017.1.23', 'b72521a8badff5e89a8eabea586d79ab')
version('2016.02.28', '5ccfc23bd5e931863f0b01ef3e9d2dbd3bef0e1b')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-cffi/package.py b/var/spack/repos/builtin/packages/py-cffi/package.py
index c0fbae639b..d75c9a4f38 100644
--- a/var/spack/repos/builtin/packages/py-cffi/package.py
+++ b/var/spack/repos/builtin/packages/py-cffi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,15 +23,18 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
class PyCffi(PythonPackage):
"""Foreign Function Interface for Python calling C code"""
homepage = "http://cffi.readthedocs.org/en/latest/"
- # base https://pypi.python.org/pypi/cffi
- url = "https://pypi.python.org/packages/source/c/cffi/cffi-1.1.2.tar.gz"
+ url = "https://pypi.io/packages/source/c/cffi/cffi-1.10.0.tar.gz"
- version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea')
+ import_modules = ['cffi']
+
+ version('1.10.0', '2b5fa41182ed0edaf929a789e602a070')
+ version('1.1.2', 'ca6e6c45b45caa87aee9adc7c796eaea')
depends_on('py-setuptools', type='build')
depends_on('py-pycparser', type=('build', 'run'))
@@ -44,4 +47,5 @@ class PyCffi(PythonPackage):
# other compilation. We are setting the 'LDSHARED" to the
# spack compiler wrapper plus a few extra flags necessary for
# building the shared library.
- spack_env.set('LDSHARED', "{0} -shared -pthread".format(spack_cc))
+ if not sys.platform == 'darwin':
+ spack_env.set('LDSHARED', "{0} -shared -pthread".format(spack_cc))
diff --git a/var/spack/repos/builtin/packages/py-chardet/package.py b/var/spack/repos/builtin/packages/py-chardet/package.py
new file mode 100644
index 0000000000..c62bd1bef3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-chardet/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyChardet(PythonPackage):
+ """Universal encoding detector for Python 2 and 3"""
+
+ homepage = "https://github.com/chardet/chardet"
+ url = "https://pypi.io/packages/source/c/chardet/chardet-2.3.0.tar.gz"
+
+ version('2.3.0', '25274d664ccb5130adae08047416e1a8')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-click/package.py b/var/spack/repos/builtin/packages/py-click/package.py
new file mode 100644
index 0000000000..dd2b1b3e5e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-click/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyClick(PythonPackage):
+ """A simple wrapper around optparse for powerful command line utilities."""
+
+ homepage = "http://github.com/mitsuhiko/click"
+ url = "https://pypi.io/packages/source/c/click/click-6.6.tar.gz"
+
+ version('6.6', 'd0b09582123605220ad6977175f3e51d')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-colorama/package.py b/var/spack/repos/builtin/packages/py-colorama/package.py
new file mode 100644
index 0000000000..d9e2678e6e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-colorama/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyColorama(PythonPackage):
+ """Cross-platform colored terminal text."""
+
+ homepage = "https://github.com/tartley/colorama"
+ url = "https://pypi.io/packages/source/c/colorama/colorama-0.3.7.tar.gz"
+
+ version('0.3.7', '349d2b02618d3d39e5c6aede36fe3c1a')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-netcdf/package.py b/var/spack/repos/builtin/packages/py-colormath/package.py
index 2d35320ca0..374dcd3c8e 100644
--- a/var/spack/repos/builtin/packages/py-netcdf/package.py
+++ b/var/spack/repos/builtin/packages/py-colormath/package.py
@@ -1,12 +1,12 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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
+# For details, see https://github.com/spack/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
@@ -25,14 +25,14 @@
from spack import *
-class PyNetcdf(PythonPackage):
- """Python interface to the netCDF Library."""
- homepage = "http://unidata.github.io/netcdf4-python"
- url = "https://github.com/Unidata/netcdf4-python/tarball/v1.2.3.1rel"
+class PyColormath(PythonPackage):
+ """Color math and conversion library."""
- version('1.2.3.1', '4fc4320d4f2a77b894ebf8da1c9895af')
+ homepage = "https://pypi.python.org/pypi/colormath/2.1.1"
+ url = "https://pypi.io/packages/source/c/colormath/colormath-2.1.1.tar.gz"
+ version('2.1.1', '10a0fb17e3c24363d0e1a3f2dccaa33b')
+
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
- depends_on('py-cython', type=('build', 'run'))
- depends_on('py-setuptools', type=('build', 'run'))
- depends_on('netcdf')
+ depends_on('py-networkx', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-configparser/package.py b/var/spack/repos/builtin/packages/py-configparser/package.py
index c9ba7ac15c..2d463b3ef3 100644
--- a/var/spack/repos/builtin/packages/py-configparser/package.py
+++ b/var/spack/repos/builtin/packages/py-configparser/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,16 +29,13 @@ class PyConfigparser(PythonPackage):
"""This library brings the updated configparser from Python 3.5 to
Python 2.6-3.5."""
- homepage = "https://pypi.python.org/pypi/configparser"
- url = "https://pypi.python.org/packages/source/c/configparser/configparser-3.5.0.tar.gz"
+ homepage = "https://docs.python.org/3/library/configparser.html"
+ url = "https://pypi.io/packages/source/c/configparser/configparser-3.5.0.tar.gz"
- version('3.5.0', 'cfdd915a5b7a6c09917a64a573140538',
- url="https://pypi.python.org/packages/7c/69/c2ce7e91c89dc073eb1aa74c0621c3eefbffe8216b3f9af9d3885265c01c/configparser-3.5.0.tar.gz")
+ version('3.5.0', 'cfdd915a5b7a6c09917a64a573140538')
- depends_on('python@2.6:2.7,3.4:')
+ depends_on('py-setuptools', type='build')
# This dependency breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
- # depends_on('py-ordereddict', when='^python@2.6:2.6.999', type=('build', 'run')) # noqa
-
- depends_on('py-setuptools', type='build')
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-ordereddict', when='^python@:2.6', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-counter/package.py b/var/spack/repos/builtin/packages/py-counter/package.py
new file mode 100644
index 0000000000..37f1d62203
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-counter/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyCounter(PythonPackage):
+ """Counter package defines the "counter.Counter" class similar to
+ bags or multisets in other languages."""
+
+ import_modules = ['counter']
+
+ homepage = "https://github.com/KelSolaar/Counter"
+ url = "https://pypi.io/packages/source/C/Counter/Counter-1.0.0.tar.gz"
+
+ version('1.0.0', '1b49029693c28813ff276c2b16673f98')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-coverage/package.py b/var/spack/repos/builtin/packages/py-coverage/package.py
index dc8fc08e24..6912c7e898 100644
--- a/var/spack/repos/builtin/packages/py-coverage/package.py
+++ b/var/spack/repos/builtin/packages/py-coverage/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,9 @@ class PyCoverage(PythonPackage):
""" Testing coverage checker for python """
homepage = "http://nedbatchelder.com/code/coverage/"
- url = "https://pypi.python.org/packages/source/c/coverage/coverage-4.0a6.tar.gz"
+ url = "https://pypi.io/packages/source/c/coverage/coverage-4.3.4.tar.gz"
+ version('4.3.4', '89759813309185efcf4af8b9f7762630')
version('4.0a6', '1bb4058062646148965bef0796b61efc')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-cpuinfo/package.py b/var/spack/repos/builtin/packages/py-cpuinfo/package.py
new file mode 100644
index 0000000000..ae75451311
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-cpuinfo/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyCpuinfo(PythonPackage):
+ """Get CPU info with pure Python 2 & 3"""
+
+ homepage = "https://github.com/workhorsy/py-cpuinfo"
+ url = "https://pypi.io/packages/source/p/py-cpuinfo/py-cpuinfo-0.2.3.tar.gz"
+
+ version('0.2.3', '780ff46a0e122af09cb2c40b2706c6dc')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-cryptography/package.py b/var/spack/repos/builtin/packages/py-cryptography/package.py
new file mode 100644
index 0000000000..9ecf7015fc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-cryptography/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 PyCryptography(PythonPackage):
+ """cryptography is a package which provides cryptographic recipes
+ and primitives to Python developers"""
+
+ homepage = "https://pypi.python.org/pypi/cryptography"
+ url = "https://pypi.io/packages/source/c/cryptography/cryptography-1.8.1.tar.gz"
+
+ version('1.8.1', '9f28a9c141995cd2300d0976b4fac3fb')
+
+ # dependencies taken from https://github.com/pyca/cryptography/blob/master/setup.py
+ depends_on('py-setuptools@20.5:', type='build')
+ depends_on('py-cffi@1.4.1:', type=('build', 'run'))
+ depends_on('py-asn1crypto@0.21.0:', type=('build', 'run'))
+ depends_on('py-six@1.4.1:', type=('build', 'run'))
+ depends_on('py-idna@2.1:', type=('build', 'run'))
+ depends_on('py-enum34', type=('build', 'run'), when='^python@:3.4')
+ depends_on('py-ipaddress', type=('build', 'run'), when='^python@:3.3')
+ depends_on('openssl')
diff --git a/var/spack/repos/builtin/packages/py-csvkit/package.py b/var/spack/repos/builtin/packages/py-csvkit/package.py
index 5bcda9f449..05682652c0 100644
--- a/var/spack/repos/builtin/packages/py-csvkit/package.py
+++ b/var/spack/repos/builtin/packages/py-csvkit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,13 +30,15 @@ class PyCsvkit(PythonPackage):
formats"""
homepage = 'http://csvkit.rtfd.org/'
- url = "https://pypi.python.org/packages/source/c/csvkit/csvkit-0.9.1.tar.gz"
+ url = "https://pypi.io/packages/source/c/csvkit/csvkit-0.9.1.tar.gz"
version('0.9.1', '48d78920019d18846933ee969502fff6')
- depends_on('py-dateutil', type=('build', 'run'))
- depends_on('py-dbf', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-dateutil@2.2', type=('build', 'run'), when='@0.9.1')
+ depends_on('py-dateutil', type=('build', 'run'), when='@0.9.2:')
+ depends_on('py-dbf@0.94.003', type=('build', 'run'))
depends_on('py-xlrd', type=('build', 'run'))
depends_on('py-sqlalchemy', type=('build', 'run'))
depends_on('py-six', type=('build', 'run'))
- depends_on('py-openpyxl', type=('build', 'run'))
+ depends_on('py-openpyxl@2.2.0-b1', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-current/package.py b/var/spack/repos/builtin/packages/py-current/package.py
new file mode 100644
index 0000000000..f4cd082492
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-current/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyCurrent(PythonPackage):
+ """Current module relative paths and imports"""
+
+ homepage = "http://github.com/xflr6/current"
+ url = "https://pypi.io/packages/source/c/current/current-0.3.1.zip"
+
+ version('0.3.1', '6378769c64d76831e72a6930b47ced27')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-cutadapt/package.py b/var/spack/repos/builtin/packages/py-cutadapt/package.py
new file mode 100644
index 0000000000..5f029375e7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-cutadapt/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyCutadapt(PythonPackage):
+ """Cutadapt finds and removes adapter sequences, primers, poly-A tails and
+ other types of unwanted sequence from your high-throughput sequencing
+ reads."""
+
+ homepage = "https://cutadapt.readthedocs.io"
+ url = "https://pypi.io/packages/source/c/cutadapt/cutadapt-1.13.tar.gz"
+
+ version('1.13', '2d2d14e0c20ad53d7d84b57bc3e63b4c')
+
+ depends_on('python@2.6:', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build'))
+ depends_on('py-xopen@0.1.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-cycler/package.py b/var/spack/repos/builtin/packages/py-cycler/package.py
index f2b2a15018..de0be6903f 100644
--- a/var/spack/repos/builtin/packages/py-cycler/package.py
+++ b/var/spack/repos/builtin/packages/py-cycler/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-cython/package.py b/var/spack/repos/builtin/packages/py-cython/package.py
index c84728cf3e..33b980d87b 100644
--- a/var/spack/repos/builtin/packages/py-cython/package.py
+++ b/var/spack/repos/builtin/packages/py-cython/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-dask/package.py b/var/spack/repos/builtin/packages/py-dask/package.py
index 4113c2ac0b..7534e7ae7e 100644
--- a/var/spack/repos/builtin/packages/py-dask/package.py
+++ b/var/spack/repos/builtin/packages/py-dask/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyDask(PythonPackage):
"""Minimal task scheduling abstraction"""
homepage = "https://github.com/dask/dask/"
- url = "https://pypi.python.org/packages/source/d/dask/dask-0.8.1.tar.gz"
+ url = "https://pypi.io/packages/source/d/dask/dask-0.8.1.tar.gz"
version('0.8.1', '5dd8e3a3823b3bc62c9a6d192e2cb5b4')
diff --git a/var/spack/repos/builtin/packages/py-dateutil/package.py b/var/spack/repos/builtin/packages/py-dateutil/package.py
index 3ab5ad029c..f2b8b29429 100644
--- a/var/spack/repos/builtin/packages/py-dateutil/package.py
+++ b/var/spack/repos/builtin/packages/py-dateutil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,8 +28,9 @@ from spack import *
class PyDateutil(PythonPackage):
"""Extensions to the standard Python datetime module."""
homepage = "https://pypi.python.org/pypi/dateutil"
- url = "https://pypi.python.org/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz"
+ url = "https://pypi.io/packages/source/p/python-dateutil/python-dateutil-2.4.0.tar.gz"
+ version('2.2', 'c1f654d0ff7e33999380a8ba9783fd5c')
version('2.4.0', '75714163bb96bedd07685cdb2071b8bc')
version('2.4.2', '4ef68e1c485b09e9f034e10473e5add2')
version('2.5.2', 'eafe168e8f404bf384514f5116eedbb6')
diff --git a/var/spack/repos/builtin/packages/py-dbf/package.py b/var/spack/repos/builtin/packages/py-dbf/package.py
index 56403405e8..2dfc9cd3ec 100644
--- a/var/spack/repos/builtin/packages/py-dbf/package.py
+++ b/var/spack/repos/builtin/packages/py-dbf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,7 @@ class PyDbf(PythonPackage):
.dbf files (including memos)"""
homepage = 'https://pypi.python.org/pypi/dbf'
- url = "https://pypi.python.org/packages/source/d/dbf/dbf-0.96.005.tar.gz"
+ url = "https://pypi.io/packages/source/d/dbf/dbf-0.96.005.tar.gz"
version('0.96.005', 'bce1a1ed8b454a30606e7e18dd2f8277')
+ version('0.94.003', '33a659ec90d7e8d8ffcd69d2189c0c6c')
diff --git a/var/spack/repos/builtin/packages/py-decorator/package.py b/var/spack/repos/builtin/packages/py-decorator/package.py
index e5734866ec..b33bcbc6ee 100644
--- a/var/spack/repos/builtin/packages/py-decorator/package.py
+++ b/var/spack/repos/builtin/packages/py-decorator/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class PyDecorator(PythonPackage):
for the average programmer, and to popularize decorators by showing
various non-trivial examples."""
homepage = "https://github.com/micheles/decorator"
- url = "https://pypi.python.org/packages/source/d/decorator/decorator-4.0.9.tar.gz"
+ url = "https://pypi.io/packages/source/d/decorator/decorator-4.0.9.tar.gz"
version('4.0.9', 'f12c5651ccd707e12a0abaa4f76cd69a')
diff --git a/var/spack/repos/builtin/packages/py-deeptools/package.py b/var/spack/repos/builtin/packages/py-deeptools/package.py
new file mode 100644
index 0000000000..68f77628ea
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-deeptools/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PyDeeptools(PythonPackage):
+ """deepTools addresses the challenge of handling the large amounts of data
+ that are now routinely generated from DNA sequencing centers."""
+
+ homepage = "https://pypi.io/packages/source/d/deepTools"
+ url = "https://pypi.io/packages/source/d/deepTools/deepTools-2.5.2.tar.gz"
+
+ version('2.5.2', 'ba8a44c128c6bb1ed4ebdb20bf9ae9c2')
+
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.9.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.17.0:', type=('build', 'run'))
+ depends_on('py-py2bit@0.2.0:', type=('build', 'run'))
+ depends_on('py-pybigwig@0.2.1:', type=('build', 'run'))
+ depends_on('py-pysam@0.8.2:', type=('build', 'run'))
+ depends_on('py-matplotlib@1.4.0:', type=('build', 'run'))
+ depends_on('py-numpydoc@0.5:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-dev/__init__.py.patch b/var/spack/repos/builtin/packages/py-dev/__init__.py.patch
new file mode 100644
index 0000000000..1c783b82c8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dev/__init__.py.patch
@@ -0,0 +1,10 @@
+--- a/dev/__init__.py 2017-03-24 13:46:56.211385166 +0000
++++ b/dev/__init__.py 2017-03-24 13:47:01.535332256 +0000
+@@ -1,6 +1,6 @@
+ """
+
+-🚧 About
++About
+ --------
+
+ dev is a collection of Python developer tools presented as a
diff --git a/var/spack/repos/builtin/packages/py-dev/package.py b/var/spack/repos/builtin/packages/py-dev/package.py
new file mode 100644
index 0000000000..49b0e9b2c3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dev/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyDev(PythonPackage):
+ """libraries and tools for Python development"""
+
+ homepage = "https://pypi.python.org/pypi/dev"
+ url = "https://pypi.io/packages/source/d/dev/dev-0.4.0.tar.gz"
+
+ version('0.4.0', '00449cf0b347c32da9c840adcb4cf24b')
+
+ patch('__init__.py.patch')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-dill/package.py b/var/spack/repos/builtin/packages/py-dill/package.py
new file mode 100644
index 0000000000..f5be93cdd7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dill/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 PyDill(PythonPackage):
+ """Serialize all of python """
+
+ homepage = "https://github.com/uqfoundation/dill"
+ url = "https://pypi.io/packages/source/d/dill/dill-0.2.6.zip"
+
+ version('0.2.6', 'f8b98b15223d23431024349f2102b4f9')
+ version('0.2.5', 'c9eecc32351f4934e2e67740a40397f6')
+ version('0.2.4', '5d10cd1cafea38a45bcd4542f2ca3adc')
+ version('0.2.3', '0b6c4f55da320893991cc32628a6e9be')
+ version('0.2.2', 'a282b81a6d289f91218bba8d07f49bd8')
+ version('0.2.1', 'b2354a5717da6228acae33cb13bc407b')
+ version('0.2', '759002d9b71605cde2a7a052dad96b5d')
+
+ depends_on('python@2.5:2.8,3.1:')
+
+ depends_on('py-setuptools@0.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/py-dlcpar/package.py b/var/spack/repos/builtin/packages/py-dlcpar/package.py
new file mode 100644
index 0000000000..22e1ccd5a6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dlcpar/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyDlcpar(PythonPackage):
+ """FIXME: Put a proper description of your package here."""
+
+ homepage = "https://www.cs.hmc.edu/~yjw/software/dlcpar/"
+ url = "https://www.cs.hmc.edu/~yjw/software/dlcpar/pub/sw/dlcpar-1.0.tar.gz"
+
+ version('1.0', '0bf684436df3554e46d5e992349eeaec')
+
+ depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-docutils/package.py b/var/spack/repos/builtin/packages/py-docutils/package.py
index 00741284df..25881c9e77 100644
--- a/var/spack/repos/builtin/packages/py-docutils/package.py
+++ b/var/spack/repos/builtin/packages/py-docutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,8 +33,18 @@ class PyDocutils(PythonPackage):
markup language."""
homepage = "http://docutils.sourceforge.net/"
- url = "https://pypi.python.org/packages/source/d/docutils/docutils-0.12.tar.gz"
+ url = "https://pypi.io/packages/source/d/docutils/docutils-0.13.1.tar.gz"
- version('0.13.1', 'ea4a893c633c788be9b8078b6b305d53',
- url="https://pypi.python.org/packages/05/25/7b5484aca5d46915493f1fd4ecb63c38c333bd32aa9ad6e19da8d08895ae/docutils-0.13.1.tar.gz")
+ import_modules = [
+ 'docutils', 'docutils.languages', 'docutils.parsers',
+ 'docutils.readers', 'docutils.transforms', 'docutils.utils',
+ 'docutils.writers', 'docutils.parsers.rst',
+ 'docutils.parsers.rst.directives', 'docutils.parsers.rst.languages',
+ 'docutils.utils.math', 'docutils.writers.html4css1',
+ 'docutils.writers.html5_polyglot', 'docutils.writers.latex2e',
+ 'docutils.writers.odf_odt', 'docutils.writers.pep_html',
+ 'docutils.writers.s5_html', 'docutils.writers.xetex'
+ ]
+
+ version('0.13.1', 'ea4a893c633c788be9b8078b6b305d53')
version('0.12', '4622263b62c5c771c03502afa3157768')
diff --git a/var/spack/repos/builtin/packages/py-doxypy/package.py b/var/spack/repos/builtin/packages/py-doxypy/package.py
new file mode 100644
index 0000000000..eb81b080c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-doxypy/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/spack/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 PyDoxypy(PythonPackage):
+ """doxypy is an input filter for Doxygen."""
+
+ homepage = "https://pypi.python.org/pypi/doxypy"
+ url = "https://pypi.io/packages/source/d/doxypy/doxypy-0.3.tar.gz"
+
+ version('0.3', '3b52289e0962d31b92af8be0eef8cbb2')
diff --git a/var/spack/repos/builtin/packages/py-doxypypy/package.py b/var/spack/repos/builtin/packages/py-doxypypy/package.py
new file mode 100644
index 0000000000..243909dffc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-doxypypy/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyDoxypypy(PythonPackage):
+ """A Doxygen filter for Python.
+
+ A more Pythonic version of doxypy, a Doxygen filter for Python.
+ """
+
+ homepage = "https://github.com/Feneric/doxypypy"
+ url = "https://pypi.io/packages/source/d/doxypypy/doxypypy-0.8.8.6.tar.gz"
+
+ version('0.8.8.6', '6b3fe4eff5d459400071b626333fe15f')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-dryscrape/package.py b/var/spack/repos/builtin/packages/py-dryscrape/package.py
new file mode 100644
index 0000000000..675b8f87e5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dryscrape/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyDryscrape(PythonPackage):
+ """a lightweight Javascript-aware, headless web scraping library
+ for Python"""
+
+ homepage = "https://github.com/niklasb/dryscrape"
+ url = "https://pypi.io/packages/source/d/dryscrape/dryscrape-1.0.tar.gz"
+
+ version('develop', git="https://github.com/niklasb/dryscrape",
+ branch="master")
+ version('1.0', '267e380a8efaf9cd8fd94de1639d3198')
+
+ depends_on('py-lxml', type=('build', 'run'))
+ depends_on('py-webkit-server@1.0:', type=('build', 'run'))
+ depends_on('py-xvfbwrapper', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-dxchange/package.py b/var/spack/repos/builtin/packages/py-dxchange/package.py
new file mode 100644
index 0000000000..6c04f119ae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dxchange/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 PyDxchange(PythonPackage):
+ """DXchange provides an interface with tomoPy and raw tomographic data
+ collected at different synchrotron facilities."""
+
+ homepage = "https://github.com/data-exchange/dxchange"
+ url = "https://github.com/data-exchange/dxchange/archive/v0.1.2.tar.gz"
+
+ import_modules = ['dxchange']
+
+ version('0.1.2', '36633bb67a1e7d1fb60c2300adbcbab3')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-h5py', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-netcdf4', type=('build', 'run'))
+ depends_on('py-spefile', type=('build', 'run'))
+ depends_on('py-edffile', type=('build', 'run'))
+ depends_on('py-tifffile', type=('build', 'run'))
+ depends_on('py-dxfile', type=('build', 'run'))
+ depends_on('py-olefile', type=('build', 'run'))
+ depends_on('py-astropy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-dxfile/package.py b/var/spack/repos/builtin/packages/py-dxfile/package.py
new file mode 100644
index 0000000000..f131b51f85
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-dxfile/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyDxfile(PythonPackage):
+ """Scientific Data Exchange [A1] is a set of guidelines for storing scientific
+ data and metadata in a Hierarchical Data Format 5 [B6] file."""
+
+ homepage = "https://github.com/data-exchange/dxfile"
+ url = "https://github.com/data-exchange/dxfile/archive/v0.4.tar.gz"
+
+ import_modules = ['dxfile']
+
+ version('0.4', '0402cd38aefdfd5ce92feb43dda18947')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-h5py', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-easybuild-easyblocks/package.py b/var/spack/repos/builtin/packages/py-easybuild-easyblocks/package.py
new file mode 100644
index 0000000000..1a116c5a15
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-easybuild-easyblocks/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# This file is part of Spack.
+# Created by Kenneth Hoste, kenneth.hoste@gmail.com
+#
+# For details, see https://github.com/spack/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 PyEasybuildEasyblocks(PythonPackage):
+ """Collection of easyblocks for EasyBuild, a software build and
+ installation framework for (scientific) software on HPC systems.
+ """
+
+ homepage = 'http://hpcugent.github.io/easybuild/'
+ url = 'https://pypi.io/packages/source/e/easybuild-easyblocks/easybuild-easyblocks-3.1.2.tar.gz'
+
+ version('3.1.2', 'be08da30c07e67ed3e136e8d38905fbc')
+
+ depends_on('py-easybuild-framework@3.1:', when='@3.1:', type='run')
diff --git a/var/spack/repos/builtin/packages/py-easybuild-easyconfigs/package.py b/var/spack/repos/builtin/packages/py-easybuild-easyconfigs/package.py
new file mode 100644
index 0000000000..2acb09213b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-easybuild-easyconfigs/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# This file is part of Spack.
+# Created by Kenneth Hoste, kenneth.hoste@gmail.com
+#
+# For details, see https://github.com/spack/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 PyEasybuildEasyconfigs(PythonPackage):
+ """Collection of easyconfig files for EasyBuild, a software build and
+ installation framework for (scientific) software on HPC systems.
+ """
+
+ homepage = 'http://hpcugent.github.io/easybuild/'
+ url = 'https://pypi.io/packages/source/e/easybuild-easyconfigs/easybuild-easyconfigs-3.1.2.tar.gz'
+
+ version('3.1.2', '13a4a97fe8a5b9a94f885661cf497d13')
+
+ depends_on('py-easybuild-framework@3.1:', when='@3.1:', type='run')
+ depends_on('py-easybuild-easyblocks@3.1.2:', when='@3.1.2', type='run')
diff --git a/var/spack/repos/builtin/packages/py-easybuild-framework/package.py b/var/spack/repos/builtin/packages/py-easybuild-framework/package.py
new file mode 100644
index 0000000000..61e4ee1c70
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-easybuild-framework/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# This file is part of Spack.
+# Created by Kenneth Hoste, kenneth.hoste@gmail.com
+#
+# For details, see https://github.com/spack/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 PyEasybuildFramework(PythonPackage):
+ """The core of EasyBuild, a software build and installation framework
+ for (scientific) software on HPC systems.
+ """
+
+ homepage = 'http://hpcugent.github.io/easybuild/'
+ url = 'https://pypi.io/packages/source/e/easybuild-framework/easybuild-framework-3.1.2.tar.gz'
+
+ version('3.1.2', '283bc5f6bdcb90016b32986d52fd04a8')
+
+ depends_on('python@2.6:2.8', type='run')
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-vsc-base@2.5.4:', when='@2.9:', type='run')
+ depends_on('py-vsc-install', type='run') # only required for tests (python -O -m test.framework.suite)
diff --git a/var/spack/repos/builtin/packages/py-edffile/package.py b/var/spack/repos/builtin/packages/py-edffile/package.py
new file mode 100644
index 0000000000..460840e708
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-edffile/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyEdffile(PythonPackage):
+ """Generic class for Edf files manipulation."""
+
+ homepage = "https://github.com/vasole/pymca/blob/master/PyMca5/PyMcaIO/EdfFile.py"
+ url = "https://github.com/conda-forge/edffile-feedstock.git"
+
+ import_modules = ['EdfFile']
+
+ version('5.0.0', git='https://github.com/conda-forge/edffile-feedstock.git',
+ commit='be5ab4199db9f8209c59e31874934b8536b52301')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+
+ build_directory = 'recipe/src'
diff --git a/var/spack/repos/builtin/packages/py-elasticsearch/package.py b/var/spack/repos/builtin/packages/py-elasticsearch/package.py
new file mode 100644
index 0000000000..8b324b29e2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-elasticsearch/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PyElasticsearch(PythonPackage):
+ """Python client for Elasticsearch"""
+
+ homepage = "https://github.com/elastic/elasticsearch-py"
+ url = "https://pypi.io/packages/source/e/elasticsearch/elasticsearch-5.2.0.tar.gz"
+
+ version('5.2.0', '66692fd1b4189039206c2fde4a4d616a')
+ version('2.3.0', '2550f3b51629cf1ef9636608af92c340')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-urllib3@1.8:1.999', type=('build', 'run'))
+ # tests_require
+ # depends_on('py-requests@1.0.0:2.9.999', type=('build', 'run'))
+ # depends_on('py-nose', type=('build', 'run'))
+ # depends_on('py-coverage', type=('build', 'run'))
+ # depends_on('py-mock', type=('build', 'run'))
+ # depends_on('py-pyyaml', type=('build', 'run'))
+ # depends_on('py-nosexcover', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-elephant/package.py b/var/spack/repos/builtin/packages/py-elephant/package.py
new file mode 100644
index 0000000000..3cc36b8769
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-elephant/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 PyElephant(PythonPackage):
+ """Elephant is a package for analysis of electrophysiology data in Python
+ """
+
+ homepage = "http://neuralensemble.org/elephant"
+ url = "https://pypi.io/packages/source/e/elephant/elephant-0.3.0.tar.gz"
+
+ version('0.3.0', '84e69e6628fd617af469780c30d2da6c')
+
+ variant('docs', default=False, description='Build the documentation')
+ variant('pandas', default=True, description='Build with pandas')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-neo@0.3.4:', type=('build', 'run')) # > 0.3.3 ?
+ depends_on('py-numpy@1.8.2:', type=('build', 'run'))
+ depends_on('py-quantities@0.10.1:', type=('build', 'run'))
+ depends_on('py-scipy@0.14.0:', type=('build', 'run'))
+ depends_on('py-pandas@0.14.1:', type=('build', 'run'), when='+pandas')
+ depends_on('py-numpydoc@0.5:', type=('build', 'run'), when='+docs')
+ depends_on('py-sphinx@1.2.2:', type=('build', 'run'), when='+docs')
+ # depends_on('py-nose@1.3.3:', type=('build', 'run')) # tests
diff --git a/var/spack/repos/builtin/packages/py-emcee/package.py b/var/spack/repos/builtin/packages/py-emcee/package.py
index 6419a9c40e..1fc6d0ac27 100644
--- a/var/spack/repos/builtin/packages/py-emcee/package.py
+++ b/var/spack/repos/builtin/packages/py-emcee/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,8 +30,9 @@ class PyEmcee(PythonPackage):
Affine Invariant Markov chain Monte Carlo (MCMC) Ensemble sampler."""
homepage = "http://dan.iel.fm/emcee/current/"
- url = "https://pypi.python.org/packages/source/e/emcee/emcee-2.1.0.tar.gz"
+ url = "https://pypi.io/packages/source/e/emcee/emcee-2.1.0.tar.gz"
version('2.1.0', 'c6b6fad05c824d40671d4a4fc58dfff7')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-entrypoints/package.py b/var/spack/repos/builtin/packages/py-entrypoints/package.py
index 944999d69b..335c04267c 100644
--- a/var/spack/repos/builtin/packages/py-entrypoints/package.py
+++ b/var/spack/repos/builtin/packages/py-entrypoints/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,15 @@
from spack import *
-class PyEntrypoints(Package):
+class PyEntrypoints(PythonPackage):
"""Discover and load entry points from installed packages."""
homepage = "https://pypi.python.org/pypi/entrypoints"
- url = "https://files.pythonhosted.org/packages/f8/ad/0e77a853c745a15981ab51fa9a0cb4eca7a7a007b4c1970106ee6ba01e0c/entrypoints-0.2.2-py2.py3-none-any.whl"
+ url = "https://pypi.io/packages/source/e/entrypoints/entrypoints-0.2.3.tar.gz"
- version('0.2.2', '73bd7ce92c19b25dc5a20aff41be996a', expand=False)
+ import_modules = ['entrypoints']
- depends_on('py-pip', type='build')
+ version('0.2.3', '0d3ad1b0130d91e3596ef3a59f25a56c')
- def install(self, spec, prefix):
- pip = which('pip')
- pip('install', self.stage.archive_file, '--prefix={0}'.format(prefix))
+ depends_on('python@2.7:', type=('build', 'run'))
+ depends_on('py-configparser', when='^python@:2.8', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-enum34/package.py b/var/spack/repos/builtin/packages/py-enum34/package.py
index cc111ce092..35808b0094 100644
--- a/var/spack/repos/builtin/packages/py-enum34/package.py
+++ b/var/spack/repos/builtin/packages/py-enum34/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,15 +29,13 @@ class PyEnum34(PythonPackage):
"""Python 3.4 Enum backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4."""
homepage = "https://pypi.python.org/pypi/enum34"
- url = "https://pypi.python.org/packages/source/e/enum34/enum34-1.1.6.tar.gz"
+ url = "https://pypi.io/packages/source/e/enum34/enum34-1.1.6.tar.gz"
- version('1.1.6', '5f13a0841a61f7fc295c514490d120d0',
- url="https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz")
+ version('1.1.6', '5f13a0841a61f7fc295c514490d120d0')
- depends_on('python@2.4:2.8,3.3:')
+ depends_on('python')
# This dependency breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
- # depends_on('py-ordereddict', when='^python@:2.6.999', type=('build', 'run')) # noqa
-
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-ordereddict', when='^python@:2.6', type=('build', 'run'))
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-epydoc/package.py b/var/spack/repos/builtin/packages/py-epydoc/package.py
index e13d431f91..e6eed4c94c 100644
--- a/var/spack/repos/builtin/packages/py-epydoc/package.py
+++ b/var/spack/repos/builtin/packages/py-epydoc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,6 +29,6 @@ class PyEpydoc(PythonPackage):
"""Epydoc is a tool for generating API documentation documentation for
Python modules, based on their docstrings."""
homepage = "https://pypi.python.org/pypi/epydoc"
- url = "https://pypi.python.org/packages/source/e/epydoc/epydoc-3.0.1.tar.gz"
+ url = "https://pypi.io/packages/source/e/epydoc/epydoc-3.0.1.tar.gz"
version('3.0.1', '36407974bd5da2af00bf90ca27feeb44')
diff --git a/var/spack/repos/builtin/packages/py-espresso/package.py b/var/spack/repos/builtin/packages/py-espresso/package.py
new file mode 100644
index 0000000000..768fae16ee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-espresso/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 PyEspresso(CMakePackage):
+ """ESPResSo is a highly versatile software package for performing and
+ analyzing scientific Molecular Dynamics many-particle simulations of
+ coarse-grained atomistic or bead-spring models as they are used in
+ soft matter research in physics, chemistry and molecular biology. It
+ can be used to simulate systems such as polymers, liquid crystals,
+ colloids, polyelectrolytes, ferrofluids and biological systems, for
+ example DNA and lipid membranes. It also has a DPD and lattice
+ Boltzmann solver for hydrodynamic interactions, and allows several
+ particle couplings to the LB fluid.
+ """
+ homepage = "http://espressomd.org/"
+ url = "https://github.com/espressomd/espresso/tarball/v4.0"
+
+ version('develop', git='https://github.com/espressomd/espresso.git', branch='python')
+
+ depends_on("cmake@3.0:", type='build')
+ depends_on("mpi")
+ depends_on("boost+serialization+filesystem+system+python+mpi")
+ extends("python")
+ depends_on("python")
+ depends_on("py-cython@0.23:")
+ depends_on("py-numpy")
+ depends_on("fftw")
diff --git a/var/spack/repos/builtin/packages/espressopp/package.py b/var/spack/repos/builtin/packages/py-espressopp/package.py
index 2903a02f7d..53d1cc4f50 100644
--- a/var/spack/repos/builtin/packages/espressopp/package.py
+++ b/var/spack/repos/builtin/packages/py-espressopp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Espressopp(CMakePackage):
+class PyEspressopp(CMakePackage):
"""ESPResSo++ is an extensible, flexible, fast and parallel simulation
software for soft matter research. It is a highly versatile software
package for the scientific simulation and analysis of coarse-grained
@@ -36,10 +36,10 @@ class Espressopp(CMakePackage):
url = "https://github.com/espressopp/espressopp/tarball/v1.9.4.1"
version('develop', git='https://github.com/espressopp/espressopp.git', branch='master')
+ version('1.9.5', '13a93c30b07132b5e5fa0d828aa17d79')
version('1.9.4.1', '0da74a6d4e1bfa6a2a24fca354245a4f')
version('1.9.4', 'f2a27993a83547ad014335006eea74ea')
- variant('debug', default=False, description='Build debug version')
variant('ug', default=False, description='Build user guide')
variant('pdf', default=False, description='Build user guide in pdf format')
variant('dg', default=False, description='Build developer guide')
@@ -48,31 +48,27 @@ class Espressopp(CMakePackage):
depends_on("mpi")
depends_on("boost+serialization+filesystem+system+python+mpi", when='@1.9.4:')
extends("python")
- depends_on("python@2:2.7.13")
+ depends_on("python@2:2.8")
depends_on("py-mpi4py@2.0.0:", when='@1.9.4', type=('build', 'run'))
depends_on("py-mpi4py@1.3.1:", when='@1.9.4.1:', type=('build', 'run'))
depends_on("fftw")
depends_on("py-sphinx", when="+ug", type='build')
depends_on("py-sphinx", when="+pdf", type='build')
- depends_on('py-numpy', when="+ug", type='build')
- depends_on('py-numpy', when="+pdf", type='build')
+ depends_on('py-numpy', type=('build', 'run'))
depends_on('py-matplotlib', when="+ug", type='build')
depends_on('py-matplotlib', when="+pdf", type='build')
depends_on("texlive", when="+pdf", type='build')
depends_on("doxygen", when="+dg", type='build')
- def build_type(self):
- spec = self.spec
- if '+debug' in spec:
- return 'Debug'
- else:
- return 'Release'
-
def cmake_args(self):
- return ['-DEXTERNAL_MPI4PY=ON', '-DEXTERNAL_BOOST=ON']
+ return [
+ '-DEXTERNAL_MPI4PY=ON',
+ '-DEXTERNAL_BOOST=ON',
+ '-DWITH_RC_FILES=OFF'
+ ]
def build(self, spec, prefix):
- with working_dir(self.build_directory()):
+ with working_dir(self.build_directory):
make()
if '+ug' in spec:
make("ug", parallel=False)
diff --git a/var/spack/repos/builtin/packages/py-et-xmlfile/package.py b/var/spack/repos/builtin/packages/py-et-xmlfile/package.py
new file mode 100644
index 0000000000..bbe649f042
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-et-xmlfile/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyEtXmlfile(PythonPackage):
+ """An implementation of lxml.xmlfile for the standard library."""
+
+ homepage = "https://bitbucket.org/openpyxl/et_xmlfile"
+ url = "https://pypi.io/packages/source/e/et_xmlfile/et_xmlfile-1.0.1.tar.gz"
+
+ version('1.0.1', 'f47940fd9d556375420b2e276476cfaf')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-execnet/package.py b/var/spack/repos/builtin/packages/py-execnet/package.py
new file mode 100644
index 0000000000..c2b3d38b6b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-execnet/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyExecnet(PythonPackage):
+ """execnet provides a share-nothing model with channel-send/receive
+ communication for distributing execution across many Python interpreters
+ across version, platform and network barriers."""
+
+ homepage = "http://codespeak.net/execnet"
+ url = "https://pypi.io/packages/source/e/execnet/execnet-1.4.1.tar.gz"
+
+ version('1.4.1', '0ff84b6c79d0dafb7e2971629c4d127a')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-apipkg@1.4:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-fastaindex/package.py b/var/spack/repos/builtin/packages/py-fastaindex/package.py
new file mode 100644
index 0000000000..e22ff80326
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-fastaindex/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyFastaindex(PythonPackage):
+ """FastA index (.fai) handler compatible with samtools faidx is extended
+ with 4 columns storing counts for A, C, G & T for each sequence.."""
+
+ homepage = "https://github.com/lpryszcz/FastaIndex"
+ url = "https://pypi.io/packages/source/F/FastaIndex/FastaIndex-0.11rc7.tar.gz"
+
+ version('0.11rc7', '882c973d968d9db596edfd0fbb07e3a8')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-fasteners/package.py b/var/spack/repos/builtin/packages/py-fasteners/package.py
new file mode 100644
index 0000000000..54a21ceae4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-fasteners/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyFasteners(PythonPackage):
+ """A python package that provides useful locks."""
+
+ homepage = "https://github.com/harlowja/fasteners"
+ url = "https://pypi.io/packages/source/f/fasteners/fasteners-0.14.1.tar.gz"
+
+ version('0.14.1', 'fcb13261c9b0039d9b1c4feb9bc75e04')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-monotonic@0.1:', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-faststructure/package.py b/var/spack/repos/builtin/packages/py-faststructure/package.py
new file mode 100644
index 0000000000..ddbf1b5d8c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-faststructure/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyFaststructure(PythonPackage):
+ """FastStructure is a fast algorithm for inferring population structure
+ from large SNP genotype data."""
+
+ homepage = "https://github.com/rajanil/fastStructure"
+ url = "https://github.com/rajanil/fastStructure/archive/v1.0.tar.gz"
+
+ version('1.0', '5cbb76e7d49e27a57046ab641b666f97')
+
+ depends_on('py-cython', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('gsl')
diff --git a/var/spack/repos/builtin/packages/py-fiscalyear/package.py b/var/spack/repos/builtin/packages/py-fiscalyear/package.py
new file mode 100644
index 0000000000..e86e2a397d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-fiscalyear/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 PyFiscalyear(PythonPackage):
+ """fiscalyear is a small, lightweight Python module providing helpful
+ utilities for managing the fiscal calendar. It is designed as an extension
+ of the built-in datetime and calendar modules, adding the ability to query
+ the fiscal year and fiscal quarter of a date or datetime object."""
+
+ homepage = "https://github.com/adamjstewart/fiscalyear"
+ url = "https://pypi.io/packages/source/f/fiscalyear/fiscalyear-0.1.0.tar.gz"
+
+ import_modules = ['fiscalyear']
+
+ version('master', branch='master',
+ git='https://github.com/adamjstewart/fiscalyear.git')
+ version('0.1.0', '30e36b259f3e72e4929abbf259335742')
+
+ depends_on('python@2.5:')
+ depends_on('py-setuptools', type='build')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-pytest', type='test')
+ # depends_on('py-pytest-runner', type='test')
diff --git a/var/spack/repos/builtin/packages/py-flake8/package.py b/var/spack/repos/builtin/packages/py-flake8/package.py
index 17d7cea343..c4926ae64f 100644
--- a/var/spack/repos/builtin/packages/py-flake8/package.py
+++ b/var/spack/repos/builtin/packages/py-flake8/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -58,11 +58,15 @@ class PyFlake8(PythonPackage):
depends_on('py-mccabe@0.2.1:0.4.0', when='@2.5.4', type=('build', 'run'))
# These dependencies breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
- # depends_on('py-configparser', when='^python@:3.3.999', type=('build', 'run')) # noqa
- # depends_on('py-enum34', when='^python@:3.1.999', type=('build', 'run'))
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-configparser', when='^python@:3.3', type=('build', 'run'))
+ # depends_on('py-enum34', when='^python@:3.1', type=('build', 'run'))
depends_on('py-configparser', type=('build', 'run'))
depends_on('py-enum34', type=('build', 'run'))
# TODO: Add test dependencies
# depends_on('py-nose', type='test')
+
+ def patch(self):
+ """Filter pytest-runner requirement out of setup.py."""
+ filter_file("['pytest-runner']", "[]", 'setup.py', string=True)
diff --git a/var/spack/repos/builtin/packages/py-flask/package.py b/var/spack/repos/builtin/packages/py-flask/package.py
new file mode 100644
index 0000000000..fb59c93a4e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-flask/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyFlask(PythonPackage):
+ """A microframework based on Werkzeug, Jinja2 and good intentions"""
+
+ homepage = "http://github.com/pallets/flask"
+ url = "https://pypi.io/packages/source/F/Flask/Flask-0.11.1.tar.gz"
+
+ version('0.12.1', '76e9fee5c3afcf4634b9baf96c578207')
+ version('0.11.1', 'd2af95d8fe79cf7da099f062dd122a08')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-werkzeug@0.7:', type=('build', 'run'))
+ depends_on('py-jinja2@2.4:', type=('build', 'run'))
+ depends_on('py-itsdangerous@0.21:', type=('build', 'run'))
+ depends_on('py-click@2.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-flexx/package.py b/var/spack/repos/builtin/packages/py-flexx/package.py
new file mode 100644
index 0000000000..30485eafa7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-flexx/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyFlexx(PythonPackage):
+ """Write desktop and web apps in pure Python."""
+
+ homepage = "http://flexx.readthedocs.io"
+ url = "https://pypi.io/packages/source/f/flexx/flexx-0.4.1.zip"
+
+ version('0.4.1', '7138a378aa68d781212c4b2cfb6ddfcb')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-tornado', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-funcsigs/package.py b/var/spack/repos/builtin/packages/py-funcsigs/package.py
index ea8b71f25f..d2d8ff2de5 100644
--- a/var/spack/repos/builtin/packages/py-funcsigs/package.py
+++ b/var/spack/repos/builtin/packages/py-funcsigs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyFuncsigs(PythonPackage):
"""Python function signatures from PEP362 for Python 2.6, 2.7 and 3.2."""
homepage = "https://pypi.python.org/pypi/funcsigs"
- url = "https://pypi.python.org/packages/source/f/funcsigs/funcsigs-0.4.tar.gz"
+ url = "https://pypi.io/packages/source/f/funcsigs/funcsigs-0.4.tar.gz"
version('0.4', 'fb1d031f284233e09701f6db1281c2a5')
diff --git a/var/spack/repos/builtin/packages/py-functools32/package.py b/var/spack/repos/builtin/packages/py-functools32/package.py
index f2fb0df555..aebf170e46 100644
--- a/var/spack/repos/builtin/packages/py-functools32/package.py
+++ b/var/spack/repos/builtin/packages/py-functools32/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,6 @@ class PyFunctools32(PythonPackage):
PyPy."""
homepage = "https://github.com/MiCHiLU/python-functools32"
- url = "https://pypi.python.org/packages/source/f/functools32/functools32-3.2.3-2.tar.gz"
+ url = "https://pypi.io/packages/source/f/functools32/functools32-3.2.3-2.tar.gz"
version('3.2.3-2', '09f24ffd9af9f6cd0f63cb9f4e23d4b2')
diff --git a/var/spack/repos/builtin/packages/py-future/package.py b/var/spack/repos/builtin/packages/py-future/package.py
new file mode 100644
index 0000000000..1ebce3c7d1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-future/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyFuture(PythonPackage):
+ """Clean single-source support for Python 3 and 2"""
+
+ homepage = "https://python-future.org/"
+ url = "https://pypi.io/packages/source/f/future/future-0.16.0.tar.gz"
+
+ version('0.16.0', '3e8e88a2bda48d54b1da7634d04760d7')
+ version('0.15.2', 'a68eb3c90b3b76714c5ceb8c09ea3a06')
+
+ depends_on('py-setuptools', type='build')
+ # depends_on('py-importlib', type=('build', 'run'), when='^python@2.6')
+ # depends_on('py-argparse', type=('build', 'run'), when='^python@2.6')
diff --git a/var/spack/repos/builtin/packages/py-futures/package.py b/var/spack/repos/builtin/packages/py-futures/package.py
index c6c1d8134f..c3370cbeaa 100644
--- a/var/spack/repos/builtin/packages/py-futures/package.py
+++ b/var/spack/repos/builtin/packages/py-futures/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-genders/package.py b/var/spack/repos/builtin/packages/py-genders/package.py
index 2123f4eb3f..248e4764cc 100644
--- a/var/spack/repos/builtin/packages/py-genders/package.py
+++ b/var/spack/repos/builtin/packages/py-genders/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-genshi/package.py b/var/spack/repos/builtin/packages/py-genshi/package.py
index 462dbfe802..a9296ab6ed 100644
--- a/var/spack/repos/builtin/packages/py-genshi/package.py
+++ b/var/spack/repos/builtin/packages/py-genshi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-git-review/package.py b/var/spack/repos/builtin/packages/py-git-review/package.py
new file mode 100644
index 0000000000..596f8016aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-git-review/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 PyGitReview(PythonPackage):
+ """git-review is a tool that helps submitting git branches to gerrit"""
+
+ homepage = "http://docs.openstack.org/infra/git-review"
+ url = "https://pypi.io/packages/source/g/git-review/git-review-1.25.0.tar.gz"
+
+ version('1.25.0', '0a061d0e23ee9b93c6212a3fe68fb7ab')
+ version('1.24', '145116fe58a3487c3ad1bf55538fd741')
+ version('1.23', 'b0023ad8c037ab710da81412194c6a3a')
+ version('1.22', 'e889df5838c059362e5e0d411bde9c48')
+ version('1.21', 'eee88bdef1aa37a55cc8becd48c6aba9')
+
+ extends('python')
+
+ depends_on('py-setuptools', type=('build'))
+ depends_on('py-pbr', type=('build', 'run'))
+ depends_on('py-requests@1.1:', type=('build', 'run'))
+ depends_on('git', type=('run'))
+ depends_on('tk', type=('run'))
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('PBR_VERSION', self.spec.version)
diff --git a/var/spack/repos/builtin/packages/py-git2/package.py b/var/spack/repos/builtin/packages/py-git2/package.py
new file mode 100644
index 0000000000..9e601aa3a2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-git2/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 PyGit2(PythonPackage):
+ """Pygit2 is a set of Python bindings to the libgit2 shared library,
+ libgit2 implements the core of Git.
+ """
+
+ homepage = "http://www.pygit2.org/"
+ url = "https://pypi.io/packages/source/p/pygit2/pygit2-0.24.1.tar.gz"
+
+ version('0.24.1', 'dd98b6a9fded731e36ca5a40484c8545')
+
+ extends('python')
+ depends_on('py-setuptools', type='build')
+ # Version must match with libgit2
+ # See: http://www.pygit2.org/install.html
+ depends_on('libgit2@0.24:', when='@0.24:')
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-cffi', type=('build', 'run'))
+
+ def setup_environment(self, spack_env, run_env):
+ spec = self.spec
+ # http://www.pygit2.org/install.html
+ spack_env.set('LIBGIT2', spec['libgit2'].prefix)
+ spack_env.set('LIBGIT2_LIB', spec['libgit2'].prefix.lib)
diff --git a/var/spack/repos/builtin/packages/py-gnuplot/package.py b/var/spack/repos/builtin/packages/py-gnuplot/package.py
index a23aa2585f..e6972d280f 100644
--- a/var/spack/repos/builtin/packages/py-gnuplot/package.py
+++ b/var/spack/repos/builtin/packages/py-gnuplot/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-griddataformats/package.py b/var/spack/repos/builtin/packages/py-griddataformats/package.py
new file mode 100644
index 0000000000..0880d860eb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-griddataformats/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyGriddataformats(PythonPackage):
+ """The gridDataFormats package provides classes to unify reading
+ and writing n-dimensional datasets. One can read grid data from
+ files, make them available as a Grid object, and write out the
+ data again."""
+
+ homepage = "http://www.mdanalysis.org/GridDataFormats"
+ url = "https://pypi.io/packages/source/G/GridDataFormats/GridDataFormats-0.3.3.tar.gz"
+
+ version('0.3.3', '5c83d3bdd421eebcee10111942c5a21f')
+
+ depends_on('python@2.7:')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.0.3:', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-guidata/package.py b/var/spack/repos/builtin/packages/py-guidata/package.py
new file mode 100644
index 0000000000..cf0e8447ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-guidata/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyGuidata(PythonPackage):
+ """Automatic graphical user interfaces generation for easy dataset editing
+ and display"""
+
+ homepage = "https://github.com/PierreRaybaut/guidata"
+ url = "https://pypi.io/packages/source/g/guidata/guidata-1.7.5.zip"
+
+ version('1.7.5', '915188c02ad3c89951ee260db65d84a7')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pyqt@4:', type=('build', 'run'))
+ depends_on('py-spyder@2.0:2.9.9', type=('build', 'run'))
+ depends_on('py-h5py', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-guiqwt/package.py b/var/spack/repos/builtin/packages/py-guiqwt/package.py
new file mode 100644
index 0000000000..f135b24c57
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-guiqwt/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyGuiqwt(PythonPackage):
+ """guiqwt is a set of tools for curve and image plotting
+ (extension to PythonQwt)"""
+
+ homepage = "https://github.com/PierreRaybaut/guiqwt"
+ url = "https://pypi.io/packages/source/g/guiqwt/guiqwt-3.0.2.zip"
+
+ version('3.0.2', 'b49cd9706f56eb5d519390ba709d8c8c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.3:', type=('build', 'run'))
+ depends_on('py-scipy@0.7:', type=('build', 'run'))
+ depends_on('py-guidata@1.7.0:', type=('build', 'run'))
+ depends_on('py-pythonqwt@0.5.0:', type=('build', 'run'))
+ depends_on('py-pillow', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py
index 666905e5c0..94dd8d6986 100644
--- a/var/spack/repos/builtin/packages/py-h5py/package.py
+++ b/var/spack/repos/builtin/packages/py-h5py/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class PyH5py(PythonPackage):
HDF5 library from Python."""
homepage = "https://pypi.python.org/pypi/h5py"
- url = "https://pypi.python.org/packages/source/h/h5py/h5py-2.4.0.tar.gz"
+ url = "https://pypi.io/packages/source/h/h5py/h5py-2.4.0.tar.gz"
version('2.6.0', 'ec476211bd1de3f5ac150544189b0bf4')
version('2.5.0', '6e4301b5ad5da0d51b0a1e5ac19e3b74')
@@ -40,12 +40,12 @@ class PyH5py(PythonPackage):
# Build dependencies
depends_on('py-cython@0.19:', type='build')
- depends_on('pkg-config', type='build')
+ depends_on('py-pkgconfig', type='build')
depends_on('py-setuptools', type='build')
depends_on('hdf5@1.8.4:')
depends_on('hdf5+mpi', when='+mpi')
depends_on('mpi', when='+mpi')
- depends_on('py-mpi4py', when='+mpi')
+ depends_on('py-mpi4py', when='+mpi', type=('build', 'run'))
# Build and runtime dependencies
depends_on('py-numpy@1.6.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-html2text/package.py b/var/spack/repos/builtin/packages/py-html2text/package.py
new file mode 100644
index 0000000000..118b86e2c9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-html2text/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyHtml2text(PythonPackage):
+ """Turn HTML into equivalent Markdown-structured text."""
+
+ homepage = "https://github.com/Alir3z4/html2text/"
+ url = "https://pypi.io/packages/source/h/html2text/html2text-2016.9.19.tar.gz"
+
+ version('2016.9.19', 'd6b07e32ed21f186496f012691e02dd5')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-html5lib/package.py b/var/spack/repos/builtin/packages/py-html5lib/package.py
index 1757b44297..927614002a 100644
--- a/var/spack/repos/builtin/packages/py-html5lib/package.py
+++ b/var/spack/repos/builtin/packages/py-html5lib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,9 @@ class PyHtml5lib(PythonPackage):
"""HTML parser based on the WHATWG HTML specification."""
homepage = "https://github.com/html5lib/html5lib-python"
- url = "https://pypi.python.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz"
+ url = "https://pypi.io/packages/source/h/html5lib/html5lib-0.9999999.tar.gz"
version('0.9999999', 'ef43cb05e9e799f25d65d1135838a96f')
- depends_on('python@2.6:2.7,3.2:3.4')
+ depends_on('python@2.6:2.8,3.2:3.4')
depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-httpbin/package.py b/var/spack/repos/builtin/packages/py-httpbin/package.py
new file mode 100644
index 0000000000..f8411112ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-httpbin/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyHttpbin(PythonPackage):
+ """HTTP Request and Response Service"""
+
+ homepage = "https://github.com/Runscope/httpbin"
+ url = "https://pypi.io/packages/source/h/httpbin/httpbin-0.5.0.tar.gz"
+
+ version('0.5.0', '923793df99156caa484975ade96ee115')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-decorator@3.4.0:', type=('build', 'run'))
+ depends_on('py-flask@0.10.1:', type=('build', 'run'))
+ depends_on('py-itsdangerous@0.24:', type=('build', 'run'))
+ depends_on('py-markupsafe@0.23:', type=('build', 'run'))
+ depends_on('py-six@1.6.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-hypothesis/package.py b/var/spack/repos/builtin/packages/py-hypothesis/package.py
new file mode 100644
index 0000000000..ffa4e0a54e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-hypothesis/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PyHypothesis(PythonPackage):
+ """A library for property based testing."""
+
+ homepage = "https://github.com/HypothesisWorks/hypothesis-python"
+ url = "https://pypi.io/packages/source/h/hypothesis/hypothesis-3.7.0.tar.gz"
+
+ import_modules = [
+ 'hypothesis', 'hypothesis.searchstrategy', 'hypothesis.extra',
+ 'hypothesis.tools', 'hypothesis.utils', 'hypothesis.vendor',
+ 'hypothesis.internal', 'hypothesis.internal.conjecture'
+ ]
+
+ # TODO: Add missing dependency required to import hypothesis.extra.django
+
+ version('3.7.0', '4afb25fa6785fceac034b63eaa2dfe28')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-enum34', type=('build', 'run'), when='^python@:2')
diff --git a/var/spack/repos/builtin/packages/py-idna/package.py b/var/spack/repos/builtin/packages/py-idna/package.py
new file mode 100644
index 0000000000..74e6c0fd5d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-idna/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyIdna(PythonPackage):
+ """Internationalized Domain Names for Python (IDNA 2008 and UTS #46) """
+
+ homepage = "https://github.com/kjd/idna"
+ url = "https://pypi.io/packages/source/i/idna/idna-2.5.tar.gz"
+
+ version('2.5', 'fc1d992bef73e8824db411bb5d21f012')
+
+ depends_on('py-setuptools', type=('build', 'link'))
+ depends_on('python@2.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-igraph/package.py b/var/spack/repos/builtin/packages/py-igraph/package.py
new file mode 100644
index 0000000000..11f7c4a990
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-igraph/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyIgraph(PythonPackage):
+ """igraph is a collection of network analysis tools with the emphasis on
+ efficiency, portability and ease of use."""
+
+ homepage = "http://igraph.org/"
+ url = "http://igraph.org/nightly/get/python/python-igraph-0.7.0.tar.gz"
+
+ version('0.7.0', '32a3238cb9041b1686d7d0ba152235bf')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('igraph')
diff --git a/var/spack/repos/builtin/packages/py-imagesize/package.py b/var/spack/repos/builtin/packages/py-imagesize/package.py
index a2d08f6502..f9aa0334ae 100644
--- a/var/spack/repos/builtin/packages/py-imagesize/package.py
+++ b/var/spack/repos/builtin/packages/py-imagesize/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,10 +29,11 @@ class PyImagesize(PythonPackage):
"""Parses image file headers and returns image size. Supports PNG, JPEG,
JPEG2000, and GIF image file formats."""
- homepage = "https://pypi.python.org/pypi/imagesize"
- url = "https://pypi.python.org/packages/source/i/imagesize/imagesize-0.7.1.tar.gz"
+ homepage = "https://github.com/shibukawa/imagesize_py"
+ url = "https://pypi.io/packages/source/i/imagesize/imagesize-0.7.1.tar.gz"
- version('0.7.1', '976148283286a6ba5f69b0f81aef8052',
- url="https://pypi.python.org/packages/53/72/6c6f1e787d9cab2cc733cf042f125abec07209a58308831c9f292504e826/imagesize-0.7.1.tar.gz")
+ import_modules = ['imagesize']
+
+ version('0.7.1', '976148283286a6ba5f69b0f81aef8052')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-iminuit/package.py b/var/spack/repos/builtin/packages/py-iminuit/package.py
index 0b93a0f2b8..cbeafa683c 100644
--- a/var/spack/repos/builtin/packages/py-iminuit/package.py
+++ b/var/spack/repos/builtin/packages/py-iminuit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class PyIminuit(PythonPackage):
"""Interactive IPython-Friendly Minimizer based on SEAL Minuit2."""
homepage = "https://pypi.python.org/pypi/iminuit"
- url = "https://pypi.python.org/packages/source/i/iminuit/iminuit-1.2.tar.gz"
+ url = "https://pypi.io/packages/source/i/iminuit/iminuit-1.2.tar.gz"
version('1.2', '4701ec472cae42015e26251703e6e984')
diff --git a/var/spack/repos/builtin/packages/py-importlib/package.py b/var/spack/repos/builtin/packages/py-importlib/package.py
new file mode 100644
index 0000000000..27221dc99a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-importlib/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/spack/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 PyImportlib(PythonPackage):
+ """Packaging for importlib from Python 2.7"""
+
+ homepage = "https://github.com/brettcannon/importlib"
+ url = "https://pypi.io/packages/source/i/importlib/importlib-1.0.4.zip"
+
+ version('1.0.4', '5f9a0803bca7ba95f670d1464984296f')
diff --git a/var/spack/repos/builtin/packages/py-ipaddress/package.py b/var/spack/repos/builtin/packages/py-ipaddress/package.py
new file mode 100644
index 0000000000..3a84366225
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-ipaddress/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyIpaddress(PythonPackage):
+ """Python 3.3's ipaddress for older Python versions"""
+
+ homepage = "https://github.com/phihag/ipaddress"
+ url = "https://pypi.io/packages/source/i/ipaddress/ipaddress-1.0.18.tar.gz"
+
+ version('1.0.18', '310c2dfd64eb6f0df44aa8c59f2334a7')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-ipdb/package.py b/var/spack/repos/builtin/packages/py-ipdb/package.py
index ab7982a76a..047a8ce2a7 100644
--- a/var/spack/repos/builtin/packages/py-ipdb/package.py
+++ b/var/spack/repos/builtin/packages/py-ipdb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class PyIpdb(Package):
+class PyIpdb(PythonPackage):
"""ipdb is the iPython debugger and has many additional features, including
a better interactive debugging experience via colorized output."""
@@ -39,8 +39,7 @@ class PyIpdb(Package):
# this the original packager does not know what they are. See the 3rd party
# section on ipdb's GitHub:
# https://github.com/gotcha/ipdb#third-party-support
- extends('python')
- depends_on('python@2.6:2.7,3.2:')
+ depends_on('python@2.6:2.8,3.2:')
# Dependencies gathered from:
# https://github.com/gotcha/ipdb/blob/master/setup.py
@@ -52,7 +51,3 @@ class PyIpdb(Package):
depends_on('py-six', type=('build', 'link'))
depends_on('py-pexpect', type=('build', 'link'))
depends_on('py-prompt-toolkit', type=('build', 'link'))
-
- def install(self, spec, prefix):
- # Installation is uncomplicated, this should suffice.
- setup_py('install', '--prefix={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/py-ipykernel/package.py b/var/spack/repos/builtin/packages/py-ipykernel/package.py
index 0303a8e43c..d703f94a25 100644
--- a/var/spack/repos/builtin/packages/py-ipykernel/package.py
+++ b/var/spack/repos/builtin/packages/py-ipykernel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,8 +42,7 @@ class PyIpykernel(PythonPackage):
version('4.1.1', '51376850c46fb006e1f8d1cd353507c5')
version('4.1.0', '638a43e4f8a15872f749090c3f0827b6')
- depends_on('python@2.7:2.7.999,3.3:')
- depends_on('py-setuptools', type='build')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-traitlets@4.1.0:', type=('build', 'run'))
depends_on('py-tornado@4.0:', type=('build', 'run'))
depends_on('py-ipython@4.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-ipython-genutils/package.py b/var/spack/repos/builtin/packages/py-ipython-genutils/package.py
index 66e8a02130..e0e0865238 100644
--- a/var/spack/repos/builtin/packages/py-ipython-genutils/package.py
+++ b/var/spack/repos/builtin/packages/py-ipython-genutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,5 +33,4 @@ class PyIpythonGenutils(PythonPackage):
version('0.1.0', '9a8afbe0978adbcbfcb3b35b2d015a56')
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
diff --git a/var/spack/repos/builtin/packages/py-ipython/package.py b/var/spack/repos/builtin/packages/py-ipython/package.py
index 277e090faa..7f4aafa7a6 100644
--- a/var/spack/repos/builtin/packages/py-ipython/package.py
+++ b/var/spack/repos/builtin/packages/py-ipython/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,8 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
+import platform
class PyIpython(PythonPackage):
@@ -35,15 +37,23 @@ class PyIpython(PythonPackage):
version('3.1.0', 'a749d90c16068687b0ec45a27e72ef8f')
version('2.3.1', '2b7085525dac11190bfb45bb8ec8dcbf')
- depends_on('py-pygments', type=('build', 'run'))
- depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('python@2.7:2.8,3.3:')
# These dependencies breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
- # depends_on('py-backports-shutil-get-terminal-size', when="^python@:3.2.999") # noqa
- # depends_on('py-pathlib2', when="^python@:3.3.999")
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'), when="^python@:3.2") # noqa
+ # depends_on('py-pathlib2', type=('build', 'run'), when="^python@:3.3")
depends_on('py-backports-shutil-get-terminal-size', type=('build', 'run'))
- depends_on('py-pathlib2', type=('build', 'run'))
+ depends_on('py-pathlib2', type=('build', 'run'))
- depends_on('py-pickleshare', type=('build', 'run'))
- depends_on('py-simplegeneric', type=('build', 'run'))
+ depends_on('py-pygments', type=('build', 'run'))
+ depends_on('py-pickleshare', type=('build', 'run'))
+ depends_on('py-simplegeneric@0.8:', type=('build', 'run'))
+ depends_on('py-prompt-toolkit@1.0.4:1.999', type=('build', 'run'))
+ depends_on('py-traitlets@4.2:', type=('build', 'run'))
+ depends_on('py-decorator', type=('build', 'run'))
+ depends_on('py-pexpect', type=('build', 'run'))
+
+ depends_on('py-appnope', type=('build', 'run'),
+ when=sys.platform == 'darwin' and
+ int(platform.mac_ver()[0].split('.')[1]) >= 9)
diff --git a/var/spack/repos/builtin/packages/py-ipywidgets/package.py b/var/spack/repos/builtin/packages/py-ipywidgets/package.py
index eafee8e084..b7c67b241c 100644
--- a/var/spack/repos/builtin/packages/py-ipywidgets/package.py
+++ b/var/spack/repos/builtin/packages/py-ipywidgets/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,8 +33,7 @@ class PyIpywidgets(PythonPackage):
version('5.2.2', '112f3daa4aa0f42f8dda831cea3649c8')
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-ipython@4.0.0:', type=('build', 'run'))
depends_on('py-ipykernel@4.2.2:', type=('build', 'run'))
depends_on('py-traitlets@4.2.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-itsdangerous/package.py b/var/spack/repos/builtin/packages/py-itsdangerous/package.py
new file mode 100644
index 0000000000..7bb7671571
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-itsdangerous/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyItsdangerous(PythonPackage):
+ """Various helpers to pass trusted data to untrusted environments."""
+
+ homepage = "http://github.com/mitsuhiko/itsdangerous"
+ url = "https://pypi.io/packages/source/i/itsdangerous/itsdangerous-0.24.tar.gz"
+
+ version('0.24', 'a3d55aa79369aef5345c036a8a26307f')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-jdcal/package.py b/var/spack/repos/builtin/packages/py-jdcal/package.py
index 964db1448f..8b22cd191c 100644
--- a/var/spack/repos/builtin/packages/py-jdcal/package.py
+++ b/var/spack/repos/builtin/packages/py-jdcal/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,10 @@ from spack import *
class PyJdcal(PythonPackage):
"""Julian dates from proleptic Gregorian and Julian calendars"""
- homepage = 'http://github.com/phn/jdcal'
- url = "https://pypi.python.org/packages/source/j/jdcal/jdcal-1.2.tar.gz"
+ homepage = "http://github.com/phn/jdcal"
+ url = "https://pypi.io/packages/source/j/jdcal/jdcal-1.3.tar.gz"
+ version('1.3', '885ba61d28992f26acffec131bd2a17e')
version('1.2', 'ab8d5ba300fd1eb01514f363d19b1eb9')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-jedi/package.py b/var/spack/repos/builtin/packages/py-jedi/package.py
new file mode 100644
index 0000000000..fcf4043afa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-jedi/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyJedi(PythonPackage):
+ """An autocompletion tool for Python that can be used for text editors."""
+
+ homepage = "https://github.com/davidhalter/jedi"
+ url = "https://pypi.io/packages/source/j/jedi/jedi-0.9.0.tar.gz"
+
+ # unfortunately pypi.io only offers a .whl
+ version('0.10.0', '89ed853d4a283bfa0fdbcf688b4d35fe',
+ url='https://github.com/davidhalter/jedi/archive/v0.10.0.tar.gz')
+ version('0.9.0', '2fee93d273622527ef8c97ac736e92bd')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-jinja2/package.py b/var/spack/repos/builtin/packages/py-jinja2/package.py
index eafe8c252b..1df8c7366f 100644
--- a/var/spack/repos/builtin/packages/py-jinja2/package.py
+++ b/var/spack/repos/builtin/packages/py-jinja2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,8 +31,11 @@ class PyJinja2(PythonPackage):
and an optional sandboxed environment."""
homepage = "http://jinja.pocoo.org/"
- url = "https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.8.tar.gz"
+ url = "https://pypi.io/packages/source/J/Jinja2/Jinja2-2.9.6.tar.gz"
+ import_modules = ['jinja2']
+
+ version('2.9.6', '6411537324b4dba0956aaa8109f3c77b')
version('2.8', 'edb51693fe22c53cee5403775c71a99e')
version('2.7.3', 'b9dffd2f3b43d673802fe857c8445b1a')
version('2.7.2', 'df1581455564e97010e38bc792012aa5')
diff --git a/var/spack/repos/builtin/packages/py-joblib/package.py b/var/spack/repos/builtin/packages/py-joblib/package.py
new file mode 100644
index 0000000000..7792a34539
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-joblib/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyJoblib(PythonPackage):
+ """Python function as pipeline jobs"""
+
+ homepage = "http://packages.python.org/joblib/"
+ url = "https://pypi.io/packages/source/j/joblib/joblib-0.10.3.tar.gz"
+
+ version('0.10.3', '455401ccfaf399538d8e5333086df2d3')
+ version('0.10.2', 'ebb42af4342c2445b175f86bd478d869')
+ version('0.10.0', '61e40322c4fed5c22905f67d7d1aa557')
+
+ # for testing
+ # depends_on('py-nose', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jpype/package.py b/var/spack/repos/builtin/packages/py-jpype/package.py
new file mode 100644
index 0000000000..204da5d79e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-jpype/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 PyJpype(PythonPackage):
+ """JPype is an effort to allow python programs full access to java class
+ libraries."""
+
+ homepage = "https://github.com/originell/jpype"
+ url = "https://pypi.io/packages/source/J/JPype1/JPype1-0.6.2.tar.gz"
+
+ version('0.6.2', '16e5ee92b29563dcc63bbc75556810c1')
+ version('0.6.1', '468ca2d4b2cff7802138789e951d5d58')
+ version('0.6.0', 'f0cbbe1d0c4b563f7e435d2bffc31736')
+
+ depends_on('python@2.6:')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('java', type=('build', 'run'))
+ # extra requirements
+ # depends_on('py-numpy@1.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jsonschema/package.py b/var/spack/repos/builtin/packages/py-jsonschema/package.py
index b1a0ac6606..3c7178a4ab 100644
--- a/var/spack/repos/builtin/packages/py-jsonschema/package.py
+++ b/var/spack/repos/builtin/packages/py-jsonschema/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class PyJsonschema(PythonPackage):
"""Jsonschema: An(other) implementation of JSON Schema for Python."""
homepage = "http://github.com/Julian/jsonschema"
- url = "https://pypi.python.org/packages/source/j/jsonschema/jsonschema-2.5.1.tar.gz"
+ url = "https://pypi.io/packages/source/j/jsonschema/jsonschema-2.5.1.tar.gz"
version('2.5.1', '374e848fdb69a3ce8b7e778b47c30640')
@@ -37,6 +37,6 @@ class PyJsonschema(PythonPackage):
depends_on('py-vcversioner', type=('build', 'run'))
# This dependency breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
+ # See https://github.com/spack/spack/issues/2793
# depends_on('py-functools32', when="^python@2.7", type=('build', 'run'))
depends_on('py-functools32', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-junit-xml/package.py b/var/spack/repos/builtin/packages/py-junit-xml/package.py
new file mode 100644
index 0000000000..d256797086
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-junit-xml/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyJunitXml(PythonPackage):
+ """Creates JUnit XML test result documents that can be read by tools
+ such as Jenkins"""
+
+ homepage = "https://github.com/kyrus/python-junit-xml"
+ url = "https://pypi.io/packages/source/j/junit-xml/junit-xml-1.7.tar.gz"
+
+ version('1.7', '5e6a96edb8a1592f2832241cfd99983e')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jupyter-client/package.py b/var/spack/repos/builtin/packages/py-jupyter-client/package.py
index b0c7b06362..b291fcf448 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-client/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-client/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,8 +40,7 @@ class PyJupyterClient(PythonPackage):
version('4.1.0', 'cf42048b889c8434fbb5813a9eec1d34')
version('4.0.0', '00fa63c67cb3adf359d09dc4d803aff5')
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jupyter-core', type=('build', 'run'))
depends_on('py-zmq@13:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jupyter-console/package.py b/var/spack/repos/builtin/packages/py-jupyter-console/package.py
index a5f3e53298..7a3098b0e8 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-console/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-console/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,8 +37,7 @@ class PyJupyterConsole(PythonPackage):
version('4.0.3', '0e928ea261e7f8154698cf69ed4f2459')
version('4.0.2', 'f2e174938c91136549b908bd39fa5d59')
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-jupyter-client', type=('build', 'run'))
depends_on('py-ipython', type=('build', 'run'))
depends_on('py-ipykernel', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jupyter-core/package.py b/var/spack/repos/builtin/packages/py-jupyter-core/package.py
index f650a91bb9..a07aa3fda9 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-core/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-core/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,6 +42,5 @@ class PyJupyterCore(PythonPackage):
version('4.0.1', 'f849136b2badaaba2a8a3b397bf04639')
version('4.0', 'b6b37cb4f40bd0fcd20433cb2cc7a4c1')
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-traitlets', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-jupyter-notebook/package.py b/var/spack/repos/builtin/packages/py-jupyter-notebook/package.py
index 4c0d12b245..39f65d9ac7 100644
--- a/var/spack/repos/builtin/packages/py-jupyter-notebook/package.py
+++ b/var/spack/repos/builtin/packages/py-jupyter-notebook/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -44,9 +44,9 @@ class PyJupyterNotebook(PythonPackage):
variant('terminal', default=False, description="Enable terminal functionality")
- depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('npm', type='build')
+ depends_on('node-js', type=('build', 'run'))
depends_on('py-jinja2', type=('build', 'run'))
depends_on('py-tornado@4:', type=('build', 'run'))
depends_on('py-ipython-genutils', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-keras/package.py b/var/spack/repos/builtin/packages/py-keras/package.py
new file mode 100644
index 0000000000..d995111ca9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-keras/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 PyKeras(PythonPackage):
+ """Deep Learning library for Python. Convnets, recurrent neural networks,
+ and more. Runs on Theano or TensorFlow."""
+
+ homepage = "http://keras.io"
+ url = "https://pypi.io/packages/source/K/Keras/Keras-1.2.2.tar.gz"
+
+ version('2.0.3', '39ce72a65623cd233a8fa4e867dd0c6b')
+ version('1.2.2', '8e26b25bf16494f6eca726887d232319')
+ version('1.2.1', '95525b9faa890267d80d119b13ce2984')
+ version('1.2.0', 'd24d8b72747f8cc38e659ce8fc92ad3c')
+ version('1.1.2', '53027097f240735f873119ee2e8d27ff')
+ version('1.1.1', '4bd8b75e8c6948ec0498cc603bbc6590')
+ version('1.1.0', 'd1711362ac8473238b0d198d2e3a0574')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-theano', type=('build', 'run'))
+ depends_on('py-pyyaml', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-latexcodec/package.py b/var/spack/repos/builtin/packages/py-latexcodec/package.py
new file mode 100644
index 0000000000..a768eaebf4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-latexcodec/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyLatexcodec(PythonPackage):
+ """A lexer and codec to work with LaTeX code in Python."""
+
+ homepage = "http://latexcodec.readthedocs.io"
+ url = "https://pypi.io/packages/source/l/latexcodec/latexcodec-1.0.4.tar.gz"
+
+ import_modules = ['latexcodec']
+
+ version('1.0.4', '72010ec2a55227a5802239cff6fd32d6')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-six@1.4.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-lazy/package.py b/var/spack/repos/builtin/packages/py-lazy/package.py
new file mode 100644
index 0000000000..d976001296
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lazy/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyLazy(PythonPackage):
+ """Lazy attributes for Python objects"""
+
+ homepage = "https://pypi.python.org/pypi/lazy"
+ url = "https://pypi.io/packages/source/l/lazy/lazy-1.2.zip"
+
+ version('1.2', '02713784e0a92ff9b6af1df8863dd79d')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-lazyarray/package.py b/var/spack/repos/builtin/packages/py-lazyarray/package.py
new file mode 100644
index 0000000000..5b5828182f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lazyarray/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyLazyarray(PythonPackage):
+ """a Python package that provides a lazily-evaluated numerical array class,
+ larray, based on and compatible with NumPy arrays."""
+
+ homepage = "http://bitbucket.org/apdavison/lazyarray/"
+ url = "https://pypi.io/packages/source/l/lazyarray/lazyarray-0.2.8.tar.gz"
+
+ version('0.2.10', '336033357459e66cbca5543bf003a2ba')
+ version('0.2.8', '8e0072f0892b9fc0516e7048f96e9d74')
+
+ depends_on('py-numpy@1.3:', type=('build', 'run'))
+ depends_on('py-numpy@1.5:', type=('build', 'run'), when='^python@3:')
diff --git a/var/spack/repos/builtin/packages/py-libconf/package.py b/var/spack/repos/builtin/packages/py-libconf/package.py
new file mode 100644
index 0000000000..9a9d0d1059
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-libconf/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyLibconf(PythonPackage):
+ """A pure-Python libconfig reader/writer with permissive license"""
+
+ homepage = "https://pypi.python.org/pypi/libconf"
+ url = "https://pypi.io/packages/source/l/libconf/libconf-1.0.1.tar.gz"
+
+ version('1.0.1', 'd37d355b3248f99802c46669ba38e406')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-line-profiler/package.py b/var/spack/repos/builtin/packages/py-line-profiler/package.py
new file mode 100644
index 0000000000..809d9e751f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-line-profiler/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 PyLineProfiler(PythonPackage):
+ """Line-by-line profiler."""
+
+ homepage = "https://github.com/rkern/line_profiler"
+ url = "https://pypi.io/packages/source/l/line_profiler/line_profiler-2.0.tar.gz"
+
+ version('2.0', 'fc93c6bcfac3b7cb1912cb28836d7ee6')
+
+ depends_on('python@2.5:')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-ipython@0.13:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-lit/package.py b/var/spack/repos/builtin/packages/py-lit/package.py
new file mode 100644
index 0000000000..aa7d58bc45
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lit/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyLit(PythonPackage):
+ """lit is a portable tool for executing LLVM and Clang style test suites,
+ summarizing their results, and providing indication of failures. lit is
+ designed to be a lightweight testing tool with as simple a user
+ interface as possible."""
+
+ homepage = "https://pypi.python.org/pypi/lit"
+ url = "https://pypi.io/packages/source/l/lit/lit-0.5.0.tar.gz"
+
+ version('0.5.0', '8144660cc692be8fb903395a5f06564d')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-lmfit/package.py b/var/spack/repos/builtin/packages/py-lmfit/package.py
new file mode 100644
index 0000000000..f02440c98d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lmfit/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyLmfit(PythonPackage):
+ """Least-Squares Minimization with Bounds and Constraints"""
+
+ homepage = "http://lmfit.github.io/lmfit-py/"
+ url = "https://pypi.io/packages/source/l/lmfit/lmfit-0.9.5.tar.gz"
+
+ version('0.9.5', '3a38aa3e4510a564d9e2f606d2537522')
+
+ depends_on('py-numpy@1.5:', type=('build', 'run'))
+ depends_on('py-scipy@0.14:', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-lockfile/package.py b/var/spack/repos/builtin/packages/py-lockfile/package.py
index 1e57e6a1d7..c3aec05f45 100644
--- a/var/spack/repos/builtin/packages/py-lockfile/package.py
+++ b/var/spack/repos/builtin/packages/py-lockfile/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,7 @@ class PyLockfile(PythonPackage):
possibilities it provides than as production-quality code.
"""
homepage = "https://pypi.python.org/pypi/lockfile"
- url = "https://pypi.python.org/packages/source/l/lockfile/lockfile-0.10.2.tar.gz"
+ url = "https://pypi.io/packages/source/l/lockfile/lockfile-0.10.2.tar.gz"
version('0.10.2', '1aa6175a6d57f082cd12e7ac6102ab15')
diff --git a/var/spack/repos/builtin/packages/py-logilab-common/package.py b/var/spack/repos/builtin/packages/py-logilab-common/package.py
index 4c20885760..35e5d9aa88 100644
--- a/var/spack/repos/builtin/packages/py-logilab-common/package.py
+++ b/var/spack/repos/builtin/packages/py-logilab-common/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyLogilabCommon(PythonPackage):
"""Common modules used by Logilab projects"""
homepage = "https://www.logilab.org/project/logilab-common"
- url = "https://pypi.python.org/packages/a7/31/1650d23e44794d46935d82b86e73454cc83b814cbe1365260ccce8a2f4c6/logilab-common-1.2.0.tar.gz"
+ url = "https://pypi.io/packages/source/l/logilab-common/logilab-common-1.2.0.tar.gz"
version('1.2.0', 'f7b51351b7bfe052746fa04c03253c0b')
diff --git a/var/spack/repos/builtin/packages/py-lxml/package.py b/var/spack/repos/builtin/packages/py-lxml/package.py
new file mode 100644
index 0000000000..10e2435562
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lxml/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyLxml(PythonPackage):
+ """lxml is the most feature-rich and easy-to-use library for processing
+ XML and HTML in the Python language."""
+
+ homepage = "http://lxml.de/"
+ url = "https://pypi.io/packages/source/l/lxml/lxml-2.3.tar.gz"
+
+ version('3.7.3', '075692ce442e69bbd604d44e21c02753')
+ version('2.3', 'a245a015fd59b63e220005f263e1682a')
+
+ depends_on('py-setuptools@0.6c5:', type='build')
+ depends_on('py-cython@0.20:', type='build')
+ depends_on('libxml2', type=('build', 'run'))
+ depends_on('libxslt', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-lzstring/package.py b/var/spack/repos/builtin/packages/py-lzstring/package.py
new file mode 100644
index 0000000000..8ab7658339
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-lzstring/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PyLzstring(PythonPackage):
+ """lz-string for python."""
+
+ homepage = "https://github.com/gkovacs/lz-string-python"
+ url = "https://pypi.io/packages/source/l/lzstring/lzstring-1.0.3.tar.gz"
+
+ version('1.0.3', '1c636543484629020a26432740f81443')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-future', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-macholib/package.py b/var/spack/repos/builtin/packages/py-macholib/package.py
new file mode 100644
index 0000000000..d6755f20ba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-macholib/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyMacholib(PythonPackage):
+ """Python package for Mach-O header analysis and editing"""
+
+ homepage = "https://pypi.python.org/pypi/macholib"
+ url = "https://pypi.io/packages/source/m/macholib/macholib-1.8.tar.gz"
+
+ version('1.8', '65af8f20dada7bdb2a142afbec51330e')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-machotools/package.py b/var/spack/repos/builtin/packages/py-machotools/package.py
new file mode 100644
index 0000000000..d51fa17469
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-machotools/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyMachotools(PythonPackage):
+ """Python package for editing Mach-O headers using macholib"""
+
+ homepage = "https://pypi.python.org/pypi/machotools"
+ url = "https://pypi.io/packages/source/m/machotools/machotools-0.2.0.tar.gz"
+
+ version('0.2.0', 'bcc68332c4a80b4f84ec9c8083465416')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-macholib', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-macs2/package.py b/var/spack/repos/builtin/packages/py-macs2/package.py
index 42318faa2a..9d66440373 100644
--- a/var/spack/repos/builtin/packages/py-macs2/package.py
+++ b/var/spack/repos/builtin/packages/py-macs2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class PyMacs2(PythonPackage):
"""MACS2 Model-based Analysis of ChIP-Seq"""
homepage = "https://github.com/taoliu/MACS"
- url = "https://pypi.python.org/packages/9f/99/a8ac96b357f6b0a6f559fe0f5a81bcae12b98579551620ce07c5183aee2c/MACS2-2.1.1.20160309.tar.gz"
+ url = "https://pypi.io/packages/source/M/MACS2/MACS2-2.1.1.20160309.tar.gz"
version('2.1.1.20160309', '2008ba838f83f34f8e0fddefe2a3a0159f4a740707c68058f815b31ddad53d26')
diff --git a/var/spack/repos/builtin/packages/py-mako/package.py b/var/spack/repos/builtin/packages/py-mako/package.py
index 0707d0b12f..b6100d43bf 100644
--- a/var/spack/repos/builtin/packages/py-mako/package.py
+++ b/var/spack/repos/builtin/packages/py-mako/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class PyMako(PythonPackage):
ideas from the existing templating languages."""
homepage = "https://pypi.python.org/pypi/mako"
- url = "https://pypi.python.org/packages/source/M/Mako/Mako-1.0.1.tar.gz"
+ url = "https://pypi.io/packages/source/M/Mako/Mako-1.0.1.tar.gz"
version('1.0.4', 'c5fc31a323dd4990683d2f2da02d4e20')
version('1.0.1', '9f0aafd177b039ef67b90ea350497a54')
diff --git a/var/spack/repos/builtin/packages/py-mappy/package.py b/var/spack/repos/builtin/packages/py-mappy/package.py
new file mode 100644
index 0000000000..27ca1cbb11
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-mappy/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyMappy(PythonPackage):
+ """Mappy provides a convenient interface to minimap2."""
+
+ homepage = "https://pypi.python.org/pypi/mappy"
+ url = "https://pypi.io/packages/source/m/mappy/mappy-2.2.tar.gz"
+
+ version('2.2', 'dfc2aefe98376124beb81ce7dcefeccb')
+
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/py-markdown/package.py b/var/spack/repos/builtin/packages/py-markdown/package.py
index 23c8167021..d6356d8a52 100644
--- a/var/spack/repos/builtin/packages/py-markdown/package.py
+++ b/var/spack/repos/builtin/packages/py-markdown/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -48,9 +48,4 @@ class PyMarkdown(PythonPackage):
version('2.5.1', 'be6f6ba65a8fb843d2aaf1fcdd68c755')
version('2.5', '8393ceab9c6e33357fb8a7be063a4849')
- depends_on('py-setuptools', type='build')
depends_on('python@2.7:2.8,3.2:3.4')
-
- def url_for_version(self, version):
- base_url = "https://github.com/waylan/Python-Markdown/archive"
- return "{0}/{1}-final.tar.gz".format(base_url, version)
diff --git a/var/spack/repos/builtin/packages/py-markupsafe/package.py b/var/spack/repos/builtin/packages/py-markupsafe/package.py
index a31e3972de..dc1bf781a0 100644
--- a/var/spack/repos/builtin/packages/py-markupsafe/package.py
+++ b/var/spack/repos/builtin/packages/py-markupsafe/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,8 +32,11 @@ class PyMarkupsafe(PythonPackage):
Mako templating engine, the Pylons web framework and many more."""
homepage = "http://www.pocoo.org/projects/markupsafe/"
- url = "https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.23.tar.gz"
+ url = "https://pypi.io/packages/source/M/MarkupSafe/MarkupSafe-1.0.tar.gz"
+ import_modules = ['markupsafe']
+
+ version('1.0', '2fcedc9284d50e577b5192e8e3578355')
version('0.23', 'f5ab3deee4c37cd6a922fb81e730da6e')
version('0.22', 'cb3ec29fd5361add24cfd0c6e2953b3e')
version('0.21', 'fde838d9337fa51744283f46a1db2e74')
diff --git a/var/spack/repos/builtin/packages/py-matplotlib/package.py b/var/spack/repos/builtin/packages/py-matplotlib/package.py
index d808b0fc4b..cd9abd2bc1 100644
--- a/var/spack/repos/builtin/packages/py-matplotlib/package.py
+++ b/var/spack/repos/builtin/packages/py-matplotlib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,8 +32,10 @@ class PyMatplotlib(PythonPackage):
environments across platforms."""
homepage = "https://pypi.python.org/pypi/matplotlib"
- url = "https://pypi.io/packages/source/m/matplotlib/matplotlib-1.4.2.tar.gz"
+ url = "https://pypi.io/packages/source/m/matplotlib/matplotlib-2.0.2.tar.gz"
+ version('2.0.2', '061111784278bde89b5d4987014be4ca')
+ version('2.0.0', '7aa54b06327f0e1c4f3877fc2f7d6b17')
version('1.5.3', 'ba993b06113040fee6628d74b80af0fd')
version('1.5.1', 'f51847d8692cb63df64cd0bd0304fd20')
version('1.4.3', '86af2e3e3c61849ac7576a6f5ca44267')
@@ -58,7 +60,10 @@ class PyMatplotlib(PythonPackage):
extends('python', ignore=r'bin/nosetests.*$|bin/pbr$')
# ------ Required dependencies
- depends_on('py-setuptools', type='build')
+ # Per Github issue #3813, setuptools is required at runtime in order
+ # to make mpl_toolkits a namespace package that can span multiple
+ # directories (i.e., matplotlib and basemap)
+ depends_on('py-setuptools', type=('build', 'run'))
depends_on('libpng@1.2:')
depends_on('freetype@2.3:')
@@ -68,6 +73,8 @@ class PyMatplotlib(PythonPackage):
depends_on('py-pyparsing', type=('build', 'run'))
depends_on('py-pytz', type=('build', 'run'))
depends_on('py-cycler@0.9:', type=('build', 'run'))
+ depends_on('py-subprocess32', type=('build', 'run'), when='^python@:2.7')
+ depends_on('py-functools32', type=('build', 'run'), when='^python@2.7')
# ------ Optional GUI frameworks
depends_on('tk@8.3:', when='+tk') # not 8.6.0 or 8.6.1
@@ -81,13 +88,14 @@ class PyMatplotlib(PythonPackage):
# --------- Optional dependencies
depends_on('pkg-config', type='build') # why not...
depends_on('pil', when='+image', type=('build', 'run'))
- depends_on('py-ipython', when='+ipython')
+ depends_on('py-ipython', when='+ipython', type=('build', 'run'))
depends_on('ghostscript', when='+latex', type='run')
depends_on('texlive', when='+latex', type='run')
# Testing dependencies
- depends_on('py-nose') # type='test'
- depends_on('py-mock') # type='test'
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
+ # depends_on('py-mock', type='test')
# Required libraries that ship with matplotlib
# depends_on('agg@2.4:')
@@ -95,7 +103,12 @@ class PyMatplotlib(PythonPackage):
# depends_on('ttconv')
depends_on('py-six@1.9.0:', type=('build', 'run'))
- @PythonPackage.sanity_check('install')
+ @run_before('build')
+ def set_cc(self):
+ if self.spec.satisfies('%intel'):
+ env['CC'] = spack_cxx
+
+ @run_after('install')
def set_backend(self):
spec = self.spec
prefix = self.prefix
diff --git a/var/spack/repos/builtin/packages/py-mccabe/package.py b/var/spack/repos/builtin/packages/py-mccabe/package.py
index c413193cdc..9a8e39f4c4 100644
--- a/var/spack/repos/builtin/packages/py-mccabe/package.py
+++ b/var/spack/repos/builtin/packages/py-mccabe/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -47,3 +47,7 @@ class PyMccabe(PythonPackage):
# TODO: Add test dependencies
# depends_on('py-pytest', type='test')
+
+ def patch(self):
+ """Filter pytest-runner requirement out of setup.py."""
+ filter_file("['pytest-runner']", "[]", 'setup.py', string=True)
diff --git a/var/spack/repos/builtin/packages/py-mdanalysis/package.py b/var/spack/repos/builtin/packages/py-mdanalysis/package.py
new file mode 100644
index 0000000000..437f2445a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-mdanalysis/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 PyMdanalysis(PythonPackage):
+ """MDAnalysis is a Python toolkit to analyze molecular dynamics
+ trajectories generated by a wide range of popular simulation
+ packages including DL_Poly, CHARMM, Amber, NAMD, LAMMPS, and
+ Gromacs. (See the lists of supported trajectory formats and
+ topology formats.)"""
+
+ homepage = "http://www.mdanalysis.org"
+ url = "https://pypi.io/packages/source/M/MDAnalysis/MDAnalysis-0.15.0.tar.gz"
+
+ version('0.15.0', '19e5a8e6c2bfe85f6209d1d7a36e4f20')
+
+ variant('analysis', default=True,
+ description='Enable analysis packages: matplotlib, scipy, seaborn')
+ variant('amber', default=False,
+ description='Support AMBER netcdf format.')
+
+ depends_on('python@2.7:')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython@0.16:', type='build')
+ depends_on('py-numpy@1.5.0:', type=('build', 'run'))
+ depends_on('py-six@1.4.0:', type=('build', 'run'))
+ depends_on('py-biopython@1.59:', type=('build', 'run'))
+ depends_on('py-networkx@1.0:', type=('build', 'run'))
+ depends_on('py-griddataformats@0.3.2:', type=('build', 'run'))
+
+ depends_on('py-matplotlib', when='+analysis', type=('build', 'run'))
+ depends_on('py-scipy', when='+analysis', type=('build', 'run'))
+ depends_on('py-seaborn', when='+analysis', type=('build', 'run'))
+
+ depends_on('py-netcdf4@1.0:', when='+amber', type=('build', 'run'))
+ depends_on('hdf5', when='+amber', type=('run'))
diff --git a/var/spack/repos/builtin/packages/py-meep/package.py b/var/spack/repos/builtin/packages/py-meep/package.py
index 0ebba77ac6..a2252c3b00 100644
--- a/var/spack/repos/builtin/packages/py-meep/package.py
+++ b/var/spack/repos/builtin/packages/py-meep/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -51,8 +51,8 @@ class PyMeep(PythonPackage):
phases = ['clean', 'build_ext', 'install', 'bdist']
- def setup_file(self, spec, prefix):
- return 'setup-mpi.py' if '+mpi' in spec else 'setup.py'
+ def setup_file(self):
+ return 'setup-mpi.py' if '+mpi' in self.spec else 'setup.py'
def common_args(self, spec, prefix):
include_dirs = [
diff --git a/var/spack/repos/builtin/packages/py-memory-profiler/package.py b/var/spack/repos/builtin/packages/py-memory-profiler/package.py
new file mode 100644
index 0000000000..7bd6b70ca1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-memory-profiler/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyMemoryProfiler(PythonPackage):
+ """A module for monitoring memory usage of a python program"""
+
+ homepage = "https://github.com/fabianp/memory_profiler"
+ url = "https://pypi.io/packages/source/m/memory_profiler/memory_profiler-0.47.tar.gz"
+
+ version('0.47', 'ed340aaaa0c7118f2a4c5b4edec6da1e')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-psutil', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-methylcode/package.py b/var/spack/repos/builtin/packages/py-methylcode/package.py
new file mode 100644
index 0000000000..00171890f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-methylcode/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 PyMethylcode(PythonPackage):
+ """MethylCoder is a single program that takes of bisulfite-treated
+ reads and outputs per-base methylation data. """
+
+ homepage = "https://github.com/brentp/methylcode"
+ url = "https://github.com/brentp/methylcode/archive/master.zip"
+
+ version('1.0.0', 'd0ba07c1ab2c74adddd1b23f8e5823e7')
+
+ depends_on('python@2.7.0:2.7.999')
+ depends_on('py-six')
+ depends_on('py-setuptools')
+ depends_on('py-numpy')
+ depends_on('py-pyparsing')
+ depends_on('py-pyfasta')
+ depends_on('py-bsddb3')
+ depends_on('bowtie')
diff --git a/var/spack/repos/builtin/packages/py-misopy/package.py b/var/spack/repos/builtin/packages/py-misopy/package.py
new file mode 100644
index 0000000000..6c274dbfbc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-misopy/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 PyMisopy(PythonPackage):
+ """MISO (Mixture of Isoforms) is a probabilistic framework that
+ quantitates the expression level of alternatively spliced genes from
+ RNA-Seq data, and identifies differentially regulated isoforms or exons
+ across samples."""
+
+ homepage = "http://miso.readthedocs.io/en/fastmiso/"
+ url = "https://pypi.io/packages/source/m/misopy/misopy-0.5.4.tar.gz"
+
+ version('0.5.4', 'fe0c9c2613304defbdead12ea99e4194')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('python@2.6:', type=('build', 'run'))
+ depends_on('py-numpy@1.5.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.9.0:', type=('build', 'run'))
+ depends_on('py-pysam@0.6.0:', type=('build', 'run'))
+ depends_on('py-matplotlib', type=('build', 'run'))
+ depends_on('samtools')
+ depends_on('bedtools2')
diff --git a/var/spack/repos/builtin/packages/py-mistune/package.py b/var/spack/repos/builtin/packages/py-mistune/package.py
index cc859d4b78..22b7c5e790 100644
--- a/var/spack/repos/builtin/packages/py-mistune/package.py
+++ b/var/spack/repos/builtin/packages/py-mistune/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-mock/package.py b/var/spack/repos/builtin/packages/py-mock/package.py
index 21edbd1dc0..5600072e63 100644
--- a/var/spack/repos/builtin/packages/py-mock/package.py
+++ b/var/spack/repos/builtin/packages/py-mock/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,8 +31,9 @@ class PyMock(PythonPackage):
they have been used."""
homepage = "https://github.com/testing-cabal/mock"
- url = "https://pypi.python.org/packages/source/m/mock/mock-1.3.0.tar.gz"
+ url = "https://pypi.io/packages/source/m/mock/mock-1.3.0.tar.gz"
+ version('2.0.0', '0febfafd14330c9dcaa40de2d82d40ad')
version('1.3.0', '73ee8a4afb3ff4da1b4afa287f39fdeb')
depends_on('py-pbr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-mongo/package.py b/var/spack/repos/builtin/packages/py-mongo/package.py
new file mode 100644
index 0000000000..aa24299d2b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-mongo/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyMongo(PythonPackage):
+ """Python driver for MongoDB <http://www.mongodb.org>"""
+
+ homepage = "http://github.com/mongodb/mongo-python-driver"
+ url = "https://pypi.io/packages/source/p/pymongo/pymongo-3.3.0.tar.gz"
+
+ version('3.3.0', '42cd12a5014fb7d3e1987ca04f5c651f')
+
+ depends_on('python@2.6:2.8,3.3:')
+
+ depends_on('setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-monotonic/package.py b/var/spack/repos/builtin/packages/py-monotonic/package.py
index b02f954ccc..3f8ba05a03 100644
--- a/var/spack/repos/builtin/packages/py-monotonic/package.py
+++ b/var/spack/repos/builtin/packages/py-monotonic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-monty/package.py b/var/spack/repos/builtin/packages/py-monty/package.py
new file mode 100644
index 0000000000..8b35fb6e19
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-monty/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyMonty(PythonPackage):
+ """Monty is the missing complement to Python."""
+
+ homepage = "https://github.com/materialsvirtuallab/monty"
+ url = "https://pypi.io/packages/source/m/monty/monty-0.9.6.tar.gz"
+
+ version('0.9.6', '406ea69fdd112feacfdf208624d56903')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-mpi4py/package.py b/var/spack/repos/builtin/packages/py-mpi4py/package.py
index 7f8dc6b986..7193800506 100644
--- a/var/spack/repos/builtin/packages/py-mpi4py/package.py
+++ b/var/spack/repos/builtin/packages/py-mpi4py/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,10 +33,13 @@ class PyMpi4py(PythonPackage):
"""
homepage = "https://pypi.python.org/pypi/mpi4py"
- url = "https://pypi.python.org/packages/source/m/mpi4py/mpi4py-1.3.1.tar.gz"
+ url = "https://pypi.io/packages/source/m/mpi4py/mpi4py-1.3.1.tar.gz"
+ version('develop', git='https://github.com/mpi4py/mpi4py.git', branch='master')
version('2.0.0', '4f7d8126d7367c239fd67615680990e3')
version('1.3.1', 'dbe9d22bdc8ed965c23a7ceb6f32fc3c')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-setuptools', type='build')
depends_on('mpi')
+ depends_on('py-cython', when='@2.0.1:', type='build')
diff --git a/var/spack/repos/builtin/packages/py-mpmath/package.py b/var/spack/repos/builtin/packages/py-mpmath/package.py
index d379e0bd03..d3250b43e5 100644
--- a/var/spack/repos/builtin/packages/py-mpmath/package.py
+++ b/var/spack/repos/builtin/packages/py-mpmath/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,6 +28,6 @@ from spack import *
class PyMpmath(PythonPackage):
"""A Python library for arbitrary-precision floating-point arithmetic."""
homepage = "http://mpmath.org"
- url = "https://pypi.python.org/packages/source/m/mpmath/mpmath-all-0.19.tar.gz"
+ url = "https://pypi.io/packages/source/m/mpmath/mpmath-all-0.19.tar.gz"
version('0.19', 'd1b7e19dd6830d0d7b5e1bc93d46c02c')
diff --git a/var/spack/repos/builtin/packages/py-multiprocess/package.py b/var/spack/repos/builtin/packages/py-multiprocess/package.py
new file mode 100644
index 0000000000..307433e759
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-multiprocess/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyMultiprocess(PythonPackage):
+ """Better multiprocessing and multithreading in Python"""
+
+ homepage = "https://github.com/uqfoundation/multiprocess"
+ url = "https://pypi.io/packages/source/m/multiprocess/multiprocess-0.70.5.zip"
+
+ version('0.70.5', 'bfe394368b1d98192f1f62cc0060be20')
+ version('0.70.4', '443336d84c574106da6c67d4574b7614')
+
+ depends_on('python@2.6:2.8,3.1:')
+
+ depends_on('py-setuptools@0.6:', type='build')
+ depends_on('py-dill@0.2.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-multiqc/package.py b/var/spack/repos/builtin/packages/py-multiqc/package.py
new file mode 100644
index 0000000000..f2b9377b1e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-multiqc/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PyMultiqc(PythonPackage):
+ """MultiQC is a tool to aggregate bioinformatics results across many
+ samples into a single report. It is written in Python and contains modules
+ for a large number of common bioinformatics tools."""
+
+ homepage = "https://multiqc.info"
+ url = "https://pypi.io/packages/source/m/multiqc/multiqc-1.0.tar.gz"
+
+ version('1.0', '0b7310b3f75595e5be8099fbed2d2515')
+
+ depends_on('python@2.7:')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-click', type=('build', 'run'))
+ depends_on('py-jinja2@2.9:', type=('build', 'run'))
+ depends_on('py-lzstring', type=('build', 'run'))
+ depends_on('py-future@0.14.1:', type=('build', 'run'))
+ depends_on('py-spectra', type=('build', 'run'))
+ depends_on('py-matplotlib', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-pyyaml', type=('build', 'run'))
+ depends_on('py-simplejson', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-mx/package.py b/var/spack/repos/builtin/packages/py-mx/package.py
index 9af74555b1..1902b33c4f 100644
--- a/var/spack/repos/builtin/packages/py-mx/package.py
+++ b/var/spack/repos/builtin/packages/py-mx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-mxnet/package.py b/var/spack/repos/builtin/packages/py-mxnet/package.py
new file mode 100644
index 0000000000..5b7cca85ef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-mxnet/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 PyMxnet(PythonPackage):
+ """Python binding for DMLC/MXNet."""
+
+ homepage = "http://mxnet.io"
+ url = "https://github.com/sjtuhpcc/python-mxnet/archive/0.10.0.post2.tar.gz"
+
+ version('0.10.0.post2', '64a646fbf5d1b53ce1008da1bf94d77c',
+ url='https://github.com/sjtuhpcc/python-mxnet/archive/0.10.0.post2.tar.gz')
+
+ # TODO
+ # install_time_test_callbacks = ['install_test', 'import_module_test']
+
+ # import_modules = ['mxnet', 'mxnet.module', 'mxnet._ctypes', 'mxnet.rnn',
+ # 'mxnet._cy2', 'mxnet._cy3', 'mxnet.notebook', 'mxnet.contrib']
+
+ variant('cuda', default=False, description='Enable CUDA support')
+
+ depends_on('python@2.6:2.8,3.3:')
+
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-numpy@1.7.1:', type=('build', 'run'))
+ # depends_on('py-pip', type='build')
+
+ depends_on('mxnet', type=('build', 'run'))
+ depends_on('mxnet+cuda', when='+cuda', type=('build', 'run'))
+
+ def patch(self):
+ spec = self.spec
+ filter_file('../../../',
+ spec['mxnet'].prefix.lib,
+ 'mxnet/libinfo.py', string=True)
diff --git a/var/spack/repos/builtin/packages/py-myhdl/package.py b/var/spack/repos/builtin/packages/py-myhdl/package.py
new file mode 100644
index 0000000000..69bf8d04b6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-myhdl/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyMyhdl(PythonPackage):
+ """Python as a Hardware Description Language"""
+
+ homepage = "http://www.myhdl.org"
+ url = "https://pypi.io/packages/source/m/myhdl/myhdl-0.9.0.tar.gz"
+
+ version('0.9.0', 'c3b4e7b857b6f51d43720413546df15c')
+
+ depends_on('python@2.6:2.8,3.4:')
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-mysqldb1/package.py b/var/spack/repos/builtin/packages/py-mysqldb1/package.py
index 8fd794aadb..b3d17c543a 100644
--- a/var/spack/repos/builtin/packages/py-mysqldb1/package.py
+++ b/var/spack/repos/builtin/packages/py-mysqldb1/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-nbconvert/package.py b/var/spack/repos/builtin/packages/py-nbconvert/package.py
index 0e221d355c..ea93c618c7 100644
--- a/var/spack/repos/builtin/packages/py-nbconvert/package.py
+++ b/var/spack/repos/builtin/packages/py-nbconvert/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,6 +22,7 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import os
from spack import *
@@ -35,9 +36,8 @@ class PyNbconvert(PythonPackage):
version('4.1.0', '06655576713ba1ff7cece2b92760c187')
version('4.0.0', '9661620b1e10a7b46f314588d2d0932f')
- depends_on('py-setuptools', type='build')
depends_on('py-pycurl', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-mistune', type=('build', 'run'))
depends_on('py-jinja2', type=('build', 'run'))
depends_on('py-pygments', type=('build', 'run'))
@@ -48,8 +48,8 @@ class PyNbconvert(PythonPackage):
depends_on('py-tornado', type=('build', 'run'))
depends_on('py-jupyter-client', type=('build', 'run'))
- # FIXME:
- # Failed, try again after installing PycURL with `pip install pycurl` to avoid outdated SSL. # noqa
- # Failed to download css from https://cdn.jupyter.org/notebook/4.1.0/style/style.min.css: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661) # noqa
- # Downloading CSS: https://cdn.jupyter.org/notebook/4.1.0/style/style.min.css # noqa
- # error: Need Notebook CSS to proceed: nbconvert/resources/style.min.css
+ def patch(self):
+ # We bundle this with the spack package so that the installer
+ # doesn't try to download it.
+ install(os.path.join(self.package_dir, 'style.min.css'),
+ os.path.join('nbconvert', 'resources', 'style.min.css'))
diff --git a/var/spack/repos/builtin/packages/py-nbconvert/style.min.css b/var/spack/repos/builtin/packages/py-nbconvert/style.min.css
new file mode 100644
index 0000000000..6a9626dd8e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-nbconvert/style.min.css
@@ -0,0 +1,37 @@
+/*!
+*
+* Twitter Bootstrap
+*
+*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:10px;-webkit-tap-highlight-color:transparent}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0;vertical-align:middle}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot);src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix)format('embedded-opentype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff2)format('woff2'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff)format('woff'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.ttf)format('truetype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular)format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42857143;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:3px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:33px}.h2,h2{font-size:27px}.h3,h3{font-size:23px}.h4,h4{font-size:17px}.h5,h5{font-size:13px}.h6,h6{font-size:12px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:14px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:92%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:9px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:18px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:541px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:9px 18px;margin:0 0 18px;font-size:inherit;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:18px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:monospace}code{padding:2px 4px;font-size:90%;background-color:#f9f2f4;border-radius:2px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:1px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:8.5px;margin:0 0 9px;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}@media (min-width:768px){.container{width:768px}}@media (min-width:992px){.container{width:940px}}@media (min-width:1200px){.container{width:1140px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.row{margin-left:0;margin-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:18px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:19.5px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{display:block;padding-top:7px;font-size:13px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:32px;padding:6px 12px;font-size:13px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:45px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:31px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;min-height:30px}.input-lg{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.input-lg{height:45px;line-height:45px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.form-group-lg .form-control{height:45px;line-height:45px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;min-height:35px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:45px;height:45px;line-height:45px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:23px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:0;margin-right:0}.form-horizontal .has-feedback .form-control-feedback{right:0}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:13px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:1px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:541px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:2px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:13px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:2px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:1px}.input-group-addon.input-lg{padding:10px 16px;font-size:17px;border-radius:3px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:2px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:2px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:30px;margin-bottom:18px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:0;padding-left:0;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:540px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:541px){.navbar{border-radius:2px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:6px 0;font-size:17px;line-height:18px;height:30px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-toggle{position:relative;float:right;margin-right:0;padding:9px 10px;margin-top:-2px;margin-bottom:-2px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:2px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:541px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:0}.navbar-toggle{display:none}}.navbar-nav{margin:3px 0}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:18px}@media (max-width:540px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:18px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:541px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:6px;padding-bottom:6px}}.navbar-form{padding:10px 0;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:-1px 0}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:540px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:2px 2px 0 0}.navbar-btn{margin-top:-1px;margin-bottom:-1px}.navbar-btn.btn-sm{margin-top:0;margin-bottom:0}.navbar-btn.btn-xs{margin-top:4px;margin-bottom:4px}.navbar-text{margin-top:6px;margin-bottom:6px}@media (min-width:541px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-text{float:left;margin-left:0;margin-right:0}.navbar-left{float:left!important;float:left}.navbar-right{float:right!important;float:right;margin-right:0}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:540px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:540px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:18px;list-style:none;background-color:#f5f5f5;border-radius:2px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#5e5e5e}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:17px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:1px;border-top-left-radius:1px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:1px;border-top-right-radius:1px}.pager{padding-left:0;margin:18px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:20px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:3px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:58.5px}}.thumbnail{display:block;padding:4px;margin-bottom:18px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#000}.alert{padding:15px;margin-bottom:18px;border:1px solid transparent;border-radius:2px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f5f5f5;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:18px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:15px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:1px;border-top-right-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:3px}.well-sm{padding:9px;border-radius:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:2px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.42857143;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:13px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:2px 2px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.item_buttons:after,.item_buttons:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.item_buttons:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}/*!
+*
+* Font Awesome
+*
+*//*!
+ * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
+ * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url(../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0);src:url(../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0)format('embedded-opentype'),url(../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0)format('woff'),url(../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0)format('truetype'),url(../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular)format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}/*!
+*
+* IPython base
+*
+*/.modal.fade .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}code{color:#000}pre{font-size:inherit;line-height:inherit}label{font-weight:400}.border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.corner-all{border-radius:2px}.no-padding{padding:0}.hbox{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.vbox{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.hbox.reverse,.reverse,.vbox.reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse}.box-flex0,.hbox.box-flex0,.vbox.box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none;width:auto}.box-flex1,.hbox.box-flex1,.vbox.box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.box-flex,.hbox.box-flex,.vbox.box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.box-flex2,.hbox.box-flex2,.vbox.box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}.box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1}.box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2}.hbox.start,.start,.vbox.start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start}.end,.hbox.end,.vbox.end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end}.center,.hbox.center,.vbox.center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center}.baseline,.hbox.baseline,.vbox.baseline{-webkit-box-pack:baseline;-moz-box-pack:baseline;box-pack:baseline;justify-content:baseline}.hbox.stretch,.stretch,.vbox.stretch{-webkit-box-pack:stretch;-moz-box-pack:stretch;box-pack:stretch;justify-content:stretch}.align-start,.hbox.align-start,.vbox.align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}.align-end,.hbox.align-end,.vbox.align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-items:flex-end}.align-center,.hbox.align-center,.vbox.align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-items:center}.align-baseline,.hbox.align-baseline,.vbox.align-baseline{-webkit-box-align:baseline;-moz-box-align:baseline;box-align:baseline;align-items:baseline}.align-stretch,.hbox.align-stretch,.vbox.align-stretch{-webkit-box-align:stretch;-moz-box-align:stretch;box-align:stretch;align-items:stretch}div.error{margin:2em;text-align:center}div.error>h1{font-size:500%;line-height:normal}div.error>p{font-size:200%;line-height:normal}div.traceback-wrapper{text-align:left;max-width:800px;margin:auto}body{position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible}#header{display:none;background-color:#fff;position:relative;z-index:100}#header #header-container{padding-bottom:5px;padding-top:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#header .header-bar{width:100%;height:1px;background:#e7e7e7;margin-bottom:-1px}#header-spacer{width:100%;visibility:hidden}@media print{#header{display:none!important}#header-spacer{display:none}}#ipython_notebook{padding-left:0;padding-top:1px;padding-bottom:1px}@media (max-width:991px){#ipython_notebook{margin-left:10px}}#noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:red;font-weight:700}#ipython_notebook img{height:28px}#site{width:100%;display:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;overflow:auto}@media print{#site{height:auto!important}}.ui-button .ui-button-text{padding:.2em .8em;font-size:77%}input.ui-button{padding:.3em .9em}span#login_widget{float:right}#logout,span#login_widget>.button{color:#333;background-color:#fff;border-color:#ccc}#logout.active,#logout.focus,#logout:active,#logout:focus,#logout:hover,.open>.dropdown-toggle#logout,.open>.dropdown-togglespan#login_widget>.button,span#login_widget>.button.active,span#login_widget>.button.focus,span#login_widget>.button:active,span#login_widget>.button:focus,span#login_widget>.button:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}#logout.active,#logout:active,.open>.dropdown-toggle#logout,.open>.dropdown-togglespan#login_widget>.button,span#login_widget>.button.active,span#login_widget>.button:active{background-image:none}#logout.disabled,#logout.disabled.active,#logout.disabled.focus,#logout.disabled:active,#logout.disabled:focus,#logout.disabled:hover,#logout[disabled],#logout[disabled].active,#logout[disabled].focus,#logout[disabled]:active,#logout[disabled]:focus,#logout[disabled]:hover,fieldset[disabled] #logout,fieldset[disabled] #logout.active,fieldset[disabled] #logout.focus,fieldset[disabled] #logout:active,fieldset[disabled] #logout:focus,fieldset[disabled] #logout:hover,fieldset[disabled] span#login_widget>.button,fieldset[disabled] span#login_widget>.button.active,fieldset[disabled] span#login_widget>.button.focus,fieldset[disabled] span#login_widget>.button:active,fieldset[disabled] span#login_widget>.button:focus,fieldset[disabled] span#login_widget>.button:hover,span#login_widget>.button.disabled,span#login_widget>.button.disabled.active,span#login_widget>.button.disabled.focus,span#login_widget>.button.disabled:active,span#login_widget>.button.disabled:focus,span#login_widget>.button.disabled:hover,span#login_widget>.button[disabled],span#login_widget>.button[disabled].active,span#login_widget>.button[disabled].focus,span#login_widget>.button[disabled]:active,span#login_widget>.button[disabled]:focus,span#login_widget>.button[disabled]:hover{background-color:#fff;border-color:#ccc}#logout .badge,span#login_widget>.button .badge{color:#fff;background-color:#333}.nav-header{text-transform:none}#header>span{margin-top:10px}.modal_stretch .modal-dialog{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;min-height:80vh}.modal_stretch .modal-dialog .modal-body{max-height:calc(100vh - 200px);overflow:auto;flex:1}@media (min-width:768px){.modal .modal-dialog{width:700px}select.form-control{margin-left:12px;margin-right:12px}}/*!
+*
+* IPython auth
+*
+*/.center-nav{display:inline-block;margin-bottom:-4px}/*!
+*
+* IPython tree view
+*
+*/.alternate_upload{background-color:none;display:inline}.alternate_upload.form{padding:0;margin:0}.alternate_upload input.fileinput{text-align:center;vertical-align:middle;display:inline;opacity:0;z-index:2;width:12ex;margin-right:-12ex}.alternate_upload .btn-upload{height:22px}ul#tabs{margin-bottom:4px}ul#tabs a{padding-top:6px;padding-bottom:4px}ul.breadcrumb a:focus,ul.breadcrumb a:hover{text-decoration:none}ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px}ul.breadcrumb span{color:#5e5e5e}.list_toolbar{padding:4px 0;vertical-align:middle}.list_toolbar .tree-buttons{padding-top:1px}.dynamic-buttons{padding-top:3px;display:inline-block}.list_toolbar [class*=span]{min-height:24px}.list_header{font-weight:700;background-color:#eee}.list_placeholder{font-weight:700;padding:4px 7px}.list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ddd;border-radius:2px}.list_container>div{border-bottom:1px solid #ddd}.list_container>div:hover .list-item{background-color:red}.list_container>div:last-child{border:none}.list_item:hover .list_item{background-color:#ddd}.list_item a{text-decoration:none}.list_item:hover{background-color:#fafafa}.action_col{text-align:right}.list_header>div,.list_item>div{line-height:22px;padding:4px 7px}.list_header>div input,.list_item>div input{margin-right:7px;margin-left:14px;vertical-align:baseline;line-height:22px;position:relative;top:-1px}.list_header>div .item_link,.list_item>div .item_link{margin-left:-1px;vertical-align:baseline;line-height:22px}.new-file input[type=checkbox]{visibility:hidden}.item_name{line-height:22px;height:24px}.item_icon{font-size:14px;color:#5e5e5e;margin-right:7px;margin-left:7px;line-height:22px;vertical-align:baseline}.item_buttons{line-height:1em;margin-left:-5px}.item_buttons .btn-group,.item_buttons .input-group{float:left}.item_buttons>.btn,.item_buttons>.btn-group,.item_buttons>.input-group{margin-left:5px}.item_buttons .btn{min-width:13ex}.item_buttons .running-indicator{padding-top:4px;color:#5cb85c}.toolbar_info{height:24px;line-height:24px}input.engine_num_input,input.nbname_input{padding-top:3px;padding-bottom:3px;height:22px;line-height:14px;margin:0}input.engine_num_input{width:60px}.highlight_text{color:#00f}#project_name{display:inline-block;padding-left:7px;margin-left:-2px}#project_name>.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:700}#tree-selector{padding-right:0}#button-select-all{min-width:50px}#select-all{margin-left:7px;margin-right:2px}.menu_icon{margin-right:2px}.tab-content .row{margin-left:0;margin-right:0}.folder_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f114"}.folder_icon:before.pull-left{margin-right:.3em}.folder_icon:before.pull-right{margin-left:.3em}.notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px}.notebook_icon:before.pull-left{margin-right:.3em}.notebook_icon:before.pull-right{margin-left:.3em}.running_notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px;color:#5cb85c}.running_notebook_icon:before.pull-left{margin-right:.3em}.running_notebook_icon:before.pull-right{margin-left:.3em}.file_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f016";position:relative;top:-2px}.file_icon:before.pull-left{margin-right:.3em}.file_icon:before.pull-right{margin-left:.3em}#notebook_toolbar .pull-right{padding-top:0;margin-right:-1px}ul#new-menu{left:auto;right:0}.kernel-menu-icon{padding-right:12px;width:24px;content:"\f096"}.kernel-menu-icon:before{content:"\f096"}.kernel-menu-icon-current:before{content:"\f00c"}#tab_content{padding-top:20px}#running .panel-group .panel{margin-top:3px;margin-bottom:1em}#running .panel-group .panel .panel-heading{background-color:#eee;line-height:22px;padding:4px 7px}#running .panel-group .panel .panel-heading a:focus,#running .panel-group .panel .panel-heading a:hover{text-decoration:none}#running .panel-group .panel .panel-body{padding:0}#running .panel-group .panel .panel-body .list_container{margin-top:0;margin-bottom:0;border:0;border-radius:0}#running .panel-group .panel .panel-body .list_container .list_item{border-bottom:1px solid #ddd}#running .panel-group .panel .panel-body .list_container .list_item:last-child{border-bottom:0}.delete-button,.duplicate-button,.rename-button,.shutdown-button{display:none}.dynamic-instructions{display:inline-block;padding-top:4px}/*!
+*
+* IPython text editor webapp
+*
+*/.selected-keymap i.fa{padding:0 5px}.selected-keymap i.fa:before{content:"\f00c"}#mode-menu{overflow:auto;max-height:20em}.edit_app #header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.edit_app #menubar .navbar{margin-bottom:-1px}.dirty-indicator{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator.pull-left{margin-right:.3em}.dirty-indicator.pull-right{margin-left:.3em}.dirty-indicator-dirty{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator-dirty.pull-left{margin-right:.3em}.dirty-indicator-dirty.pull-right{margin-left:.3em}.dirty-indicator-clean{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator-clean.pull-left{margin-right:.3em}.dirty-indicator-clean.pull-right{margin-left:.3em}.dirty-indicator-clean:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f00c"}.dirty-indicator-clean:before.pull-left{margin-right:.3em}.dirty-indicator-clean:before.pull-right{margin-left:.3em}#filename{font-size:16pt;display:table;padding:0 5px}#current-mode{padding-left:5px;padding-right:5px}#texteditor-backdrop{padding-top:20px;padding-bottom:20px}@media not print{#texteditor-backdrop{background-color:#eee}}@media print{#texteditor-backdrop #texteditor-container .CodeMirror-gutter,#texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}}@media not print{#texteditor-backdrop #texteditor-container .CodeMirror-gutter,#texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}#texteditor-backdrop #texteditor-container{padding:0;background-color:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}/*!
+*
+* IPython notebook
+*
+*/.ansibold{font-weight:700}.ansiblack{color:#000}.ansired{color:#8b0000}.ansigreen{color:#006400}.ansiyellow{color:#c4a000}.ansiblue{color:#00008b}.ansipurple{color:#9400d3}.ansicyan{color:#4682b4}.ansigray{color:gray}.ansibgblack{background-color:#000}.ansibgred{background-color:red}.ansibggreen{background-color:green}.ansibgyellow{background-color:#ff0}.ansibgblue{background-color:#00f}.ansibgpurple{background-color:#ff00ff}.ansibgcyan{background-color:#0ff}.ansibggray{background-color:gray}div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;border-radius:2px;box-sizing:border-box;-moz-box-sizing:border-box;border-width:thin;border-style:solid;width:100%;padding:5px;margin:0;outline:0}div.cell.selected{border-color:#ababab}@media print{div.cell.selected{border-color:transparent}}.edit_mode div.cell.selected{border-color:green}.prompt{min-width:14ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.21429em}div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}@-moz-document url-prefix(){div.inner_cell{overflow-x:hidden}}div.input_area{border:1px solid #cfcfcf;border-radius:2px;background:#f7f7f7;line-height:1.21429em}div.prompt:empty{padding-top:0;padding-bottom:0}div.unrecognized_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.unrecognized_cell .inner_cell{border-radius:2px;padding:5px;font-weight:700;color:red;border:1px solid #cfcfcf;background:#eaeaea}div.unrecognized_cell .inner_cell a,div.unrecognized_cell .inner_cell a:hover{color:inherit;text-decoration:none}@media (max-width:540px){.prompt{text-align:left}div.unrecognized_cell>div.prompt{display:none}}div.code_cell{}div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){div.input{-webkit-box-orient:vertical;-moz-box-orient:vertical;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.input_prompt{color:navy;border-top:1px solid transparent}div.input_area>div.highlight{margin:.4em;border:none;padding:0;background-color:transparent}div.input_area>div.highlight>pre{margin:0;border:none;padding:0;background-color:transparent}.CodeMirror{line-height:1.21429em;font-size:14px;height:auto;background:0 0}.CodeMirror-scroll{overflow-y:hidden;overflow-x:auto}.CodeMirror-lines{padding:.4em}.CodeMirror-linenumber{padding:0 8px 0 4px}.CodeMirror-gutters{border-bottom-left-radius:2px;border-top-left-radius:2px}.CodeMirror pre{padding:0;border:0;border-radius:0}.highlight-base,.highlight-variable{color:#000}.highlight-variable-2{color:#1a1a1a}.highlight-variable-3{color:#333}.highlight-string{color:#BA2121}.highlight-comment{color:#408080;font-style:italic}.highlight-number{color:#080}.highlight-atom{color:#88F}.highlight-keyword{color:green;font-weight:700}.highlight-builtin{color:green}.highlight-error{color:red}.highlight-operator{color:#A2F;font-weight:700}.highlight-meta{color:#A2F}.highlight-def{color:#00f}.highlight-string-2{color:#f50}.highlight-qualifier{color:#555}.highlight-bracket{color:#997}.highlight-tag{color:#170}.highlight-attribute{color:#00c}.highlight-header{color:#00f}.highlight-quote{color:#090}.highlight-link{color:#00c}.cm-s-ipython span.cm-keyword{color:green;font-weight:700}.cm-s-ipython span.cm-atom{color:#88F}.cm-s-ipython span.cm-number{color:#080}.cm-s-ipython span.cm-def{color:#00f}.cm-s-ipython span.cm-variable{color:#000}.cm-s-ipython span.cm-operator{color:#A2F;font-weight:700}.cm-s-ipython span.cm-variable-2{color:#1a1a1a}.cm-s-ipython span.cm-variable-3{color:#333}.cm-s-ipython span.cm-comment{color:#408080;font-style:italic}.cm-s-ipython span.cm-string{color:#BA2121}.cm-s-ipython span.cm-string-2{color:#f50}.cm-s-ipython span.cm-meta{color:#A2F}.cm-s-ipython span.cm-qualifier{color:#555}.cm-s-ipython span.cm-builtin{color:green}.cm-s-ipython span.cm-bracket{color:#997}.cm-s-ipython span.cm-tag{color:#170}.cm-s-ipython span.cm-attribute{color:#00c}.cm-s-ipython span.cm-header{color:#00f}.cm-s-ipython span.cm-quote{color:#090}.cm-s-ipython span.cm-link{color:#00c}.cm-s-ipython span.cm-error{color:red}.cm-s-ipython span.cm-tab{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=')right no-repeat}div.output_wrapper{display:-webkit-box;-webkit-box-align:stretch;display:-moz-box;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;z-index:1}div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:2px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,.8);box-shadow:inset 0 2px 8px rgba(0,0,0,.8);display:block}div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:2px}div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,.5)}div.output_prompt{color:#8b0000}div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.output_area .MathJax_Display{text-align:left!important}div.output_area .rendered_html img,div.output_area .rendered_html table{margin-left:0;margin-right:0}div.output_area img,div.output_area svg{max-width:100%;height:auto}div.output_area img.unconfined,div.output_area svg.unconfined{max-width:none}.output{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}@media (max-width:540px){div.output_area{-webkit-box-orient:vertical;-moz-box-orient:vertical;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.output_area pre{margin:0;padding:0;border:0;vertical-align:baseline;color:#000;background-color:transparent;border-radius:0}div.output_subarea{overflow-x:auto;padding:.4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1;max-width:calc(100% - 14ex)}div.output_text{text-align:left;color:#000;line-height:1.21429em}div.output_stderr{background:#fdd}div.output_latex{text-align:left}div.output_javascript:empty{padding:0}.js-error{color:#8b0000}div.raw_input_container{font-family:monospace;padding-top:5px}span.raw_input_prompt{}input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;vertical-align:baseline;padding:0 .25em;margin:0 .25em}input.raw_input:focus{box-shadow:none}p.p-space{margin-bottom:10px}div.output_unrecognized{padding:5px;font-weight:700;color:red}div.output_unrecognized a,div.output_unrecognized a:hover{color:inherit;text-decoration:none}.rendered_html{color:#000}.rendered_html em{font-style:italic}.rendered_html strong{font-weight:700}.rendered_html :link,.rendered_html :visited,.rendered_html u{text-decoration:underline}.rendered_html h1{font-size:185.7%;margin:1.08em 0 0;font-weight:700;line-height:1}.rendered_html h2{font-size:157.1%;margin:1.27em 0 0;font-weight:700;line-height:1}.rendered_html h3{font-size:128.6%;margin:1.55em 0 0;font-weight:700;line-height:1}.rendered_html h4{font-size:100%;margin:2em 0 0;font-weight:700;line-height:1}.rendered_html h5,.rendered_html h6{font-size:100%;margin:2em 0 0;font-weight:700;line-height:1;font-style:italic}.rendered_html h1:first-child{margin-top:.538em}.rendered_html h2:first-child{margin-top:.636em}.rendered_html h3:first-child{margin-top:.777em}.rendered_html h4:first-child,.rendered_html h5:first-child,.rendered_html h6:first-child{margin-top:1em}.rendered_html ul{list-style:disc;margin:0 2em;padding-left:0}.rendered_html ul ul{list-style:square;margin:0 2em}.rendered_html ul ul ul{list-style:circle;margin:0 2em}.rendered_html ol{list-style:decimal;margin:0 2em;padding-left:0}.rendered_html ol ol{list-style:upper-alpha;margin:0 2em}.rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em}.rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em}.rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em}.rendered_html *+ol,.rendered_html *+ul{margin-top:1em}.rendered_html hr{color:#000;background-color:#000}.rendered_html pre{margin:1em 2em}.rendered_html code,.rendered_html pre{border:0;background-color:#fff;color:#000;font-size:100%;padding:0}.rendered_html blockquote{margin:1em 2em}.rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse}.rendered_html td,.rendered_html th,.rendered_html tr{border:1px solid #000;border-collapse:collapse;margin:1em 2em}.rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px}.rendered_html th{font-weight:700}.rendered_html *+table{margin-top:1em}.rendered_html p{text-align:left}.rendered_html *+p{margin-top:1em}.rendered_html img{display:block;margin-left:auto;margin-right:auto}.rendered_html *+img{margin-top:1em}.rendered_html img,.rendered_html svg{max-width:100%;height:auto}.rendered_html img.unconfined,.rendered_html svg.unconfined{max-width:none}div.text_cell{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){div.text_cell>div.prompt{display:none}}div.text_cell_render{outline:0;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden}h1:hover .anchor-link,h2:hover .anchor-link,h3:hover .anchor-link,h4:hover .anchor-link,h5:hover .anchor-link,h6:hover .anchor-link{visibility:visible}.text_cell.rendered .input_area{display:none}.text_cell.rendered .rendered_html{overflow-x:auto}.text_cell.unrendered .text_cell_render{display:none}.cm-header-1,.cm-header-2,.cm-header-3,.cm-header-4,.cm-header-5,.cm-header-6{font-weight:700;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.cm-header-1{font-size:185.7%}.cm-header-2{font-size:157.1%}.cm-header-3{font-size:128.6%}.cm-header-4{font-size:110%}.cm-header-5,.cm-header-6{font-size:100%;font-style:italic}/*!
+*
+* IPython notebook webapp
+*
+*/@media (max-width:767px){.notebook_app{padding-left:0;padding-right:0}}#ipython-main-app{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}div#notebook_panel{margin:0;padding:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}#notebook{font-size:14px;line-height:20px;overflow-y:hidden;overflow-x:auto;width:100%;padding-top:20px;margin:0;outline:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;min-height:100%}@media not print{#notebook-container{padding:15px;background-color:#fff;min-height:0;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}div.ui-widget-content{border:1px solid #ababab;outline:0}pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:2px;padding:.4em .4em .4em 2em}p.dialog{padding:.2em}code,kbd,pre,samp{white-space:pre-wrap}#fonttest{font-family:monospace}p{margin-bottom:0}.end_space{min-height:100px;transition:height .2s ease}.notebook_app #header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}@media not print{.notebook_app{background-color:#eee}}.celltoolbar{border:thin solid #CFCFCF;border-bottom:none;background:#EEE;border-radius:2px 2px 0 0;width:100%;height:29px;padding-right:4px;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end;font-size:87%;padding-top:3px}@media print{.edit_mode div.cell.selected{border-color:transparent}div.code_cell{page-break-inside:avoid}#notebook-container{width:100%}.celltoolbar{display:none}}.ctb_hideshow{display:none;vertical-align:bottom}.ctb_global_show .ctb_show.ctb_hideshow{display:block}.ctb_global_show .ctb_show+.input_area,.ctb_global_show .ctb_show+div.text_cell_input,.ctb_global_show .ctb_show~div.text_cell_render{border-top-right-radius:0;border-top-left-radius:0}.ctb_global_show .ctb_show~div.text_cell_render{border:1px solid #cfcfcf}.celltoolbar select{color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;line-height:1.5;border-radius:1px;width:inherit;font-size:inherit;height:22px;padding:0;display:inline-block}.celltoolbar select:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.celltoolbar select::-moz-placeholder{color:#999;opacity:1}.celltoolbar select:-ms-input-placeholder{color:#999}.celltoolbar select::-webkit-input-placeholder{color:#999}.celltoolbar select[disabled],.celltoolbar select[readonly],fieldset[disabled] .celltoolbar select{background-color:#eee;opacity:1}.celltoolbar select[disabled],fieldset[disabled] .celltoolbar select{cursor:not-allowed}textarea.celltoolbar select{height:auto}select.celltoolbar select{height:30px;line-height:30px}select[multiple].celltoolbar select,textarea.celltoolbar select{height:auto}.celltoolbar label{margin-left:5px;margin-right:5px}.completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:2px;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;line-height:1}.completions select{background:#fff;outline:0;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000;width:auto}.completions select option.context{color:#286090}#kernel_logo_widget{float:right!important;float:right}#kernel_logo_widget .current_kernel_logo{display:none;margin-top:-1px;margin-bottom:-1px;width:32px;height:32px}#menubar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin-top:1px}#menubar .navbar{border-top:1px;border-radius:0 0 2px 2px;margin-bottom:0}#menubar .navbar-toggle{float:left;padding-top:7px;padding-bottom:7px;border:none}#menubar .navbar-collapse{clear:left}.nav-wrapper{border-bottom:1px solid #e7e7e7}i.menu-icon{padding-top:4px}ul#help_menu li a{overflow:hidden;padding-right:2.2em}ul#help_menu li a i{margin-right:-1.2em}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;content:"\f0da";float:right;color:#333;margin-top:2px;margin-right:-10px}.dropdown-submenu>a:after.pull-left{margin-right:.3em}.dropdown-submenu>a:after.pull-right{margin-left:.3em}.dropdown-submenu:hover>a:after{color:#262626}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}#notification_area{float:right!important;float:right;z-index:10}.indicator_area{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto}#kernel_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto;border-left:1px solid}#kernel_indicator .kernel_indicator_name{padding-left:5px;padding-right:5px}#modal_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto}#readonly-indicator{float:right!important;float:right;color:#777;z-index:10;text-align:center;width:auto;display:none;margin:2px 0 0}.modal_indicator:before{width:1.28571429em;text-align:center}.edit_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f040"}.edit_mode .modal_indicator:before.pull-left{margin-right:.3em}.edit_mode .modal_indicator:before.pull-right{margin-left:.3em}.command_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:' '}.command_mode .modal_indicator:before.pull-left{margin-right:.3em}.command_mode .modal_indicator:before.pull-right{margin-left:.3em}.kernel_idle_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f10c"}.kernel_idle_icon:before.pull-left{margin-right:.3em}.kernel_idle_icon:before.pull-right{margin-left:.3em}.kernel_busy_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f111"}.kernel_busy_icon:before.pull-left{margin-right:.3em}.kernel_busy_icon:before.pull-right{margin-left:.3em}.kernel_dead_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f1e2"}.kernel_dead_icon:before.pull-left{margin-right:.3em}.kernel_dead_icon:before.pull-right{margin-left:.3em}.kernel_disconnected_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f127"}.kernel_disconnected_icon:before.pull-left{margin-right:.3em}.kernel_disconnected_icon:before.pull-right{margin-left:.3em}.notification_widget{z-index:10;background:rgba(240,240,240,.5);margin-right:4px;color:#333;background-color:#fff;border-color:#ccc}.notification_widget.active,.notification_widget.focus,.notification_widget:active,.notification_widget:focus,.notification_widget:hover,.open>.dropdown-toggle.notification_widget{color:#333;background-color:#e6e6e6;border-color:#adadad}.notification_widget.active,.notification_widget:active,.open>.dropdown-toggle.notification_widget{background-image:none}.notification_widget.disabled,.notification_widget.disabled.active,.notification_widget.disabled.focus,.notification_widget.disabled:active,.notification_widget.disabled:focus,.notification_widget.disabled:hover,.notification_widget[disabled],.notification_widget[disabled].active,.notification_widget[disabled].focus,.notification_widget[disabled]:active,.notification_widget[disabled]:focus,.notification_widget[disabled]:hover,fieldset[disabled] .notification_widget,fieldset[disabled] .notification_widget.active,fieldset[disabled] .notification_widget.focus,fieldset[disabled] .notification_widget:active,fieldset[disabled] .notification_widget:focus,fieldset[disabled] .notification_widget:hover{background-color:#fff;border-color:#ccc}.notification_widget .badge{color:#fff;background-color:#333}.notification_widget.warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.notification_widget.warning.active,.notification_widget.warning.focus,.notification_widget.warning:active,.notification_widget.warning:focus,.notification_widget.warning:hover,.open>.dropdown-toggle.notification_widget.warning{color:#fff;background-color:#ec971f;border-color:#d58512}.notification_widget.warning.active,.notification_widget.warning:active,.open>.dropdown-toggle.notification_widget.warning{background-image:none}.notification_widget.warning.disabled,.notification_widget.warning.disabled.active,.notification_widget.warning.disabled.focus,.notification_widget.warning.disabled:active,.notification_widget.warning.disabled:focus,.notification_widget.warning.disabled:hover,.notification_widget.warning[disabled],.notification_widget.warning[disabled].active,.notification_widget.warning[disabled].focus,.notification_widget.warning[disabled]:active,.notification_widget.warning[disabled]:focus,.notification_widget.warning[disabled]:hover,fieldset[disabled] .notification_widget.warning,fieldset[disabled] .notification_widget.warning.active,fieldset[disabled] .notification_widget.warning.focus,fieldset[disabled] .notification_widget.warning:active,fieldset[disabled] .notification_widget.warning:focus,fieldset[disabled] .notification_widget.warning:hover{background-color:#f0ad4e;border-color:#eea236}.notification_widget.warning .badge{color:#f0ad4e;background-color:#fff}.notification_widget.success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.notification_widget.success.active,.notification_widget.success.focus,.notification_widget.success:active,.notification_widget.success:focus,.notification_widget.success:hover,.open>.dropdown-toggle.notification_widget.success{color:#fff;background-color:#449d44;border-color:#398439}.notification_widget.success.active,.notification_widget.success:active,.open>.dropdown-toggle.notification_widget.success{background-image:none}.notification_widget.success.disabled,.notification_widget.success.disabled.active,.notification_widget.success.disabled.focus,.notification_widget.success.disabled:active,.notification_widget.success.disabled:focus,.notification_widget.success.disabled:hover,.notification_widget.success[disabled],.notification_widget.success[disabled].active,.notification_widget.success[disabled].focus,.notification_widget.success[disabled]:active,.notification_widget.success[disabled]:focus,.notification_widget.success[disabled]:hover,fieldset[disabled] .notification_widget.success,fieldset[disabled] .notification_widget.success.active,fieldset[disabled] .notification_widget.success.focus,fieldset[disabled] .notification_widget.success:active,fieldset[disabled] .notification_widget.success:focus,fieldset[disabled] .notification_widget.success:hover{background-color:#5cb85c;border-color:#4cae4c}.notification_widget.success .badge{color:#5cb85c;background-color:#fff}.notification_widget.info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.notification_widget.info.active,.notification_widget.info.focus,.notification_widget.info:active,.notification_widget.info:focus,.notification_widget.info:hover,.open>.dropdown-toggle.notification_widget.info{color:#fff;background-color:#31b0d5;border-color:#269abc}.notification_widget.info.active,.notification_widget.info:active,.open>.dropdown-toggle.notification_widget.info{background-image:none}.notification_widget.info.disabled,.notification_widget.info.disabled.active,.notification_widget.info.disabled.focus,.notification_widget.info.disabled:active,.notification_widget.info.disabled:focus,.notification_widget.info.disabled:hover,.notification_widget.info[disabled],.notification_widget.info[disabled].active,.notification_widget.info[disabled].focus,.notification_widget.info[disabled]:active,.notification_widget.info[disabled]:focus,.notification_widget.info[disabled]:hover,fieldset[disabled] .notification_widget.info,fieldset[disabled] .notification_widget.info.active,fieldset[disabled] .notification_widget.info.focus,fieldset[disabled] .notification_widget.info:active,fieldset[disabled] .notification_widget.info:focus,fieldset[disabled] .notification_widget.info:hover{background-color:#5bc0de;border-color:#46b8da}.notification_widget.info .badge{color:#5bc0de;background-color:#fff}.notification_widget.danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.notification_widget.danger.active,.notification_widget.danger.focus,.notification_widget.danger:active,.notification_widget.danger:focus,.notification_widget.danger:hover,.open>.dropdown-toggle.notification_widget.danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.notification_widget.danger.active,.notification_widget.danger:active,.open>.dropdown-toggle.notification_widget.danger{background-image:none}.notification_widget.danger.disabled,.notification_widget.danger.disabled.active,.notification_widget.danger.disabled.focus,.notification_widget.danger.disabled:active,.notification_widget.danger.disabled:focus,.notification_widget.danger.disabled:hover,.notification_widget.danger[disabled],.notification_widget.danger[disabled].active,.notification_widget.danger[disabled].focus,.notification_widget.danger[disabled]:active,.notification_widget.danger[disabled]:focus,.notification_widget.danger[disabled]:hover,fieldset[disabled] .notification_widget.danger,fieldset[disabled] .notification_widget.danger.active,fieldset[disabled] .notification_widget.danger.focus,fieldset[disabled] .notification_widget.danger:active,fieldset[disabled] .notification_widget.danger:focus,fieldset[disabled] .notification_widget.danger:hover{background-color:#d9534f;border-color:#d43f3a}.notification_widget.danger .badge{color:#d9534f;background-color:#fff}div#pager{background-color:#fff;font-size:14px;line-height:20px;overflow:hidden;display:none;position:fixed;bottom:0;width:100%;max-height:50%;padding-top:8px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2);z-index:100;top:auto!important}div#pager pre{line-height:1.21429em;color:#000;background-color:#f7f7f7;padding:.4em}div#pager #pager-button-area{position:absolute;top:8px;right:20px}div#pager #pager-contents{position:relative;overflow:auto;width:100%;height:100%}div#pager #pager-contents #pager-container{position:relative;padding:15px 0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}div#pager .ui-resizable-handle{top:0;height:8px;background:#f7f7f7;border-top:1px solid #cfcfcf;border-bottom:1px solid #cfcfcf}div#pager .ui-resizable-handle::after{content:'';top:2px;left:50%;height:3px;width:30px;margin-left:-15px;position:absolute;border-top:1px solid #cfcfcf}.quickhelp{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.shortcut_key{display:inline-block;width:20ex;text-align:right;font-family:monospace}.shortcut_descr{display:inline-block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}span.save_widget{margin-top:6px}span.save_widget span.filename{height:1em;line-height:1em;padding:3px;margin-left:16px;border:none;font-size:146.5%;border-radius:2px}span.save_widget span.filename:hover{background-color:#e6e6e6}span.autosave_status,span.checkpoint_status{font-size:small}@media (max-width:767px){span.save_widget{font-size:small}span.autosave_status,span.checkpoint_status{display:none}}@media (min-width:768px)and (max-width:991px){span.checkpoint_status{display:none}span.autosave_status{font-size:x-small}}.toolbar{padding:0;margin-left:-5px;margin-top:2px;margin-bottom:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.toolbar label,.toolbar select{width:auto;vertical-align:middle;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:3px 0 0}.toolbar .btn{padding:2px 8px}.toolbar .btn-group{margin-top:0;margin-left:5px}#maintoolbar{margin-bottom:-3px;margin-top:-8px;border:0;min-height:27px;margin-left:0;padding-top:11px;padding-bottom:3px}#maintoolbar .navbar-text{float:none;vertical-align:middle;text-align:right;margin-left:5px;margin-right:0;margin-top:0}.select-xs{height:24px}@-moz-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms}.smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px}.tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0}.tooltiptext{padding-right:30px}.ipython_tooltip{max-width:700px;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:1px solid #ababab;outline:0;padding:3px 3px 3px 7px;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:2px;position:absolute;z-index:1000}.ipython_tooltip a{float:right}.ipython_tooltip .tooltiptext pre{border:0;border-radius:0;font-size:100%;background-color:#f7f7f7}.pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute}.pretooltiparrow:before{background-color:#f7f7f7;border:1px solid #ababab;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.terminal-app{background:#eee}.terminal-app #header{background:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.terminal-app .terminal{float:left;font-family:monospace;color:#fff;background:#000;padding:.4em;border-radius:2px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.4);box-shadow:0 0 12px 1px rgba(87,87,87,.4)}.terminal-app .terminal,.terminal-app .terminal dummy-screen{line-height:1em;font-size:14px}.terminal-app .terminal-cursor{color:#000;background:#fff}.terminal-app #terminado-container{margin-top:20px}
+/*# sourceMappingURL=style.min.css.map */ \ No newline at end of file
diff --git a/var/spack/repos/builtin/packages/py-nbformat/package.py b/var/spack/repos/builtin/packages/py-nbformat/package.py
index 4ecf7f8fcf..5f7ca27008 100644
--- a/var/spack/repos/builtin/packages/py-nbformat/package.py
+++ b/var/spack/repos/builtin/packages/py-nbformat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,7 +35,6 @@ class PyNbformat(PythonPackage):
version('4.0.1', 'ab7172e517c9d561c0c01eef5631b4c8')
version('4.0.0', '7cf61359fa4e9cf3ef5e969e2fcb909e')
- depends_on('py-setuptools', type='build')
depends_on('py-ipython-genutils', type=('build', 'run'))
depends_on('py-traitlets', type=('build', 'run'))
depends_on('py-jsonschema', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-neo/package.py b/var/spack/repos/builtin/packages/py-neo/package.py
new file mode 100644
index 0000000000..03a060dec4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-neo/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyNeo(PythonPackage):
+ """Neo is a package for representing electrophysiology data in Python,
+ together with support for reading a wide range of neurophysiology
+ file formats"""
+
+ homepage = "http://neuralensemble.org/neo"
+ url = "https://pypi.io/packages/source/n/neo/neo-0.4.1.tar.gz"
+
+ version('0.4.1', 'f706df3a1bce835cb490b812ac198a6e')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.7.1:', type=('build', 'run'))
+ depends_on('py-quantities@0.9.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-nestle/package.py b/var/spack/repos/builtin/packages/py-nestle/package.py
index 22dc9debe1..ff64b08716 100644
--- a/var/spack/repos/builtin/packages/py-nestle/package.py
+++ b/var/spack/repos/builtin/packages/py-nestle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class PyNestle(PythonPackage):
"""Nested sampling algorithms for evaluating Bayesian evidence."""
homepage = "http://kbarbary.github.io/nestle/"
- url = "https://pypi.python.org/packages/source/n/nestle/nestle-0.1.1.tar.gz"
+ url = "https://pypi.io/packages/source/n/nestle/nestle-0.1.1.tar.gz"
version('0.1.1', '4875c0f9a0a8e263c1d7f5fa6ce604c5')
diff --git a/var/spack/repos/builtin/packages/py-netcdf4/package.py b/var/spack/repos/builtin/packages/py-netcdf4/package.py
new file mode 100644
index 0000000000..73e0d38586
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-netcdf4/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 PyNetcdf4(PythonPackage):
+ """Python interface to the netCDF Library."""
+
+ homepage = "https://github.com/Unidata/netcdf4-python"
+ url = "https://pypi.io/packages/source/n/netCDF4/netCDF4-1.2.7.tar.gz"
+
+ version('1.2.7', '77b357d78f9658dd973dee901f6d86f8')
+ version('1.2.3.1', '24fc0101c7c441709c230e76af611d53')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython@0.19:', type='build')
+
+ depends_on('py-numpy@1.7:', type=('build', 'run'))
+
+ depends_on('netcdf')
+ depends_on('hdf5@1.8.0:')
diff --git a/var/spack/repos/builtin/packages/py-netifaces/package.py b/var/spack/repos/builtin/packages/py-netifaces/package.py
new file mode 100644
index 0000000000..fcdbf80092
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-netifaces/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyNetifaces(PythonPackage):
+ """Portable network interface information"""
+
+ homepage = "https://bitbucket.org/al45tair/netifaces"
+ url = "https://pypi.io/packages/source/n/netifaces/netifaces-0.10.5.tar.gz"
+
+ version('0.10.5', '5b4d1f1310ed279e6df27ef3a9b71519')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-networkx/package.py b/var/spack/repos/builtin/packages/py-networkx/package.py
index 6eca70c15c..528fe59a01 100644
--- a/var/spack/repos/builtin/packages/py-networkx/package.py
+++ b/var/spack/repos/builtin/packages/py-networkx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,10 @@ class PyNetworkx(PythonPackage):
"""NetworkX is a Python package for the creation, manipulation, and study
of the structure, dynamics, and functions of complex networks."""
homepage = "http://networkx.github.io/"
- url = "https://pypi.python.org/packages/source/n/networkx/networkx-1.11.tar.gz"
+ url = "https://pypi.io/packages/source/n/networkx/networkx-1.11.tar.gz"
version('1.11', '6ef584a879e9163013e9a762e1cf7cd1')
+ version('1.10', 'eb7a065e37250a4cc009919dacfe7a9d')
depends_on('py-decorator', type=('build', 'run'))
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-nose/package.py b/var/spack/repos/builtin/packages/py-nose/package.py
index 050a018ffa..566808b711 100644
--- a/var/spack/repos/builtin/packages/py-nose/package.py
+++ b/var/spack/repos/builtin/packages/py-nose/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,14 @@ class PyNose(PythonPackage):
making it easier to write, find and run tests."""
homepage = "https://pypi.python.org/pypi/nose"
- url = "https://pypi.python.org/packages/source/n/nose/nose-1.3.4.tar.gz"
+ url = "https://pypi.io/packages/source/n/nose/nose-1.3.4.tar.gz"
+
+ import_modules = [
+ 'nose', 'nose.ext', 'nose.plugins', 'nose.sphinx', 'nose.tools'
+ ]
- version('1.3.4', '6ed7169887580ddc9a8e16048d38274d')
- version('1.3.6', '0ca546d81ca8309080fc80cb389e7a16')
version('1.3.7', '4d3ad0ff07b61373d2cefc89c5d0b20b')
+ version('1.3.6', '0ca546d81ca8309080fc80cb389e7a16')
+ version('1.3.4', '6ed7169887580ddc9a8e16048d38274d')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-nosexcover/package.py b/var/spack/repos/builtin/packages/py-nosexcover/package.py
new file mode 100644
index 0000000000..7625a39d99
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-nosexcover/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyNosexcover(PythonPackage):
+ """A companion to the built-in nose.plugins.cover, this plugin will write
+ out an XML coverage report to a file named coverage.xml."""
+
+ homepage = "https://github.com/cmheisel/nose-xcover"
+ url = "https://pypi.io/packages/source/n/nosexcover/nosexcover-1.0.11.tar.gz"
+
+ version('1.0.11', 'f32ef4824b4484343e9766b2c376365d')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-nose', type=('build', 'run'))
+ depends_on('py-coverage@3.4:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-numexpr/package.py b/var/spack/repos/builtin/packages/py-numexpr/package.py
index ee89820f5b..6db50bf00d 100644
--- a/var/spack/repos/builtin/packages/py-numexpr/package.py
+++ b/var/spack/repos/builtin/packages/py-numexpr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,10 +28,9 @@ from spack import *
class PyNumexpr(PythonPackage):
"""Fast numerical expression evaluator for NumPy"""
homepage = "https://pypi.python.org/pypi/numexpr"
- url = "https://pypi.python.org/packages/source/n/numexpr/numexpr-2.4.6.tar.gz"
+ url = "https://pypi.io/packages/source/n/numexpr/numexpr-2.6.1.tar.gz"
- version('2.6.1', '6365245705b446426df9543ad218dd8e',
- url="https://pypi.python.org/packages/c6/f0/11628fa4d332d8fe9ab0ba8e9bfe0e065fb6b5324859171ee72d84e079c0/numexpr-2.6.1.tar.gz")
+ version('2.6.1', '6365245705b446426df9543ad218dd8e')
version('2.5', '84f66cced45ba3e30dcf77a937763aaa')
version('2.4.6', '17ac6fafc9ea1ce3eb970b9abccb4fbd')
diff --git a/var/spack/repos/builtin/packages/py-numpy/package.py b/var/spack/repos/builtin/packages/py-numpy/package.py
index 25a5f04b8c..f5126e36a0 100644
--- a/var/spack/repos/builtin/packages/py-numpy/package.py
+++ b/var/spack/repos/builtin/packages/py-numpy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,25 +34,44 @@ class PyNumpy(PythonPackage):
number capabilities"""
homepage = "http://www.numpy.org/"
- url = "https://pypi.io/packages/source/n/numpy/numpy-1.9.1.tar.gz"
+ url = "https://pypi.io/packages/source/n/numpy/numpy-1.13.1.zip"
- version('1.11.2', '03bd7927c314c43780271bf1ab795ebc')
- version('1.11.1', '2f44a895a8104ffac140c3a70edbd450')
- version('1.11.0', 'bc56fb9fc2895aa4961802ffbdb31d0b')
- version('1.10.4', 'aed294de0aa1ac7bd3f9745f4f1968ad')
- version('1.9.2', 'a1ed53432dbcd256398898d35bc8e645')
- version('1.9.1', '78842b73560ec378142665e712ae4ad9')
+ install_time_test_callbacks = ['install_test', 'import_module_test']
- variant('blas', default=True)
- variant('lapack', default=True)
+ import_modules = [
+ 'numpy', 'numpy.compat', 'numpy.core', 'numpy.distutils', 'numpy.doc',
+ 'numpy.f2py', 'numpy.fft', 'numpy.lib', 'numpy.linalg', 'numpy.ma',
+ 'numpy.matrixlib', 'numpy.polynomial', 'numpy.random', 'numpy.testing',
+ 'numpy.distutils.command', 'numpy.distutils.fcompiler'
+ ]
- depends_on('python@2.6:2.8,3.2:')
- depends_on('py-nose', type='build')
+ # FIXME: numpy._build_utils and numpy.core.code_generators failed to import
+ # FIXME: Is this expected?
+
+ version('1.13.1', '2c3c0f4edf720c3a7b525dacc825b9ae')
+ version('1.13.0', 'fd044f0b8079abeaf5e6d2e93b2c1d03')
+ version('1.12.1', 'c75b072a984028ac746a6a332c209a91')
+ version('1.12.0', '33e5a84579f31829bbbba084fe0a4300')
+ version('1.11.2', '8308cc97be154d2f64a2387ea863c2ac')
+ version('1.11.1', '5caa3428b24aaa07e72c79d115140e46')
+ version('1.11.0', '19ce5c4eb16d663a0713daf0018a3021')
+ version('1.10.4', '510ffc322c635511e7be95d225b6bcbb')
+ version('1.9.2', 'e80c19d2fb25af576460bb7dac31c59a')
+ version('1.9.1', '223532d8e1bdaff5d30936439701d6e1')
+
+ variant('blas', default=True, description='Build with BLAS support')
+ variant('lapack', default=True, description='Build with LAPACK support')
+
+ depends_on('python@2.7:2.8,3.4:')
depends_on('py-setuptools', type='build')
depends_on('blas', when='+blas')
depends_on('lapack', when='+lapack')
- def setup_dependent_package(self, module, dep_spec):
+ # Tests require:
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose@1.0.0:', type='test')
+
+ def setup_dependent_package(self, module, dependent_spec):
python_version = self.spec['python'].version.up_to(2)
arch = '{0}-{1}'.format(platform.system().lower(), platform.machine())
@@ -69,16 +88,84 @@ class PyNumpy(PythonPackage):
# for build notes see http://www.scipy.org/scipylib/building/linux.html
lapackblas = LibraryList('')
if '+lapack' in spec:
- lapackblas += spec['lapack'].lapack_libs
+ lapackblas += spec['lapack'].libs
if '+blas' in spec:
- lapackblas += spec['blas'].blas_libs
+ lapackblas += spec['blas'].libs
if '+blas' in spec or '+lapack' in spec:
+ # note that one should not use [blas_opt] and [lapack_opt], see
+ # https://github.com/numpy/numpy/commit/ffd4332262ee0295cb942c94ed124f043d801eb6
with open('site.cfg', 'w') as f:
- f.write('[DEFAULT]\n')
- f.write('libraries=%s\n' % ','.join(lapackblas.names))
- f.write('library_dirs=%s\n' % ':'.join(lapackblas.directories))
+ # Unfortunately, numpy prefers to provide each BLAS/LAPACK
+ # differently.
+ names = ','.join(lapackblas.names)
+ dirs = ':'.join(lapackblas.directories)
+
+ # Special treatment for some (!) BLAS/LAPACK. Note that
+ # in this case library_dirs can not be specified within [ALL].
+ if '^openblas' in spec:
+ f.write('[openblas]\n')
+ f.write('libraries=%s\n' % names)
+ elif '^mkl' in spec:
+ # numpy does not expect system libraries needed for MKL
+ # here.
+ # names = [x for x in names if x.startswith('mkl')]
+ # FIXME: as of @1.11.2, numpy does not work with separately
+ # specified threading and interface layers. A workaround is
+ # a terribly bad idea to use mkl_rt. In this case Spack
+ # will no longer be able to guarantee that one and the
+ # same variant of Blas/Lapack (32/64bit, threaded/serial)
+ # is used within the DAG. This may lead to a lot of
+ # hard-to-debug segmentation faults on user's side. Users
+ # may also break working installation by (unconsciously)
+ # setting environment variable to switch between different
+ # interface and threading layers dynamically. From this
+ # perspective it is no different from throwing away RPATH's
+ # and using LD_LIBRARY_PATH throughout Spack.
+ f.write('[mkl]\n')
+ f.write('mkl_libs=%s\n' % 'mkl_rt')
+ elif '^atlas' in spec:
+ f.write('[atlas]\n')
+ f.write('atlas_libs=%s\n' % names)
+ else:
+ # The section title for the defaults changed in @1.10, see
+ # https://github.com/numpy/numpy/blob/master/site.cfg.example
+ if spec.satisfies('@:1.9.2'):
+ f.write('[DEFAULT]\n')
+ else:
+ f.write('[ALL]\n')
+ f.write('libraries=%s\n' % names)
+
+ f.write('library_dirs=%s\n' % dirs)
if not ((platform.system() == "Darwin") and
(platform.mac_ver()[0] == '10.12')):
- f.write('rpath=%s\n' % ':'.join(lapackblas.directories))
+ f.write('rpath=%s\n' % dirs)
+
+ def build_args(self, spec, prefix):
+ args = []
+
+ # From NumPy 1.10.0 on it's possible to do a parallel build
+ if self.version >= Version('1.10.0'):
+ args = ['-j', str(make_jobs)]
+
+ return args
+
+ def test(self):
+ # `setup.py test` is not supported. Use one of the following
+ # instead:
+ #
+ # - `python runtests.py` (to build and test)
+ # - `python runtests.py --no-build` (to test installed numpy)
+ # - `>>> numpy.test()` (run tests for installed numpy
+ # from within an interpreter)
+ pass
+
+ def install_test(self):
+ # Change directories due to the following error:
+ #
+ # ImportError: Error importing numpy: you should not try to import
+ # numpy from its source directory; please exit the numpy
+ # source tree, and relaunch your python interpreter from there.
+ with working_dir('..'):
+ python('-c', 'import numpy; numpy.test("full", verbose=2)')
diff --git a/var/spack/repos/builtin/packages/py-numpydoc/package.py b/var/spack/repos/builtin/packages/py-numpydoc/package.py
new file mode 100644
index 0000000000..f0ecfbc411
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-numpydoc/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyNumpydoc(PythonPackage):
+ """numpydoc - Numpy's Sphinx extensions"""
+
+ homepage = "https://github.com/numpy/numpydoc"
+ url = "https://pypi.io/packages/source/n/numpydoc/numpydoc-0.6.0.tar.gz"
+
+ version('0.6.0', '5f1763c44e613850d56ba1b1cf1cb146')
+
+ depends_on('python@2.6:2.8,3.3:')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-sphinx@1.0.1:', type='build')
diff --git a/var/spack/repos/builtin/packages/py-olefile/package.py b/var/spack/repos/builtin/packages/py-olefile/package.py
new file mode 100644
index 0000000000..0925f67d96
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-olefile/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PyOlefile(PythonPackage):
+ """Python package to parse, read and write Microsoft OLE2 files"""
+
+ homepage = "https://www.decalage.info/python/olefileio"
+ url = "https://pypi.io/packages/source/o/olefile/olefile-0.44.zip"
+
+ import_modules = ['olefile']
+
+ version('0.44', 'fc625554e4e7f0c2ddcd00baa3c74ff5')
+
+ depends_on('python@2.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-ont-fast5-api/package.py b/var/spack/repos/builtin/packages/py-ont-fast5-api/package.py
new file mode 100644
index 0000000000..d2e868c7c5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-ont-fast5-api/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 PyOntFast5Api(PythonPackage):
+ """This project provides classes and utility functions for working with
+ read fast5 files. It provides an abstraction layer between the underlying
+ h5py library and the various concepts central to read fast5 files, such as
+ "reads", "analyses", "analysis summaries", and "analysis datasets".
+ Ideally all interaction with a read fast5 file should be possible via this
+ API, without having to directly invoke the h5py library."""
+
+ homepage = "https://github.com/nanoporetech/ont_fast5_api"
+ url = "https://pypi.io/packages/source/o/ont-fast5-api/ont-fast5-api-0.3.2.tar.gz"
+
+ version('0.3.2', '2ccfdbcd55239ffae712bb6e70ebfe8c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-h5py', type=('build', 'run'))
+ depends_on('py-numpy@1.8.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-openpyxl/package.py b/var/spack/repos/builtin/packages/py-openpyxl/package.py
index d396916035..6f28526b8e 100644
--- a/var/spack/repos/builtin/packages/py-openpyxl/package.py
+++ b/var/spack/repos/builtin/packages/py-openpyxl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,12 +26,17 @@ from spack import *
class PyOpenpyxl(PythonPackage):
- """A Python library to read/write Excel 2007 xlsx/xlsm files"""
+ """A Python library to read/write Excel 2010 xlsx/xlsm files"""
- homepage = 'http://openpyxl.readthedocs.org/'
- url = "https://pypi.python.org/packages/source/o/openpyxl/openpyxl-2.4.0-a1.tar.gz"
+ homepage = "http://openpyxl.readthedocs.org/"
+ url = "https://pypi.io/packages/source/o/openpyxl/openpyxl-2.4.5.tar.gz"
- version('2.4.0-a1', 'e5ca6d23ceccb15115d45cdf26e736fc')
+ version('2.4.5', '3de13dc9b731e1a9dd61b873d9b35a8a')
+ version('2.2.0-b1', 'eeefabe384f6e53166c8c2e6abe5d11b')
+
+ depends_on('python@2.6:2.8,3.0:3.1,3.3:')
- depends_on('py-jdcal', type=('build', 'run'))
depends_on('py-setuptools', type='build')
+
+ depends_on('py-jdcal', type=('build', 'run'))
+ depends_on('py-et-xmlfile', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-ordereddict/package.py b/var/spack/repos/builtin/packages/py-ordereddict/package.py
index b560990f00..16587ba978 100644
--- a/var/spack/repos/builtin/packages/py-ordereddict/package.py
+++ b/var/spack/repos/builtin/packages/py-ordereddict/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,8 @@ class PyOrdereddict(PythonPackage):
OrderedDict that works in Python 2.4-2.6."""
homepage = "https://pypi.python.org/pypi/ordereddict"
- url = "https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz"
+ url = "https://pypi.io/packages/source/o/ordereddict/ordereddict-1.1.tar.gz"
+
+ import_modules = ['ordereddict']
version('1.1', 'a0ed854ee442051b249bfad0f638bbec')
diff --git a/var/spack/repos/builtin/packages/py-oset/package.py b/var/spack/repos/builtin/packages/py-oset/package.py
new file mode 100644
index 0000000000..10a5007932
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-oset/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyOset(PythonPackage):
+ """Set that remembers original insertion order."""
+
+ homepage = "https://pypi.python.org/pypi/oset"
+ url = "https://pypi.io/packages/source/o/oset/oset-0.1.3.tar.gz"
+
+ import_modules = ['oset']
+
+ version('0.1.3', 'f23e5a545d2c77df3916398d2d39a3ab')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('python@2.5:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-packaging/package.py b/var/spack/repos/builtin/packages/py-packaging/package.py
new file mode 100644
index 0000000000..0ee13a5cdf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-packaging/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PyPackaging(PythonPackage):
+ """Core utilities for Python packages."""
+
+ homepage = "https://github.com/pypa/packaging"
+ url = "https://pypi.io/packages/source/p/packaging/packaging-16.8.tar.gz"
+
+ import_modules = ['packaging']
+
+ version('16.8', '53895cdca04ecff80b54128e475b5d3b')
+
+ # Not needed for the installation, but used at runtime
+ depends_on('py-six', type='run')
+ depends_on('py-pyparsing', type='run')
+
+ # Newer versions of setuptools require packaging. Although setuptools is an
+ # optional dependency of packaging, if it is not found, setup.py will
+ # fallback on distutils.core instead. Don't add a setuptools dependency
+ # or we won't be able to bootstrap setuptools.
+
+ # depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-palettable/package.py b/var/spack/repos/builtin/packages/py-palettable/package.py
new file mode 100644
index 0000000000..65b7a9a27b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-palettable/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyPalettable(PythonPackage):
+ """Color palettes for Python."""
+
+ homepage = "https://jiffyclub.github.io/palettable/"
+ url = "https://pypi.io/packages/source/p/palettable/palettable-3.0.0.tar.gz"
+
+ version('3.0.0', '6e430319fe01386c81dbbc62534e3cc4')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pandas/package.py b/var/spack/repos/builtin/packages/py-pandas/package.py
index c0da33054f..b6d8403502 100644
--- a/var/spack/repos/builtin/packages/py-pandas/package.py
+++ b/var/spack/repos/builtin/packages/py-pandas/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -36,15 +36,17 @@ class PyPandas(PythonPackage):
"""
homepage = "http://pandas.pydata.org/"
- url = "https://pypi.python.org/packages/source/p/pandas/pandas-0.16.0.tar.gz#md5=bfe311f05dc0c351f8955fbd1e296e73"
+ url = "https://pypi.io/packages/source/p/pandas/pandas-0.19.0.tar.gz"
- version('0.16.0', 'bfe311f05dc0c351f8955fbd1e296e73')
- version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
+ version('0.19.0', 'bc9bb7188e510b5d44fbdd249698a2c3')
version('0.18.0', 'f143762cd7a59815e348adf4308d2cf6')
+ version('0.16.1', 'fac4f25748f9610a3e00e765474bdea8')
+ version('0.16.0', 'bfe311f05dc0c351f8955fbd1e296e73')
depends_on('py-dateutil', type=('build', 'run'))
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
depends_on('py-pytz', type=('build', 'run'))
depends_on('py-numexpr', type=('build', 'run'))
depends_on('py-bottleneck', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-paramiko/package.py b/var/spack/repos/builtin/packages/py-paramiko/package.py
new file mode 100644
index 0000000000..90784be649
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-paramiko/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyParamiko(PythonPackage):
+ """SSH2 protocol library"""
+
+ homepage = "http://www.paramiko.org/"
+ url = "https://pypi.io/packages/source/p/paramiko/paramiko-2.1.2.tar.gz"
+
+ version('2.1.2', '41a8ea0e8abb03a6bf59870670d4f46c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pyasn1@0.1.7:', type=('build', 'run'))
+ depends_on('py-cryptography@1.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pathlib2/package.py b/var/spack/repos/builtin/packages/py-pathlib2/package.py
index 8951feff4c..f5cf9cf381 100644
--- a/var/spack/repos/builtin/packages/py-pathlib2/package.py
+++ b/var/spack/repos/builtin/packages/py-pathlib2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,4 +34,4 @@ class PyPathlib2(PythonPackage):
version('2.1.0', '38e4f58b4d69dfcb9edb49a54a8b28d2')
depends_on('py-setuptools', type='build')
- depends_on('python@:3.3.999')
+ depends_on('python@:3.3')
diff --git a/var/spack/repos/builtin/packages/py-pathos/package.py b/var/spack/repos/builtin/packages/py-pathos/package.py
new file mode 100644
index 0000000000..1ebbae5cf2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pathos/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPathos(PythonPackage):
+ """Parallel graph management and execution in heterogeneous computing """
+
+ homepage = "https://github.com/uqfoundation/pathos"
+ url = "https://pypi.io/packages/source/p/pathos/pathos-0.2.0.zip"
+
+ version('0.2.0', '7a840ce6c3a67d71e6ad7339034ec53e')
+
+ depends_on('python@2.6:2.8,3.1:')
+
+ depends_on('py-setuptools@0.6:', type='build')
+ depends_on('py-multiprocess@0.70.4:', type=('build', 'run'))
+ depends_on('py-pox@0.2.2:', type=('build', 'run'))
+ depends_on('py-ppft@1.6.4.5:', type=('build', 'run'))
+ depends_on('py-dill@0.2.5:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pathspec/package.py b/var/spack/repos/builtin/packages/py-pathspec/package.py
index e5030abc70..8857ee40f5 100644
--- a/var/spack/repos/builtin/packages/py-pathspec/package.py
+++ b/var/spack/repos/builtin/packages/py-pathspec/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,8 +30,8 @@ class PyPathspec(PythonPackage):
making it easier to write, find and run tests."""
homepage = "https://pypi.python.org/pypi/pathspec"
+ url = "https://pypi.io/packages/source/p/pathspec/pathspec-0.3.4.tar.gz"
- version('0.3.4', '2a4af9bf2dee98845d583ec61a00d05d',
- url='https://pypi.python.org/packages/14/9d/c9d790d373d6f6938d793e9c549b87ad8670b6fa7fc6176485e6ef11c1a4/pathspec-0.3.4.tar.gz')
+ version('0.3.4', '2a4af9bf2dee98845d583ec61a00d05d')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-patsy/package.py b/var/spack/repos/builtin/packages/py-patsy/package.py
new file mode 100644
index 0000000000..1b60b76cd7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-patsy/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PyPatsy(PythonPackage):
+ """A Python package for describing statistical models and for
+ building design matrices."""
+
+ homepage = "https://github.com/pydata/patsy"
+ url = "https://pypi.io/packages/source/p/patsy/patsy-0.4.1.zip"
+
+ version('0.4.1', '9445f29e3426d1ed30d683a1e1453f84')
+
+ variant('splines', description="Offers spline related functions")
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'), when="+splines")
+ depends_on('py-six', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
diff --git a/var/spack/repos/builtin/packages/py-pbr/package.py b/var/spack/repos/builtin/packages/py-pbr/package.py
index 2a320eb76d..4ada322c89 100644
--- a/var/spack/repos/builtin/packages/py-pbr/package.py
+++ b/var/spack/repos/builtin/packages/py-pbr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,12 @@ class PyPbr(PythonPackage):
"""PBR is a library that injects some useful and sensible default
behaviors into your setuptools run."""
homepage = "https://pypi.python.org/pypi/pbr"
- url = "https://pypi.python.org/packages/source/p/pbr/pbr-1.8.1.tar.gz"
+ url = "https://pypi.io/packages/source/p/pbr/pbr-1.10.0.tar.gz"
+ version('1.10.0', '8e4968c587268f030e38329feb9c8f17')
version('1.8.1', 'c8f9285e1a4ca6f9654c529b158baa3a')
depends_on('py-setuptools', type='build')
+ # Only needed for py<3.4, however when='^python@:3.4.2' syntax might be
+ # broken, if this fails, remove the when-clause
+ depends_on('py-enum34', type='build', when='^python@:3.3')
diff --git a/var/spack/repos/builtin/packages/py-periodictable/package.py b/var/spack/repos/builtin/packages/py-periodictable/package.py
index 9ff1543018..6b6cd2ecf5 100644
--- a/var/spack/repos/builtin/packages/py-periodictable/package.py
+++ b/var/spack/repos/builtin/packages/py-periodictable/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,10 @@ class PyPeriodictable(PythonPackage):
making it easier to write, find and run tests."""
homepage = "https://pypi.python.org/pypi/periodictable"
- url = "https://pypi.python.org/packages/source/p/periodictable/periodictable-1.4.1.tar.gz"
+ url = "https://pypi.io/packages/source/p/periodictable/periodictable-1.4.1.tar.gz"
version('1.4.1', '7246b63cc0b6b1be6e86b6616f9e866e')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-pyparsing', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-petsc4py/package.py b/var/spack/repos/builtin/packages/py-petsc4py/package.py
new file mode 100644
index 0000000000..383c11fd94
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-petsc4py/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyPetsc4py(PythonPackage):
+ """This package provides Python bindings for the PETSc package.
+ """
+ homepage = "https://pypi.python.org/pypi/petsc4py"
+ url = "https://pypi.io/packages/source/p/petsc4py/petsc4py-3.7.0.tar.gz"
+
+ version('3.7.0', '816a20040a6a477bd637f397c9fb5b6d')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-mpi4py', type=('build', 'run'))
+ depends_on('petsc+mpi')
diff --git a/var/spack/repos/builtin/packages/py-pexpect/package.py b/var/spack/repos/builtin/packages/py-pexpect/package.py
index 5c194c44b6..8900698f00 100644
--- a/var/spack/repos/builtin/packages/py-pexpect/package.py
+++ b/var/spack/repos/builtin/packages/py-pexpect/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-phonopy/package.py b/var/spack/repos/builtin/packages/py-phonopy/package.py
index b7f1003e28..fd45d7db28 100644
--- a/var/spack/repos/builtin/packages/py-phonopy/package.py
+++ b/var/spack/repos/builtin/packages/py-phonopy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pickleshare/package.py b/var/spack/repos/builtin/packages/py-pickleshare/package.py
index 9bf9ff63fb..da8bdccb5e 100644
--- a/var/spack/repos/builtin/packages/py-pickleshare/package.py
+++ b/var/spack/repos/builtin/packages/py-pickleshare/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pil/package.py b/var/spack/repos/builtin/packages/py-pil/package.py
index fb14fb9b27..332a7e91ee 100644
--- a/var/spack/repos/builtin/packages/py-pil/package.py
+++ b/var/spack/repos/builtin/packages/py-pil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pillow/package.py b/var/spack/repos/builtin/packages/py-pillow/package.py
index 5729c5c3dd..3b54ee32ae 100644
--- a/var/spack/repos/builtin/packages/py-pillow/package.py
+++ b/var/spack/repos/builtin/packages/py-pillow/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ class PyPillow(PythonPackage):
capabilities."""
homepage = "https://python-pillow.org/"
- url = "https://pypi.python.org/packages/source/P/Pillow/Pillow-3.0.0.tar.gz"
+ url = "https://pypi.io/packages/source/P/Pillow/Pillow-3.0.0.tar.gz"
# TODO: This version should be deleted once the next release comes out.
# TODO: It fixes a bug that prevented us from linking to Tk/Tcl.
@@ -129,4 +129,6 @@ class PyPillow(PythonPackage):
return '--{0}-{1}'.format(able, variant)
variants = ['jpeg', 'zlib', 'tiff', 'freetype', 'lcms', 'jpeg2000']
- return list(map(variant_to_flag, variants))
+ args = list(map(variant_to_flag, variants))
+ args.extend(['--rpath=%s' % ":".join(self.rpath)])
+ return args
diff --git a/var/spack/repos/builtin/packages/py-pip/package.py b/var/spack/repos/builtin/packages/py-pip/package.py
index 73e1661245..d0da3dd153 100644
--- a/var/spack/repos/builtin/packages/py-pip/package.py
+++ b/var/spack/repos/builtin/packages/py-pip/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,4 +33,8 @@ class PyPip(PythonPackage):
version('9.0.1', '35f01da33009719497f01a4ba69d63c9')
- depends_on('py-setuptools', type='build')
+ depends_on('python@2.6:2.8,3.3:')
+
+ # Most Python packages only require setuptools as a build dependency.
+ # However, pip requires setuptools during runtime as well.
+ depends_on('py-setuptools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pipits/package.py b/var/spack/repos/builtin/packages/py-pipits/package.py
new file mode 100644
index 0000000000..e24f4718db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pipits/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# 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/spack/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 PyPipits(PythonPackage):
+ """Automated pipeline for analyses of fungal ITS from the Illumina"""
+
+ homepage = "https://github.com/hsgweon/pipits"
+ url = "https://github.com/hsgweon/pipits/archive/1.5.0.tar.gz"
+
+ version('1.5.0', '3f9b52bd7ffbcdb96d7bec150275070a')
+
+ depends_on('python@:2.999', type=('build', 'run'))
+ depends_on('py-biom-format', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('java', type=('build', 'run'))
+ depends_on('hmmer')
+ depends_on('fastx-toolkit')
+ depends_on('vsearch')
+ depends_on('itsx')
+ depends_on('rdp-classifier')
+
+ resource(
+ name='UNITE_retrained',
+ url='http://sourceforge.net/projects/pipits/files/UNITE_retrained_28.06.2017.tar.gz',
+ destination='refdb'
+ )
+
+ resource(
+ name='uchime_reference_dataset_01.01.2016.fasta',
+ url='https://unite.ut.ee/sh_files/uchime_reference_dataset_01.01.2016.zip',
+ destination=join_path('refdb', 'uchime_reference_dataset_01.01.2016')
+ )
+
+ resource(
+ name='warcup_retrained_V2',
+ url='https://sourceforge.net/projects/pipits/files/warcup_retrained_V2.tar.gz',
+ destination='refdb'
+ )
+
+ @run_after('install')
+ def install_db(self):
+ install_tree(join_path(self.stage.source_path, 'refdb'),
+ self.prefix.refdb)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('PIPITS_UNITE_REFERENCE_DATA_CHIMERA', join_path(
+ self.prefix, 'refdb',
+ 'uchime_reference_dataset_01.01.2016',
+ 'uchime_reference_dataset_01.01.2016.fasta'))
+ run_env.set('PIPITS_UNITE_RETRAINED_DIR',
+ self.prefix.refdb.UNITE_retrained)
+ run_env.set('PIPITS_WARCUP_RETRAINED_DIR',
+ self.prefix.refdb.warcup_retrained_V2)
+ run_env.set('PIPITS_RDP_CLASSIFIER_JAR', join_path(
+ self.spec['rdp-classifier'].prefix.bin,
+ 'classifier.jar'))
diff --git a/var/spack/repos/builtin/packages/py-pkgconfig/package.py b/var/spack/repos/builtin/packages/py-pkgconfig/package.py
new file mode 100644
index 0000000000..eb3be23871
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pkgconfig/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPkgconfig(PythonPackage):
+ """Interface Python with pkg-config."""
+
+ homepage = "http://github.com/matze/pkgconfig"
+ url = "https://pypi.io/packages/source/p/pkgconfig/pkgconfig-1.2.2.tar.gz"
+
+ version('1.2.2', '81a8f6ef3371831d081e03db39e09683')
+
+ depends_on('python@2.6:')
+ depends_on('py-setuptools', type='build')
+
+ depends_on('pkg-config', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose@1.0:', type='test')
diff --git a/var/spack/repos/builtin/packages/py-ply/package.py b/var/spack/repos/builtin/packages/py-ply/package.py
index f5a1e537e2..f1ccd85c3f 100644
--- a/var/spack/repos/builtin/packages/py-ply/package.py
+++ b/var/spack/repos/builtin/packages/py-ply/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pmw/package.py b/var/spack/repos/builtin/packages/py-pmw/package.py
index 3293d94cd6..b22499d137 100644
--- a/var/spack/repos/builtin/packages/py-pmw/package.py
+++ b/var/spack/repos/builtin/packages/py-pmw/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,6 +29,6 @@ class PyPmw(PythonPackage):
"""Pmw is a toolkit for building high-level compound widgets, or
megawidgets, constructed using other widgets as component parts."""
homepage = "https://pypi.python.org/pypi/Pmw"
- url = "https://pypi.python.org/packages/source/P/Pmw/Pmw-2.0.0.tar.gz"
+ url = "https://pypi.io/packages/source/P/Pmw/Pmw-2.0.0.tar.gz"
version('2.0.0', 'c7c3f26c4f5abaa99807edefee578fc0')
diff --git a/var/spack/repos/builtin/packages/py-pox/package.py b/var/spack/repos/builtin/packages/py-pox/package.py
new file mode 100644
index 0000000000..a4fe508ab2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pox/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyPox(PythonPackage):
+ """Utilities for filesystem exploration and automated builds."""
+
+ homepage = "https://github.com/uqfoundation/pox"
+ url = "https://pypi.io/packages/source/p/pox/pox-0.2.3.zip"
+
+ version('0.2.3', 'fcdfd9a9ab0f72367258b675554f6a83')
+ version('0.2.2', 'e1e2ce99a63d7226ea3c1a2ce389610d')
+ version('0.2.1', '517dc13c2bc2429d36a0c636f3ce42db')
+
+ depends_on('python@2.5:2.8,3.1:')
+
+ depends_on('py-setuptools@0.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/py-ppft/package.py b/var/spack/repos/builtin/packages/py-ppft/package.py
new file mode 100644
index 0000000000..ca14fbb6b0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-ppft/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPpft(PythonPackage):
+ """Distributed and parallel python """
+
+ homepage = "https://github.com/uqfoundation/ppft"
+ url = "https://pypi.io/packages/source/p/ppft/ppft-1.6.4.7.1.zip"
+
+ version('1.6.4.7.1', '2b196a03bfbc102773f849c6b21e617b')
+ version('1.6.4.6', 'e533432bfba4b5a523a07d58011df209')
+ version('1.6.4.5', 'd2b1f9f07eae22b31bfe90f544dd3044')
+
+ depends_on('python@2.5:2.8,3.1:')
+
+ depends_on('py-setuptools@0.6:', type='build')
+ depends_on('py-six@1.7.3:', type=('build', 'run'))
+ depends_on('py-dill@0.2.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-prettytable/package.py b/var/spack/repos/builtin/packages/py-prettytable/package.py
index 2203f68af0..5f8378ca7c 100644
--- a/var/spack/repos/builtin/packages/py-prettytable/package.py
+++ b/var/spack/repos/builtin/packages/py-prettytable/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,7 @@ class PyPrettytable(PythonPackage):
"""
homepage = "https://code.google.com/archive/p/prettytable/"
- url = "https://pypi.python.org/packages/e0/a1/36203205f77ccf98f3c6cf17cf068c972e6458d7e58509ca66da949ca347/prettytable-0.7.2.tar.gz"
+ url = "https://pypi.io/packages/source/p/prettytable/prettytable-0.7.2.tar.gz"
version('0.7.2', 'a6b80afeef286ce66733d54a0296b13b')
diff --git a/var/spack/repos/builtin/packages/py-proj/package.py b/var/spack/repos/builtin/packages/py-proj/package.py
index 949aab88c3..cea4f0c3ea 100644
--- a/var/spack/repos/builtin/packages/py-proj/package.py
+++ b/var/spack/repos/builtin/packages/py-proj/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,9 +32,8 @@ class PyProj(PythonPackage):
# This is not a tagged release of pyproj.
# The changes in this "version" fix some bugs, especially with Python3 use.
- version('1.9.5.1.1', 'd035e4bc704d136db79b43ab371b27d2',
- url='https://www.github.com/jswhit/pyproj/tarball/0be612cc9f972e38b50a90c946a9b353e2ab140f')
-
+ version('1.9.5.1.1', git='https://www.github.com/jswhit/pyproj.git',
+ commit='0be612cc9f972e38b50a90c946a9b353e2ab140f')
version('1.9.5.1', 'a4b80d7170fc82aee363d7f980279835')
depends_on('py-cython', type='build')
diff --git a/var/spack/repos/builtin/packages/py-prompt-toolkit/package.py b/var/spack/repos/builtin/packages/py-prompt-toolkit/package.py
index da48cb932f..f9b07f30d1 100644
--- a/var/spack/repos/builtin/packages/py-prompt-toolkit/package.py
+++ b/var/spack/repos/builtin/packages/py-prompt-toolkit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-protobuf/package.py b/var/spack/repos/builtin/packages/py-protobuf/package.py
index 4cdb3801a5..fd3e4a6f09 100644
--- a/var/spack/repos/builtin/packages/py-protobuf/package.py
+++ b/var/spack/repos/builtin/packages/py-protobuf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,7 @@ class PyProtobuf(PythonPackage):
and using a variety of languages."""
homepage = 'https://developers.google.com/protocol-buffers/'
- url = 'https://pypi.python.org/packages/source/p/protobuf/protobuf-3.0.0b2.tar.gz'
+ url = 'https://pypi.io/packages/source/p/protobuf/protobuf-3.0.0b2.tar.gz'
version('3.0.0b2', 'f0d3bd2394345a9af4a277cd0302ae83')
version('2.6.1', '6bf843912193f70073db7f22e2ea55e2')
diff --git a/var/spack/repos/builtin/packages/py-psutil/package.py b/var/spack/repos/builtin/packages/py-psutil/package.py
index 7aa776d2a1..60c3368966 100644
--- a/var/spack/repos/builtin/packages/py-psutil/package.py
+++ b/var/spack/repos/builtin/packages/py-psutil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,15 @@
from spack import *
-class PyPsutil(Package):
+class PyPsutil(PythonPackage):
"""psutil is a cross-platform library for retrieving information on
running processes and system utilization (CPU, memory, disks, network)
in Python."""
homepage = "https://pypi.python.org/pypi/psutil"
- url = "https://pypi.python.org/packages/d9/c8/8c7a2ab8ec108ba9ab9a4762c5a0d67c283d41b13b5ce46be81fdcae3656/psutil-5.0.1.tar.gz"
+ url = "https://pypi.io/packages/source/p/psutil/psutil-5.0.1.tar.gz"
version('5.0.1', '153dc8be94badc4072016ceeac7808dc')
- extends('python')
depends_on('python@2.6:')
depends_on('py-setuptools', type='build')
-
- def install(self, spec, prefix):
- setup_py('install', '--prefix=%s' % prefix)
diff --git a/var/spack/repos/builtin/packages/py-ptyprocess/package.py b/var/spack/repos/builtin/packages/py-ptyprocess/package.py
index 2419793227..f97ff6e048 100644
--- a/var/spack/repos/builtin/packages/py-ptyprocess/package.py
+++ b/var/spack/repos/builtin/packages/py-ptyprocess/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,5 +32,3 @@ class PyPtyprocess(PythonPackage):
url = "https://pypi.io/packages/source/p/ptyprocess/ptyprocess-0.5.1.tar.gz"
version('0.5.1', '94e537122914cc9ec9c1eadcd36e73a1')
-
- depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pudb/package.py b/var/spack/repos/builtin/packages/py-pudb/package.py
index 66896bd83f..bbc89251fe 100644
--- a/var/spack/repos/builtin/packages/py-pudb/package.py
+++ b/var/spack/repos/builtin/packages/py-pudb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,13 @@ class PyPudb(PythonPackage):
"""Full-screen console debugger for Python"""
homepage = "http://mathema.tician.de/software/pudb"
- url = "https://pypi.io/packages/source/p/pudb/pudb-2016.2.tar.gz"
+ url = "https://pypi.io/packages/source/p/pudb/pudb-2017.1.1.tar.gz"
- version('2016.2', '4573b70163329c1cb59836a357bfdf7c')
+ version('2017.1.1', '4ec3302ef90f22b13c60db16b3557c56')
+ version('2016.2', '4573b70163329c1cb59836a357bfdf7c')
- depends_on('py-setuptools', type='build')
- depends_on('py-urwid@1.1.1:', type=('build', 'run'))
+ # Most Python packages only require setuptools as a build dependency.
+ # However, pudb requires setuptools during runtime as well.
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-urwid@1.1.1:', type=('build', 'run'))
depends_on('py-pygments@1.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-py/package.py b/var/spack/repos/builtin/packages/py-py/package.py
index 5a963105bd..9706a2659d 100644
--- a/var/spack/repos/builtin/packages/py-py/package.py
+++ b/var/spack/repos/builtin/packages/py-py/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,13 @@ class PyPy(PythonPackage):
"""library with cross-python path, ini-parsing, io, code, log facilities"""
homepage = "http://pylib.readthedocs.io/en/latest/"
- url = "https://pypi.python.org/packages/source/p/py/py-1.4.31.tar.gz"
+ url = "https://pypi.io/packages/source/p/py/py-1.4.33.tar.gz"
+ import_modules = [
+ 'py', 'py._code', 'py._io', 'py._log', 'py._path', 'py._process',
+ ]
+
+ version('1.4.33', '15d7107cbb8b86593bf9afa16e56da65')
version('1.4.31', '5d2c63c56dc3f2115ec35c066ecd582b')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-py2bit/package.py b/var/spack/repos/builtin/packages/py-py2bit/package.py
new file mode 100644
index 0000000000..26d1f42a7b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-py2bit/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyPy2bit(PythonPackage):
+ """A package for accessing 2bit files using lib2bit."""
+
+ homepage = "https://pypi.python.org/pypi/py2bit"
+ url = "https://pypi.io/packages/source/p/py2bit/py2bit-0.2.1.tar.gz"
+
+ version('0.2.1', 'eaf5b1c80a0bbf0b35af1f002f83a556')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-py2cairo/package.py b/var/spack/repos/builtin/packages/py-py2cairo/package.py
index bb404c61f0..30e363885d 100644
--- a/var/spack/repos/builtin/packages/py-py2cairo/package.py
+++ b/var/spack/repos/builtin/packages/py-py2cairo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class PyPy2cairo(Package):
+class PyPy2cairo(WafPackage):
"""Pycairo is a set of Python bindings for the cairo graphics library."""
homepage = "https://www.cairographics.org/pycairo/"
@@ -35,10 +35,15 @@ class PyPy2cairo(Package):
extends('python')
- depends_on('cairo+X')
+ depends_on('python', type=('build', 'run'))
+ depends_on('cairo@1.10.0:')
depends_on('pixman')
+ depends_on('pkg-config', type='build')
- def install(self, spec, prefix):
- python('waf', 'configure', '--prefix={0}'.format(prefix))
- python('waf', 'build')
- python('waf', 'install')
+ # TODO: Add a 'test' deptype
+ # depends_on('py-pytest', type='test')
+
+ def installtest(self):
+ with working_dir('test'):
+ pytest = which('py.test')
+ pytest()
diff --git a/var/spack/repos/builtin/packages/py-py2neo/package.py b/var/spack/repos/builtin/packages/py-py2neo/package.py
index 1db080ac97..27bb043116 100644
--- a/var/spack/repos/builtin/packages/py-py2neo/package.py
+++ b/var/spack/repos/builtin/packages/py-py2neo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-py4j/package.py b/var/spack/repos/builtin/packages/py-py4j/package.py
new file mode 100644
index 0000000000..0c7e41a1d7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-py4j/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyPy4j(PythonPackage):
+ """Enables Python programs to dynamically access arbitrary Java
+ objects."""
+
+ homepage = "https://www.py4j.org/"
+ url = "https://pypi.io/packages/source/p/py4j/py4j-0.10.4.tar.gz"
+
+ version('0.10.4', 'de1ce072fb8d5bff8aba537b1700ace4')
+ version('0.10.3', '6c86aebb4f1cdd4bf192b16c8a8fe8e4')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pyasn1/package.py b/var/spack/repos/builtin/packages/py-pyasn1/package.py
new file mode 100644
index 0000000000..3a7fc949c5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyasn1/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyPyasn1(PythonPackage):
+ """ Generic ASN.1 library for Python http://pyasn1.sf.net"""
+
+ homepage = "https://github.com/etingof/pyasn1"
+ url = "https://pypi.io/packages/source/p/pyasn1/pyasn1-0.2.3.tar.gz"
+
+ version('0.2.3', '79f98135071c8dd5c37b6c923c51be45')
+ depends_on('py-setuptools', type='build')
+ depends_on('python@2.4:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pybigwig/package.py b/var/spack/repos/builtin/packages/py-pybigwig/package.py
new file mode 100644
index 0000000000..5c88d111f5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pybigwig/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyPybigwig(PythonPackage):
+ """A package for accessing bigWig files using libBigWig."""
+
+ homepage = "https://pypi.python.org/pypi/pyBigWig"
+ url = "https://pypi.io/packages/source/p/pyBigWig/pyBigWig-0.3.4.tar.gz"
+
+ version('0.3.4', '8e0a91e26e87eeaa071408a3a749bfa9')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('curl', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pybind11/package.py b/var/spack/repos/builtin/packages/py-pybind11/package.py
new file mode 100644
index 0000000000..aaa54370bf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pybind11/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 PyPybind11(CMakePackage):
+ """pybind11 -- Seamless operability between C++11 and Python.
+ pybind11 is a lightweight header-only library that exposes C++ types in
+ Python and vice versa, mainly to create Python bindings of existing C++
+ code. Its goals and syntax are similar to the excellent Boost.Python
+ library by David Abrahams: to minimize boilerplate code in traditional
+ extension modules by inferring type information using compile-time
+ introspection."""
+
+ homepage = "https://pybind11.readthedocs.io"
+ url = "https://github.com/pybind/pybind11/archive/v2.1.0.tar.gz"
+
+ version('2.2.0', '978b26aea1c6bfc4f88518ef33771af2')
+ version('2.1.1', '5518988698df937ccee53fb6ba91d12a')
+ version('2.1.0', '3cf07043d677d200720c928569635e12')
+
+ depends_on('py-pytest', type=('build'))
+
+ extends('python')
+
+ def cmake_args(self):
+ args = []
+ args.append('-DPYTHON_EXECUTABLE:FILEPATH=%s'
+ % self.spec['python'].command.path)
+ return args
diff --git a/var/spack/repos/builtin/packages/py-pybtex-docutils/package.py b/var/spack/repos/builtin/packages/py-pybtex-docutils/package.py
new file mode 100644
index 0000000000..45371400a3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pybtex-docutils/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyPybtexDocutils(PythonPackage):
+ """A docutils backend for pybtex."""
+
+ homepage = "https://pypi.python.org/pypi/pybtex-docutils/"
+ url = "https://pypi.io/packages/source/p/pybtex-docutils/pybtex-docutils-0.2.1.tar.gz"
+
+ import_modules = ['pybtex_docutils']
+
+ version('0.2.1', '7ae4b00562bd8881f582edf95009cc62')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-docutils@0.8:', type=('build', 'run'))
+ depends_on('py-pybtex@0.16:', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pybtex/package.py b/var/spack/repos/builtin/packages/py-pybtex/package.py
new file mode 100644
index 0000000000..606c047232
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pybtex/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 PyPybtex(PythonPackage):
+ """Pybtex is a BibTeX-compatible bibliography processor written in
+ Python."""
+
+ homepage = "https://pybtex.org"
+ url = "https://pypi.io/packages/source/P/Pybtex/pybtex-0.21.tar.gz"
+
+ import_modules = [
+ 'custom_fixers', 'pybtex', 'pybtex.style', 'pybtex.tests',
+ 'pybtex.database', 'pybtex.backends', 'pybtex.bibtex',
+ 'pybtex.charwidths', 'pybtex.markup', 'pybtex.plugin',
+ 'pybtex.style.sorting', 'pybtex.style.names',
+ 'pybtex.style.labels', 'pybtex.style.formatting',
+ 'pybtex.tests.database_test', 'pybtex.tests.bst_parser_test',
+ 'pybtex.tests.data', 'pybtex.database.output',
+ 'pybtex.database.input', 'pybtex.database.format',
+ 'pybtex.database.convert'
+ ]
+
+ version('0.21', 'e7b320b2bcb34c664c4385533a2ea831')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-latexcodec@1.0.4:', type=('build', 'run'))
+ depends_on('py-pyyaml@3.01:', type=('build', 'run'))
+ # This dependency breaks concretization
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-counter@1:', when='^python@:2.6', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pychecker/package.py b/var/spack/repos/builtin/packages/py-pychecker/package.py
index de09b380c9..2f85fa88ac 100644
--- a/var/spack/repos/builtin/packages/py-pychecker/package.py
+++ b/var/spack/repos/builtin/packages/py-pychecker/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pycodestyle/package.py b/var/spack/repos/builtin/packages/py-pycodestyle/package.py
index 3e668a2704..3bae7c4296 100644
--- a/var/spack/repos/builtin/packages/py-pycodestyle/package.py
+++ b/var/spack/repos/builtin/packages/py-pycodestyle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pycparser/package.py b/var/spack/repos/builtin/packages/py-pycparser/package.py
index 8de5c39d32..256130b1b7 100644
--- a/var/spack/repos/builtin/packages/py-pycparser/package.py
+++ b/var/spack/repos/builtin/packages/py-pycparser/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,8 +28,11 @@ from spack import *
class PyPycparser(PythonPackage):
"""A complete parser of the C language, written in pure python."""
homepage = "https://github.com/eliben/pycparser"
- url = "https://pypi.python.org/packages/source/p/pycparser/pycparser-2.13.tar.gz"
+ url = "https://pypi.io/packages/source/p/pycparser/pycparser-2.17.tar.gz"
+ import_modules = ['pycparser', 'pycparser.ply']
+
+ version('2.17', 'ca98dcb50bc1276f230118f6af5a40c7')
version('2.13', 'e4fe1a2d341b22e25da0d22f034ef32f')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pycrypto/package.py b/var/spack/repos/builtin/packages/py-pycrypto/package.py
new file mode 100644
index 0000000000..948a4f7cbd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pycrypto/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyPycrypto(PythonPackage):
+ """The Python Cryptography Toolkit"""
+
+ homepage = "https://www.dlitz.net/software/pycrypto/"
+ url = "https://pypi.io/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz"
+
+ version('2.6.1', '55a61a054aa66812daf5161a0d5d7eda')
+
+ # depends_on('py-setuptools', type='build')
+ depends_on('gmp')
diff --git a/var/spack/repos/builtin/packages/py-pycurl/package.py b/var/spack/repos/builtin/packages/py-pycurl/package.py
index 81a2a35064..c111430b9e 100644
--- a/var/spack/repos/builtin/packages/py-pycurl/package.py
+++ b/var/spack/repos/builtin/packages/py-pycurl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,9 @@ class PyPycurl(PythonPackage):
objects identified by a URL from a Python program."""
homepage = "http://pycurl.io/"
- url = "https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz"
+ url = "https://pypi.io/packages/source/p/pycurl/pycurl-7.43.0.tar.gz"
version('7.43.0', 'c94bdba01da6004fa38325e9bd6b9760')
depends_on('python@2.6:')
- depends_on('py-setuptools', type='build')
depends_on('curl@7.19.0:')
diff --git a/var/spack/repos/builtin/packages/py-pydatalog/package.py b/var/spack/repos/builtin/packages/py-pydatalog/package.py
index 600a34cdfc..9bd5c898a2 100644
--- a/var/spack/repos/builtin/packages/py-pydatalog/package.py
+++ b/var/spack/repos/builtin/packages/py-pydatalog/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,6 +28,6 @@ from spack import *
class PyPydatalog(PythonPackage):
"""pyDatalog adds logic programming to Python."""
homepage = 'https://pypi.python.org/pypi/pyDatalog/'
- url = 'https://pypi.python.org/packages/09/0b/2670eb9c0027aacfb5b5024ca75e5fee2f1261180ab8797108ffc941158a/pyDatalog-0.17.1.zip'
+ url = 'https://pypi.io/packages/source/p/pyDatalog/pyDatalog-0.17.1.zip'
version('0.17.1', '6b2682301200068d208d6f2d01723939')
diff --git a/var/spack/repos/builtin/packages/py-pydispatcher/package.py b/var/spack/repos/builtin/packages/py-pydispatcher/package.py
new file mode 100644
index 0000000000..9e329ab70c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pydispatcher/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyPydispatcher(PythonPackage):
+ """Multi-producer-multi-consumer signal dispatching mechanism."""
+
+ homepage = "http://pydispatcher.sourceforge.net/"
+ url = "https://pypi.io/packages/source/P/PyDispatcher/PyDispatcher-2.0.5.tar.gz"
+
+ version('2.0.5', '1b9c2ca33580c2770577add7130b0b28')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pydot/package.py b/var/spack/repos/builtin/packages/py-pydot/package.py
new file mode 100644
index 0000000000..c6067c00a1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pydot/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyPydot(PythonPackage):
+ """Python interface to Graphviz's Dot language"""
+
+ homepage = "https://github.com/erocarrera/pydot/"
+ url = "https://pypi.io/packages/source/p/pydot/pydot-1.2.3.tar.gz"
+
+ version('1.2.3', '5b50fd8cf022811d8718562ebc8aefb2')
+ version('1.2.2', 'fad67d9798dbb33bb3dca3e6d4c47665')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pyparsing@2.1.4:', type=('build', 'run'))
+ depends_on('graphviz', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyelftools/package.py b/var/spack/repos/builtin/packages/py-pyelftools/package.py
index d586f14f0d..a7d52ee946 100644
--- a/var/spack/repos/builtin/packages/py-pyelftools/package.py
+++ b/var/spack/repos/builtin/packages/py-pyelftools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,6 +29,6 @@ class PyPyelftools(PythonPackage):
"""A pure-Python library for parsing and analyzing ELF files and DWARF
debugging information"""
homepage = "https://pypi.python.org/pypi/pyelftools"
- url = "https://pypi.python.org/packages/source/p/pyelftools/pyelftools-0.23.tar.gz"
+ url = "https://pypi.io/packages/source/p/pyelftools/pyelftools-0.23.tar.gz"
version('0.23', 'aa7cefa8bd2f63d7b017440c9084f310')
diff --git a/var/spack/repos/builtin/packages/py-pyfasta/package.py b/var/spack/repos/builtin/packages/py-pyfasta/package.py
new file mode 100644
index 0000000000..40a5fcf46e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyfasta/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyPyfasta(PythonPackage):
+ """Pyfasta: fast, memory-efficient, pythonic (and command-line)
+ access to fasta sequence files"""
+
+ homepage = "https://pypi.python.org/pypi/pyfasta/"
+ url = "https://pypi.python.org/packages/be/3f/794fbcdaaa2113f0a1d16a962463896c1a6bdab77bd63f33a8f16aae6cdc/pyfasta-0.5.2.tar.gz"
+
+ version('0.5.2', 'bf61ab997dca329675c3eb2ee7cdfcf2')
+
+ depends_on('python@2.6:')
+ depends_on('py-setuptools')
+ depends_on('py-numpy')
diff --git a/var/spack/repos/builtin/packages/py-pyfftw/package.py b/var/spack/repos/builtin/packages/py-pyfftw/package.py
new file mode 100644
index 0000000000..4dd9fe1600
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyfftw/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyPyfftw(PythonPackage):
+ """A pythonic wrapper around FFTW, the FFT library,
+ presenting a unified interface for all the supported transforms."""
+
+ homepage = "http://hgomersall.github.com/pyFFTW"
+ url = "https://pypi.io/packages/source/p/pyFFTW/pyFFTW-0.10.4.tar.gz"
+
+ version('0.10.4', '7fb59450308881bb48d9f178947d950e')
+
+ depends_on('fftw')
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-numpy@1.6:', type=('build', 'run'))
+ depends_on('py-scipy@0.12.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyflakes/package.py b/var/spack/repos/builtin/packages/py-pyflakes/package.py
index 53674bb6e4..6f962ae4df 100644
--- a/var/spack/repos/builtin/packages/py-pyflakes/package.py
+++ b/var/spack/repos/builtin/packages/py-pyflakes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pygments/package.py b/var/spack/repos/builtin/packages/py-pygments/package.py
index 42e3366cdf..8c6ee04db8 100644
--- a/var/spack/repos/builtin/packages/py-pygments/package.py
+++ b/var/spack/repos/builtin/packages/py-pygments/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,9 +28,15 @@ from spack import *
class PyPygments(PythonPackage):
"""Pygments is a syntax highlighting package written in Python."""
- homepage = "https://pypi.python.org/pypi/pygments"
- url = "https://pypi.python.org/packages/source/P/Pygments/Pygments-2.0.1.tar.gz"
+ homepage = "http://pygments.org/"
+ url = "https://pypi.io/packages/source/P/Pygments/Pygments-2.2.0.tar.gz"
+ import_modules = [
+ 'pygments', 'pygments.filters', 'pygments.formatters',
+ 'pygments.lexers', 'pygments.styles'
+ ]
+
+ version('2.2.0', '13037baca42f16917cbd5ad2fab50844')
version('2.1.3', 'ed3fba2467c8afcda4d317e4ef2c6150')
version('2.0.1', 'e0daf4c14a4fe5b630da765904de4d6c')
version('2.0.2', '238587a1370d62405edabd0794b3ec4a')
diff --git a/var/spack/repos/builtin/packages/py-pygobject/package.py b/var/spack/repos/builtin/packages/py-pygobject/package.py
index 1dae1a128b..6c81418fce 100644
--- a/var/spack/repos/builtin/packages/py-pygobject/package.py
+++ b/var/spack/repos/builtin/packages/py-pygobject/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,18 +31,23 @@ class PyPygobject(AutotoolsPackage):
homepage = "https://pypi.python.org/pypi/pygobject"
- # FIXME: This URL is no longer available for download from PyPi
- url = "https://pypi.python.org/packages/6d/15/97c8b5ccca2be14cf59a2f79e15e3a82a1c3408a6b76b4107689a8b94846/pygobject-2.28.3.tar.bz2"
+ url = "http://ftp.gnome.org/pub/GNOME/sources/pygobject/2.28/pygobject-2.28.6.tar.bz2"
+ version('2.28.6', 'a43d783228dd32899e6908352b8308f3')
version('2.28.3', 'aa64900b274c4661a5c32e52922977f9')
extends('python')
+
depends_on("libffi")
depends_on('glib')
- depends_on('py-py2cairo')
+ depends_on('py-py2cairo', type=('build', 'run'))
depends_on('gobject-introspection')
- patch('pygobject-2.28.6-introspection-1.patch')
+ patch('pygobject-2.28.6-introspection-1.patch', when='@2.28.3:2.28.6')
+
+ # patch from https://raw.githubusercontent.com/NixOS/nixpkgs/master/pkgs/development/python-modules/pygobject/pygobject-2.28.6-gio-types-2.32.patch
+ # for https://bugzilla.gnome.org/show_bug.cgi?id=668522
+ patch('pygobject-2.28.6-gio-types-2.32.patch', when='@2.28.6')
def install(self, spec, prefix):
make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/py-pygobject/pygobject-2.28.6-gio-types-2.32.patch b/var/spack/repos/builtin/packages/py-pygobject/pygobject-2.28.6-gio-types-2.32.patch
new file mode 100644
index 0000000000..fa0adf54ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pygobject/pygobject-2.28.6-gio-types-2.32.patch
@@ -0,0 +1,50 @@
+From 42d01f060c5d764baa881d13c103d68897163a49 Mon Sep 17 00:00:00 2001
+From: Ryan Lortie <desrt@desrt.ca>
+Date: Mon, 12 Mar 2012 16:44:14 -0400
+Subject: [PATCH] gio-types.defs: change some enums to flags
+
+These flags types were originally incorrectly handled in glib as being
+enums. That bug was fixed, but they're still enums here, leading to
+warnings about the mismatch.
+
+Change them to flags.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=668522
+---
+ gio/gio-types.defs | 6 +++---
+ 1 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/gio/gio-types.defs b/gio/gio-types.defs
+index 331e0bc..7eee5c8 100644
+--- a/gio/gio-types.defs
++++ b/gio/gio-types.defs
+@@ -526,7 +526,7 @@
+ )
+ )
+
+-(define-enum MountMountFlags
++(define-flags MountMountFlags
+ (in-module "gio")
+ (c-name "GMountMountFlags")
+ (gtype-id "G_TYPE_MOUNT_MOUNT_FLAGS")
+@@ -545,7 +545,7 @@
+ )
+ )
+
+-(define-enum DriveStartFlags
++(define-flags DriveStartFlags
+ (in-module "gio")
+ (c-name "GDriveStartFlags")
+ (gtype-id "G_TYPE_DRIVE_START_FLAGS")
+@@ -770,7 +770,7 @@
+ )
+ )
+
+-(define-enum SocketMsgFlags
++(define-flags SocketMsgFlags
+ (in-module "gio")
+ (c-name "GSocketMsgFlags")
+ (gtype-id "G_TYPE_SOCKET_MSG_FLAGS")
+--
+1.7.8.5
+
diff --git a/var/spack/repos/builtin/packages/py-pygtk/package.py b/var/spack/repos/builtin/packages/py-pygtk/package.py
index 56e0b39fd5..5a05a3a402 100644
--- a/var/spack/repos/builtin/packages/py-pygtk/package.py
+++ b/var/spack/repos/builtin/packages/py-pygtk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,8 @@ from spack import *
class PyPygtk(AutotoolsPackage):
- """bindings for the Gtk in Python"""
+ """bindings for the Gtk2 in Python.
+ use pygobject for Gtk3."""
homepage = "http://www.pygtk.org/"
url = "http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/pygtk-2.24.0.tar.gz"
@@ -36,9 +37,10 @@ class PyPygtk(AutotoolsPackage):
depends_on("libffi")
depends_on('cairo')
depends_on('glib')
- depends_on('gtkplus')
- depends_on('py-pygobject')
- depends_on('py-py2cairo')
+ # for GTK 3.X use pygobject 3.X instead of pygtk
+ depends_on('gtkplus+X@2.24:2.99')
+ depends_on('py-pygobject@2.28:2.99', type=('build', 'run'))
+ depends_on('py-py2cairo', type=('build', 'run'))
def install(self, spec, prefix):
make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/py-pylint/package.py b/var/spack/repos/builtin/packages/py-pylint/package.py
index 84830c9bcf..fb6cb2946e 100644
--- a/var/spack/repos/builtin/packages/py-pylint/package.py
+++ b/var/spack/repos/builtin/packages/py-pylint/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,14 +28,17 @@ from spack import *
class PyPylint(PythonPackage):
"""array processing for numbers, strings, records, and objects."""
homepage = "https://pypi.python.org/pypi/pylint"
- url = "https://pypi.python.org/packages/source/p/pylint/pylint-1.4.1.tar.gz"
+ url = "https://pypi.io/packages/source/p/pylint/pylint-1.7.2.tar.gz"
- version('1.4.1', 'df7c679bdcce5019389038847e4de622')
+ version('1.7.2', '27ee752cdcfacb05bf4940947e6b35c6')
version('1.4.3', '5924c1c7ca5ca23647812f5971d0ea44')
+ version('1.4.1', 'df7c679bdcce5019389038847e4de622')
extends('python', ignore=r'bin/pytest')
depends_on('py-six', type=('build', 'run'))
depends_on('py-astroid', type=('build', 'run'))
depends_on('py-logilab-common', type=('build', 'run'))
- depends_on('py-nose', type='build')
depends_on('py-setuptools', type='build')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
diff --git a/var/spack/repos/builtin/packages/py-pymatgen/package.py b/var/spack/repos/builtin/packages/py-pymatgen/package.py
new file mode 100644
index 0000000000..78343e74ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pymatgen/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 PyPymatgen(PythonPackage):
+ """Python Materials Genomics is a robust materials analysis code that
+ defines core object representations for structures and molecules with
+ support for many electronic structure codes. It is currently the core
+ analysis code powering the Materials Project."""
+
+ homepage = "http://www.pymatgen.org/"
+ url = "https://pypi.io/packages/source/p/pymatgen/pymatgen-4.7.2.tar.gz"
+
+ version('4.7.2', '9c3a6e8608671c216e4ef89778646fd6')
+ version('4.6.2', '508f77fdc3e783587348e93e4dfed1b8')
+
+ extends('python', ignore='bin/tabulate')
+
+ depends_on('py-setuptools@18.0:', type='build')
+
+ depends_on('py-numpy@1.9:', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-requests', type=('build', 'run'))
+ depends_on('py-pyyaml@3.11:', type=('build', 'run'))
+ depends_on('py-monty@0.9.6:', type=('build', 'run'))
+ depends_on('py-scipy@0.14:', type=('build', 'run'))
+ depends_on('py-pydispatcher@2.0.5:', type=('build', 'run'))
+ depends_on('py-tabulate', type=('build', 'run'))
+ depends_on('py-spglib@1.9.8.7:', type=('build', 'run'))
+ depends_on('py-matplotlib@1.5:', type=('build', 'run'))
+ depends_on('py-palettable@2.1.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyminifier/package.py b/var/spack/repos/builtin/packages/py-pyminifier/package.py
new file mode 100644
index 0000000000..b4bc9e859b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyminifier/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyPyminifier(PythonPackage):
+ """Pyminifier is a Python code minifier, obfuscator, and compressor."""
+
+ homepage = "http://liftoff.github.io/pyminifier/"
+ url = "https://pypi.io/packages/source/p/pyminifier/pyminifier-2.1.tar.gz"
+
+ version('2.1', 'c1a6b92e69f664005f7adf188c514de7')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pympler/package.py b/var/spack/repos/builtin/packages/py-pympler/package.py
new file mode 100644
index 0000000000..25766d10c4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pympler/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPympler(PythonPackage):
+ """Development tool to measure, monitor and analyze the memory behavior
+ of Python objects in a running Python application.
+ """
+
+ homepage = "https://github.com/pympler/pympler"
+ url = "https://pypi.io/packages/source/P/Pympler/Pympler-0.4.3.tar.gz"
+
+ version('0.4.3', 'bbb4239126e9c99e2effc83b02bf8755')
+ version('0.4.2', '6bdfd913ad4c94036e8a2b358e49abd7')
+ version('0.4.1', '2d54032a6da91ff438f48d5f36b719a6')
+ version('0.4', '68e4a8aa4a268996fa6a321b664918af')
+ version('0.3.1', '906ce437f46fb30991007671a59d4319')
+
+ depends_on('python@2.5:')
diff --git a/var/spack/repos/builtin/packages/py-pynn/package.py b/var/spack/repos/builtin/packages/py-pynn/package.py
new file mode 100644
index 0000000000..23e9ab13a4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pynn/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 PyPynn(PythonPackage):
+ """A Python package for simulator-independent specification of neuronal
+ network models
+ """
+
+ homepage = "http://neuralensemble.org/PyNN/"
+ url = "https://pypi.io/packages/source/P/PyNN/PyNN-0.8.3.tar.gz"
+
+ version('0.8.3', '28c63f898093806a57198e9271ed7b82')
+ version('0.8beta', git='https://github.com/NeuralEnsemble/PyNN.git',
+ commit='ffb0cb1661f2b0f2778db8f71865978fe7a7a6a4')
+ version('0.8.1', '7fb165ed5af35a115cb9c60991645ae6')
+ version('0.7.5', 'd8280544e4c9b34b40fd372b16342841')
+
+ depends_on('python@2.6:2.8,3.3:')
+ depends_on('py-jinja2@2.7:', type=('build', 'run'))
+ depends_on('py-docutils@0.10:', type=('build', 'run'))
+ depends_on('py-numpy@1.5:', type=('build', 'run'))
+ depends_on('py-quantities@0.10:', type=('build', 'run'))
+ depends_on('py-lazyarray@0.2.9:', type=('build', 'run'))
+ depends_on('py-neo@0.3:', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-mock@1.0:', type='test')
diff --git a/var/spack/repos/builtin/packages/py-pypar/package.py b/var/spack/repos/builtin/packages/py-pypar/package.py
index f10b6d807f..ee1aa2735d 100644
--- a/var/spack/repos/builtin/packages/py-pypar/package.py
+++ b/var/spack/repos/builtin/packages/py-pypar/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,8 +37,4 @@ class PyPypar(PythonPackage):
depends_on('mpi')
depends_on('py-numpy', type=('build', 'run'))
- def url_for_version(self, version):
- return "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/pypar/pypar-%s.tgz" % version
-
- def build_directory(self):
- return 'source'
+ build_directory = 'source'
diff --git a/var/spack/repos/builtin/packages/py-pyparsing/package.py b/var/spack/repos/builtin/packages/py-pyparsing/package.py
index cb158a76d6..0be88e638d 100644
--- a/var/spack/repos/builtin/packages/py-pyparsing/package.py
+++ b/var/spack/repos/builtin/packages/py-pyparsing/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,20 @@ from spack import *
class PyPyparsing(PythonPackage):
"""A Python Parsing Module."""
- homepage = "https://pypi.python.org/pypi/pyparsing"
- url = "https://pypi.python.org/packages/source/p/pyparsing/pyparsing-2.0.3.tar.gz"
+ homepage = "http://pyparsing.wikispaces.com/"
+ url = "https://pypi.io/packages/source/p/pyparsing/pyparsing-2.2.0.tar.gz"
- version('2.0.3', '0fe479be09fc2cf005f753d3acc35939')
+ import_modules = ['pyparsing']
+
+ version('2.2.0', '0214e42d63af850256962b6744c948d9')
+ version('2.1.10', '065908b92904e0d3634eb156f44cc80e')
+ version('2.0.3', '0fe479be09fc2cf005f753d3acc35939')
+
+ patch('setuptools-import.patch', when='@:2.1.10')
+
+ # Newer versions of setuptools require pyparsing. Although setuptools is an
+ # optional dependency of pyparsing, if it is not found, setup.py will
+ # fallback on distutils.core instead. Don't add a setuptools dependency
+ # or we won't be able to bootstrap setuptools.
+
+ # depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pyparsing/setuptools-import.patch b/var/spack/repos/builtin/packages/py-pyparsing/setuptools-import.patch
new file mode 100644
index 0000000000..a4ba828c23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyparsing/setuptools-import.patch
@@ -0,0 +1,20 @@
+diff --git a/setup.py b/setup.py
+index 82061c6..ff342af 100644
+--- a/setup.py
++++ b/setup.py
+@@ -1,7 +1,13 @@
+ #!/usr/bin/env python
+
+ """Setup script for the pyparsing module distribution."""
+-from setuptools import setup
++
++# Setuptools depends on pyparsing (via packaging) as of version 34, so allow
++# installing without it to avoid bootstrap problems.
++try:
++ from setuptools import setup
++except ImportError:
++ from distutils.core import setup
+
+ import sys
+ import os
+
diff --git a/var/spack/repos/builtin/packages/py-pypeflow/package.py b/var/spack/repos/builtin/packages/py-pypeflow/package.py
new file mode 100644
index 0000000000..8eb353432c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pypeflow/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyPypeflow(PythonPackage):
+ """pypeFLOW is light weight and reusable make / flow data process
+ library written in Python."""
+
+ homepage = "https://github.com/PacificBiosciences/pypeFLOW"
+ url = "https://github.com/PacificBiosciences/pypeFLOW"
+
+ version('2017-05-04',
+ git='https://github.com/PacificBiosciences/pypeFLOW.git',
+ commit='f23a1b290876bbdf130611000934ae4247158073')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-networkx@1.7:1.11', type=['build', 'run'])
diff --git a/var/spack/repos/builtin/packages/py-pyprof2html/package.py b/var/spack/repos/builtin/packages/py-pyprof2html/package.py
new file mode 100644
index 0000000000..efaa525267
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyprof2html/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyPyprof2html(PythonPackage):
+ """Python cProfile and hotshot profile's data to HTML Converter"""
+
+ homepage = "https://pypi.python.org/pypi/pyprof2html/"
+ url = "https://pypi.io/packages/source/p/pyprof2html/pyprof2html-0.3.1.tar.gz"
+
+ version('0.3.1', 'aa65a1635aac95e0487d7749a6351c43')
+
+ patch('version_0.3.1.patch', when="@0.3.1")
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-jinja2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch b/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch
new file mode 100644
index 0000000000..fd0e856cb5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyprof2html/version_0.3.1.patch
@@ -0,0 +1,10 @@
+diff --git a/pyprof2html/__init__.py b/pyprof2html/__init__.py
+index 342eb6d..74b3392 100644
+--- a/pyprof2html/__init__.py
++++ b/pyprof2html/__init__.py
+@@ -10,3 +10,5 @@ __licence__ = 'New BSD License'
+ __author__ = 'Hideo Hattori <hhatto.jp@gmail.com>'
+
+ __all__ = ['Converter', 'pyprof2html_main']
++
++__version__ = '0.3.1'
diff --git a/var/spack/repos/builtin/packages/py-pyqt/package.py b/var/spack/repos/builtin/packages/py-pyqt/package.py
index e1e87880e0..401cf8ded6 100644
--- a/var/spack/repos/builtin/packages/py-pyqt/package.py
+++ b/var/spack/repos/builtin/packages/py-pyqt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pyrad/package.py b/var/spack/repos/builtin/packages/py-pyrad/package.py
new file mode 100644
index 0000000000..0b56dd3631
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyrad/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyPyrad(PythonPackage):
+ """RADseq for phylogenetics & introgression analyses"""
+
+ homepage = "http://dereneaton.com/software/pyrad/"
+ url = "https://github.com/dereneaton/pyrad/archive/3.0.66.tar.gz"
+
+ version('3.0.66', '19b8bcd73a574f8a25582d6e8978f0aa')
+
+ depends_on('python@:2.999', type=('build', 'run'))
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('vsearch')
+ depends_on('muscle')
diff --git a/var/spack/repos/builtin/packages/py-pysam/package.py b/var/spack/repos/builtin/packages/py-pysam/package.py
new file mode 100644
index 0000000000..7c3cccd21a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pysam/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyPysam(PythonPackage):
+ """A python module for reading, manipulating and writing genomic data
+ sets."""
+
+ homepage = "https://pypi.python.org/pypi/pysam"
+ url = "https://pypi.io/packages/source/p/pysam/pysam-0.11.2.2.tar.gz"
+
+ version('0.11.2.2', '56230cd5f55b503845915b76c22d620a')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython@0.21:', type='build')
+ depends_on('bcftools')
diff --git a/var/spack/repos/builtin/packages/py-pyscaf/package.py b/var/spack/repos/builtin/packages/py-pyscaf/package.py
new file mode 100644
index 0000000000..a32a1aee55
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyscaf/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyPyscaf(PythonPackage):
+ """pyScaf orders contigs from genome assemblies utilising several types of
+ information"""
+
+ homepage = "https://pypi.python.org/pypi/pyScaf"
+ url = "https://pypi.io/packages/source/p/pyScaf/pyScaf-0.12a4.tar.gz"
+
+ version('0.12a4', 'c67526747eb04d1e28279ac310916d40')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-fastaindex', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyserial/package.py b/var/spack/repos/builtin/packages/py-pyserial/package.py
new file mode 100644
index 0000000000..0ddc2c51de
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pyserial/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyPyserial(Package):
+ """Python Serial Port Extension"""
+
+ homepage = "https://github.com/pyserial/pyserial"
+ url = "https://pypi.io/packages/source/p/pyserial/pyserial-3.1.1.tar.gz"
+
+ version('3.1.1', '2f72100de3e410b36d575e12e82e9d27')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pyside/package.py b/var/spack/repos/builtin/packages/py-pyside/package.py
index 961aef7864..e799b4cb72 100644
--- a/var/spack/repos/builtin/packages/py-pyside/package.py
+++ b/var/spack/repos/builtin/packages/py-pyside/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ import os
class PyPyside(PythonPackage):
"""Python bindings for Qt."""
homepage = "https://pypi.python.org/pypi/pyside"
- url = "https://pypi.python.org/packages/source/P/PySide/PySide-1.2.2.tar.gz"
+ url = "https://pypi.io/packages/source/P/PySide/PySide-1.2.2.tar.gz"
version('1.2.4', '3cb7174c13bd45e3e8f77638926cb8c0') # rpath problems
version('1.2.2', 'c45bc400c8a86d6b35f34c29e379e44d', preferred=True)
diff --git a/var/spack/repos/builtin/packages/py-pysocks/package.py b/var/spack/repos/builtin/packages/py-pysocks/package.py
new file mode 100644
index 0000000000..db734dd927
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pysocks/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 PyPysocks(PythonPackage):
+ """A Python SOCKS client module."""
+
+ homepage = "https://github.com/Anorov/PySocks"
+ url = "https://pypi.io/packages/source/P/PySocks/PySocks-1.6.6.tar.gz"
+
+ version('1.6.6', '571f4c23982fa86bf0e7a441f1b6c881')
+ version('1.5.7', '68f4ad7a8d4fa725656ae3e9dd142d29')
diff --git a/var/spack/repos/builtin/packages/py-pytables/package.py b/var/spack/repos/builtin/packages/py-pytables/package.py
index 3d9bfb2c2f..5e782341d9 100644
--- a/var/spack/repos/builtin/packages/py-pytables/package.py
+++ b/var/spack/repos/builtin/packages/py-pytables/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-pytest-cov/package.py b/var/spack/repos/builtin/packages/py-pytest-cov/package.py
new file mode 100644
index 0000000000..3621b54d0d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-cov/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyPytestCov(PythonPackage):
+ """Pytest plugin for measuring coverage."""
+
+ homepage = "https://github.com/pytest-dev/pytest-cov"
+ url = "https://pypi.io/packages/source/p/pytest-cov/pytest-cov-2.3.1.tar.gz"
+
+ version('2.3.1', '8e7475454313a035d08f387ee6d725cb')
+
+ extends('python', ignore=r'bin/*')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pytest@2.6.0:', type=('build', 'run'))
+ depends_on('py-coverage@3.7.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pytest-flake8/package.py b/var/spack/repos/builtin/packages/py-pytest-flake8/package.py
new file mode 100644
index 0000000000..4b2ec5e014
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-flake8/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyPytestFlake8(PythonPackage):
+ """pytest plugin to check FLAKE8 requirements."""
+
+ homepage = "https://github.com/tholo/pytest-flake8"
+ url = "https://pypi.io/packages/source/p/pytest-flake8/pytest-flake8-0.8.1.tar.gz"
+
+ version('0.8.1', '39b64ebceb2849805975a2ff4ea7e947')
+
+ depends_on('py-setuptools', type='build')
+
+ # Install requires:
+ depends_on('py-flake8@3.0:', type=('build', 'run'))
+ depends_on('py-pytest@2.8:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pytest-httpbin/package.py b/var/spack/repos/builtin/packages/py-pytest-httpbin/package.py
new file mode 100644
index 0000000000..f27f121d8e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-httpbin/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPytestHttpbin(PythonPackage):
+ """Easily test your HTTP library against a local copy of httpbin"""
+
+ homepage = "https://github.com/kevin1024/pytest-httpbin"
+ url = "https://pypi.io/packages/source/p/pytest-httpbin/pytest-httpbin-0.2.3.tar.gz"
+
+ version('0.2.3', 'b8ebb8e2fbac1a445fb5d044f7fec556')
+
+ extends('python', ignore=r'bin/flask')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-flask', type=('build', 'run'))
+ depends_on('py-decorator', type=('build', 'run'))
+ depends_on('py-httpbin', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pytest-mock/package.py b/var/spack/repos/builtin/packages/py-pytest-mock/package.py
new file mode 100644
index 0000000000..968816f6f4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-mock/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyPytestMock(PythonPackage):
+ """Thin-wrapper around the mock package for easier use with py.test"""
+
+ homepage = "https://github.com/pytest-dev/pytest-mock"
+ url = "https://pypi.io/packages/source/p/pytest-mock/pytest-mock-1.2.zip"
+
+ version('1.2', 'a7fa820f7bc71698660945836ff93c73')
+
+ extends('python', ignore=r'bin/*')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pytest@2.7:', type=('build', 'run'))
+ depends_on('py-mock', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pytest-runner/package.py b/var/spack/repos/builtin/packages/py-pytest-runner/package.py
new file mode 100644
index 0000000000..771902afd9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-runner/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyPytestRunner(PythonPackage):
+ """Invoke py.test as distutils command with dependency resolution."""
+
+ homepage = "https://github.com/pytest-dev/pytest-runner"
+ url = "https://pypi.io/packages/source/p/pytest-runner/pytest-runner-2.11.1.tar.gz"
+
+ import_modules = ['ptr']
+
+ version('2.11.1', 'bdb73eb18eca2727944a2dcf963c5a81')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pytest-xdist/package.py b/var/spack/repos/builtin/packages/py-pytest-xdist/package.py
new file mode 100644
index 0000000000..968601ab29
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pytest-xdist/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyPytestXdist(PythonPackage):
+ """py.test xdist plugin for distributed testing and loop-on-failing mode"""
+
+ homepage = "https://github.com/pytest-dev/pytest-xdist"
+ url = "https://pypi.io/packages/source/p/pytest-xdist/pytest-xdist-1.16.0.tar.gz"
+
+ version('1.16.0', '68dabf856981ad93b14960b098b05bff')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-execnet@1.1:', type=('build', 'run'))
+ depends_on('py-pytest@2.7.0:', type=('build', 'run'))
+ depends_on('py-py@1.4.22:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pytest/package.py b/var/spack/repos/builtin/packages/py-pytest/package.py
index 4af49306c2..098a9de79c 100644
--- a/var/spack/repos/builtin/packages/py-pytest/package.py
+++ b/var/spack/repos/builtin/packages/py-pytest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,11 +28,24 @@ from spack import *
class PyPytest(PythonPackage):
"""pytest: simple powerful testing with Python."""
- homepage = "http://doc.pytest.org/en/latest/"
- url = "https://pypi.python.org/packages/source/p/pytest/pytest-3.0.2.tar.gz"
+ homepage = "http://pytest.org/"
+ url = "https://pypi.io/packages/source/p/pytest/pytest-3.0.7.tar.gz"
- version('3.0.2', '61dc36e65a6f6c11c53b1388e043a9f5',
- url="https://pypi.python.org/packages/2b/05/e20806c99afaff43331f5fd8770bb346145303882f98ef3275fa1dd66f6d/pytest-3.0.2.tar.gz")
+ import_modules = [
+ '_pytest', '_pytest.assertion', '_pytest._code',
+ '_pytest.vendored_packages', 'pytest'
+ ]
- depends_on('py-setuptools', type='build')
+ version('3.0.7', '89c60546507dc7eb6e9e40a6e9f720bd')
+ version('3.0.2', '61dc36e65a6f6c11c53b1388e043a9f5')
+
+ # Most Python packages only require setuptools as a build dependency.
+ # However, pytest requires setuptools during runtime as well.
+ depends_on('py-setuptools', type=('build', 'run'))
depends_on('py-py@1.4.29:', type=('build', 'run'))
+ depends_on('py-hypothesis@3.5.2:', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
+ # depends_on('py-mock', type='test')
+ # depends_on('py-requests', type='test')
diff --git a/var/spack/repos/builtin/packages/py-python-daemon/package.py b/var/spack/repos/builtin/packages/py-python-daemon/package.py
index 9ed085f031..ff47d32504 100644
--- a/var/spack/repos/builtin/packages/py-python-daemon/package.py
+++ b/var/spack/repos/builtin/packages/py-python-daemon/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,7 +38,7 @@ class PyPythonDaemon(PythonPackage):
to enter a daemon state.
"""
homepage = "https://pypi.python.org/pypi/python-daemon/"
- url = "https://pypi.python.org/packages/source/p/python-daemon/python-daemon-2.0.5.tar.gz"
+ url = "https://pypi.io/packages/source/p/python-daemon/python-daemon-2.0.5.tar.gz"
version('2.0.5', '73e7f49f525c51fa4a995aea4d80de41')
diff --git a/var/spack/repos/builtin/packages/py-python-gitlab/package.py b/var/spack/repos/builtin/packages/py-python-gitlab/package.py
new file mode 100644
index 0000000000..ff769b421e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-python-gitlab/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyPythonGitlab(PythonPackage):
+ """Python wrapper for the GitLab API"""
+
+ homepage = "https://github.com/gpocentek/python-gitlab"
+ url = "https://pypi.io/packages/source/p/python-gitlab/python-gitlab-0.19.tar.gz"
+
+ version('0.19', '6564d7204c2b7e65c54b3fa89ec91df6')
+ version('0.18', 'c31dae1d0bab3966cb830f2308a96308')
+ version('0.17', '8a69c602e07dd4731856531d79bb58eb')
+ version('0.16', 'e0421d930718021e7d796d74d2ad7194')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-requests@1.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pythonqwt/package.py b/var/spack/repos/builtin/packages/py-pythonqwt/package.py
new file mode 100644
index 0000000000..9f4c09b537
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pythonqwt/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPythonqwt(PythonPackage):
+ """Qt plotting widgets for Python"""
+
+ homepage = "https://github.com/PierreRaybaut/PythonQwt"
+ url = "https://pypi.io/packages/source/P/PythonQwt/PythonQwt-0.5.5.zip"
+
+ version('0.5.5', 'a60c7da9fbca667337d14aca094b6fda')
+
+ variant('docs', default=False, description="Build documentation.")
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.3:', type=('build', 'run'))
+ depends_on('py-sip', type=('build', 'run'))
+ depends_on('py-pyqt@4:', type=('build', 'run'))
+ depends_on('py-sphinx@1.1:', type=('build', 'run'), when='+docs')
diff --git a/var/spack/repos/builtin/packages/py-pytz/package.py b/var/spack/repos/builtin/packages/py-pytz/package.py
index 7a905f9f98..d946e767e9 100644
--- a/var/spack/repos/builtin/packages/py-pytz/package.py
+++ b/var/spack/repos/builtin/packages/py-pytz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,13 +28,17 @@ from spack import *
class PyPytz(PythonPackage):
"""World timezone definitions, modern and historical."""
- homepage = "https://pypi.python.org/pypi/pytz"
- url = "https://pypi.python.org/packages/source/p/pytz/pytz-2014.10.tar.gz"
+ homepage = "http://pythonhosted.org/pytz"
+ url = "https://pypi.io/packages/source/p/pytz/pytz-2016.10.tar.gz"
- version('2016.6.1', 'b6c28a3b968bc1d8badfb61b93874e03',
- url="https://pypi.python.org/packages/5d/8e/6635d8f3f9f48c03bb925fab543383089858271f9cfd1216b83247e8df94/pytz-2016.6.1.tar.gz")
- version('2014.10', 'eb1cb941a20c5b751352c52486aa1dd7')
- version('2015.4', '417a47b1c432d90333e42084a605d3d8')
- version('2016.3', 'abae92c3301b27bd8a9f56b14f52cb29')
+ import_modules = ['pytz']
+
+ version('2017.2', 'f89bde8a811c8a1a5bac17eaaa94383c',
+ url="https://pypi.io/packages/source/p/pytz/pytz-2017.2.zip")
+ version('2016.10', 'cc9f16ba436efabdcef3c4d32ae4919c')
+ version('2016.6.1', 'b6c28a3b968bc1d8badfb61b93874e03')
+ version('2014.10', 'eb1cb941a20c5b751352c52486aa1dd7')
+ version('2015.4', '417a47b1c432d90333e42084a605d3d8')
+ version('2016.3', 'abae92c3301b27bd8a9f56b14f52cb29')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-pywavelets/package.py b/var/spack/repos/builtin/packages/py-pywavelets/package.py
new file mode 100644
index 0000000000..c542a23c1c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-pywavelets/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 PyPywavelets(PythonPackage):
+ """PyWavelets is a free Open Source library for wavelet transforms
+ in Python"""
+
+ homepage = "https://github.com/PyWavelets"
+ url = "https://pypi.io/packages/source/P/PyWavelets/PyWavelets-0.5.2.tar.gz"
+
+ version('0.5.2', 'aedda732f064cf9395f03d37f1003d1a')
+
+ import_modules = ['pywt', 'pywt.data']
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-cython', type='build')
+ depends_on('py-numpy@1.9.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-pyyaml/package.py b/var/spack/repos/builtin/packages/py-pyyaml/package.py
index 94d8fdd0e6..05ac4d2ac5 100644
--- a/var/spack/repos/builtin/packages/py-pyyaml/package.py
+++ b/var/spack/repos/builtin/packages/py-pyyaml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-qtawesome/package.py b/var/spack/repos/builtin/packages/py-qtawesome/package.py
new file mode 100644
index 0000000000..b5c08a3c60
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-qtawesome/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyQtawesome(PythonPackage):
+ """FontAwesome icons in PyQt and PySide applications"""
+
+ homepage = "https://github.com/spyder-ide/qtawesome"
+ url = "https://pypi.io/packages/source/Q/QtAwesome/QtAwesome-0.4.1.tar.gz"
+
+ version('0.4.1', 'bf93df612a31f3b501d751fc994c1b05')
+ version('0.3.3', '830677aa6ca4e7014e228147475183d3')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-qtpy', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-qtconsole/package.py b/var/spack/repos/builtin/packages/py-qtconsole/package.py
new file mode 100644
index 0000000000..07acca339b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-qtconsole/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PyQtconsole(PythonPackage):
+ """Jupyter Qt console"""
+
+ homepage = "http://ipython.org"
+ url = "https://pypi.io/packages/source/q/qtconsole/qtconsole-4.2.1.tar.gz"
+
+ version('4.2.1', 'c08ebebc7a60629ebadf685361ca0798')
+
+ variant('docs', default=False, description='Build documentation')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-ipykernel@4.1:', type=('build', 'run'))
+ depends_on('py-jupyter-client@4.1:', type=('build', 'run'))
+ depends_on('py-jupyter-core', type=('build', 'run'))
+ depends_on('py-pygments', type=('build', 'run'))
+ depends_on('py-traitlets', type=('build', 'run'))
+ depends_on('py-sphinx@1.3:', type=('build', 'run'), when='+docs')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-mock', type='test', when='^python@2.7:2.8')
diff --git a/var/spack/repos/builtin/packages/py-qtpy/package.py b/var/spack/repos/builtin/packages/py-qtpy/package.py
new file mode 100644
index 0000000000..020894d0e7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-qtpy/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyQtpy(PythonPackage):
+ """QtPy: Abtraction layer for PyQt5/PyQt4/PySide"""
+
+ homepage = "https://github.com/spyder-ide/qtpy"
+ url = "https://pypi.io/packages/source/Q/QtPy/QtPy-1.2.1.tar.gz"
+
+ version('1.2.1', 'e2f783fb7f8e502815237bd8d30c6d11')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pyqt@4:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-quantities/package.py b/var/spack/repos/builtin/packages/py-quantities/package.py
new file mode 100644
index 0000000000..d75aced6f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-quantities/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PyQuantities(PythonPackage):
+ """Support for physical quantities with units, based on numpy"""
+
+ homepage = "http://python-quantities.readthedocs.org"
+ url = "https://pypi.io/packages/source/q/quantities/quantities-0.12.1.tar.gz"
+
+ version('0.12.1', '9c9ecda15e905cccfc420e5341199512')
+ version('0.11.1', 'f4c6287bfd2e93322b25a7c1311a0243',
+ url="https://pypi.io/packages/source/q/quantities/quantities-0.11.1.zip")
+
+ conflicts('py-numpy@1.13:', when='@:0.11.99')
+
+ depends_on('python@2.6.0:')
+ depends_on('py-numpy@1.4.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-radical-utils/package.py b/var/spack/repos/builtin/packages/py-radical-utils/package.py
new file mode 100644
index 0000000000..85a4832e3e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-radical-utils/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyRadicalUtils(PythonPackage):
+ """Shared code and tools for various RADICAL Projects"""
+
+ homepage = "http://radical.rutgers.edu"
+ url = "https://pypi.io/packages/source/r/radical.utils/radical.utils-0.45.tar.gz"
+
+ version('0.45', 'c0bec2a0951b0dc990366d82e78e65fe')
+ version('0.41.1', '923446539545dc157768026c957cecb2')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-colorama', type=('build', 'run'))
+ depends_on('py-netifaces', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-ranger/package.py b/var/spack/repos/builtin/packages/py-ranger/package.py
new file mode 100644
index 0000000000..19f20c6d33
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-ranger/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyRanger(PythonPackage):
+ """A VIM-inspired filemanager for the console"""
+
+ homepage = "http://ranger.nongnu.org/"
+ url = "https://github.com/ranger/ranger/archive/v1.7.2.tar.gz"
+
+ version('1.7.2', '27805c3ab7ec4b129e1b93249506d925')
+
+ depends_on('python@2.6:')
diff --git a/var/spack/repos/builtin/packages/py-readme-renderer/package.py b/var/spack/repos/builtin/packages/py-readme-renderer/package.py
index 2abe4bac74..20691a12ec 100644
--- a/var/spack/repos/builtin/packages/py-readme-renderer/package.py
+++ b/var/spack/repos/builtin/packages/py-readme-renderer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,11 +30,11 @@ class PyReadmeRenderer(PythonPackage):
for Warehouse."""
homepage = "https://github.com/pypa/readme_renderer"
- url = "https://pypi.python.org/packages/f2/6e/ef1bc3a24eb14e14574aba9dc1bd50bc9a5e7cc880e8ff9cadd385b4fb37/readme_renderer-16.0.tar.gz"
+ url = "https://pypi.io/packages/source/r/readme_renderer/readme_renderer-16.0.tar.gz"
version('16.0', '70321cea986956bcf2deef9981569f39')
- depends_on('python@2.6:2.7,3.2:3.3')
+ depends_on('python@2.6:2.8,3.2:3.3')
depends_on('py-setuptools', type='build')
depends_on('py-bleach', type=('build', 'run'))
depends_on('py-docutils@0.13.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-regex/package.py b/var/spack/repos/builtin/packages/py-regex/package.py
new file mode 100644
index 0000000000..14c40c50cc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-regex/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyRegex(PythonPackage):
+ """Alternative regular expression module, to replace re."""
+
+ homepage = "https://pypi.python.org/pypi/regex/"
+ url = "https://pypi.io/packages/source/r/regex/regex-2017.07.11.tar.gz"
+
+ version('2017.07.11', '95f81ebb5273c7ad9a0c4d1ac5a94eb4')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-requests/package.py b/var/spack/repos/builtin/packages/py-requests/package.py
new file mode 100644
index 0000000000..329c07758c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-requests/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 PyRequests(PythonPackage):
+ """Python HTTP for Humans."""
+
+ homepage = "http://python-requests.org"
+ url = "https://pypi.io/packages/source/r/requests/requests-2.14.2.tar.gz"
+
+ import_modules = [
+ 'requests', 'requests.packages', 'requests.packages.chardet',
+ 'requests.packages.urllib3', 'requests.packages.idna',
+ 'requests.packages.chardet.cli', 'requests.packages.urllib3.util',
+ 'requests.packages.urllib3.packages',
+ 'requests.packages.urllib3.contrib',
+ 'requests.packages.urllib3.packages.ssl_match_hostname',
+ 'requests.packages.urllib3.packages.backports',
+ 'requests.packages.urllib3.contrib._securetransport'
+ ]
+
+ version('2.14.2', '4c3c169ed67466088a2a6947784fe444')
+ version('2.13.0', '921ec6b48f2ddafc8bb6160957baf444')
+ version('2.11.1', 'ad5f9c47b5c5dfdb28363ad7546b0763')
+
+ depends_on('py-setuptools', type='build')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-pytest@2.8.0:', type='test')
+ # depends_on('py-pytest-cov', type='test')
+ # depends_on('py-pytest-httpbin@0.0.7', type='test')
+ # depends_on('py-pytest-mock', type='test')
diff --git a/var/spack/repos/builtin/packages/py-restview/package.py b/var/spack/repos/builtin/packages/py-restview/package.py
index 871016fdb1..bd63d64bf5 100644
--- a/var/spack/repos/builtin/packages/py-restview/package.py
+++ b/var/spack/repos/builtin/packages/py-restview/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,11 +29,12 @@ class PyRestview(PythonPackage):
"""A viewer for ReStructuredText documents that renders them on the fly."""
homepage = "https://mg.pov.lt/restview/"
- url = "https://pypi.python.org/packages/source/r/restview/restview-2.6.1.tar.gz"
+ url = "https://pypi.io/packages/source/r/restview/restview-2.6.1.tar.gz"
version('2.6.1', 'ac8b70e15b8f1732d1733d674813666b')
- depends_on('python@2.7.0:2.7.999,3.3:3.5')
+ depends_on('python@2.7:2.8,3.3:3.5')
+ depends_on('py-setuptools', type='build')
depends_on('py-docutils@0.13.1:', type=('build', 'run'))
depends_on('py-readme-renderer', type=('build', 'run'))
depends_on('py-pygments', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-rope/package.py b/var/spack/repos/builtin/packages/py-rope/package.py
new file mode 100644
index 0000000000..5f0d27db23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-rope/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyRope(PythonPackage):
+ """a python refactoring library."""
+
+ homepage = "https://github.com/python-rope/rope"
+ url = "https://pypi.io/packages/source/r/rope/rope-0.10.5.tar.gz"
+
+ version('0.10.5', '21882fd7c04c29d09f75995d8a088be7')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-rpy2/package.py b/var/spack/repos/builtin/packages/py-rpy2/package.py
index 284a41894a..c607360f0a 100644
--- a/var/spack/repos/builtin/packages/py-rpy2/package.py
+++ b/var/spack/repos/builtin/packages/py-rpy2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ class PyRpy2(PythonPackage):
"""
homepage = "https://pypi.python.org/pypi/rpy2"
- url = "https://pypi.python.org/packages/source/r/rpy2/rpy2-2.5.4.tar.gz"
+ url = "https://pypi.io/packages/source/r/rpy2/rpy2-2.5.4.tar.gz"
version('2.5.4', '115a20ac30883f096da2bdfcab55196d')
version('2.5.6', 'a36e758b633ce6aec6a5f450bfee980f')
diff --git a/var/spack/repos/builtin/packages/py-rsa/package.py b/var/spack/repos/builtin/packages/py-rsa/package.py
new file mode 100644
index 0000000000..6cde68a33f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-rsa/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyRsa(PythonPackage):
+ """Pure-Python RSA implementation"""
+
+ homepage = "https://stuvel.eu/rsa"
+ url = "https://pypi.io/packages/source/r/rsa/rsa-3.4.2.tar.gz"
+
+ import_modules = ['rsa']
+
+ version('3.4.2', 'b315f47882c24030ee6b5aad628cccdb')
+
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-pyasn1@0.1.3:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-rtree/package.py b/var/spack/repos/builtin/packages/py-rtree/package.py
index 55f98ad19e..70eb46575c 100644
--- a/var/spack/repos/builtin/packages/py-rtree/package.py
+++ b/var/spack/repos/builtin/packages/py-rtree/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,22 +28,9 @@ from spack import *
class PyRtree(PythonPackage):
"""Python interface to the RTREE.4 Library."""
homepage = "http://toblerity.org/rtree/"
- url = "https://github.com/Toblerity/rtree/tarball/0.8.2"
+ url = "https://pypi.io/packages/source/R/Rtree/Rtree-0.8.3.tar.gz"
- # Not an official release yet. But changes in here are required
- # to work with Spack. As it does with all packages, Spack
- # installs libspatialindex in a non-system location. Without the
- # changes in this fork, py-rtree requires an environment variables
- # to be set *at runtime*, in order to find libspatialindex. That
- # is not feasible within the Spack worldview.
- version('0.8.2.2', 'b1fe96a73153db49ea6ce45a063d82cb',
- url='https://github.com/citibeth/rtree/tarball/95a678cc7350857a1bb631bc41254efcd1fc0a0d')
-
- version('0.8.2.1', '394696ca849dd9f3a5ef24fb02a41ef4',
- url='https://github.com/citibeth/rtree/tarball/3a87d86f66a3955676b2507d3bf424ade938a22b')
-
- # Does not work with Spack
- # version('0.8.2', '593c7ac6babc397b8ba58f1636c1e0a0')
+ version('0.8.3', 'a27cb05a85eed0a3605c45ebccc432f8')
depends_on('py-setuptools', type='build')
depends_on('libspatialindex')
diff --git a/var/spack/repos/builtin/packages/py-saga-python/package.py b/var/spack/repos/builtin/packages/py-saga-python/package.py
new file mode 100644
index 0000000000..4eb83b1dc1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-saga-python/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PySagaPython(PythonPackage):
+ """A light-weight access layer for distributed computing infrastructure"""
+
+ homepage = "http://radical.rutgers.edu"
+ url = "https://pypi.io/packages/source/s/saga-python/saga-python-0.41.3.tar.gz"
+
+ version('0.41.3', '3f92e16a53635ffe529fca4bae3b705d')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-apache-libcloud', type=('build', 'run'))
+ depends_on('py-radical-utils', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-scientificpython/package.py b/var/spack/repos/builtin/packages/py-scientificpython/package.py
index f0fe2e4e6c..45fedc825b 100644
--- a/var/spack/repos/builtin/packages/py-scientificpython/package.py
+++ b/var/spack/repos/builtin/packages/py-scientificpython/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,4 +35,4 @@ class PyScientificpython(PythonPackage):
url = "https://sourcesup.renater.fr/frs/download.php/file/4411/ScientificPython-2.8.1.tar.gz"
version('2.8.1', '73ee0df19c7b58cdf2954261f0763c77')
- depends_on('py-numpy')
+ depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-scikit-image/package.py b/var/spack/repos/builtin/packages/py-scikit-image/package.py
index d05341f9eb..40cbf740fe 100644
--- a/var/spack/repos/builtin/packages/py-scikit-image/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-image/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class PyScikitImage(PythonPackage):
filtering, warping, color manipulation, object detection, etc."""
homepage = "http://scikit-image.org/"
- url = "https://pypi.python.org/packages/source/s/scikit-image/scikit-image-0.12.3.tar.gz"
+ url = "https://pypi.io/packages/source/s/scikit-image/scikit-image-0.12.3.tar.gz"
version('0.12.3', '04ea833383e0b6ad5f65da21292c25e1')
diff --git a/var/spack/repos/builtin/packages/py-scikit-learn/package.py b/var/spack/repos/builtin/packages/py-scikit-learn/package.py
index 7c7102ce41..81f5de2737 100644
--- a/var/spack/repos/builtin/packages/py-scikit-learn/package.py
+++ b/var/spack/repos/builtin/packages/py-scikit-learn/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,13 +27,16 @@ from spack import *
class PyScikitLearn(PythonPackage):
"""A set of python modules for machine learning and data mining."""
+
homepage = "https://pypi.python.org/pypi/scikit-learn"
- url = "https://pypi.python.org/packages/source/s/scikit-learn/scikit-learn-0.15.2.tar.gz"
+ url = "https://pypi.io/packages/source/s/scikit-learn/scikit-learn-0.18.1.tar.gz"
+ version('0.18.1', '6b0ff1eaa5010043895dd63d1e3c60c9')
version('0.15.2', 'd9822ad0238e17b382a3c756ea94fe0d')
version('0.16.1', '363ddda501e3b6b61726aa40b8dbdb7e')
version('0.17.1', 'a2f8b877e6d99b1ed737144f5a478dfc')
+ version('0.13.1', 'acba398e1d46274b8470f40d0926e6a4')
- depends_on('py-setuptools', type='build')
- depends_on('py-numpy', type=('build', 'run'))
- depends_on('py-scipy', type=('build', 'run'))
+ depends_on('python@2.6:2.8,3.3:')
+ depends_on('py-numpy@1.6.1:', type=('build', 'run'))
+ depends_on('py-scipy@0.9:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-scipy/package.py b/var/spack/repos/builtin/packages/py-scipy/package.py
index 85b6f631e1..3aced0bf4a 100644
--- a/var/spack/repos/builtin/packages/py-scipy/package.py
+++ b/var/spack/repos/builtin/packages/py-scipy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,21 +31,73 @@ class PyScipy(PythonPackage):
as routines for numerical integration and optimization."""
homepage = "http://www.scipy.org/"
- url = "https://pypi.python.org/packages/source/s/scipy/scipy-0.15.0.tar.gz"
+ url = "https://pypi.io/packages/source/s/scipy/scipy-0.19.1.tar.gz"
- version('0.18.1', '5fb5fb7ccb113ab3a039702b6c2f3327',
- url="https://pypi.python.org/packages/22/41/b1538a75309ae4913cdbbdc8d1cc54cae6d37981d2759532c1aa37a41121/scipy-0.18.1.tar.gz")
+ install_time_test_callbacks = ['install_test', 'import_module_test']
+
+ import_modules = [
+ 'scipy', 'scipy._build_utils', 'scipy._lib', 'scipy.cluster',
+ 'scipy.constants', 'scipy.fftpack', 'scipy.integrate',
+ 'scipy.interpolate', 'scipy.io', 'scipy.linalg', 'scipy.misc',
+ 'scipy.ndimage', 'scipy.odr', 'scipy.optimize', 'scipy.signal',
+ 'scipy.sparse', 'scipy.spatial', 'scipy.special', 'scipy.stats',
+ 'scipy.weave', 'scipy.io.arff', 'scipy.io.harwell_boeing',
+ 'scipy.io.matlab', 'scipy.optimize._lsq', 'scipy.sparse.csgraph',
+ 'scipy.sparse.linalg', 'scipy.sparse.linalg.dsolve',
+ 'scipy.sparse.linalg.eigen', 'scipy.sparse.linalg.isolve',
+ 'scipy.sparse.linalg.eigen.arpack', 'scipy.sparse.linalg.eigen.lobpcg',
+ 'scipy.special._precompute'
+ ]
+
+ # See https://github.com/spack/spack/issues/2737
+ version('0.19.1', '6b4d91b62f1926282b127194a06b72b3',
+ url="https://pypi.io/packages/source/s/scipy/scipy-0.19.1.tar.gz")
+ version('0.19.0', '91b8396231eec780222a57703d3ec550',
+ url="https://pypi.io/packages/source/s/scipy/scipy-0.19.0.zip")
+ version('0.18.1', '5fb5fb7ccb113ab3a039702b6c2f3327')
version('0.17.0', '5ff2971e1ce90e762c59d2cd84837224')
version('0.15.1', 'be56cd8e60591d6332aac792a5880110')
version('0.15.0', '639112f077f0aeb6d80718dc5019dc7a')
depends_on('python@2.6:2.8,3.2:')
- depends_on('py-nose', type='build')
- # Known not to work with 2.23, 2.25
- depends_on('binutils@2.26:', type='build')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy@1.7.1:+blas+lapack', type=('build', 'run'))
# NOTE: scipy picks up Blas/Lapack from numpy, see
# http://www.scipy.org/scipylib/building/linux.html#step-4-build-numpy-1-5-0
depends_on('blas')
depends_on('lapack')
+
+ # Tests require:
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
+
+ def build_args(self, spec, prefix):
+ args = []
+
+ # Build in parallel
+ # Known problems with Python 3
+ # https://github.com/scipy/scipy/issues/7112
+ if not spec.satisfies('^python@3:'):
+ args.extend(['-j', str(make_jobs)])
+
+ return args
+
+ def test(self):
+ # `setup.py test` is not supported. Use one of the following
+ # instead:
+ #
+ # - `python runtests.py` (to build and test)
+ # - `python runtests.py --no-build` (to test installed scipy)
+ # - `>>> scipy.test()` (run tests for installed scipy
+ # from within an interpreter)
+ pass
+
+ def install_test(self):
+ # Change directories due to the following error:
+ #
+ # ImportError: Error importing scipy: you should not try to import
+ # scipy from its source directory; please exit the scipy
+ # source tree, and relaunch your python interpreter from there.
+ with working_dir('..'):
+ python('-c', 'import scipy; scipy.test("full", verbose=2)')
diff --git a/var/spack/repos/builtin/packages/py-seaborn/package.py b/var/spack/repos/builtin/packages/py-seaborn/package.py
new file mode 100644
index 0000000000..d0bd755343
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-seaborn/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 PySeaborn(PythonPackage):
+ """Seaborn: statistical data visualization.
+
+ Seaborn is a library for making attractive and informative statistical
+ graphics in Python. It is built on top of matplotlib and tightly
+ integrated with the PyData stack, including support for numpy and pandas
+ data structures and statistical routines from scipy and statsmodels."""
+
+ homepage = "http://seaborn.pydata.org/"
+ url = "https://pypi.io/packages/source/s/seaborn/seaborn-0.7.1.tar.gz"
+
+ version('0.7.1', 'ef07e29e0f8a1f2726abe506c1a36e93')
+
+ depends_on('py-setuptools', type='build')
+
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-matplotlib', type=('build', 'run'))
+ depends_on('py-pandas', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-setuptools/package.py b/var/spack/repos/builtin/packages/py-setuptools/package.py
index d355800958..de7b47367b 100644
--- a/var/spack/repos/builtin/packages/py-setuptools/package.py
+++ b/var/spack/repos/builtin/packages/py-setuptools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,14 +30,30 @@ class PySetuptools(PythonPackage):
upgrading, installing, and uninstalling Python packages."""
homepage = "https://pypi.python.org/pypi/setuptools"
- url = "https://pypi.python.org/packages/source/s/setuptools/setuptools-11.3.tar.gz"
+ url = "https://pypi.io/packages/source/s/setuptools/setuptools-25.2.0.tar.gz"
- version('25.2.0', 'a0dbb65889c46214c691f6c516cf959c',
- url="https://pypi.python.org/packages/9f/32/81c324675725d78e7f6da777483a3453611a427db0145dfb878940469692/setuptools-25.2.0.tar.gz")
+ import_modules = ['pkg_resources', 'setuptools', 'setuptools.command']
+
+ version('35.0.2', 'c368b4970d3ad3eab5afe4ef4dbe2437',
+ url="https://pypi.io/packages/source/s/setuptools/setuptools-35.0.2.zip")
+ version('34.4.1', '5f9b07aeaafd29eac2548fc0b89a4934',
+ url="https://pypi.io/packages/source/s/setuptools/setuptools-34.4.1.zip")
+ version('34.2.0', '41b630da4ea6cfa5894d9eb3142922be',
+ url="https://pypi.io/packages/source/s/setuptools/setuptools-34.2.0.zip")
+ version('25.2.0', 'a0dbb65889c46214c691f6c516cf959c')
version('20.7.0', '5d12b39bf3e75e80fdce54e44b255615')
version('20.6.7', '45d6110f3ec14924e44c33411db64fe6')
- version('20.5', 'fadc1e1123ddbe31006e5e43e927362b')
- version('19.2', '78353b1f80375ca5e088f4b4627ffe03')
- version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06')
- version('16.0', '0ace0b96233516fc5f7c857d086aa3ad')
+ version('20.5', 'fadc1e1123ddbe31006e5e43e927362b')
+ version('19.2', '78353b1f80375ca5e088f4b4627ffe03')
+ version('18.1', 'f72e87f34fbf07f299f6cb46256a0b06')
+ version('16.0', '0ace0b96233516fc5f7c857d086aa3ad')
version('11.3.1', '01f69212e019a2420c1693fb43593930')
+
+ depends_on('python@2.6:2.8,3.3:')
+
+ # Previously, setuptools vendored all of its dependencies to allow
+ # easy bootstrapping. As of version 34.0.0, this is no longer done
+ # and the dependencies need to be installed externally.
+ depends_on('py-packaging@16.8:', when='@34.0.0:', type=('build', 'run'))
+ depends_on('py-six@1.6.0:', when='@34.0.0:', type=('build', 'run'))
+ depends_on('py-appdirs@1.4.0:', when='@34.0.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sh/package.py b/var/spack/repos/builtin/packages/py-sh/package.py
new file mode 100644
index 0000000000..8dc74c0740
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-sh/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PySh(PythonPackage):
+ """Python subprocess interface"""
+
+ homepage = "https://github.com/amoffat/sh"
+ url = "https://pypi.io/packages/source/s/sh/sh-1.12.9.tar.gz"
+
+ version('1.12.9', 'ddc128a8d943d25afa6e01af11e0063b')
+ version('1.11', '7af8df6c92d29ff927b6db0146bddec3')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-shiboken/package.py b/var/spack/repos/builtin/packages/py-shiboken/package.py
index 3ad51d5fc5..cf04385c62 100644
--- a/var/spack/repos/builtin/packages/py-shiboken/package.py
+++ b/var/spack/repos/builtin/packages/py-shiboken/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ import os
class PyShiboken(PythonPackage):
"""Shiboken generates bindings for C++ libraries using CPython."""
homepage = "https://shiboken.readthedocs.org/"
- url = "https://pypi.python.org/packages/source/S/Shiboken/Shiboken-1.2.2.tar.gz"
+ url = "https://pypi.io/packages/source/S/Shiboken/Shiboken-1.2.2.tar.gz"
version('1.2.2', '345cfebda221f525842e079a6141e555')
diff --git a/var/spack/repos/builtin/packages/py-simplegeneric/package.py b/var/spack/repos/builtin/packages/py-simplegeneric/package.py
index 3881f8bc88..a704436281 100644
--- a/var/spack/repos/builtin/packages/py-simplegeneric/package.py
+++ b/var/spack/repos/builtin/packages/py-simplegeneric/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-simplejson/package.py b/var/spack/repos/builtin/packages/py-simplejson/package.py
new file mode 100644
index 0000000000..6894d62044
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-simplejson/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PySimplejson(PythonPackage):
+ """Simplejson is a simple, fast, extensible JSON encoder/decoder for
+ Python"""
+
+ homepage = "https://github.com/simplejson/simplejson"
+ url = "https://pypi.io/packages/source/s/simplejson/simplejson-3.10.0.tar.gz"
+
+ version('3.10.0', '426a9631d22851a7a970b1a677368b15')
+ version('3.9.0', '01db2db1b96bd8e59bcab45bca12639b')
+ version('3.8.2', '53b1371bbf883b129a12d594a97e9a18')
+ version('3.8.1', 'b8441f1053edd9dc335ded8c7f98a974')
+ version('3.8.0', '72f3b93a6f9808df81535f79e79565a2')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-singledispatch/package.py b/var/spack/repos/builtin/packages/py-singledispatch/package.py
index 9125ecb5f8..6007fda635 100644
--- a/var/spack/repos/builtin/packages/py-singledispatch/package.py
+++ b/var/spack/repos/builtin/packages/py-singledispatch/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,8 +34,8 @@ class PySingledispatch(PythonPackage):
version('3.4.0.3', 'af2fc6a3d6cc5a02d0bf54d909785fcb')
depends_on('py-setuptools', type='build')
- depends_on('py-six')
+ depends_on('py-six', type=('build', 'run'))
# This dependency breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
- # depends_on('py-ordereddict', when="^python@:2.6.999", type=('build', 'run')) # noqa
+ # See https://github.com/spack/spack/issues/2793
+ # depends_on('py-ordereddict', when="^python@:2.6", type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sip/package.py b/var/spack/repos/builtin/packages/py-sip/package.py
index 9d97f08433..4c4a5af463 100644
--- a/var/spack/repos/builtin/packages/py-sip/package.py
+++ b/var/spack/repos/builtin/packages/py-sip/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-six/package.py b/var/spack/repos/builtin/packages/py-six/package.py
index 7d653fd102..2f0bda16c6 100644
--- a/var/spack/repos/builtin/packages/py-six/package.py
+++ b/var/spack/repos/builtin/packages/py-six/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,11 +29,18 @@ class PySix(PythonPackage):
"""Python 2 and 3 compatibility utilities."""
homepage = "https://pypi.python.org/pypi/six"
- url = "https://pypi.python.org/packages/source/s/six/six-1.9.0.tar.gz"
+ url = "https://pypi.io/packages/source/s/six/six-1.10.0.tar.gz"
+
+ import_modules = ['six']
version('1.10.0', '34eed507548117b2ab523ab14b2f8b55')
version('1.9.0', '476881ef4012262dfc8adc645ee786c4')
extends('python', ignore=r'bin/pytest')
- depends_on('py-setuptools', type='build')
+ # Newer versions of setuptools require six. Although setuptools is an
+ # optional dependency of six, if it is not found, setup.py will fallback
+ # on distutils.core instead. Don't add a setuptools dependency or we
+ # won't be able to bootstrap setuptools.
+
+ # depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-slepc4py/package.py b/var/spack/repos/builtin/packages/py-slepc4py/package.py
new file mode 100644
index 0000000000..f9603abd9b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-slepc4py/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PySlepc4py(PythonPackage):
+ """This package provides Python bindings for the SLEPc package.
+ """
+ homepage = "https://pypi.python.org/pypi/slepc4py"
+ url = "https://pypi.io/packages/source/s/slepc4py/slepc4py-3.7.0.tar.gz"
+
+ version('3.7.0', 'c4775e88b0825c7313629c01de60ecb2')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-petsc4py', type=('build', 'run'))
+ depends_on('slepc')
diff --git a/var/spack/repos/builtin/packages/py-sncosmo/package.py b/var/spack/repos/builtin/packages/py-sncosmo/package.py
index f9d2546da3..87c1f44fad 100644
--- a/var/spack/repos/builtin/packages/py-sncosmo/package.py
+++ b/var/spack/repos/builtin/packages/py-sncosmo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,13 +30,14 @@ class PySncosmo(PythonPackage):
analysis."""
homepage = "http://sncosmo.readthedocs.io/"
- url = "https://pypi.python.org/packages/source/s/sncosmo/sncosmo-1.2.0.tar.gz"
+ url = "https://pypi.io/packages/source/s/sncosmo/sncosmo-1.2.0.tar.gz"
version('1.2.0', '028e6d1dc84ab1c17d2f3b6378b2cb1e')
# Required dependencies
# py-sncosmo binaries are duplicates of those from py-astropy
extends('python', ignore=r'bin/.*')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-scipy', type=('build', 'run'))
depends_on('py-astropy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-snowballstemmer/package.py b/var/spack/repos/builtin/packages/py-snowballstemmer/package.py
index cfeeeb26ce..5122d4600a 100644
--- a/var/spack/repos/builtin/packages/py-snowballstemmer/package.py
+++ b/var/spack/repos/builtin/packages/py-snowballstemmer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,9 @@ class PySnowballstemmer(PythonPackage):
"""This package provides 16 stemmer algorithms (15 + Poerter
English stemmer) generated from Snowball algorithms."""
- homepage = "https://pypi.python.org/pypi/snowballstemmer"
- url = "https://pypi.python.org/packages/source/s/snowballstemmer/snowballstemmer-1.2.1.tar.gz"
+ homepage = "https://github.com/shibukawa/snowball_py"
+ url = "https://pypi.io/packages/source/s/snowballstemmer/snowballstemmer-1.2.1.tar.gz"
+
+ import_modules = ['snowballstemmer']
version('1.2.1', '643b019667a708a922172e33a99bf2fa')
diff --git a/var/spack/repos/builtin/packages/py-spectra/package.py b/var/spack/repos/builtin/packages/py-spectra/package.py
new file mode 100644
index 0000000000..9584b659f8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-spectra/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PySpectra(PythonPackage):
+ """Color scales and color conversion made easy for Python."""
+
+ homepage = "https://pypi.python.org/pypi/spectra/0.0.8"
+ url = "https://pypi.io/packages/source/s/spectra/spectra-0.0.8.tar.gz"
+
+ version('0.0.8', '83020b29e584389f24c7720f38f0136c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-colormath', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-spefile/package.py b/var/spack/repos/builtin/packages/py-spefile/package.py
new file mode 100644
index 0000000000..dbb8937dc8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-spefile/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 PySpefile(PythonPackage):
+ """Reader for SPE files part of pyspec a set of python routines for data
+ analysis of x-ray scattering experiments"""
+
+ homepage = "https://github.com/conda-forge/spefile-feedstock"
+ url = "https://github.com/conda-forge/spefile-feedstock.git"
+
+ import_modules = ['spefile']
+
+ version('1.6', git='https://github.com/conda-forge/spefile-feedstock.git',
+ commit='24394e066da8dee5e7608f556ca0203c9db217f9')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+
+ build_directory = 'recipe/src'
diff --git a/var/spack/repos/builtin/packages/py-spglib/package.py b/var/spack/repos/builtin/packages/py-spglib/package.py
new file mode 100644
index 0000000000..604aa0faf2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-spglib/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PySpglib(PythonPackage):
+ """Python bindings for C library for finding and handling
+ crystal symmetries."""
+
+ homepage = "http://atztogo.github.io/spglib/"
+ url = "https://pypi.io/packages/source/s/spglib/spglib-1.9.9.18.tar.gz"
+
+ version('1.9.9.18', 'b8b46268d3aeada7b9b201b11882548f')
+
+ # Most Python packages only require setuptools as a build dependency.
+ # However, spglib requires setuptools during runtime as well.
+ depends_on('py-setuptools@18.0:', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sphinx-bootstrap-theme/package.py b/var/spack/repos/builtin/packages/py-sphinx-bootstrap-theme/package.py
index 38f127dfc4..faaa9811df 100644
--- a/var/spack/repos/builtin/packages/py-sphinx-bootstrap-theme/package.py
+++ b/var/spack/repos/builtin/packages/py-sphinx-bootstrap-theme/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class PySphinxBootstrapTheme(Package):
+class PySphinxBootstrapTheme(PythonPackage):
"""Sphinx Bootstrap Theme."""
homepage = "https://pypi.python.org/pypi/sphinx-bootstrap-theme/"
@@ -33,9 +33,4 @@ class PySphinxBootstrapTheme(Package):
version('0.4.13', '32e513a9c8ffbb8c1e4b036e8f74fb51')
- extends('python')
-
depends_on('py-setuptools', type='build')
-
- def install(self, spec, prefix):
- setup_py('install', '--prefix={0}'.format(prefix))
diff --git a/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py b/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
index 4b9141d80c..bd922fadf7 100644
--- a/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
+++ b/var/spack/repos/builtin/packages/py-sphinx-rtd-theme/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,10 +28,12 @@ from spack import *
class PySphinxRtdTheme(PythonPackage):
"""ReadTheDocs.org theme for Sphinx."""
- homepage = "https://pypi.python.org/pypi/sphinx_rtd_theme"
- url = "https://pypi.python.org/packages/source/s/sphinx_rtd_theme/sphinx_rtd_theme-0.1.10a0.tar.gz"
+ homepage = "https://github.com/rtfd/sphinx_rtd_theme/"
+ url = "https://pypi.io/packages/source/s/sphinx_rtd_theme/sphinx_rtd_theme-0.1.10a0.tar.gz"
- version('0.1.10a0', '83bd95cae55aa8b773a8cc3a41094282',
- url="https://pypi.python.org/packages/da/6b/1b75f13d8aa3333f19c6cdf1f0bc9f52ea739cae464fbee050307c121857/sphinx_rtd_theme-0.1.10a0.tar.gz")
+ import_modules = ['sphinx_rtd_theme']
+
+ version('0.2.5b1', '0923473a43bd2527f32151f195f2a521')
+ version('0.1.10a0', '83bd95cae55aa8b773a8cc3a41094282')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-sphinx/package.py b/var/spack/repos/builtin/packages/py-sphinx/package.py
index b71f2ed8c5..d99ee12f0e 100644
--- a/var/spack/repos/builtin/packages/py-sphinx/package.py
+++ b/var/spack/repos/builtin/packages/py-sphinx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,24 +28,58 @@ from spack import *
class PySphinx(PythonPackage):
"""Sphinx Documentation Generator."""
homepage = "http://sphinx-doc.org"
- url = "https://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.3.1.tar.gz"
+ url = "https://pypi.io/packages/source/S/Sphinx/Sphinx-1.6.1.tar.gz"
- version('1.4.5', '5c2cd2dac45dfa6123d067e32a89e89a',
- url='https://pypi.python.org/packages/8b/78/eeea2b837f911cdc301f5f05163f9729a2381cadd03ccf35b25afe816c90/Sphinx-1.4.5.tar.gz')
+ import_modules = [
+ 'sphinx', 'sphinx.testing', 'sphinx.ext', 'sphinx.pycode',
+ 'sphinx.search', 'sphinx.transforms', 'sphinx.builders',
+ 'sphinx.directives', 'sphinx.util', 'sphinx.environment',
+ 'sphinx.writers', 'sphinx.domains', 'sphinx.locale',
+ 'sphinx.ext.napoleon', 'sphinx.ext.autosummary', 'sphinx.pycode.pgen2',
+ 'sphinx.transforms.post_transforms', 'sphinx.util.stemmer',
+ 'sphinx.environment.collectors', 'sphinx.environment.adapters'
+ ]
+
+ version('1.6.3', 'c5ad61f4e0974375ca2c2b58ef8d5411')
+ version('1.6.1', '26cb1cdca7aa4afc8c925d926b6268e7')
+ version('1.5.5', 'f9581b3556df9722143c47290273bcf8')
+ version('1.4.5', '5c2cd2dac45dfa6123d067e32a89e89a')
version('1.3.1', '8786a194acf9673464c5455b11fd4332')
extends('python', ignore='bin/(pybabel|pygmentize)')
+ # Sphinx requires at least Python 2.7 or 3.4 to run
+ depends_on('python@2.7:2.8,3.4:', type=('build', 'run'))
+
# Most Python packages only require py-setuptools as a build dependency.
# However, py-sphinx requires py-setuptools during runtime as well.
- depends_on('py-setuptools', type=('build', 'run'))
-
- depends_on('py-six@1.4:', type=('build', 'run'))
- depends_on('py-jinja2@2.3:', type=('build', 'run'))
- depends_on('py-pygments@2.0:', type=('build', 'run'))
- depends_on('py-docutils@0.11:', type=('build', 'run'))
- depends_on('py-snowballstemmer@1.1:', type=('build', 'run'))
- depends_on('py-babel@1.3:', type=('build', 'run')) # not 2.0
- depends_on('py-alabaster@0.7:', type=('build', 'run'))
- depends_on('py-imagesize', when='@1.4:', type=('build', 'run'))
- depends_on('py-sphinx-rtd-theme@0.1:', type=('build', 'run')) # optional as of 1.4
+ depends_on('py-setuptools', type=('build', 'run'))
+
+ depends_on('py-six@1.5:', type=('build', 'run'))
+ depends_on('py-jinja2@2.3:', type=('build', 'run'))
+ depends_on('py-pygments@2.0:', type=('build', 'run'))
+ depends_on('py-docutils@0.11:', type=('build', 'run'))
+ depends_on('py-snowballstemmer@1.1:', type=('build', 'run'))
+ depends_on('py-babel@1.3:', type=('build', 'run')) # not 2.0
+ depends_on('py-alabaster@0.7.0:0.7.999', type=('build', 'run'))
+ depends_on('py-imagesize', when='@1.4:', type=('build', 'run'))
+ depends_on('py-requests@2.0.0:', type=('build', 'run'))
+ depends_on('py-sphinx-rtd-theme@0.1:', type=('build', 'run')) # optional as of 1.4
+
+ # Sphinx v1.6+ no longer includes websupport by default:
+ # http://www.sphinx-doc.org/en/stable/changes.html
+ depends_on('py-sphinxcontrib-websupport', when='@1.6:',
+ type=('build', 'run'))
+ # TODO: incorporate the proper dependencies when concretizer is capable
+ # Build dep for 1.6.1 all python (bug), see:
+ # https://github.com/sphinx-doc/sphinx/pull/3789
+ # depends_on('py-typing', when='@1.6.1', type=('build', 'run'))
+ # depends_on('py-typing', when='@1.6.2:^python@2.7:3.4',
+ # type=('build', 'run'))
+ depends_on('py-typing', when='@1.6:', type=('build', 'run'))
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-pytest', type='test')
+ # depends_on('py-mock', type='test')
+ # depends_on('py-simplejson', type='test')
+ # depends_on('py-html5lib', type='test')
diff --git a/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py b/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py
new file mode 100644
index 0000000000..e643a8d933
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-sphinxcontrib-bibtex/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 PySphinxcontribBibtex(PythonPackage):
+ """A Sphinx extension for BibTeX style citations."""
+
+ homepage = "https://pypi.python.org/pypi/sphinxcontrib-bibtex"
+ url = "https://pypi.io/packages/source/s/sphinxcontrib-bibtex/sphinxcontrib-bibtex-0.3.5.tar.gz"
+
+ import_modules = ['sphinxcontrib', 'sphinxcontrib.bibtex']
+
+ version('0.3.5', 'd3c86836e2f6227b55a5ca9108590b1c')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-latexcodec@0.3.0:', type=('build', 'run'))
+ depends_on('py-pybtex@0.17:', type=('build', 'run'))
+ depends_on('py-pybtex-docutils@0.2.0:', type=('build', 'run'))
+ depends_on('py-six@1.4.1:', type=('build', 'run'))
+ depends_on('py-sphinx@1.0:', type=('build', 'run'))
+ depends_on('py-oset@0.1.3:', type=('build', 'run'))
+ depends_on('py-ordereddict@1.1:', when='^python@:2.6', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sphinxcontrib-programoutput/package.py b/var/spack/repos/builtin/packages/py-sphinxcontrib-programoutput/package.py
new file mode 100644
index 0000000000..d9dbafb3e3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-sphinxcontrib-programoutput/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PySphinxcontribProgramoutput(PythonPackage):
+ """A Sphinx extension to literally insert the output of arbitrary commands
+ into documents, helping you to keep your command examples up to date."""
+
+ homepage = "https://sphinxcontrib-programoutput.readthedocs.org/"
+ url = "https://pypi.io/packages/source/s/sphinxcontrib-programoutput/sphinxcontrib-programoutput-0.10.tar.gz"
+
+ # FIXME: These import tests don't work for some reason
+ # import_modules = ['sphinxcontrib', 'sphinxcontrib.programoutput']
+
+ version('0.10', '8e511e476c67696c7ae2c08b15644eb4')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-sphinx@1.3.5:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sphinxcontrib-websupport/package.py b/var/spack/repos/builtin/packages/py-sphinxcontrib-websupport/package.py
new file mode 100644
index 0000000000..b75f894c1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-sphinxcontrib-websupport/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 PySphinxcontribWebsupport(PythonPackage):
+ """sphinxcontrib-webuspport provides a Python API to easily integrate
+ Sphinx documentation into your Web application."""
+
+ homepage = "http://sphinx-doc.org/"
+ url = "https://pypi.io/packages/source/s/sphinxcontrib-websupport/sphinxcontrib-websupport-1.0.1.tar.gz"
+
+ # FIXME: These import tests don't work for some reason
+ # import_modules = [
+ # 'sphinxcontrib', 'sphinxcontrib.websupport',
+ # 'sphinxcontrib.websupport.storage', 'sphinxcontrib.websupport.search'
+ # ]
+
+ version('1.0.1', '84df26463b1ba65b07f926dbe2055665')
+
+ depends_on('py-setuptools', type='build')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-pytest', type='test')
+ # depends_on('py-mock', type='test')
diff --git a/var/spack/repos/builtin/packages/py-spyder/package.py b/var/spack/repos/builtin/packages/py-spyder/package.py
new file mode 100644
index 0000000000..58bc3f9fce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-spyder/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 PySpyder(PythonPackage):
+ """Scientific PYthon Development EnviRonment"""
+
+ homepage = "https://github.com/spyder-ide/spyder"
+ url = "https://pypi.io/packages/source/s/spyder/spyder-3.1.3.tar.gz"
+
+ version('3.1.3', '4b9b7c8c3e6dc00001e6e98473473c36')
+ version('2.3.9', 'dd01e07a77123c128ff79ba57b97c1d7')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-rope@0.9.4:', type=('build', 'run'), when='^python@:3')
+ # depends_on('py-rope_py3k', type=('build', 'run'), when='^python@3:')
+ depends_on('py-jedi@0.9.0', type=('build', 'run'))
+ # otherwise collision with py-flake8
+ depends_on('py-pyflakes@1.2.3', type=('build', 'run'))
+ depends_on('py-pygments@2.0:', type=('build', 'run'))
+ depends_on('py-qtconsole@4.2.0:', type=('build', 'run'))
+ depends_on('py-nbconvert', type=('build', 'run'))
+ depends_on('py-sphinx', type=('build', 'run'))
+ depends_on('py-pycodestyle', type=('build', 'run'))
+ depends_on('py-pylint', type=('build', 'run'))
+ depends_on('py-psutil', type=('build', 'run'))
+ depends_on('py-qtawesome@0.4.1:', type=('build', 'run'))
+ depends_on('py-qtpy@1.1.0:', type=('build', 'run'))
+ depends_on('py-zmq', type=('build', 'run'))
+ depends_on('py-chardet@2:', type=('build', 'run'))
+ depends_on('py-pickleshare', type=('build', 'run'))
+ depends_on('py-numpydoc', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-spykeutils/package.py b/var/spack/repos/builtin/packages/py-spykeutils/package.py
new file mode 100644
index 0000000000..cdccc3be67
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-spykeutils/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PySpykeutils(PythonPackage):
+ """Utilities for analyzing electrophysiological data"""
+
+ homepage = "https://github.com/rproepp/spykeutils"
+ url = "https://pypi.io/packages/source/s/spykeutils/spykeutils-0.4.3.tar.gz"
+
+ version('0.4.3', 'cefe4c48ebfdb9bac7a6cbfaf49dd485')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-quantities', type=('build', 'run'))
+ depends_on('py-neo@0.2.1:0.3.99', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-sqlalchemy/package.py b/var/spack/repos/builtin/packages/py-sqlalchemy/package.py
index f8221058a0..8f60538c77 100644
--- a/var/spack/repos/builtin/packages/py-sqlalchemy/package.py
+++ b/var/spack/repos/builtin/packages/py-sqlalchemy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,6 +29,6 @@ class PySqlalchemy(PythonPackage):
"""The Python SQL Toolkit and Object Relational Mapper"""
homepage = 'http://www.sqlalchemy.org/'
- url = "https://pypi.python.org/packages/source/S/SQLAlchemy/SQLAlchemy-1.0.12.tar.gz"
+ url = "https://pypi.io/packages/source/S/SQLAlchemy/SQLAlchemy-1.0.12.tar.gz"
version('1.0.12', '6d19ef29883bbebdcac6613cf391cac4')
diff --git a/var/spack/repos/builtin/packages/py-statsmodels/package.py b/var/spack/repos/builtin/packages/py-statsmodels/package.py
new file mode 100644
index 0000000000..641dc197af
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-statsmodels/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 PyStatsmodels(PythonPackage):
+ """Statistical computations and models for use with SciPy"""
+
+ homepage = "http://www.statsmodels.org"
+ url = "https://pypi.io/packages/source/s/statsmodels/statsmodels-0.8.0.tar.gz"
+
+ version('0.8.0', 'b3e5911cc9b00b71228d5d39a880bba0')
+
+ variant('plotting', default=False, description='With matplotlib')
+
+ # according to http://www.statsmodels.org/dev/install.html earlier versions
+ # might work.
+ depends_on('py-setuptools@0.6c5:', type='build')
+ depends_on('py-numpy@1.7.0:', type=('build', 'run'))
+ depends_on('py-scipy@0.11:', type=('build', 'run'))
+ depends_on('py-pandas@0.12:', type=('build', 'run'))
+ depends_on('py-patsy@0.2.1:', type=('build', 'run'))
+ depends_on('py-cython@0.24:', type=('build', 'run'))
+ depends_on('py-matplotlib@1.3:', type='run', when='+plotting')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose', type='test')
diff --git a/var/spack/repos/builtin/packages/py-storm/package.py b/var/spack/repos/builtin/packages/py-storm/package.py
index a6c2900414..8552413694 100644
--- a/var/spack/repos/builtin/packages/py-storm/package.py
+++ b/var/spack/repos/builtin/packages/py-storm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-subprocess32/package.py b/var/spack/repos/builtin/packages/py-subprocess32/package.py
new file mode 100644
index 0000000000..66c6e3b86d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-subprocess32/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/spack/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 PySubprocess32(PythonPackage):
+ """A backport of the subprocess module from Python 3.2/3.3 for 2.x."""
+
+ homepage = "https://pypi.python.org/pypi/subprocess32"
+ url = "https://pypi.io/packages/source/s/subprocess32/subprocess32-3.2.7.tar.gz"
+
+ version('3.2.7', '824c801e479d3e916879aae3e9c15e16')
diff --git a/var/spack/repos/builtin/packages/py-symengine/package.py b/var/spack/repos/builtin/packages/py-symengine/package.py
index 0817d394f2..6de1c159c3 100644
--- a/var/spack/repos/builtin/packages/py-symengine/package.py
+++ b/var/spack/repos/builtin/packages/py-symengine/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,7 @@ class PySymengine(PythonPackage):
# Build dependencies
depends_on('python@2.7:2.8,3.3:')
depends_on('py-setuptools', type='build')
- depends_on('py-cython@0.19.1:')
+ depends_on('py-cython@0.19.1:', type='build')
depends_on('cmake@2.8.7:', type='build')
depends_on('symengine@0.2.0:')
diff --git a/var/spack/repos/builtin/packages/py-symfit/package.py b/var/spack/repos/builtin/packages/py-symfit/package.py
new file mode 100644
index 0000000000..6ecf2ebee6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-symfit/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 PySymfit(PythonPackage):
+ """Symbolic Fitting; fitting as it should be."""
+
+ homepage = "http://symfit.readthedocs.org"
+ url = "https://pypi.io/packages/source/s/symfit/symfit-0.3.5.tar.gz"
+
+ version('0.3.5', '7f62552ffeba4b4d203c01ff52fe15d5')
+
+ depends_on('py-setuptools@17.1:', type='build')
+ depends_on('py-pbr@1.9:', type='build')
+ depends_on('py-numpy', type='run')
+ depends_on('py-scipy', type='run')
+ depends_on('py-sympy', type='run')
+ depends_on('py-funcsigs', type='run', when='^python@:2.8')
diff --git a/var/spack/repos/builtin/packages/py-sympy/package.py b/var/spack/repos/builtin/packages/py-sympy/package.py
index 58c4167e23..2a6758bbf6 100644
--- a/var/spack/repos/builtin/packages/py-sympy/package.py
+++ b/var/spack/repos/builtin/packages/py-sympy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,9 +28,9 @@ from spack import *
class PySympy(PythonPackage):
"""SymPy is a Python library for symbolic mathematics."""
homepage = "https://pypi.python.org/pypi/sympy"
- url = "https://pypi.python.org/packages/source/s/sympy/sympy-0.7.6.tar.gz"
+ url = "https://pypi.io/packages/source/s/sympy/sympy-0.7.6.tar.gz"
version('0.7.6', '3d04753974306d8a13830008e17babca')
version('1.0', '43e797de799f00f9e8fd2307dba9fab1')
- depends_on('py-mpmath', when='@1.0:')
+ depends_on('py-mpmath', when='@1.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tabulate/package.py b/var/spack/repos/builtin/packages/py-tabulate/package.py
new file mode 100644
index 0000000000..7083d69506
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tabulate/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyTabulate(PythonPackage):
+ """Pretty-print tabular data"""
+
+ homepage = "https://bitbucket.org/astanin/python-tabulate"
+ url = "https://pypi.io/packages/source/t/tabulate/tabulate-0.7.7.tar.gz"
+
+ version('0.7.7', '39a21aaa9c10be0749c545be34552559')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-tappy/package.py b/var/spack/repos/builtin/packages/py-tappy/package.py
index 22bc15392f..3600e56fc8 100644
--- a/var/spack/repos/builtin/packages/py-tappy/package.py
+++ b/var/spack/repos/builtin/packages/py-tappy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,13 +29,13 @@ class PyTappy(PythonPackage):
"""Python TAP interface module for unit tests"""
homepage = "https://github.com/mblayman/tappy"
# base https://pypi.python.org/pypi/cffi
- url = "https://pypi.python.org/packages/source/t/tap.py/tap.py-1.6.tar.gz"
+ url = "https://pypi.io/packages/source/t/tap.py/tap.py-1.6.tar.gz"
version('1.6', 'c8bdb93ad66e05f939905172a301bedf')
extends('python', ignore='bin/nosetests|bin/pygmentize')
- depends_on('python@2.6:2.7,3.2:3.4')
+ depends_on('python@2.6:2.8,3.2:3.4')
depends_on('py-nose', type=('build', 'run'))
depends_on('py-pygments', type=('build', 'run'))
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-terminado/package.py b/var/spack/repos/builtin/packages/py-terminado/package.py
index 4cebe14fca..0cf4e582f2 100644
--- a/var/spack/repos/builtin/packages/py-terminado/package.py
+++ b/var/spack/repos/builtin/packages/py-terminado/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,6 +33,5 @@ class PyTerminado(PythonPackage):
version('0.6', '5b6c65da27fe1ed07a9f80f0588cdaba')
- depends_on('py-setuptools', type='build')
depends_on('py-tornado@4:', type=('build', 'run'))
depends_on('py-ptyprocess', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-theano/package.py b/var/spack/repos/builtin/packages/py-theano/package.py
new file mode 100644
index 0000000000..4fe8920dd5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-theano/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 PyTheano(PythonPackage):
+ """Optimizing compiler for evaluating mathematical expressions on CPUs
+ and GPUs."""
+
+ homepage = "http://deeplearning.net/software/theano/"
+ url = "https://pypi.io/packages/source/T/Theano/Theano-0.8.2.tar.gz"
+
+ version('0.8.2', 'f2d0dfe7df141115201077cd933b2c52')
+ version('master', git='https://github.com/Theano/Theano.git', branch='master')
+
+ variant('gpu', default=False,
+ description='Builds with support for GPUs via CUDA and cuDNN')
+
+ depends_on('python@2.6:2.8,3.3:')
+
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-scipy@0.11:', type=('build', 'run'))
+ depends_on('py-numpy@1.7.1:', type=('build', 'run'))
+ depends_on('py-six@1.9.0:', type=('build', 'run'))
+
+ depends_on('blas')
+
+ depends_on('cuda', when='+gpu')
+ depends_on('libgpuarray', when='+gpu')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('py-nose@1.3.0:', type='test')
+ # depends_on('py-nose-parameterized@0.5.0:', type='test')
diff --git a/var/spack/repos/builtin/packages/py-tifffile/package.py b/var/spack/repos/builtin/packages/py-tifffile/package.py
new file mode 100644
index 0000000000..b0dfb7ed1d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tifffile/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 PyTifffile(PythonPackage):
+ """Read and write image data from and to TIFF files."""
+
+ homepage = "https://github.com/blink1073/tifffile"
+ url = "https://pypi.io/packages/source/t/tifffile/tifffile-0.12.1.tar.gz"
+
+ import_modules = ['tifffile']
+
+ version('0.12.1', '8a8afa74dd0df7915ac376a6cd7eeffc')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy@1.8.2:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tomopy/package.py b/var/spack/repos/builtin/packages/py-tomopy/package.py
new file mode 100644
index 0000000000..acba1ddcac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tomopy/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class PyTomopy(PythonPackage):
+ """TomoPy is an open-source Python package for tomographic data
+ processing and image reconstruction."""
+
+ homepage = "http://tomopy.readthedocs.io/en/latest/index.html"
+ url = "https://github.com/tomopy/tomopy/archive/1.0.0.tar.gz"
+
+ import_modules = [
+ 'tomopy', 'doc', 'tomopy.util', 'tomopy.sim', 'tomopy.recon',
+ 'tomopy.prep', 'tomopy.misc', 'tomopy.io', 'doc.demo'
+ ]
+
+ version('1.0.0', '986ac2c85a4af9ada0403b4c746d2cd4')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-numpy', type=('build', 'run'))
+ depends_on('py-h5py', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-six', type=('build', 'run'))
+ depends_on('py-scikit-image', type=('build', 'run'))
+ depends_on('py-pywavelets', type=('build', 'run'))
+ depends_on('py-pyfftw', type=('build', 'run'))
+ depends_on('py-dxchange', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tornado/package.py b/var/spack/repos/builtin/packages/py-tornado/package.py
index eb9c660947..ce1c88a2bb 100644
--- a/var/spack/repos/builtin/packages/py-tornado/package.py
+++ b/var/spack/repos/builtin/packages/py-tornado/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,7 @@ class PyTornado(PythonPackage):
# requirements from setup.py
# These dependencies breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
+ # See https://github.com/spack/spack/issues/2793
# depends_on('py-backports-ssl-match-hostname', when='^python@:2.7.8', type=('build', 'run')) # noqa
# depends_on('py-singledispatch', when='^python@:3.3', type=('build', 'run')) # noqa
# depends_on('py-certifi', when='^python@:3.3', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tqdm/package.py b/var/spack/repos/builtin/packages/py-tqdm/package.py
new file mode 100644
index 0000000000..1d1b2486c3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tqdm/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 PyTqdm(PythonPackage):
+ """A Fast, Extensible Progress Meter"""
+
+ homepage = "https://github.com/tqdm/tqdm"
+ url = "https://pypi.io/packages/source/t/tqdm/tqdm-4.8.4.tar.gz"
+
+ version('4.8.4', 'b30a0aa20641d239296eab1c48a06b4e')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-traitlets/package.py b/var/spack/repos/builtin/packages/py-traitlets/package.py
index debd1dca43..db90d28a66 100644
--- a/var/spack/repos/builtin/packages/py-traitlets/package.py
+++ b/var/spack/repos/builtin/packages/py-traitlets/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -40,11 +40,10 @@ class PyTraitlets(PythonPackage):
version('4.0.0', 'b5b95ea5941fd9619b4704dfd8201568')
version('4.0', '14544e25ccf8e920ed1cbf833852481f')
- depends_on('py-setuptools', type='build')
depends_on('py-decorator', type=('build', 'run'))
depends_on('py-ipython-genutils', type=('build', 'run'))
# This dependency breaks concretization
- # See https://github.com/LLNL/spack/issues/2793
+ # See https://github.com/spack/spack/issues/2793
# depends_on('py-enum34', when='^python@:3.3', type=('build', 'run'))
depends_on('py-enum34', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tuiview/package.py b/var/spack/repos/builtin/packages/py-tuiview/package.py
index 93726cf004..1223666d90 100644
--- a/var/spack/repos/builtin/packages/py-tuiview/package.py
+++ b/var/spack/repos/builtin/packages/py-tuiview/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-twisted/package.py b/var/spack/repos/builtin/packages/py-twisted/package.py
index e558adbc7f..e596adec97 100644
--- a/var/spack/repos/builtin/packages/py-twisted/package.py
+++ b/var/spack/repos/builtin/packages/py-twisted/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyTwisted(PythonPackage):
"""An asynchronous networking framework written in Python"""
homepage = "https://twistedmatrix.com/"
- url = "https://pypi.python.org/packages/source/T/Twisted/Twisted-15.3.0.tar.bz2"
+ url = "https://pypi.io/packages/source/T/Twisted/Twisted-15.3.0.tar.bz2"
version('15.4.0', '5337ffb6aeeff3790981a2cd56db9655')
version('15.3.0', 'b58e83da2f00b3352afad74d0c5c4599')
diff --git a/var/spack/repos/builtin/packages/py-typing/package.py b/var/spack/repos/builtin/packages/py-typing/package.py
new file mode 100644
index 0000000000..656eabe6f6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-typing/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyTyping(PythonPackage):
+ """This is a backport of the standard library typing module to Python
+ versions older than 3.6."""
+
+ homepage = "https://docs.python.org/3/library/typing.html"
+ url = "https://pypi.io/packages/source/t/typing/typing-3.6.1.tar.gz"
+
+ import_modules = ['typing']
+
+ version('3.6.1', '3fec97415bae6f742fb3c3013dedeb89')
+
+ # You need Python 2.7 or 3.3+ to install the typing package
+ depends_on('python@2.7:2.8,3.3:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-tzlocal/package.py b/var/spack/repos/builtin/packages/py-tzlocal/package.py
new file mode 100644
index 0000000000..fad9c19f3b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-tzlocal/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyTzlocal(PythonPackage):
+ """tzinfo object for the local timezone."""
+
+ homepage = "https://github.com/regebro/tzlocal"
+ url = "https://pypi.io/packages/source/t/tzlocal/tzlocal-1.3.tar.gz"
+
+ version('1.3', '3cb544b3975b59f91a793850a072d4a8')
+
+ depends_on('py-setuptools', type='build')
+
+ depends_on('py-pytz', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-unittest2/package.py b/var/spack/repos/builtin/packages/py-unittest2/package.py
index d6a68c3535..bdac19d855 100644
--- a/var/spack/repos/builtin/packages/py-unittest2/package.py
+++ b/var/spack/repos/builtin/packages/py-unittest2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,8 +30,9 @@ class PyUnittest2(PythonPackage):
testing framework in Python 2.7 and onwards."""
homepage = "https://pypi.python.org/pypi/unittest2"
- url = "https://pypi.python.org/packages/source/u/unittest2/unittest2-1.1.0.tar.gz"
+ url = "https://pypi.io/packages/source/u/unittest2/unittest2-1.1.0.tar.gz"
version('1.1.0', 'f72dae5d44f091df36b6b513305ea000')
depends_on('py-setuptools', type='build')
+ depends_on('py-enum34', when='^python@:3.3', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-unittest2py3k/package.py b/var/spack/repos/builtin/packages/py-unittest2py3k/package.py
index 03134acfcd..1c30595d97 100644
--- a/var/spack/repos/builtin/packages/py-unittest2py3k/package.py
+++ b/var/spack/repos/builtin/packages/py-unittest2py3k/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,7 @@ class PyUnittest2py3k(PythonPackage):
version of unittest2."""
homepage = "https://pypi.python.org/pypi/unittest2py3k"
- url = "https://pypi.python.org/packages/source/u/unittest2py3k/unittest2py3k-0.5.1.tar.gz"
+ url = "https://pypi.io/packages/source/u/unittest2py3k/unittest2py3k-0.5.1.tar.gz"
version('0.5.1', '8824ff92044310d9365f90d892bf0f09')
diff --git a/var/spack/repos/builtin/packages/py-urllib3/package.py b/var/spack/repos/builtin/packages/py-urllib3/package.py
new file mode 100644
index 0000000000..000c6ef1e6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-urllib3/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyUrllib3(PythonPackage):
+ """HTTP library with thread-safe connection pooling, file post, and
+ more."""
+
+ homepage = "https://urllib3.readthedocs.io/"
+ url = "https://pypi.io/packages/source/u/urllib3/urllib3-1.20.tar.gz"
+
+ version('1.20', '34691d4e7e20a8e9cdb452ea24fc38e7')
+ version('1.14', '5e1407428ac33b521c71a7ac273b3847')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-urwid/package.py b/var/spack/repos/builtin/packages/py-urwid/package.py
index 8e33d2bef2..46895ac2ee 100644
--- a/var/spack/repos/builtin/packages/py-urwid/package.py
+++ b/var/spack/repos/builtin/packages/py-urwid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,7 +28,7 @@ from spack import *
class PyUrwid(PythonPackage):
"""A full-featured console UI library"""
homepage = "http://urwid.org/"
- url = "https://pypi.python.org/packages/source/u/urwid/urwid-1.3.0.tar.gz"
+ url = "https://pypi.io/packages/source/u/urwid/urwid-1.3.0.tar.gz"
version('1.3.0', 'a989acd54f4ff1a554add464803a9175')
diff --git a/var/spack/repos/builtin/packages/py-vcversioner/package.py b/var/spack/repos/builtin/packages/py-vcversioner/package.py
index 81e4f7bdda..fa4e2565b8 100644
--- a/var/spack/repos/builtin/packages/py-vcversioner/package.py
+++ b/var/spack/repos/builtin/packages/py-vcversioner/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ class PyVcversioner(PythonPackage):
"""Vcversioner: Take version numbers from version control."""
homepage = "https://github.com/habnabit/vcversioner"
- url = "https://pypi.python.org/packages/source/v/vcversioner/vcversioner-2.16.0.0.tar.gz"
+ url = "https://pypi.io/packages/source/v/vcversioner/vcversioner-2.16.0.0.tar.gz"
version('2.16.0.0', 'aab6ef5e0cf8614a1b1140ed5b7f107d')
diff --git a/var/spack/repos/builtin/packages/py-virtualenv/package.py b/var/spack/repos/builtin/packages/py-virtualenv/package.py
index 5e6431b637..a91117e616 100644
--- a/var/spack/repos/builtin/packages/py-virtualenv/package.py
+++ b/var/spack/repos/builtin/packages/py-virtualenv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,11 +27,16 @@ from spack import *
class PyVirtualenv(PythonPackage):
"""virtualenv is a tool to create isolated Python environments."""
- homepage = "http://virtualenv.readthedocs.org/projects/virtualenv/"
- url = "https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz"
- version('1.11.6', 'f61cdd983d2c4e6aeabb70b1060d6f49')
- version('13.0.1', '1ffc011bde6667f0e37ecd976f4934db')
+ homepage = "https://virtualenv.pypa.io/"
+ url = "https://pypi.io/packages/source/v/virtualenv/virtualenv-15.1.0.tar.gz"
+
+ version('15.1.0', '44e19f4134906fe2d75124427dc9b716')
version('15.0.1', '28d76a0d9cbd5dc42046dd14e76a6ecc')
+ version('13.0.1', '1ffc011bde6667f0e37ecd976f4934db')
+ version('1.11.6', 'f61cdd983d2c4e6aeabb70b1060d6f49')
+
+ depends_on('python@2.6:')
- depends_on('py-setuptools', type='build')
+ # not just build-time, requires pkg_resources
+ depends_on('py-setuptools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-vsc-base/package.py b/var/spack/repos/builtin/packages/py-vsc-base/package.py
new file mode 100644
index 0000000000..2cd0ff4b46
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-vsc-base/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# 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/spack/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 PyVscBase(PythonPackage):
+ """Common Python libraries tools created by HPC-UGent"""
+
+ homepage = 'https://github.com/hpcugent/vsc-base/'
+ url = 'https://pypi.io/packages/source/v/vsc-base/vsc-base-2.5.8.tar.gz'
+
+ version('2.5.8', '57f3f49eab7aa15a96be76e6c89a72d8')
+
+ depends_on('py-setuptools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-vsc-install/package.py b/var/spack/repos/builtin/packages/py-vsc-install/package.py
new file mode 100644
index 0000000000..09e9c885cf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-vsc-install/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# Copyright (c) 2017, Kenneth Hoste
+#
+# This file is part of Spack.
+# Created by Kenneth Hoste, kenneth.hoste@gmail.com
+#
+# For details, see https://github.com/spack/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 PyVscInstall(PythonPackage):
+ """Shared setuptools functions and classes
+ for Python libraries developed by HPC-UGent.
+ """
+
+ homepage = 'https://github.com/hpcugent/vsc-install/'
+ url = 'https://pypi.io/packages/source/v/vsc-install/vsc-install-0.10.25.tar.gz'
+
+ version('0.10.25', 'd1b9453a75cb56dba0deb7a878047b51')
+
+ depends_on('py-setuptools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-wcsaxes/package.py b/var/spack/repos/builtin/packages/py-wcsaxes/package.py
index be1d151ee9..16fa376dc7 100644
--- a/var/spack/repos/builtin/packages/py-wcsaxes/package.py
+++ b/var/spack/repos/builtin/packages/py-wcsaxes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,6 +35,7 @@ class PyWcsaxes(PythonPackage):
version('0.8', 'de1c60fdae4c330bf5ddb9f1ab5ab920')
extends('python', ignore=r'bin/')
+ depends_on('py-setuptools', type='build')
depends_on('py-numpy', type=('build', 'run'))
depends_on('py-matplotlib', type=('build', 'run'))
depends_on('py-astropy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-wcwidth/package.py b/var/spack/repos/builtin/packages/py-wcwidth/package.py
index c4846e2ee7..ca4b7740b5 100644
--- a/var/spack/repos/builtin/packages/py-wcwidth/package.py
+++ b/var/spack/repos/builtin/packages/py-wcwidth/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-webkit-server/package.py b/var/spack/repos/builtin/packages/py-webkit-server/package.py
new file mode 100644
index 0000000000..66850b9682
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-webkit-server/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 PyWebkitServer(PythonPackage):
+ """a Webkit-based, headless web client"""
+
+ homepage = "https://github.com/niklasb/webkit-server"
+ url = "https://pypi.io/packages/source/w/webkit-server/webkit-server-1.0.tar.gz"
+
+ version('develop', git="https://github.com/niklasb/webkit-server", branch="master")
+ version('1.0', '8463245c2b4f0264d934c0ae20bd4654')
diff --git a/var/spack/repos/builtin/packages/py-werkzeug/package.py b/var/spack/repos/builtin/packages/py-werkzeug/package.py
new file mode 100644
index 0000000000..30573a7ff2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-werkzeug/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyWerkzeug(PythonPackage):
+ """The Swiss Army knife of Python web development"""
+
+ homepage = "http://werkzeug.pocoo.org"
+ url = "https://pypi.io/packages/source/W/Werkzeug/Werkzeug-0.11.11.tar.gz"
+
+ version('0.11.15', 'cb4010478dd33905f95920e4880204a2')
+ version('0.11.11', '1d34afa1f19abcef4c0da51ebc2c4ea7')
+
+ depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-wheel/package.py b/var/spack/repos/builtin/packages/py-wheel/package.py
index 7e678df2e8..f0a15f0886 100644
--- a/var/spack/repos/builtin/packages/py-wheel/package.py
+++ b/var/spack/repos/builtin/packages/py-wheel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,9 @@ class PyWheel(PythonPackage):
"""A built-package format for Python."""
homepage = "https://pypi.python.org/pypi/wheel"
- url = "https://pypi.python.org/packages/source/w/wheel/wheel-0.26.0.tar.gz"
+ url = "https://pypi.io/packages/source/w/wheel/wheel-0.29.0.tar.gz"
+ version('0.29.0', '555a67e4507cedee23a0deb9651e452f')
version('0.26.0', '4cfc6e7e3dc7377d0164914623922a10')
depends_on('py-setuptools', type='build')
diff --git a/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py b/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
index 916263bda6..206f940b57 100644
--- a/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
+++ b/var/spack/repos/builtin/packages/py-widgetsnbextension/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,5 +34,5 @@ class PyWidgetsnbextension(PythonPackage):
version('1.2.6', '0aa4e152c9ba2d704389dc2453f448c7')
depends_on('py-setuptools', type='build')
- depends_on('python@2.7:2.7.999,3.3:')
+ depends_on('python@2.7:2.8,3.3:')
depends_on('py-jupyter-notebook@4.2.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-wrapt/package.py b/var/spack/repos/builtin/packages/py-wrapt/package.py
new file mode 100644
index 0000000000..5b81eef2e1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-wrapt/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/spack/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 PyWrapt(PythonPackage):
+ """Module for decorators, wrappers and monkey patching."""
+
+ homepage = "https://github.com/GrahamDumpleton/wrapt"
+ url = "https://pypi.io/packages/source/w/wrapt/wrapt-1.10.10.tar.gz"
+
+ version('1.10.10', '97365e906afa8b431f266866ec4e2e18')
diff --git a/var/spack/repos/builtin/packages/py-xarray/package.py b/var/spack/repos/builtin/packages/py-xarray/package.py
new file mode 100644
index 0000000000..27017a9227
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xarray/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 PyXarray(PythonPackage):
+ """N-D labeled arrays and datasets in Python"""
+
+ homepage = "https://github.com/pydata/xarray"
+ url = "https://pypi.io/packages/source/x/xarray/xarray-0.9.1.tar.gz"
+
+ version('0.9.1', '24cc99f19da95427604846c9d1e20e70')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-pandas@0.15.0:', type=('build', 'run'))
+ depends_on('py-numpy@1.7:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-xlrd/package.py b/var/spack/repos/builtin/packages/py-xlrd/package.py
index bbd2f57b07..3fc22a7865 100644
--- a/var/spack/repos/builtin/packages/py-xlrd/package.py
+++ b/var/spack/repos/builtin/packages/py-xlrd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,6 +30,6 @@ class PyXlrd(PythonPackage):
spreadsheet files"""
homepage = 'http://www.python-excel.org/'
- url = "https://pypi.python.org/packages/source/x/xlrd/xlrd-0.9.4.tar.gz"
+ url = "https://pypi.io/packages/source/x/xlrd/xlrd-0.9.4.tar.gz"
version('0.9.4', '911839f534d29fe04525ef8cd88fe865')
diff --git a/var/spack/repos/builtin/packages/py-xlsxwriter/package.py b/var/spack/repos/builtin/packages/py-xlsxwriter/package.py
new file mode 100644
index 0000000000..97170d76d5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xlsxwriter/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 PyXlsxwriter(PythonPackage):
+ """XlsxWriter is a Python module for writing files in the Excel 2007+ XLSX
+ file format."""
+
+ homepage = "https://pypi.python.org/pypi/XlsxWriter"
+ url = "https://pypi.io/packages/source/X/XlsxWriter/XlsxWriter-1.0.2.tar.gz"
+
+ version('1.0.2', '586f97beeb458c5707794882125330d2')
diff --git a/var/spack/repos/builtin/packages/py-xmlrunner/package.py b/var/spack/repos/builtin/packages/py-xmlrunner/package.py
new file mode 100644
index 0000000000..104d6113c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xmlrunner/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyXmlrunner(PythonPackage):
+ """PyUnit-based test runner with JUnit like XML reporting."""
+
+ homepage = "https://github.com/pycontribs/xmlrunner"
+ url = "https://pypi.io/packages/source/x/xmlrunner/xmlrunner-1.7.7.tar.gz"
+
+ version('1.7.7', '7b0b152ed2d278516aedbc0cac22dfb3')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('py-unittest2', type=('build', 'run'), when='^python@:2.8')
diff --git a/var/spack/repos/builtin/packages/py-xopen/package.py b/var/spack/repos/builtin/packages/py-xopen/package.py
new file mode 100644
index 0000000000..4b6df42419
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xopen/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 PyXopen(PythonPackage):
+ """This small Python module provides a xopen function that works like the
+ built-in open function, but can also deal with compressed files. Supported
+ compression formats are gzip, bzip2 and xz. They are automatically
+ recognized by their file extensions .gz, .bz2 or .xz."""
+
+ homepage = "https://github.com/marcelm/xopen"
+ url = "https://pypi.io/packages/source/x/xopen/xopen-0.1.1.tar.gz"
+
+ version('0.1.1', '4e0e955546ee6bee4ea736b54623a671')
+
+ depends_on('py-setuptools', type='build')
+ depends_on('python@2.6:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/py-xpyb/package.py b/var/spack/repos/builtin/packages/py-xpyb/package.py
index 49c6343c45..60f69610c3 100644
--- a/var/spack/repos/builtin/packages/py-xpyb/package.py
+++ b/var/spack/repos/builtin/packages/py-xpyb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class PyXpyb(Package):
+class PyXpyb(AutotoolsPackage):
"""xpyb provides a Python binding to the X Window System protocol
via libxcb."""
@@ -39,9 +39,3 @@ class PyXpyb(Package):
depends_on('libxcb@1.5:')
depends_on('xcb-proto@1.7.1:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py b/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py
new file mode 100644
index 0000000000..09c9f6da47
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-xvfbwrapper/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 PyXvfbwrapper(PythonPackage):
+ """run headless display inside X virtual framebuffer (Xvfb)"""
+
+ homepage = "https://pypi.python.org/pypi/xvfbwrapper/0.2.9"
+ url = "https://pypi.io/packages/source/x/xvfbwrapper/xvfbwrapper-0.2.9.tar.gz"
+
+ version('0.2.9', '3f3cbed698606f4b14e76ccc7b5dd366')
+
+ depends_on('py-setuptools', type='build')
+ # Eventually add xvfb!
diff --git a/var/spack/repos/builtin/packages/py-yapf/package.py b/var/spack/repos/builtin/packages/py-yapf/package.py
index 5f5d32e3d0..76121cf2d2 100644
--- a/var/spack/repos/builtin/packages/py-yapf/package.py
+++ b/var/spack/repos/builtin/packages/py-yapf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/py-yt/package.py b/var/spack/repos/builtin/packages/py-yt/package.py
index 6ab967d8a5..6c8aa1797f 100644
--- a/var/spack/repos/builtin/packages/py-yt/package.py
+++ b/var/spack/repos/builtin/packages/py-yt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,6 +37,10 @@ class PyYt(PythonPackage):
homepage = "http://yt-project.org"
url = "https://bitbucket.org/yt_analysis/yt"
+ version("3.3.5", "2ad314ff3d3261e41825d15db027b0e7",
+ url="https://bitbucket.org/yt_analysis/yt/get/yt-3.3.5.tar.gz")
+ version("3.3.4", "3a84e56dfd82f9dd923f3fb8490e679c",
+ url="https://bitbucket.org/yt_analysis/yt/get/yt-3.3.4.tar.gz")
version("3.3.1", hg="https://bitbucket.org/yt_analysis/yt",
tag="yt-3.3.1", commit="9bc3d0e9b750c923d44d73c447df64fc431f5838")
version("3.2.3", hg="https://bitbucket.org/yt_analysis/yt",
@@ -53,6 +57,7 @@ class PyYt(PythonPackage):
variant("astropy", default=True, description="enable astropy support")
variant("h5py", default=True, description="enable h5py support")
variant("scipy", default=True, description="enable scipy support")
+ variant("rockstar", default=False, description="enable rockstar support")
depends_on("py-astropy", type=('build', 'run'), when="+astropy")
depends_on("py-cython", type=('build', 'run'))
@@ -61,11 +66,19 @@ class PyYt(PythonPackage):
depends_on("py-matplotlib", type=('build', 'run'))
depends_on("py-numpy", type=('build', 'run'))
depends_on("py-scipy", type=('build', 'run'), when="+scipy")
- depends_on("py-setuptools", type="build")
+ depends_on("py-setuptools", type=('build', 'run'))
depends_on("py-sympy", type=('build', 'run'))
- depends_on("python @2.7:2.999,3.4:")
+ depends_on("rockstar@yt", type=('build', 'run'), when="+rockstar")
+ depends_on("python@2.7:2.8,3.4:")
- @PythonPackage.sanity_check('install')
+ @run_before('install')
+ def prep_yt(self):
+ if '+rockstar' in self.spec:
+ with open('rockstar.cfg', 'w') as rockstar_cfg:
+ rockstar_cfg.write(self.spec['rockstar'].prefix)
+
+ @run_after('install')
+ @on_package_attributes(run_tests=True)
def check_install(self):
# The Python interpreter path can be too long for this
# yt = Executable(join_path(prefix.bin, "yt"))
diff --git a/var/spack/repos/builtin/packages/py-zmq/package.py b/var/spack/repos/builtin/packages/py-zmq/package.py
index cbc0e02e6e..d5734d8a33 100644
--- a/var/spack/repos/builtin/packages/py-zmq/package.py
+++ b/var/spack/repos/builtin/packages/py-zmq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,6 @@ class PyZmq(PythonPackage):
version('16.0.2', '4cf14a2995742253b2b009541f4436f4')
version('14.7.0', 'bf304fb73d72aee314ff82d3554328c179938ecf')
- depends_on('py-setuptools', type='build')
depends_on('py-cython@0.16:', type=('build', 'run'))
depends_on('py-py', type=('build', 'run'))
depends_on('py-cffi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/python/cray-rpath-2.3.patch b/var/spack/repos/builtin/packages/python/cray-rpath-2.3.patch
new file mode 100644
index 0000000000..54a85cc64a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/python/cray-rpath-2.3.patch
@@ -0,0 +1,12 @@
+--- a/Lib/distutils/unixccompiler.py 2003-06-02 05:27:40.000000000 +1000
++++ b/Lib/distutils/unixccompiler.py 2017-05-13 13:52:45.554213616 +1000
+@@ -208,7 +208,8 @@
+ elif compiler[:3] == "gcc" or compiler[:3] == "g++":
+ return "-Wl,-R" + dir
+ else:
+- return "-R" + dir
++ # Patched by spack to use gcc syntax by default:
++ return "-Wl,-R" + dir
+
+ def library_option(self, lib):
+ return "-l" + lib
diff --git a/var/spack/repos/builtin/packages/python/cray-rpath-3.1.patch b/var/spack/repos/builtin/packages/python/cray-rpath-3.1.patch
new file mode 100644
index 0000000000..f203bbbaa5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/python/cray-rpath-3.1.patch
@@ -0,0 +1,15 @@
+--- a/Lib/distutils/unixccompiler.py 2009-05-09 21:55:12.000000000 +1000
++++ b/Lib/distutils/unixccompiler.py 2017-05-13 14:30:18.077518999 +1000
+@@ -299,10 +299,8 @@
+ else:
+ return "-Wl,-R" + dir
+ else:
+- # No idea how --enable-new-dtags would be passed on to
+- # ld if this system was using GNU ld. Don't know if a
+- # system like this even exists.
+- return "-R" + dir
++ # Patched by spack to use gcc syntax by default:
++ return "-Wl,-R" + dir
+
+ def library_option(self, lib):
+ return "-l" + lib
diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py
index 348b075e2f..c77756a78f 100644
--- a/var/spack/repos/builtin/packages/python/package.py
+++ b/var/spack/repos/builtin/packages/python/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,26 +24,30 @@
##############################################################################
import ast
import os
+import platform
import re
-from contextlib import closing
+import sys
-import spack
import llnl.util.tty as tty
from llnl.util.lang import match_predicate
from llnl.util.filesystem import force_remove
+
+import spack
from spack import *
-from spack.util.environment import *
+from spack.util.prefix import Prefix
import spack.util.spack_json as sjson
-class Python(Package):
+class Python(AutotoolsPackage):
"""The Python programming language."""
homepage = "http://www.python.org"
url = "http://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz"
list_url = "https://www.python.org/downloads/"
- list_depth = 2
+ list_depth = 1
+ version('3.6.2', 'e1a36bfffdd1d3a780b1825daf16e56c')
+ version('3.6.1', '2d0fc9f3a5940707590e07f03ecb08b9')
version('3.6.0', '3f7062ccf8be76491884d0e47ac8b251')
version('3.5.2', '3fe8434643a78630c61c6464fe2e7e72')
version('3.5.1', 'be78e48cdfc1a7ad90efff146dce6cfe')
@@ -52,7 +56,8 @@ class Python(Package):
version('3.3.6', 'cdb3cd08f96f074b3f3994ccb51063e9')
version('3.2.6', '23815d82ae706e9b781ca65865353d39')
version('3.1.5', '02196d3fc7bc76bdda68aa36b0dd16ab')
- version('2.7.13', '17add4bf0ad0ec2f08e0cae6d205c700', preferred=True)
+ version('2.7.14', 'cee2e4b33ad3750da77b2e85f2f8b724', preferred=True)
+ version('2.7.13', '17add4bf0ad0ec2f08e0cae6d205c700')
version('2.7.12', '88d61f82e3616a4be952828b3694109d')
version('2.7.11', '6b6076ec9e93f05dd63e47eb9c15728b')
version('2.7.10', 'd7547558fd673bd9d38e2108c6b42521')
@@ -61,6 +66,10 @@ class Python(Package):
extendable = True
+ # --enable-shared is known to cause problems for some users on macOS
+ # See http://bugs.python.org/issue29846
+ variant('shared', default=sys.platform != 'darwin',
+ description='Enable shared libraries')
variant('tk', default=False, description='Provide support for Tkinter')
variant('ucs4', default=False,
description='Enable UCS4 (wide) unicode strings')
@@ -71,6 +80,8 @@ class Python(Package):
# builds then use a 32-bit type for Py_UNICODE and store Unicode data
# internally as UCS4. Note that UCS2 and UCS4 Python builds are not binary
# compatible.
+ variant('pic', default=True,
+ description='Produce position-independent code (for shared libs)')
depends_on("openssl")
depends_on("bzip2")
@@ -81,13 +92,18 @@ class Python(Package):
depends_on("tk", when="+tk")
depends_on("tcl", when="+tk")
- patch('ncurses.patch')
+ # Patch does not work for Python 3.1
+ patch('ncurses.patch', when='@:2.8,3.2:')
+
+ # Ensure that distutils chooses correct compiler option for RPATH on cray:
+ patch('cray-rpath-2.3.patch', when="@2.3:3.0.1 platform=cray")
+ patch('cray-rpath-3.1.patch', when="@3.1:3.99 platform=cray")
_DISTUTIL_VARS_TO_SAVE = ['LDSHARED']
_DISTUTIL_CACHE_FILENAME = 'sysconfig.json'
_distutil_vars = None
- @when('@2.7,3.4:')
+ @when('@2.7:2.8,3.4:')
def patch(self):
# NOTE: Python's default installation procedure makes it possible for a
# user's local configurations to change the Spack installation. In
@@ -99,12 +115,10 @@ class Python(Package):
r'\1setup.py\2 --no-user-cfg \3\6'
)
- @when('@:2.6,3.0:3.3')
- def patch(self):
- # See https://github.com/LLNL/spack/issues/1490
- pass
+ def setup_environment(self, spack_env, run_env):
+ spec = self.spec
+ prefix = self.prefix
- def install(self, spec, prefix):
# TODO: The '--no-user-cfg' option for Python installation is only in
# Python v2.7 and v3.4+ (see https://bugs.python.org/issue1180) and
# adding support for ignoring user configuration will require
@@ -114,23 +128,29 @@ class Python(Package):
'user configurations are present.').format(self.version))
# Need this to allow python build to find the Python installation.
- env['PYTHONHOME'], env['PYTHONPATH'] = prefix, prefix
- env['MACOSX_DEPLOYMENT_TARGET'] = '10.6'
+ spack_env.set('PYTHONHOME', prefix)
+ spack_env.set('PYTHONPATH', prefix)
+ spack_env.set('MACOSX_DEPLOYMENT_TARGET', platform.mac_ver()[0])
- # Rest of install is pretty standard except setup.py needs to
- # be able to read the CPPFLAGS and LDFLAGS as it scans for the
- # library and headers to build
+ def configure_args(self):
+ spec = self.spec
+
+ # setup.py needs to be able to read the CPPFLAGS and LDFLAGS
+ # as it scans for the library and headers to build
dep_pfxs = [dspec.prefix for dspec in spec.dependencies('link')]
config_args = [
- '--prefix={0}'.format(prefix),
'--with-threads',
- '--enable-shared',
'CPPFLAGS=-I{0}'.format(' -I'.join(dp.include for dp in dep_pfxs)),
'LDFLAGS=-L{0}'.format(' -L'.join(dp.lib for dp in dep_pfxs)),
]
- if spec.satisfies("platform=darwin") and ('%gcc' in spec):
+ if spec.satisfies('%gcc platform=darwin'):
config_args.append('--disable-toolbox-glue')
+ if '+shared' in spec:
+ config_args.append('--enable-shared')
+ else:
+ config_args.append('--disable-shared')
+
if '+ucs4' in spec:
if spec.satisfies('@:2.7'):
config_args.append('--enable-unicode=ucs4')
@@ -144,9 +164,22 @@ class Python(Package):
if spec.satisfies('@3:'):
config_args.append('--without-ensurepip')
- configure(*config_args)
- make()
- make('install')
+ if '+pic' in spec:
+ config_args.append('CFLAGS={0}'.format(self.compiler.pic_flag))
+
+ return config_args
+
+ @run_after('install')
+ def post_install(self):
+ spec = self.spec
+ prefix = self.prefix
+
+ self.sysconfigfilename = '_sysconfigdata.py'
+ if spec.satisfies('@3.6:'):
+ # Python 3.6.0 renamed the sys config file
+ sc = 'import sysconfig; print(sysconfig._get_sysconfigdata_name())'
+ cf = self.command('-c', sc, output=str).strip()
+ self.sysconfigfilename = '{0}.py'.format(cf)
self._save_distutil_vars(prefix)
@@ -199,7 +232,7 @@ class Python(Package):
Spack partially covers this by setting environment variables that
are also accounted for by distutils. Currently there is one more known
variable that must be set, which is LDSHARED, so the method saves its
- autogenerated value to pass it to the dependant package's setup script.
+ autogenerated value to pass it to the dependent package's setup script.
"""
self._distutil_vars = {}
@@ -207,12 +240,11 @@ class Python(Package):
input_filename = None
for filename in [join_path(lib_dir,
'python{0}'.format(self.version.up_to(2)),
- '_sysconfigdata.py')
+ self.sysconfigfilename)
for lib_dir in [prefix.lib, prefix.lib64]]:
if os.path.isfile(filename):
input_filename = filename
break
-
if not input_filename:
return
@@ -229,20 +261,20 @@ class Python(Package):
pass
if not input_dict:
- tty.warn('Failed to find \'build_time_vars\' dictionary in file '
- '\'%s\'. This might cause the extensions that are '
- 'installed with distutils to call compilers directly '
- 'avoiding Spack\'s wrappers.' % input_filename)
+ tty.warn("Failed to find 'build_time_vars' dictionary in file "
+ "'%s'. This might cause the extensions that are "
+ "installed with distutils to call compilers directly "
+ "avoiding Spack's wrappers." % input_filename)
return
for var_name in Python._DISTUTIL_VARS_TO_SAVE:
if var_name in input_dict:
self._distutil_vars[var_name] = input_dict[var_name]
else:
- tty.warn('Failed to find key \'%s\' in \'build_time_vars\' '
- 'dictionary in file \'%s\'. This might cause the '
- 'extensions that are installed with distutils to '
- 'call compilers directly avoiding Spack\'s wrappers.'
+ tty.warn("Failed to find key '%s' in 'build_time_vars' "
+ "dictionary in file '%s'. This might cause the "
+ "extensions that are installed with distutils to "
+ "call compilers directly avoiding Spack's wrappers."
% (var_name, input_filename))
if len(self._distutil_vars) > 0:
@@ -253,11 +285,11 @@ class Python(Package):
Python._DISTUTIL_CACHE_FILENAME)
with open(output_filename, 'w') as output_file:
sjson.dump(self._distutil_vars, output_file)
- except:
- tty.warn('Failed to save metadata for distutils. This might '
- 'cause the extensions that are installed with '
- 'distutils to call compilers directly avoiding '
- 'Spack\'s wrappers.')
+ except Exception:
+ tty.warn("Failed to save metadata for distutils. This might "
+ "cause the extensions that are installed with "
+ "distutils to call compilers directly avoiding "
+ "Spack's wrappers.")
# We make the cache empty if we failed to save it to file
# to provide the same behaviour as in the case when the cache
# is initialized by the method load_distutils_data().
@@ -276,7 +308,7 @@ class Python(Package):
if os.path.isfile(input_filename):
with open(input_filename) as input_file:
self._distutil_vars = sjson.load(input_file)
- except:
+ except Exception:
pass
if not self._distutil_vars:
@@ -301,7 +333,7 @@ class Python(Package):
config_dirname = 'config-{0}m'.format(
self.version.up_to(2)) if self.spec.satisfies('@3:') else 'config'
- rel_filenames = ['_sysconfigdata.py',
+ rel_filenames = [self.sysconfigfilename,
join_path(config_dirname, 'Makefile')]
abs_filenames = [join_path(dirname, filename) for dirname in
@@ -315,6 +347,144 @@ class Python(Package):
# ========================================================================
@property
+ def command(self):
+ """Returns the Python command, which may vary depending
+ on the version of Python and how it was installed.
+
+ In general, Python 2 comes with ``python`` and ``python2`` commands,
+ while Python 3 only comes with a ``python3`` command.
+
+ :returns: The Python command
+ :rtype: Executable
+ """
+ # We need to be careful here. If the user is using an externally
+ # installed python, all 3 commands could be in the same directory.
+
+ # Search for `python2` iff using Python 2
+ if (self.spec.satisfies('@:2') and
+ os.path.exists(os.path.join(self.prefix.bin, 'python2'))):
+ command = 'python2'
+ # Search for `python3` iff using Python 3
+ elif (self.spec.satisfies('@3:') and
+ os.path.exists(os.path.join(self.prefix.bin, 'python3'))):
+ command = 'python3'
+ # If neither were found, try `python`
+ elif os.path.exists(os.path.join(self.prefix.bin, 'python')):
+ command = 'python'
+ else:
+ msg = 'Unable to locate {0} command in {1}'
+ raise RuntimeError(msg.format(self.name, self.prefix.bin))
+
+ # The python command may be a symlink if it was installed
+ # with Homebrew. Since some packages try to determine the
+ # location of libraries and headers based on the path,
+ # return the realpath
+ path = os.path.realpath(os.path.join(self.prefix.bin, command))
+
+ return Executable(path)
+
+ def print_string(self, string):
+ """Returns the appropriate print string depending on the
+ version of Python.
+
+ Examples:
+
+ * Python 2
+
+ .. code-block:: python
+
+ >>> self.print_string('sys.prefix')
+ 'print sys.prefix'
+
+ * Python 3
+
+ .. code-block:: python
+
+ >>> self.print_string('sys.prefix')
+ 'print(sys.prefix)'
+ """
+ if self.spec.satisfies('@:2'):
+ return 'print {0}'.format(string)
+ else:
+ return 'print({0})'.format(string)
+
+ def get_config_var(self, key):
+ """Returns the value of a single variable. Wrapper around
+ ``distutils.sysconfig.get_config_var()``."""
+
+ cmd = 'from distutils.sysconfig import get_config_var; '
+ cmd += self.print_string("get_config_var('{0}')".format(key))
+
+ return self.command('-c', cmd, output=str).strip()
+
+ def get_config_h_filename(self):
+ """Returns the full path name of the configuration header.
+ Wrapper around ``distutils.sysconfig.get_config_h_filename()``."""
+
+ cmd = 'from distutils.sysconfig import get_config_h_filename; '
+ cmd += self.print_string('get_config_h_filename()')
+
+ return self.command('-c', cmd, output=str).strip()
+
+ @property
+ def home(self):
+ """Most of the time, ``PYTHONHOME`` is simply
+ ``spec['python'].prefix``. However, if the user is using an
+ externally installed python, it may be symlinked. For example,
+ Homebrew installs python in ``/usr/local/Cellar/python/2.7.12_2``
+ and symlinks it to ``/usr/local``. Users may not know the actual
+ installation directory and add ``/usr/local`` to their
+ ``packages.yaml`` unknowingly. Query the python executable to
+ determine exactly where it is installed."""
+
+ prefix = self.get_config_var('prefix')
+ return Prefix(prefix)
+
+ @property
+ def libs(self):
+ # Spack installs libraries into lib, except on openSUSE where it
+ # installs them into lib64. If the user is using an externally
+ # installed package, it may be in either lib or lib64, so we need
+ # to ask Python where its LIBDIR is.
+ libdir = self.get_config_var('LIBDIR')
+
+ # The system Python installation on macOS and Homebrew installations
+ # install libraries into a Frameworks directory
+ frameworkprefix = self.get_config_var('PYTHONFRAMEWORKPREFIX')
+
+ if '+shared' in self.spec:
+ ldlibrary = self.get_config_var('LDLIBRARY')
+
+ if os.path.exists(os.path.join(libdir, ldlibrary)):
+ return LibraryList(os.path.join(libdir, ldlibrary))
+ elif os.path.exists(os.path.join(frameworkprefix, ldlibrary)):
+ return LibraryList(os.path.join(frameworkprefix, ldlibrary))
+ else:
+ msg = 'Unable to locate {0} libraries in {1}'
+ raise RuntimeError(msg.format(self.name, libdir))
+ else:
+ library = self.get_config_var('LIBRARY')
+
+ if os.path.exists(os.path.join(libdir, library)):
+ return LibraryList(os.path.join(libdir, library))
+ elif os.path.exists(os.path.join(frameworkprefix, library)):
+ return LibraryList(os.path.join(frameworkprefix, library))
+ else:
+ msg = 'Unable to locate {0} libraries in {1}'
+ raise RuntimeError(msg.format(self.name, libdir))
+
+ @property
+ def headers(self):
+ config_h = self.get_config_h_filename()
+
+ if os.path.exists(config_h):
+ return HeaderList(config_h)
+ else:
+ includepy = self.get_config_var('INCLUDEPY')
+ msg = 'Unable to locate {0} headers in {1}'
+ raise RuntimeError(msg.format(self.name, includepy))
+
+ @property
def python_lib_dir(self):
return join_path('lib', 'python{0}'.format(self.version.up_to(2)))
@@ -326,33 +496,18 @@ class Python(Package):
def site_packages_dir(self):
return join_path(self.python_lib_dir, 'site-packages')
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
- """Set PYTHONPATH to include site-packages dir for the
+ @property
+ def easy_install_file(self):
+ return join_path(self.site_packages_dir, "easy-install.pth")
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ """Set PYTHONPATH to include the site-packages directory for the
extension and any other python extensions it depends on."""
- # The python executable for version 3 may be python3 or python
- # See https://github.com/LLNL/spack/pull/2173#issuecomment-257170199
- pythonex = 'python{0}'.format('3' if self.spec.satisfies('@3') else '')
- if os.path.isdir(self.prefix.bin):
- base = self.prefix.bin
- else:
- base = self.prefix
- if not os.path.isfile(os.path.join(base, pythonex)):
- if self.spec.satisfies('@3'):
- python = Executable(os.path.join(base, 'python'))
- version = python('-c', 'import sys; print(sys.version)',
- output=str)
- if version.startswith('3'):
- pythonex = 'python'
- else:
- raise RuntimeError('Cannot locate python executable')
- else:
- raise RuntimeError('Cannot locate python executable')
- python = Executable(os.path.join(base, pythonex))
- prefix = python('-c', 'import sys; print(sys.prefix)', output=str)
- spack_env.set('PYTHONHOME', prefix.strip('\n'))
+
+ spack_env.set('PYTHONHOME', self.home)
python_paths = []
- for d in extension_spec.traverse(
+ for d in dependent_spec.traverse(
deptype=('build', 'run'), deptype_query='run'):
if d.package.extends(self.spec):
python_paths.append(join_path(d.prefix,
@@ -362,41 +517,40 @@ class Python(Package):
spack_env.set('PYTHONPATH', pythonpath)
# For run time environment set only the path for
- # extension_spec and prepend it to PYTHONPATH
- if extension_spec.package.extends(self.spec):
+ # dependent_spec and prepend it to PYTHONPATH
+ if dependent_spec.package.extends(self.spec):
run_env.prepend_path('PYTHONPATH', join_path(
- extension_spec.prefix, self.site_packages_dir))
+ dependent_spec.prefix, self.site_packages_dir))
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""Called before python modules' install() methods.
In most cases, extensions will only need to have one line::
setup_py('install', '--prefix={0}'.format(prefix))"""
- python_path = join_path(
- self.spec.prefix.bin,
- 'python{0}'.format('3' if self.spec.satisfies('@3') else '')
- )
- module.python = Executable(python_path)
- module.setup_py = Executable(python_path + ' setup.py --no-user-cfg')
+ module.python = self.command
+ module.setup_py = Executable(
+ self.command.path + ' setup.py --no-user-cfg')
distutil_vars = self._load_distutil_vars()
if distutil_vars:
- for key, value in distutil_vars.iteritems():
+ for key, value in distutil_vars.items():
module.setup_py.add_default_env(key, value)
# Add variables for lib/pythonX.Y and lib/pythonX.Y/site-packages dirs.
- module.python_lib_dir = join_path(ext_spec.prefix,
+ module.python_lib_dir = join_path(dependent_spec.prefix,
self.python_lib_dir)
- module.python_include_dir = join_path(ext_spec.prefix,
+ module.python_include_dir = join_path(dependent_spec.prefix,
self.python_include_dir)
- module.site_packages_dir = join_path(ext_spec.prefix,
+ module.site_packages_dir = join_path(dependent_spec.prefix,
self.site_packages_dir)
+ self.spec.home = self.home
+
# Make the site packages directory for extensions
- if ext_spec.package.is_extension:
+ if dependent_spec.package.is_extension:
mkdirp(module.site_packages_dir)
# ========================================================================
@@ -423,20 +577,24 @@ class Python(Package):
if ext_pkg.name != 'py-pygments':
patterns.append(r'bin/pygmentize$')
if ext_pkg.name != 'py-numpy':
- patterns.append(r'bin/f2py3?$')
+ patterns.append(r'bin/f2py[0-9.]*$')
return match_predicate(ignore_arg, patterns)
- def write_easy_install_pth(self, exts):
+ def write_easy_install_pth(self, exts, prefix=None):
+ if not prefix:
+ prefix = self.prefix
+
paths = []
+ unique_paths = set()
+
for ext in sorted(exts.values()):
- ext_site_packages = join_path(ext.prefix, self.site_packages_dir)
- easy_pth = join_path(ext_site_packages, "easy-install.pth")
+ easy_pth = join_path(ext.prefix, self.easy_install_file)
if not os.path.isfile(easy_pth):
continue
- with closing(open(easy_pth)) as f:
+ with open(easy_pth) as f:
for line in f:
line = line.rstrip()
@@ -449,47 +607,54 @@ class Python(Package):
re.search(r'setuptools.*egg$', line)):
continue
- paths.append(line)
+ if line not in unique_paths:
+ unique_paths.add(line)
+ paths.append(line)
- site_packages = join_path(self.prefix, self.site_packages_dir)
- main_pth = join_path(site_packages, "easy-install.pth")
+ main_pth = join_path(prefix, self.easy_install_file)
if not paths:
if os.path.isfile(main_pth):
os.remove(main_pth)
else:
- with closing(open(main_pth, 'w')) as f:
- f.write("""
-import sys
-sys.__plen = len(sys.path)
-""")
+ with open(main_pth, 'w') as f:
+ f.write("import sys; sys.__plen = len(sys.path)\n")
for path in paths:
f.write("{0}\n".format(path))
- f.write("""
-new = sys.path[sys.__plen:]
-del sys.path[sys.__plen:]
-p = getattr(sys, '__egginsert', 0)
-sys.path[p:p] = new
-sys.__egginsert = p + len(new)
-""")
+ f.write("import sys; new=sys.path[sys.__plen:]; "
+ "del sys.path[sys.__plen:]; "
+ "p=getattr(sys,'__egginsert',0); "
+ "sys.path[p:p]=new; "
+ "sys.__egginsert = p+len(new)\n")
def activate(self, ext_pkg, **args):
ignore = self.python_ignore(ext_pkg, args)
args.update(ignore=ignore)
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
super(Python, self).activate(ext_pkg, **args)
- exts = spack.store.layout.extension_map(self.spec)
+ exts = extensions_layout.extension_map(self.spec)
exts[ext_pkg.name] = ext_pkg.spec
- self.write_easy_install_pth(exts)
+
+ self.write_easy_install_pth(
+ exts,
+ prefix=extensions_layout.extendee_target_directory(self))
def deactivate(self, ext_pkg, **args):
args.update(ignore=self.python_ignore(ext_pkg, args))
super(Python, self).deactivate(ext_pkg, **args)
- exts = spack.store.layout.extension_map(self.spec)
+ extensions_layout = args.get("extensions_layout",
+ spack.store.extensions)
+
+ exts = extensions_layout.extension_map(self.spec)
# Make deactivate idempotent
if ext_pkg.name in exts:
del exts[ext_pkg.name]
- self.write_easy_install_pth(exts)
+ self.write_easy_install_pth(
+ exts,
+ prefix=extensions_layout.extendee_target_directory(self))
diff --git a/var/spack/repos/builtin/packages/qbank/package.py b/var/spack/repos/builtin/packages/qbank/package.py
new file mode 100644
index 0000000000..b56be62bad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qbank/package.py
@@ -0,0 +1,87 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Qbank(Package):
+ """QBank is a unique dynamic reservation-based allocation management system
+ that manages the utilization of computational resources in a multi-project
+ environment. It is used in conjunction with a resource management system
+ allowing an organization to guarantee greater fairness and enforce mission
+ priorities by associating a charge with the use of computational resources
+ and allocating resource credits which limit how much of the resources may
+ be used at what time and by whom. It tracks resource utilization and allows
+ for insightful planning."""
+
+ # QBank is so old that it no longer has (never had?) a homepage
+ # but it was developed at Pacific Northwest National Laboratory
+ # by Scott Jackson <Scott.Jackson@pnl.gov>
+ homepage = "http://www.pnnl.gov/"
+ url = "file://{0}/qbank-2.10.4.tar.gz".format(os.getcwd())
+
+ version('2.10.4', '0820587353e63d32ddb49689dd4289e7')
+
+ variant('doc', default=False, description='Build documentation')
+
+ depends_on('openssl')
+
+ depends_on('perl@5.6:5.16', type=('build', 'run'))
+ depends_on('perl-dbi@1.00:', type=('build', 'run'))
+
+ phases = ['configure', 'build', 'install']
+
+ def configure_args(self):
+ prefix = self.prefix
+
+ config_args = [
+ '--prefix', prefix,
+ '--logdir', join_path(prefix, 'var', 'log', 'qbank')
+ ]
+
+ return config_args
+
+ def configure(self, spec, prefix):
+ perl = which('perl')
+ perl('configure', *self.configure_args())
+
+ def build(self, spec, prefix):
+ make()
+
+ if '+doc' in spec:
+ make('docs')
+
+ def install(self, spec, prefix):
+ make('install')
+
+ if '+doc' in spec:
+ install_tree('doc', join_path(prefix, 'doc'))
+
+ def setup_environment(self, spack_env, run_env):
+ spec = self.spec
+ prefix = self.prefix
+
+ if '+doc' in spec:
+ run_env.prepend_path('MANPATH', join_path(prefix, 'doc'))
diff --git a/var/spack/repos/builtin/packages/qbox/package.py b/var/spack/repos/builtin/packages/qbox/package.py
new file mode 100644
index 0000000000..7945370997
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qbox/package.py
@@ -0,0 +1,93 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import shutil
+from spack import *
+
+
+class Qbox(MakefilePackage):
+ """Qbox is a C++/MPI scalable parallel implementation of first-principles
+ molecular dynamics (FPMD) based on the plane-wave, pseudopotential
+ formalism. Qbox is designed for operation on large parallel computers."""
+
+ homepage = "http://qboxcode.org/"
+ url = "http://qboxcode.org/download/qbox-1.63.7.tgz"
+
+ version('1.63.7', '6b0cf5656f816a1a59e22b268387af33')
+ version('1.63.5', 'da3161ab6a455793f2133dd03c04077c')
+ version('1.63.4', '8596f32c8fb7e7baa96571c655aaee07')
+ version('1.63.2', '55e8f13f37c8e1f43ca831791e3af1da')
+ version('1.63.0', '1436c884c553ab026b7f787307e5e6ed')
+ version('1.62.3', 'f07e038ab92b85956794e91a40346dbf')
+ version('1.60.9', '53b0df612e56bb65e8220d9d9dc8d395')
+ version('1.60.4', '060846c9fa03b1f3d7d5ce24a9491de2')
+ version('1.60.0', '3856cdc38a27dc17705844c4b9241a21')
+ version('1.58.0', 'ec0e6b79fa0ed06742212b1142e36b6a')
+ version('1.56.2', 'df7a4217d059a5d351d92e480ed14112')
+ version('1.54.4', '8f1a23af7d871317de93810b664ad3aa')
+ version('1.54.2', 'aeefee061255dbb36ca7e49378f63ad5')
+ version('1.52.3', '1862f2b2056cdf49ec4f746d45a7f1a6')
+ version('1.52.2', 'e406deb4c46176f1c15c226868bf61e2')
+ version('1.50.4', 'b06ff877257884e4fac321fb5a486266')
+ version('1.50.2', '171660b1bb5e57637f019fef055fb764')
+ version('1.50.1', '1da528b39da134f86f134432e8fada79')
+ version('1.47.0', '86f402651d440e05adc94168d6105da7')
+ version('1.45.3', '73b99a73dcbb1b5be9f66f3284750205')
+ version('1.45.1', '59e0c2583769b7586981c0d6ffa1b267')
+ version('1.45.0', '2c5bfbadfffd330c8c2fe294a10a08e4')
+ version('1.44.0', 'c46a2f0f68fe9229aa77779da188cea9')
+
+ depends_on('mpi')
+ depends_on('blas')
+ depends_on('scalapack')
+ depends_on('fftw')
+ depends_on('xerces-c')
+
+ build_directory = 'src'
+
+ def edit(self, spec, prefix):
+ with open('src/spack.mk', 'w') as mkfile:
+ mkfile.write('CXX = {0}\n'.format(spec['mpi'].mpicxx))
+ mkfile.write('LD = $(CXX)\n')
+ qbox_libs = spec['fftw'].libs + spec['xerces-c'].libs + \
+ spec['scalapack'].libs + spec['blas'].libs
+ mkfile.write('LDFLAGS = {0}\n'.format(qbox_libs.ld_flags))
+ mkfile.write('DFLAGS = {0}\n'.format(' -D'.join((
+ '',
+ '_LARGEFILE_SOURCE', 'USE_MPI', 'USE_XERCES',
+ 'XERCESC_3', 'MPICH_IGNORE_CXX_SEEK', 'SCALAPACK',
+ 'USE_FFTW3', 'FFTWMEASURE', 'FFTW3_2D', 'ADD_',
+ ))))
+ mkfile.write('CXXFLAGS = {0}\n'.format(' '.join((
+ '-g', '-O3', '$(DFLAGS)',
+ ))))
+ filter_file('$(TARGET)', 'spack', 'src/Makefile', string=True)
+
+ def install(self, spec, prefix):
+ mkdir(prefix.src)
+ install('src/qb', prefix.src)
+ shutil.move('test', prefix)
+ shutil.move('xml', prefix)
+ shutil.move('util', prefix)
diff --git a/var/spack/repos/builtin/packages/qhull/package.py b/var/spack/repos/builtin/packages/qhull/package.py
index 4456c16bd2..3e3e033025 100644
--- a/var/spack/repos/builtin/packages/qhull/package.py
+++ b/var/spack/repos/builtin/packages/qhull/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -43,4 +43,6 @@ class Qhull(CMakePackage):
version('2012.1', 'd0f978c0d8dfb2e919caefa56ea2953c',
url="http://www.qhull.org/download/qhull-2012.1-src.tgz")
+ patch('qhull-unused-intel-17.02.patch', when='@2015.2')
+
depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/qhull/qhull-unused-intel-17.02.patch b/var/spack/repos/builtin/packages/qhull/qhull-unused-intel-17.02.patch
new file mode 100644
index 0000000000..70eb3bd722
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qhull/qhull-unused-intel-17.02.patch
@@ -0,0 +1,18 @@
+--- a/src/libqhull_r/qhull_ra.h 2017-06-30 14:24:52.252635925 +0200
++++ b/src/libqhull_r/qhull_ra.h 2017-06-30 14:25:27.356635296 +0200
+@@ -101,13 +101,8 @@
+
+ */
+
+-#if defined(__cplusplus) && defined(__INTEL_COMPILER) && !defined(QHULL_OS_WIN)
+-template <typename T>
+-inline void qhullUnused(T &x) { (void)x; }
+-# define QHULL_UNUSED(x) qhullUnused(x);
+-#else
+-# define QHULL_UNUSED(x) (void)x;
+-#endif
++#define QHULL_UNUSED(x) (void)x;
++
+
+ /***** -libqhull_r.c prototypes (alphabetical after qhull) ********************/
+
diff --git a/var/spack/repos/builtin/packages/qmcpack/package.py b/var/spack/repos/builtin/packages/qmcpack/package.py
new file mode 100644
index 0000000000..360ae0a51d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qmcpack/package.py
@@ -0,0 +1,234 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Qmcpack(CMakePackage):
+ """QMCPACK, is a modern high-performance open-source Quantum Monte
+ Carlo (QMC) simulation code."""
+
+ # Package information
+ homepage = "http://www.qmcpack.org/"
+ url = "https://github.com/QMCPACK/qmcpack.git"
+
+ # This download method is untrusted, and is not recommended
+ # by the Spack manual. However, it is easier to maintain
+ # because github hashes can occasionally change
+ version('3.2.0', git=url, tag='v3.2.0')
+ version('3.1.1', git=url, tag='v3.1.1')
+ version('3.1.0', git=url, tag='v3.1.0')
+ version('3.0.0', git=url, tag='v3.0.0')
+ version('develop', git=url)
+
+ # These defaults match those in the QMCPACK manual
+ variant('debug', default=False, description='Build debug version')
+ variant('mpi', default=True, description='Build with MPI support')
+ variant('cuda', default=False,
+ description='Enable CUDA and GPU acceleration')
+ variant('complex', default=False,
+ description='Build the complex (general twist/k-point) version')
+ variant('mixed', default=False,
+ description='Build the mixed precision (mixture of single and '
+ 'double precision) version for gpu and cpu')
+ variant('soa', default=False,
+ description='Build with Structure-of-Array instead of '
+ 'Array-of-Structure code. Only for CPU code'
+ 'and only in mixed precision')
+ variant('timers', default=False,
+ description='Build with support for timers')
+ variant('da', default=False,
+ description='Install with support for basic data analysis tools')
+ variant('gui', default=False,
+ description='Install with Matplotlib (long installation time)')
+
+ # cuda variant implies mixed precision variant by default, but there is
+ # no way to express this in variant syntax, need something like
+ # variant('+mixed', default=True, when='+cuda', description="...")
+
+ # conflicts
+ conflicts('+soa', when='+cuda')
+ conflicts('^openblas+ilp64')
+ conflicts('^intel-mkl+ilp64')
+
+ # Dependencies match those in the QMCPACK manual
+ depends_on('cmake@3.4.3:', type='build')
+ depends_on('mpi', when='+mpi')
+ depends_on('libxml2')
+ depends_on('hdf5')
+ depends_on('hdf5+mpi', when='+mpi')
+ depends_on('hdf5~mpi', when='~mpi')
+ depends_on('boost')
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('fftw')
+ depends_on('fftw+mpi', when='+mpi')
+ depends_on('fftw~mpi', when='~mpi')
+ depends_on('cuda', when='+cuda')
+
+ # qmcpack data analysis tools
+ # basic command line tool based on Python and NumPy
+ # blas and lapack patching fails often and so are disabled at this time
+ depends_on('py-numpy~blas~lapack', type='run', when='+da')
+
+ # GUI is optional fpr data anlysis
+ # py-matplotlib leads to a long complex DAG for dependencies
+ depends_on('py-matplotlib', type='run', when='+gui')
+
+ # B-spline basis calculation require a patched version of
+ # Quantum Espresso 5.3.0 (see QMCPACK manual)
+ patch_url = 'https://raw.githubusercontent.com/QMCPACK/qmcpack/develop/external_codes/quantum_espresso/add_pw2qmcpack_to_espresso-5.3.0.diff'
+ patch_checksum = '0d8d7ba805313ddd4c02ee32c96d2f12e7091e9e82e22671d3ad5a24247860c4'
+ depends_on('espresso@5.3.0~elpa',
+ patches=patch(patch_url, sha256=patch_checksum),
+ when='+mpi')
+
+ depends_on('espresso@5.3.0~elpa~scalapack~mpi',
+ patches=patch(patch_url, sha256=patch_checksum),
+ when='~mpi')
+
+ def patch(self):
+ # FindLibxml2QMC.cmake doesn't check the environment by default
+ # for libxml2, so we fix that.
+ filter_file(r'$ENV{LIBXML2_HOME}/lib',
+ '${LIBXML2_HOME}/lib $ENV{LIBXML2_HOME}/lib',
+ 'CMake/FindLibxml2QMC.cmake')
+
+ def cmake_args(self):
+ args = []
+
+ if '+mpi' in self.spec:
+ mpi = self.spec['mpi']
+ args.append('-DCMAKE_C_COMPILER={0}'.format(mpi.mpicc))
+ args.append('-DCMAKE_CXX_COMPILER={0}'.format(mpi.mpicxx))
+ args.append('-DMPI_BASE_DIR:PATH={0}'.format(mpi.prefix))
+
+ # Currently FFTW_HOME and LIBXML2_HOME are used by CMake.
+ # Any CMake warnings about other variables are benign.
+ xml2_prefix = self.spec['libxml2'].prefix
+ args.append('-DLIBXML2_HOME={0}'.format(xml2_prefix))
+ args.append('-DLibxml2_INCLUDE_DIRS={0}'.format(xml2_prefix.include))
+ args.append('-DLibxml2_LIBRARY_DIRS={0}'.format(xml2_prefix.lib))
+
+ fftw_prefix = self.spec['fftw'].prefix
+ args.append('-DFFTW_HOME={0}'.format(fftw_prefix))
+ args.append('-DFFTW_INCLUDE_DIRS={0}'.format(fftw_prefix.include))
+ args.append('-DFFTW_LIBRARY_DIRS={0}'.format(fftw_prefix.lib))
+
+ args.append('-DBOOST_ROOT={0}'.format(self.spec['boost'].prefix))
+ args.append('-DHDF5_ROOT={0}'.format(self.spec['hdf5'].prefix))
+
+ # Default is MPI, serial version is convenient for cases, e.g. laptops
+ if '+mpi' in self.spec:
+ args.append('-DQMC_MPI=1')
+ elif '~mpi' in self.spec:
+ args.append('-DQMC_MPI=0')
+
+ # Default is real-valued single particle orbitals
+ if '+complex' in self.spec:
+ args.append('-DQMC_COMPLEX=1')
+ elif '~complex' in self.spec:
+ args.append('-DQMC_COMPLEX=0')
+
+ # When '-DQMC_CUDA=1', CMake automatically sets:
+ # '-DQMC_MIXED_PRECISION=1'
+ #
+ # There is a double-precision CUDA path, but it is not as well
+ # tested.
+
+ if '+cuda' in self.spec:
+ args.append('-DQMC_CUDA=1')
+ elif '~cuda' in self.spec:
+ args.append('-DQMC_CUDA=0')
+
+ # Mixed-precision versues double-precision CPU and GPU code
+ if '+mixed' in self.spec:
+ args.append('-DQMC_MIXED_PRECISION=1')
+ elif '~mixed' in self.spec:
+ args.append('-DQMC_MIXED_PRECISION=0')
+
+ # New Structure-of-Array (SOA) code, much faster than default
+ # Array-of-Structure (AOS) code.
+ # No support for local atomic orbital basis.
+ if '+soa' in self.spec:
+ args.append('-DENABLE_SOA=1')
+ elif '~soa' in self.spec:
+ args.append('-DENABLE_SOA=0')
+
+ # Manual Timers
+ if '+timers' in self.spec:
+ args.append('-DENABLE_TIMERS=1')
+ elif '~timers' in self.spec:
+ args.append('-DENABLE_TIMERS=0')
+
+ # # Proper MKL detection not working.
+ # # Include MKL flags
+ # if 'intel-mkl' in self.spec:
+ # args.append('-DBLA_VENDOR=Intel10_64lp_seq')
+ # args.append('-DQMC_INCLUDE={0}'.format(join_path(env['MKLROOT'],'include')))
+ return args
+
+ # def setup_environment(self, spack_env, run_env):
+ # # Add MKLROOT/lib to the CMAKE_PREFIX_PATH to enable CMake to find
+ # # MKL libraries. MKLROOT environment variable must be defined for
+ # # this to work properly.
+ # if 'intel-mkl' in self.spec:
+ # spack_env.append_path('CMAKE_PREFIX_PATH',format(join_path(env['MKLROOT'],'lib')))
+
+ def install(self, spec, prefix):
+ """Make the install targets"""
+
+ # QMCPACK 'make install' does nothing, which causes
+ # Spack to throw an error.
+ #
+ # This install method creates the top level directory
+ # and copies the bin subdirectory into the appropriate
+ # location. We do not copy include or lib at this time due
+ # to technical difficulties in qmcpack itself.
+
+ mkdirp(prefix)
+
+ # We assume cwd is self.stage.source_path
+
+ # install manual
+ install_tree('manual', prefix.manual)
+
+ # install nexus
+ install_tree('nexus', prefix.nexus)
+
+ with working_dir(self.build_directory):
+ mkdirp(prefix)
+
+ # install binaries
+ install_tree('bin', prefix.bin)
+
+ @run_after('build')
+ @on_package_attributes(run_tests=True)
+ def check(self):
+ """Run ctest after building binary.
+ It can take over 24 hours to run all the regression tests, here we
+ only run the unit tests and short tests."""
+ with working_dir(self.build_directory):
+ ctest('-L', 'unit')
+ ctest('-R', 'short')
diff --git a/var/spack/repos/builtin/packages/qmd-progress/package.py b/var/spack/repos/builtin/packages/qmd-progress/package.py
new file mode 100644
index 0000000000..a880609e76
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qmd-progress/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 QmdProgress(CMakePackage):
+ """PROGRESS: Parallel, Rapid O(N) and Graph-based Recursive Electronic
+ Structure Solver.
+ This library is focused on the development of general solvers that are
+ commonly used in quantum chemistry packages."""
+
+ homepage = "https://github.com/lanl/qmd-progress"
+ url = "https://github.com/lanl/qmd-progress"
+
+ version('develop', git='https://github.com/lanl/qmd-progress', branch='master')
+ version('1.0.0', git='https://github.com/lanl/qmd-progress', tag='v1.0.0')
+
+ variant('graphlib', default=False, description='Build with Metis Suppport')
+ variant('mpi', default=True, description='Build with MPI Support')
+ variant('shared', default=True, description='Build shared libs')
+
+ depends_on('bml')
+ depends_on('mpi', when='+mpi')
+ depends_on('metis', when='+graphlib')
+
+ def cmake_args(self):
+ spec = self.spec
+ args = ['-DCMAKE_Fortran_FLAGS=-ffree-line-length-none']
+ if '+shared' in spec:
+ args.append('-DBUILD_SHARED_LIBS=ON')
+ else:
+ args.append('-DBUILD_SHARED_LIBS=OFF')
+ if '+mpi' in spec:
+ args.append('-DPROGRESS_MPI=yes')
+ args.append('-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc)
+ args.append('-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx)
+ args.append('-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc)
+ else:
+ args.append('-DPROGRESS_MPI=no')
+ if '+graphlib' in spec:
+ args.append('-DPROGRESS_GRAPHLIB=yes')
+ else:
+ args.append('-DPROGRESS_GRAPHLIB=no')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/qrupdate/package.py b/var/spack/repos/builtin/packages/qrupdate/package.py
index f6b4c80cf4..0856a4efb0 100644
--- a/var/spack/repos/builtin/packages/qrupdate/package.py
+++ b/var/spack/repos/builtin/packages/qrupdate/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/qt-creator/package.py b/var/spack/repos/builtin/packages/qt-creator/package.py
index 347cf4d6ee..c7484f9643 100644
--- a/var/spack/repos/builtin/packages/qt-creator/package.py
+++ b/var/spack/repos/builtin/packages/qt-creator/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,24 +23,37 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
-class QtCreator(Package):
+class QtCreator(QMakePackage):
"""The Qt Creator IDE."""
homepage = 'https://www.qt.io/ide/'
- url = 'http://download.qt.io/official_releases/qtcreator/4.1/4.1.0/qt-creator-opensource-src-4.1.0.tar.gz'
+ url = 'http://download.qt.io/official_releases/qtcreator/4.3/4.3.1/qt-creator-opensource-src-4.3.1.tar.gz'
list_url = 'http://download.qt.io/official_releases/qtcreator/'
- list_depth = 3
+ list_depth = 2
- version('4.1.0', '657727e4209befa4bf5889dff62d9e0a')
+ version('4.4.0', 'bae2e08bb5087aba65d41eb3f9328d9a')
+ version('4.3.1', '6769ea47f287e2d9e30ff92acb899eef')
+ version('4.1.0', '657727e4209befa4bf5889dff62d9e0a')
- depends_on("qt")
+ depends_on('qt@5.6.0:+opengl')
+ # Qt Creator comes bundled with its own copy of sqlite. Qt has a build
+ # dependency on Python, which has a dependency on sqlite. If Python is
+ # built with a different version of sqlite than the bundled copy, it will
+ # cause symbol conflict. Force Spack to build with the same version of
+ # sqlite as the bundled copy.
+ depends_on('sqlite@3.8.10.2')
- def install(self, spec, prefix):
- os.environ['INSTALL_ROOT'] = self.prefix
- qmake = which('qmake')
- qmake('-r')
- make()
- make("install")
+ # Qt Creator 4.3.0+ requires a C++14 compiler
+ conflicts('%gcc@:4.8', when='@4.3.0:')
+
+ def url_for_version(self, version):
+ url = 'http://download.qt.io/official_releases/qtcreator/{0}/{1}/qt-creator-opensource-src-{1}.tar.gz'
+ return url.format(version.up_to(2), version)
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('INSTALL_ROOT', self.prefix)
+
+ def qmake_args(self):
+ return ['-r']
diff --git a/var/spack/repos/builtin/packages/qt/QTBUG-57656.patch b/var/spack/repos/builtin/packages/qt/QTBUG-57656.patch
new file mode 100644
index 0000000000..b1ba47fa00
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qt/QTBUG-57656.patch
@@ -0,0 +1,17 @@
+diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
+index f6cbf99..ec31e45 100644
+--- a/qtbase/mkspecs/features/qt_module.prf
++++ b/qtbase/mkspecs/features/qt_module.prf
+@@ -68,9 +68,9 @@ load(qt_build_paths)
+
+ header_module {
+ TEMPLATE = aux
+- CONFIG += \
+- force_qt \ # Needed for the headers_clean tests.
+- qt_no_install_library
++ CONFIG += force_qt # Needed for the headers_clean tests.
++ !lib_bundle: \
++ CONFIG += qt_no_install_library
+ } else {
+ TEMPLATE = lib
+ }
diff --git a/var/spack/repos/builtin/packages/qt/QTBUG-58038.patch b/var/spack/repos/builtin/packages/qt/QTBUG-58038.patch
new file mode 100644
index 0000000000..c8d71105ab
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qt/QTBUG-58038.patch
@@ -0,0 +1,12 @@
+diff --git a/qtbase/src/3rdparty/freetype/freetype.pro b/qtbase/src/3rdparty/freetype/freetype.pro
+index 5b1eb92..390a6da 100644
+--- a/qtbase/src/3rdparty/freetype/freetype.pro
++++ b/qtbase/src/3rdparty/freetype/freetype.pro
+@@ -69,6 +69,7 @@ DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB
+ include(../zlib_dependency.pri)
+
+ DEFINES += FT_CONFIG_OPTION_USE_PNG
++include($$OUT_PWD/../../gui/qtgui-config.pri)
+ QMAKE_USE_PRIVATE += libpng
+
+ DEFINES += TT_CONFIG_OPTION_SUBPIXEL_HINTING
diff --git a/var/spack/repos/builtin/packages/qt/package.py b/var/spack/repos/builtin/packages/qt/package.py
index 95698018fa..fe29ced8a9 100644
--- a/var/spack/repos/builtin/packages/qt/package.py
+++ b/var/spack/repos/builtin/packages/qt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import platform
import os
import sys
@@ -30,10 +31,15 @@ import sys
class Qt(Package):
"""Qt is a comprehensive cross-platform C++ application framework."""
homepage = 'http://qt.io'
+ # Alternative location 'http://download.qt.io/official_releases/qt/'
url = 'http://download.qt.io/archive/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.gz'
list_url = 'http://download.qt.io/archive/qt/'
- list_depth = 4
+ list_depth = 3
+ version('5.9.1', '77b4af61c49a09833d4df824c806acaf')
+ version('5.9.0', '9c8bc8b828c2b56721980368266df9d9')
+ version('5.8.0', 'a9f2494f75f966e2f22358ec367d8f41')
+ version('5.7.1', '031fb3fd0c3cc0f1082644492683f18d')
version('5.7.0', '9a46cce61fc64c20c3ac0a0e0fa41b42')
version('5.5.1', '59f0216819152b77536cf660b015d784')
version('5.4.2', 'fa1c4d819b401b267eb246a543a63ea5')
@@ -45,19 +51,34 @@ class Qt(Package):
# Add patch for compile issues with qt3 found with use in the
# OpenSpeedShop project
- variant('krellpatch', default=False, description="Build with openspeedshop based patch.")
- variant('mesa', default=False, description="Depend on mesa.")
- variant('gtk', default=False, description="Build with gtkplus.")
- variant('webkit', default=False, description="Build the Webkit extension")
- variant('examples', default=False, description="Build examples.")
- variant('dbus', default=False, description="Build with D-Bus support.")
- variant('phonon', default=False, description="Build with phonon support.")
+ variant('krellpatch', default=False,
+ description="Build with openspeedshop based patch.")
+ variant('gtk', default=False,
+ description="Build with gtkplus.")
+ variant('webkit', default=False,
+ description="Build the Webkit extension")
+ variant('examples', default=False,
+ description="Build examples.")
+ variant('dbus', default=False,
+ description="Build with D-Bus support.")
+ variant('phonon', default=False,
+ description="Build with phonon support.")
+ variant('opengl', default=False,
+ description="Build with OpenGL support.")
patch('qt3krell.patch', when='@3.3.8b+krellpatch')
+ # see https://bugreports.qt.io/browse/QTBUG-57656
+ patch('QTBUG-57656.patch', when='@5.8.0')
+ # see https://bugreports.qt.io/browse/QTBUG-58038
+ patch('QTBUG-58038.patch', when='@5.8.0')
+
# https://github.com/xboxdrv/xboxdrv/issues/188
patch('btn_trigger_happy.patch', when='@5.7.0:')
+ # https://github.com/spack/spack/issues/1517
+ patch('qt5-pcre.patch', when='@5:')
+
patch('qt4-corewlan-new-osx.patch', when='@4')
patch('qt4-pcre-include-conflict.patch', when='@4')
patch('qt4-el-capitan.patch', when='@4')
@@ -75,16 +96,25 @@ class Qt(Package):
depends_on("libmng")
depends_on("jpeg")
depends_on("icu4c")
+ depends_on("fontconfig")
+ depends_on("freetype")
+ # FIXME:
+ # depends_on("freetype", when='@5.8:') and '-system-freetype'
+ # -system-harfbuzz
+ # -system-pcre
+
+ # QtQml
+ depends_on("python", when='@5.7.0:', type='build')
# OpenGL hardware acceleration
- depends_on("mesa", when='@4:+mesa')
+ depends_on("mesa", when='@4:+opengl')
depends_on("libxcb", when=sys.platform != 'darwin')
+ depends_on("libx11", when=sys.platform != 'darwin')
# Webkit
depends_on("flex", when='+webkit', type='build')
depends_on("bison", when='+webkit', type='build')
depends_on("gperf", when='+webkit')
- depends_on("fontconfig", when='+webkit')
# Multimedia
# depends_on("gstreamer", when='+multimedia')
@@ -99,9 +129,9 @@ class Qt(Package):
url = self.list_url
if version >= Version('4.0'):
- url += version.up_to(2) + '/'
+ url += str(version.up_to(2)) + '/'
else:
- url += version.up_to(1) + '/'
+ url += str(version.up_to(1)) + '/'
if version >= Version('4.8'):
url += str(version) + '/'
@@ -121,17 +151,22 @@ class Qt(Package):
elif version >= Version('3'):
url += 'free-'
- url += str(version) + '.tar.gz'
+ # 5.9 only has xz format. From 5.2.1 -> 5.8.0 .gz or .xz were possible
+ if version >= Version('5.9'):
+ url += str(version) + '.tar.xz'
+ else:
+ url += str(version) + '.tar.gz'
return url
def setup_environment(self, spack_env, run_env):
+ spack_env.set('MAKEFLAGS', '-j{0}'.format(make_jobs))
run_env.set('QTDIR', self.prefix)
- def setup_dependent_environment(self, spack_env, run_env, dspec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
spack_env.set('QTDIR', self.prefix)
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
module.qmake = Executable(join_path(self.spec.prefix.bin, 'qmake'))
def patch(self):
@@ -167,18 +202,35 @@ class Qt(Package):
'-prefix', self.prefix,
'-v',
'-opensource',
- '-opengl',
+ '-{0}opengl'.format('' if '+opengl' in self.spec else 'no-'),
'-release',
'-shared',
'-confirm-license',
'-openssl-linked',
'-optimized-qmake',
- '-no-openvg',
- '-no-pch',
- # NIS is deprecated in more recent glibc
- '-no-nis'
+ '-fontconfig',
+ '-system-freetype',
+ '-I{0}/freetype2'.format(self.spec['freetype'].prefix.include),
+ '-no-pch'
]
+ if '@:5.7.1' in self.spec:
+ config_args.append('-no-openvg')
+ else:
+ # FIXME: those could work for other versions
+ config_args.extend([
+ '-system-libpng',
+ '-system-libjpeg',
+ '-system-zlib'
+ ])
+
+ if '@:5.7.0' in self.spec:
+ config_args.extend([
+ # NIS is deprecated in more recent glibc,
+ # but qt-5.7.1 does not recognize this option
+ '-no-nis',
+ ])
+
if '~examples' in self.spec:
config_args.extend(['-nomake', 'examples'])
@@ -186,7 +238,12 @@ class Qt(Package):
config_args.append('-no-phonon')
if '+dbus' in self.spec:
+ dbus = self.spec['dbus'].prefix
config_args.append('-dbus-linked')
+ config_args.append('-I%s/dbus-1.0/include' % dbus.lib)
+ config_args.append('-I%s/dbus-1.0' % dbus.include)
+ config_args.append('-L%s' % dbus.lib)
+ config_args.append('-ldbus-1')
else:
config_args.append('-no-dbus')
@@ -199,25 +256,30 @@ class Qt(Package):
])
if '@4' in self.spec and sys.platform == 'darwin':
+ config_args.append('-cocoa')
+
+ mac_ver = tuple(platform.mac_ver()[0].split('.')[:2])
+ sdkname = 'macosx%s' % '.'.join(mac_ver)
sdkpath = which('xcrun')('--show-sdk-path',
- # XXX(macos): 10.11 SDK fails to configure
- '--sdk', 'macosx10.9',
+ '--sdk', sdkname,
output=str)
config_args.extend([
'-sdk', sdkpath.strip(),
])
use_clang_platform = False
if self.spec.compiler.name == 'clang' and \
- str(self.spec.compiler.version).endwith('-apple'):
+ str(self.spec.compiler.version).endswith('-apple'):
use_clang_platform = True
# No one uses gcc-4.2.1 anymore; this is clang.
if self.spec.compiler.name == 'gcc' and \
str(self.spec.compiler.version) == '4.2.1':
use_clang_platform = True
if use_clang_platform:
- config_args.extend([
- '-platform', 'unsupported/macx-clang',
- ])
+ config_args.append('-platform')
+ if mac_ver >= (10, 9):
+ config_args.append('unsupported/macx-clang-libc++')
+ else:
+ config_args.append('unsupported/macx-clang')
return config_args
@@ -226,8 +288,14 @@ class Qt(Package):
@when('@3')
def configure(self):
- # A user reported that this was necessary to link Qt3 on ubuntu
- os.environ['LD_LIBRARY_PATH'] = os.getcwd() + '/lib'
+ # A user reported that this was necessary to link Qt3 on ubuntu.
+ # However, if LD_LIBRARY_PATH is not set the qt build fails, check
+ # and set LD_LIBRARY_PATH if not set, update if it is set.
+ if os.environ.get('LD_LIBRARY_PATH'):
+ os.environ['LD_LIBRARY_PATH'] += os.pathsep + os.getcwd() + '/lib'
+ else:
+ os.environ['LD_LIBRARY_PATH'] = os.pathsep + os.getcwd() + '/lib'
+
configure('-prefix', self.prefix,
'-v',
'-thread',
diff --git a/var/spack/repos/builtin/packages/qt/qt5-pcre.patch b/var/spack/repos/builtin/packages/qt/qt5-pcre.patch
new file mode 100644
index 0000000000..8fdf25661c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qt/qt5-pcre.patch
@@ -0,0 +1,33 @@
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/RegExp.cpp 2016-09-17 20:55:14.000000000 +0000
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/runtime/RegExp.cpp 2017-05-17 01:55:10.000000000 +0000
+@@ -44,7 +44,7 @@
+ #include "JIT.h"
+ #include "WRECGenerator.h"
+ #endif
+-#include <pcre/pcre.h>
++#include "../pcre/pcre.h"
+
+ #endif
+
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexJIT.cpp 2016-09-17 20:55:14.000000000 +0000
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexJIT.cpp 2017-05-17 01:55:51.000000000 +0000
+@@ -32,7 +32,7 @@
+ #include "MacroAssembler.h"
+ #include "RegexCompiler.h"
+
+-#include "pcre.h" // temporary, remove when fallback is removed.
++#include "../pcre/pcre.h" // temporary, remove when fallback is removed.
+
+ #if ENABLE(YARR_JIT)
+
+--- a/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexJIT.h 2016-09-17 20:55:14.000000000 +0000
++++ b/qtscript/src/3rdparty/javascriptcore/JavaScriptCore/yarr/RegexJIT.h 2017-05-17 01:55:36.000000000 +0000
+@@ -34,7 +34,7 @@
+ #include "RegexPattern.h"
+ #include <UString.h>
+
+-#include <pcre.h>
++#include "../pcre/pcre.h"
+ struct JSRegExp; // temporary, remove when fallback is removed.
+
+ #if CPU(X86) && !COMPILER(MSVC)
diff --git a/var/spack/repos/builtin/packages/qtgraph/package.py b/var/spack/repos/builtin/packages/qtgraph/package.py
new file mode 100644
index 0000000000..742b51dd1f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qtgraph/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/spack/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
+##############################################################################
+##############################################################################
+# Copyright (c) 2015-2017 Krell Institute. All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+#
+# 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 GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU 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 Qtgraph(QMakePackage):
+ """The baseline library used in the CUDA-centric Open|SpeedShop Graphical
+ User Interface (GUI) which allows Graphviz DOT formatted data to be
+ imported into a Qt application by wrapping the Graphviz libcgraph and
+ libgvc within the Qt Graphics View Framework."""
+
+ homepage = "https://github.com/OpenSpeedShop/QtGraph"
+
+ url = "https://github.com/OpenSpeedShop/QtGraph.git"
+ version('1.0.0', branch='master',
+ git='https://github.com/OpenSpeedShop/QtGraph.git')
+
+ # qtgraph depends on these packages
+ depends_on('qt@4.8.6:')
+ depends_on('graphviz')
+
+ def setup_environment(self, spack_env, run_env):
+ """Set up the compile and runtime environments for a package."""
+ spack_env.set('GRAPHVIZ_ROOT', self.spec['graphviz'].prefix)
+ spack_env.set('INSTALL_ROOT', self.prefix)
+
+ # The implementor has set up the library and include paths in
+ # a non-conventional way. We reflect that here.
+ run_env.prepend_path(
+ 'LD_LIBRARY_PATH', join_path(
+ self.prefix.lib64,
+ '{0}'.format(self.spec['qt'].version.up_to(3))))
+
+ run_env.prepend_path('CPATH', self.prefix.include.QtGraph)
diff --git a/var/spack/repos/builtin/packages/qthreads/package.py b/var/spack/repos/builtin/packages/qthreads/package.py
index aa2f0ac67a..b06e824681 100644
--- a/var/spack/repos/builtin/packages/qthreads/package.py
+++ b/var/spack/repos/builtin/packages/qthreads/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Qthreads(Package):
+class Qthreads(AutotoolsPackage):
"""The qthreads API is designed to make using large numbers of
threads convenient and easy, and to allow portable access to
threading constructs used in massively parallel shared memory
@@ -39,6 +39,7 @@ class Qthreads(Package):
homepage = "http://www.cs.sandia.gov/qthreads/"
url = "https://github.com/Qthreads/qthreads/releases/download/1.10/qthread-1.10.tar.bz2"
+ version("1.12", "c857d175f8135eaa669f3f8fa0fb0c09")
version("1.11", "68b5f9a41cfd1a2ac112cc4db0612326")
version("1.10", "d1cf3cf3f30586921359f7840171e551")
@@ -47,10 +48,10 @@ class Qthreads(Package):
depends_on("hwloc")
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--enable-guard-pages",
- "--with-topology=hwloc",
- "--with-hwloc=%s" % spec["hwloc"].prefix)
- make()
- make("install")
+ def configure_args(self):
+ spec = self.spec
+ args = [
+ "--enable-guard-pages",
+ "--with-topology=hwloc",
+ "--with-hwloc=%s" % spec["hwloc"].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/quinoa/package.py b/var/spack/repos/builtin/packages/quinoa/package.py
new file mode 100644
index 0000000000..5a47d355d9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/quinoa/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 *
+
+
+class Quinoa(CMakePackage):
+ """Quinoa is a set of computational tools that enables research and
+ numerical analysis in fluid dynamics. At this time it is a test-bed
+ to experiment with various algorithms using fully asynchronous runtime
+ systems.
+ """
+
+ homepage = "http://quinoacomputing.org"
+ url = "https://github.com/quinoacomputing/quinoa/tarball/quinoa_v0.1"
+
+ version('develop', git='https://github.com/quinoacomputing/quinoa', branch='master')
+
+ depends_on('hdf5+mpi')
+ depends_on("charm backend=mpi")
+ depends_on("trilinos+exodus")
+ depends_on("boost")
+ depends_on("hypre~internal-superlu")
+ depends_on("random123")
+ depends_on("netlib-lapack+lapacke")
+ depends_on("mad-numdiff")
+ depends_on("h5part")
+ depends_on("boostmplcartesianproduct")
+ depends_on("tut")
+ depends_on("pugixml")
+ depends_on("pstreams")
+ depends_on("pegtl")
+
+ root_cmakelists_dir = 'src'
diff --git a/var/spack/repos/builtin/packages/qwt/package.py b/var/spack/repos/builtin/packages/qwt/package.py
new file mode 100644
index 0000000000..cef42d73e1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/qwt/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Qwt(QMakePackage):
+ """The Qwt library contains GUI Components and utility classes which are
+ primarily useful for programs with a technical background. Beside a
+ framework for 2D plots it provides scales, sliders, dials, compasses,
+ thermometers, wheels and knobs to control or display values, arrays, or
+ ranges of type double.
+ """
+ homepage = "http://qwt.sourceforge.net/"
+ url = "https://sourceforge.net/projects/qwt/files/qwt/6.1.3/qwt-6.1.3.tar.bz2"
+
+ version('6.1.3', '19d1f5fa5e22054d22ee3accc37c54ba')
+ version('5.2.2', '70d77e4008a6cc86763737f0f24726ca')
+
+ depends_on('qt+opengl')
+ # Qwt 6.1.1 and older use a constant that was removed in Qt 5.4
+ # https://bugs.launchpad.net/ubuntu/+source/qwt-qt5/+bug/1485213
+ depends_on('qt@:5.3', when='@:6.1.1')
+
+ def patch(self):
+ # Subvert hardcoded prefix
+ filter_file(r'/usr/local/qwt-\$\$(QWT_)?VERSION.*',
+ self.prefix, 'qwtconfig.pri')
diff --git a/var/spack/repos/builtin/packages/r-a4/package.py b/var/spack/repos/builtin/packages/r-a4/package.py
new file mode 100644
index 0000000000..248e0c41f8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RA4(RPackage):
+ """Automated Affymetrix Array Analysis Umbrella Package."""
+
+ homepage = "https://www.bioconductor.org/packages/a4/"
+ url = "https://git.bioconductor.org/packages/a4"
+ list_url = homepage
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4', commit='79b5143652176787c85a0d587b3bbfad6b4a19f4')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-a4base', type=('build', 'run'))
+ depends_on('r-a4preproc', type=('build', 'run'))
+ depends_on('r-a4classif', type=('build', 'run'))
+ depends_on('r-a4core', type=('build', 'run'))
+ depends_on('r-a4reporting', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-a4base/package.py b/var/spack/repos/builtin/packages/r-a4base/package.py
new file mode 100644
index 0000000000..bc18cae16d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4base/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RA4base(RPackage):
+ """Automated Affymetrix Array Analysis."""
+
+ homepage = "https://www.bioconductor.org/packages/a4Base/"
+ url = "'https://git.bioconductor.org/packages/a4Base'"
+ list_url = homepage
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4Base', commit='f674afe424a508df2c8ee6c87a06fbd4aa410ef6')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-annaffy', type=('build', 'run'))
+ depends_on('r-mpm', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-multtest', type=('build', 'run'))
+ depends_on('r-glmnet', type=('build', 'run'))
+ depends_on('r-a4preproc', type=('build', 'run'))
+ depends_on('r-a4core', type=('build', 'run'))
+ depends_on('r-gplots', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-a4classif/package.py b/var/spack/repos/builtin/packages/r-a4classif/package.py
new file mode 100644
index 0000000000..18a2e1b390
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4classif/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RA4classif(RPackage):
+ """Automated Affymetrix Array Analysis Classification Package."""
+
+ homepage = "https://www.bioconductor.org/packages/a4Classif/"
+ url = "https://git.bioconductor.org/packages/a4Classif"
+ list_url = homepage
+
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4Classif', commit='ca06bf274c87a73fc12c29a6eea4b90289fe30b1')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-a4core', type=('build', 'run'))
+ depends_on('r-a4preproc', type=('build', 'run'))
+ depends_on('r-mlinterfaces', type=('build', 'run'))
+ depends_on('r-rocr', type=('build', 'run'))
+ depends_on('r-pamr', type=('build', 'run'))
+ depends_on('r-glmnet', type=('build', 'run'))
+ depends_on('r-varselrf', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-a4core/package.py b/var/spack/repos/builtin/packages/r-a4core/package.py
new file mode 100644
index 0000000000..d01514d499
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4core/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RA4core(RPackage):
+ """Automated Affymetrix Array Analysis Core Package."""
+
+ homepage = "https://www.bioconductor.org/packages/a4Core/"
+ url = "https://git.bioconductor.org/packages/a4Core"
+
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4Core', commit='c871faa3e1ab6be38a9ea3018816cf31b58b0ed3')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-glmnet', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-a4preproc/package.py b/var/spack/repos/builtin/packages/r-a4preproc/package.py
new file mode 100644
index 0000000000..3410b0640b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4preproc/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RA4preproc(RPackage):
+ """Automated Affymetrix Array Analysis Preprocessing Package."""
+
+ homepage = "https://www.bioconductor.org/packages/a4Preproc/"
+ url = "https://git.bioconductor.org/packages/a4Preproc"
+
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4Preproc', commit='651014b8102807aea4f1274e34e083e70b5e7ee7')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-annotationdbi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-a4reporting/package.py b/var/spack/repos/builtin/packages/r-a4reporting/package.py
new file mode 100644
index 0000000000..352d35b38a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-a4reporting/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RA4reporting(RPackage):
+ """Automated Affymetrix Array Analysis Reporting Package."""
+
+ homepage = "https://www.bioconductor.org/packages/a4Reporting"
+ url = "https://git.bioconductor.org/packages/a4Reporting"
+ list_url = homepage
+ version('1.24.0', git='https://git.bioconductor.org/packages/a4Reporting', commit='bf22c4d50daf40fc9eaf8c476385bf4a24a5b5ce')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-annaffy', type=('build', 'run'))
+ depends_on('r-xtable', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-abadata/package.py b/var/spack/repos/builtin/packages/r-abadata/package.py
new file mode 100644
index 0000000000..0d92e3e540
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-abadata/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RAbadata(RPackage):
+ """Provides the data for the gene expression enrichment analysis
+ conducted in the package 'ABAEnrichment'. The package includes three
+ datasets which are derived from the Allen Brain Atlas: (1) Gene
+ expression data from Human Brain (adults) averaged across donors,
+ (2) Gene expression data from the Developing Human Brain pooled into
+ five age categories and averaged across donors and (3) a developmental
+ effect score based on the Developing Human Brain expression data.
+ All datasets are restricted to protein coding genes."""
+
+ homepage = "https://bioconductor.org/packages/ABAData/"
+ url = "https://bioconductor.org/packages/release/data/experiment/src/contrib/ABAData_1.6.0.tar.gz"
+
+ version('1.6.0', '9adfb9fbb39ad05cf72852a229476fb7')
diff --git a/var/spack/repos/builtin/packages/r-abaenrichment/package.py b/var/spack/repos/builtin/packages/r-abaenrichment/package.py
new file mode 100644
index 0000000000..c3e903e248
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-abaenrichment/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RAbaenrichment(RPackage):
+ """The package ABAEnrichment is designed to test for enrichment
+ of user defined candidate genes in the set of expressed genes in
+ different human brain regions. The core function 'aba_enrich'
+ integrates the expression of the candidate gene set (averaged
+ across donors) and the structural information of the brain using
+ an ontology, both provided by the Allen Brain Atlas project.
+ 'aba_enrich' interfaces the ontology enrichment software FUNC to
+ perform the statistical analyses. Additional functions provided
+ in this package like 'get_expression' and 'plot_expression'
+ facilitate exploring the expression data. From version 1.3.5
+ onwards genomic regions can be provided as input, too; and from
+ version 1.5.9 onwards the function 'get_annotated_genes' offers
+ an easy way to obtain annotations of genes to enriched or
+ user-defined brain regions."""
+
+ homepage = "https://bioconductor.org/packages/ABAEnrichment/"
+ url = "https://git.bioconductor.org/packages/ABAEnrichment"
+
+ version('1.6.0', git='https://git.bioconductor.org/packages/ABAEnrichment', commit='d2a0467dcb7aa6e103e3b83dccd6510b0e142ac1')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.6.0')
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-gplots', type=('build', 'run'))
+ depends_on('r-gtools', type=('build', 'run'))
+ depends_on('r-abadata', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-abind/package.py b/var/spack/repos/builtin/packages/r-abind/package.py
index 81fa319a90..768e930f4b 100644
--- a/var/spack/repos/builtin/packages/r-abind/package.py
+++ b/var/spack/repos/builtin/packages/r-abind/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-absseq/package.py b/var/spack/repos/builtin/packages/r-absseq/package.py
new file mode 100644
index 0000000000..e3a094c97c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-absseq/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RAbsseq(RPackage):
+ """Inferring differential expression genes by absolute counts
+ difference between two groups, utilizing Negative binomial
+ distribution and moderating fold-change according to heterogeneity
+ of dispersion across expression level."""
+
+ homepage = "https://www.bioconductor.org/packages/ABSSeq/"
+ url = "https://git.bioconductor.org/packages/ABSSeq"
+
+ version('1.22.8', git='https://git.bioconductor.org/packages/ABSSeq', commit='a67ba49bc156a4522092519644f3ec83d58ebd6a')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.22.8')
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-acde/package.py b/var/spack/repos/builtin/packages/r-acde/package.py
new file mode 100644
index 0000000000..fd8677d42e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-acde/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RAcde(RPackage):
+ """This package provides a multivariate inferential analysis method
+ for detecting differentially expressed genes in gene expression data.
+ It uses artificial components, close to the data's principal
+ components but with an exact interpretation in terms of differential
+ genetic expression, to identify differentially expressed genes while
+ controlling the false discovery rate (FDR). The methods on this
+ package are described in the vignette or in the article
+ 'Multivariate Method for Inferential Identification of
+ Differentially Expressed Genes in Gene Expression Experiments' by
+ J. P. Acosta, L. Lopez-Kleine and S. Restrepo
+ (2015, pending publication)."""
+
+ homepage = "https://www.bioconductor.org/packages/acde/"
+ url = "https://www.bioconductor.org/packages/release/bioc/src/contrib/acde_1.6.0.tar.gz"
+
+ version('1.6.0', 'e92ce91f75bab3bb1d79995bec1b42cc')
+
+ depends_on('r-boot', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-acepack/package.py b/var/spack/repos/builtin/packages/r-acepack/package.py
new file mode 100644
index 0000000000..be5d20f6ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-acepack/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RAcepack(RPackage):
+ """ACE and AVAS for Selecting Multiple Regression Transformations."""
+
+ homepage = "https://CRAN.R-project.org/package=acepack"
+ url = "https://cran.rstudio.com/src/contrib/acepack_1.4.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/acepack"
+
+ version('1.4.1', 'a35354655e5260afa0e1860fcc68d871')
diff --git a/var/spack/repos/builtin/packages/r-acgh/package.py b/var/spack/repos/builtin/packages/r-acgh/package.py
new file mode 100644
index 0000000000..f2e923ca3e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-acgh/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RAcgh(RPackage):
+ """Functions for reading aCGH data from image analysis output files
+ and clone information files, creation of aCGH S3 objects for storing
+ these data. Basic methods for accessing/replacing, subsetting,
+ printing and plotting aCGH objects."""
+
+ homepage = "https://www.bioconductor.org/packages/aCGH/"
+ url = "https://git.bioconductor.org/packages/aCGH"
+
+ version('1.54.0', git='https://git.bioconductor.org/packages/aCGH', commit='be2ed339449f55c8d218e10c435e4ad356683693')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
+ depends_on('r-cluster', type=('build', 'run'))
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-multtest', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-acme/package.py b/var/spack/repos/builtin/packages/r-acme/package.py
new file mode 100644
index 0000000000..168f2044d5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-acme/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RAcme(RPackage):
+ """ACME (Algorithms for Calculating Microarray Enrichment) is a set
+ of tools for analysing tiling array ChIP/chip, DNAse hypersensitivity,
+ or other experiments that result in regions of the genome showing
+ "enrichment". It does not rely on a specific array technology
+ (although the array should be a "tiling" array), is very general
+ (can be applied in experiments resulting in regions of enrichment),
+ and is very insensitive to array noise or normalization methods.
+ It is also very fast and can be applied on whole-genome tiling array
+ experiments quite easily with enough memory."""
+
+ homepage = "https://www.bioconductor.org/packages/ACME/"
+ url = "https://git.bioconductor.org/packages/ACME"
+
+ version('2.32.0', git='https://git.bioconductor.org/packages/ACME', commit='76372255d7714a0c8128a11c028bf70214dac407')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.32.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ada/package.py b/var/spack/repos/builtin/packages/r-ada/package.py
new file mode 100644
index 0000000000..fbd4c0f167
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ada/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RAda(RPackage):
+ """Performs discrete, real, and gentle boost under both exponential
+ and logistic loss on a given data set."""
+
+ homepage = "https://cran.r-project.org/web/packages/ada/index.html"
+ url = "https://cran.r-project.org/src/contrib/ada_2.0-5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ada"
+
+ version('2.0-5', '25ac0dc2650fba9e19f3d15c7c6721c1')
+
+ depends_on('r-rpart', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-adabag/package.py b/var/spack/repos/builtin/packages/r-adabag/package.py
new file mode 100644
index 0000000000..407d0ad1ab
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-adabag/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RAdabag(RPackage):
+ """Applies Multiclass AdaBoost.M1, SAMME and Bagging."""
+
+ homepage = "https://cran.r-project.org/package=adabag"
+ url = "https://cran.r-project.org/src/contrib/adabag_4.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/adabag"
+
+ version('4.1', '2e019f053d49f62ebb3b1697bbb50afa')
+
+ depends_on('r-rpart', type=('build', 'run'))
+ depends_on('r-mlbench', type=('build', 'run'))
+ depends_on('r-caret', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ade4/package.py b/var/spack/repos/builtin/packages/r-ade4/package.py
new file mode 100644
index 0000000000..39b21c3373
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ade4/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RAde4(RPackage):
+ """Analysis of Ecological Data : Exploratory and Euclidean Methods in
+ Environmental Sciences"""
+
+ homepage = "http://pbil.univ-lyon1.fr/ADE-4"
+ url = "https://cran.r-project.org/src/contrib/ade4_1.7-6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ade4"
+
+ version('1.7-6', '63401ca369677538c96c3d7b75b3f4a1')
+
+ depends_on('r@2.10:')
diff --git a/var/spack/repos/builtin/packages/r-adegenet/package.py b/var/spack/repos/builtin/packages/r-adegenet/package.py
new file mode 100644
index 0000000000..64c475bc1f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-adegenet/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 RAdegenet(RPackage):
+ """Toolset for the exploration of genetic and genomic data. Adegenet
+ provides formal (S4) classes for storing and handling various genetic
+ data, including genetic markers with varying ploidy and hierarchical
+ population structure ('genind' class), alleles counts by populations
+ ('genpop'), and genome-wide SNP data ('genlight'). It also implements
+ original multivariate methods (DAPC, sPCA), graphics, statistical tests,
+ simulation tools, distance and similarity measures, and several spatial
+ methods. A range of both empirical and simulated datasets is also provided
+ to illustrate various methods."""
+
+ homepage = "https://github.com/thibautjombart/adegenet/wiki"
+ url = "https://cran.r-project.org/src/contrib/adegenet_2.0.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/adegenet"
+
+ version('2.0.1', 'ecb1220ce7c9affaba2987bc7f38adda')
+
+ depends_on('r@2.14:')
+ depends_on('r-ade4', type=('build', 'run'))
+ depends_on('r-igraph', type=('build', 'run'))
+ depends_on('r-ape', type=('build', 'run'))
+ depends_on('r-shiny', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-seqinr', type=('build', 'run'))
+ depends_on('r-spdep', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-dplyr@0.4.1:', type=('build', 'run'))
+ depends_on('r-vegan', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-adsplit/package.py b/var/spack/repos/builtin/packages/r-adsplit/package.py
new file mode 100644
index 0000000000..f862b1e581
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-adsplit/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RAdsplit(RPackage):
+ """This package implements clustering of microarray gene expression
+ profiles according to functional annotations. For each term genes
+ are annotated to, splits into two subclasses are computed and a
+ significance of the supporting gene set is determined."""
+
+ homepage = "https://www.bioconductor.org/packages/adSplit/"
+ url = "https://git.bioconductor.org/packages/adSplit"
+
+ version('1.46.0', git='https://git.bioconductor.org/packages/adSplit', commit='7e81a83f34d371447f491b3a146bf6851e260c7c')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.46.0')
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-cluster', type=('build', 'run'))
+ depends_on('r-go-db', type=('build', 'run'))
+ depends_on('r-kegg-db', type=('build', 'run'))
+ depends_on('r-multtest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affxparser/package.py b/var/spack/repos/builtin/packages/r-affxparser/package.py
new file mode 100644
index 0000000000..1fd1dc5e85
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affxparser/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RAffxparser(RPackage):
+ """Package for parsing Affymetrix files (CDF, CEL, CHP, BPMAP, BAR).
+ It provides methods for fast and memory efficient parsing of
+ Affymetrix files using the Affymetrix' Fusion SDK. Both ASCII-
+ and binary-based files are supported. Currently, there are methods
+ for reading chip definition file (CDF) and a cell intensity file (CEL).
+ These files can be read either in full or in part. For example,
+ probe signals from a few probesets can be extracted very quickly
+ from a set of CEL files into a convenient list structure."""
+
+ homepage = "https://www.bioconductor.org/packages/affxparser/"
+ url = "https://git.bioconductor.org/packages/affxparser"
+ list_url = homepage
+
+ version('1.48.0', git='https://git.bioconductor.org/packages/affxparser', commit='2461ea88f310b59c4a9a997a4b3dadedbd65a4aa')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.48.0')
diff --git a/var/spack/repos/builtin/packages/r-affy/package.py b/var/spack/repos/builtin/packages/r-affy/package.py
new file mode 100644
index 0000000000..6be405c38b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affy/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RAffy(RPackage):
+ """The package contains functions for exploratory oligonucleotide array
+ analysis. The dependence on tkWidgets only concerns few convenience
+ functions. 'affy' is fully functional without it."""
+
+ homepage = "https://bioconductor.org/packages/affy/"
+ url = "https://git.bioconductor.org/packages/affy"
+ list_url = homepage
+
+ version('1.54.0', git='https://git.bioconductor.org/packages/affy', commit='a815f02906fcf491b28ed0a356d6fce95a6bd20e')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affyio', type=('build', 'run'))
+ depends_on('r-biocinstaller', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
diff --git a/var/spack/repos/builtin/packages/r-affycomp/package.py b/var/spack/repos/builtin/packages/r-affycomp/package.py
new file mode 100644
index 0000000000..16593472ad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affycomp/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RAffycomp(RPackage):
+ """The package contains functions that can be used to compare
+ expression measures for Affymetrix Oligonucleotide Arrays."""
+
+ homepage = "https://www.bioconductor.org/packages/affycomp/"
+ url = "https://git.bioconductor.org/packages/affycomp"
+
+ version('1.52.0', git='https://git.bioconductor.org/packages/affycomp', commit='1b97a1cb21ec93bf1e5c88d5d55b988059612790')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.52.0')
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affycompatible/package.py b/var/spack/repos/builtin/packages/r-affycompatible/package.py
new file mode 100644
index 0000000000..68f6f5c450
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affycompatible/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RAffycompatible(RPackage):
+ """This package provides an interface to Affymetrix chip annotation
+ and sample attribute files. The package allows an easy way for users
+ to download and manage local data bases of Affynmetrix NetAffx
+ annotation files. The package also provides access to GeneChip
+ Operating System (GCOS) and GeneChip Command Console
+ (AGCC)-compatible sample annotation files."""
+
+ homepage = "https://www.bioconductor.org/packages/AffyCompatible/"
+ url = "https://git.bioconductor.org/packages/AffyCompatible"
+
+ version('1.36.0', 'https://git.bioconductor.org/packages/AffyCompatible', commit='dbbfd43a54ae1de6173336683a9461084ebf38c3')
+
+ depends_on('r@3.4.0:3.4.9', when=('@1.36.0'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affycontam/package.py b/var/spack/repos/builtin/packages/r-affycontam/package.py
new file mode 100644
index 0000000000..c2c08be3d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affycontam/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RAffycontam(RPackage):
+ """structured corruption of cel file data to demonstrate QA
+ effectiveness."""
+
+ homepage = "https://www.bioconductor.org/packages/affyContam/"
+ url = "https://git.bioconductor.org/packages/affyContam"
+
+ version('1.34.0', git='https://git.bioconductor.org/packages/affyContam', commit='03529f26d059c19e069cdda358dbf7789b6d4c40')
+
+ depends_on('r@3.4.0:3.4.9', when=('@1.34.0'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-affydata', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affycoretools/package.py b/var/spack/repos/builtin/packages/r-affycoretools/package.py
new file mode 100644
index 0000000000..303b7255f8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affycoretools/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 RAffycoretools(RPackage):
+ """Various wrapper functions that have been written to streamline
+ the more common analyses that a core Biostatistician might see."""
+
+ homepage = "https://www.bioconductor.org/packages/affycoretools/"
+ url = "https://git.bioconductor.org/packages/affycoretools"
+
+ version('1.48.0', git='https://git.bioconductor.org/packages/affycoretools', commit='e0d52e34eead1ac45d3e60c59efd940e4889eb99')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.48.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-gostats', type=('build', 'run'))
+ depends_on('r-gcrma', type=('build', 'run'))
+ depends_on('r-xtable', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-gplots', type=('build', 'run'))
+ depends_on('r-oligoclasses', type=('build', 'run'))
+ depends_on('r-reportingtools', type=('build', 'run'))
+ depends_on('r-hwriter', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-edger', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affydata/package.py b/var/spack/repos/builtin/packages/r-affydata/package.py
new file mode 100644
index 0000000000..9fa647f282
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affydata/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RAffydata(RPackage):
+ """Example datasets of a slightly large size. They represent 'real
+ world examples', unlike the artificial examples included in the
+ package affy."""
+
+ homepage = "https://www.bioconductor.org/packages/affydata/"
+ url = "https://www.bioconductor.org/packages/release/data/experiment/src/contrib/affydata_1.24.0.tar.gz"
+
+ version('1.24.0', '0b6938685c450a56d65dd5628ebed42d')
+
+ depends_on('r@3.4.0:3.4.9', when=('@1.24.0'))
+ depends_on('r-affy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyexpress/package.py b/var/spack/repos/builtin/packages/r-affyexpress/package.py
new file mode 100644
index 0000000000..0e3a8f19d7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyexpress/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RAffyexpress(RPackage):
+ """The purpose of this package is to provide a comprehensive and
+ easy-to-use tool for quality assessment and to identify differentially
+ expressed genes in the Affymetrix gene expression data."""
+
+ homepage = "https://www.bioconductor.org/packages/AffyExpress/"
+ url = "https://git.bioconductor.org/packages/AffyExpress"
+
+ version('1.42.0', git='https://git.bioconductor.org/packages/AffyExpress', commit='f5c5cf6173f4419e25f4aeff5e6b705a40abc371')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.42.0')
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyilm/package.py b/var/spack/repos/builtin/packages/r-affyilm/package.py
new file mode 100644
index 0000000000..7b854bc262
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyilm/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RAffyilm(RPackage):
+ """affyILM is a preprocessing tool which estimates gene
+ expression levels for Affymetrix Gene Chips. Input from
+ physical chemistry is employed to first background subtract
+ intensities before calculating concentrations on behalf
+ of the Langmuir model."""
+
+ homepage = "https://www.bioconductor.org/packages/affyILM/"
+ url = "https://git.bioconductor.org/packages/affyILM"
+
+ version('1.28.0', git='https://git.bioconductor.org/packages/affyILM', commit='307bee3ebc599e0ea4a1d6fa8d5511ccf8bef7de')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.28.0')
+ depends_on('r-gcrma', type=('build', 'run'))
+ depends_on('r-affxparser', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyio/package.py b/var/spack/repos/builtin/packages/r-affyio/package.py
new file mode 100644
index 0000000000..ed1f9ff265
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyio/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RAffyio(RPackage):
+ """Routines for parsing Affymetrix data files based upon file format
+ information. Primary focus is on accessing the CEL and CDF file
+ formats."""
+
+ homepage = "https://bioconductor.org/packages/affyio/"
+ url = "https://git.bioconductor.org/packages/affyio"
+ list_url = homepage
+
+ version('1.46.0', git='https://git.bioconductor.org/packages/affyio', commit='977597f2772e08273d86579486f452170566c880')
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.46.0')
diff --git a/var/spack/repos/builtin/packages/r-affypdnn/package.py b/var/spack/repos/builtin/packages/r-affypdnn/package.py
new file mode 100644
index 0000000000..6fa1136468
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affypdnn/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RAffypdnn(RPackage):
+ """The package contains functions to perform the PDNN method
+ described by Li Zhang et al."""
+
+ homepage = "https://www.bioconductor.org/packages/affypdnn/"
+ url = "https://git.bioconductor.org/packages/affypdnn"
+
+ version('1.50.0', git='https://git.bioconductor.org/packages/affypdnn', commit='97ff68e9f51f31333c0330435ea23b212b3ed18a')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.50.0')
+ depends_on('r-affy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyplm/package.py b/var/spack/repos/builtin/packages/r-affyplm/package.py
new file mode 100644
index 0000000000..f73b7ca19f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyplm/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RAffyplm(RPackage):
+ """A package that extends and improves the functionality of
+ the base affy package. Routines that make heavy use of compiled
+ code for speed. Central focus is on implementation of methods
+ for fitting probe-level models and tools using these models.
+ PLM based quality assessment tools."""
+
+ homepage = "https://www.bioconductor.org/packages/affyPLM/"
+ url = "https://git.bioconductor.org/packages/affyPLM"
+
+ version('1.52.1', git='https://git.bioconductor.org/packages/affyPLM', commit='e8613a6018c4ee58045df6bf19128844f50a1f43')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.52.1')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-gcrma', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyqcreport/package.py b/var/spack/repos/builtin/packages/r-affyqcreport/package.py
new file mode 100644
index 0000000000..a7b9f2aa3c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyqcreport/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RAffyqcreport(RPackage):
+ """This package creates a QC report for an AffyBatch object.
+ The report is intended to allow the user to quickly assess the
+ quality of a set of arrays in an AffyBatch object."""
+
+ homepage = "https://www.bioconductor.org/packages/affyQCReport/"
+ url = "https://git.bioconductor.org/packages/affyQCReport"
+
+ version('1.54.0', git='https://git.bioconductor.org/packages/affyQCReport', commit='5572e9981dc874b78b4adebf58080cac3fbb69e1')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-affyplm', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-simpleaffy', type=('build', 'run'))
+ depends_on('r-xtable', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-affyrnadegradation/package.py b/var/spack/repos/builtin/packages/r-affyrnadegradation/package.py
new file mode 100644
index 0000000000..0a5d5f315c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-affyrnadegradation/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RAffyrnadegradation(RPackage):
+ """The package helps with the assessment and correction of
+ RNA degradation effects in Affymetrix 3' expression arrays.
+ The parameter d gives a robust and accurate measure of RNA
+ integrity. The correction removes the probe positional bias,
+ and thus improves comparability of samples that are affected
+ by RNA degradation."""
+
+ homepage = "https://www.bioconductor.org/packages/AffyRNADegradation/"
+ url = "https://git.bioconductor.org/packages/AffyRNADegradation"
+
+ version('1.22.0', git='https://git.bioconductor.org/packages/AffyRNADegradation', commit='0fa78f8286494711a239ded0ba587b0de47c15d3')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.22.0')
+ depends_on('r-affy', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-agdex/package.py b/var/spack/repos/builtin/packages/r-agdex/package.py
new file mode 100644
index 0000000000..8abec46a01
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-agdex/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RAgdex(RPackage):
+ """A tool to evaluate agreement of differential expression
+ for cross-species genomics."""
+
+ homepage = "http://bioconductor.org/packages/AGDEX/"
+ url = "https://git.bioconductor.org/packages/AGDEX"
+
+ version('1.24.0', git='https://git.bioconductor.org/packages/AGDEX', commit='29c6bcfa6919a5c6d8bcb36b44e75145a60ce7b5')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-gseabase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-agilp/package.py b/var/spack/repos/builtin/packages/r-agilp/package.py
new file mode 100644
index 0000000000..15aba2cdce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-agilp/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RAgilp(RPackage):
+ """Agilent expression array processing package."""
+
+ homepage = "http://bioconductor.org/packages/agilp/"
+ url = "https://git.bioconductor.org/packages/agilp"
+
+ version('3.8.0', git='https://git.bioconductor.org/packages/agilp', commit='c772a802af1b4c0741f2edd78053a0425160ea53')
+
+ depends_on('r@3.4.0:3.4.9', when='@3.8.0')
diff --git a/var/spack/repos/builtin/packages/r-agimicrorna/package.py b/var/spack/repos/builtin/packages/r-agimicrorna/package.py
new file mode 100644
index 0000000000..b672f784bc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-agimicrorna/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RAgimicrorna(RPackage):
+ """Processing and Analysis of Agilent microRNA data."""
+
+ homepage = "https://www.bioconductor.org/packages/AgiMicroRna/"
+ url = "https://git.bioconductor.org/packages/AgiMicroRna"
+
+ version('2.26.0', git='https://git.bioconductor.org/packages/AgiMicroRna', commit='6dd74bae47986f2a23d03e3f1f9f78f701dd8053')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.26.0')
+ depends_on('r-affycoretools', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-aims/package.py b/var/spack/repos/builtin/packages/r-aims/package.py
new file mode 100644
index 0000000000..4a724804ae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-aims/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RAims(RPackage):
+ """This package contains the AIMS implementation. It contains
+ necessary functions to assign the five intrinsic molecular
+ subtypes (Luminal A, Luminal B, Her2-enriched, Basal-like,
+ Normal-like). Assignments could be done on individual samples
+ as well as on dataset of gene expression data."""
+
+ homepage = "http://bioconductor.org/packages/AIMS/"
+ url = "https://git.bioconductor.org/packages/AIMS"
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/AIMS', commit='86b866c20e191047492c51b43e3f73082c3f8357')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
+ depends_on('r-e1071', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-aldex2/package.py b/var/spack/repos/builtin/packages/r-aldex2/package.py
new file mode 100644
index 0000000000..ab046f82ec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-aldex2/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 RAldex2(RPackage):
+ """A differential abundance analysis for the comparison of
+ two or more conditions. For example, single-organism and
+ meta-RNA-seq high-throughput sequencing assays, or of
+ selected and unselected values from in-vitro sequence selections.
+ Uses a Dirichlet-multinomial model to infer abundance from counts,
+ that has been optimized for three or more experimental replicates.
+ Infers sampling variation and calculates the expected false
+ discovery rate given the biological and sampling variation
+ using the Wilcox rank test or Welches t-test (aldex.ttest) or
+ the glm and Kruskal Wallis tests (aldex.glm). Reports both P
+ and fdr values calculated by the Benjamini Hochberg correction."""
+
+ homepage = "http://bioconductor.org/packages/ALDEx2/"
+ url = "https://git.bioconductor.org/packages/ALDEx2"
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/ALDEx2', commit='24104824ca2402ad4f54fbf1ed9cee7fac2aaaf1')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biocparallel', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-allelicimbalance/package.py b/var/spack/repos/builtin/packages/r-allelicimbalance/package.py
new file mode 100644
index 0000000000..f7e95e519c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-allelicimbalance/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 RAllelicimbalance(RPackage):
+ """Provides a framework for allelic specific expression
+ investigation using RNA-seq data."""
+
+ homepage = "http://bioconductor.org/packages/AllelicImbalance/"
+ url = "https://git.bioconductor.org/packages/AllelicImbalance"
+
+ version('1.14.0', git='https://git.bioconductor.org/packages/AllelicImbalance', commit='35958534945819baafde0e13d1eb4d05a514142c')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.14.0')
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-bsgenome', type=('build', 'run'))
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-gviz', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-latticeextra', type=('build', 'run'))
+ depends_on('r-gridextra', type=('build', 'run'))
+ depends_on('r-seqinr', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-nlme', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-alpine/package.py b/var/spack/repos/builtin/packages/r-alpine/package.py
new file mode 100644
index 0000000000..9d28ec66e7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-alpine/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RAlpine(RPackage):
+ """Fragment sequence bias modeling and correction for RNA-seq
+ transcript abundance estimation."""
+
+ homepage = "http://bioconductor.org/packages/alpine/"
+ url = "https://git.bioconductor.org/packages/alpine"
+
+ version('1.2.0', git='https://git.bioconductor.org/packages/alpine', commit='896872e6071769e1ac2cf786974edb8b875c45eb')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.2.0')
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-speedglm', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
+ depends_on('r-rbgl', type=('build', 'run'))
+ depends_on('r-stringr', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-als/package.py b/var/spack/repos/builtin/packages/r-als/package.py
new file mode 100644
index 0000000000..12f1905614
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-als/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RAls(RPackage):
+ """Alternating least squares is often used to resolve components
+ contributing to data with a bilinear structure; the basic
+ technique may be extended to alternating constrained least squares.
+ Commonly applied constraints include unimodality, non-negativity,
+ and normalization of components. Several data matrices may be
+ decomposed simultaneously by assuming that one of the two matrices
+ in the bilinear decomposition is shared between datasets."""
+
+ homepage = "https://cran.r-project.org/package=ALS"
+ url = "https://cran.rstudio.com/src/contrib/ALS_0.0.6.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/ALS"
+
+ version('0.0.6', 'b72d97911e8ab7e4f8aed1a710b3d62d')
+
+ depends_on('r-iso', type=('build', 'run'))
+ depends_on('r-nnls', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-alsace/package.py b/var/spack/repos/builtin/packages/r-alsace/package.py
new file mode 100644
index 0000000000..0573dde123
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-alsace/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RAlsace(RPackage):
+ """Alternating Least Squares (or Multivariate Curve Resolution)
+ for analytical chemical data, in particular hyphenated data where
+ the first direction is a retention time axis, and the second a
+ spectral axis. Package builds on the basic als function from the
+ ALS package and adds functionality for high-throughput analysis,
+ including definition of time windows, clustering of profiles,
+ retention time correction, etcetera."""
+
+ homepage = "https://www.bioconductor.org/packages/alsace/"
+ url = "https://git.bioconductor.org/packages/alsace"
+
+ version('1.12.0', git='https://git.bioconductor.org/packages/alsace', commit='1364c65bbff05786d05c02799fd44fd57748fae3')
+
+ depends_on('r-als', type=('build', 'run'))
+ depends_on('r-ptw', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-altcdfenvs/package.py b/var/spack/repos/builtin/packages/r-altcdfenvs/package.py
new file mode 100644
index 0000000000..8f9770d68a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-altcdfenvs/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RAltcdfenvs(RPackage):
+ """Convenience data structures and functions to handle cdfenvs."""
+
+ homepage = "https://www.bioconductor.org/packages/altcdfenvs/"
+ url = "https://git.bioconductor.org/packages/altcdfenvs"
+
+ version('2.38.0', git='https://git.bioconductor.org/packages/altcdfenvs', commit='2e92b9da76dbe50af4bf33c525134e29e9809291')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.38.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-makecdfenv', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-hypergraph', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ampliqueso/package.py b/var/spack/repos/builtin/packages/r-ampliqueso/package.py
new file mode 100644
index 0000000000..a703caf19e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ampliqueso/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 RAmpliqueso(RPackage):
+ """The package provides tools and reports for the analysis of
+ amplicon sequencing panels, such as AmpliSeq."""
+
+ homepage = "https://www.bioconductor.org/packages/ampliQueso/"
+ url = "https://git.bioconductor.org/packages/ampliQueso"
+
+ version('1.14.0', git='https://git.bioconductor.org/packages/ampliQueso', commit='9a4c26ec594171279aba8ab7fe59c4a2ea09b06b')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.14.0')
+ depends_on('r-samr', type=('build', 'run'))
+ depends_on('r-deseq', type=('build', 'run'))
+ depends_on('r-edger', type=('build', 'run'))
+ depends_on('r-xtable', type=('build', 'run'))
+ depends_on('r-statmod', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-doparallel', type=('build', 'run'))
+ depends_on('r-gplots', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-rgl', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-rnaseqmap', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-analysispageserver/package.py b/var/spack/repos/builtin/packages/r-analysispageserver/package.py
new file mode 100644
index 0000000000..4245dbed56
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-analysispageserver/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RAnalysispageserver(RPackage):
+ """AnalysisPageServer is a modular system that enables sharing
+ of customizable R analyses via the web."""
+
+ homepage = "https://www.bioconductor.org/packages/AnalysisPageServer/"
+ url = "https://git.bioconductor.org/packages/AnalysisPageServer"
+
+ version('1.10.0', git='https://git.bioconductor.org/packages/AnalysisPageServer', commit='876c87073be116fa15a1afdd407e21152eb80d50')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.10.0')
+ depends_on('r-log4r', type=('build', 'run'))
+ depends_on('r-rjson', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-anaquin/package.py b/var/spack/repos/builtin/packages/r-anaquin/package.py
new file mode 100644
index 0000000000..678084df09
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-anaquin/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RAnaquin(RPackage):
+ """The project is intended to support the use of sequins
+ (synthetic sequencing spike-in controls) owned and made available
+ by the Garvan Institute of Medical Research. The goal is to
+ provide a standard open source library for quantitative analysis,
+ modelling and visualization of spike-in controls."""
+
+ homepage = "https://www.bioconductor.org/packages/Anaquin/"
+ url = "https://git.bioconductor.org/packages/Anaquin"
+
+ version('1.2.0', git='https://git.bioconductor.org/packages/Anaquin', commit='584d1970cc9dc1d354f9a6d7c1306bd7e8567119')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.2.0')
+ depends_on('r-deseq2', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r-qvalue', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-rocr', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-aneufinder/package.py b/var/spack/repos/builtin/packages/r-aneufinder/package.py
new file mode 100644
index 0000000000..6be07235a1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-aneufinder/package.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/spack/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 RAneufinder(RPackage):
+ """This package implements functions for CNV calling, plotting,
+ export and analysis from whole-genome single cell sequencing data."""
+
+ homepage = "https://www.bioconductor.org/packages/AneuFinder/"
+ url = "https://git.bioconductor.org/packages/AneuFinder"
+
+ version('1.4.0', git='https://git.bioconductor.org/packages/AneuFinder', commit='e5bdf4d5e4f84ee5680986826ffed636ed853b8e')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.4.0')
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-cowplot', type=('build', 'run'))
+ depends_on('r-aneufinderdata', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-doparallel', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-bamsignals', type=('build', 'run'))
+ depends_on('r-dnacopy', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-ggdendro', type=('build', 'run'))
+ depends_on('r-reordercluster', type=('build', 'run'))
+ depends_on('r-mclust', type=('build', 'run'))
+ depends_on('r-ggrepel', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-aneufinderdata/package.py b/var/spack/repos/builtin/packages/r-aneufinderdata/package.py
new file mode 100644
index 0000000000..a61e7cd4cd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-aneufinderdata/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RAneufinderdata(RPackage):
+ """Whole-genome single cell sequencing data for demonstration
+ purposes in the AneuFinder package."""
+
+ homepage = "https://www.bioconductor.org/packages/AneuFinderData/"
+ url = "https://git.bioconductor.org/packages/AneuFinderData"
+
+ version('1.4.0', git='https://git.bioconductor.org/packages/AneuFinderData', commit='55c8807ee4a37a2eb6d0defafaf843f980b22c40')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.4.0')
diff --git a/var/spack/repos/builtin/packages/r-annaffy/package.py b/var/spack/repos/builtin/packages/r-annaffy/package.py
new file mode 100644
index 0000000000..f4bfd87d3e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annaffy/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RAnnaffy(RPackage):
+ """Functions for handling data from Bioconductor Affymetrix
+ annotation data packages. Produces compact HTML and text
+ reports including experimental data and URL links to many
+ online databases. Allows searching biological metadata
+ using various criteria."""
+
+ homepage = "https://www.bioconductor.org/packages/annaffy/"
+ url = "https://git.bioconductor.org/packages/annaffy"
+
+ version('1.48.0', git='https://git.bioconductor.org/packages/annaffy', commit='89a03c64ac9df5d963ed60b87893a3fffa6798a0')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.48.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-go-db', type=('build', 'run'))
+ depends_on('r-kegg-db', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-annotate/package.py b/var/spack/repos/builtin/packages/r-annotate/package.py
new file mode 100644
index 0000000000..7c49849f01
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annotate/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RAnnotate(RPackage):
+ """Using R enviroments for annotation."""
+
+ homepage = "https://www.bioconductor.org/packages/annotate/"
+ url = "https://git.bioconductor.org/packages/annotate"
+ list_url = homepage
+ version('1.54.0', git='https://git.bioconductor.org/packages/annotate', commit='860cc5b696795a31b18beaf4869f9c418d74549e')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-xtable', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-annotationdbi/package.py b/var/spack/repos/builtin/packages/r-annotationdbi/package.py
new file mode 100644
index 0000000000..2b55b95a63
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annotationdbi/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RAnnotationdbi(RPackage):
+ """Provides user interface and database connection code for
+ annotation data packages using SQLite data storage."""
+
+ homepage = "https://www.bioconductor.org/packages/AnnotationDbi/"
+ url = "https://git.bioconductor.org/packages/AnnotationDbi"
+ list_url = homepage
+ version('1.38.2', git='https://git.bioconductor.org/packages/AnnotationDbi', commit='67d46facba8c15fa5f0eb47c4e39b53dbdc67c36')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.38.2')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-annotationfilter/package.py b/var/spack/repos/builtin/packages/r-annotationfilter/package.py
new file mode 100644
index 0000000000..ff82f8a3c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annotationfilter/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RAnnotationfilter(RPackage):
+ """This package provides class and other infrastructure to implement
+ filters for manipulating Bioconductor annotation resources. The
+ filters will be used by ensembldb, Organism.dplyr, and other
+ packages."""
+
+ homepage = "https://bioconductor.org/packages/AnnotationFilter/"
+ url = "https://git.bioconductor.org/packages/AnnotationFilter"
+ list_url = homepage
+
+ version('1.0.0', git='https://git.bioconductor.org/packages/AnnotationFilter', commit='a9f79b26defe3021eea60abe16ce1fa379813ec9')
+
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-lazyeval', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.0.0')
diff --git a/var/spack/repos/builtin/packages/r-annotationforge/package.py b/var/spack/repos/builtin/packages/r-annotationforge/package.py
new file mode 100644
index 0000000000..57a69306c3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annotationforge/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RAnnotationforge(RPackage):
+ """Provides code for generating Annotation packages and
+ their databases. Packages produced are intended to be used
+ with AnnotationDbi."""
+
+ homepage = "https://www.bioconductor.org/packages/AnnotationForge/"
+ url = "https://git.bioconductor.org/packages/AnnotationForge"
+
+ version('1.18.2', git='https://git.bioconductor.org/packages/AnnotationForge', commit='44ca3d4ef9e9825c14725ffdbbaa57ea059532e1')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.18.2')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-annotationhub/package.py b/var/spack/repos/builtin/packages/r-annotationhub/package.py
new file mode 100644
index 0000000000..ccda18a203
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-annotationhub/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 RAnnotationhub(RPackage):
+ """This package provides a client for the Bioconductor AnnotationHub web
+ resource. The AnnotationHub web resource provides a central location
+ where genomic files (e.g., VCF, bed, wig) and other resources from
+ standard locations (e.g., UCSC, Ensembl) can be discovered. The
+ resource includes metadata about each resource, e.g., a textual
+ description, tags, and date of modification. The client creates and
+ manages a local cache of files retrieved by the user, helping with
+ quick and reproducible access."""
+
+ homepage = "https://bioconductor.org/packages/AnnotationHub/"
+ url = "https://git.bioconductor.org/packages/AnnotationHub"
+ list_url = homepage
+
+ version('2.8.3', git='https://git.bioconductor.org/packages/AnnotationHub', commit='8aa9c64262a8d708d2bf1c82f82dfc3d7d4ccc0c')
+
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-biocinstaller', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-interactivedisplaybase', type=('build', 'run'))
+ depends_on('r-httr', type=('build', 'run'))
+ depends_on('r-yaml', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.8.3')
diff --git a/var/spack/repos/builtin/packages/r-ape/package.py b/var/spack/repos/builtin/packages/r-ape/package.py
new file mode 100644
index 0000000000..17a0f0ff23
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ape/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 RApe(RPackage):
+ """Functions for reading, writing, plotting, and manipulating phylogenetic
+ trees, analyses of comparative data in a phylogenetic framework, ancestral
+ character analyses, analyses of diversification and macroevolution,
+ computing distances from DNA sequences, reading and writing nucleotide
+ sequences as well as importing from BioConductor, and several tools such
+ as Mantel's test, generalized skyline plots, graphical exploration of
+ phylogenetic data (alex, trex, kronoviz), estimation of absolute
+ evolutionary rates and clock-like trees using mean path lengths and
+ penalized likelihood, dating trees with non-contemporaneous sequences,
+ translating DNA into AA sequences, and assessing sequence alignments.
+ Phylogeny estimation can be done with the NJ, BIONJ, ME, MVR, SDM, and
+ triangle methods, and several methods handling incomplete distance
+ matrices (NJ*, BIONJ*, MVR*, and the corresponding triangle method). Some
+ functions call external applications (PhyML, Clustal, T-Coffee, Muscle)
+ whose results are returned into R."""
+
+ homepage = "http://ape-package.ird.fr/"
+ url = "https://cran.r-project.org/src/contrib/ape_4.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ape"
+
+ version('4.1', 'a9ed416d6d172d4b9682556cf692d7c2')
+
+ depends_on('r@3.2:')
diff --git a/var/spack/repos/builtin/packages/r-assertthat/package.py b/var/spack/repos/builtin/packages/r-assertthat/package.py
index 97c29b4a99..37e0424d1a 100644
--- a/var/spack/repos/builtin/packages/r-assertthat/package.py
+++ b/var/spack/repos/builtin/packages/r-assertthat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,8 @@ class RAssertthat(RPackage):
producing friendly error messages so that your users know what they've done
wrong."""
- homepage = "https://cran.r-project.org/web/packages/assertthat/index.html"
+ homepage = "https://cran.r-project.org/package=assertthat"
url = "https://cran.r-project.org/src/contrib/assertthat_0.1.tar.gz"
-
+ list_url = "https://cran.r-project.org/src/contrib/Archive/assertthat"
+ version('0.2.0', '8134f0072c6a84fd738d3bfc5e7f68ef')
version('0.1', '59f9d7f7c00077ea54d763b78eeb5798')
diff --git a/var/spack/repos/builtin/packages/r-backports/package.py b/var/spack/repos/builtin/packages/r-backports/package.py
new file mode 100644
index 0000000000..02c0c6fc1b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-backports/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RBackports(RPackage):
+ """Implementations of functions which have been introduced
+ in R since version 3.0.0. The backports are conditionally
+ exported which results in R resolving the function names to
+ the version shipped with R (if available) and uses the
+ implemented backports as fallback. This way package developers
+ can make use of the new functions without worrying about the
+ minimum required R version."""
+
+ homepage = "https://cran.r-project.org/package=backports"
+ url = "https://cran.r-project.org/src/contrib/backports_1.1.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/backports"
+
+ version('1.1.1', '969543a0af32dc23bba9bb37ec82008c')
+ version('1.1.0', 'b97a71b026fd7ede0e449be93d160c17')
diff --git a/var/spack/repos/builtin/packages/r-bamsignals/package.py b/var/spack/repos/builtin/packages/r-bamsignals/package.py
new file mode 100644
index 0000000000..29a7fda80d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-bamsignals/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RBamsignals(RPackage):
+ """This package allows to efficiently obtain count vectors
+ from indexed bam files. It counts the number of reads in given
+ genomic ranges and it computes reads profiles and coverage
+ profiles. It also handles paired-end data."""
+
+ homepage = "https://www.bioconductor.org/packages/bamsignals/"
+ url = "https://git.bioconductor.org/packages/bamsignals"
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/bamsignals', commit='b123b83e8e026c9ec91209d4498aff3e95a5de23')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r-rhtslib', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-base64/package.py b/var/spack/repos/builtin/packages/r-base64/package.py
new file mode 100644
index 0000000000..6a693e12a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-base64/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RBase64(RPackage):
+ """Compatibility wrapper to replace the orphaned package by Romain
+ Francois. New applications should use the 'openssl' or 'base64enc'
+ package instead."""
+
+ homepage = "https://cran.r-project.org/package=base64"
+ url = "https://cran.rstudio.com/src/contrib/base64_2.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/base64"
+
+ version('2.0', 'f5a653842f75ad717ef6a00969868ae5')
+
+ depends_on('r-openssl', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-base64enc/package.py b/var/spack/repos/builtin/packages/r-base64enc/package.py
index 698e27a29e..3566baab7a 100644
--- a/var/spack/repos/builtin/packages/r-base64enc/package.py
+++ b/var/spack/repos/builtin/packages/r-base64enc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-beanplot/package.py b/var/spack/repos/builtin/packages/r-beanplot/package.py
new file mode 100644
index 0000000000..3ddb95f59e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-beanplot/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RBeanplot(RPackage):
+ """Plots univariate comparison graphs, an alternative to
+ boxplot/stripchart/violin plot."""
+
+ homepage = "https://cran.r-project.org/web/packages/beanplot/index.html"
+ url = "https://cran.rstudio.com/src/contrib/beanplot_1.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/beanplot"
+
+ version('1.2', 'b24943208a4e61ee9ee0dc152634d5da')
diff --git a/var/spack/repos/builtin/packages/r-bh/package.py b/var/spack/repos/builtin/packages/r-bh/package.py
index 683ba24d86..bcf4f600a6 100644
--- a/var/spack/repos/builtin/packages/r-bh/package.py
+++ b/var/spack/repos/builtin/packages/r-bh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -42,7 +42,7 @@ class RBh(RPackage):
'tuple' 'type_trains' 'typeof' 'unordered' 'utility' 'uuid'."""
homepage = "https://cran.r-project.org/web/packages/BH/index.html"
- url = "https://cran.r-project.org/src/contrib/BH_1.60.0-2.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/BH_1.65.0-1.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/BH"
-
+ version('1.65.0-1', '7d0402188e4af59f4103f36616d6ee55')
version('1.60.0-2', 'b50fdc85285da05add4e9da664a2d551')
diff --git a/var/spack/repos/builtin/packages/r-biobase/package.py b/var/spack/repos/builtin/packages/r-biobase/package.py
new file mode 100644
index 0000000000..035d0ddcad
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biobase/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RBiobase(RPackage):
+ """Functions that are needed by many other packages
+ or which replace R functions."""
+
+ homepage = "https://www.bioconductor.org/packages/Biobase/"
+ url = "https://git.bioconductor.org/packages/Biobase"
+ list_url = homepage
+
+ version('2.36.2', git='https://git.bioconductor.org/packages/Biobase', commit='15f50912f3fa08ccb15c33b7baebe6b8a59ce075')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.36.2')
diff --git a/var/spack/repos/builtin/packages/r-biocgenerics/package.py b/var/spack/repos/builtin/packages/r-biocgenerics/package.py
index 654e7f1b2a..2d101b09e1 100644
--- a/var/spack/repos/builtin/packages/r-biocgenerics/package.py
+++ b/var/spack/repos/builtin/packages/r-biocgenerics/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,19 +22,16 @@
# 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 RBiocgenerics(RPackage):
"""S4 generic functions needed by many Bioconductor packages."""
+ homepage = "https://www.bioconductor.org/packages/BiocGenerics/"
+ url = "https://git.bioconductor.org/packages/BiocGenerics"
+ list_url = homepage
- homepage = 'https://bioconductor.org/packages/BiocGenerics/'
- version('3.3',
- git='https://github.com/Bioconductor-mirror/BiocGenerics.git',
- branch='release-3.3')
- version('3.2',
- git='https://github.com/Bioconductor-mirror/BiocGenerics.git',
- branch='release-3.2')
+ version('0.22.1', git='https://git.bioconductor.org/packages/BiocGenerics', commit='9c90bb8926885289d596a81ff318ee3745cbb6ad')
- depends_on('r@3.3.0:3.3.9', when='@3.3')
- depends_on('r@3.2.0:3.2.9', when='@3.2')
+ depends_on('r@3.4.0:3.4.9', when='@0.22.1')
diff --git a/var/spack/repos/builtin/packages/r-biocinstaller/package.py b/var/spack/repos/builtin/packages/r-biocinstaller/package.py
new file mode 100644
index 0000000000..b2248f87ac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biocinstaller/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RBiocinstaller(RPackage):
+ """This package is used to install and update Bioconductor, CRAN,
+ and (some) github packages."""
+
+ homepage = "https://bioconductor.org/packages/BiocInstaller/"
+ url = "https://git.bioconductor.org/packages/BiocInstaller"
+ list_url = homepage
+
+ version('1.26.1', git='https://git.bioconductor.org/packages/BiocInstaller', commit='9049b82a77aefa98e3f8e4dd7068317505d70e98')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.26.1')
diff --git a/var/spack/repos/builtin/packages/r-biocparallel/package.py b/var/spack/repos/builtin/packages/r-biocparallel/package.py
new file mode 100644
index 0000000000..769c8b9b16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biocparallel/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RBiocparallel(RPackage):
+ """This package provides modified versions and novel implementation of
+ functions for parallel evaluation, tailored to use with Bioconductor
+ objects."""
+
+ homepage = "https://bioconductor.org/packages/BiocParallel/"
+ url = "https://git.bioconductor.org/packages/BiocParallel"
+ list_url = homepage
+
+ version('1.10.1', git='https://git.bioconductor.org/packages/BiocParallel', commit='a76c58cf99fd585ba5ea33065649e68f1afe0a7d')
+
+ depends_on('r-futile-logger', type=('build', 'run'))
+ depends_on('r-snow', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.10.1')
diff --git a/var/spack/repos/builtin/packages/r-biomart/package.py b/var/spack/repos/builtin/packages/r-biomart/package.py
new file mode 100644
index 0000000000..d9c15151bd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biomart/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RBiomart(RPackage):
+ """In recent years a wealth of biological data has become available in
+ public data repositories. Easy access to these valuable data resources
+ and firm integration with data analysis is needed for comprehensive
+ bioinformatics data analysis. biomaRt provides an interface to a growing
+ collection of databases implementing the BioMart software suite
+ (http://www.biomart.org). The package enables retrieval of large amounts
+ of data in a uniform way without the need to know the underlying
+ database schemas or write complex SQL queries. Examples of BioMart
+ databases are Ensembl, COSMIC, Uniprot, HGNC, Gramene, Wormbase and
+ dbSNP mapped to Ensembl. These major databases give biomaRt users direct
+ access to a diverse set of data and enable a wide range of powerful
+ online queries from gene annotation to database mining."""
+
+ homepage = "https://bioconductor.org/packages/biomaRt/"
+ url = "https://git.bioconductor.org/packages/biomaRt"
+
+ version('2.32.1', git='https://git.bioconductor.org/packages/biomaRt', commit='f84d74424fa599f6d08f8db4612ca09914a9087f')
+
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.32.1')
diff --git a/var/spack/repos/builtin/packages/r-biostrings/package.py b/var/spack/repos/builtin/packages/r-biostrings/package.py
new file mode 100644
index 0000000000..fee137c11b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biostrings/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RBiostrings(RPackage):
+ """Memory efficient string containers, string matching algorithms, and
+ other utilities, for fast manipulation of large biological sequences
+ or sets of sequences."""
+
+ homepage = "https://bioconductor.org/packages/Biostrings/"
+ url = "https://git.bioconductor.org/packages/Biostrings"
+ list_url = homepage
+
+ version('2.44.2', git='https://git.bioconductor.org/packages/Biostrings', commit='e4a2b320fb21c5cab3ece7b3c6fecaedfb1e5200')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.44.2')
diff --git a/var/spack/repos/builtin/packages/r-biovizbase/package.py b/var/spack/repos/builtin/packages/r-biovizbase/package.py
new file mode 100644
index 0000000000..ee87f87625
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-biovizbase/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# 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/spack/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 RBiovizbase(RPackage):
+ """The biovizBase package is designed to provide a set of
+ utilities, color schemes and conventions for genomic data.
+ It serves as the base for various high-level packages for
+ biological data visualization. This saves development effort
+ and encourages consistency."""
+
+ homepage = "http://bioconductor.org/packages/biovizBase/"
+ url = "https://git.bioconductor.org/packages/biovizBase"
+
+ version('1.24.0', git='https://git.bioconductor.org/packages/biovizBase', commit='ae9cd2ff665b74a8f45ed9c1d17fc0a778b4af6c')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.24.0')
+ depends_on('r-scales', type=('build', 'run'))
+ depends_on('r-hmisc', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-dichromat', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-ensembldb', type=('build', 'run'))
+ depends_on('r-annotationfilter', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-bit/package.py b/var/spack/repos/builtin/packages/r-bit/package.py
new file mode 100644
index 0000000000..aed6d724a6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-bit/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/spack/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 RBit(RPackage):
+ """ A class for vectors of 1-bit booleans."""
+
+ homepage = "https://cran.rstudio.com/web/packages/bit/index.html"
+ url = "https://cran.rstudio.com/src/contrib/bit_1.1-12.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/bit"
+ version('1.1-12', 'c4473017beb93f151a8e672e4d5747af')
diff --git a/var/spack/repos/builtin/packages/r-bit64/package.py b/var/spack/repos/builtin/packages/r-bit64/package.py
new file mode 100644
index 0000000000..85c631e1ba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-bit64/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RBit64(RPackage):
+ """Package 'bit64' provides serializable S3 atomic 64bit (signed)
+ integers. These are useful for handling database keys and exact
+ counting in +-2^63. WARNING: do not use them as replacement for 32bit
+ integers, integer64 are not supported for subscripting by R-core and
+ they have different semantics when combined with double, e.g.
+ integer64 + double => integer64. Class integer64 can be used in vectors,
+ matrices, arrays and data.frames. Methods are available for coercion
+ from and to logicals, integers, doubles, characters and factors
+ as well as many elementwise and summary functions. Many fast
+ algorithmic operations such as 'match' and 'order' support
+ inter- active data exploration
+ and manipulation and optionally leverage caching."""
+
+ homepage = "https://cran.rstudio.com/web/packages/bit64/index.html"
+ url = "https://cran.rstudio.com/src/contrib/bit64_0.9-7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/bit64"
+ version('0.9-7', 'ac4bc39827338c552d329d3d4d2339c2')
+
+ depends_on('r-bit', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-bitops/package.py b/var/spack/repos/builtin/packages/r-bitops/package.py
index 67bb0fe777..ec0b45f454 100644
--- a/var/spack/repos/builtin/packages/r-bitops/package.py
+++ b/var/spack/repos/builtin/packages/r-bitops/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-blob/package.py b/var/spack/repos/builtin/packages/r-blob/package.py
new file mode 100644
index 0000000000..b77399f775
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-blob/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RBlob(RPackage):
+ """R's raw vector is useful for storing a single binary object.
+ What if you want to put a vector of them in a data frame? The blob
+ package provides the blob object, a list of raw vectors, suitable
+ for use as a column in data frame."""
+
+ homepage = "https://cran.rstudio.com/web/packages/blob/index.html"
+ url = "https://cran.rstudio.com/src/contrib/blob_1.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/blob"
+ version('1.1.0', '1c729aca36fd5193d81b1cd5ed9d8a00')
+
+ depends_on('r-tibble', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-boot/package.py b/var/spack/repos/builtin/packages/r-boot/package.py
index 1361920673..2e2802893d 100644
--- a/var/spack/repos/builtin/packages/r-boot/package.py
+++ b/var/spack/repos/builtin/packages/r-boot/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,4 +34,5 @@ class RBoot(RPackage):
url = "https://cran.r-project.org/src/contrib/boot_1.3-18.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/boot"
+ version('1.3-20', 'bb879fb4204a4f94ab82c98dd1ad5eca')
version('1.3-18', '711dd58af14e1027eb8377d9202e9b6f')
diff --git a/var/spack/repos/builtin/packages/r-brew/package.py b/var/spack/repos/builtin/packages/r-brew/package.py
index 558d830a2b..e3cf99a095 100644
--- a/var/spack/repos/builtin/packages/r-brew/package.py
+++ b/var/spack/repos/builtin/packages/r-brew/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-bsgenome/package.py b/var/spack/repos/builtin/packages/r-bsgenome/package.py
new file mode 100644
index 0000000000..3758992266
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-bsgenome/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RBsgenome(RPackage):
+ """Infrastructure shared by all the Biostrings-based genome data
+ packages."""
+
+ homepage = "https://www.bioconductor.org/packages/BSgenome/"
+ url = "https://git.bioconductor.org/packages/BSgenome"
+ list_url = homepage
+
+ version('1.44.2', git='https://git.bioconductor.org/packages/BSgenome', commit='105b00588a758d5ec7c347a7dff2756aea4516a0')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.44.2')
diff --git a/var/spack/repos/builtin/packages/r-bumphunter/package.py b/var/spack/repos/builtin/packages/r-bumphunter/package.py
new file mode 100644
index 0000000000..bc36a53485
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-bumphunter/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RBumphunter(RPackage):
+ """Tools for finding bumps in genomic data"""
+
+ homepage = "http://bioconductor.org/packages/bumphunter/"
+ url = "https://git.bioconductor.org/packages/bumphunter"
+ list_url = homepage
+
+ version('1.16.0', git='https://git.bioconductor.org/packages/bumphunter', commit='1c3ab4d1fd2d75b1586ccef12665960b3602080a')
+
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-iterators', type=('build', 'run'))
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-dorng', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.16.0')
diff --git a/var/spack/repos/builtin/packages/r-c50/package.py b/var/spack/repos/builtin/packages/r-c50/package.py
index 571f8f461b..e5ee2d285a 100644
--- a/var/spack/repos/builtin/packages/r-c50/package.py
+++ b/var/spack/repos/builtin/packages/r-c50/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,4 +35,4 @@ class RC50(RPackage):
version('0.1.0-24', '42631e65c5c579532cc6edf5ea175949')
- depends_on('r-partykit', type=('build','run'))
+ depends_on('r-partykit', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-callr/package.py b/var/spack/repos/builtin/packages/r-callr/package.py
new file mode 100644
index 0000000000..f69ed861ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-callr/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RCallr(RPackage):
+ """It is sometimes useful to perform a computation in a separate R
+ process, without affecting the current R process at all. This packages
+ does exactly that."""
+
+ homepage = "https://github.com/MangoTheCat/callr"
+ url = "https://cran.r-project.org/src/contrib/callr_1.0.0.tar.gz"
+
+ version('1.0.0', 'd9af99bb95696310fa1e5d1cb7166c91')
diff --git a/var/spack/repos/builtin/packages/r-car/package.py b/var/spack/repos/builtin/packages/r-car/package.py
index 80a0206a8a..aa5a776e37 100644
--- a/var/spack/repos/builtin/packages/r-car/package.py
+++ b/var/spack/repos/builtin/packages/r-car/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,13 +30,14 @@ class RCar(RPackage):
Companion to Applied Regression, Second Edition, Sage, 2011."""
homepage = "https://r-forge.r-project.org/projects/car/"
- url = "https://cran.r-project.org/src/contrib/car_2.1-2.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/car_2.1-4.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/car"
+ version('2.1-4', 'a66c307e8ccf0c336ed197c0f1799565')
version('2.1-2', '0f78ad74ef7130126d319acec23951a0')
- depends_on('r-mass', type=('build','run'))
- depends_on('r-mgcv', type=('build','run'))
- depends_on('r-nnet', type=('build','run'))
- depends_on('r-pbkrtest', type=('build','run'))
- depends_on('r-quantreg', type=('build','run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-mgcv', type=('build', 'run'))
+ depends_on('r-nnet', type=('build', 'run'))
+ depends_on('r-pbkrtest', type=('build', 'run'))
+ depends_on('r-quantreg', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-caret/package.py b/var/spack/repos/builtin/packages/r-caret/package.py
index d795cfa204..89dcc691ea 100644
--- a/var/spack/repos/builtin/packages/r-caret/package.py
+++ b/var/spack/repos/builtin/packages/r-caret/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,15 +30,19 @@ class RCaret(RPackage):
models."""
homepage = "https://github.com/topepo/caret/"
- url = "https://cran.r-project.org/src/contrib/caret_6.0-70.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/caret_6.0-73.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/caret"
+ version('6.0-73', 'ca869e3357b5358f028fb926eb62eb70')
version('6.0-70', '202d7abb6a679af716ea69fb2573f108')
- depends_on('r-lattice', type=('build','run'))
- depends_on('r-ggplot2', type=('build','run'))
- depends_on('r-car', type=('build','run'))
- depends_on('r-foreach', type=('build','run'))
- depends_on('r-plyr', type=('build','run'))
- depends_on('r-nlme', type=('build','run'))
- depends_on('r-reshape2', type=('build','run'))
+ depends_on('r@2.10:')
+
+ depends_on('r-lattice@0.20:', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-car', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-modelmetrics@1.1.0:', type=('build', 'run'))
+ depends_on('r-nlme', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-category/package.py b/var/spack/repos/builtin/packages/r-category/package.py
new file mode 100644
index 0000000000..026f0c5987
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-category/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RCategory(RPackage):
+ """A collection of tools for performing category analysis."""
+
+ homepage = "https://www.bioconductor.org/packages/Category/"
+ url = "https://git.bioconductor.org/packages/Category"
+
+ version('2.42.1', git='https://git.bioconductor.org/packages/Category', commit='382c817a2371671a72f8f949dfb4050361ebabcd')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.42.1')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
+ depends_on('r-rbgl', type=('build', 'run'))
+ depends_on('r-gseabase', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-catools/package.py b/var/spack/repos/builtin/packages/r-catools/package.py
index 7b82a19c01..2253b1e0ec 100644
--- a/var/spack/repos/builtin/packages/r-catools/package.py
+++ b/var/spack/repos/builtin/packages/r-catools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,4 +38,4 @@ class RCatools(RPackage):
version('1.17.1', '5c872bbc78b177b306f36709deb44498')
- depends_on('r-bitops', type=('build','run'))
+ depends_on('r-bitops', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-cellranger/package.py b/var/spack/repos/builtin/packages/r-cellranger/package.py
new file mode 100644
index 0000000000..5b57c221f9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-cellranger/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RCellranger(RPackage):
+ """Helper functions to work with spreadsheets and the "A1:D10"
+ style of cell range specification."""
+
+ homepage = "https://cran.r-project.org/package=cellranger"
+ url = "https://cran.r-project.org/src/contrib/cellranger_1.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/cellranger"
+
+ version('1.1.0', '1abcfea6af5ab2e277cb99e86880456f')
+
+ depends_on('r-rematch', type=('build', 'run'))
+ depends_on('r-tibble', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-checkmate/package.py b/var/spack/repos/builtin/packages/r-checkmate/package.py
new file mode 100644
index 0000000000..278937335a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-checkmate/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RCheckmate(RPackage):
+ """Tests and assertions to perform frequent argument checks.
+ A substantial part of the package was written in C to
+ minimize any worries about execution time overhead."""
+
+ homepage = "https://cran.r-project.org/package=checkmate"
+ url = "https://cran.rstudio.com/src/contrib/checkmate_1.8.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/checkmate"
+
+ version('1.8.4', '00bd2c464386614da208f82c4b21910b')
+
+ depends_on('r-backports', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-checkpoint/package.py b/var/spack/repos/builtin/packages/r-checkpoint/package.py
new file mode 100644
index 0000000000..6d3d9cc830
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-checkpoint/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RCheckpoint(RPackage):
+ """The goal of checkpoint is to solve the problem of package
+ reproducibility in R. Specifically, checkpoint allows you to
+ install packages as they existed on CRAN on a specific snapshot
+ date as if you had a CRAN time machine."""
+
+ homepage = "https://cran.r-project.org/package=checkpoint"
+ url = "https://cran.r-project.org/src/contrib/checkpoint_0.3.18.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/checkpoint"
+
+ version('0.3.18', '021d7faeb72c36167951e103b2b065ea')
+ version('0.3.15', 'a4aa8320338f1434a330d984e97981ea')
+
+ depends_on('r@3.0.0:')
diff --git a/var/spack/repos/builtin/packages/r-chron/package.py b/var/spack/repos/builtin/packages/r-chron/package.py
index e1731424b3..0a2566c0b1 100644
--- a/var/spack/repos/builtin/packages/r-chron/package.py
+++ b/var/spack/repos/builtin/packages/r-chron/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-circlize/package.py b/var/spack/repos/builtin/packages/r-circlize/package.py
new file mode 100644
index 0000000000..628c042d7d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-circlize/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 RCirclize(RPackage):
+ """Circular layout is an efficient way for the visualization of huge
+ amounts of information. Here this package provides an implementation
+ of circular layout generation in R as well as an enhancement of
+ available software. The flexibility of the package is based on the
+ usage of low-level graphics functions such that self-defined
+ high-level graphics can be easily implemented by users for specific
+ purposes. Together with the seamless connection between the powerful
+ computational and visual environment in R, it gives users more
+ convenience and freedom to design figures for better understanding
+ complex patterns behind multiple dimensional data."""
+
+ homepage = "https://cran.r-project.org/package=circlize"
+ url = "https://cran.r-project.org/src/contrib/circlize_0.4.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/circlize"
+
+ version('0.4.1', '6818830654f485abbdc8c74ec9087377')
+ version('0.4.0', '0dbf1b481930a759d6f413d17f8ae1c4')
+
+ depends_on('r-globaloptions', type=('build', 'run'))
+ depends_on('r-shape', type=('build', 'run'))
+ depends_on('r-colorspace', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-class/package.py b/var/spack/repos/builtin/packages/r-class/package.py
index de81e7588e..3b35634302 100644
--- a/var/spack/repos/builtin/packages/r-class/package.py
+++ b/var/spack/repos/builtin/packages/r-class/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,4 +35,4 @@ class RClass(RPackage):
version('7.3-14', '6a21dd206fe4ea29c55faeb65fb2b71e')
- depends_on('r-mass', type=('build','run'))
+ depends_on('r-mass', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-clipr/package.py b/var/spack/repos/builtin/packages/r-clipr/package.py
new file mode 100644
index 0000000000..a5b6ce9993
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-clipr/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RClipr(RPackage):
+ """Simple utility functions to read from and write to the Windows, OS X,
+ and X11 clipboards."""
+
+ homepage = "https://github.com/mdlincoln/clipr"
+ url = "https://cran.r-project.org/src/contrib/clipr_0.4.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/clipr"
+
+ version('0.4.0', '4012a31eb3b7a36bd3bac00f916e56a7')
+
+ depends_on('r-rstudioapi', type=('build', 'run'))
+ depends_on('r-testthat', type=('build', 'run'))
+ depends_on('xclip')
diff --git a/var/spack/repos/builtin/packages/r-cluster/package.py b/var/spack/repos/builtin/packages/r-cluster/package.py
index 29e16c2271..e59a486434 100644
--- a/var/spack/repos/builtin/packages/r-cluster/package.py
+++ b/var/spack/repos/builtin/packages/r-cluster/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,9 @@ class RCluster(RPackage):
(1990) "Finding Groups in Data"."""
homepage = "https://cran.r-project.org/web/packages/cluster/index.html"
- url = "https://cran.r-project.org/src/contrib/cluster_2.0.4.tar.gz"
+ url = "https://cran.rstudio.com/src/contrib/cluster_2.0.6.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/cluster"
+ version('2.0.6', 'e7d0660b05c65f4d886ebf7f046939ab')
+ version('2.0.5', '7330f209ebce960bdee1a6d6679cb85a')
version('2.0.4', 'bb4deceaafb1c42bb1278d5d0dc11e59')
diff --git a/var/spack/repos/builtin/packages/r-coda/package.py b/var/spack/repos/builtin/packages/r-coda/package.py
new file mode 100644
index 0000000000..82c1887a32
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-coda/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RCoda(RPackage):
+ """Provides functions for summarizing and plotting the output from
+ Markov Chain Monte Carlo (MCMC) simulations, as well as
+ diagnostic tests of convergence to the equilibrium distribution
+ of the Markov chain."""
+
+ homepage = "https://cran.r-project.org/web/packages/coda/index.html"
+ url = "https://cran.r-project.org/src/contrib/coda_0.19-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/coda"
+
+ version('0.19-1', '0d2aca6a5a3bdae9542708817c1ec001')
+
+ depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-codetools/package.py b/var/spack/repos/builtin/packages/r-codetools/package.py
index 39186bf54a..ce78dd590b 100644
--- a/var/spack/repos/builtin/packages/r-codetools/package.py
+++ b/var/spack/repos/builtin/packages/r-codetools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,8 @@ class RCodetools(RPackage):
"""Code analysis tools for R."""
homepage = "https://cran.r-project.org/web/packages/codetools/index.html"
- url = "https://cran.r-project.org/src/contrib/codetools_0.2-14.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/codetools_0.2-15.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/codetools"
+ version('0.2-15', '37419cbc3de81984cf6d9b207d4f62d4')
version('0.2-14', '7ec41d4f8bd6ba85facc8c5e6adc1f4d')
diff --git a/var/spack/repos/builtin/packages/r-coin/package.py b/var/spack/repos/builtin/packages/r-coin/package.py
new file mode 100644
index 0000000000..8c7a3a348e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-coin/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RCoin(RPackage):
+ """Conditional inference procedures for the general independence problem
+ including two-sample, K-sample (non-parametric ANOVA), correlation,
+ censored, ordered and multivariate problems."""
+
+ homepage = "https://cran.r-project.org/package=coin"
+ url = "https://cran.r-project.org/src/contrib/coin_1.1-3.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/coin"
+
+ version('1.1-3', '97d3d21f1e4a5762e36dd718dd2d0661')
+
+ depends_on('r@2.14.0:')
+
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-modeltools@0.2-9:', type=('build', 'run'))
+ depends_on('r-mvtnorm@1.0-5:', type=('build', 'run'))
+ depends_on('r-multcomp', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-colorspace/package.py b/var/spack/repos/builtin/packages/r-colorspace/package.py
index b7561ea360..70e3ea63a7 100644
--- a/var/spack/repos/builtin/packages/r-colorspace/package.py
+++ b/var/spack/repos/builtin/packages/r-colorspace/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,8 @@ class RColorspace(RPackage):
are provided."""
homepage = "https://cran.r-project.org/web/packages/colorspace/index.html"
- url = "https://cran.r-project.org/src/contrib/colorspace_1.2-6.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/colorspace_1.3-2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/colorspace"
+ version('1.3-2', '63000bab81d995ff167df76fb97b2984')
version('1.2-6', 'a30191e9caf66f77ff4e99c062e9dce1')
diff --git a/var/spack/repos/builtin/packages/r-complexheatmap/package.py b/var/spack/repos/builtin/packages/r-complexheatmap/package.py
new file mode 100644
index 0000000000..04c88f8ef8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-complexheatmap/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RComplexheatmap(RPackage):
+ """Complex heatmaps are efficient to visualize associations between
+ different sources of data sets and reveal potential structures. Here
+ the ComplexHeatmap package provides a highly flexible way to arrange
+ multiple heatmaps and supports self-defined annotation graphics."""
+
+ homepage = "https://bioconductor.org/packages/ComplexHeatmap/"
+ url = "https://git.bioconductor.org/packages/ComplexHeatmap"
+ list_url = homepage
+
+ version('1.14.0', git='https://git.bioconductor.org/packages/ComplexHeatmap', commit='0acd8974fb5cedde8cd96efea6dfa39324d25b34')
+
+ depends_on('r-circlize', type=('build', 'run'))
+ depends_on('r-getoptlong', type=('build', 'run'))
+ depends_on('r-colorspace', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-dendextend', type=('build', 'run'))
+ depends_on('r-globaloptions', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.14.0')
diff --git a/var/spack/repos/builtin/packages/r-corpcor/package.py b/var/spack/repos/builtin/packages/r-corpcor/package.py
new file mode 100644
index 0000000000..b07e333ad7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-corpcor/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RCorpcor(RPackage):
+ """Efficient Estimation of Covariance and (Partial) Correlation"""
+
+ homepage = "https://cran.r-project.org/package=corpcor"
+ url = "https://cran.r-project.org/src/contrib/corpcor_1.6.9.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/corpcor"
+
+ version('1.6.9', '7f447d9f389e5d7dedb5fe5baedca925')
diff --git a/var/spack/repos/builtin/packages/r-corrplot/package.py b/var/spack/repos/builtin/packages/r-corrplot/package.py
new file mode 100644
index 0000000000..52408e5ae7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-corrplot/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RCorrplot(RPackage):
+ """A graphical display of a correlation matrix or general matrix.
+ It also contains some algorithms to do matrix reordering."""
+
+ homepage = "https://cran.r-project.org/package=corrplot"
+ url = "https://cran.r-project.org/src/contrib/corrplot_0.77.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/corrplot"
+
+ version('0.77', '2a5d54fd5c65618b9afba1a32f6b4542')
diff --git a/var/spack/repos/builtin/packages/r-covr/package.py b/var/spack/repos/builtin/packages/r-covr/package.py
new file mode 100644
index 0000000000..5e3d8fff21
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-covr/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 RCovr(RPackage):
+ """Track and report code coverage for your package and (optionally)
+ upload the results to a coverage service like 'Codecov'
+ <http://codecov.io> or 'Coveralls' <http://coveralls.io>. Code
+ coverage is a measure of the amount of code being exercised by a
+ set of tests. It is an indirect measure of test quality and
+ completeness. This package is compatible with any testing methodology
+ or framework and tracks coverage of both R code and compiled
+ C/C++/FORTRAN code."""
+
+ homepage = "https://cran.r-project.org/package=covr"
+ url = "https://cran.r-project.org/src/contrib/covr_3.0.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/covr"
+
+ version('3.0.1', 'f88383f751fe5aa830a2b2e5c14aa66a')
+
+ depends_on('r-jsonlite', type=('build', 'run'))
+ depends_on('r-rex', type=('build', 'run'))
+ depends_on('r-httr', type=('build', 'run'))
+ depends_on('r-crayon', type=('build', 'run'))
+ depends_on('r-withr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-cowplot/package.py b/var/spack/repos/builtin/packages/r-cowplot/package.py
new file mode 100644
index 0000000000..cb49c52acb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-cowplot/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RCowplot(RPackage):
+ """Some helpful extensions and modifications to the 'ggplot2'
+ package. In particular, this package makes it easy to combine
+ multiple 'ggplot2' plots into one and label them with letters,
+ e.g. A, B, C, etc., as is often required for scientific
+ publications. The package also provides a streamlined and clean
+ theme that is used in the Wilke lab, hence the package name,
+ which stands for Claus O. Wilke's plot package."""
+
+ homepage = "https://cran.r-project.org/package=cowplot"
+ url = "https://cran.rstudio.com/src/contrib/cowplot_0.8.0.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/cowplot"
+
+ version('0.8.0', 'bcb19c72734d8eb5d73db393c1235c3d')
+
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-gtable', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-crayon/package.py b/var/spack/repos/builtin/packages/r-crayon/package.py
index 2002ea5419..de1140df3b 100644
--- a/var/spack/repos/builtin/packages/r-crayon/package.py
+++ b/var/spack/repos/builtin/packages/r-crayon/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,8 +32,9 @@ class RCrayon(RPackage):
New styles can also be created easily. This package was inspired by the
'chalk' 'JavaScript' project."""
- homepage = "https://github.com/gaborcsardi/crayon"
- url = "https://cran.r-project.org/src/contrib/crayon_1.3.2.tar.gz"
+ homepage = "https://cran.r-project.org/package=sourcetools"
+ url = "https://cran.rstudio.com/src/contrib/crayon_1.3.4.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/crayon"
+ version('1.3.4', '77c7c2906c59a3141306d86c89ffc7d3')
version('1.3.2', 'fe29c6204d2d6ff4c2f9d107a03d0cb9')
diff --git a/var/spack/repos/builtin/packages/r-cubature/package.py b/var/spack/repos/builtin/packages/r-cubature/package.py
index 918f8e9e3d..9f09069094 100644
--- a/var/spack/repos/builtin/packages/r-cubature/package.py
+++ b/var/spack/repos/builtin/packages/r-cubature/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-cubist/package.py b/var/spack/repos/builtin/packages/r-cubist/package.py
new file mode 100644
index 0000000000..8fd4639fc5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-cubist/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RCubist(RPackage):
+ """Regression modeling using rules with added instance-based corrections"""
+
+ homepage = "https://cran.r-project.org/package=Cubist"
+ url = "https://cran.r-project.org/src/contrib/Cubist_0.0.19.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/Cubist"
+
+ version('0.0.19', 'bf9364f655536ec03717fd2ad6223a47')
+
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-curl/package.py b/var/spack/repos/builtin/packages/r-curl/package.py
index 7b62d1be60..0b53d436fd 100644
--- a/var/spack/repos/builtin/packages/r-curl/package.py
+++ b/var/spack/repos/builtin/packages/r-curl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,10 +37,13 @@ class RCurl(RPackage):
package with http specific tools and logic."""
homepage = "https://github.com/jeroenooms/curl"
- url = "https://cran.r-project.org/src/contrib/curl_0.9.7.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/curl_2.3.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/curl"
- version('1.0', '93d34926d6071e1fba7e728b482f0dd9')
+ version('3.0', '741202626eacd1f9c022b0a4d7be6d6a')
+ version('2.3', '7250ee8caed98ba76906ab4d32da60f8')
+ version('1.0', '93d34926d6071e1fba7e728b482f0dd9')
version('0.9.7', 'a101f7de948cb828fef571c730f39217')
+ depends_on('r@3.0.0:')
depends_on('curl')
diff --git a/var/spack/repos/builtin/packages/r-datatable/package.py b/var/spack/repos/builtin/packages/r-data-table/package.py
index 23802524e8..fad200eeb1 100644
--- a/var/spack/repos/builtin/packages/r-datatable/package.py
+++ b/var/spack/repos/builtin/packages/r-data-table/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,18 @@
from spack import *
-class RDatatable(RPackage):
+class RDataTable(RPackage):
"""Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins,
fast add/modify/delete of columns by group using no copies at all, list
columns and a fast file reader (fread). Offers a natural and flexible
syntax, for faster development."""
homepage = "https://github.com/Rdatatable/data.table/wiki"
- url = "https://cran.r-project.org/src/contrib/data.table_1.9.6.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/data.table_1.10.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/data.table"
- version('1.9.6', 'b1c0c7cce490bdf42ab288541cc55372')
+ version('1.10.4-2', '4a2d3541f241088d0979522b4083a765')
+ version('1.10.0', 'f0e08dd5ba1b3f46c59dd1574fe497c1')
+ version('1.9.6', 'b1c0c7cce490bdf42ab288541cc55372')
- depends_on('r-chron', type=('build', 'run'))
+ depends_on('r@3.0.0:')
diff --git a/var/spack/repos/builtin/packages/r-dbi/package.py b/var/spack/repos/builtin/packages/r-dbi/package.py
index f00100bdf0..5aac25d2fb 100644
--- a/var/spack/repos/builtin/packages/r-dbi/package.py
+++ b/var/spack/repos/builtin/packages/r-dbi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,8 +30,8 @@ class RDbi(RPackage):
relational database management systems. All classes in this package are
virtual and need to be extended by the various R/DBMS implementations."""
- homepage = "https://github.com/rstats-db/DBI"
- url = "https://cran.r-project.org/src/contrib/DBI_0.4-1.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/DBI"
-
+ homepage = "http://rstats-db.github.io/DBI"
+ url = "https://cran.rstudio.com/src/contrib/DBI_0.7.tar.gz"
+ list_url = homepage
version('0.4-1', 'c7ee8f1c5037c2284e99c62698d0f087')
+ version('0.7', '66065dd687d758b72d638adb6a8cab2e')
diff --git a/var/spack/repos/builtin/packages/r-delayedarray/package.py b/var/spack/repos/builtin/packages/r-delayedarray/package.py
new file mode 100644
index 0000000000..8cbeb0296b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-delayedarray/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 RDelayedarray(RPackage):
+ """Wrapping an array-like object (typically an on-disk object) in a
+ DelayedArray object allows one to perform common array operations on it
+ without loading the object in memory. In order to reduce memory usage
+ and optimize performance, operations on the object are either delayed
+ or executed using a block processing mechanism. Note that this also
+ works on in-memory array-like objects like DataFrame objects (typically
+ with Rle columns), Matrix objects, and ordinary arrays and data frames.
+ Wrapping an array-like object (typically an on-disk object) in a
+ DelayedArray object allows one to perform common array operations on it
+ without loading the object in memory. In order to reduce memory usage
+ and optimize performance, operations on the object are either delayed
+ or executed using a block processing mechanism. Note that this also
+ works on in-memory array-like objects like DataFrame objects (typically
+ with Rle columns), Matrix objects, and ordinary arrays and data
+ frames."""
+
+ homepage = "https://bioconductor.org/packages/DelayedArray/"
+ url = "https://git.bioconductor.org/packages/DelayedArray"
+ list_url = homepage
+
+ version('0.2.7', git='https://git.bioconductor.org/packages/DelayedArray', commit='909c2ce1665ebae2543172ead50abbe10bd42bc4')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@0.2.7')
diff --git a/var/spack/repos/builtin/packages/r-deldir/package.py b/var/spack/repos/builtin/packages/r-deldir/package.py
new file mode 100644
index 0000000000..d02ecb19ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-deldir/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RDeldir(RPackage):
+ """Calculates the Delaunay triangulation and the Dirichlet or Voronoi
+ tessellation (with respect to the entire plane) of a planar point set.
+ Plots triangulations and tessellations in various ways. Clips
+ tessellations to sub-windows. Calculates perimeters of tessellations.
+ Summarises information about the tiles of the tessellation."""
+
+ homepage = "https://CRAN.R-project.org/package=deldir"
+ url = "https://cran.r-project.org/src/contrib/deldir_0.1-14.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/deldir"
+
+ version('0.1-14', '6a22b13d962615cd9d51b6eae403409f')
+
+ depends_on('r@0.99:')
diff --git a/var/spack/repos/builtin/packages/r-dendextend/package.py b/var/spack/repos/builtin/packages/r-dendextend/package.py
new file mode 100644
index 0000000000..5d98e012fc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-dendextend/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RDendextend(RPackage):
+ """dendextend: Extending 'Dendrogram' Functionality in R"""
+
+ homepage = "https://CRAN.R-project.org/package=dendextend"
+ url = "https://cran.r-project.org/src/contrib/dendextend_1.5.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/dendextend"
+
+ version('1.5.2', '1134869d94005727c63cf3037e2f1bbf')
+
+ depends_on('r@3.0.0:')
+ depends_on('r-magrittr@1.0.1:', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-fpc', type=('build', 'run'))
+ depends_on('r-whisker', type=('build', 'run'))
+ depends_on('r-viridis', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-deoptim/package.py b/var/spack/repos/builtin/packages/r-deoptim/package.py
index 5334953d46..298b790693 100644
--- a/var/spack/repos/builtin/packages/r-deoptim/package.py
+++ b/var/spack/repos/builtin/packages/r-deoptim/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-deoptimr/package.py b/var/spack/repos/builtin/packages/r-deoptimr/package.py
new file mode 100644
index 0000000000..af95c081e0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-deoptimr/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RDeoptimr(RPackage):
+ """An implementation of a bespoke jDE variant of the Differential
+ Evolution stochastic algorithm for global optimization of
+ nonlinear programming problems."""
+
+ homepage = "https://cran.r-project.org/web/packages/DEoptimR/index.html"
+ url = "https://cran.r-project.org/src/contrib/DEoptimR_1.0-8.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/DEoptimR"
+
+ version('1.0-8', 'c85836a504fbe4166e3c8eba0efe705d')
diff --git a/var/spack/repos/builtin/packages/r-deseq/package.py b/var/spack/repos/builtin/packages/r-deseq/package.py
new file mode 100644
index 0000000000..900c82499a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-deseq/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RDeseq(RPackage):
+ """Estimate variance-mean dependence in count data from
+ high-throughput sequencing assays and test for differential
+ expression based on a model using the negative binomial
+ distribution."""
+
+ homepage = "https://www.bioconductor.org/packages/DESeq/"
+ url = "https://git.bioconductor.org/packages/DESeq"
+
+ version('1.28.0', git='https://git.bioconductor.org/packages/DESeq', commit='738371466e6ccf00179fd35b617c8ba0e1e91630')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-geneplotter', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-deseq2/package.py b/var/spack/repos/builtin/packages/r-deseq2/package.py
new file mode 100644
index 0000000000..96a2426c4f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-deseq2/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RDeseq2(RPackage):
+ """Estimate variance-mean dependence in count data from
+ high-throughput sequencing assays and test for differential
+ expression based on a model using the negative binomial
+ distribution."""
+
+ homepage = "https://www.bioconductor.org/packages/DESeq2/"
+ url = "https://git.bioconductor.org/packages/DESeq2"
+
+ version('1.16.1', git='https://git.bioconductor.org/packages/DESeq2', commit='0a815574382704a08ef8b906eceb0296f81cded5')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.16.1')
+ depends_on("r-rcpparmadillo", type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocparallel', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r-geneplotter', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-hmisc', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-desolve/package.py b/var/spack/repos/builtin/packages/r-desolve/package.py
new file mode 100644
index 0000000000..bbcbebcd53
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-desolve/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RDesolve(RPackage):
+ """Functions that solve initial value problems of a system of first-order
+ ordinary differential equations ('ODE'), of partial differential
+ equations ('PDE'), of differential algebraic equations ('DAE'), and of
+ delay differential equations."""
+
+ homepage = "https://cran.r-project.org/package=deSolve"
+ url = "https://cran.r-project.org/src/contrib/deSolve_1.20.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/deSolve"
+
+ version('1.20', '85c6a2d8568944ae8eef27ac7c35fb25')
diff --git a/var/spack/repos/builtin/packages/r-devtools/package.py b/var/spack/repos/builtin/packages/r-devtools/package.py
index 9895a3b390..7b9b789eb3 100644
--- a/var/spack/repos/builtin/packages/r-devtools/package.py
+++ b/var/spack/repos/builtin/packages/r-devtools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,16 +29,19 @@ class RDevtools(RPackage):
"""Collection of package development tools."""
homepage = "https://github.com/hadley/devtools"
- url = "https://cran.r-project.org/src/contrib/devtools_1.11.1.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/devtools_1.12.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/devtools"
+ version('1.12.0', '73b46c446273566e5b21c9f5f72aeca3')
version('1.11.1', '242672ee27d24dddcbdaac88c586b6c2')
- depends_on('r-httr', type=('build', 'run'))
- depends_on('r-memoise', type=('build', 'run'))
+ depends_on('r@3.0.2:')
+
+ depends_on('r-httr@0.4:', type=('build', 'run'))
+ depends_on('r-memoise@1.0.0:', type=('build', 'run'))
depends_on('r-whisker', type=('build', 'run'))
depends_on('r-digest', type=('build', 'run'))
- depends_on('r-rstudioapi', type=('build', 'run'))
+ depends_on('r-rstudioapi@0.2.0:', type=('build', 'run'))
depends_on('r-jsonlite', type=('build', 'run'))
- depends_on('r-git2r', type=('build', 'run'))
+ depends_on('r-git2r@0.11.0:', type=('build', 'run'))
depends_on('r-withr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-diagrammer/package.py b/var/spack/repos/builtin/packages/r-diagrammer/package.py
index 5f8e27a102..650ab64a3f 100644
--- a/var/spack/repos/builtin/packages/r-diagrammer/package.py
+++ b/var/spack/repos/builtin/packages/r-diagrammer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-dichromat/package.py b/var/spack/repos/builtin/packages/r-dichromat/package.py
index ea465e2d6c..b40cff31dd 100644
--- a/var/spack/repos/builtin/packages/r-dichromat/package.py
+++ b/var/spack/repos/builtin/packages/r-dichromat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-digest/package.py b/var/spack/repos/builtin/packages/r-digest/package.py
index 7e077442f9..78b96e03f4 100644
--- a/var/spack/repos/builtin/packages/r-digest/package.py
+++ b/var/spack/repos/builtin/packages/r-digest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -44,7 +44,11 @@ class RDigest(RPackage):
used."""
homepage = "http://dirk.eddelbuettel.com/code/digest.html"
- url = "https://cran.r-project.org/src/contrib/digest_0.6.9.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/digest_0.6.12.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/digest"
- version('0.6.9', '48048ce6c466bdb124716e45ba4a0e83')
+ version('0.6.12', '738efd4d9a37c5a4001ae66e954ce07e')
+ version('0.6.11', '52a864f55846b48b3cab0b5d0304a82a')
+ version('0.6.9', '48048ce6c466bdb124716e45ba4a0e83')
+
+ depends_on('r@2.4.1:')
diff --git a/var/spack/repos/builtin/packages/r-diptest/package.py b/var/spack/repos/builtin/packages/r-diptest/package.py
new file mode 100644
index 0000000000..96d9eea734
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-diptest/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RDiptest(RPackage):
+ """diptest: Hartigan's Dip Test Statistic for Unimodality - Corrected"""
+
+ homepage = "https://CRAN.R-project.org/package=diptest"
+ url = "https://cran.r-project.org/src/contrib/diptest_0.75-7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/diptest"
+
+ version('0.75-7', '1a4a958fda763f7c99cb485dbe5954ab')
diff --git a/var/spack/repos/builtin/packages/r-dnacopy/package.py b/var/spack/repos/builtin/packages/r-dnacopy/package.py
new file mode 100644
index 0000000000..ade0424829
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-dnacopy/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RDnacopy(RPackage):
+ """Implements the circular binary segmentation (CBS) algorithm
+ to segment DNA copy number data and identify genomic regions
+ with abnormal copy number."""
+
+ homepage = "https://www.bioconductor.org/packages/DNAcopy/"
+ url = "https://git.bioconductor.org/packages/DNAcopy"
+
+ version('1.50.1', git='https://git.bioconductor.org/packages/DNAcopy', commit='a20153029e28c009df813dbaf13d9f519fafa4e8')
diff --git a/var/spack/repos/builtin/packages/r-domc/package.py b/var/spack/repos/builtin/packages/r-domc/package.py
new file mode 100644
index 0000000000..9ed4841520
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-domc/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RDomc(RPackage):
+ """Provides a parallel backend for the %dopar% function using
+ the multicore functionality of the parallel package."""
+
+ homepage = "https://cran.r-project.org/package=doMC"
+ url = "https://cran.r-project.org/src/contrib/doMC_1.3.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/doMC"
+
+ version('1.3.4', 'f965b09add9056e84f99a831dc3af7d1')
+
+ depends_on('r@2.14.0:')
+
+ depends_on('r-foreach@1.2.0:', type=('build', 'run'))
+ depends_on('r-iterators@1.0.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-doparallel/package.py b/var/spack/repos/builtin/packages/r-doparallel/package.py
index fa039568c6..1690db07a7 100644
--- a/var/spack/repos/builtin/packages/r-doparallel/package.py
+++ b/var/spack/repos/builtin/packages/r-doparallel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,6 +33,7 @@ class RDoparallel(RPackage):
url = "https://cran.r-project.org/src/contrib/doParallel_1.0.10.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/doParallel"
+ version('1.0.11', 'd7822f0efd7bdf7582d8b43c986be86c')
version('1.0.10', 'd9fbde8f315d98d055483ee3493c9b43')
depends_on('r-foreach', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-dorng/package.py b/var/spack/repos/builtin/packages/r-dorng/package.py
new file mode 100644
index 0000000000..8c69ee810e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-dorng/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RDorng(RPackage):
+ """Provides functions to perform reproducible parallel foreach loops,
+ using independent random streams as generated by L'Ecuyer's combined
+ multiple-recursive generator
+ [L'Ecuyer (1999), <doi:10.1287/opre.47.1.159>]. It enables to easily
+ convert standard %dopar% loops into fully reproducible loops,
+ independently of the number of workers, the task scheduling strategy,
+ or the chosen parallel environment and associated foreach backend."""
+
+ homepage = "https://cran.rstudio.com/web/packages/doRNG/index.html"
+ url = "https://cran.rstudio.com/src/contrib/doRNG_1.6.6.tar.gz"
+ list_url = homepage
+
+ version('1.6.6', 'ffb26024c58c8c99229470293fbf35cf')
+
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-rngtools', type=('build', 'run'))
+ depends_on('r-iterators', type=('build', 'run'))
+ depends_on('r-pkgmaker', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-downloader/package.py b/var/spack/repos/builtin/packages/r-downloader/package.py
new file mode 100644
index 0000000000..a86650fd9f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-downloader/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RDownloader(RPackage):
+ """Provides a wrapper for the download.file function, making it possible to
+ download files over HTTPS on Windows, Mac OS X, and other Unix-like
+ platforms. The 'RCurl' package provides this functionality
+ (and much more) but can be difficult to install because it must be
+ compiled with external dependencies. This package has no external
+ dependencies, so it is much easier to install."""
+
+ homepage = "https://cran.rstudio.com/web/packages/downloader/index.html"
+ url = "https://cran.rstudio.com/src/contrib/downloader_0.4.tar.gz"
+ list_url = homepage
+
+ version('0.4', 'f26daf8fbeb29a1882bf102f62008594')
+
+ depends_on('r-digest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-dplyr/package.py b/var/spack/repos/builtin/packages/r-dplyr/package.py
index 6ffa48adc8..bb2ecc4155 100644
--- a/var/spack/repos/builtin/packages/r-dplyr/package.py
+++ b/var/spack/repos/builtin/packages/r-dplyr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,10 @@ class RDplyr(RPackage):
in memory and out of memory."""
homepage = "https://github.com/hadley/dplyr"
- url = "https://cran.r-project.org/src/contrib/dplyr_0.5.0.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/dplyr"
+ url = "https://cran.rstudio.com/src/contrib/dplyr_0.7.3.tar.gz"
+ list_url = homepage
+ version('0.7.3', 'f9760b796917747e9dcd927ebb531c7d')
version('0.5.0', '1fcafcacca70806eea2e6d465cdb94ef')
depends_on('r-assertthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-dt/package.py b/var/spack/repos/builtin/packages/r-dt/package.py
index ae92f5fd24..a2d01900e1 100644
--- a/var/spack/repos/builtin/packages/r-dt/package.py
+++ b/var/spack/repos/builtin/packages/r-dt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,7 +33,7 @@ class RDt(RPackage):
homepage = "http://rstudio.github.io/DT"
url = "https://cran.r-project.org/src/contrib/DT_0.1.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/DT/"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/DT"
version('0.1', '5c8df984921fa484784ec4b8a4fb6f3c')
diff --git a/var/spack/repos/builtin/packages/r-dygraphs/package.py b/var/spack/repos/builtin/packages/r-dygraphs/package.py
index 323fb6d584..91e2dc5504 100644
--- a/var/spack/repos/builtin/packages/r-dygraphs/package.py
+++ b/var/spack/repos/builtin/packages/r-dygraphs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-e1071/package.py b/var/spack/repos/builtin/packages/r-e1071/package.py
index 4d79fcccd7..7be5264895 100644
--- a/var/spack/repos/builtin/packages/r-e1071/package.py
+++ b/var/spack/repos/builtin/packages/r-e1071/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,7 @@ class RE1071(RPackage):
homepage = "https://cran.r-project.org/package=e1071"
url = "https://cran.r-project.org/src/contrib/e1071_1.6-7.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/e1071"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/e1071"
version('1.6-7', 'd109a7e3dd0c905d420e327a9a921f5a')
diff --git a/var/spack/repos/builtin/packages/r-edger/package.py b/var/spack/repos/builtin/packages/r-edger/package.py
new file mode 100644
index 0000000000..2d9da861db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-edger/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 REdger(RPackage):
+ """Differential expression analysis of RNA-seq expression profiles with
+ biological replication. Implements a range of statistical methodology
+ based on the negative binomial distributions, including empirical Bayes
+ estimation, exact tests, generalized linear models and quasi-likelihood
+ tests. As well as RNA-seq, it be applied to differential signal analysis
+ of other types of genomic data that produce counts, including ChIP-seq,
+ SAGE and CAGE."""
+
+ homepage = "https://bioconductor.org/packages/edgeR/"
+ url = "https://git.bioconductor.org/packages/edgeR"
+ list_url = homepage
+
+ version('3.18.1', git='https://git.bioconductor.org/packages/edgeR', commit='101106f3fdd9e2c45d4a670c88f64c12e97a0495')
+
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-locfit', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@3.18.1')
diff --git a/var/spack/repos/builtin/packages/r-ellipse/package.py b/var/spack/repos/builtin/packages/r-ellipse/package.py
new file mode 100644
index 0000000000..52393ed66a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ellipse/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 REllipse(RPackage):
+ """This package contains various routines for drawing ellipses and
+ ellipse-like confidence regions."""
+
+ homepage = "https://cran.r-project.org/package=ellipse"
+ url = "https://cran.r-project.org/src/contrib/ellipse_0.3-8.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ellipse"
+
+ version('0.3-8', '385f5ec5e49bcda4317ca9dffd33f771')
+
+ depends_on('r@2.0.0:')
diff --git a/var/spack/repos/builtin/packages/r-ensembldb/package.py b/var/spack/repos/builtin/packages/r-ensembldb/package.py
new file mode 100644
index 0000000000..c6f424a855
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ensembldb/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 REnsembldb(RPackage):
+ """The package provides functions to create and use transcript centric
+ annotation databases/packages. The annotation for the databases are
+ directly fetched from Ensembl using their Perl API. The functionality
+ and data is similar to that of the TxDb packages from the
+ GenomicFeatures package, but, in addition to retrieve all
+ gene/transcript models and annotations from the database, the ensembldb
+ package provides also a filter framework allowing to retrieve
+ annotations for specific entries like genes encoded on a chromosome
+ region or transcript models of lincRNA genes."""
+
+ homepage = "https://bioconductor.org/packages/ensembldb/"
+ url = "https://git.bioconductor.org/packages/ensembldb"
+ list_url = homepage
+
+ version('2.0.4', git='https://git.bioconductor.org/packages/ensembldb', commit='514623d71e3cca7a4e547adb579b5a958702ef86')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-annotationfilter', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-annotationhub', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-protgenerics', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-curl', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ergm/package.py b/var/spack/repos/builtin/packages/r-ergm/package.py
new file mode 100644
index 0000000000..419119e2b0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ergm/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RErgm(RPackage):
+ """An integrated set of tools to analyze and simulate networks based
+ on exponential-family random graph models (ERGM). "ergm" is a
+ part of the "statnet" suite of packages for network analysis."""
+
+ homepage = "http://statnet.org"
+ url = "https://cran.r-project.org/src/contrib/ergm_3.7.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ergm"
+
+ version('3.7.1', '431ae430c76b2408988f469831d80126')
+
+ depends_on('r-robustbase@0.9-10:', type=('build', 'run'))
+ depends_on('r-coda@0.18-1:', type=('build', 'run'))
+ depends_on('r-trust', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
+ depends_on('r-lpsolve', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-statnet-common@3.3:', type=('build', 'run'))
+ depends_on('r-network@1.13:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-evaluate/package.py b/var/spack/repos/builtin/packages/r-evaluate/package.py
index cf6c72dc62..d32bff7319 100644
--- a/var/spack/repos/builtin/packages/r-evaluate/package.py
+++ b/var/spack/repos/builtin/packages/r-evaluate/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,10 +31,14 @@ class REvaluate(RPackage):
"""Parsing and evaluation tools that make it easy to recreate the command
line behaviour of R."""
- homepage = "https://github.com/hadley/evaluate"
- url = "https://cran.rstudio.com/src/contrib/evaluate_0.9.tar.gz"
+ homepage = "https://cran.r-project.org/package=evaluate"
+ url = "https://cran.rstudio.com/src/contrib/evaluate_0.10.1.tar.gz"
list_url = "https://cran.rstudio.com/src/contrib/Archive/evaluate"
- version('0.9', '877d89ce8a9ef7f403b1089ca1021775')
+ version('0.10.1', '1dde5a35e2b9d57f1b1bb16791b35ff5')
+ version('0.10', 'c49326babf984a8b36e7e276da370ad2')
+ version('0.9', '877d89ce8a9ef7f403b1089ca1021775')
- depends_on('r-stringr', type=('build', 'run'))
+ depends_on('r@3.0.2:')
+
+ depends_on('r-stringr@0.6.2:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-expm/package.py b/var/spack/repos/builtin/packages/r-expm/package.py
new file mode 100644
index 0000000000..48080163de
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-expm/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RExpm(RPackage):
+ """Computation of the matrix exponential, logarithm, sqrt, and related
+ quantities."""
+
+ homepage = "http://R-Forge.R-project.org/projects/expm"
+ url = "https://cran.r-project.org/src/contrib/expm_0.999-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/expm"
+
+ version('0.999-2', 'e05fa3f995754af92bd03227625da984')
diff --git a/var/spack/repos/builtin/packages/r-factoextra/package.py b/var/spack/repos/builtin/packages/r-factoextra/package.py
new file mode 100644
index 0000000000..518f4d6a63
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-factoextra/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RFactoextra(RPackage):
+ """factoextra: Extract and Visualize the Results of Multivariate Data
+ Analyses"""
+
+ homepage = "http://www.sthda.com/english/rpkgs/factoextra"
+ url = "https://cran.r-project.org/src/contrib/factoextra_1.0.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/factoextra"
+
+ version('1.0.4', 'aa4c81ca610f17fdee0c9f3379e35429')
+
+ depends_on('r@3.1.0:')
+ depends_on('r-ggplot2@2.2.0:', type=('build', 'run'))
+ depends_on('r-abind', type=('build', 'run'))
+ # depends_on('r-cluster', type=('build', 'run'))
+ depends_on('r-dendextend', type=('build', 'run'))
+ depends_on('r-factominer', type=('build', 'run'))
+ depends_on('r-ggpubr', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-ggrepel', type=('build', 'run'))
+ depends_on('r-tidyr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-factominer/package.py b/var/spack/repos/builtin/packages/r-factominer/package.py
new file mode 100644
index 0000000000..d2abf10ff7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-factominer/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RFactominer(RPackage):
+ """FactoMineR: Multivariate Exploratory Data Analysis and Data Mining"""
+
+ homepage = "http://factominer.free.fr"
+ url = "https://cran.r-project.org/src/contrib/FactoMineR_1.35.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/FactoMineR"
+
+ version('1.35', 'bef076181ce942016114dd7a6f5c2348')
+
+ depends_on('r@3.3.0:')
+ depends_on('r-car', type=('build', 'run'))
+ # depends_on('r-cluster', type=('build', 'run'))
+ depends_on('r-ellipse', type=('build', 'run'))
+ depends_on('r-flashclust', type=('build', 'run'))
+ # depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-leaps', type=('build', 'run'))
+ # depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-scatterplot3d', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ff/package.py b/var/spack/repos/builtin/packages/r-ff/package.py
new file mode 100644
index 0000000000..1bb7250658
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ff/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RFf(RPackage):
+ """memory-efficient storage of large data on disk and
+ fast access functions."""
+
+ homepage = "http://ff.r-forge.r-project.org/"
+ url = "https://cran.rstudio.com/src/contrib/ff_2.2-13.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ff"
+
+ version('2.2-13', '4adf8840d24cb6e2927a3ef885c86fcd')
+
+ depends_on('r-bit', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-filehash/package.py b/var/spack/repos/builtin/packages/r-filehash/package.py
index b17335ed11..b7cfbb19ce 100644
--- a/var/spack/repos/builtin/packages/r-filehash/package.py
+++ b/var/spack/repos/builtin/packages/r-filehash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-flashclust/package.py b/var/spack/repos/builtin/packages/r-flashclust/package.py
new file mode 100644
index 0000000000..cfaee392db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-flashclust/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RFlashclust(RPackage):
+ """flashClust: Implementation of optimal hierarchical clustering"""
+
+ homepage = "https://CRAN.R-project.org/package=flashClust"
+ url = "https://cran.r-project.org/src/contrib/flashClust_1.01-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/flashClust"
+
+ version('1.01-2', '23409aeeef98bf35d0b3d5dd755fdeff')
+
+ depends_on('r@2.3.0:')
diff --git a/var/spack/repos/builtin/packages/r-flexmix/package.py b/var/spack/repos/builtin/packages/r-flexmix/package.py
new file mode 100644
index 0000000000..82ea3f068a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-flexmix/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RFlexmix(RPackage):
+ """flexmix: Flexible Mixture Modeling"""
+
+ homepage = "https://CRAN.R-project.org/package=flexmix"
+ url = "https://cran.r-project.org/src/contrib/flexmix_2.3-14.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/flexmix"
+
+ version('2.3-14', '5be4f7764e6a697f4586e60c2bf6e960')
+
+ depends_on('r@2.15.0:')
+ # depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-modeltools@0.2-16:', type=('build', 'run'))
+ # depends_on('r-nnet', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-foreach/package.py b/var/spack/repos/builtin/packages/r-foreach/package.py
index 78efe02188..bf542efaea 100644
--- a/var/spack/repos/builtin/packages/r-foreach/package.py
+++ b/var/spack/repos/builtin/packages/r-foreach/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-forecast/package.py b/var/spack/repos/builtin/packages/r-forecast/package.py
new file mode 100644
index 0000000000..e6549a30dd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-forecast/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 RForecast(RPackage):
+ """Methods and tools for displaying and analysing univariate time
+ series forecasts including exponential smoothing via state space
+ models and automatic ARIMA modelling."""
+
+ homepage = "https://cran.r-project.org/package=forecast"
+ url = "https://cran.r-project.org/src/contrib/forecast_8.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/forecast"
+
+ version('8.2', '3ef095258984364c100b771b3c90d15e')
+
+ depends_on('r-magrittr', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-colorspace', type=('build', 'run'))
+ depends_on('r-nnet', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-fracdiff', type=('build', 'run'))
+ depends_on('r-tseries', type=('build', 'run'))
+ depends_on('r-lmtest', type=('build', 'run'))
+ depends_on('r-zoo', type=('build', 'run'))
+ depends_on('r-timedate', type=('build', 'run'))
+ depends_on('r-rcpparmadillo', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-foreign/package.py b/var/spack/repos/builtin/packages/r-foreign/package.py
index b293f091c2..f43e0ad0e4 100644
--- a/var/spack/repos/builtin/packages/r-foreign/package.py
+++ b/var/spack/repos/builtin/packages/r-foreign/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-formatr/package.py b/var/spack/repos/builtin/packages/r-formatr/package.py
index 011111af07..e6fa3c6824 100644
--- a/var/spack/repos/builtin/packages/r-formatr/package.py
+++ b/var/spack/repos/builtin/packages/r-formatr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,10 +33,11 @@ class RFormatr(RPackage):
human-readable and tidy. There is also a Shiny app as a user interface in
this package."""
- homepage = "http://yihui.name/formatR"
- url = "https://cran.r-project.org/src/contrib/formatR_1.4.tar.gz"
+ homepage = "https://cran.r-project.org/package=formatR"
+ url = "https://cran.r-project.org/src/contrib/formatR_1.5.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/formatR"
+ version('1.5', 'ac735515b8e4c32097154f1b68c5ecc7')
version('1.4', '98b9b64b2785b35f9df403e1aab6c73c')
depends_on('r-codetools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-formula/package.py b/var/spack/repos/builtin/packages/r-formula/package.py
index 5515ca91a3..499ebfa8da 100644
--- a/var/spack/repos/builtin/packages/r-formula/package.py
+++ b/var/spack/repos/builtin/packages/r-formula/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,8 @@ class RFormula(RPackage):
side and/or multiple responses on the left-hand side."""
homepage = "https://cran.r-project.org/package=Formula"
- url = "https://cran.r-project.org/src/contrib/Formula_1.2-1.tar.gz"
+ url = "https://cran.rstudio.com/src/contrib/Formula_1.2-2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/Formula"
+ version('1.2-2', 'c69bb0522811cf8eb9f1cc6c3d182b6e')
version('1.2-1', '2afb31e637cecd0c1106317aca1e4849')
diff --git a/var/spack/repos/builtin/packages/r-fpc/package.py b/var/spack/repos/builtin/packages/r-fpc/package.py
new file mode 100644
index 0000000000..4628970171
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-fpc/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 RFpc(RPackage):
+ """fpc: Flexible Procedures for Clustering"""
+
+ homepage = "http://www.homepages.ucl.ac.uk/~ucakche"
+ url = "https://cran.r-project.org/src/contrib/fpc_2.1-10.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/fpc"
+
+ version('2.1-10', '75e5340e416cd13d7751e06f1c07866b')
+
+ depends_on('r@2.0.0:')
+ # depends_on('r-mass', type=('build', 'run'))
+ # depends_on('r-cluster', type=('build', 'run'))
+ depends_on('r-mclust', type=('build', 'run'))
+ depends_on('r-flexmix', type=('build', 'run'))
+ depends_on('r-prabclus', type=('build', 'run'))
+ # depends_on('r-class', type=('build', 'run'))
+ depends_on('r-diptest', type=('build', 'run'))
+ depends_on('r-mvtnorm', type=('build', 'run'))
+ depends_on('r-robustbase', type=('build', 'run'))
+ depends_on('r-kernlab', type=('build', 'run'))
+ depends_on('r-trimcluster', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-fracdiff/package.py b/var/spack/repos/builtin/packages/r-fracdiff/package.py
new file mode 100644
index 0000000000..c5ed63b240
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-fracdiff/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RFracdiff(RPackage):
+ """Maximum likelihood estimation of the parameters of a
+ fractionally differenced ARIMA(p,d,q) model (Haslett and
+ Raftery, Appl.Statistics, 1989)."""
+
+ homepage = "https://cran.r-project.org/package=fracdiff"
+ url = "https://cran.r-project.org/src/contrib/fracdiff_1.4-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/fracdiff"
+
+ version('1.4-2', '6a6977d175ad963d9675736a8f8d41f7')
diff --git a/var/spack/repos/builtin/packages/r-futile-logger/package.py b/var/spack/repos/builtin/packages/r-futile-logger/package.py
new file mode 100644
index 0000000000..25229e9581
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-futile-logger/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RFutileLogger(RPackage):
+ """Provides a simple yet powerful logging utility. Based loosely on log4j,
+ futile.logger takes advantage of R idioms to make logging a convenient
+ and easy to use replacement for cat and print statements."""
+
+ homepage = "https://cran.rstudio.com/web/packages/futile.logger/index.html"
+ url = "https://cran.rstudio.com/src/contrib/futile.logger_1.4.3.tar.gz"
+ list_url = homepage
+
+ version('1.4.3', 'ba0e8d2dfb5a970b51c21907bbf8bfc2')
+
+ depends_on('r-lambda-r', type=('build', 'run'))
+ depends_on('r-futile-options', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-futile-options/package.py b/var/spack/repos/builtin/packages/r-futile-options/package.py
new file mode 100644
index 0000000000..9d0ee93d13
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-futile-options/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/spack/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 RFutileOptions(RPackage):
+ """A scoped options management framework"""
+
+ homepage = "https://cran.rstudio.com/web/packages/futile.options/index.html"
+ url = "https://cran.rstudio.com/src/contrib/futile.options_1.0.0.tar.gz"
+
+ version('1.0.0', '8fd845774bbce56f41f7c43c3b4c13ba')
diff --git a/var/spack/repos/builtin/packages/r-gbm/package.py b/var/spack/repos/builtin/packages/r-gbm/package.py
new file mode 100644
index 0000000000..cddc0c77be
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gbm/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RGbm(RPackage):
+ """Generalized Boosted Regression Models."""
+
+ homepage = "https://cran.rstudio.com/web/packages/gbm/index.html"
+ url = "https://cran.rstudio.com/src/contrib/gbm_2.1.3.tar.gz"
+
+ version('2.1.3', '9b2f32c892c6e31b01c1162e3b16b3f4')
+
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gcrma/package.py b/var/spack/repos/builtin/packages/r-gcrma/package.py
new file mode 100644
index 0000000000..b54315796a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gcrma/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RGcrma(RPackage):
+ """Background adjustment using sequence information"""
+
+ homepage = "https://bioconductor.org/packages/gcrma/"
+ url = "https://git.bioconductor.org/packages/gcrma"
+ list_url = homepage
+
+ version('2.48.0', git='https://git.bioconductor.org/packages/gcrma', commit='3ea0eb0b5c15ffb24df76620667ae7996ed715b4')
+
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affyio', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-biocinstaller', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.48.0')
diff --git a/var/spack/repos/builtin/packages/r-gdata/package.py b/var/spack/repos/builtin/packages/r-gdata/package.py
index ef001699bb..e07fc8d360 100644
--- a/var/spack/repos/builtin/packages/r-gdata/package.py
+++ b/var/spack/repos/builtin/packages/r-gdata/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,9 +45,10 @@ class RGdata(RPackage):
both scalar and vector arguments ('resample')."""
homepage = "https://cran.r-project.org/package=gdata"
- url = "https://cran.r-project.org/src/contrib/gdata_2.17.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/gdata_2.18.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/gdata"
+ version('2.18.0', 'f831019aa743fe11dcf0a051e4280921')
version('2.17.0', 'c716b663b9dc16ad8cafe6acc781a75f')
depends_on('r-gtools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-geiger/package.py b/var/spack/repos/builtin/packages/r-geiger/package.py
new file mode 100644
index 0000000000..c2ce69ef37
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-geiger/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RGeiger(RPackage):
+ """Methods for fitting macroevolutionary models to phylogenetic trees."""
+
+ homepage = "https://cran.r-project.org/package=geiger"
+ url = "https://cran.r-project.org/src/contrib/geiger_2.0.6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/geiger"
+
+ version('2.0.6', 'e5e1a407ea56805227d0f91bf6d95afc')
+
+ depends_on('r-ape@3.0:', type=('build', 'run'))
+ depends_on('r-mvtnorm', type=('build', 'run'))
+ depends_on('r-subplex', type=('build', 'run'))
+ depends_on('r-desolve@1.7:', type=('build', 'run'))
+ depends_on('r-digest', type=('build', 'run'))
+ depends_on('r-rcpp@0.9.0:', type=('build', 'run'))
+ depends_on('r-coda', type=('build', 'run'))
+ depends_on('r-ncbit', type=('build', 'run'))
+ depends_on('r-colorspace', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-genefilter/package.py b/var/spack/repos/builtin/packages/r-genefilter/package.py
new file mode 100644
index 0000000000..e5b631d778
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genefilter/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RGenefilter(RPackage):
+ """Some basic functions for filtering genes"""
+
+ homepage = "https://bioconductor.org/packages/genefilter/"
+ url = "https://git.bioconductor.org/packages/genefilter"
+ list_url = homepage
+ version('1.58.1', git='https://git.bioconductor.org/packages/genefilter', commit='ace2556049677f60882adfe91f8cc96791556fc2')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.58.1')
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-geneplotter/package.py b/var/spack/repos/builtin/packages/r-geneplotter/package.py
new file mode 100644
index 0000000000..940c87e01f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-geneplotter/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RGeneplotter(RPackage):
+ """Functions for plotting genomic data."""
+
+ homepage = "https://www.bioconductor.org/packages/geneplotter/"
+ url = "https://git.bioconductor.org/packages/geneplotter"
+
+ version('1.54.0', git='https://git.bioconductor.org/packages/geneplotter', commit='efdd946e092e44e35fde1eb4bcc5ec1d52090940')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-genomeinfodb/package.py b/var/spack/repos/builtin/packages/r-genomeinfodb/package.py
new file mode 100644
index 0000000000..85a161a01b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genomeinfodb/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RGenomeinfodb(RPackage):
+ """Contains data and functions that define and allow translation between
+ different chromosome sequence naming conventions (e.g., "chr1"
+ versus "1"), including a function that attempts to place sequence
+ names in their natural, rather than lexicographic, order."""
+
+ homepage = "https://bioconductor.org/packages/GenomeInfoDb/"
+ url = "https://git.bioconductor.org/packages/GenomeInfoDb"
+ list_url = homepage
+
+ version('1.12.3', git='https://git.bioconductor.org/packages/GenomeInfoDb', commit='2deef3f0571b7f622483257bc22d2509ab5a0369')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-genomeinfodbdata', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.12.3')
diff --git a/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py b/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py
new file mode 100644
index 0000000000..8e231ac43c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genomeinfodbdata/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RGenomeinfodbdata(RPackage):
+ """for mapping between NCBI taxonomy ID and species. Used by functions
+ in the GenomeInfoDb package."""
+
+ homepage = "http://www.example.co://bioconductor.org/packages/3.5/data/annotation/html/GenomeInfoDbData.html"
+ url = "https://bioconductor.org/packages/3.5/data/annotation/src/contrib/GenomeInfoDbData_0.99.0.tar.gz"
+
+ version('0.99.0', '85977b51061dd02a90153db887040d05')
+ depends_on('r@3.4.0:3.4.9', when='@0.99.0')
diff --git a/var/spack/repos/builtin/packages/r-genomicalignments/package.py b/var/spack/repos/builtin/packages/r-genomicalignments/package.py
new file mode 100644
index 0000000000..4a26b91538
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genomicalignments/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 RGenomicalignments(RPackage):
+ """Provides efficient containers for storing and manipulating short genomic
+ alignments (typically obtained by aligning short reads to a reference
+ genome). This includes read counting, computing the coverage, junction
+ detection, and working with the nucleotide content of the alignments."""
+
+ homepage = "https://bioconductor.org/packages/GenomicAlignments/"
+ url = "https://git.bioconductor.org/packages/GenomicAlignments"
+ list_url = homepage
+
+ version('1.12.2', git='https://git.bioconductor.org/packages/GenomicAlignments', commit='b5d6f19e4a89b6c1c3e9e58e5ea4eb13870874ef')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-biocparallel', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.12.2')
diff --git a/var/spack/repos/builtin/packages/r-genomicfeatures/package.py b/var/spack/repos/builtin/packages/r-genomicfeatures/package.py
new file mode 100644
index 0000000000..a9e4bf5143
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genomicfeatures/package.py
@@ -0,0 +1,58 @@
+##############################################################################
+# 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/spack/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 RGenomicfeatures(RPackage):
+ """A set of tools and methods for making and manipulating transcript
+ centric annotations. With these tools the user can easily download the
+ genomic locations of the transcripts, exons and cds of a given organism,
+ from either the UCSC Genome Browser or a BioMart database (more sources
+ will be supported in the future). This information is then stored in a
+ local database that keeps track of the relationship between transcripts,
+ exons, cds and genes. Flexible methods are provided for extracting the
+ desired features in a convenient format."""
+
+ homepage = "http://bioconductor.org/packages/GenomicFeatures/"
+ url = "https://git.bioconductor.org/packages/GenomicFeatures"
+ list_url = homepage
+
+ version('1.28.5', git='https://git.bioconductor.org/packages/GenomicFeatures', commit='ba92381ae93cb1392dad5e6acfab8f6c1d744834')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-biomart', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.28.5')
diff --git a/var/spack/repos/builtin/packages/r-genomicranges/package.py b/var/spack/repos/builtin/packages/r-genomicranges/package.py
new file mode 100644
index 0000000000..bd3f685acd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-genomicranges/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 RGenomicranges(RPackage):
+ """The ability to efficiently represent and manipulate genomic annotations
+ and alignments is playing a central role when it comes to analyzing
+ high-throughput sequencing data (a.k.a. NGS data). The GenomicRanges
+ package defines general purpose containers for storing and manipulating
+ genomic intervals and variables defined along a genome. More specialized
+ containers for representing and manipulating short alignments against a
+ reference genome, or a matrix-like summarization of an experiment, are
+ defined in the GenomicAlignments and SummarizedExperiment packages
+ respectively. Both packages build on top of the GenomicRanges
+ infrastructure."""
+
+ homepage = "https://bioconductor.org/packages/GenomicRanges/"
+ url = "https://git.bioconductor.org/packages/GenomicRanges"
+ list_url = homepage
+
+ version('1.28.6', git='https://git.bioconductor.org/packages/GenomicRanges', commit='197472d618f3ed04c795dc6ed435500c29619563')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.28.6')
diff --git a/var/spack/repos/builtin/packages/r-geomorph/package.py b/var/spack/repos/builtin/packages/r-geomorph/package.py
new file mode 100644
index 0000000000..1cb82c9d7e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-geomorph/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RGeomorph(RPackage):
+ """Read, manipulate, and digitize landmark data, generate shape variables
+ via Procrustes analysis for points, curves and surfaces, perform shape
+ analyses, and provide graphical depictions of shapes and patterns of
+ shape variation."""
+
+ homepage = "https://cran.r-project.org/package=geomorph"
+ url = "https://cran.r-project.org/src/contrib/geomorph_3.0.5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/geomorph"
+
+ version('3.0.5', '240e69fe260ca3ef4d84b4281d61396c')
+
+ depends_on('r-rgl', type=('build', 'run'))
+ depends_on('r-ape', type=('build', 'run'))
+ depends_on('r-jpeg', type=('build', 'run'))
+ depends_on('r-geiger', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-geoquery/package.py b/var/spack/repos/builtin/packages/r-geoquery/package.py
new file mode 100644
index 0000000000..fd2c497430
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-geoquery/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RGeoquery(RPackage):
+ """The NCBI Gene Expression Omnibus (GEO) is a public repository of
+ microarray data. Given the rich and varied nature of this resource,
+ it is only natural to want to apply BioConductor tools to these data.
+ GEOquery is the bridge between GEO and BioConductor."""
+
+ homepage = "https://bioconductor.org/packages/GEOquery/"
+ url = "https://git.bioconductor.org/packages/GEOquery"
+ list_url = homepage
+
+ version('2.42.0', git='https://git.bioconductor.org/packages/GEOquery', commit='c26adef8d3ddbd6932a3170f2f84f6e4327641fb')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-httr', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.42.0')
diff --git a/var/spack/repos/builtin/packages/r-geosphere/package.py b/var/spack/repos/builtin/packages/r-geosphere/package.py
index d90594a3e0..ee93217fb5 100644
--- a/var/spack/repos/builtin/packages/r-geosphere/package.py
+++ b/var/spack/repos/builtin/packages/r-geosphere/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-getoptlong/package.py b/var/spack/repos/builtin/packages/r-getoptlong/package.py
new file mode 100644
index 0000000000..5d6fe4f5dd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-getoptlong/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RGetoptlong(RPackage):
+ """This is yet another command-line argument parser which wraps the
+ powerful Perl module Getopt::Long and with some adaptation for easier
+ use in R. It also provides a simple way for variable interpolation in
+ R."""
+
+ homepage = "https://cran.rstudio.com/web/packages/GetoptLong/index.html"
+ url = "https://cran.rstudio.com/src/contrib/GetoptLong_0.1.6.tar.gz"
+ list_url = homepage
+
+ version('0.1.6', 'e4b964d0817cb6c6a707297b21405749')
+
+ depends_on('r-rjson', type=('build', 'run'))
+ depends_on('r-globaloptions', type=('build', 'run'))
+ depends_on('perl')
diff --git a/var/spack/repos/builtin/packages/r-ggally/package.py b/var/spack/repos/builtin/packages/r-ggally/package.py
new file mode 100644
index 0000000000..f06d8257d3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggally/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RGgally(RPackage):
+ """The R package 'ggplot2' is a plotting system based on the grammar of
+ graphics. 'GGally' extends 'ggplot2' by adding several functions to
+ reduce the complexity of combining geometric objects with transformed
+ data. Some of these functions include a pairwise plot matrix, a two
+ group pairwise plot matrix, a parallel coordinates plot, a survival
+ plot, and several functions to plot networks."""
+
+ homepage = "https://cran.r-project.org/package=GGally"
+ url = "https://cran.r-project.org/src/contrib/GGally_1.3.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/GGally"
+
+ version('1.3.2', 'efe58133ba8431198af7afb6bcb76264')
+
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-gtable', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-progress', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-reshape', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggbio/package.py b/var/spack/repos/builtin/packages/r-ggbio/package.py
new file mode 100644
index 0000000000..8c5f27885a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggbio/package.py
@@ -0,0 +1,69 @@
+##############################################################################
+# 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/spack/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 RGgbio(RPackage):
+ """The ggbio package extends and specializes the grammar of graphics for
+ biological data. The graphics are designed to answer common scientific
+ questions, in particular those often asked of high throughput genomics
+ data. All core Bioconductor data structures are supported, where
+ appropriate. The package supports detailed views of particular genomic
+ regions, as well as genome-wide overviews. Supported overviews include
+ ideograms and grand linear views. High-level plots include sequence
+ fragment length, edge-linked interval to data view, mismatch pileup,
+ and several splicing summaries."""
+
+ homepage = "http://bioconductor.org/packages/ggbio/"
+ url = "https://git.bioconductor.org/packages/ggbio"
+ list_url = homepage
+
+ version('1.24.1', git='https://git.bioconductor.org/packages/ggbio', commit='ef04c1bca1330f37152bcc21080cbde94849a094')
+
+ depends_on('r-gridextra', type=('build', 'run'))
+ depends_on('r-scales', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-gtable', type=('build', 'run'))
+ depends_on('r-hmisc', type=('build', 'run'))
+ depends_on('r-biovizbase', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-bsgenome', type=('build', 'run'))
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-organismdbi', type=('build', 'run'))
+ depends_on('r-ggally', type=('build', 'run'))
+ depends_on('r-ensembldb', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-annotationfilter', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.24.1')
diff --git a/var/spack/repos/builtin/packages/r-ggdendro/package.py b/var/spack/repos/builtin/packages/r-ggdendro/package.py
new file mode 100644
index 0000000000..e86180d4ac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggdendro/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RGgdendro(RPackage):
+ """This is a set of tools for dendrograms and tree plots using
+ 'ggplot2'. The 'ggplot2' philosophy is to clearly separate data
+ from the presentation. Unfortunately the plot method for
+ dendrograms plots directly to a plot device without exposing
+ the data. The 'ggdendro' package resolves this by making
+ available functions that extract the dendrogram plot data.
+ The package provides implementations for tree, rpart, as well
+ as diana and agnes cluster diagrams."""
+
+ homepage = "https://cran.r-project.org/package=ggdendro"
+ url = "https://cran.rstudio.com/src/contrib/ggdendro_0.1-20.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/ggdendro"
+
+ version('0.1-20', '787552e346432c758633d8f4b2675eb6')
+
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggmap/package.py b/var/spack/repos/builtin/packages/r-ggmap/package.py
index 65a69553a1..a3c16f7a45 100644
--- a/var/spack/repos/builtin/packages/r-ggmap/package.py
+++ b/var/spack/repos/builtin/packages/r-ggmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-ggplot2/package.py b/var/spack/repos/builtin/packages/r-ggplot2/package.py
index 3b4c437f0c..c2c5e49832 100644
--- a/var/spack/repos/builtin/packages/r-ggplot2/package.py
+++ b/var/spack/repos/builtin/packages/r-ggplot2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,14 +35,19 @@ class RGgplot2(RPackage):
documentation and examples."""
homepage = "http://ggplot2.org/"
- url = "https://cran.r-project.org/src/contrib/ggplot2_2.1.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/ggplot2_2.2.1.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/ggplot2"
+ version('2.2.1', '14c5a3507bc123c6e7e9ad3bef7cee5c')
version('2.1.0', '771928cfb97c649c720423deb3ec7fd3')
+ depends_on('r@3.1:')
+
depends_on('r-digest', type=('build', 'run'))
- depends_on('r-gtable', type=('build', 'run'))
+ depends_on('r-gtable@0.1.1:', type=('build', 'run'))
depends_on('r-mass', type=('build', 'run'))
- depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-plyr@1.7.1:', type=('build', 'run'))
depends_on('r-reshape2', type=('build', 'run'))
- depends_on('r-scales', type=('build', 'run'))
+ depends_on('r-scales@0.4.1:', type=('build', 'run'))
+ depends_on('r-tibble', type=('build', 'run'))
+ depends_on('r-lazyeval', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggpubr/package.py b/var/spack/repos/builtin/packages/r-ggpubr/package.py
new file mode 100644
index 0000000000..ebc505bf5b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggpubr/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RGgpubr(RPackage):
+ """ggpubr: 'ggplot2' Based Publication Ready Plots"""
+
+ homepage = "http://www.sthda.com/english/rpkgs/ggpubr"
+ url = "https://cran.r-project.org/src/contrib/ggpubr_0.1.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ggpubr"
+
+ version('0.1.2', '42a5749ae44121597ef511a7424429d1')
+
+ depends_on('r@3.1.0:')
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-ggrepel', type=('build', 'run'))
+ depends_on('r-ggsci', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggrepel/package.py b/var/spack/repos/builtin/packages/r-ggrepel/package.py
new file mode 100644
index 0000000000..a44a22ee1e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggrepel/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RGgrepel(RPackage):
+ """ggrepel: Repulsive Text and Label Geoms for 'ggplot2'"""
+
+ homepage = "http://github.com/slowkow/ggrepel"
+ url = "https://cran.r-project.org/src/contrib/ggrepel_0.6.5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ggrepel"
+
+ version('0.6.5', '7e2732cd4840efe2dc9e4bc689cf1ee5')
+
+ depends_on('r@3.0.0:')
+ depends_on('r-ggplot2@2.0.0:', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-scales@0.3.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggsci/package.py b/var/spack/repos/builtin/packages/r-ggsci/package.py
new file mode 100644
index 0000000000..1fedf202ee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ggsci/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RGgsci(RPackage):
+ """ggsci: Scientific Journal and Sci-Fi Themed Color Palettes for
+ 'ggplot2'"""
+
+ homepage = "https://github.com/road2stat/ggsci"
+ url = "https://cran.r-project.org/src/contrib/ggsci_2.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ggsci"
+
+ version('2.4', '8e5dc2fcf84352cacbb91363e26c7175')
+
+ depends_on('r@3.0.2:')
+ depends_on('r-scales', type=('build', 'run'))
+ depends_on('r-ggplot2@2.0.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ggvis/package.py b/var/spack/repos/builtin/packages/r-ggvis/package.py
index 5acbff04b0..2f62ee23db 100644
--- a/var/spack/repos/builtin/packages/r-ggvis/package.py
+++ b/var/spack/repos/builtin/packages/r-ggvis/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,9 +31,10 @@ class RGgvis(RPackage):
and web graphics from 'vega'."""
homepage = "http://ggvis.rstudio.com/"
- url = "https://cran.r-project.org/src/contrib/ggvis_0.4.2.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/ggvis"
+ url = "https://cran.rstudio.com/src/contrib/ggvis_0.4.3.tar.gz"
+ list_url = homepage
+ version('0.4.3', '30297d464278a7974fb125bcc7d84e77')
version('0.4.2', '039f45e5c7f1e0652779163d7d99f922')
depends_on('r-assertthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gistr/package.py b/var/spack/repos/builtin/packages/r-gistr/package.py
index 67c34cfffc..7cbe2ecafe 100644
--- a/var/spack/repos/builtin/packages/r-gistr/package.py
+++ b/var/spack/repos/builtin/packages/r-gistr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-git2r/package.py b/var/spack/repos/builtin/packages/r-git2r/package.py
index 7c4ff3144b..3fa8baab7c 100644
--- a/var/spack/repos/builtin/packages/r-git2r/package.py
+++ b/var/spack/repos/builtin/packages/r-git2r/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,10 +31,13 @@ class RGit2r(RPackage):
data and running some basic 'Git' commands."""
homepage = "https://github.com/ropensci/git2r"
- url = "https://cran.r-project.org/src/contrib/git2r_0.15.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/git2r_0.18.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/git2r"
+ version('0.18.0', 'fb5741eb490c3d6e23a751a72336f24d')
version('0.15.0', '57658b3298f9b9aadc0dd77b4ef6a1e1')
+ depends_on('r@3.0.2:')
+
depends_on('zlib')
depends_on('openssl')
diff --git a/var/spack/repos/builtin/packages/r-glmnet/package.py b/var/spack/repos/builtin/packages/r-glmnet/package.py
index ac44d42c12..f34331b310 100644
--- a/var/spack/repos/builtin/packages/r-glmnet/package.py
+++ b/var/spack/repos/builtin/packages/r-glmnet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,10 +33,10 @@ class RGlmnet(RPackage):
multinomial. The algorithm uses cyclical coordinate descent in a path-wise
fashion, as described in the paper linked to via the URL below."""
- homepage = "http://www.jstatsoft.org/v33/i01/"
- url = "https://cran.r-project.org/src/contrib/glmnet_2.0-5.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/glmnet"
-
+ homepage = "https://cran.rstudio.com/web/packages/glmnet/index.html"
+ url = "https://cran.rstudio.com/src/contrib/glmnet_2.0-13.tar.gz"
+ list_url = homepage
+ version('2.0-13', '1dd5636388df5c3a29207d0bf1253343')
version('2.0-5', '049b18caa29529614cd684db3beaec2a')
depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-globaloptions/package.py b/var/spack/repos/builtin/packages/r-globaloptions/package.py
new file mode 100644
index 0000000000..7785d4f3a1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-globaloptions/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RGlobaloptions(RPackage):
+ """It provides more controls on the option values such as validation and
+ filtering on the values, making options invisible or private."""
+
+ homepage = "https://cran.r-project.org/package=GlobalOptions"
+ url = "https://cran.rstudio.com/src/contrib/GlobalOptions_0.0.12.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/GlobalOptions"
+
+ version('0.0.12', '6c268b3b27874918ba62eb0f6aa0a3e5')
+
+ depends_on('r-testthat', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-markdown', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gmodels/package.py b/var/spack/repos/builtin/packages/r-gmodels/package.py
new file mode 100644
index 0000000000..ce4a8c9692
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gmodels/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RGmodels(RPackage):
+ """Various R programming tools for model fitting."""
+
+ homepage = "http://www.sf.net/projects/r-gregmisc"
+ url = "https://cran.r-project.org/src/contrib/gmodels_2.16.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/gmodels"
+
+ version('2.16.2', 'f13e5feb2a8b9f0cd47fdf25ddc74228')
+
+ depends_on('r@1.9:')
+ depends_on('r-gdata', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gmp/package.py b/var/spack/repos/builtin/packages/r-gmp/package.py
new file mode 100644
index 0000000000..18e394f1ac
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gmp/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RGmp(RPackage):
+ """Multiple Precision Arithmetic (big integers and rationals, prime
+ number tests, matrix computation), "arithmetic without limitations"
+ using the C library GMP (GNU Multiple Precision Arithmetic)."""
+
+ homepage = "http://mulcyber.toulouse.inra.fr/projects/gmp"
+ url = "https://cran.r-project.org/src/contrib/gmp_0.5-13.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/gmp"
+
+ version('0.5-13.1', '4a45d45e53bf7140720bd44f10b075ed')
+
+ depends_on('gmp@4.2.3:')
diff --git a/var/spack/repos/builtin/packages/r-go-db/package.py b/var/spack/repos/builtin/packages/r-go-db/package.py
new file mode 100644
index 0000000000..af5df1ce3b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-go-db/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RGoDb(RPackage):
+ """A set of annotation maps describing the entire Gene
+ Ontology assembled using data from GO."""
+
+ homepage = "https://www.bioconductor.org/packages/GO.db/"
+ url = "https://www.bioconductor.org/packages/3.5/data/annotation/src/contrib/GO.db_3.4.1.tar.gz"
+
+ version('3.4.1', 'e16ee8921d8adc1ed3cbac2a3e35e386')
+ depends_on('r-annotationdbi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-googlevis/package.py b/var/spack/repos/builtin/packages/r-googlevis/package.py
index 29916965b4..4d7cfbd259 100644
--- a/var/spack/repos/builtin/packages/r-googlevis/package.py
+++ b/var/spack/repos/builtin/packages/r-googlevis/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-gostats/package.py b/var/spack/repos/builtin/packages/r-gostats/package.py
new file mode 100644
index 0000000000..ef4231fc7d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gostats/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RGostats(RPackage):
+ """A set of tools for interacting with GO and microarray data.
+ A variety of basic manipulation tools for graphs, hypothesis
+ testing and other simple calculations."""
+
+ homepage = "https://www.bioconductor.org/packages/GOstats/"
+ url = "https://git.bioconductor.org/packages/GOstats"
+
+ version('2.42.0', git='https://git.bioconductor.org/packages/GOstats', commit='8b29709064a3b66cf1d963b2be0c996fb48c873e')
+
+ depends_on('r@3.4.1:3.4.9', when='@2.42.0')
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-category', type=('build', 'run'))
+ depends_on('r-go-db', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-rbgl', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-annotationforge', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gplots/package.py b/var/spack/repos/builtin/packages/r-gplots/package.py
new file mode 100644
index 0000000000..21c3738caa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gplots/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RGplots(RPackage):
+ """Various R Programming Tools for Plotting Data."""
+
+ homepage = "https://cran.r-project.org/package=gplots"
+ url = "https://cran.rstudio.com/src/contrib/gplots_3.0.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/gplots"
+ version('3.0.1', '6116822401d55add044beb120ca93d14')
+ depends_on('r-gtools', type=('build', 'run'))
+ depends_on('r-gdata', type=('build', 'run'))
+ depends_on('r-catools', type=('build', 'run'))
+ depends_on('r-kernsmooth', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-graph/package.py b/var/spack/repos/builtin/packages/r-graph/package.py
new file mode 100644
index 0000000000..a7b6140de8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-graph/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RGraph(RPackage):
+ """A package that implements some simple graph handling capabilities."""
+
+ homepage = "https://www.bioconductor.org/packages/graph/"
+ url = "https://git.bioconductor.org/packages/graph"
+
+ version('1.54.0', git='https://git.bioconductor.org/packages/graph', commit='2a8b08520096241620421078fc1098f4569c7301')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.54.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gridbase/package.py b/var/spack/repos/builtin/packages/r-gridbase/package.py
index 73d87c7e49..4353f16819 100644
--- a/var/spack/repos/builtin/packages/r-gridbase/package.py
+++ b/var/spack/repos/builtin/packages/r-gridbase/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-gridextra/package.py b/var/spack/repos/builtin/packages/r-gridextra/package.py
index 304035dc06..2b64580c4e 100644
--- a/var/spack/repos/builtin/packages/r-gridextra/package.py
+++ b/var/spack/repos/builtin/packages/r-gridextra/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,10 +29,11 @@ class RGridextra(RPackage):
"""Provides a number of user-level functions to work with "grid" graphics,
notably to arrange multiple grid-based plots on a page, and draw tables."""
- homepage = "https://github.com/baptiste/gridextra"
+ homepage = "https://cran.r-project.org/package=gridExtra"
url = "https://cran.r-project.org/src/contrib/gridExtra_2.2.1.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/gridExtra"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/gridExtras"
+ version('2.3', '01e0ea88610756a0fd3b260e83c9bd43')
version('2.2.1', '7076c2122d387c7ef3add69a1c4fc1b2')
depends_on('r-gtable', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gseabase/package.py b/var/spack/repos/builtin/packages/r-gseabase/package.py
new file mode 100644
index 0000000000..b02b16289b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gseabase/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RGseabase(RPackage):
+ """This package provides classes and methods to support Gene
+ Set Enrichment Analysis (GSEA)."""
+
+ homepage = "https://www.bioconductor.org/packages/GSEABase/"
+ url = "https://git.bioconductor.org/packages/GSEABase"
+
+ version('1.38.2', git='https://git.bioconductor.org/packages/GSEABase', commit='84c9f10c316163118ca990900a7a67555b96e75b')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.38.2')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gsubfn/package.py b/var/spack/repos/builtin/packages/r-gsubfn/package.py
new file mode 100644
index 0000000000..858f7f2e39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gsubfn/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 RGsubfn(RPackage):
+ """gsubfn is like gsub but can take a replacement function or
+ certain other objects instead of the replacement string. Matches
+ and back references are input to the replacement function and
+ replaced by the function output. gsubfn can be used to split
+ strings based on content rather than delimiters and for
+ quasi-perl-style string interpolation. The package also has
+ facilities for translating formulas to functions and allowing
+ such formulas in function calls instead of functions. This can
+ be used with R functions such as apply, sapply, lapply, optim,
+ integrate, xyplot, Filter and any other function that expects
+ another function as an input argument or functions like cat or
+ sql calls that may involve strings where substitution is
+ desirable."""
+
+ homepage = "https://cran.r-project.org/package=gsubfn"
+ url = "https://cran.r-project.org/src/contrib/gsubfn_0.6-6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/gsubfn"
+
+ version('0.6-6', '94195ff3502706c736d9c593c07252bc')
+
+ depends_on('r-proto', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-gtable/package.py b/var/spack/repos/builtin/packages/r-gtable/package.py
index 236416755b..498e5ba2c3 100644
--- a/var/spack/repos/builtin/packages/r-gtable/package.py
+++ b/var/spack/repos/builtin/packages/r-gtable/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-gtools/package.py b/var/spack/repos/builtin/packages/r-gtools/package.py
index 632187b49e..0c74d8449a 100644
--- a/var/spack/repos/builtin/packages/r-gtools/package.py
+++ b/var/spack/repos/builtin/packages/r-gtools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-gtrellis/package.py b/var/spack/repos/builtin/packages/r-gtrellis/package.py
new file mode 100644
index 0000000000..64526035db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gtrellis/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RGtrellis(RPackage):
+ """Genome level Trellis graph visualizes genomic data conditioned by
+ genomic categories (e.g. chromosomes). For each genomic category,
+ multiple dimensional data which are represented as tracks describe
+ different features from different aspects. This package provides high
+ flexibility to arrange genomic categories and to add self-defined
+ graphics in the plot."""
+
+ homepage = "https://bioconductor.org/packages/gtrellis/"
+ url = "https://git.bioconductor.org/packages/gtrellis"
+ list_url = homepage
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/gtrellis', commit='f813b420a008c459f63a2a13e5e64c5507c4c472')
+
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-circlize', type=('build', 'run'))
+ depends_on('r-getoptlong', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
diff --git a/var/spack/repos/builtin/packages/r-gviz/package.py b/var/spack/repos/builtin/packages/r-gviz/package.py
new file mode 100644
index 0000000000..ddb56cc681
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-gviz/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 RGviz(RPackage):
+ """Genomic data analyses requires integrated visualization
+ of known genomic information and new experimental data. Gviz
+ uses the biomaRt and the rtracklayer packages to perform live
+ annotation queries to Ensembl and UCSC and translates this to
+ e.g. gene/transcript structures in viewports of the grid
+ graphics package. This results in genomic information plotted
+ together with your data."""
+
+ homepage = "http://bioconductor.org/packages/Gviz/"
+ url = "https://git.bioconductor.org/packages/Gviz"
+
+ version('1.20.0', git='https://git.bioconductor.org/packages/Gviz', commit='299b8255e1b03932cebe287c3690d58c88f5ba5c')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.20.0')
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-biomart', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-bsgenome', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-biovizbase', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-latticeextra', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-digest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-hexbin/package.py b/var/spack/repos/builtin/packages/r-hexbin/package.py
index 0a5c66c1a3..179914fca3 100644
--- a/var/spack/repos/builtin/packages/r-hexbin/package.py
+++ b/var/spack/repos/builtin/packages/r-hexbin/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,6 +34,6 @@ class RHexbin(RPackage):
url = "https://cran.r-project.org/src/contrib/hexbin_1.27.1.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/hexbin"
- version('1.27.1', '7f380390c6511e97df10a810a3b3bb7c')
+ version('1.27.1', '7590ed158f8a57a71901bf6ca26f81be')
depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-highr/package.py b/var/spack/repos/builtin/packages/r-highr/package.py
index 13164f9c60..cc89cfd80b 100644
--- a/var/spack/repos/builtin/packages/r-highr/package.py
+++ b/var/spack/repos/builtin/packages/r-highr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-hmisc/package.py b/var/spack/repos/builtin/packages/r-hmisc/package.py
new file mode 100644
index 0000000000..436c3279ec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-hmisc/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RHmisc(RPackage):
+ """Contains many functions useful for data analysis, high-level
+ graphics, utility operations, functions for computing sample size
+ and power, importing and annotating datasets, imputing missing
+ values, advanced table making, variable clustering, character
+ string manipulation, conversion of R objects to LaTeX and html
+ code, and recoding variables."""
+
+ homepage = "http://biostat.mc.vanderbilt.edu/Hmisc"
+ url = "https://cran.rstudio.com/src/contrib/Hmisc_4.0-3.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/Hmisc"
+
+ version('4.0-3', '7091924db1e473419d8116c3335f82da')
+
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-formula', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-latticeextra', type=('build', 'run'))
+ depends_on('r-acepack', type=('build', 'run'))
+ depends_on('r-gridextra', type=('build', 'run'))
+ depends_on('r-data-table', type=('build', 'run'))
+ depends_on('r-htmltools', type=('build', 'run'))
+ depends_on('r-base64enc', type=('build', 'run'))
+ depends_on('r-htmltable', type=('build', 'run'))
+ depends_on('r-viridis', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-hms/package.py b/var/spack/repos/builtin/packages/r-hms/package.py
new file mode 100644
index 0000000000..ec1cd6dd39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-hms/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RHms(RPackage):
+ """Implements an S3 class for storing and formatting time-of-day values,
+ based on the 'difftime' class."""
+
+ homepage = "https://cran.rstudio.com/web/packages/hms/index.html"
+ url = "https://cran.rstudio.com/src/contrib/hms_0.3.tar.gz"
+
+ version('0.3', '92c4a0cf0c402a35145b5bb57212873e')
diff --git a/var/spack/repos/builtin/packages/r-htmltable/package.py b/var/spack/repos/builtin/packages/r-htmltable/package.py
new file mode 100644
index 0000000000..f142a5221a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-htmltable/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RHtmltable(RPackage):
+ """Tables with state-of-the-art layout elements such as row
+ spanners, column spanners, table spanners, zebra striping, and
+ more. While allowing advanced layout, the underlying css-structure
+ is simple in order to maximize compatibility with word processors
+ such as 'MS Word' or 'LibreOffice'. The package also contains a
+ few text formatting functions that help outputting text
+ compatible with HTML/'LaTeX'."""
+
+ homepage = "https://CRAN.R-project.org/package=htmlTable"
+ url = "https://cran.rstudio.com/src/contrib/htmlTable_1.9.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/htmlTable"
+
+ version('1.9', '08c62c19e1ffe570e7d8fa57db5094b9')
+
+ depends_on('r-stringr', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-magrittr', type=('build', 'run'))
+ depends_on('r-checkmate', type=('build', 'run'))
+ depends_on('r-htmlwidgets', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-htmltools/package.py b/var/spack/repos/builtin/packages/r-htmltools/package.py
index 9374e1f9cc..3ed8a19f22 100644
--- a/var/spack/repos/builtin/packages/r-htmltools/package.py
+++ b/var/spack/repos/builtin/packages/r-htmltools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,10 @@ class RHtmltools(RPackage):
"""Tools for HTML generation and output."""
homepage = "https://github.com/rstudio/htmltools"
- url = "https://cran.r-project.org/src/contrib/htmltools_0.3.5.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/htmltools"
+ url = "https://cran.rstudio.com/src/contrib/htmltools_0.3.6.tar.gz"
+ list_url = homepage
+ version('0.3.6', '336419c2143f958862e01ef1bbc9c253')
version('0.3.5', '5f001aff4a39e329f7342dcec5139724')
depends_on('r-digest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-htmlwidgets/package.py b/var/spack/repos/builtin/packages/r-htmlwidgets/package.py
index 85ab593245..1dcbbe5062 100644
--- a/var/spack/repos/builtin/packages/r-htmlwidgets/package.py
+++ b/var/spack/repos/builtin/packages/r-htmlwidgets/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,12 @@ class RHtmlwidgets(RPackage):
including the R console, 'R Markdown' documents, and 'Shiny' web
applications."""
- homepage = "https://github.com/ramnathv/htmlwidgets"
- url = "https://cran.r-project.org/src/contrib/htmlwidgets_0.6.tar.gz"
+ homepage = "https://cran.r-project.org/package=htmlTable"
+ url = "https://cran.rstudio.com/src/contrib/htmlwidgets_0.9.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/htmlwidgets"
+ version('0.9', 'b42730691eca8fc9a28903c272d11605')
+ version('0.8', '06b0404a00e25736946607a36ee5351d')
version('0.6', '7fa522d2eda97593978021bda9670c0e')
depends_on('r-htmltools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-httpuv/package.py b/var/spack/repos/builtin/packages/r-httpuv/package.py
index e4b60893b6..1b5f45961f 100644
--- a/var/spack/repos/builtin/packages/r-httpuv/package.py
+++ b/var/spack/repos/builtin/packages/r-httpuv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,9 +35,12 @@ class RHttpuv(RPackage):
information.)"""
homepage = "https://github.com/rstudio/httpuv"
- url = "https://cran.r-project.org/src/contrib/httpuv_1.3.3.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/httpuv"
+ url = "https://cran.rstudio.com/src/contrib/httpuv_1.3.5.tar.gz"
+ list_url = homepage
+ version('1.3.5', '48d894ff0067148f41a651634fbb2012')
version('1.3.3', 'c78ae068cf59e949b9791be987bb4489')
- depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r@2.15.1:')
+
+ depends_on('r-rcpp@0.11.0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-httr/package.py b/var/spack/repos/builtin/packages/r-httr/package.py
index 55a5b0efab..a533f6cbd9 100644
--- a/var/spack/repos/builtin/packages/r-httr/package.py
+++ b/var/spack/repos/builtin/packages/r-httr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,13 +31,17 @@ class RHttr(RPackage):
request components (authenticate(), add_headers() and so on)."""
homepage = "https://github.com/hadley/httr"
- url = "https://cran.r-project.org/src/contrib/httr_1.1.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/httr_1.2.1.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/httr"
+ version('1.3.1', '5acfb6b2a6f2f26cd6dfad0458fe3351')
+ version('1.2.1', 'c469948dedac9ab3926f23cf484b33d9')
version('1.1.0', '5ffbbc5c2529e49f00aaa521a2b35600')
+ depends_on('r@3.0.0:')
+
depends_on('r-jsonlite', type=('build', 'run'))
depends_on('r-mime', type=('build', 'run'))
- depends_on('r-curl', type=('build', 'run'))
+ depends_on('r-curl@0.9.1:', type=('build', 'run'))
depends_on('r-openssl', type=('build', 'run'))
depends_on('r-r6', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-hwriter/package.py b/var/spack/repos/builtin/packages/r-hwriter/package.py
new file mode 100644
index 0000000000..8c67f4bb1a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-hwriter/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RHwriter(RPackage):
+ """Easy-to-use and versatile functions to
+ output R objects in HTML format."""
+
+ homepage = "https://cran.rstudio.com/web/packages/hwriter/index.html"
+ url = "https://cran.rstudio.com/src/contrib/hwriter_1.3.2.tar.gz"
+ list_url = homepage
+ version('1.3.2', '9eef49df2eb68bbf3a16b5860d933517')
diff --git a/var/spack/repos/builtin/packages/r-hypergraph/package.py b/var/spack/repos/builtin/packages/r-hypergraph/package.py
new file mode 100644
index 0000000000..b6fc0df172
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-hypergraph/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RHypergraph(RPackage):
+ """A package that implements some simple capabilities for
+ representing and manipulating hypergraphs."""
+
+ homepage = "https://www.bioconductor.org/packages/hypergraph/"
+ url = "https://git.bioconductor.org/packages/hypergraph"
+
+ version('1.48.0', git='https://git.bioconductor.org/packages/hypergraph', commit='a4c19ea0b5f15204f706a7bfdea5363706382820')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.48.0')
+ depends_on('r-graph', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-igraph/package.py b/var/spack/repos/builtin/packages/r-igraph/package.py
index 993a80ae1c..b8a715b9ae 100644
--- a/var/spack/repos/builtin/packages/r-igraph/package.py
+++ b/var/spack/repos/builtin/packages/r-igraph/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-illuminaio/package.py b/var/spack/repos/builtin/packages/r-illuminaio/package.py
new file mode 100644
index 0000000000..9d0993fb8f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-illuminaio/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RIlluminaio(RPackage):
+ """Tools for parsing Illumina's microarray output files, including
+ IDAT."""
+
+ homepage = "http://bioconductor.org/packages/illuminaio/"
+ url = "https://git.bioconductor.org/packages/illuminaio"
+ list_url = homepage
+
+ version('0.18.0', git='https://git.bioconductor.org/packages/illuminaio', commit='e6b8ab1f8eacb760aebdb4828e9cfbf07da06eda')
+
+ depends_on('r-base64', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@0.18.0')
diff --git a/var/spack/repos/builtin/packages/r-impute/package.py b/var/spack/repos/builtin/packages/r-impute/package.py
new file mode 100644
index 0000000000..b8bf956ac1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-impute/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RImpute(RPackage):
+ """Imputation for microarray data (currently KNN only)."""
+
+ homepage = "https://www.bioconductor.org/packages/impute/"
+ url = "https://git.bioconductor.org/packages/impute"
+
+ version('1.50.1', git='https://git.bioconductor.org/packages/impute', commit='31d1cc141797afdc83743e1d95aab8a90ee19b71')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.50.1')
diff --git a/var/spack/repos/builtin/packages/r-influencer/package.py b/var/spack/repos/builtin/packages/r-influencer/package.py
index bbfed54e25..53f1ba67a7 100644
--- a/var/spack/repos/builtin/packages/r-influencer/package.py
+++ b/var/spack/repos/builtin/packages/r-influencer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,6 +37,7 @@ class RInfluencer(RPackage):
homepage = "https://github.com/rcc-uchicago/influenceR"
url = "https://cran.r-project.org/src/contrib/influenceR_0.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/influenceR"
version('0.1.0', '6c8b6decd78c341364b5811fb3050ba5')
diff --git a/var/spack/repos/builtin/packages/r-inline/package.py b/var/spack/repos/builtin/packages/r-inline/package.py
index f30c87dc9b..235aacfe19 100644
--- a/var/spack/repos/builtin/packages/r-inline/package.py
+++ b/var/spack/repos/builtin/packages/r-inline/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-interactivedisplaybase/package.py b/var/spack/repos/builtin/packages/r-interactivedisplaybase/package.py
new file mode 100644
index 0000000000..8b64962096
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-interactivedisplaybase/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RInteractivedisplaybase(RPackage):
+ """The interactiveDisplayBase package contains the the basic methods
+ needed to generate interactive Shiny based display methods for
+ Bioconductor objects."""
+
+ homepage = "https://bioconductor.org/packages/interactiveDisplayBase/"
+ url = "https://git.bioconductor.org/packages/interactiveDisplayBase"
+ list_url = homepage
+
+ version('1.14.0', git='https://git.bioconductor.org/packages/interactiveDisplayBase', commit='e2ccc7eefdd904e3b1032dc6b3f4a28d08c1cd40')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-shiny', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.14.0')
diff --git a/var/spack/repos/builtin/packages/r-ipred/package.py b/var/spack/repos/builtin/packages/r-ipred/package.py
new file mode 100644
index 0000000000..97d84f5361
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ipred/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RIpred(RPackage):
+ """Improved predictive models by indirect classification and bagging for
+ classification, regression and survival problems as well as resampling
+ based estimators of prediction error."""
+
+ homepage = "https://cran.r-project.org/package=ipred"
+ url = "https://cran.r-project.org/src/contrib/ipred_0.9-5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ipred"
+
+ version('0.9-5', 'ce8768547a7aa9554ad3650b18ea3cbd')
+
+ depends_on('r@2.10:')
+
+ depends_on('r-rpart@3.1-8:', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-nnet', type=('build', 'run'))
+ depends_on('r-class', type=('build', 'run'))
+ depends_on('r-prodlim', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-iranges/package.py b/var/spack/repos/builtin/packages/r-iranges/package.py
new file mode 100644
index 0000000000..c53b2773a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-iranges/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RIranges(RPackage):
+ """Provides efficient low-level and highly
+ reusable S4 classes for storing,
+ manipulating and aggregating over annotated ranges of
+ integers. Implements an
+ algebra of range operations, including efficient
+ algorithms for finding overlaps
+ and nearest neighbors. Defines efficient list-like
+ classes for storing, transforming
+ and aggregating large grouped data,
+ i.e., collections of atomic vectors and DataFrames."""
+
+ homepage = "https://www.bioconductor.org/packages/IRanges/"
+ url = "https://git.bioconductor.org/packages/IRanges"
+ list_url = homepage
+ version('2.10.5', git='https://git.bioconductor.org/packages/IRanges', commit='b00d1d5025e3c480d17c13100f0da5a0132b1614')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.10.5')
diff --git a/var/spack/repos/builtin/packages/r-irdisplay/package.py b/var/spack/repos/builtin/packages/r-irdisplay/package.py
index f02c00d8ba..1edbf40c1a 100644
--- a/var/spack/repos/builtin/packages/r-irdisplay/package.py
+++ b/var/spack/repos/builtin/packages/r-irdisplay/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-irkernel/package.py b/var/spack/repos/builtin/packages/r-irkernel/package.py
index e69b77f9f0..62daf2e0ca 100644
--- a/var/spack/repos/builtin/packages/r-irkernel/package.py
+++ b/var/spack/repos/builtin/packages/r-irkernel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-irlba/package.py b/var/spack/repos/builtin/packages/r-irlba/package.py
index e0d1b32565..21e3df5e9f 100644
--- a/var/spack/repos/builtin/packages/r-irlba/package.py
+++ b/var/spack/repos/builtin/packages/r-irlba/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,9 +31,10 @@ class RIrlba(RPackage):
matrices."""
homepage = "https://cran.r-project.org/web/packages/irlba/index.html"
- url = "https://cran.r-project.org/src/contrib/irlba_2.0.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/irlba_2.1.2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/irlba"
+ version('2.1.2', '290940abf6662ed10c0c5a8db1bc6e88')
version('2.0.0', '557674cf8b68fea5b9f231058c324d26')
depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-iso/package.py b/var/spack/repos/builtin/packages/r-iso/package.py
new file mode 100644
index 0000000000..f4be39ee6e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-iso/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RIso(RPackage):
+ """Linear order and unimodal order (univariate) isotonic regression;
+ bivariate isotonic regression with linear order on both variables."""
+
+ homepage = "https://cran.r-project.org/package=Iso"
+ url = "https://cran.rstudio.com/src/contrib/Iso_0.0-17.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/Iso"
+
+ version('0.0-17', 'bf99821efb6a44fa75fdbf5e5c4c91e4')
diff --git a/var/spack/repos/builtin/packages/r-iterators/package.py b/var/spack/repos/builtin/packages/r-iterators/package.py
index 38dff8f9ac..1e864864e3 100644
--- a/var/spack/repos/builtin/packages/r-iterators/package.py
+++ b/var/spack/repos/builtin/packages/r-iterators/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-jpeg/package.py b/var/spack/repos/builtin/packages/r-jpeg/package.py
index 02c42b5ff1..5a11610fc9 100644
--- a/var/spack/repos/builtin/packages/r-jpeg/package.py
+++ b/var/spack/repos/builtin/packages/r-jpeg/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-jsonlite/package.py b/var/spack/repos/builtin/packages/r-jsonlite/package.py
index 7368187af5..5ed0d42616 100644
--- a/var/spack/repos/builtin/packages/r-jsonlite/package.py
+++ b/var/spack/repos/builtin/packages/r-jsonlite/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,8 +38,10 @@ class RJsonlite(RPackage):
use with dynamic data in systems and applications."""
homepage = "https://github.com/jeroenooms/jsonlite"
- url = "https://cran.r-project.org/src/contrib/jsonlite_1.0.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/jsonlite"
+ url = "https://cran.rstudio.com/src/contrib/jsonlite_1.5.tar.gz"
+ list_url = homepage
+ version('1.5', '2a81c261a702fccbbd5d2b32df108f76')
+ version('1.2', '80cd2678ae77254be470f5931db71c51')
version('1.0', 'c8524e086de22ab39b8ac8000220cc87')
version('0.9.21', '4fc382747f88a79ff0718a0d06bed45d')
diff --git a/var/spack/repos/builtin/packages/r-kegg-db/package.py b/var/spack/repos/builtin/packages/r-kegg-db/package.py
new file mode 100644
index 0000000000..e205b1d42a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-kegg-db/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RKeggDb(RPackage):
+ """A set of annotation maps for KEGG assembled using data from KEGG."""
+
+ homepage = "https://www.bioconductor.org/packages/KEGG.db/"
+ url = "https://www.bioconductor.org/packages/release/data/annotation/src/contrib/KEGG.db_3.2.3.tar.gz"
+
+ version('3.2.3', '023ac22f57063627c2e62d1ae5e011b0')
+ depends_on('r-annotationdbi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-keggrest/package.py b/var/spack/repos/builtin/packages/r-keggrest/package.py
new file mode 100644
index 0000000000..b9a6e6a291
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-keggrest/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RKeggrest(RPackage):
+ """This package provides functions and routines useful in the analysis
+ of somatic signatures (cf. L. Alexandrov et al., Nature 2013). In
+ particular, functions to perform a signature analysis with known
+ signatures (LCD = linear combination decomposition) and a signature
+ analysis on stratified mutational catalogue (SMC = stratify mutational
+ catalogue) are provided."""
+
+ homepage = "http://bioconductor.org/packages/KEGGREST"
+ url = "https://git.bioconductor.org/packages/KEGGREST"
+ list_url = homepage
+
+ version('1.2.0', git='https://git.bioconductor.org/packages/KEGGREST', commit='ed48de0def57a909894e237fa4731c4a052d8849')
+
+ depends_on('r-httr', type=('build', 'run'))
+ depends_on('r-png', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-kernlab/package.py b/var/spack/repos/builtin/packages/r-kernlab/package.py
new file mode 100644
index 0000000000..9ff25832be
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-kernlab/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RKernlab(RPackage):
+ """Kernel-based machine learning methods for classification, regression,
+ clustering, novelty detection, quantile regression and dimensionality
+ reduction. Among other methods 'kernlab' includes Support Vector Machines,
+ Spectral Clustering, Kernel PCA, Gaussian Processes and a QP solver."""
+
+ homepage = "https://cran.r-project.org/package=kernlab"
+ url = "https://cran.r-project.org/src/contrib/kernlab_0.9-25.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/kernlab"
+
+ version('0.9-25', '1182a2a336a79fd2cf70b4bc5a35353f')
+
+ depends_on('r@2.10:')
diff --git a/var/spack/repos/builtin/packages/r-kernsmooth/package.py b/var/spack/repos/builtin/packages/r-kernsmooth/package.py
new file mode 100644
index 0000000000..e6fd8512c2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-kernsmooth/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RKernsmooth(RPackage):
+ """Functions for kernel smoothing (and density estimation)."""
+
+ homepage = "https://cran.r-project.org/package=KernSmooth"
+ url = "https://cran.r-project.org/src/contrib/KernSmooth_2.23-15.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/KernSmooth"
+
+ version('2.23-15', '746cdf26dec72004cf19978e87dcc982')
+
+ depends_on('r@2.5.0:')
diff --git a/var/spack/repos/builtin/packages/r-kknn/package.py b/var/spack/repos/builtin/packages/r-kknn/package.py
new file mode 100644
index 0000000000..86d67fb4d4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-kknn/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RKknn(RPackage):
+ """Weighted k-Nearest Neighbors for Classification, Regression and
+ Clustering."""
+
+ homepage = "https://cran.r-project.org/package=kknn"
+ url = "https://cran.r-project.org/src/contrib/kknn_1.3.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/kknn"
+
+ version('1.3.1', '372cd84f618cd5005f8c4c5721755117')
+
+ depends_on('r@2.10:')
+
+ depends_on('r-igraph@1.0:', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-knitr/package.py b/var/spack/repos/builtin/packages/r-knitr/package.py
index dd92474944..1e0e51a3f1 100644
--- a/var/spack/repos/builtin/packages/r-knitr/package.py
+++ b/var/spack/repos/builtin/packages/r-knitr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,11 @@ class RKnitr(RPackage):
"""Provides a general-purpose tool for dynamic report generation in R using
Literate Programming techniques."""
- homepage = "http://yihui.name/knitr/"
+ homepage = "https://cran.r-project.org/package=knitr"
url = "https://cran.rstudio.com/src/contrib/knitr_1.14.tar.gz"
- list_url = "https://cran.rstudio.com/src/contrib/Archive/knitr"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/knitr"
+ version('1.17', '4407ccf8f2a51629800d6d5243cf3e70')
version('1.14', 'ef0fbeaa9372f99ffbc57212a7781511')
version('0.6', 'c67d6db84cd55594a9e870c90651a3db')
diff --git a/var/spack/repos/builtin/packages/r-labeling/package.py b/var/spack/repos/builtin/packages/r-labeling/package.py
index 7c288c63a4..02790fe88d 100644
--- a/var/spack/repos/builtin/packages/r-labeling/package.py
+++ b/var/spack/repos/builtin/packages/r-labeling/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-lambda-r/package.py b/var/spack/repos/builtin/packages/r-lambda-r/package.py
new file mode 100644
index 0000000000..914826af97
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-lambda-r/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RLambdaR(RPackage):
+ """A language extension to efficiently write functional programs in R.
+ Syntax extensions include multi-part function definitions, pattern
+ matching, guard statements, built-in (optional) type safety."""
+
+ homepage = "https://cran.rstudio.com/web/packages/lambda.r/index.html"
+ url = "https://cran.rstudio.com/src/contrib/lambda.r_1.2.tar.gz"
+
+ version('1.2', 'bda49898b85ad5902880a31f43b432e2')
diff --git a/var/spack/repos/builtin/packages/r-laplacesdemon/package.py b/var/spack/repos/builtin/packages/r-laplacesdemon/package.py
new file mode 100644
index 0000000000..3af2665c3e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-laplacesdemon/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RLaplacesdemon(RPackage):
+ """Provides a complete environment for Bayesian inference using a variety
+ of different samplers (see ?LaplacesDemon for an overview). The README
+ describes the history of the package development process."""
+
+ homepage = "https://github.com/LaplacesDemonR/LaplacesDemon"
+ url = "https://cran.r-project.org/src/contrib/LaplacesDemon_16.0.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/LaplacesDemon"
+
+ version('16.0.1', '1e4dab2dd0e27251734d68b0bfdbe911')
diff --git a/var/spack/repos/builtin/packages/r-lattice/package.py b/var/spack/repos/builtin/packages/r-lattice/package.py
index ed3c19f2e6..49714423a1 100644
--- a/var/spack/repos/builtin/packages/r-lattice/package.py
+++ b/var/spack/repos/builtin/packages/r-lattice/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,8 @@ class RLattice(RPackage):
handle most nonstandard requirements. See ?Lattice for an introduction."""
homepage = "http://lattice.r-forge.r-project.org/"
- url = "https://cran.r-project.org/src/contrib/lattice_0.20-34.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/lattice"
+ url = "https://cran.rstudio.com/src/contrib/lattice_0.20-35.tar.gz"
+ list_url = homepage
+ version('0.20-35', '07f1814623b3da6278ca61554ff7bfe6')
version('0.20-34', 'c2a648b22d4206ae7526fb70b8e90fed')
diff --git a/var/spack/repos/builtin/packages/r-latticeextra/package.py b/var/spack/repos/builtin/packages/r-latticeextra/package.py
new file mode 100644
index 0000000000..86c9d93ed7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-latticeextra/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RLatticeextra(RPackage):
+ """Building on the infrastructure provided by the lattice package,
+ this package provides several new high-level functions and methods,
+ as well as additional utilities such as panel and axis annotation
+ functions."""
+
+ homepage = "http://latticeextra.r-forge.r-project.org/"
+ url = "https://cran.rstudio.com/src/contrib/latticeExtra_0.6-28.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/latticeExtra"
+
+ version('0.6-28', '771938f25d0983763369b48a1153b26c')
+
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-lava/package.py b/var/spack/repos/builtin/packages/r-lava/package.py
new file mode 100644
index 0000000000..ae4218e1db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-lava/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RLava(RPackage):
+ """Estimation and simulation of latent variable models."""
+
+ homepage = "https://cran.r-project.org/package=lava"
+ url = "https://cran.r-project.org/src/contrib/lava_1.4.7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/lava"
+
+ version('1.4.7', '28039248a7039ba9281d172e4dbf9543')
+
+ depends_on('r@3.0:')
+
+ depends_on('r-numderiv', type=('build', 'run'))
+ depends_on('r-survival', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-lazyeval/package.py b/var/spack/repos/builtin/packages/r-lazyeval/package.py
index ab41a39675..3746851d00 100644
--- a/var/spack/repos/builtin/packages/r-lazyeval/package.py
+++ b/var/spack/repos/builtin/packages/r-lazyeval/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-leaflet/package.py b/var/spack/repos/builtin/packages/r-leaflet/package.py
index 62c2cf3c7c..ef6debbdbb 100644
--- a/var/spack/repos/builtin/packages/r-leaflet/package.py
+++ b/var/spack/repos/builtin/packages/r-leaflet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-leaps/package.py b/var/spack/repos/builtin/packages/r-leaps/package.py
new file mode 100644
index 0000000000..e27874ec27
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-leaps/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RLeaps(RPackage):
+ """leaps: Regression Subset Selection"""
+
+ homepage = "https://CRAN.R-project.org/package=leaps"
+ url = "https://cran.r-project.org/src/contrib/leaps_3.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/leaps"
+
+ version('3.0', '30823138890680e0493d1491c8f43edc')
diff --git a/var/spack/repos/builtin/packages/r-learnbayes/package.py b/var/spack/repos/builtin/packages/r-learnbayes/package.py
new file mode 100644
index 0000000000..71904b3d24
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-learnbayes/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RLearnbayes(RPackage):
+ """LearnBayes contains a collection of functions helpful in learning the
+ basic tenets of Bayesian statistical inference. It contains functions for
+ summarizing basic one and two parameter posterior distributions and
+ predictive distributions. It contains MCMC algorithms for summarizing
+ posterior distributions defined by the user. It also contains functions
+ for regression models, hierarchical models, Bayesian tests, and
+ illustrations of Gibbs sampling."""
+
+ homepage = "https://CRAN.R-project.org/package=LearnBayes"
+ url = "https://cran.r-project.org/src/contrib/LearnBayes_2.15.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/LearnBayes"
+
+ version('2.15', '213713664707bc79fd6d3a109555ef76')
diff --git a/var/spack/repos/builtin/packages/r-limma/package.py b/var/spack/repos/builtin/packages/r-limma/package.py
new file mode 100644
index 0000000000..8c4df2b059
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-limma/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RLimma(RPackage):
+ """Data analysis, linear models and differential expression
+ for microarray data."""
+
+ homepage = "https://www.bioconductor.org/packages/limma/"
+ url = "https://git.bioconductor.org/packages/limma"
+ list_url = homepage
+
+ version('3.32.10', git='https://git.bioconductor.org/packages/limma', commit='593edf28e21fe054d64137ae271b8a52ab05bc60')
+ version('3.32.6', 'df5dc2b85189a24e939efa3a8e6abc41')
+
+ depends_on('r@3.4.0:3.4.9', when='@3.32.10')
diff --git a/var/spack/repos/builtin/packages/r-lme4/package.py b/var/spack/repos/builtin/packages/r-lme4/package.py
index 0ca545ced9..c7565e381e 100644
--- a/var/spack/repos/builtin/packages/r-lme4/package.py
+++ b/var/spack/repos/builtin/packages/r-lme4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-lmtest/package.py b/var/spack/repos/builtin/packages/r-lmtest/package.py
index 3d17dd2a7e..160fd3669b 100644
--- a/var/spack/repos/builtin/packages/r-lmtest/package.py
+++ b/var/spack/repos/builtin/packages/r-lmtest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-locfit/package.py b/var/spack/repos/builtin/packages/r-locfit/package.py
new file mode 100644
index 0000000000..5153b3450f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-locfit/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RLocfit(RPackage):
+ """Local regression, likelihood and density estimation."""
+
+ homepage = "https://cran.rstudio.com/web/packages/locfit/index.html"
+ url = "https://cran.rstudio.com/src/contrib/locfit_1.5-9.1.tar.gz"
+ list_url = homepage
+
+ version('1.5-9.1', '38af7791c9cda78e2804020e65ac7fb4')
+
+ depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-log4r/package.py b/var/spack/repos/builtin/packages/r-log4r/package.py
new file mode 100644
index 0000000000..c6719cbe30
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-log4r/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RLog4r(RPackage):
+ """logr4 provides an object-oriented logging system that uses an
+ API roughly equivalent to log4j and its related variants."""
+
+ homepage = "https://cran.r-project.org/package=log4r"
+ url = "https://cran.rstudio.com/src/contrib/log4r_0.2.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/log4r"
+
+ version('0.2', 'f3fcb7b1f48526c6543b2e00e278ff65')
+
+ depends_on('r-testthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-lpsolve/package.py b/var/spack/repos/builtin/packages/r-lpsolve/package.py
new file mode 100644
index 0000000000..996725f129
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-lpsolve/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RLpsolve(RPackage):
+ """Lp_solve is freely available (under LGPL 2) software for solving
+ linear, integer and mixed integer programs. In this
+ implementation we supply a "wrapper" function in C and some R
+ functions that solve general linear/integer problems, assignment
+ problems, and transportation problems. This version calls
+ lp_solve"""
+
+ homepage = "https://cran.r-project.org/web/packages/lpSolve/index.html"
+ url = "https://cran.r-project.org/src/contrib/lpSolve_5.6.13.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/lpSolve"
+
+ version('5.6.13', '8471654d9ae76e0f85ff3449433d4bc1')
diff --git a/var/spack/repos/builtin/packages/r-lsei/package.py b/var/spack/repos/builtin/packages/r-lsei/package.py
new file mode 100644
index 0000000000..a2de608256
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-lsei/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RLsei(RPackage):
+ """It contains functions that solve least squares linear regression
+ problems under linear equality/inequality constraints. Functions for
+ solving quadratic programming problems are also available, which
+ transform such problems into least squares ones first. It is developed
+ based on the 'Fortran' program of Lawson and Hanson (1974, 1995), which
+ is public domain and available at
+ <http://www.netlib.org/lawson-hanson>."""
+
+ homepage = "https://cran.r-project.org/package=lsei"
+ url = "https://cran.rstudio.com/src/contrib/lsei_1.2-0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/lsei"
+
+ version('1.2-0', '18a9322d7a79ecb86b8788645c4b7e3c')
diff --git a/var/spack/repos/builtin/packages/r-lubridate/package.py b/var/spack/repos/builtin/packages/r-lubridate/package.py
index 159e84e292..bdb314e673 100644
--- a/var/spack/repos/builtin/packages/r-lubridate/package.py
+++ b/var/spack/repos/builtin/packages/r-lubridate/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-magic/package.py b/var/spack/repos/builtin/packages/r-magic/package.py
index b0987adcd7..b6cd78be63 100644
--- a/var/spack/repos/builtin/packages/r-magic/package.py
+++ b/var/spack/repos/builtin/packages/r-magic/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-magrittr/package.py b/var/spack/repos/builtin/packages/r-magrittr/package.py
index 915797e11d..528fb7ff67 100644
--- a/var/spack/repos/builtin/packages/r-magrittr/package.py
+++ b/var/spack/repos/builtin/packages/r-magrittr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-makecdfenv/package.py b/var/spack/repos/builtin/packages/r-makecdfenv/package.py
new file mode 100644
index 0000000000..8c74fc532b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-makecdfenv/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RMakecdfenv(RPackage):
+ """This package has two functions. One reads a Affymetrix
+ chip description file (CDF) and creates a hash table environment
+ containing the location/probe set membership mapping.
+ The other creates a package that automatically loads
+ that environment."""
+
+ homepage = "https://www.bioconductor.org/packages/makecdfenv/"
+ url = "https://git.bioconductor.org/packages/makecdfenv"
+
+ version('1.52.0', git='https://git.bioconductor.org/packages/makecdfenv', commit='b88a3e93e3b7feeeca69eda7c1fc5a0826c81120')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.52.0')
+ depends_on('r-affyio', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-maldiquant/package.py b/var/spack/repos/builtin/packages/r-maldiquant/package.py
new file mode 100644
index 0000000000..ad1e1bb95f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-maldiquant/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RMaldiquant(RPackage):
+ """A complete analysis pipeline for matrix-assisted laser
+ desorption/ionization-time-of-flight (MALDI-TOF) and other
+ two-dimensional mass spectrometry data. In addition to commonly used
+ plotting and processing methods it includes distinctive features,
+ namely baseline subtraction methods such as morphological filters
+ (TopHat) or the statistics-sensitive non-linear iterative peak-clipping
+ algorithm (SNIP), peak alignment using warping functions, handling of
+ replicated measurements as well as allowing spectra with different
+ resolutions."""
+
+ homepage = "https://cran.r-project.org/package=MALDIquant"
+ url = "https://cran.r-project.org/src/contrib/MALDIquant_1.16.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/MALDIquant"
+
+ version('1.16.4', '83200e7496d05c5a99292e45d2b11c67')
+
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-testthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mapproj/package.py b/var/spack/repos/builtin/packages/r-mapproj/package.py
index 3475868abd..d17ba5a8b3 100644
--- a/var/spack/repos/builtin/packages/r-mapproj/package.py
+++ b/var/spack/repos/builtin/packages/r-mapproj/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-maps/package.py b/var/spack/repos/builtin/packages/r-maps/package.py
index c399bc52f3..f9d6a487df 100644
--- a/var/spack/repos/builtin/packages/r-maps/package.py
+++ b/var/spack/repos/builtin/packages/r-maps/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-maptools/package.py b/var/spack/repos/builtin/packages/r-maptools/package.py
index 74d0673aea..e84fc2ef70 100644
--- a/var/spack/repos/builtin/packages/r-maptools/package.py
+++ b/var/spack/repos/builtin/packages/r-maptools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-markdown/package.py b/var/spack/repos/builtin/packages/r-markdown/package.py
index c0e03fef0a..d58e56548c 100644
--- a/var/spack/repos/builtin/packages/r-markdown/package.py
+++ b/var/spack/repos/builtin/packages/r-markdown/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,10 +32,11 @@ class RMarkdown(RPackage):
http://en.wikipedia.org/wiki/Markdown for more information about
'Markdown'."""
- homepage = "https://github.com/rstudio/markdown"
+ homepage = "https://cran.r-project.org/package=markdown"
url = "https://cran.r-project.org/src/contrib/markdown_0.7.7.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/markdown"
+ version('0.8', '5dde829a865ad65bab37a2b9d243b071')
version('0.7.7', '72deca9c675c7cc9343048edbc29f7ff')
depends_on('r-mime', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mass/package.py b/var/spack/repos/builtin/packages/r-mass/package.py
index 25d3b5869b..5767b10be1 100644
--- a/var/spack/repos/builtin/packages/r-mass/package.py
+++ b/var/spack/repos/builtin/packages/r-mass/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,8 +29,9 @@ class RMass(RPackage):
"""Functions and datasets to support Venables and Ripley, "Modern Applied
Statistics with S" (4th edition, 2002)."""
- homepage = "http://www.stats.ox.ac.uk/pub/MASS4/"
- url = "https://cran.r-project.org/src/contrib/MASS_7.3-45.tar.gz"
+ homepage = "https://cran.r-project.org/web/packages/MASS/index.html"
+ url = "https://cran.r-project.org/src/contrib/MASS_7.3-47.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/MASS"
+ version('7.3-47', '2ef69aa9e25c0a445661a9877e117594')
version('7.3-45', 'aba3d12fab30f1793bee168a1efea88b')
diff --git a/var/spack/repos/builtin/packages/r-matrix/package.py b/var/spack/repos/builtin/packages/r-matrix/package.py
index 07c2eaf9da..cf9a8649dd 100644
--- a/var/spack/repos/builtin/packages/r-matrix/package.py
+++ b/var/spack/repos/builtin/packages/r-matrix/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,10 @@ class RMatrix(RPackage):
using 'LAPACK' and 'SuiteSparse'."""
homepage = "http://matrix.r-forge.r-project.org/"
- url = "https://cran.r-project.org/src/contrib/Matrix_1.2-6.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/Matrix"
-
+ url = "https://cran.rstudio.com/src/contrib/Matrix_1.2-11.tar.gz"
+ list_url = homepage
+ version('1.2-11', 'a8c1a893f36d7ea918ddbf8cb8d10b43')
+ version('1.2-8', '4a6406666bf97d3ec6b698eea5d9c0f5')
version('1.2-6', 'f545307fb1284861e9266c4e9712c55e')
depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-matrixmodels/package.py b/var/spack/repos/builtin/packages/r-matrixmodels/package.py
index 0958de49a3..de309edbdd 100644
--- a/var/spack/repos/builtin/packages/r-matrixmodels/package.py
+++ b/var/spack/repos/builtin/packages/r-matrixmodels/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-matrixstats/package.py b/var/spack/repos/builtin/packages/r-matrixstats/package.py
new file mode 100644
index 0000000000..a04eaf6d47
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-matrixstats/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RMatrixstats(RPackage):
+ """High-performing functions operating on rows and columns of matrices,
+ e.g. col / rowMedians(), col / rowRanks(), and col / rowSds(). Functions
+ optimized per data type and for subsetted calculations such that both
+ memory usage and processing time is minimized. There are also optimized
+ vector-based methods, e.g. binMeans(), madDiff() and
+ weightedMedian()."""
+
+ homepage = "https://cran.rstudio.com/web/packages/matrixStats/index.html"
+ url = "https://cran.rstudio.com/src/contrib/matrixStats_0.52.2.tar.gz"
+ list_url = homepage
+
+ version('0.52.2', '41b987d3ae96ee6895875c413adcba3c')
diff --git a/var/spack/repos/builtin/packages/r-mclust/package.py b/var/spack/repos/builtin/packages/r-mclust/package.py
new file mode 100644
index 0000000000..30e1200da0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mclust/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RMclust(RPackage):
+ """mclust: Gaussian Mixture Modelling for Model-Based Clustering,
+ Classification, and Density Estimation"""
+
+ homepage = "http://www.stat.washington.edu/mclust"
+ url = "https://cran.r-project.org/src/contrib/mclust_5.3.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/mclust"
+
+ version('5.3', '74aac9fccdfc78373ce733c1a09176ef')
+
+ depends_on('r@3.0.0:')
diff --git a/var/spack/repos/builtin/packages/r-mcmcglmm/package.py b/var/spack/repos/builtin/packages/r-mcmcglmm/package.py
new file mode 100644
index 0000000000..19bd61f746
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mcmcglmm/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RMcmcglmm(RPackage):
+ """MCMC Generalised Linear Mixed Models."""
+
+ homepage = "https://cran.r-project.org/web/packages/MCMCglmm/index.html"
+ url = "https://cran.r-project.org/src/contrib/MCMCglmm_2.25.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/MCMCglmm"
+
+ version('2.25', '260527ef6fecdd87f762fd07406d674a')
+
+ depends_on('r-matrix', type=('build', 'run'))
+ depends_on('r-coda', type=('build', 'run'))
+ depends_on('r-ape', type=('build', 'run'))
+ depends_on('r-corpcor', type=('build', 'run'))
+ depends_on('r-tensora', type=('build', 'run'))
+ depends_on('r-cubature', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mda/package.py b/var/spack/repos/builtin/packages/r-mda/package.py
new file mode 100644
index 0000000000..492cc4fe13
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mda/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RMda(RPackage):
+ """Mixture and flexible discriminant analysis, multivariate adaptive
+ regression splines (MARS), BRUTO."""
+
+ homepage = "https://cran.r-project.org/package=mda"
+ url = "https://cran.r-project.org/src/contrib/mda_0.4-9.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/mda"
+
+ version('0.4-9', '2ce1446c4a013e0ebcc1099a00269ad9')
+
+ depends_on('r@1.9.0:')
+
+ depends_on('r-class', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-memoise/package.py b/var/spack/repos/builtin/packages/r-memoise/package.py
index 76c207dc04..867ee78a39 100644
--- a/var/spack/repos/builtin/packages/r-memoise/package.py
+++ b/var/spack/repos/builtin/packages/r-memoise/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,9 @@ class RMemoise(RPackage):
same arguments it returns the pre-computed value."""
homepage = "https://github.com/hadley/memoise"
- url = "https://cran.r-project.org/src/contrib/memoise_1.0.0.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/memoise"
-
+ url = "https://cran.rstudio.com/src/contrib/memoise_1.1.0.tar.gz"
+ list_url = homepage
+ version('1.1.0', '493209ee04673f0fcab473c3dd80fb8c')
version('1.0.0', 'd31145292e2a88ae9a504cab1602e4ac')
depends_on('r-digest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mergemaid/package.py b/var/spack/repos/builtin/packages/r-mergemaid/package.py
new file mode 100644
index 0000000000..ae6ef977c5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mergemaid/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 RMergemaid(RPackage):
+ """The functions in this R extension are intended for cross-study
+ comparison of gene expression array data. Required from the user is
+ gene expression matrices, their corresponding gene-id vectors and
+ other useful information, and they could be 'list','matrix', or
+ 'ExpressionSet'. The main function is 'mergeExprs' which transforms
+ the input objects into data in the merged format, such that common
+ genes in different datasets can be easily found. And the function
+ 'intcor' calculate the correlation coefficients. Other functions use
+ the output from 'modelOutcome' to graphically display the results and
+ cross-validate associations of gene expression data with survival."""
+
+ homepage = "https://www.bioconductor.org/packages/MergeMaid/"
+ url = "https://git.bioconductor.org/packages/MergeMaid"
+
+ version('2.48.0', git='https://git.bioconductor.org/packages/MergeMaid', commit='aee89c523fcafff4c166ff3db4fff90df16a1ed4')
+
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.48.0')
diff --git a/var/spack/repos/builtin/packages/r-methodss3/package.py b/var/spack/repos/builtin/packages/r-methodss3/package.py
new file mode 100644
index 0000000000..2c1768a1b1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-methodss3/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RMethodss3(RPackage):
+ """Methods that simplify the setup of S3 generic functions and
+ S3 methods. Major effort has been made in making definition of
+ methods as simple as possible with a minimum of maintenance for
+ package developers. For example, generic functions are created
+ automatically, if missing, and naming conflict are automatically
+ solved, if possible. The method setMethodS3() is a good start
+ for those who in the future may want to migrate to S4. This is
+ a cross-platform package implemented in pure R that generates
+ standard S3 methods."""
+
+ homepage = "https://cran.r-project.org/package=R.methodsS3"
+ url = "https://cran.r-project.org/src/contrib/R.methodsS3_1.7.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/R.methodsS3"
+
+ version('1.7.1', 'c88e815837f268affd4f2a39c737d969')
diff --git a/var/spack/repos/builtin/packages/r-mgcv/package.py b/var/spack/repos/builtin/packages/r-mgcv/package.py
index c8cb067275..0bf7563df1 100644
--- a/var/spack/repos/builtin/packages/r-mgcv/package.py
+++ b/var/spack/repos/builtin/packages/r-mgcv/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,9 +32,10 @@ class RMgcv(RPackage):
beyond the exponential family."""
homepage = "https://cran.r-project.org/package=mgcv"
- url = "https://cran.r-project.org/src/contrib/mgcv_1.8-13.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/mgcv_1.8-16.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/mgcv"
+ version('1.8-16', '4c1d85e0f80b017bccb4b63395842911')
version('1.8-13', '30607be3aaf44b13bd8c81fc32e8c984')
depends_on('r-nlme', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mime/package.py b/var/spack/repos/builtin/packages/r-mime/package.py
index c4d2eb2b3e..bb235270d7 100644
--- a/var/spack/repos/builtin/packages/r-mime/package.py
+++ b/var/spack/repos/builtin/packages/r-mime/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-minfi/package.py b/var/spack/repos/builtin/packages/r-minfi/package.py
new file mode 100644
index 0000000000..3621743aaa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-minfi/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 RMinfi(RPackage):
+ """Tools to analyze & visualize Illumina Infinium methylation arrays."""
+
+ homepage = "https://bioconductor.org/packages/minfi/"
+ url = "https://git.bioconductor.org/packages/minfi"
+ list_url = homepage
+
+ version('1.22.1', git='https://git.bioconductor.org/packages/minfi', commit='b2faf84bcbb291e32d470a0e029450093527545b')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-bumphunter', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-beanplot', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-nor1mix', type=('build', 'run'))
+ depends_on('r-siggenes', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-illuminaio', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
+ depends_on('r-mclust', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-nlme', type=('build', 'run'))
+ depends_on('r-reshape', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-quadprog', type=('build', 'run'))
+ depends_on('r-data-table', type=('build', 'run'))
+ depends_on('r-geoquery', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.22.1')
diff --git a/var/spack/repos/builtin/packages/r-minqa/package.py b/var/spack/repos/builtin/packages/r-minqa/package.py
index 7a9032a546..23fe7b5b5c 100644
--- a/var/spack/repos/builtin/packages/r-minqa/package.py
+++ b/var/spack/repos/builtin/packages/r-minqa/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-mlbench/package.py b/var/spack/repos/builtin/packages/r-mlbench/package.py
new file mode 100644
index 0000000000..9d450ced9e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mlbench/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RMlbench(RPackage):
+ """A collection of artificial and real-world machine learning benchmark
+ problems, including, e.g., several data sets from the UCI repository."""
+
+ homepage = "https://cran.r-project.org/web/packages/mlbench/index.html"
+ url = "https://cran.r-project.org/src/contrib/mlbench_2.1-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/mlbench"
+
+ version('2.1-1', '9f06848b8e137b8a37417c92d8e57f3b')
+
+ depends_on('r@2.10:')
+
+ depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-mlinterfaces/package.py b/var/spack/repos/builtin/packages/r-mlinterfaces/package.py
new file mode 100644
index 0000000000..9c83563b8f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mlinterfaces/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 RMlinterfaces(RPackage):
+ """This package provides uniform interfaces to machine learning
+ code for data in R and Bioconductor containers."""
+
+ homepage = "https://www.bioconductor.org/packages/MLInterfaces/"
+ url = "https://git.bioconductor.org/packages/MLInterfaces"
+
+ version('1.56.0', git='https://git.bioconductor.org/packages/MLInterfaces', commit='31fe6fb20d859fcb01d5552f42bca6bab16cc67f')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.56.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-gdata', type=('build', 'run'))
+ depends_on('r-pls', type=('build', 'run'))
+ depends_on('r-sfsmisc', type=('build', 'run'))
+ depends_on('r-rda', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-fpc', type=('build', 'run'))
+ depends_on('r-ggvis', type=('build', 'run'))
+ depends_on('r-shiny', type=('build', 'run'))
+ depends_on('r-gbm', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-hwriter', type=('build', 'run'))
+ depends_on('r-threejs', type=('build', 'run'))
+ depends_on('r-mlbench', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-modelmetrics/package.py b/var/spack/repos/builtin/packages/r-modelmetrics/package.py
new file mode 100644
index 0000000000..c3625e1e37
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-modelmetrics/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RModelmetrics(RPackage):
+ """Collection of metrics for evaluating models written in C++ using
+ 'Rcpp'."""
+
+ homepage = "https://cran.r-project.org/package=ModelMetrics"
+ url = "https://cran.r-project.org/src/contrib/ModelMetrics_1.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ModelMetrics"
+
+ version('1.1.0', 'd43175001f0531b8810d2802d76b7b44')
+
+ depends_on('r@3.2.2:')
+
+ depends_on('r-rcpp', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-modeltools/package.py b/var/spack/repos/builtin/packages/r-modeltools/package.py
new file mode 100644
index 0000000000..1c0873dfae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-modeltools/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RModeltools(RPackage):
+ """A collection of tools to deal with statistical models."""
+
+ homepage = "https://cran.r-project.org/package=modeltools"
+ url = "https://cran.r-project.org/src/contrib/modeltools_0.2-21.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/modeltools"
+
+ version('0.2-21', '3bf56b2e7bf78981444385d87eeccdd7')
diff --git a/var/spack/repos/builtin/packages/r-mpm/package.py b/var/spack/repos/builtin/packages/r-mpm/package.py
new file mode 100644
index 0000000000..e2f59227a0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mpm/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RMpm(RPackage):
+ """Exploratory graphical analysis of multivariate data, specifically
+ gene expression data with different projection methods: principal
+ component analysis, correspondence analysis, spectral map analysis."""
+
+ homepage = "https://cran.rstudio.com/web/packages/mpm/index.html"
+ url = "https://cran.rstudio.com/src/contrib/mpm_1.0-22.tar.gz"
+ list_url = homepage
+ version('1.0-22', '91885c421cafd89ce8893ccf827165a2')
+
+ depends_on('r-kernsmooth', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-msnbase/package.py b/var/spack/repos/builtin/packages/r-msnbase/package.py
new file mode 100644
index 0000000000..fddbffdcec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-msnbase/package.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/spack/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 RMsnbase(RPackage):
+ """Manipulation, processing and visualisation of mass spectrometry and
+ proteomics data."""
+
+ homepage = "https://www.bioconductor.org/packages/MSnbase/"
+ url = "https://git.bioconductor.org/packages/MSnbase"
+
+ version('2.2.0', git='https://git.bioconductor.org/packages/MSnbase', commit='d6e8fb7f106d05096fa9074da0f829ac8f02c197')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-mzr', type=('build', 'run'))
+ depends_on('r-biocparallel', type=('build', 'run'))
+ depends_on('r-protgenerics', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-vsn', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-impute', type=('build', 'run'))
+ depends_on('r-pcamethods', type=('build', 'run'))
+ depends_on('r-mzid', type=('build', 'run'))
+ depends_on('r-maldiquant', type=('build', 'run'))
+ depends_on('r-digest', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.2.0')
diff --git a/var/spack/repos/builtin/packages/r-multcomp/package.py b/var/spack/repos/builtin/packages/r-multcomp/package.py
index 70704a9c61..8b5b6deff7 100644
--- a/var/spack/repos/builtin/packages/r-multcomp/package.py
+++ b/var/spack/repos/builtin/packages/r-multcomp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,8 +38,8 @@ class RMultcomp(RPackage):
version('1.4-6', 'f1353ede2ed78b23859a7f1f1f9ebe88')
- depends_on('r-mvtnorm', type=('build', 'run'))
- depends_on('r-survival', type=('build', 'run'))
- depends_on('r-thdata', type=('build', 'run'))
- depends_on('r-sandwich', type=('build', 'run'))
+ depends_on('r-mvtnorm@1.0-3:', type=('build', 'run'))
+ depends_on('r-survival@2.39-4:', type=('build', 'run'))
+ depends_on('r-th-data@1.0-2:', type=('build', 'run'))
+ depends_on('r-sandwich@2.3-0:', type=('build', 'run'))
depends_on('r-codetools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-multtest/package.py b/var/spack/repos/builtin/packages/r-multtest/package.py
new file mode 100644
index 0000000000..04030423ee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-multtest/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RMulttest(RPackage):
+ """Resampling-based multiple hypothesis testing"""
+
+ homepage = "https://www.bioconductor.org/packages/multtest/"
+ url = "https://git.bioconductor.org/packages/multtest"
+
+ version('2.32.0', git='https://git.bioconductor.org/packages/multtest', commit='c5e890dfbffcc3a3f107303a24b6085614312f4a')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.32.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-munsell/package.py b/var/spack/repos/builtin/packages/r-munsell/package.py
index 670fed41e2..de729c84ef 100644
--- a/var/spack/repos/builtin/packages/r-munsell/package.py
+++ b/var/spack/repos/builtin/packages/r-munsell/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-mvtnorm/package.py b/var/spack/repos/builtin/packages/r-mvtnorm/package.py
index 01e3aea91d..9806c21cb5 100644
--- a/var/spack/repos/builtin/packages/r-mvtnorm/package.py
+++ b/var/spack/repos/builtin/packages/r-mvtnorm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,8 @@ class RMvtnorm(RPackage):
deviates and densities."""
homepage = "http://mvtnorm.r-forge.r-project.org/"
- url = "https://cran.r-project.org/src/contrib/mvtnorm_1.0-5.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/mvtnorm_1.0-6.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/mvtnorm"
+ version('1.0-6', 'cb69426868fd3e330412b8491901d9d4')
version('1.0-5', '5894dd3969bbfa26f4862c45f9a48a52')
diff --git a/var/spack/repos/builtin/packages/r-mzid/package.py b/var/spack/repos/builtin/packages/r-mzid/package.py
new file mode 100644
index 0000000000..cb23814ea8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mzid/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RMzid(RPackage):
+ """A parser for mzIdentML files implemented using the XML package. The
+ parser tries to be general and able to handle all types of mzIdentML
+ files with the drawback of having less 'pretty' output than a vendor
+ specific parser. Please contact the maintainer with any problems and
+ supply an mzIdentML file so the problems can be fixed quickly."""
+
+ homepage = "https://www.bioconductor.org/packages/mzID/"
+ url = "https://git.bioconductor.org/packages/mzID"
+
+ version('1.14.0', git='https://git.bioconductor.org/packages/mzID', commit='1c53aa6523ae61d3ebb13381381fc119d6cc6115')
+
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-plyr', type=('build', 'run'))
+ depends_on('r-doparallel', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-iterators', type=('build', 'run'))
+ depends_on('r-protgenerics', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.14.0')
diff --git a/var/spack/repos/builtin/packages/r-mzr/package.py b/var/spack/repos/builtin/packages/r-mzr/package.py
new file mode 100644
index 0000000000..282962153b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-mzr/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RMzr(RPackage):
+ """mzR provides a unified API to the common file formats and parsers
+ available for mass spectrometry data. It comes with a wrapper for the
+ ISB random access parser for mass spectrometry mzXML, mzData and mzML
+ files. The package contains the original code written by the ISB, and a
+ subset of the proteowizard library for mzML and mzIdentML. The netCDF
+ reading code has previously been used in XCMS."""
+
+ homepage = "https://www.bioconductor.org/packages/mzR/"
+ url = "https://git.bioconductor.org/packages/mzR"
+
+ version('2.10.0', git='https://git.bioconductor.org/packages/mzR', commit='a6168b68e48c281e88de9647254a8db1e21df388')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-protgenerics', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('netcdf')
+ depends_on('r@3.4.0:3.4.9', when='@2.10.0')
diff --git a/var/spack/repos/builtin/packages/r-ncbit/package.py b/var/spack/repos/builtin/packages/r-ncbit/package.py
new file mode 100644
index 0000000000..c9bc90654c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ncbit/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RNcbit(RPackage):
+ """Making NCBI taxonomic data locally available and searchable as an R
+ object."""
+
+ homepage = "https://cran.r-project.org/package=ncbit"
+ url = "https://cran.r-project.org/src/contrib/ncbit_2013.03.29.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ncbit"
+
+ version('2013.03.29', '29582d7e5c8bbf9683c57c4f6ac3e891')
diff --git a/var/spack/repos/builtin/packages/r-ncdf4/package.py b/var/spack/repos/builtin/packages/r-ncdf4/package.py
index 597f4d903f..8e24a0eba1 100644
--- a/var/spack/repos/builtin/packages/r-ncdf4/package.py
+++ b/var/spack/repos/builtin/packages/r-ncdf4/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-network/package.py b/var/spack/repos/builtin/packages/r-network/package.py
new file mode 100644
index 0000000000..867fbf41f6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-network/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RNetwork(RPackage):
+ """Tools to create and modify network objects. The network class can
+ represent a range of relational data types, and supports
+ arbitrary vertex/edge/graph attributes."""
+
+ homepage = "https://statnet.org"
+ url = "https://cran.r-project.org/src/contrib/network_1.13.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/network"
+
+ version('1.13.0', 'd0b967d6f1aad43b6479d72f29b705de')
diff --git a/var/spack/repos/builtin/packages/r-networkd3/package.py b/var/spack/repos/builtin/packages/r-networkd3/package.py
index e881394538..4102dbefe4 100644
--- a/var/spack/repos/builtin/packages/r-networkd3/package.py
+++ b/var/spack/repos/builtin/packages/r-networkd3/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-nlme/package.py b/var/spack/repos/builtin/packages/r-nlme/package.py
index 869e03ab51..b50fa42c10 100644
--- a/var/spack/repos/builtin/packages/r-nlme/package.py
+++ b/var/spack/repos/builtin/packages/r-nlme/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,11 @@ class RNlme(RPackage):
"""Fit and compare Gaussian linear and nonlinear mixed-effects models."""
homepage = "https://cran.r-project.org/package=nlme"
- url = "https://cran.r-project.org/src/contrib/nlme_3.1-128.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/nlme_3.1-130.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/nlme"
+ version('3.1-131', '0f1215ec4d4e3bca939282d122f4d1fa')
+ version('3.1-130', '1935d6e308a8018ed8e45d25c8731288')
version('3.1-128', '3d75ae7380bf123761b95a073eb55008')
depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-nloptr/package.py b/var/spack/repos/builtin/packages/r-nloptr/package.py
index 8da84c5814..613900c799 100644
--- a/var/spack/repos/builtin/packages/r-nloptr/package.py
+++ b/var/spack/repos/builtin/packages/r-nloptr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,16 +26,19 @@ from spack import *
class RNloptr(RPackage):
- """nloptr is an R interface to NLopt. NLopt is a free/open-source library
- for nonlinear optimization, providing a common interface for a number of
- different free optimization routines available online as well as original
- implementations of various other algorithms. See
- http://ab-initio.mit.edu/wiki/index.php/NLopt_Introduction for more
- information on the available algorithms. During installation on Unix the
- NLopt code is downloaded and compiled from the NLopt website."""
+ """nloptr is an R interface to NLopt. NLopt is a free/open-source
+ library for nonlinear optimization, providing a common interface
+ for a number of different free optimization routines available
+ online as well as original implementations of various other
+ algorithms. See http://ab-initio.mit.edu/wiki/index.php/NLopt
+ _Introduction for more information on the available algorithms.
+ During installation on Unix the NLopt code is downloaded and
+ compiled from the NLopt website."""
homepage = "https://cran.r-project.org/package=nloptr"
- url = "https://cran.r-project.org/src/contrib/nloptr_1.0.4.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/nloptr"
+ url = "https://cran.rstudio.com/src/contrib/nloptr_1.0.4.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/nloptr"
- version('1.0.4', '9af69a613349b236fd377d0a107f484c')
+ version('1.0.4', 'f2775dfb4f7f5552d46937a04c062b0d')
+
+ depends_on('r-testthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-nmf/package.py b/var/spack/repos/builtin/packages/r-nmf/package.py
index 78347ea615..8e2806efed 100644
--- a/var/spack/repos/builtin/packages/r-nmf/package.py
+++ b/var/spack/repos/builtin/packages/r-nmf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-nnet/package.py b/var/spack/repos/builtin/packages/r-nnet/package.py
index eeb6f91034..5298b38abe 100644
--- a/var/spack/repos/builtin/packages/r-nnet/package.py
+++ b/var/spack/repos/builtin/packages/r-nnet/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-nnls/package.py b/var/spack/repos/builtin/packages/r-nnls/package.py
new file mode 100644
index 0000000000..44ea8174c2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-nnls/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RNnls(RPackage):
+ """An R interface to the Lawson-Hanson implementation of an
+ algorithm for non-negative least squares (NNLS). Also allows
+ the combination of non-negative and non-positive constraints."""
+
+ homepage = "https://cran.r-project.org/package=nnls"
+ url = "https://cran.rstudio.com/src/contrib/nnls_1.4.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/nnls"
+
+ version('1.4', 'cdb3640120f73e0ccb6079108e0ef361')
diff --git a/var/spack/repos/builtin/packages/r-nor1mix/package.py b/var/spack/repos/builtin/packages/r-nor1mix/package.py
new file mode 100644
index 0000000000..ceb9852d7e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-nor1mix/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RNor1mix(RPackage):
+ """Onedimensional Normal Mixture Models Classes, for, e.g., density
+ estimation or clustering algorithms research and teaching; providing
+ the widely used Marron-Wand densities. Efficient random number
+ generation and graphics; now fitting to data by ML (Maximum Likelihood)
+ or EM estimation."""
+
+ homepage = "https://CRAN.R-project.org/package=nor1mix"
+ url = "https://cran.rstudio.com/src/contrib/nor1mix_1.2-3.tar.gz"
+ list_url = homepage
+
+ version('1.2-3', '60eb5cc1ea6b366f53042087a080b105')
diff --git a/var/spack/repos/builtin/packages/r-np/package.py b/var/spack/repos/builtin/packages/r-np/package.py
index e15cb7efcb..6bb788e38d 100644
--- a/var/spack/repos/builtin/packages/r-np/package.py
+++ b/var/spack/repos/builtin/packages/r-np/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-numderiv/package.py b/var/spack/repos/builtin/packages/r-numderiv/package.py
new file mode 100644
index 0000000000..86887bb1a5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-numderiv/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RNumderiv(RPackage):
+ """Methods for calculating (usually) accurate numerical first and
+ second order derivatives."""
+
+ homepage = "https://cran.r-project.org/package=numDeriv"
+ url = "https://cran.r-project.org/src/contrib/numDeriv_2016.8-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/numDeriv"
+
+ version('2016.8-1', '30e486298d5126d86560095be8e8aac1')
+
+ depends_on('r@2.11.1:')
diff --git a/var/spack/repos/builtin/packages/r-oligoclasses/package.py b/var/spack/repos/builtin/packages/r-oligoclasses/package.py
new file mode 100644
index 0000000000..85e221e275
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-oligoclasses/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 ROligoclasses(RPackage):
+ """This package contains class definitions, validity checks,
+ and initialization methods for classes used by the oligo and
+ crlmm packages."""
+
+ homepage = "https://www.bioconductor.org/packages/oligoClasses/"
+ url = "https://git.bioconductor.org/packages/oligoClasses"
+
+ version('1.38.0', git='https://git.bioconductor.org/packages/oligoClasses', commit='fe2bb7f02c7ed3cbd338254c27ceba6ff829a962')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.38.0')
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-affyio', type=('build', 'run'))
+ depends_on('r-ff', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-biocinstaller', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-oo/package.py b/var/spack/repos/builtin/packages/r-oo/package.py
new file mode 100644
index 0000000000..7f4a3e39d9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-oo/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 ROo(RPackage):
+ """Methods and classes for object-oriented programming in R with
+ or without references. Large effort has been made on making
+ definition of methods as simple as possible with a minimum of
+ maintenance for package developers. The package has been developed
+ since 2001 and is now considered very stable. This is a
+ cross-platform package implemented in pure R that defines
+ standard S3 classes without any tricks."""
+
+ homepage = "https://github.com/HenrikBengtsson/R.oo"
+ url = "https://cran.rstudio.com/src/contrib/R.oo_1.21.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/R.oo"
+
+ version('1.21.0', 'f0062095c763faaeba30558303f68bc3')
+
+ depends_on('r-methodss3', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-openssl/package.py b/var/spack/repos/builtin/packages/r-openssl/package.py
index bf9f38be72..4c038f29c9 100644
--- a/var/spack/repos/builtin/packages/r-openssl/package.py
+++ b/var/spack/repos/builtin/packages/r-openssl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,10 +37,12 @@ class ROpenssl(RPackage):
generator, and 'bignum' math methods for manually performing crypto
calculations on large multibyte integers."""
- homepage = "https://github.com/jeroenooms/openssl#readme"
- url = "https://cran.r-project.org/src/contrib/openssl_0.9.4.tar.gz"
+ homepage = "https://CRAN.R-project.org/package=openssl"
+ url = "https://cran.r-project.org/src/contrib/openssl_0.9.6.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/openssl"
+ version('0.9.7', '86773824dce7d3d79abfef574ce2531a')
+ version('0.9.6', '7ef137929d9dd07db690d35db242ba4b')
version('0.9.4', '82a890e71ed0e74499878bedacfb8ccb')
- depends_on('openssl')
+ depends_on('openssl@1.0.1:')
diff --git a/var/spack/repos/builtin/packages/r-organismdbi/package.py b/var/spack/repos/builtin/packages/r-organismdbi/package.py
new file mode 100644
index 0000000000..b299c5919b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-organismdbi/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 ROrganismdbi(RPackage):
+ """The package enables a simple unified interface to several annotation
+ packages each of which has its own schema by taking advantage of the
+ fact that each of these packages implements a select methods."""
+
+ homepage = "https://bioconductor.org/packages/OrganismDbi/"
+ url = "https://git.bioconductor.org/packages/OrganismDbi"
+ list_url = homepage
+
+ version('1.18.1', git='https://git.bioconductor.org/packages/OrganismDbi', commit='ba2d1237256805e935d9534a0c6f1ded07b42e95')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocinstaller', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-graph', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-rbgl', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.18.1')
diff --git a/var/spack/repos/builtin/packages/r-packrat/package.py b/var/spack/repos/builtin/packages/r-packrat/package.py
index 726a6640e8..c87326cacb 100644
--- a/var/spack/repos/builtin/packages/r-packrat/package.py
+++ b/var/spack/repos/builtin/packages/r-packrat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,4 +33,5 @@ class RPackrat(RPackage):
url = "https://cran.r-project.org/src/contrib/packrat_0.4.7-1.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/packrat"
+ version('0.4.8-1', '14e82feba55fcda923396282fc490038')
version('0.4.7-1', '80c2413269b292ade163a70ba5053e84')
diff --git a/var/spack/repos/builtin/packages/r-pacman/package.py b/var/spack/repos/builtin/packages/r-pacman/package.py
new file mode 100644
index 0000000000..c272904a2e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pacman/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RPacman(RPackage):
+ """Tools to more conveniently perform tasks associated with add-on
+ packages. pacman conveniently wraps library and package related functions
+ and names them in an intuitive and consistent fashion. It seeks to combine
+ functionality from lower level functions which can speed up workflow."""
+
+ homepage = "https://cran.r-project.org/package=pacman"
+ url = "https://cran.r-project.org/src/contrib/pacman_0.4.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/pacman"
+
+ version('0.4.1', 'bf18fe6d1407d31e00b337d9b07fb648')
+
+ depends_on('r@3.0.2:')
+
+ depends_on('r-devtools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-pamr/package.py b/var/spack/repos/builtin/packages/r-pamr/package.py
new file mode 100644
index 0000000000..9e3de93ad6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pamr/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RPamr(RPackage):
+ """Some functions for sample classification in microarrays."""
+
+ homepage = "https://cran.r-project.org/package=pamr"
+ url = "https://cran.rstudio.com/src/contrib/pamr_1.55.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/pamr"
+
+ version('1.55', '108932d006a4de3a178b6f57f5d1a006')
diff --git a/var/spack/repos/builtin/packages/r-party/package.py b/var/spack/repos/builtin/packages/r-party/package.py
new file mode 100644
index 0000000000..de9be7d79d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-party/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RParty(RPackage):
+ """A computational toolbox for recursive partitioning."""
+
+ homepage = "https://cran.r-project.org/web/packages/party/index.html"
+ url = "https://cran.r-project.org/src/contrib/party_1.1-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/party"
+
+ version('1.1-2', '40a00336cf8418042d2ab616675c8ddf')
+
+ depends_on('r@2.14.0:')
+
+ depends_on('r-mvtnorm@1.0-2:', type=('build', 'run'))
+ depends_on('r-modeltools@0.1-21:', type=('build', 'run'))
+ depends_on('r-strucchange', type=('build', 'run'))
+ depends_on('r-survival@2.37-7:', type=('build', 'run'))
+ depends_on('r-coin@1.1-0:', type=('build', 'run'))
+ depends_on('r-zoo', type=('build', 'run'))
+ depends_on('r-sandwich@1.1-1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-partykit/package.py b/var/spack/repos/builtin/packages/r-partykit/package.py
index 8773dace22..45ce019cad 100644
--- a/var/spack/repos/builtin/packages/r-partykit/package.py
+++ b/var/spack/repos/builtin/packages/r-partykit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-pbdzmq/package.py b/var/spack/repos/builtin/packages/r-pbdzmq/package.py
index f602e50723..82adce3430 100644
--- a/var/spack/repos/builtin/packages/r-pbdzmq/package.py
+++ b/var/spack/repos/builtin/packages/r-pbdzmq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-pbkrtest/package.py b/var/spack/repos/builtin/packages/r-pbkrtest/package.py
index 2d51d2b958..4d6ae727cc 100644
--- a/var/spack/repos/builtin/packages/r-pbkrtest/package.py
+++ b/var/spack/repos/builtin/packages/r-pbkrtest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,7 +37,10 @@ class RPbkrtest(RPackage):
list_url = "https://cran.r-project.org/src/contrib/Archive/pbkrtest"
version('0.4-6', '0a7d9ff83b8d131af9b2335f35781ef9')
+ version('0.4-4', '5e54b1b1b35413dd1d24ef15735ec645')
- depends_on('r-lme4', type=('build', 'run'))
- depends_on('r-matrix', type=('build', 'run'))
+ depends_on('r@3.2.3:')
+
+ depends_on('r-lme4@1.1.10:', type=('build', 'run'))
+ depends_on('r-matrix@1.2.3:', type=('build', 'run'))
depends_on('r-mass', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-pcamethods/package.py b/var/spack/repos/builtin/packages/r-pcamethods/package.py
new file mode 100644
index 0000000000..b43fac79d0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pcamethods/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 RPcamethods(RPackage):
+ """Provides Bayesian PCA, Probabilistic PCA, Nipals PCA, Inverse
+ Non-Linear PCA and the conventional SVD PCA. A cluster based method for
+ missing value estimation is included for comparison. BPCA, PPCA and
+ NipalsPCA may be used to perform PCA on incomplete data as well as for
+ accurate missing value estimation. A set of methods for printing and
+ plotting the results is also provided. All PCA methods make use of the
+ same data structure (pcaRes) to provide a common interface to the PCA
+ results. Initiated at the Max-Planck Institute for Molecular Plant
+ Physiology, Golm, Germany."""
+
+ homepage = "http://bioconductor.org/packages/pcaMethods/"
+ url = "https://git.bioconductor.org/packages/pcaMethods"
+ list_url = homepage
+ version('1.68.0', git='https://git.bioconductor.org/packages/pcaMethods', commit='c8d7c93dcaf7ef728f3d089ae5d55771b320bdab')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.68.0')
diff --git a/var/spack/repos/builtin/packages/r-permute/package.py b/var/spack/repos/builtin/packages/r-permute/package.py
new file mode 100644
index 0000000000..846028e0da
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-permute/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RPermute(RPackage):
+ """A set of restricted permutation designs for freely exchangeable, line
+ transects (time series), and spatial grid designs plus permutation of
+ blocks (groups of samples) is provided. 'permute' also allows split-plot
+ designs, in which the whole-plots or split-plots or both can be
+ freely-exchangeable or one of the restricted designs. The 'permute'
+ package is modelled after the permutation schemes of 'Canoco 3.1'
+ (and later) by Cajo ter Braak."""
+
+ homepage = "https://github.com/gavinsimpson/permute"
+ url = "https://cran.r-project.org/src/contrib/permute_0.9-4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/permute"
+
+ version('0.9-4', '569fc2442d72a1e3b7e2d456019674c9')
+
+ depends_on('r@2.14:')
diff --git a/var/spack/repos/builtin/packages/r-pfam-db/package.py b/var/spack/repos/builtin/packages/r-pfam-db/package.py
new file mode 100644
index 0000000000..ef580a84bb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pfam-db/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RPfamDb(RPackage):
+ """A set of protein ID mappings for PFAM assembled using data from
+ public repositories."""
+
+ homepage = "https://www.bioconductor.org/packages/PFAM.db/"
+ url = "https://www.bioconductor.org/packages/3.5/data/annotation/src/contrib/PFAM.db_3.4.1.tar.gz"
+
+ version('3.4.1', '65ed35887ecc44f5ac9f9c8563e03f44')
+
+ depends_on('r@3.4.0:3.4.9', when='@3.4.1')
+ depends_on('r-annotationdbi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-pkgconfig/package.py b/var/spack/repos/builtin/packages/r-pkgconfig/package.py
new file mode 100644
index 0000000000..d5045721a9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pkgconfig/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RPkgconfig(RPackage):
+ """Set configuration options on a per-package basis. Options set by a
+ given package only apply to that package,
+ other packages are unaffected."""
+
+ homepage = "https://cran.rstudio.com/web/packages/pkgconfig/index.html"
+ url = "https://cran.rstudio.com/src/contrib/pkgconfig_2.0.1.tar.gz"
+ list_url = homepage
+ version('2.0.1', 'a20fd9588e37995995fa62dc4828002e')
diff --git a/var/spack/repos/builtin/packages/r-pkgmaker/package.py b/var/spack/repos/builtin/packages/r-pkgmaker/package.py
index 099cabd954..efb91262a4 100644
--- a/var/spack/repos/builtin/packages/r-pkgmaker/package.py
+++ b/var/spack/repos/builtin/packages/r-pkgmaker/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-plogr/package.py b/var/spack/repos/builtin/packages/r-plogr/package.py
new file mode 100644
index 0000000000..0f5e1319b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-plogr/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RPlogr(RPackage):
+ """A simple header-only logging library for C++. Add
+ 'LinkingTo: plogr' to 'DESCRIPTION', and '#include <plogr.h>'
+ in your C++ modules to use it."""
+
+ homepage = "https://cran.r-project.org/web/packages/plogr/index.html"
+ url = "https://cran.r-project.org/src/contrib/plogr_0.1-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/plogr"
+ version('0.1-1', '5ee46ed21b5c571d02900219098517c0')
diff --git a/var/spack/repos/builtin/packages/r-plotrix/package.py b/var/spack/repos/builtin/packages/r-plotrix/package.py
index 8a17c72f91..018d68c498 100644
--- a/var/spack/repos/builtin/packages/r-plotrix/package.py
+++ b/var/spack/repos/builtin/packages/r-plotrix/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,8 @@ class RPlotrix(RPackage):
"""Lots of plots, various labeling, axis and color scaling functions."""
homepage = "https://cran.r-project.org/package=plotrix"
- url = "https://cran.r-project.org/src/contrib/plotrix_3.6-3.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/plotrix_3.6-4.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/plotrix"
+ version('3.6-4', 'efe9b9b093d8903228a9b56c46d943fa')
version('3.6-3', '23e3e022a13a596e9b77b40afcb4a2ef')
diff --git a/var/spack/repos/builtin/packages/r-pls/package.py b/var/spack/repos/builtin/packages/r-pls/package.py
new file mode 100644
index 0000000000..b4d5c5c493
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pls/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RPls(RPackage):
+ """Multivariate regression methods Partial Least Squares Regression (PLSR),
+ Principal Component Regression (PCR) and Canonical Powered Partial Least
+ Squares (CPPLS)."""
+
+ homepage = "https://cran.r-project.org/package=pls"
+ url = "https://cran.r-project.org/src/contrib/pls_2.6-0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/pls"
+
+ version('2.6-0', '04e02e8e46d983c5ed53c1f952b329df')
+
+ depends_on('r@2.10:')
diff --git a/var/spack/repos/builtin/packages/r-plyr/package.py b/var/spack/repos/builtin/packages/r-plyr/package.py
index 6f48f5c38e..70a2659f95 100644
--- a/var/spack/repos/builtin/packages/r-plyr/package.py
+++ b/var/spack/repos/builtin/packages/r-plyr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-pmcmr/package.py b/var/spack/repos/builtin/packages/r-pmcmr/package.py
new file mode 100644
index 0000000000..11d8d3edfb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-pmcmr/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RPmcmr(RPackage):
+ """The Kruskal and Wallis one-way analysis of variance by ranks or van
+ der Waerden's normal score test can be employed, if the data do not
+ meet the assumptions for one-way ANOVA. Provided that significant
+ differences were detected by the omnibus test, one may be interested
+ in applying post-hoc tests for pairwise multiple comparisons (such as
+ Nemenyi's test, Dunn's test, Conover's test, van der Waerden's test).
+ Similarly, one-way ANOVA with repeated measures that is also referred
+ to as ANOVA with unreplicated block design can also be conducted via
+ the Friedman-Test or the Quade-test. The consequent post-hoc pairwise
+ multiple comparison tests according to Nemenyi, Conover and Quade are
+ also provided in this package. Finally Durbin's test for a two-way
+ balanced incomplete block design (BIBD) is also given in this
+ package."""
+
+ homepage = "https://cran.r-project.org/package=PMCMR"
+ url = "https://cran.rstudio.com/src/contrib/PMCMR_4.1.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/PMCMR"
+
+ version('4.1', 'b9c0c4e4cb4f73ae36f45a47abae986a')
diff --git a/var/spack/repos/builtin/packages/r-png/package.py b/var/spack/repos/builtin/packages/r-png/package.py
index 38b7ae5138..6d65cc6476 100644
--- a/var/spack/repos/builtin/packages/r-png/package.py
+++ b/var/spack/repos/builtin/packages/r-png/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-prabclus/package.py b/var/spack/repos/builtin/packages/r-prabclus/package.py
new file mode 100644
index 0000000000..de5b5b7db9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-prabclus/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RPrabclus(RPackage):
+ """prabclus: Functions for Clustering of Presence-Absence, Abundance and
+ Multilocus Genetic Data"""
+
+ homepage = "http://www.homepages.ucl.ac.uk/~ucakche"
+ url = "https://cran.r-project.org/src/contrib/prabclus_2.2-6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/prabclus"
+
+ version('2.2-6', '7f835dcc113243e1db74aad28ce93d11')
+
+ depends_on('r@2.1.0:')
+ # depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-mclust', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-praise/package.py b/var/spack/repos/builtin/packages/r-praise/package.py
index ff23594af9..f58ba04b06 100644
--- a/var/spack/repos/builtin/packages/r-praise/package.py
+++ b/var/spack/repos/builtin/packages/r-praise/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,5 +31,6 @@ class RPraise(RPackage):
homepage = "https://github.com/gaborcsardi/praise"
url = "https://cran.r-project.org/src/contrib/praise_1.0.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/praise"
version('1.0.0', '9318724cec0454884b5f762bee2da6a1')
diff --git a/var/spack/repos/builtin/packages/r-preprocesscore/package.py b/var/spack/repos/builtin/packages/r-preprocesscore/package.py
new file mode 100644
index 0000000000..95ce33d8c3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-preprocesscore/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RPreprocesscore(RPackage):
+ """A library of core preprocessing routines"""
+
+ homepage = "https://bioconductor.org/packages/preprocessCore/"
+ url = "https://git.bioconductor.org/packages/preprocessCore"
+ list_url = homepage
+
+ version('1.38.1', git='https://git.bioconductor.org/packages/preprocessCore', commit='c58cb4c720eda0f1c733b989b14912093a7c5fbc')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.38.1')
diff --git a/var/spack/repos/builtin/packages/r-prettyunits/package.py b/var/spack/repos/builtin/packages/r-prettyunits/package.py
new file mode 100644
index 0000000000..0741d17411
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-prettyunits/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RPrettyunits(RPackage):
+ """Pretty, human readable formatting of quantities. Time intervals:
+ 1337000 -> 15d 11h 23m 20s. Vague time intervals: 2674000 -> about
+ a month ago. Bytes: 1337 -> 1.34 kB."""
+
+ homepage = "https://cran.r-project.org/package=prettyunits"
+ url = "https://cran.r-project.org/src/contrib/prettyunits_1.0.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/prettyunits"
+
+ version('1.0.2', '0a091a297e8b37df54e7fcf28697ee50')
+
+ depends_on('r-magrittr', type=('build', 'run'))
+ depends_on('r-assertthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-prodlim/package.py b/var/spack/repos/builtin/packages/r-prodlim/package.py
new file mode 100644
index 0000000000..b9721174d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-prodlim/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 RProdlim(RPackage):
+ """Product-Limit Estimation for Censored Event History Analysis. Fast and
+ user friendly implementation of nonparametric estimators for censored event
+ history (survival) analysis. Kaplan-Meier and Aalen-Johansen method."""
+
+ homepage = "https://cran.r-project.org/package=prodlim"
+ url = "https://cran.r-project.org/src/contrib/prodlim_1.5.9.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/prodlim"
+
+ version('1.5.9', 'e0843053c9270e41b657a733d6675dc9')
+
+ depends_on('r@2.9.0:')
+
+ depends_on('r-rcpp@0.11.5:', type=('build', 'run'))
+ depends_on('r-survival', type=('build', 'run'))
+ depends_on('r-kernsmooth', type=('build', 'run'))
+ depends_on('r-lava', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-progress/package.py b/var/spack/repos/builtin/packages/r-progress/package.py
new file mode 100644
index 0000000000..b5a909a73d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-progress/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RProgress(RPackage):
+ """Configurable Progress bars, they may include percentage, elapsed time,
+ and/or the estimated completion time. They work in terminals, in
+ 'Emacs' 'ESS', 'RStudio', 'Windows' 'Rgui' and the 'macOS' 'R.app'.
+ The package also provides a 'C++' 'API', that works with or without
+ 'Rcpp'."""
+
+ homepage = "https://cran.r-project.org/package=progress"
+ url = "https://cran.r-project.org/src/contrib/progress_1.1.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/progress"
+
+ version('1.1.2', 'b3698672896125137e0077bc97132428')
+ depends_on('r-r6', type=('build', 'run'))
+ depends_on('r-prettyunits', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-protgenerics/package.py b/var/spack/repos/builtin/packages/r-protgenerics/package.py
new file mode 100644
index 0000000000..7ec8fa8537
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-protgenerics/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RProtgenerics(RPackage):
+ """S4 generic functions needed by Bioconductor proteomics packages."""
+
+ homepage = "https://bioconductor.org/packages/ProtGenerics/"
+ url = "https://git.bioconductor.org/packages/ProtGenerics"
+ list_url = homepage
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/ProtGenerics', commit='b2b3bb0938e20f58fca905f6870de7dbc9dfd7a3')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
diff --git a/var/spack/repos/builtin/packages/r-proto/package.py b/var/spack/repos/builtin/packages/r-proto/package.py
index 2553e325f3..412ad956e3 100644
--- a/var/spack/repos/builtin/packages/r-proto/package.py
+++ b/var/spack/repos/builtin/packages/r-proto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-proxy/package.py b/var/spack/repos/builtin/packages/r-proxy/package.py
new file mode 100644
index 0000000000..5f6057c769
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-proxy/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RProxy(RPackage):
+ """Provides an extensible framework for the efficient calculation of
+ auto- and cross-proximities, along with implementations of the most
+ popular ones."""
+
+ homepage = "https://cran.r-project.org/package=proxy"
+ url = "https://cran.rstudio.com/src/contrib/proxy_0.4-19.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/proxy"
+ version('0.4-19', '279a01a1cc12ed50208c98196d78a5d7')
diff --git a/var/spack/repos/builtin/packages/r-pryr/package.py b/var/spack/repos/builtin/packages/r-pryr/package.py
index 3a103e9855..b1e9ad4e9b 100644
--- a/var/spack/repos/builtin/packages/r-pryr/package.py
+++ b/var/spack/repos/builtin/packages/r-pryr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-ptw/package.py b/var/spack/repos/builtin/packages/r-ptw/package.py
new file mode 100644
index 0000000000..38048bc2a7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-ptw/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RPtw(RPackage):
+ """Parametric Time Warping aligns patterns, i.e. it aims to put
+ corresponding features at the same locations. The algorithm
+ searches for an optimal polynomial describing the warping. It is
+ possible to align one sample to a reference, several samples to
+ the same reference, or several samples to several references.
+ One can choose between calculating individual warpings, or one
+ global warping for a set of samples and one reference. Two
+ optimization criteria are implemented: RMS (Root Mean Square
+ error) and WCC (Weighted Cross Correlation). Both warping of
+ peak profiles and of peak lists are supported."""
+
+ homepage = "https://cran.r-project.org/package=ptw"
+ url = "https://cran.rstudio.com/src/contrib/ptw_1.9-12.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/ptw"
+
+ version('1.9-12', 'ddff887752d789ea72db3ee235ae7c67')
+
+ depends_on('r-nloptr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-purrr/package.py b/var/spack/repos/builtin/packages/r-purrr/package.py
new file mode 100644
index 0000000000..4ef40d9480
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-purrr/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RPurrr(RPackage):
+ """A complete and consistent functional programming toolkit for R."""
+
+ homepage = "http://purrr.tidyverse.org/"
+ url = "https://cran.r-project.org/src/contrib/purrr_0.2.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/purrr"
+
+ version('0.2.4', 'd9a11e6c14771beb3ebe8f4771a552f3')
+
+ depends_on('r-magrittr', type=('build', 'run'))
+ depends_on('r-rlang', type=('build', 'run'))
+ depends_on('r-tibble', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-quadprog/package.py b/var/spack/repos/builtin/packages/r-quadprog/package.py
new file mode 100644
index 0000000000..dc35139a65
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-quadprog/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RQuadprog(RPackage):
+ """This package contains routines and documentation for solving
+ quadratic programming problems."""
+
+ homepage = "https://cran.r-project.org/web/packages/quadprog/index.html"
+ url = "https://cran.r-project.org/src/contrib/quadprog_1.5-5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/quadprog"
+
+ version('1.5-5', '8442f37afd8d0b19b12e77d63e6515ad')
diff --git a/var/spack/repos/builtin/packages/r-quantmod/package.py b/var/spack/repos/builtin/packages/r-quantmod/package.py
index 4cc53fcf69..749558f894 100644
--- a/var/spack/repos/builtin/packages/r-quantmod/package.py
+++ b/var/spack/repos/builtin/packages/r-quantmod/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,8 +33,10 @@ class RQuantmod(RPackage):
url = "https://cran.r-project.org/src/contrib/quantmod_0.4-5.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/quantmod"
+ version('0.4-10', 'e4119c673567801eee16dcbbd0265de8')
version('0.4-5', 'cab3c409e4de3df98a20f1ded60f3631')
depends_on('r-xts', type=('build', 'run'))
depends_on('r-zoo', type=('build', 'run'))
depends_on('r-ttr', type=('build', 'run'))
+ depends_on('r-curl', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-quantreg/package.py b/var/spack/repos/builtin/packages/r-quantreg/package.py
index 2d5091ccaf..6b33827526 100644
--- a/var/spack/repos/builtin/packages/r-quantreg/package.py
+++ b/var/spack/repos/builtin/packages/r-quantreg/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,9 +34,10 @@ class RQuantreg(RPackage):
included."""
homepage = "https://cran.r-project.org/package=quantreg"
- url = "https://cran.r-project.org/src/contrib/quantreg_5.26.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/quantreg_5.29.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/quantreg"
+ version('5.29', '643ca728200d13f8c2e62365204e9907')
version('5.26', '1d89ed932fb4d67ae2d5da0eb8c2989f')
depends_on('r-sparsem', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-quantro/package.py b/var/spack/repos/builtin/packages/r-quantro/package.py
new file mode 100644
index 0000000000..05185abe8b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-quantro/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 RQuantro(RPackage):
+ """A data-driven test for the assumptions of quantile normalization using
+ raw data such as objects that inherit eSets (e.g. ExpressionSet,
+ MethylSet). Group level information about each sample (such as
+ Tumor / Normal status) must also be provided because the test assesses
+ if there are global differences in the distributions between the
+ user-defined groups."""
+
+ homepage = "https://www.bioconductor.org/packages/quantro/"
+ url = "https://git.bioconductor.org/packages/quantro"
+ list_url = homepage
+
+ version('1.10.0', git='https://git.bioconductor.org/packages/quantro', commit='111337c0aba052aa49c3d2e2d3042794b28858c9')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-minfi', type=('build', 'run'))
+ depends_on('r-doparallel', type=('build', 'run'))
+ depends_on('r-foreach', type=('build', 'run'))
+ depends_on('r-iterators', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.10.0')
diff --git a/var/spack/repos/builtin/packages/r-qvalue/package.py b/var/spack/repos/builtin/packages/r-qvalue/package.py
new file mode 100644
index 0000000000..f34f00c7e4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-qvalue/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RQvalue(RPackage):
+ """This package takes a list of p-values resulting from the
+ simultaneous testing of many hypotheses and estimates their
+ q-values and local FDR values. The q-value of a test measures
+ the proportion of false positives incurred (called the false
+ discovery rate) when that particular test is called significant.
+ The local FDR measures the posterior probability the null
+ hypothesis is true given the test's p-value. Various plots are
+ automatically generated, allowing one to make sensible
+ significance cut-offs. Several mathematical results have
+ recently been shown on the conservative accuracy of the
+ estimated q-values from this software. The software can be
+ applied to problems in genomics, brain imaging, astrophysics,
+ and data mining."""
+
+ homepage = "https://www.bioconductor.org/packages/qvalue/"
+ url = "https://git.bioconductor.org/packages/qvalue"
+
+ version('2.8.0', git='https://git.bioconductor.org/packages/qvalue', commit='c7bf3315619d42d800f57a36670c25a7495ded72')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.8.0')
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-r6/package.py b/var/spack/repos/builtin/packages/r-r6/package.py
index e64a8a6532..627c09ee4b 100644
--- a/var/spack/repos/builtin/packages/r-r6/package.py
+++ b/var/spack/repos/builtin/packages/r-r6/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,11 @@ class RR6(RPackage):
classes are defined in different packages."""
homepage = "https://github.com/wch/R6/"
- url = "https://cran.r-project.org/src/contrib/R6_2.1.2.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/R6"
+ url = "https://cran.rstudio.com/src/contrib/R6_2.2.2.tar.gz"
+ list_url = homepage
+ version('2.2.2', '635b58c65bff624a1fab69c6b1989801')
+ version('2.2.0', '659d83b2d3f7a308a48332b4cfbdab49')
version('2.1.2', 'b6afb9430e48707be87638675390e457')
+
+ depends_on('r@3.0:')
diff --git a/var/spack/repos/builtin/packages/r-randomforest/package.py b/var/spack/repos/builtin/packages/r-randomforest/package.py
index bc7798695d..3fbb2a3d1e 100644
--- a/var/spack/repos/builtin/packages/r-randomforest/package.py
+++ b/var/spack/repos/builtin/packages/r-randomforest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-raster/package.py b/var/spack/repos/builtin/packages/r-raster/package.py
index daa42793ee..917adfb7d6 100644
--- a/var/spack/repos/builtin/packages/r-raster/package.py
+++ b/var/spack/repos/builtin/packages/r-raster/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rbgl/package.py b/var/spack/repos/builtin/packages/r-rbgl/package.py
new file mode 100644
index 0000000000..13cd4fb68e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rbgl/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RRbgl(RPackage):
+ """A fairly extensive and comprehensive interface to the graph
+ algorithms contained in the BOOST library."""
+
+ homepage = "https://www.bioconductor.org/packages/RBGL/"
+ url = "https://git.bioconductor.org/packages/RBGL"
+
+ version('1.52.0', git='https://git.bioconductor.org/packages/RBGL', commit='93e8fcfafec8f1cd5638fe30dc0f9506d15b49c0')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.52.0')
+ depends_on('r-graph', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rbokeh/package.py b/var/spack/repos/builtin/packages/r-rbokeh/package.py
index 00f15891b2..ee254db179 100644
--- a/var/spack/repos/builtin/packages/r-rbokeh/package.py
+++ b/var/spack/repos/builtin/packages/r-rbokeh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py b/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py
index 59f134caad..6092e34163 100644
--- a/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py
+++ b/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rcpp/package.py b/var/spack/repos/builtin/packages/r-rcpp/package.py
index b447dea8bd..9e6df80506 100644
--- a/var/spack/repos/builtin/packages/r-rcpp/package.py
+++ b/var/spack/repos/builtin/packages/r-rcpp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,8 +37,12 @@ class RRcpp(RPackage):
last two."""
homepage = "http://dirk.eddelbuettel.com/code/rcpp.html"
- url = "https://cran.r-project.org/src/contrib/Rcpp_0.12.6.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/Rcpp"
+ url = "https://cran.rstudio.com/src/contrib/Rcpp_0.12.13.tar.gz"
+ list_url = homepage
+ version('0.12.13', '5186d119132bfe07f66da74c50b190a4')
+ version('0.12.12', '97b36a3b567e3438067c4a7d0075fd90')
+ version('0.12.11', 'ea1710213cbb1d91b1d0318e6fa9aa37')
+ version('0.12.9', '691c49b12794507288b728ede03668a5')
version('0.12.6', 'db4280fb0a79cd19be73a662c33b0a8b')
version('0.12.5', 'f03ec05b4e391cc46e7ce330e82ff5e2')
diff --git a/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py b/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py
new file mode 100644
index 0000000000..dba1dfe93d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rcpparmadillo/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RRcpparmadillo(RPackage):
+ """'Rcpp' Integration for the 'Armadillo' Templated Linear
+ Algebra Library."""
+
+ homepage = "https://cran.r-project.org/package=RcppArmadillo"
+ url = "https://cran.r-project.org/src/contrib/RcppArmadillo_0.8.100.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/RcppArmadillo"
+
+ version('0.8.100.1.0', 'a79c0ee967f502702414bc3c80c88f56')
+
+ depends_on('r-rcpp', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rcppeigen/package.py b/var/spack/repos/builtin/packages/r-rcppeigen/package.py
index 23ec0bc27b..47ce27e3f5 100644
--- a/var/spack/repos/builtin/packages/r-rcppeigen/package.py
+++ b/var/spack/repos/builtin/packages/r-rcppeigen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -41,9 +41,10 @@ class RRcppeigen(RPackage):
GNU GPL version 2 or later, as is the rest of 'Rcpp'."""
homepage = "http://eigen.tuxfamily.org/"
- url = "https://cran.r-project.org/src/contrib/RcppEigen_0.3.2.8.1.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/RcppEigen_0.3.2.9.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/RcppEigen"
+ version('0.3.2.9.0', '14a7786882a5d9862d53c4b2217df318')
version('0.3.2.8.1', '4146e06e4fdf7f4d08db7839069d479f')
depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rcurl/package.py b/var/spack/repos/builtin/packages/r-rcurl/package.py
new file mode 100644
index 0000000000..75a1b3ab17
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rcurl/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+#
+# This is a template package file for Spack. We've put "FIXME"
+# next to all the things you'll want to change. Once you've handled
+# them, you can save this file and test your package like this:
+#
+# spack install r-rcurl
+#
+# You can edit this file again by typing:
+#
+# spack edit r-rcurl
+#
+# See the Spack documentation for more information on packaging.
+# If you submit this package back to Spack as a pull request,
+# please first remove this boilerplate and all FIXME comments.
+#
+from spack import *
+
+
+class RRcurl(RPackage):
+ """A wrapper for 'libcurl' <http://curl.haxx.se/libcurl/> Provides
+ functions to allow one to compose general HTTP requests and provides
+ convenient functions to fetch URIs, get & post forms, etc. and process
+ the results returned by the Web server. This provides a great deal of
+ control over the HTTP/FTP/... connection and the form of the request
+ while providing a higher-level interface than is available just using
+ R socket connections. Additionally, the underlying implementation is
+ robust and extensive, supporting FTP/FTPS/TFTP (uploads and downloads),
+ SSL/HTTPS, telnet, dict, ldap, and also supports cookies, redirects,
+ authentication, etc."""
+
+ homepage = "https://cran.rstudio.com/web/packages/RCurl/index.html"
+ url = "https://cran.rstudio.com/src/contrib/RCurl_1.95-4.8.tar.gz"
+ list_url = homepage
+
+ version('1.95-4.8', '9c8aaff986eb2792c89dd3ae54d21580')
+
+ depends_on('r-bitops', type=('build', 'run'))
+ depends_on('curl')
diff --git a/var/spack/repos/builtin/packages/r-rda/package.py b/var/spack/repos/builtin/packages/r-rda/package.py
new file mode 100644
index 0000000000..614f6756ce
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rda/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RRda(RPackage):
+ """Shrunken Centroids Regularized Discriminant Analysis for the
+ classification purpose in high dimensional data."""
+
+ homepage = "https://cran.r-project.org/web/packages/rda/index.html"
+ url = "https://cran.r-project.org/src/contrib/rda_1.0.2-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rda"
+ version('1.0.2-1', '78060c5e054a63a2df4ae4002d7247bc')
diff --git a/var/spack/repos/builtin/packages/r-readr/package.py b/var/spack/repos/builtin/packages/r-readr/package.py
new file mode 100644
index 0000000000..bec64a6ebd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-readr/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RReadr(RPackage):
+ """The goal of 'readr' is to provide a fast and friendly way to read
+ rectangular data (like 'csv', 'tsv', and 'fwf'). It is designed to
+ flexibly parse many types of data found in the wild, while still cleanly
+ failing when data unexpectedly changes."""
+
+ homepage = "https://cran.rstudio.com/web/packages/readr/index.html"
+ url = "https://cran.rstudio.com/src/contrib/readr_1.1.1.tar.gz"
+
+ version('1.1.1', 'cffb6669664f6a0f6fe172542e64cb47')
+
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-tibble', type=('build', 'run'))
+ depends_on('r-hms', type=('build', 'run'))
+ depends_on('r-r6', type=('build', 'run'))
+ depends_on('r-bh', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-readxl/package.py b/var/spack/repos/builtin/packages/r-readxl/package.py
new file mode 100644
index 0000000000..c70750ea69
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-readxl/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RReadxl(RPackage):
+ """Import excel files into R. Supports '.xls' via the embedded
+ 'libxls' C library <https://sourceforge.net/projects/libxls/> and
+ '.xlsx' via the embedded 'RapidXML' C++ library
+ <https://rapidxml.sourceforge.net>. Works on Windows, Mac and Linux
+ without external dependencies."""
+
+ homepage = "http://readxl.tidyverse.org/"
+ url = "https://cran.r-project.org/src/contrib/readxl_1.0.0.tar.gz"
+
+ version('1.0.0', '030c47ae1af5dd4168087160c29131e4')
+
+ depends_on('r-tibble', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-cellranger', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-registry/package.py b/var/spack/repos/builtin/packages/r-registry/package.py
index 479250cac6..da252a9681 100644
--- a/var/spack/repos/builtin/packages/r-registry/package.py
+++ b/var/spack/repos/builtin/packages/r-registry/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rematch/package.py b/var/spack/repos/builtin/packages/r-rematch/package.py
new file mode 100644
index 0000000000..931f979c60
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rematch/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RRematch(RPackage):
+ """A small wrapper on 'regexpr' to extract the matches and
+ captured groups from the match of a regular expression to a
+ character vector."""
+
+ homepage = "https://cran.r-project.org/package=rematch"
+ url = "https://cran.r-project.org/src/contrib/rematch_1.0.1.tar.gz"
+
+ version('1.0.1', '5271666295e232931f21499522489dd3')
+
+ depends_on('r-covr', type=('build', 'run'))
+ depends_on('r-testthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-reordercluster/package.py b/var/spack/repos/builtin/packages/r-reordercluster/package.py
new file mode 100644
index 0000000000..49ab521967
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-reordercluster/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RReordercluster(RPackage):
+ """Tools for performing the leaf reordering for the dendrogram
+ that preserves the hierarchical clustering result and at the
+ same time tries to group instances from the same class together."""
+
+ homepage = "https://cran.r-project.org/package=ReorderCluster"
+ url = "https://cran.rstudio.com/src/contrib/ReorderCluster_1.0.tar.gz"
+
+ version('1.0', '67ba34acb15dda75389a822bd2fdd31a')
+
+ depends_on('r-gplots', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-reportingtools/package.py b/var/spack/repos/builtin/packages/r-reportingtools/package.py
new file mode 100644
index 0000000000..db5978248c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-reportingtools/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 RReportingtools(RPackage):
+ """The ReportingTools software package enables users to easily
+ display reports of analysis results generated from sources such
+ as microarray and sequencing data. The package allows users to
+ create HTML pages that may be viewed on a web browser such as
+ Safari, or in other formats readable by programs such as Excel.
+ Users can generate tables with sortable and filterable columns,
+ make and display plots, and link table entries to other data
+ sources such as NCBI or larger plots within the HTML page. Using
+ the package, users can also produce a table of contents page to
+ link various reports together for a particular project that can
+ be viewed in a web browser. For more examples, please visit our
+ site: http:// research-pub.gene.com/ReportingTools."""
+
+ homepage = "https://bioconductor.org/packages/ReportingTools/"
+ url = "https://git.bioconductor.org/packages/ReportingTools"
+
+ version('2.16.0', git='https://git.bioconductor.org/packages/ReportingTools', commit='b1aa0ea302da7f2993ce8087b1d09c11ddf03663')
+
+ depends_on('r@3.4.0:3.4.9', when='@2.16.0')
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-hwriter', type=('build', 'run'))
+ depends_on('r-category', type=('build', 'run'))
+ depends_on('r-gostats', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-edger', type=('build', 'run'))
+ depends_on('r-annotate', type=('build', 'run'))
+ depends_on('r-pfam-db', type=('build', 'run'))
+ depends_on('r-gseabase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-utils', type=('build', 'run'))
+ depends_on('r-deseq2', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-ggbio', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-repr/package.py b/var/spack/repos/builtin/packages/r-repr/package.py
index 47720327de..056e19aedc 100644
--- a/var/spack/repos/builtin/packages/r-repr/package.py
+++ b/var/spack/repos/builtin/packages/r-repr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-reprex/package.py b/var/spack/repos/builtin/packages/r-reprex/package.py
new file mode 100644
index 0000000000..a4fa82ed16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-reprex/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RReprex(RPackage):
+ """Convenience wrapper that uses the 'rmarkdown' package to render small
+ snippets of code to target formats that include both code and output.
+ The goal is to encourage the sharing of small, reproducible, and
+ runnable examples on code-oriented websites, such as
+ <http://stackoverflow.com> and <https://github.com>, or in email.
+ 'reprex' also extracts clean, runnable R code from various common
+ formats, such as copy/paste from an R session."""
+
+ homepage = "https://github.com/jennybc/reprex"
+ url = "https://cran.r-project.org/src/contrib/reprex_0.1.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/reprex"
+
+ version('0.1.1', 'fcd89995d7b35a2ddd4269973937bde3')
+
+ depends_on('r-callr', type=('build', 'run'))
+ depends_on('r-clipr', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-rmarkdown', type=('build', 'run'))
+ depends_on('r-whisker', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-reshape/package.py b/var/spack/repos/builtin/packages/r-reshape/package.py
new file mode 100644
index 0000000000..a4da7286ca
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-reshape/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RReshape(RPackage):
+ """Flexibly restructure and aggregate data using just two functions: melt
+ and cast."""
+
+ homepage = "https://cran.r-project.org/package=reshape"
+ url = "https://cran.r-project.org/src/contrib/reshape_0.8.7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/reshape"
+
+ version('0.8.7', '0b0eececc5eb74dea9d59a985bce6211')
+
+ depends_on('r-plyr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-reshape2/package.py b/var/spack/repos/builtin/packages/r-reshape2/package.py
index d27231e139..204ccdee8a 100644
--- a/var/spack/repos/builtin/packages/r-reshape2/package.py
+++ b/var/spack/repos/builtin/packages/r-reshape2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,10 @@ class RReshape2(RPackage):
and dcast (or acast)."""
homepage = "https://github.com/hadley/reshape"
- url = "https://cran.r-project.org/src/contrib/reshape2_1.4.1.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/reshape2_1.4.2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/reshape2"
+ version('1.4.2', 'c851a0312191b8c5bab956445df7cf5f')
version('1.4.1', '41e9dffdf5c6fa830321ac9c8ebffe00')
depends_on('r-plyr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rex/package.py b/var/spack/repos/builtin/packages/r-rex/package.py
new file mode 100644
index 0000000000..e39976644c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rex/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RRex(RPackage):
+ """A friendly interface for the construction of regular expressions."""
+
+ homepage = "https://cran.r-project.org/package=rex"
+ url = "https://cran.r-project.org/src/contrib/rex_1.1.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rex"
+
+ version('1.1.2', '8820b4d4fe3718f275847b6f2cf83689')
+
+ depends_on('r-lazyeval', type=('build', 'run'))
+ depends_on('r-magrittr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rgl/package.py b/var/spack/repos/builtin/packages/r-rgl/package.py
new file mode 100644
index 0000000000..97f89ed092
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rgl/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 RRgl(RPackage):
+ """Provides medium to high level functions for 3D interactive graphics,
+ including functions modelled on base graphics (plot3d(), etc.) as well as
+ functions for constructing representations of geometric objects (cube3d(),
+ etc.). Output may be on screen using OpenGL, or to various standard
+ 3D file formats including WebGL, PLY, OBJ, STL as well as 2D image formats,
+ including PNG, Postscript, SVG, PGF."""
+
+ homepage = "https://r-forge.r-project.org/projects/rgl"
+ url = "https://cloud.r-project.org/src/contrib/rgl_0.98.1.tar.gz"
+
+ version('0.98.1', 'bd69e1d33f1590feb4b6dc080b133e5b')
+
+ depends_on('r@3.2:3.9')
+ depends_on('zlib', type=('link'))
+ depends_on('libpng', type=('link'))
+ depends_on('libx11')
+ depends_on('freetype', type=('link'))
+ depends_on('mesa', type=('link'))
+ depends_on('mesa-glu', type=('link'))
+ depends_on('r-htmlwidgets', type=('build', 'run'))
+ depends_on('r-htmltools', type=('build', 'run'))
+ depends_on('r-knitr', type=('build', 'run'))
+ depends_on('r-jsonlite', type=('build', 'run'))
+ depends_on('r-shiny', type=('build', 'run'))
+ depends_on('r-magrittr', type=('build', 'run'))
+
+ def configure_args(self):
+ args = ['--x-includes=%s' % self.spec['libx11'].prefix.include,
+ '--x-libraries=%s' % self.spec['libx11'].prefix.lib,
+ '--with-gl-includes=%s' % self.spec['mesa'].prefix.include,
+ '--with-gl-libraries=%s' % self.spec['mesa'].prefix.lib,
+ '--with-gl-prefix=%s' % self.spec['mesa'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/r-rgooglemaps/package.py b/var/spack/repos/builtin/packages/r-rgooglemaps/package.py
index 87672a35e2..e1665fd991 100644
--- a/var/spack/repos/builtin/packages/r-rgooglemaps/package.py
+++ b/var/spack/repos/builtin/packages/r-rgooglemaps/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rhtslib/package.py b/var/spack/repos/builtin/packages/r-rhtslib/package.py
new file mode 100644
index 0000000000..4af0093830
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rhtslib/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RRhtslib(RPackage):
+ """This package provides version 1.1 of the 'HTSlib' C library
+ for high-throughput sequence analysis. The package is primarily
+ useful to developers of other R packages who wish to make use
+ of HTSlib. Motivation and instructions for use of this package
+ are in the vignette, vignette(package="Rhtslib", "Rhtslib")."""
+
+ homepage = "https://www.bioconductor.org/packages/Rhtslib/"
+ url = "https://git.bioconductor.org/packages/Rhtslib"
+
+ version('1.8.0', git='https://git.bioconductor.org/packages/Rhtslib', commit='3b5493473bed42958614091c58c739932ffcfa79')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.8.0')
+ depends_on('r-zlibbioc', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rinside/package.py b/var/spack/repos/builtin/packages/r-rinside/package.py
index d8e7c28e23..1d744db01d 100644
--- a/var/spack/repos/builtin/packages/r-rinside/package.py
+++ b/var/spack/repos/builtin/packages/r-rinside/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rjava/package.py b/var/spack/repos/builtin/packages/r-rjava/package.py
index 440b93ff1f..a1e8003343 100644
--- a/var/spack/repos/builtin/packages/r-rjava/package.py
+++ b/var/spack/repos/builtin/packages/r-rjava/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,4 +35,4 @@ class RRjava(RPackage):
version('0.9-8', '51ae0d690ceed056ebe7c4be71fc6c7a')
- depends_on('jdk')
+ depends_on('java')
diff --git a/var/spack/repos/builtin/packages/r-rjson/package.py b/var/spack/repos/builtin/packages/r-rjson/package.py
index f37b574323..d22b7c780f 100644
--- a/var/spack/repos/builtin/packages/r-rjson/package.py
+++ b/var/spack/repos/builtin/packages/r-rjson/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rjsonio/package.py b/var/spack/repos/builtin/packages/r-rjsonio/package.py
index 4d5ffa6ddf..064a50aea8 100644
--- a/var/spack/repos/builtin/packages/r-rjsonio/package.py
+++ b/var/spack/repos/builtin/packages/r-rjsonio/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rlang/package.py b/var/spack/repos/builtin/packages/r-rlang/package.py
new file mode 100644
index 0000000000..86eb205b7c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rlang/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RRlang(RPackage):
+ """A toolbox for working with base types, core R features like the
+ condition system, and core 'Tidyverse' features like tidy evaluation."""
+
+ homepage = "https://cran.r-project.org/web/packages/rlang/index.html"
+ url = "https://cran.r-project.org/src/contrib/rlang_0.1.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rlang"
+
+ version('0.1.2', '170f8cf7b61898040643515a1746a53a')
+ version('0.1.1', '38a51a0b8f8487eb52b4f3d986313682')
diff --git a/var/spack/repos/builtin/packages/r-rmarkdown/package.py b/var/spack/repos/builtin/packages/r-rmarkdown/package.py
index 31a7695923..1910aa043a 100644
--- a/var/spack/repos/builtin/packages/r-rmarkdown/package.py
+++ b/var/spack/repos/builtin/packages/r-rmarkdown/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rminer/package.py b/var/spack/repos/builtin/packages/r-rminer/package.py
new file mode 100644
index 0000000000..2bd9147afb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rminer/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 RRminer(RPackage):
+ """Facilitates the use of data mining algorithms in classification and
+ regression (including time series forecasting) tasks by presenting a short
+ and coherent set of functions."""
+
+ homepage = "http://www3.dsi.uminho.pt/pcortez/rminer.html"
+ url = "https://cran.r-project.org/src/contrib/rminer_1.4.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rminer"
+
+ version('1.4.2', '7d5d90f4ae030cf647d67aa962412c05')
+
+ depends_on('r-plotrix', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-nnet', type=('build', 'run'))
+ depends_on('r-kknn', type=('build', 'run'))
+ depends_on('r-pls', type=('build', 'run'))
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-mda', type=('build', 'run'))
+ depends_on('r-rpart', type=('build', 'run'))
+ depends_on('r-randomforest', type=('build', 'run'))
+ depends_on('r-adabag', type=('build', 'run'))
+ depends_on('r-party', type=('build', 'run'))
+ depends_on('r-cubist', type=('build', 'run'))
+ depends_on('r-kernlab', type=('build', 'run'))
+ depends_on('r-e1071', type=('build', 'run'))
+ depends_on('r-glmnet', type=('build', 'run'))
+ depends_on('r-xgboost', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rmpfr/package.py b/var/spack/repos/builtin/packages/r-rmpfr/package.py
new file mode 100644
index 0000000000..1c2e5aafe3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rmpfr/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RRmpfr(RPackage):
+ """Arithmetic (via S4 classes and methods) for arbitrary precision
+ floating point numbers, including transcendental ("special")
+ functions. To this end, Rmpfr interfaces to the LGPL'ed MPFR
+ (Multiple Precision Floating-Point Reliable) Library which itself
+ is based on the GMP (GNU Multiple Precision) Library."""
+
+ homepage = "http://rmpfr.r-forge.r-project.org"
+ url = "https://cran.r-project.org/src/contrib/Rmpfr_0.6-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/Rmpfr"
+
+ version('0.6-1', '55d4ec257bd2a9233bafee9e444d0265')
+
+ depends_on('r-gmp@0.5-8:', type=('build', 'run'))
+ depends_on('mpfr@3.0.0:')
diff --git a/var/spack/repos/builtin/packages/r-rmpi/package.py b/var/spack/repos/builtin/packages/r-rmpi/package.py
new file mode 100644
index 0000000000..e7e2870975
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rmpi/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 RRmpi(RPackage):
+ """An interface (wrapper) to MPI APIs. It also provides interactive R
+ manager and worker environment."""
+
+ homepage = "http://www.stats.uwo.ca/faculty/yu/Rmpi"
+ url = "https://cran.r-project.org/src/contrib/Rmpi_0.6-6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/Rmpi"
+
+ version('0.6-6', 'a6fa2ff5e1cd513334b4e9e9e7a2286f')
+ depends_on('mpi')
+ depends_on('r@2.15.1:')
+
+ # The following MPI types are not supported
+ conflicts('^intel-mpi')
+ conflicts('^intel-parallel-studio')
+ conflicts('^mvapich2')
+ conflicts('^spectrum-mpi')
+
+ def configure_args(self):
+ spec = self.spec
+
+ mpi_name = spec['mpi'].name
+
+ # The type of MPI. Supported values are:
+ # OPENMPI, LAM, MPICH, MPICH2, or CRAY
+ if mpi_name == 'openmpi':
+ Rmpi_type = 'OPENMPI'
+ elif mpi_name == 'mpich':
+ Rmpi_type = 'MPICH2'
+ else:
+ raise InstallError('Unsupported MPI type')
+
+ return [
+ '--with-Rmpi-type={0}'.format(Rmpi_type),
+ '--with-mpi={0}'.format(spec['mpi'].prefix),
+ ]
diff --git a/var/spack/repos/builtin/packages/r-rmysql/package.py b/var/spack/repos/builtin/packages/r-rmysql/package.py
index 4946b071fa..e34677652c 100644
--- a/var/spack/repos/builtin/packages/r-rmysql/package.py
+++ b/var/spack/repos/builtin/packages/r-rmysql/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rngtools/package.py b/var/spack/repos/builtin/packages/r-rngtools/package.py
index f9edc93a2c..a9b06161d7 100644
--- a/var/spack/repos/builtin/packages/r-rngtools/package.py
+++ b/var/spack/repos/builtin/packages/r-rngtools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-robustbase/package.py b/var/spack/repos/builtin/packages/r-robustbase/package.py
new file mode 100644
index 0000000000..1361e289fb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-robustbase/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RRobustbase(RPackage):
+ """"Essential" Robust Statistics. Tools allowing to analyze data
+ with robust methods. This includes regression methodology
+ including model selections and multivariate statistics where we
+ strive to cover the book "Robust Statistics, Theory and Methods"
+ by 'Maronna, Martin and Yohai'; Wiley 2006."""
+
+ homepage = "https://robustbase.r-forge.r-project.org"
+ url = "https://cran.r-project.org/src/contrib/robustbase_0.92-7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/robustbase"
+
+ version('0.92-7', 'db3c8d12f9729b35bad17abf09e80b72')
+
+ depends_on('r-deoptimr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rocr/package.py b/var/spack/repos/builtin/packages/r-rocr/package.py
new file mode 100644
index 0000000000..9936d99dbf
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rocr/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RRocr(RPackage):
+ """ROC graphs, sensitivity/specificity curves, lift charts,
+ and precision/recall plots are popular examples of trade-off
+ visualizations for specific pairs of performance measures. ROCR
+ is a flexible tool for creating cutoff-parameterized 2D performance
+ curves by freely combining two from over 25 performance measures
+ (new performance measures can be added using a standard interface).
+ Curves from different cross-validation or bootstrapping runs can
+ be averaged by different methods, and standard deviations, standard
+ errors or box plots can be used to visualize the variability across
+ the runs. The parameterization can be visualized by printing cutoff
+ values at the corresponding curve positions, or by coloring the
+ curve according to cutoff. All components of a performance plot
+ can be quickly adjusted using a flexible parameter dispatching
+ mechanism. Despite its flexibility, ROCR is easy to use, with only
+ three commands and reasonable default values for all optional
+ parameters."""
+ homepage = "https://cran.r-project.org/package=ROCR"
+ url = "https://cran.rstudio.com/src/contrib/ROCR_1.0-7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/ROCR"
+
+ version('1.0-7', '46cbd43ae87fc4e1eff2109529a4820e')
+ depends_on('r-gplots', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rodbc/package.py b/var/spack/repos/builtin/packages/r-rodbc/package.py
index 70e477bcb1..f7364b16fc 100644
--- a/var/spack/repos/builtin/packages/r-rodbc/package.py
+++ b/var/spack/repos/builtin/packages/r-rodbc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,6 @@ class RRodbc(RPackage):
homepage = "https://cran.rstudio.com/web/packages/RODBC/"
url = "https://cran.rstudio.com/src/contrib/RODBC_1.3-13.tar.gz"
- list_url = "https://cran.rstudio.com/src/contrib/Archive/RODBC"
version('1.3-13', 'c52ef9139c2ed85adc53ad6effa7d68e')
diff --git a/var/spack/repos/builtin/packages/r-roxygen2/package.py b/var/spack/repos/builtin/packages/r-roxygen2/package.py
index 1bbfeb2e87..30e295fbad 100644
--- a/var/spack/repos/builtin/packages/r-roxygen2/package.py
+++ b/var/spack/repos/builtin/packages/r-roxygen2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rpart-plot/package.py b/var/spack/repos/builtin/packages/r-rpart-plot/package.py
new file mode 100644
index 0000000000..e7c1a09519
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rpart-plot/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RRpartPlot(RPackage):
+ """Plot 'rpart' models. Extends plot.rpart() and text.rpart() in the
+ 'rpart' package."""
+
+ homepage = "https://cran.r-project.org/package=rpart.plot"
+ url = "https://cran.r-project.org/src/contrib/rpart.plot_2.1.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rpart.plot"
+
+ version('2.1.0', 'fb0f8edfe22c464683ee82aa429136f9')
+
+ depends_on('r-rpart@4.1-0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rpart/package.py b/var/spack/repos/builtin/packages/r-rpart/package.py
new file mode 100644
index 0000000000..adfbf3fdef
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rpart/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RRpart(RPackage):
+ """Recursive partitioning for classification, regression and
+ survival trees."""
+
+ homepage = "https://cran.r-project.org/package=rpart"
+ url = "https://cran.r-project.org/src/contrib/rpart_4.1-10.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rpart"
+
+ version('4.1-11', 'f77b37cddf7e9a7b5993a52a750b8817')
+ version('4.1-10', '15873cded4feb3ef44d63580ba3ca46e')
+
+ depends_on('r@2.15.0:')
diff --git a/var/spack/repos/builtin/packages/r-rpostgresql/package.py b/var/spack/repos/builtin/packages/r-rpostgresql/package.py
index b204c53828..3c8d9f0798 100644
--- a/var/spack/repos/builtin/packages/r-rpostgresql/package.py
+++ b/var/spack/repos/builtin/packages/r-rpostgresql/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rsamtools/package.py b/var/spack/repos/builtin/packages/r-rsamtools/package.py
new file mode 100644
index 0000000000..41b08a95c7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rsamtools/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RRsamtools(RPackage):
+ """This package provides an interface to the 'samtools', 'bcftools', and
+ 'tabix' utilities (see 'LICENCE') for manipulating SAM (Sequence
+ Alignment / Map), FASTA, binary variant call (BCF) and compressed
+ indexed tab-delimited (tabix) files."""
+
+ homepage = "https://bioconductor.org/packages/Rsamtools/"
+ url = "https://git.bioconductor.org/packages/Rsamtools"
+ list_url = homepage
+
+ version('1.28.0', git='https://git.bioconductor.org/packages/Rsamtools', commit='dfa5b6abef68175586f21add7927174786412472')
+
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r-bitops', type=('build', 'run'))
+ depends_on('r-biocparallel', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.28.0')
diff --git a/var/spack/repos/builtin/packages/r-rsnns/package.py b/var/spack/repos/builtin/packages/r-rsnns/package.py
index 1a0978363a..92b891bf1a 100644
--- a/var/spack/repos/builtin/packages/r-rsnns/package.py
+++ b/var/spack/repos/builtin/packages/r-rsnns/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rsqlite/package.py b/var/spack/repos/builtin/packages/r-rsqlite/package.py
index c08fcac20c..50cd4df05d 100644
--- a/var/spack/repos/builtin/packages/r-rsqlite/package.py
+++ b/var/spack/repos/builtin/packages/r-rsqlite/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,16 @@ class RRsqlite(RPackage):
interface compliant with the DBI package. The source for the SQLite engine
(version 3.8.6) is included."""
- homepage = "https://github.com/rstats-db/RSQLite"
+ homepage = "https://cran.rstudio.com/web/packages/RSQLite/index.html"
url = "https://cran.r-project.org/src/contrib/RSQLite_1.0.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/RSQLite"
-
- version('1.0.0', 'e6cbe2709612b687c13a10d30c7bad45')
+ version('2.0', '63842410e78ccdfc52d4ee97992521d5')
depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-bit64', type=('build', 'run'))
+ depends_on('r-blob', type=('build', 'run'))
+ depends_on('r-memoise', type=('build', 'run'))
+ depends_on('r-pkgconfig', type=('build', 'run'))
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-bh', type=('build', 'run'))
+ depends_on('r-plogr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rstan/package.py b/var/spack/repos/builtin/packages/r-rstan/package.py
index e616f0a7dd..50c9dbb205 100644
--- a/var/spack/repos/builtin/packages/r-rstan/package.py
+++ b/var/spack/repos/builtin/packages/r-rstan/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rstudioapi/package.py b/var/spack/repos/builtin/packages/r-rstudioapi/package.py
index 2558a5c3f6..a9d977f62e 100644
--- a/var/spack/repos/builtin/packages/r-rstudioapi/package.py
+++ b/var/spack/repos/builtin/packages/r-rstudioapi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-rtracklayer/package.py b/var/spack/repos/builtin/packages/r-rtracklayer/package.py
new file mode 100644
index 0000000000..11f604b72f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rtracklayer/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RRtracklayer(RPackage):
+ """Extensible framework for interacting with multiple genome browsers
+ (currently UCSC built-in) and manipulating annotation tracks in various
+ formats (currently GFF, BED, bedGraph, BED15, WIG, BigWig and 2bit
+ built-in). The user may export/import tracks to/from the supported
+ browsers, as well as query and modify the browser state, such as the
+ current viewport."""
+
+ homepage = "http://bioconductor.org/packages/rtracklayer/"
+ url = "https://git.bioconductor.org/packages/rtracklayer"
+ list_url = homepage
+
+ version('1.36.6', git='https://git.bioconductor.org/packages/rtracklayer', commit='8c0ac7230f94e0c5a981acbb178c8de70e968131')
+
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r-rcurl', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-genomicalignments', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.36.6')
diff --git a/var/spack/repos/builtin/packages/r-rvest/package.py b/var/spack/repos/builtin/packages/r-rvest/package.py
new file mode 100644
index 0000000000..d35e14ace7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-rvest/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RRvest(RPackage):
+ """Wrappers around the 'xml2' and 'httr' packages to make it easy to
+ download, then manipulate, HTML and XML."""
+
+ homepage = "https://github.com/hadley/rvest"
+ url = "https://cran.r-project.org/src/contrib/rvest_0.3.2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/rvest"
+
+ version('0.3.2', '78c88740850e375fc5da50d37734d1b2')
+
+ depends_on('r-xml2', type=('build', 'run'))
+ depends_on('r-httr', type=('build', 'run'))
+ depends_on('r-selectr', type=('build', 'run'))
+ depends_on('r-magrittr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-rzmq/package.py b/var/spack/repos/builtin/packages/r-rzmq/package.py
index f385a13901..18ef9e04f2 100644
--- a/var/spack/repos/builtin/packages/r-rzmq/package.py
+++ b/var/spack/repos/builtin/packages/r-rzmq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-s4vectors/package.py b/var/spack/repos/builtin/packages/r-s4vectors/package.py
new file mode 100644
index 0000000000..84ee43cdfe
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-s4vectors/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RS4vectors(RPackage):
+ """The S4Vectors package defines the Vector and List virtual classes and
+ a set of generic functions that extend the semantic of ordinary
+ vectors and lists in R. Package developers can easily implement
+ vector-like or list-like objects as concrete subclasses of Vector or
+ List. In addition, a few low-level concrete subclasses of general
+ interest (e.g. DataFrame, Rle, and Hits) are implemented in the
+ S4Vectors package itself (many more are implemented in the IRanges
+ package and in other Bioconductor infrastructure packages)."""
+
+ homepage = "https://bioconductor.org/packages/S4Vectors/"
+ url = "https://git.bioconductor.org/packages/S4Vectors"
+ list_url = homepage
+
+ version('0.14.7', git='https://git.bioconductor.org/packages/S4Vectors', commit='40af17fe0b8e93b6a72fc787540d2961773b8e23')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@0.14.7')
diff --git a/var/spack/repos/builtin/packages/r-samr/package.py b/var/spack/repos/builtin/packages/r-samr/package.py
new file mode 100644
index 0000000000..da575143e8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-samr/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RSamr(RPackage):
+ """Significance Analysis of Microarrays."""
+
+ homepage = "https://cran.r-project.org/package=samr"
+ url = "https://cran.rstudio.com/src/contrib/samr_2.0.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/samr"
+ version('2.0', 'e8f50b8b25069d03d42c2c61c72b0da0')
+
+ depends_on('r-impute', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-sandwich/package.py b/var/spack/repos/builtin/packages/r-sandwich/package.py
index 62bd2880e5..5f7d66dd7a 100644
--- a/var/spack/repos/builtin/packages/r-sandwich/package.py
+++ b/var/spack/repos/builtin/packages/r-sandwich/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,4 +35,6 @@ class RSandwich(RPackage):
version('2.3-4', 'a621dbd8a57b6e1e036496642aadc2e5')
+ depends_on('r@2.0.0:')
+
depends_on('r-zoo', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-scales/package.py b/var/spack/repos/builtin/packages/r-scales/package.py
index e3832f78e0..ebe9798e86 100644
--- a/var/spack/repos/builtin/packages/r-scales/package.py
+++ b/var/spack/repos/builtin/packages/r-scales/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,9 +30,11 @@ class RScales(RPackage):
automatically determining breaks and labels for axes and legends."""
homepage = "https://github.com/hadley/scales"
- url = "https://cran.r-project.org/src/contrib/scales_0.4.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/scales_0.5.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/scales"
+ version('0.5.0', '435f6bd826c5cf8df703ffb8a6750fd1')
+ version('0.4.1', '3fb2218866a7fe4c1f6e66790876f85a')
version('0.4.0', '7b5602d9c55595901192248bca25c099')
depends_on('r-rcolorbrewer', type=('build', 'run'))
@@ -41,3 +43,5 @@ class RScales(RPackage):
depends_on('r-munsell', type=('build', 'run'))
depends_on('r-labeling', type=('build', 'run'))
depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-r6', type=('build', 'run'))
+ depends_on('r-viridislite', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-scatterplot3d/package.py b/var/spack/repos/builtin/packages/r-scatterplot3d/package.py
new file mode 100644
index 0000000000..eedd61cc6e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-scatterplot3d/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RScatterplot3d(RPackage):
+ """scatterplot3d: 3D Scatter Plot"""
+
+ homepage = "https://CRAN.R-project.org/package=scatterplot3d"
+ url = "https://cran.r-project.org/src/contrib/scatterplot3d_0.3-40.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/scatterplot3d"
+
+ version('0.3-40', '67b9ab6131d244d7fc1db39dcc911dfe')
+
+ depends_on('r@2.7.0:')
diff --git a/var/spack/repos/builtin/packages/r-segmented/package.py b/var/spack/repos/builtin/packages/r-segmented/package.py
new file mode 100644
index 0000000000..784a9d55d5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-segmented/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RSegmented(RPackage):
+ """Given a regression model, segmented 'updates' the model by adding
+ one or more segmented (i.e., piecewise-linear) relationships. Several
+ variables with multiple breakpoints are allowed."""
+
+ homepage = "https://CRAN.R-project.org/package=segmented"
+ url = "https://cran.r-project.org/src/contrib/segmented_0.5-1.4.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/segmented"
+
+ version('0.5-2.2', '1511ec365aea289d5f0a574f6d10d2d6')
+ version('0.5-1.4', 'f9d76ea9e22ef5f40aa126b697351cae')
diff --git a/var/spack/repos/builtin/packages/r-selectr/package.py b/var/spack/repos/builtin/packages/r-selectr/package.py
new file mode 100644
index 0000000000..321a7da099
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-selectr/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RSelectr(RPackage):
+ """Translates a CSS3 selector into an equivalent XPath expression. This
+ allows us to use CSS selectors when working with the XML package as it
+ can only evaluate XPath expressions. Also provided are convenience
+ functions useful for using CSS selectors on XML nodes. This package
+ is a port of the Python package 'cssselect'
+ (<https://pythonhosted.org/cssselect/>)."""
+
+ homepage = "https://sjp.co.nz/projects/selectr"
+ url = "https://cran.r-project.org/src/contrib/selectr_0.3-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/selectr"
+
+ version('0.3-1', '7190fcdea1823ad7ef429cab6938e960')
+
+ depends_on('r-testthat', type=('build', 'run'))
+ depends_on('r-stringr', type=('build', 'run'))
+ depends_on('r-xml', type=('build', 'run'))
+ depends_on('r-xml2', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-seqinr/package.py b/var/spack/repos/builtin/packages/r-seqinr/package.py
new file mode 100644
index 0000000000..a78e36ef74
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-seqinr/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RSeqinr(RPackage):
+ """Exploratory data analysis and data visualization for biological
+ sequence (DNA and protein) data. Includes also utilities for sequence
+ data management under the ACNUC system."""
+
+ homepage = "http://seqinr.r-forge.r-project.org"
+ url = "https://cran.r-project.org/src/contrib/seqinr_3.3-6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/seginr"
+
+ version('3.4-5', 'd550525dcea754bbd5b83cb46b4124cc')
+ version('3.3-6', '73023d627e72021b723245665e1ad055')
+
+ depends_on('r@2.10:')
+ depends_on('r-ade4', type=('build', 'run'))
+ depends_on('r-segmented', type=('build', 'run'))
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/r-sfsmisc/package.py b/var/spack/repos/builtin/packages/r-sfsmisc/package.py
new file mode 100644
index 0000000000..d07abd3b44
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-sfsmisc/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RSfsmisc(RPackage):
+ """Useful utilities ['goodies'] from Seminar fuer Statistik
+ ETH Zurich, quite a few related to graphics;
+ some were ported from S-plus."""
+
+ homepage = "https://cran.r-project.org/web/packages/sfsmisc/index.html"
+ url = "https://cran.r-project.org/src/contrib/sfsmisc_1.1-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/sfsmisc"
+ version('1.1-0', '1ba4303076e2bbf018f7eecc7d04e178')
diff --git a/var/spack/repos/builtin/packages/r-shape/package.py b/var/spack/repos/builtin/packages/r-shape/package.py
new file mode 100644
index 0000000000..8f07f842e0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-shape/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RShape(RPackage):
+ """Functions for plotting graphical shapes such as ellipses, circles,
+ cylinders, arrows, ..."""
+
+ homepage = "https://cran.r-project.org/package=shape"
+ url = "https://cran.r-project.org/src/contrib/shape_1.4.3.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/shape"
+
+ version('1.4.3', '2a807bf95e7decc71478f805221852da')
+ version('1.4.2', '75557c43a385b9cc0c4dff361af6e06c')
diff --git a/var/spack/repos/builtin/packages/r-shiny/package.py b/var/spack/repos/builtin/packages/r-shiny/package.py
index b1d21c7e7c..c75e22ea31 100644
--- a/var/spack/repos/builtin/packages/r-shiny/package.py
+++ b/var/spack/repos/builtin/packages/r-shiny/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,9 +32,10 @@ class RShiny(RPackage):
powerful applications with minimal effort."""
homepage = "http://shiny.rstudio.com/"
- url = "https://cran.r-project.org/src/contrib/shiny_0.13.2.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/shiny"
+ url = "https://cran.rstudio.com/src/contrib/shiny_1.0.5.tar.gz"
+ list_url = homepage
+ version('1.0.5', '419dd5d3ea0bd87a07f8f0b1ef14fc13')
version('0.13.2', 'cb5bff7a28ad59ec2883cd0912ca9611')
depends_on('r-httpuv', type=('build', 'run'))
@@ -44,3 +45,4 @@ class RShiny(RPackage):
depends_on('r-digest', type=('build', 'run'))
depends_on('r-htmltools', type=('build', 'run'))
depends_on('r-r6', type=('build', 'run'))
+ depends_on('r-sourcetools', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-siggenes/package.py b/var/spack/repos/builtin/packages/r-siggenes/package.py
new file mode 100644
index 0000000000..ec0809c9da
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-siggenes/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RSiggenes(RPackage):
+ """Identification of differentially expressed genes and estimation of the
+ False Discovery Rate (FDR) using both the Significance Analysis of
+ Microarrays (SAM) and the Empirical Bayes Analyses of Microarrays
+ (EBAM)."""
+
+ homepage = "http://bioconductor.org/packages/siggenes/"
+ url = "https://git.bioconductor.org/packages/siggenes"
+ list_url = homepage
+
+ version('1.50.0', git='https://git.bioconductor.org/packages/siggenes', commit='b1818f26e1449005ffd971df6bda8da0303080bc')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-multtest', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.50.0')
diff --git a/var/spack/repos/builtin/packages/r-simpleaffy/package.py b/var/spack/repos/builtin/packages/r-simpleaffy/package.py
new file mode 100644
index 0000000000..36d616fa8c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-simpleaffy/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 RSimpleaffy(RPackage):
+ """Provides high level functions for reading Affy .CEL files,
+ phenotypic data, and then computing simple things with it, such as
+ t-tests, fold changes and the like. Makes heavy use of the affy
+ library. Also has some basic scatter plot functions and mechanisms
+ for generating high resolution journal figures..."""
+
+ homepage = "http://bioconductor.org/packages/simpleaffy/"
+ url = "https://git.bioconductor.org/packages/simpleaffy"
+ list_url = homepage
+
+ version('2.52.0', git='https://git.bioconductor.org/packages/simpleaffy', commit='f2b43fb9b8e6fa4c03fe28b4efb3144a0a42a385')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-gcrma', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.52.0')
diff --git a/var/spack/repos/builtin/packages/r-snow/package.py b/var/spack/repos/builtin/packages/r-snow/package.py
new file mode 100644
index 0000000000..7be7d36018
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-snow/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RSnow(RPackage):
+ """Support for simple parallel computing in R."""
+
+ homepage = "https://cran.r-project.org/web/packages/snow/index.html"
+ url = "https://cran.r-project.org/src/contrib/snow_0.4-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/snow"
+
+ version('0.4-2', 'afc7b0dfd4518aedb6fc81712fd2ac70')
+
+ depends_on('r-rmpi', type='run')
+ depends_on('r@2.13.1:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-somaticsignatures/package.py b/var/spack/repos/builtin/packages/r-somaticsignatures/package.py
new file mode 100644
index 0000000000..004023fd25
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-somaticsignatures/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RSomaticsignatures(RPackage):
+ """The SomaticSignatures package identifies mutational signatures of
+ single nucleotide variants (SNVs). It provides a infrastructure related
+ to the methodology described in Nik-Zainal (2012, Cell), with
+ flexibility in the matrix decomposition algorithms."""
+
+ homepage = "https://bioconductor.org/packages/SomaticSignatures/"
+ url = "https://git.bioconductor.org/packages/SomaticSignatures"
+ list_url = homepage
+
+ version('2.12.1', git='https://git.bioconductor.org/packages/SomaticSignatures', commit='932298c6877d076004de5541cec85a14e819517a')
+
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-nmf', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-ggbio', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-pcamethods', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-proxy', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.12.1')
diff --git a/var/spack/repos/builtin/packages/r-sourcetools/package.py b/var/spack/repos/builtin/packages/r-sourcetools/package.py
new file mode 100644
index 0000000000..87f9dfc2c9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-sourcetools/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RSourcetools(RPackage):
+ """Tools for Reading, Tokenizing and Parsing R Code."""
+
+ homepage = "https://cran.r-project.org/package=sourcetools"
+ url = "https://cran.r-project.org/src/contrib/sourcetools_0.1.6.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/sourcetools"
+
+ version('0.1.6', 'c78a816384b168d04af41bd7ff4d909d')
+ version('0.1.5', 'b4d7902ffafd9802e8fbff5ce824bb28')
+
+ depends_on('r-testthat', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-sp/package.py b/var/spack/repos/builtin/packages/r-sp/package.py
index 2917f0b6b6..c085aa1521 100644
--- a/var/spack/repos/builtin/packages/r-sp/package.py
+++ b/var/spack/repos/builtin/packages/r-sp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-sparsem/package.py b/var/spack/repos/builtin/packages/r-sparsem/package.py
index 370497e395..3aac221fd1 100644
--- a/var/spack/repos/builtin/packages/r-sparsem/package.py
+++ b/var/spack/repos/builtin/packages/r-sparsem/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,8 @@ class RSparsem(RPackage):
subsetting and Kronecker products."""
homepage = "http://www.econ.uiuc.edu/~roger/research/sparse/sparse.html"
- url = "https://cran.r-project.org/src/contrib/SparseM_1.7.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/SparseM_1.74.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/SparseM"
- version('1.7', '7b5b0ab166a0929ef6dcfe1d97643601')
+ version('1.74', 'a16c9b7db172dfd2b7b6508c48e81a5d')
+ version('1.7', '7b5b0ab166a0929ef6dcfe1d97643601')
diff --git a/var/spack/repos/builtin/packages/r-spdep/package.py b/var/spack/repos/builtin/packages/r-spdep/package.py
new file mode 100644
index 0000000000..f7b7a4671e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-spdep/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 RSpdep(RPackage):
+ """A collection of functions to create spatial weights matrix objects from
+ polygon contiguities, from point patterns by distance and tessellations,
+ for summarizing these objects, and for permitting their use in spatial
+ data analysis, including regional aggregation by minimum spanning tree;
+ a collection of tests for spatial autocorrelation, including global
+ Moran's I, APLE, Geary's C, Hubert/Mantel general cross product statistic,
+ Empirical Bayes estimates and AssunasReis Index, Getis/Ord G and
+ multicoloured join count statistics, local Moran's I and Getis/Ord G,
+ saddlepoint approximations and exact tests for global and local Moran's I;
+ and functions for estimating spatial simultaneous autoregressive (SAR) lag
+ and error models, impact measures for lag models, weighted and unweighted
+ SAR and CAR spatial regression models, semi-parametric and Moran
+ eigenvector spatial filtering, GM SAR error models, and generalized spatial
+ two stage least squares models."""
+
+ homepage = "https://r-forge.r-project.org/projects/spdep"
+ url = "https://cran.r-project.org/src/contrib/spdep_0.6-13.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/spdep"
+
+ version('0.6-13', 'bfc68b3016b4894b152ecec4b86f85d1')
+
+ depends_on('r@3.0:')
+ depends_on('r-sp@1.0:', type=('build', 'run'))
+ depends_on('r-learnbayes', type=('build', 'run'))
+ depends_on('r-deldir', type=('build', 'run'))
+ depends_on('r-coda', type=('build', 'run'))
+ depends_on('r-gmodels', type=('build', 'run'))
+ depends_on('r-expm', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-speedglm/package.py b/var/spack/repos/builtin/packages/r-speedglm/package.py
new file mode 100644
index 0000000000..f520965da5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-speedglm/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RSpeedglm(RPackage):
+ """Fitting linear models and generalized linear models to
+ large data sets by updating algorithms."""
+
+ homepage = "https://cran.r-project.org/package=speedglm"
+ url = "https://cran.rstudio.com/src/contrib/speedglm_0.3-2.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/speedglm"
+
+ version('0.3-2', 'c4874d4c2a677d657a335186ebb63131')
+
+ depends_on('r-mass', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-sqldf/package.py b/var/spack/repos/builtin/packages/r-sqldf/package.py
new file mode 100644
index 0000000000..c891891221
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-sqldf/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 RSqldf(RPackage):
+ """The sqldf() function is typically passed a single argument
+ which is an SQL select statement where the table names are
+ ordinary R data frame names. sqldf() transparently sets up a
+ database, imports the data frames into that database, performs the
+ SQL select or other statement and returns the result using a
+ heuristic to determine which class to assign to each column of the
+ returned data frame. The sqldf() or read.csv.sql() functions can
+ also be used to read filtered files into R even if the original
+ files are larger than R itself can handle. 'RSQLite', 'RH2',
+ 'RMySQL' and 'RPostgreSQL' backends are supported."""
+
+ homepage = "https://cran.r-project.org/package=sqldf"
+ url = "https://cran.r-project.org/src/contrib/sqldf_0.4-11.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/sqldf"
+
+ version('0.4-11', '85def6fe2418569370c24e53522d2c2d')
+
+ depends_on('r-gsubfn', type=('build', 'run'))
+ depends_on('r-proto', type=('build', 'run'))
+ depends_on('r-rsqlite', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-chron', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-stanheaders/package.py b/var/spack/repos/builtin/packages/r-stanheaders/package.py
index 322356e347..383eb82580 100644
--- a/var/spack/repos/builtin/packages/r-stanheaders/package.py
+++ b/var/spack/repos/builtin/packages/r-stanheaders/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-statmod/package.py b/var/spack/repos/builtin/packages/r-statmod/package.py
new file mode 100644
index 0000000000..7eb095aa92
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-statmod/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RStatmod(RPackage):
+ """A collection of algorithms and functions to aid statistical
+ modeling. Includes growth curve comparisons, limiting dilution
+ analysis (aka ELDA), mixed linear models, heteroscedastic
+ regression, inverse-Gaussian probability calculations, Gauss
+ quadrature and a secure convergence algorithm for nonlinear
+ models. Includes advanced generalized linear model functions
+ that implement secure convergence, dispersion modeling and
+ Tweedie power-law families."""
+
+ homepage = "https://cran.r-project.org/package=statmod"
+ url = "https://cran.rstudio.com/src/contrib/statmod_1.4.30.tar.gz"
+ list_url = "https://cran.rstudio.com/src/contrib/Archive/statmod"
+
+ version('1.4.30', '34e60132ce3df38208f9dc0db0479151')
diff --git a/var/spack/repos/builtin/packages/r-statnet-common/package.py b/var/spack/repos/builtin/packages/r-statnet-common/package.py
new file mode 100644
index 0000000000..2c61f23f2e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-statnet-common/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RStatnetCommon(RPackage):
+ """Non-statistical utilities used by the software developed by the
+ Statnet Project. They may also be of use to others."""
+
+ homepage = "http://www.statnet.org"
+ url = "https://cran.r-project.org/src/contrib/statnet.common_3.3.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/statnet.common"
+
+ version('3.3.0', '36bc11098dcd3652a4beb05c156ad6c8')
diff --git a/var/spack/repos/builtin/packages/r-stringi/package.py b/var/spack/repos/builtin/packages/r-stringi/package.py
index d89238f3d7..55dd10e378 100644
--- a/var/spack/repos/builtin/packages/r-stringi/package.py
+++ b/var/spack/repos/builtin/packages/r-stringi/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,9 +37,12 @@ class RStringi(RPackage):
etc."""
homepage = "http://www.gagolewski.com/software/stringi/"
- url = "https://cran.r-project.org/src/contrib/stringi_1.1.1.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/stringi_1.1.2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/stringi"
+ version('1.1.5', '0d5ec30ae368ab1b87a36fee3e228e7b')
+ version('1.1.3', '3b89cee3b5ef7c031077cd7707718e07')
+ version('1.1.2', '0ec2faa62643e1900734c0eaf5096648')
version('1.1.1', '32b919ee3fa8474530c4942962a6d8d9')
depends_on('icu4c')
diff --git a/var/spack/repos/builtin/packages/r-stringr/package.py b/var/spack/repos/builtin/packages/r-stringr/package.py
index de8d83b500..64b291adc5 100644
--- a/var/spack/repos/builtin/packages/r-stringr/package.py
+++ b/var/spack/repos/builtin/packages/r-stringr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,9 +33,11 @@ class RStringr(RPackage):
into the input of another."""
homepage = "https://cran.r-project.org/web/packages/stringr/index.html"
- url = "https://cran.r-project.org/src/contrib/stringr_1.0.0.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/stringr_1.1.0.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/stringr"
+ version('1.2.0', '9054b1de91c578cc5cf454d656e9c697')
+ version('1.1.0', '47973a33944c6d5db9524b1e835b8a5d')
version('1.0.0', '5ca977c90351f78b1b888b379114a7b4')
depends_on('r-stringi', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-strucchange/package.py b/var/spack/repos/builtin/packages/r-strucchange/package.py
new file mode 100644
index 0000000000..4f0a2bf28a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-strucchange/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RStrucchange(RPackage):
+ """Testing, monitoring and dating structural changes in (linear)
+ regression models."""
+
+ homepage = "https://cran.r-project.org/package=strucchange"
+ url = "https://cran.r-project.org/src/contrib/strucchange_1.5-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/strucchange"
+
+ version('1.5-1', 'fc751fc011df9c8df82d577298cb8395')
+
+ depends_on('r@2.10.0:')
+
+ depends_on('r-zoo', type=('build', 'run'))
+ depends_on('r-sandwich', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-subplex/package.py b/var/spack/repos/builtin/packages/r-subplex/package.py
new file mode 100644
index 0000000000..66df912a5f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-subplex/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 RSubplex(RPackage):
+ """Unconstrained Optimization using the Subplex Algorithm"""
+
+ homepage = "https://cran.r-project.org/package=subplex"
+ url = "https://cran.r-project.org/src/contrib/subplex_1.4-1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/subplex"
+
+ version('1.4-1', '2ed963dbbb1dbef47ebec7003f39a117')
diff --git a/var/spack/repos/builtin/packages/r-summarizedexperiment/package.py b/var/spack/repos/builtin/packages/r-summarizedexperiment/package.py
new file mode 100644
index 0000000000..104a61cb8c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-summarizedexperiment/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 RSummarizedexperiment(RPackage):
+ """The SummarizedExperiment container contains one or more assays, each
+ represented by a matrix-like object of numeric or other mode. The rows
+ typically represent genomic ranges of interest and the columns
+ represent samples."""
+
+ homepage = "https://bioconductor.org/packages/SummarizedExperiment/"
+ url = "https://git.bioconductor.org/packages/SummarizedExperiment"
+ list_url = homepage
+
+ version('1.6.5', git='https://git.bioconductor.org/packages/SummarizedExperiment', commit='ec69cd5cfbccaef148a9f6abdfb3e22e888695d0')
+
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-delayedarray', type=('build', 'run'))
+ depends_on('r-matrix', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.6.5')
diff --git a/var/spack/repos/builtin/packages/r-survey/package.py b/var/spack/repos/builtin/packages/r-survey/package.py
index 249cad8178..62d21bb00b 100644
--- a/var/spack/repos/builtin/packages/r-survey/package.py
+++ b/var/spack/repos/builtin/packages/r-survey/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-survival/package.py b/var/spack/repos/builtin/packages/r-survival/package.py
index 1df00f0c93..c63c2eb864 100644
--- a/var/spack/repos/builtin/packages/r-survival/package.py
+++ b/var/spack/repos/builtin/packages/r-survival/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,9 +31,11 @@ class RSurvival(RPackage):
models, and parametric accelerated failure time models."""
homepage = "https://cran.r-project.org/package=survival"
- url = "https://cran.r-project.org/src/contrib/survival_2.39-5.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/survival_2.41-3.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/survival"
+ version('2.41-3', '6edb8093d1177775685dc26f3ce78d73')
+ version('2.40-1', 'a2474b656cd723791268e3114481b8a7')
version('2.39-5', 'a3cc6b5762e8c5c0bb9e64a276710be2')
depends_on('r-matrix', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-tarifx/package.py b/var/spack/repos/builtin/packages/r-tarifx/package.py
index 1fb2d35b1d..b58eb5194e 100644
--- a/var/spack/repos/builtin/packages/r-tarifx/package.py
+++ b/var/spack/repos/builtin/packages/r-tarifx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-tensora/package.py b/var/spack/repos/builtin/packages/r-tensora/package.py
new file mode 100644
index 0000000000..c19e3604fc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-tensora/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RTensora(RPackage):
+ """The package provides convenience functions for advance linear algebra
+ with tensors and computation with datasets of tensors on a higher level
+ abstraction."""
+
+ homepage = "https://cran.r-project.org/web/packages/tensorA/index.html"
+ url = "https://cran.r-project.org/src/contrib/tensorA_0.36.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/tensorA"
+
+ version('0.36', '01c0613491d9b46600bf403d7e3bdd80')
diff --git a/var/spack/repos/builtin/packages/r-testit/package.py b/var/spack/repos/builtin/packages/r-testit/package.py
index 4d99c388e6..7a5fb607e8 100644
--- a/var/spack/repos/builtin/packages/r-testit/package.py
+++ b/var/spack/repos/builtin/packages/r-testit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,8 +30,9 @@ class RTestit(RPackage):
"""Provides two convenience functions assert() and test_pkg() to facilitate
testing R packages."""
- homepage = "https://github.com/yihui/testit"
+ homepage = "https://cran.r-project.org/package=testit"
url = "https://cran.r-project.org/src/contrib/testit_0.5.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/testit"
+ version('0.7', 'cfc5f5c66aa644fbf53efc4b29d18e8c')
version('0.5', 'f206d3cbdc5174e353d2d05ba6a12e59')
diff --git a/var/spack/repos/builtin/packages/r-testthat/package.py b/var/spack/repos/builtin/packages/r-testthat/package.py
index 62409912f7..045f447df1 100644
--- a/var/spack/repos/builtin/packages/r-testthat/package.py
+++ b/var/spack/repos/builtin/packages/r-testthat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-thdata/package.py b/var/spack/repos/builtin/packages/r-th-data/package.py
index cf2b01e6e8..e5713ee9fc 100644
--- a/var/spack/repos/builtin/packages/r-thdata/package.py
+++ b/var/spack/repos/builtin/packages/r-th-data/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,13 +25,14 @@
from spack import *
-class RThdata(RPackage):
+class RThData(RPackage):
"""Contains data sets used in other packages Torsten Hothorn maintains."""
homepage = "https://cran.r-project.org/package=TH.data"
- url = "https://cran.r-project.org/src/contrib/TH.data_1.0-7.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/TH.data_1.0-8.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/TH.data"
+ version('1.0-8', '2cc20acc8b470dff1202749b4bea55c4')
version('1.0-7', '3e8b6b1a4699544f175215aed7039a94')
depends_on('r-survival', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-threejs/package.py b/var/spack/repos/builtin/packages/r-threejs/package.py
index 50b484dc25..f39ede0fb7 100644
--- a/var/spack/repos/builtin/packages/r-threejs/package.py
+++ b/var/spack/repos/builtin/packages/r-threejs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,6 @@ class RThreejs(RPackage):
homepage = "http://bwlewis.github.io/rthreejs"
url = "https://cran.r-project.org/src/contrib/threejs_0.2.2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/threejs"
-
version('0.2.2', '35c179b10813c5e4bd3e7827fae6627b')
depends_on('r-htmlwidgets', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-tibble/package.py b/var/spack/repos/builtin/packages/r-tibble/package.py
index 39dfc3893b..67751d6381 100644
--- a/var/spack/repos/builtin/packages/r-tibble/package.py
+++ b/var/spack/repos/builtin/packages/r-tibble/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,12 +29,16 @@ class RTibble(RPackage):
"""Provides a 'tbl_df' class that offers better checking and printing
capabilities than traditional data frames."""
- homepage = "https://github.com/hadley/tibble"
- url = "https://cran.r-project.org/src/contrib/tibble_1.1.tar.gz"
- list_url = "https://cran.r-project.org/src/contrib/Archive/tibble"
-
+ homepage = "https://github.com/tidyverse/tibble"
+ url = "https://cran.rstudio.com/src/contrib/tibble_1.3.4.tar.gz"
+ list_url = homepage
+ version('1.3.4', '298e81546f999fb0968625698511b8d3')
+ version('1.2', 'bdbc3d67aa16860741add6d6ec20ea13')
version('1.1', '2fe9f806109d0b7fadafb1ffafea4cb8')
+ depends_on('r@3.1.2:')
+
depends_on('r-assertthat', type=('build', 'run'))
- depends_on('r-lazyeval', type=('build', 'run'))
+ depends_on('r-lazyeval@0.1.10:', type=('build', 'run'), when='@:1.3.0')
depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-rlang', type=('build', 'run'), when='@1.3.1:')
diff --git a/var/spack/repos/builtin/packages/r-tidyr/package.py b/var/spack/repos/builtin/packages/r-tidyr/package.py
index 1285e5e9ae..0e6973fd13 100644
--- a/var/spack/repos/builtin/packages/r-tidyr/package.py
+++ b/var/spack/repos/builtin/packages/r-tidyr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-tiff/package.py b/var/spack/repos/builtin/packages/r-tiff/package.py
new file mode 100644
index 0000000000..c751cb04e2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-tiff/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RTiff(RPackage):
+ """This package provides an easy and simple way to read, write and
+ display bitmap images stored in the TIFF format. It can read and
+ write both files and in-memory raw vectors."""
+
+ homepage = "http://www.rforge.net/tiff/"
+ url = "https://cran.rstudio.com/src/contrib/tiff_0.1-5.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/tiff"
+
+ version('0.1-5', '5052990b8647c77d3e27bc0ecf064e0b')
+
+ depends_on("libjpeg")
+ depends_on("libtiff")
diff --git a/var/spack/repos/builtin/packages/r-timedate/package.py b/var/spack/repos/builtin/packages/r-timedate/package.py
new file mode 100644
index 0000000000..d593b6c2bc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-timedate/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RTimedate(RPackage):
+ """Environment for teaching "Financial Engineering and Computational
+ Finance". Managing chronological and calendar objects."""
+
+ homepage = "https://cran.r-project.org/package=timeDate"
+ url = "https://cran.r-project.org/src/contrib/timeDate_3012.100.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/timeDate"
+
+ version('3012.100', '9f69d3724efbf0e125e6b8e6d3475fe4')
diff --git a/var/spack/repos/builtin/packages/r-trimcluster/package.py b/var/spack/repos/builtin/packages/r-trimcluster/package.py
new file mode 100644
index 0000000000..c7f6cdb179
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-trimcluster/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RTrimcluster(RPackage):
+ """trimcluster: Cluster analysis with trimming"""
+
+ homepage = "http://www.homepages.ucl.ac.uk/~ucakche"
+ url = "https://cran.r-project.org/src/contrib/trimcluster_0.1-2.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/trimcluster"
+
+ version('0.1-2', '7617920e224bd18f5b87db38a3116ec2')
+
+ depends_on('r@1.9.0:')
diff --git a/var/spack/repos/builtin/packages/r-trust/package.py b/var/spack/repos/builtin/packages/r-trust/package.py
new file mode 100644
index 0000000000..e83d8ad2b3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-trust/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 RTrust(RPackage):
+ """Does local optimization using two derivatives and trust regions.
+ Guaranteed to converge to local minimum of objective function."""
+
+ homepage = "http://www.stat.umn.edu/geyer/trust"
+ url = "https://cran.r-project.org/src/contrib/trust_0.1-7.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/trust"
+
+ version('0.1-7', '7e218b3a6b33bd77bd7e86dc6360418d')
diff --git a/var/spack/repos/builtin/packages/r-tseries/package.py b/var/spack/repos/builtin/packages/r-tseries/package.py
new file mode 100644
index 0000000000..e581a77596
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-tseries/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RTseries(RPackage):
+ """Time series analysis and computational finance."""
+
+ homepage = "https://cran.r-project.org/package=tseries"
+ url = "https://cran.r-project.org/src/contrib/tseries_0.10-42.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/tseries"
+
+ version('0.10-42', '3feaa5c463bc967d749323163d9bc836')
+
+ depends_on('r-quadprog', type=('build', 'run'))
+ depends_on('r-zoo', type=('build', 'run'))
+ depends_on('r-quantmod', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-ttr/package.py b/var/spack/repos/builtin/packages/r-ttr/package.py
index 79429f5286..abaac57c6f 100644
--- a/var/spack/repos/builtin/packages/r-ttr/package.py
+++ b/var/spack/repos/builtin/packages/r-ttr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-utils/package.py b/var/spack/repos/builtin/packages/r-utils/package.py
new file mode 100644
index 0000000000..bb39da3e60
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-utils/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RUtils(RPackage):
+ """Utility functions useful when programming and
+ developing R packages."""
+
+ homepage = "https://github.com/HenrikBengtsson/R.utils"
+ url = "https://cran.rstudio.com/src/contrib/R.utils_2.5.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/R.utils"
+
+ version('2.5.0', 'a728ef3ceb35cafc4c39ea577cecc38b')
+
+ depends_on('r-oo', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-uuid/package.py b/var/spack/repos/builtin/packages/r-uuid/package.py
index b9dcc12629..ff0c13cf10 100644
--- a/var/spack/repos/builtin/packages/r-uuid/package.py
+++ b/var/spack/repos/builtin/packages/r-uuid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,6 +32,5 @@ class RUuid(RPackage):
homepage = "http://www.rforge.net/uuid"
url = "https://cran.rstudio.com/src/contrib/uuid_0.1-2.tar.gz"
- list_url = "https://cran.rstudio.com/src/contrib/Archive/uuid"
version('0.1-2', 'f97d000c0b16bca455fb5bf2cd668ddf')
diff --git a/var/spack/repos/builtin/packages/r-variantannotation/package.py b/var/spack/repos/builtin/packages/r-variantannotation/package.py
new file mode 100644
index 0000000000..1b8e3da4d5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-variantannotation/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 RVariantannotation(RPackage):
+ """Annotate variants, compute amino acid coding changes, predict coding
+ outcomes."""
+
+ homepage = "https://www.bioconductor.org/packages/VariantAnnotation/"
+ url = "https://git.bioconductor.org/packages/VariantAnnotation"
+ list_url = homepage
+
+ version('1.22.3', git='https://git.bioconductor.org/packages/VariantAnnotation', commit='3a91b6d4297aa416d5f056dec6f8925eb1a8eaee')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-summarizedexperiment', type=('build', 'run'))
+ depends_on('r-rsamtools', type=('build', 'run'))
+ depends_on('r-dbi', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-xvector', type=('build', 'run'))
+ depends_on('r-biostrings', type=('build', 'run'))
+ depends_on('r-annotationdbi', type=('build', 'run'))
+ depends_on('r-bsgenome', type=('build', 'run'))
+ depends_on('r-rtracklayer', type=('build', 'run'))
+ depends_on('r-genomicfeatures', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.22.3')
diff --git a/var/spack/repos/builtin/packages/r-varselrf/package.py b/var/spack/repos/builtin/packages/r-varselrf/package.py
new file mode 100644
index 0000000000..7cfb3392cd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-varselrf/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 RVarselrf(RPackage):
+ """Variable selection from random forests using both backwards variable
+ elimination (for the selection of small sets of non-redundant variables)
+ and selection based on the importance spectrum (somewhat similar to scree
+ plots; for the selection of large, potentially highly-correlated variables)
+ . Main applications in high-dimensional data (e.g., microarray data,
+ and other genomics and proteomics applications)."""
+
+ homepage = "http://ligarto.org/rdiaz/Software/Software.html"
+ url = "https://cran.rstudio.com/src/contrib/varSelRF_0.7-8.tar.gz"
+
+ version('0.7-8', '103c460d0734bd38ae13496c839d3435')
+
+ depends_on('r-randomforest', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-vcd/package.py b/var/spack/repos/builtin/packages/r-vcd/package.py
index 56a2ebdfa7..c0ca50a605 100644
--- a/var/spack/repos/builtin/packages/r-vcd/package.py
+++ b/var/spack/repos/builtin/packages/r-vcd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-vegan/package.py b/var/spack/repos/builtin/packages/r-vegan/package.py
new file mode 100644
index 0000000000..51591ec41d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-vegan/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 RVegan(RPackage):
+ """Ordination methods, diversity analysis and other functions for
+ community and vegetation ecologists."""
+
+ homepage = "https://github.com/vegandevs/vegan"
+ url = "https://cran.r-project.org/src/contrib/vegan_2.4-3.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/vegan"
+
+ version('2.4-3', 'db17d4c4b9a4d421246abd5b36b00fec')
+
+ depends_on('r@3.0:')
+ depends_on('r-permute@0.9-0:', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-viridis/package.py b/var/spack/repos/builtin/packages/r-viridis/package.py
new file mode 100644
index 0000000000..627ba4ac39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-viridis/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RViridis(RPackage):
+ """viridis: Default Color Maps from 'matplotlib'"""
+
+ homepage = "https://github.com/sjmgarnier/viridis"
+ url = "https://cran.r-project.org/src/contrib/viridis_0.4.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/viridis"
+
+ version('0.4.0', 'f874384cbedf459f6c309ddb40b354ea')
+
+ depends_on('r@2.1.0:')
+ depends_on('r-viridislite@0.2.0:', type=('build', 'run'))
+ depends_on('r-ggplot2@1.0.1:', type=('build', 'run'))
+ depends_on('r-gridextra', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-viridislite/package.py b/var/spack/repos/builtin/packages/r-viridislite/package.py
new file mode 100644
index 0000000000..bfdd6c3bc5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-viridislite/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 RViridislite(RPackage):
+ """viridisLite: Default Color Maps from 'matplotlib' (Lite Version)"""
+
+ homepage = "https://github.com/sjmgarnier/viridisLite"
+ url = "https://cran.r-project.org/src/contrib/viridisLite_0.2.0.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/viridisLite"
+
+ version('0.2.0', '04a04415cf651a2b5f964b261896c0fb')
+
+ depends_on('r@2.1.0:')
diff --git a/var/spack/repos/builtin/packages/r-visnetwork/package.py b/var/spack/repos/builtin/packages/r-visnetwork/package.py
index ea0b972bf1..5cbc427c17 100644
--- a/var/spack/repos/builtin/packages/r-visnetwork/package.py
+++ b/var/spack/repos/builtin/packages/r-visnetwork/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-vsn/package.py b/var/spack/repos/builtin/packages/r-vsn/package.py
new file mode 100644
index 0000000000..649f42ea5d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-vsn/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RVsn(RPackage):
+ """The package implements a method for normalising microarray intensities,
+ and works for single- and multiple-color arrays. It can also be used
+ for data from other technologies, as long as they have similar format.
+ The method uses a robust variant of the maximum-likelihood estimator
+ for an additive-multiplicative error model and affine calibration. The
+ model incorporates data calibration step (a.k.a. normalization), a
+ model for the dependence of the variance on the mean intensity and a
+ variance stabilizing data transformation. Differences between
+ transformed intensities are analogous to "normalized log-ratios".
+ However, in contrast to the latter, their variance is independent of
+ the mean, and they are usually more sensitive and specific in detecting
+ differential transcription."""
+
+ homepage = "https://www.bioconductor.org/packages/vsn/"
+ url = "https://git.bioconductor.org/packages/vsn"
+
+ version('3.44.0', git='https://git.bioconductor.org/packages/vsn', commit='e54513fcdd07ccfb8094359e93cef145450f0ee0')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-affy', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-lattice', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-hexbin', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@3.44.0')
diff --git a/var/spack/repos/builtin/packages/r-whisker/package.py b/var/spack/repos/builtin/packages/r-whisker/package.py
index 17f904f5c3..d22b1a5209 100644
--- a/var/spack/repos/builtin/packages/r-whisker/package.py
+++ b/var/spack/repos/builtin/packages/r-whisker/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-withr/package.py b/var/spack/repos/builtin/packages/r-withr/package.py
index 785050ed87..67afc532ae 100644
--- a/var/spack/repos/builtin/packages/r-withr/package.py
+++ b/var/spack/repos/builtin/packages/r-withr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,7 +32,10 @@ class RWithr(RPackage):
dependencies to provide access to these functions."""
homepage = "http://github.com/jimhester/withr"
- url = "https://cran.r-project.org/src/contrib/withr_1.0.1.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/withr_1.0.2.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/withr"
+ version('1.0.2', 'ca52b729af9bbaa14fc8b7bafe38663c')
version('1.0.1', 'ac38af2c6f74027c9592dd8f0acb7598')
+
+ depends_on('r@3.0.2:')
diff --git a/var/spack/repos/builtin/packages/r-xde/package.py b/var/spack/repos/builtin/packages/r-xde/package.py
new file mode 100644
index 0000000000..5d4a686fb5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-xde/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 RXde(RPackage):
+ """Multi-level model for cross-study detection of differential gene
+ expression."""
+
+ homepage = "https://www.bioconductor.org/packages/XDE/"
+ url = "https://git.bioconductor.org/packages/XDE"
+
+ version('2.22.0', git='https://git.bioconductor.org/packages/XDE', commit='25bcec965ae42a410dd285a9db9be46d112d8e81')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-genefilter', type=('build', 'run'))
+ depends_on('r-gtools', type=('build', 'run'))
+ depends_on('r-mergemaid', type=('build', 'run'))
+ depends_on('r-mvtnorm', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@2.22.0')
diff --git a/var/spack/repos/builtin/packages/r-xgboost/package.py b/var/spack/repos/builtin/packages/r-xgboost/package.py
index 766191dcc1..22f87b5c54 100644
--- a/var/spack/repos/builtin/packages/r-xgboost/package.py
+++ b/var/spack/repos/builtin/packages/r-xgboost/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -37,12 +37,19 @@ class RXgboost(RPackage):
users are also allowed to define their own objectives easily."""
homepage = "https://github.com/dmlc/xgboost"
- url = "https://cran.r-project.org/src/contrib/xgboost_0.4-4.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/xgboost_0.6-4.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/xgboost"
+ version('0.6-4', '86e517e3ce39f8a01de796920f6b425e')
version('0.4-4', 'c24d3076058101a71de4b8af8806697c')
- depends_on('r-matrix', type=('build', 'run'))
- depends_on('r-datatable', type=('build', 'run'))
- depends_on('r-magrittr', type=('build', 'run'))
+ depends_on('r@3.3.0:')
+
+ depends_on('r-matrix@1.1-0:', type=('build', 'run'))
+ depends_on('r-data-table@1.9.6:', type=('build', 'run'))
+ depends_on('r-magrittr@1.5:', type=('build', 'run'))
+ depends_on('r-stringi@0.5.2:', type=('build', 'run'))
+
+ # This is not listed as required, but installation fails without it
+ # ERROR: dependency 'stringr' is not available for package 'xgboost'
depends_on('r-stringr', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r-xlconnect/package.py b/var/spack/repos/builtin/packages/r-xlconnect/package.py
index 1863997ad7..6a388c14a5 100644
--- a/var/spack/repos/builtin/packages/r-xlconnect/package.py
+++ b/var/spack/repos/builtin/packages/r-xlconnect/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-xlconnectjars/package.py b/var/spack/repos/builtin/packages/r-xlconnectjars/package.py
index 0200b00a0f..fd7913a296 100644
--- a/var/spack/repos/builtin/packages/r-xlconnectjars/package.py
+++ b/var/spack/repos/builtin/packages/r-xlconnectjars/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-xlsx/package.py b/var/spack/repos/builtin/packages/r-xlsx/package.py
index e16a582306..988fa41157 100644
--- a/var/spack/repos/builtin/packages/r-xlsx/package.py
+++ b/var/spack/repos/builtin/packages/r-xlsx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,6 @@ class RXlsx(RPackage):
homepage = "http://code.google.com/p/rexcel/"
url = "https://cran.rstudio.com/src/contrib/xlsx_0.5.7.tar.gz"
- list_url = "https://cran.rstudio.com/src/contrib/Archive/xlsx"
version('0.5.7', '36b1b16f29c54b6089b1dae923180dd5')
diff --git a/var/spack/repos/builtin/packages/r-xlsxjars/package.py b/var/spack/repos/builtin/packages/r-xlsxjars/package.py
index 1c16c75a9d..8bd19f97c4 100644
--- a/var/spack/repos/builtin/packages/r-xlsxjars/package.py
+++ b/var/spack/repos/builtin/packages/r-xlsxjars/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,6 @@ class RXlsxjars(RPackage):
homepage = "https://cran.rstudio.com/web/packages/xlsxjars/index.html"
url = "https://cran.rstudio.com/src/contrib/xlsxjars_0.6.1.tar.gz"
- list_url = "https://cran.rstudio.com/src/contrib/Archive/xlsxjars"
version('0.6.1', '5a1721d5733cb42f3a29e3f353e39166')
diff --git a/var/spack/repos/builtin/packages/r-xmapbridge/package.py b/var/spack/repos/builtin/packages/r-xmapbridge/package.py
new file mode 100644
index 0000000000..0836eb3951
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-xmapbridge/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 RXmapbridge(RPackage):
+ """xmapBridge can plot graphs in the X:Map genome browser. This package
+ exports plotting files in a suitable format."""
+
+ homepage = "https://www.bioconductor.org/packages/xmapbridge/"
+ url = "https://git.bioconductor.org/packages/xmapbridge"
+ list_url = homepage
+
+ version('1.34.0', git='https://git.bioconductor.org/packages/xmapbridge', commit='f162e1f72ead5f5a1aede69032d5771a6572d965')
+
+ depends_on('r@3.4.0:3.4.9', when='@1.34.0')
diff --git a/var/spack/repos/builtin/packages/r-xml/package.py b/var/spack/repos/builtin/packages/r-xml/package.py
index 2fe2a8a05b..aca86eade4 100644
--- a/var/spack/repos/builtin/packages/r-xml/package.py
+++ b/var/spack/repos/builtin/packages/r-xml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,10 +30,10 @@ class RXml(RPackage):
(including DTDs), both local and accessible via HTTP or FTP. Also offers
access to an 'XPath' "interpreter"."""
- homepage = "http://www.omegahat.net/RSXML"
- url = "https://cran.r-project.org/src/contrib/XML_3.98-1.4.tar.gz"
+ homepage = "https://cran.r-project.org/web/packages/XML/index.html"
+ url = "https://cran.r-project.org/src/contrib/XML_3.98-1.9.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/XML"
-
+ version('3.98-1.9', '70dd9d711cf3cbd218eb2b870aee9503')
version('3.98-1.5', 'd1cfcd56f7aec96a84ffca91aea507ee')
version('3.98-1.4', '1a7f3ce6f264eeb109bfa57bedb26c14')
diff --git a/var/spack/repos/builtin/packages/r-xml2/package.py b/var/spack/repos/builtin/packages/r-xml2/package.py
new file mode 100644
index 0000000000..ffbe0f626f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-xml2/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RXml2(RPackage):
+ """Work with XML files using a simple, consistent interface. Built on top
+ of the 'libxml2' C library."""
+
+ homepage = "https://cran.r-project.org/package=xml2"
+ url = "https://cran.r-project.org/src/contrib/xml2_1.1.1.tar.gz"
+ list_url = "https://cran.r-project.org/src/contrib/Archive/xml2"
+
+ version('1.1.1', '768f7edc39c4baab6b6b9e7c7ec79fee')
+
+ depends_on('r-rcpp', type=('build', 'run'))
+ depends_on('r-bh', type=('build', 'run'))
+ depends_on('libxml2')
diff --git a/var/spack/repos/builtin/packages/r-xtable/package.py b/var/spack/repos/builtin/packages/r-xtable/package.py
index 66d8687b6d..8f3cc65c0b 100644
--- a/var/spack/repos/builtin/packages/r-xtable/package.py
+++ b/var/spack/repos/builtin/packages/r-xtable/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-xts/package.py b/var/spack/repos/builtin/packages/r-xts/package.py
index 1cedec1d42..1c1184428a 100644
--- a/var/spack/repos/builtin/packages/r-xts/package.py
+++ b/var/spack/repos/builtin/packages/r-xts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/r-xvector/package.py b/var/spack/repos/builtin/packages/r-xvector/package.py
new file mode 100644
index 0000000000..4018422c18
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-xvector/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 RXvector(RPackage):
+ """Memory efficient S4 classes for storing sequences "externally" (behind
+ an R external pointer, or on disk)."""
+
+ homepage = "https://bioconductor.org/packages/XVector/"
+ url = "https://git.bioconductor.org/packages/XVector"
+ list_url = homepage
+
+ version('0.16.0', git='https://git.bioconductor.org/packages/XVector', commit='54615888e1a559da4a81de33e934fc0f1c3ad99f')
+
+ depends_on('r-biocgenerics', type=('build', 'run'))
+ depends_on('r-s4vectors', type=('build', 'run'))
+ depends_on('r-iranges', type=('build', 'run'))
+ depends_on('r-zlibbioc', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@0.16.0')
diff --git a/var/spack/repos/builtin/packages/r-yaml/package.py b/var/spack/repos/builtin/packages/r-yaml/package.py
index c812ea8ca2..25e60cdd9a 100644
--- a/var/spack/repos/builtin/packages/r-yaml/package.py
+++ b/var/spack/repos/builtin/packages/r-yaml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,4 +33,5 @@ class RYaml(RPackage):
url = "https://cran.r-project.org/src/contrib/yaml_2.1.13.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/yaml"
+ version('2.1.14', '2de63248e6a122c368f8e4537426e35c')
version('2.1.13', 'f2203ea395adaff6bd09134666191d9a')
diff --git a/var/spack/repos/builtin/packages/r-yapsa/package.py b/var/spack/repos/builtin/packages/r-yapsa/package.py
new file mode 100644
index 0000000000..a69b745a7e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-yapsa/package.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/spack/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 RYapsa(RPackage):
+ """This package provides functions and routines useful in the analysis of
+ somatic signatures (cf. L. Alexandrov et al., Nature 2013). In
+ particular, functions to perform a signature analysis with known
+ signatures (LCD = linear combination decomposition) and a signature
+ analysis on stratified mutational catalogue (SMC = stratify mutational
+ catalogue) are provided."""
+
+ homepage = "http://bioconductor.org/packages/YAPSA/"
+ url = "https://git.bioconductor.org/packages/YAPSA"
+ list_url = homepage
+
+ version('1.2.0', git='https://git.bioconductor.org/packages/YAPSA', commit='320809b69e470e30a777a383f8341f93064ec24d')
+
+ depends_on('r-genomicranges', type=('build', 'run'))
+ depends_on('r-ggplot2', type=('build', 'run'))
+ depends_on('r-lsei', type=('build', 'run'))
+ depends_on('r-somaticsignatures', type=('build', 'run'))
+ depends_on('r-variantannotation', type=('build', 'run'))
+ depends_on('r-genomeinfodb', type=('build', 'run'))
+ depends_on('r-reshape2', type=('build', 'run'))
+ depends_on('r-gridextra', type=('build', 'run'))
+ depends_on('r-corrplot', type=('build', 'run'))
+ depends_on('r-dendextend', type=('build', 'run'))
+ depends_on('r-getoptlong', type=('build', 'run'))
+ depends_on('r-gtrellis', type=('build', 'run'))
+ depends_on('r-pmcmr', type=('build', 'run'))
+ depends_on('r-complexheatmap', type=('build', 'run'))
+ depends_on('r-keggrest', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.2.0')
diff --git a/var/spack/repos/builtin/packages/r-yaqcaffy/package.py b/var/spack/repos/builtin/packages/r-yaqcaffy/package.py
new file mode 100644
index 0000000000..1901990927
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-yaqcaffy/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RYaqcaffy(RPackage):
+ """Quality control of Affymetrix GeneChip expression data and
+ reproducibility analysis of human whole genome chips with the MAQC
+ reference datasets."""
+
+ homepage = "http://bioconductor.org/packages/yaqcaffy/"
+ url = "https://git.bioconductor.org/packages/yaqcaffy"
+ list_url = homepage
+
+ version('1.36.0', git='https://git.bioconductor.org/packages/yaqcaffy', commit='4d46fe77b2c8de2230a77b0c07dd5dd726e3abd6')
+
+ depends_on('r-simpleaffy', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.36.0')
diff --git a/var/spack/repos/builtin/packages/r-yarn/package.py b/var/spack/repos/builtin/packages/r-yarn/package.py
new file mode 100644
index 0000000000..5b0a76b476
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-yarn/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 RYarn(RPackage):
+ """Expedite large RNA-Seq analyses using a combination of previously
+ developed tools. YARN is meant to make it easier for the user in
+ performing basic mis-annotation quality control, filtering, and
+ condition-aware normalization. YARN leverages many Bioconductor tools
+ and statistical techniques to account for the large heterogeneity and
+ sparsity found in very large RNA-seq experiments."""
+
+ homepage = "http://www.example.co://www.bioconductor.org/packages/yarn/"
+ url = "https://git.bioconductor.org/packages/yarn"
+ list_url = homepage
+
+ version('1.2.0', git='https://git.bioconductor.org/packages/yarn', commit='28af616ef8c27dcadf6568e276dea8465486a697')
+
+ depends_on('r-biobase', type=('build', 'run'))
+ depends_on('r-biomart', type=('build', 'run'))
+ depends_on('r-downloader', type=('build', 'run'))
+ depends_on('r-edger', type=('build', 'run'))
+ depends_on('r-gplots', type=('build', 'run'))
+ depends_on('r-limma', type=('build', 'run'))
+ depends_on('r-matrixstats', type=('build', 'run'))
+ depends_on('r-preprocesscore', type=('build', 'run'))
+ depends_on('r-readr', type=('build', 'run'))
+ depends_on('r-rcolorbrewer', type=('build', 'run'))
+ depends_on('r-quantro', type=('build', 'run'))
+ depends_on('r@3.4.0:3.4.9', when='@1.2.0')
diff --git a/var/spack/repos/builtin/packages/r-zlibbioc/package.py b/var/spack/repos/builtin/packages/r-zlibbioc/package.py
new file mode 100644
index 0000000000..280c7da3de
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r-zlibbioc/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 RZlibbioc(RPackage):
+ """This package uses the source code of zlib-1.2.5 to create libraries
+ for systems that do not have these available via other means (most
+ Linux and Mac users should have system-level access to zlib, and no
+ direct need for this package). See the vignette for instructions
+ on use."""
+
+ homepage = "http://bioconductor.org/packages/release/bioc/html/Zlibbioc.html"
+ url = "https://git.bioconductor.org/packages/zlibbioc"
+ list_url = homepage
+
+ version('1.22.0', git='https://git.bioconductor.org/packages/zlibbioc', commit='30377f830af2bc1ff17bbf3fdd2cb6442015fea5')
+ depends_on('r@3.4.0:3.4.9', when='@1.22.0')
diff --git a/var/spack/repos/builtin/packages/r-zoo/package.py b/var/spack/repos/builtin/packages/r-zoo/package.py
index 230c78a61a..33fa5d3353 100644
--- a/var/spack/repos/builtin/packages/r-zoo/package.py
+++ b/var/spack/repos/builtin/packages/r-zoo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,9 +33,10 @@ class RZoo(RPackage):
methods to extend standard generics."""
homepage = "http://zoo.r-forge.r-project.org/"
- url = "https://cran.r-project.org/src/contrib/zoo_1.7-13.tar.gz"
+ url = "https://cran.r-project.org/src/contrib/zoo_1.7-14.tar.gz"
list_url = "https://cran.r-project.org/src/contrib/Archive/zoo"
+ version('1.7-14', '8c577a7c1e535c899ab14177b1039c32')
version('1.7-13', '99521dfa4c668e692720cefcc5a1bf30')
depends_on('r-lattice', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/r/package.py b/var/spack/repos/builtin/packages/r/package.py
index 3fed62d1fa..603a372861 100644
--- a/var/spack/repos/builtin/packages/r/package.py
+++ b/var/spack/repos/builtin/packages/r/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,13 +22,11 @@
# 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 spack.util.environment import *
import shutil
+from spack import *
-class R(Package):
+class R(AutotoolsPackage):
"""R is 'GNU S', a freely available language and environment for
statistical computing and graphics which provides a wide variety of
statistical and graphical techniques: linear and nonlinear modelling,
@@ -36,10 +34,14 @@ class R(Package):
Please consult the R project homepage for further information."""
homepage = "https://www.r-project.org"
- url = "http://cran.cnr.berkeley.edu/src/base/R-3/R-3.1.2.tar.gz"
+ url = "https://cloud.r-project.org/src/base/R-3/R-3.4.0.tar.gz"
extendable = True
+ version('3.4.1', '3a79c01dc0527c62e80ffb1c489297ea')
+ version('3.4.0', '75083c23d507b9c16d5c6afbd7a827e7')
+ version('3.3.3', '0ac211ec15e813a24f8f4a5a634029a4')
+ version('3.3.2', '2437014ef40641cdc9673e89c040b7a8')
version('3.3.1', 'f50a659738b73036e2f5635adbd229c5')
version('3.3.0', '5a7506c8813432d1621c9725e86baf7a')
version('3.2.3', '1ba3dac113efab69e706902810cc2970')
@@ -63,7 +65,7 @@ class R(Package):
depends_on('ncurses')
depends_on('icu4c')
depends_on('glib')
- depends_on('zlib@:1.2.8')
+ depends_on('zlib@1.2.5:')
depends_on('bzip2')
depends_on('libtiff')
depends_on('jpeg')
@@ -71,44 +73,57 @@ class R(Package):
depends_on('cairo+X', when='+X')
depends_on('cairo~X', when='~X')
depends_on('pango')
+ depends_on('pango+X', when='+X')
+ depends_on('pango~X', when='~X')
depends_on('freetype')
depends_on('tcl')
depends_on('tk')
- depends_on('tk+X', when='+X')
- depends_on('tk~X', when='~X')
depends_on('libx11', when='+X')
depends_on('libxt', when='+X')
depends_on('curl')
depends_on('pcre')
- depends_on('jdk')
+ depends_on('java')
+
+ patch('zlib.patch', when='@:3.3.2')
@property
def etcdir(self):
return join_path(prefix, 'rlib', 'R', 'etc')
- def install(self, spec, prefix):
- rlibdir = join_path(prefix, 'rlib')
- configure_args = ['--prefix=%s' % prefix,
- '--libdir=%s' % rlibdir,
- '--enable-R-shlib',
- '--enable-BLAS-shlib',
- '--enable-R-framework=no']
+ def configure_args(self):
+ spec = self.spec
+ prefix = self.prefix
+
+ config_args = [
+ '--libdir={0}'.format(join_path(prefix, 'rlib')),
+ '--enable-R-shlib',
+ '--enable-BLAS-shlib',
+ '--enable-R-framework=no'
+ ]
+
if '+external-lapack' in spec:
- configure_args.extend(['--with-blas', '--with-lapack'])
+ config_args.extend([
+ '--with-blas',
+ '--with-lapack'
+ ])
- configure(*configure_args)
- make()
- make('install')
+ if '+X' in spec:
+ config_args.append('--with-x')
+ else:
+ config_args.append('--without-x')
+ return config_args
+
+ @run_after('install')
+ def copy_makeconf(self):
# Make a copy of Makeconf because it will be needed to properly build R
# dependencies in Spack.
src_makeconf = join_path(self.etcdir, 'Makeconf')
dst_makeconf = join_path(self.etcdir, 'Makeconf.spack')
shutil.copy(src_makeconf, dst_makeconf)
- self.filter_compilers(spec, prefix)
-
- def filter_compilers(self, spec, prefix):
+ @run_after('install')
+ def filter_compilers(self):
"""Run after install to tell the configuration files and Makefiles
to use the compilers that Spack built the package with.
@@ -135,11 +150,11 @@ class R(Package):
def r_lib_dir(self):
return join_path('rlib', 'R', 'library')
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
# Set R_LIBS to include the library dir for the
# extension and any other R extensions it depends on.
r_libs_path = []
- for d in extension_spec.traverse(
+ for d in dependent_spec.traverse(
deptype=('build', 'run'), deptype_query='run'):
if d.package.extends(self.spec):
r_libs_path.append(join_path(d.prefix, self.r_lib_dir))
@@ -153,11 +168,11 @@ class R(Package):
# determine how many jobs can actually be started.
spack_env.set('MAKEFLAGS', '-j{0}'.format(make_jobs))
- # For run time environment set only the path for extension_spec and
+ # For run time environment set only the path for dependent_spec and
# prepend it to R_LIBS
- if extension_spec.package.extends(self.spec):
+ if dependent_spec.package.extends(self.spec):
run_env.prepend_path('R_LIBS', join_path(
- extension_spec.prefix, self.r_lib_dir))
+ dependent_spec.prefix, self.r_lib_dir))
def setup_environment(self, spack_env, run_env):
run_env.prepend_path('LIBRARY_PATH',
@@ -167,7 +182,7 @@ class R(Package):
run_env.prepend_path('CPATH',
join_path(self.prefix, 'rlib', 'R', 'include'))
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""Called before R modules' install() methods. In most cases,
extensions will only need to have one line:
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
@@ -177,9 +192,9 @@ class R(Package):
module.R = Executable(join_path(self.spec.prefix.bin, 'R'))
# Add variable for library directry
- module.r_lib_dir = join_path(ext_spec.prefix, self.r_lib_dir)
+ module.r_lib_dir = join_path(dependent_spec.prefix, self.r_lib_dir)
# Make the site packages directory for extensions, if it does not exist
# already.
- if ext_spec.package.is_extension:
+ if dependent_spec.package.is_extension:
mkdirp(module.r_lib_dir)
diff --git a/var/spack/repos/builtin/packages/r/zlib.patch b/var/spack/repos/builtin/packages/r/zlib.patch
new file mode 100644
index 0000000000..673d5352fa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/r/zlib.patch
@@ -0,0 +1,29 @@
+*** a/configure 2017-01-21 21:48:35.077000000 +0000
+--- b/configure 2017-01-21 21:50:50.700000000 +0000
+***************
+*** 35496,35505 ****
+ #include <string.h>
+ #include <zlib.h>
+ int main() {
+! #ifdef ZLIB_VERSION
+! /* Work around Debian bug: it uses 1.2.3.4 even though there was no such
+! version on the master site zlib.net */
+! exit(strncmp(ZLIB_VERSION, "1.2.5", 5) < 0);
+ #else
+ exit(1);
+ #endif
+--- 35496,35509 ----
+ #include <string.h>
+ #include <zlib.h>
+ int main() {
+! /* Checking ZLIB_VERNUM trick learned here:
+! * https://github.com/TransitApp/protobuf/blob/master/configure.ac#L95
+! */
+! #ifdef ZLIB_VERNUM
+! if (ZLIB_VERNUM < 0x1250) {
+! exit(1);
+! }
+! exit(0);
+ #else
+ exit(1);
+ #endif
diff --git a/var/spack/repos/builtin/packages/raft/package.py b/var/spack/repos/builtin/packages/raft/package.py
new file mode 100644
index 0000000000..a5cc1f0ced
--- /dev/null
+++ b/var/spack/repos/builtin/packages/raft/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Raft(CMakePackage):
+ """RAFT: Reconstruct Algorithms for Tomography.
+ Toolbox under development at Brazilian Synchrotron Light Source."""
+
+ homepage = "https://bitbucket.org/gill_martinez/raft_aps"
+ url = "https://bitbucket.org/gill_martinez/raft_aps/get/1.2.3.tar.gz"
+
+ version('1.2.3', '4d1b106d9b3493e63dde96f7dd44b834')
+ version('develop', git='https://bitbucket.org/gill_martinez/raft_aps.git')
+
+ depends_on('mpi')
+ depends_on('cmake', type='build')
+ depends_on('hdf5')
+ depends_on('fftw')
+ depends_on('cuda')
+
+ def install(self, spec, prefix):
+ """RAFT lacks an install in its CMakeList"""
+
+ with working_dir(self.stage.source_path):
+ mkdirp(prefix)
+
+ # We only care about the binary
+ install_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/raja/package.py b/var/spack/repos/builtin/packages/raja/package.py
index dccf9a581c..18d2135991 100644
--- a/var/spack/repos/builtin/packages/raja/package.py
+++ b/var/spack/repos/builtin/packages/raja/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,14 +25,10 @@
from spack import *
-class Raja(Package):
+class Raja(CMakePackage):
"""RAJA Parallel Framework."""
homepage = "http://software.llnl.gov/RAJA/"
- version('git', git='https://github.com/LLNL/RAJA.git', branch="master")
+ version('develop', git='https://github.com/LLNL/RAJA.git', branch="master", submodules="True")
- def install(self, spec, prefix):
- with working_dir('build', create=True):
- cmake('..', *std_cmake_args)
- make()
- make('install')
+ depends_on('cmake@3.3:', type='build')
diff --git a/var/spack/repos/builtin/packages/randfold/package.py b/var/spack/repos/builtin/packages/randfold/package.py
new file mode 100644
index 0000000000..5160840332
--- /dev/null
+++ b/var/spack/repos/builtin/packages/randfold/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Randfold(MakefilePackage):
+ """Minimum free energy of folding randomization test software"""
+
+ homepage = "http://bioinformatics.psb.ugent.be/supplementary_data/erbon/nov2003/"
+ url = "http://bioinformatics.psb.ugent.be/supplementary_data/erbon/nov2003/downloads/randfold-2.0.1.tar.gz"
+
+ version('2.0.1', 'c9ebf7dc9d62fa4554a738a15fe1ded8')
+
+ depends_on('squid')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('randfold', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/random123/package.py b/var/spack/repos/builtin/packages/random123/package.py
new file mode 100644
index 0000000000..978467b457
--- /dev/null
+++ b/var/spack/repos/builtin/packages/random123/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Random123(Package):
+ """Random123 is a library of 'counter-based' random number
+ generators (CBRNGs), in which the Nth random number can be obtained
+ by applying a stateless mixing function to N instead of the
+ conventional approach of using N iterations of a stateful
+ transformation."""
+ homepage = "http://www.deshawresearch.com/resources_random123.html"
+ url = "http://www.deshawresearch.com/downloads/download_random123.cgi/Random123-1.09.tar.gz"
+
+ version('1.09', '67ae45ff94b12acea590a6aa04ed1123')
+
+ def install(self, spec, prefix):
+ # Random123 doesn't have a build system.
+ # We have to do our own install here.
+ install_tree('include', prefix.include)
+ install('./LICENSE', "%s" % prefix)
+ # used by some packages, e.g. quinoa
+ install('examples/uniform.hpp', join_path(prefix.include, 'Random123'))
diff --git a/var/spack/repos/builtin/packages/randrproto/package.py b/var/spack/repos/builtin/packages/randrproto/package.py
index ecff886a3b..24f6aaed41 100644
--- a/var/spack/repos/builtin/packages/randrproto/package.py
+++ b/var/spack/repos/builtin/packages/randrproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Randrproto(Package):
+class Randrproto(AutotoolsPackage):
"""X Resize and Rotate Extension (RandR).
This extension defines a protocol for clients to dynamically change X
@@ -39,8 +39,3 @@ class Randrproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/ravel/package.py b/var/spack/repos/builtin/packages/ravel/package.py
index 4f4f2b2e10..3f03444f76 100644
--- a/var/spack/repos/builtin/packages/ravel/package.py
+++ b/var/spack/repos/builtin/packages/ravel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Ravel(Package):
+class Ravel(CMakePackage):
"""Ravel is a parallel communication trace visualization tool that
orders events according to logical time."""
@@ -41,7 +41,5 @@ class Ravel(Package):
depends_on('otf2')
depends_on('qt@5:')
- def install(self, spec, prefix):
- cmake('-Wno-dev', *std_cmake_args)
- make()
- make("install")
+ def cmake_args(self):
+ return ['-Wno-dev']
diff --git a/var/spack/repos/builtin/packages/raxml/package.py b/var/spack/repos/builtin/packages/raxml/package.py
new file mode 100644
index 0000000000..96d6f7c95b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/raxml/package.py
@@ -0,0 +1,107 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Raxml(Package):
+ """RAxML (Randomized Axelerated Maximum Likelihood) is a program for
+ sequential and parallel Maximum Likelihood based inference of large
+ phylogenetic trees."""
+
+ homepage = "https://sco.h-its.org/exelixis/web/software/raxml"
+ url = "https://github.com/stamatak/standard-RAxML/archive/v8.2.11.tar.gz"
+
+ version('8.2.11', '6bd5c4e1f93003ccf13c9b59a5d080ab')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+ variant('pthreads', default=False, description='Enable pthreads version')
+ variant('sse', default=True, description='Enable SSE in order to substantially speed up execution')
+ variant('avx', default=False, description='Enable AVX in order to substantially speed up execution')
+
+ depends_on('mpi', when='+mpi')
+
+ # Compiles with either GCC or ICC.
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ files = glob.iglob("Makefile.*")
+ for file in files:
+ makefile = FileFilter(file)
+ makefile.filter('gcc', spack_cc)
+
+ if '+mpi' and '+avx' and '+pthreads' in spec:
+ make('-f', 'Makefile.AVX.HYBRID.gcc')
+ install('raxmlHPC-HYBRID-AVX', prefix.bin)
+
+ elif '+mpi' and '+sse' and '+pthreads' in spec:
+ make('-f', 'Makefile.SSE3.HYBRID.gcc')
+ install('raxmlHPC-HYBRID-SSE3', prefix.bin)
+
+ elif '+mpi' and '+pthreads' in spec:
+ make('-f', 'Makefile.HYBRID.gcc')
+ install('raxmlHPC-HYBRID', prefix.bin)
+
+ elif '+mpi' and '+avx' in spec:
+ make('-f', 'Makefile.AVX.MPI.gcc')
+ install('raxmlHPC-MPI-AVX', prefix.bin)
+
+ elif '+mpi' and '+sse' in spec:
+ make('-f', 'Makefile.SSE3.MPI.gcc')
+ install('raxmlHPC-MPI-SSE3', prefix.bin)
+
+ elif '+mpi' in spec:
+ make('-f', 'Makefile.MPI.gcc')
+ install('raxmlHPC-MPI', prefix.bin)
+
+ elif '+pthreads' and '+avx' in spec:
+ make('-f', 'Makefile.AVX.PTHREADS.gcc')
+ install('raxmlHPC-PTHREADS-AVX', prefix.bin)
+
+ elif '+pthreads' and '+sse' in spec:
+ make('-f', 'Makefile.SSE3.PTHREADS.gcc')
+ install('raxmlHPC-PTHREADS-SSE3', prefix.bin)
+
+ elif '+pthreads' in spec:
+ make('-f', 'Makefile.PTHREADS.gcc')
+ install('raxmlHPC-PTHREADS', prefix.bin)
+
+ elif '+sse' in spec:
+ make('-f', 'Makefile.SSE3.gcc')
+ install('raxmlHPC-SSE3', prefix.bin)
+
+ elif '+avx' in spec:
+ make('-f', 'Makefile.AVX.gcc')
+ install('raxmlHPC-AVX', prefix.bin)
+
+ else:
+ make('-f', 'Makefile.gcc')
+ install('raxmlHPC', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/ray/package.py b/var/spack/repos/builtin/packages/ray/package.py
new file mode 100644
index 0000000000..45e08c74ff
--- /dev/null
+++ b/var/spack/repos/builtin/packages/ray/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Ray(CMakePackage):
+ """Parallel genome assemblies for parallel DNA sequencing"""
+
+ homepage = "http://denovoassembler.sourceforge.net/"
+ url = "https://downloads.sourceforge.net/project/denovoassembler/Ray-2.3.1.tar.bz2"
+
+ version('2.3.1', '82f693c4db60af4328263c9279701009')
+
+ depends_on('mpi')
+
+ @run_after('build')
+ def make(self):
+ mkdirp(prefix.bin)
+ make('PREFIX=%s' % prefix.bin)
+
+ def install(self, spec, prefix):
+ make('install')
diff --git a/var/spack/repos/builtin/packages/rdp-classifier/package.py b/var/spack/repos/builtin/packages/rdp-classifier/package.py
new file mode 100644
index 0000000000..637e490a17
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rdp-classifier/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 RdpClassifier(Package):
+ """The RDP Classifier is a naive Bayesian classifier that can rapidly and
+ accurately provides taxonomic assignments from domain to genus, with
+ confidence estimates for each assignment. """
+
+ homepage = "http://rdp.cme.msu.edu/"
+ url = "https://downloads.sourceforge.net/project/rdp-classifier/rdp-classifier/rdp_classifier_2.12.zip"
+
+ version('2.12', '7fdfa33512629810f0ff06b905642ddd')
+
+ depends_on('java', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install(join_path('dist', 'classifier.jar'), prefix.bin)
+ install_tree(join_path('dist', 'lib'), prefix.bin.lib)
+ install(join_path('lib', 'junit-4.8.2.jar'), prefix.bin.lib)
+ install_tree('src', prefix.src)
diff --git a/var/spack/repos/builtin/packages/readline/package.py b/var/spack/repos/builtin/packages/readline/package.py
index abb6ba04ce..ccdea0aa0f 100644
--- a/var/spack/repos/builtin/packages/readline/package.py
+++ b/var/spack/repos/builtin/packages/readline/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,22 +25,28 @@
from spack import *
-class Readline(Package):
+class Readline(AutotoolsPackage):
"""The GNU Readline library provides a set of functions for use by
- applications that allow users to edit command lines as they
- are typed in. Both Emacs and vi editing modes are
- available. The Readline library includes additional functions
- to maintain a list of previously-entered command lines, to
- recall and perhaps reedit those lines, and perform csh-like
- history expansion on previous commands."""
+ applications that allow users to edit command lines as they are typed in.
+ Both Emacs and vi editing modes are available. The Readline library
+ includes additional functions to maintain a list of previously-entered
+ command lines, to recall and perhaps reedit those lines, and perform
+ csh-like history expansion on previous commands."""
+
homepage = "http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html"
- url = "ftp://ftp.cwru.edu/pub/bash/readline-6.3.tar.gz"
+ url = "https://ftp.gnu.org/gnu/readline/readline-7.0.tar.gz"
+ version('7.0', '205b03a87fc83dab653b628c59b9fc91')
version('6.3', '33c8fb279e981274f485fd91da77e94a')
- depends_on("ncurses")
+ depends_on('ncurses')
+ # from url=http://www.linuxfromscratch.org/patches/downloads/readline/readline-6.3-upstream_fixes-1.patch
+ # this fixes a bug that could lead to seg faults in ipython
+ patch('readline-6.3-upstream_fixes-1.patch', when='@6.3')
+
+ def build(self, spec, prefix):
+ options = [
+ 'SHLIB_LIBS=-L{0} -lncursesw'.format(spec['ncurses'].prefix.lib)
+ ]
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make("SHLIB_LIBS=-lncurses")
- make("install")
+ make(*options)
diff --git a/var/spack/repos/builtin/packages/readline/readline-6.3-upstream_fixes-1.patch b/var/spack/repos/builtin/packages/readline/readline-6.3-upstream_fixes-1.patch
new file mode 100644
index 0000000000..a1ee4d6f38
--- /dev/null
+++ b/var/spack/repos/builtin/packages/readline/readline-6.3-upstream_fixes-1.patch
@@ -0,0 +1,90 @@
+Submitted By: Bruce Dubbs <bdubbs_at_linuxfromscratch_dot_org>
+Date: 2014-04-18
+Initial Package Version: 6.3
+Upstream Status: Already in upstream patch repo
+Origin: Upstream
+Description: This patch contains upstream patch numbers 001 through 005.
+
+diff -Naur readline-6.3/display.c readline-6.3.patched/display.c
+--- readline-6.3/display.c 2013-12-27 12:10:56.000000000 -0600
++++ readline-6.3.patched/display.c 2014-04-18 15:51:38.249945858 -0500
+@@ -2677,7 +2677,8 @@
+ {
+ if (_rl_echoing_p)
+ {
+- _rl_move_vert (_rl_vis_botlin);
++ if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */
++ _rl_move_vert (_rl_vis_botlin);
+ _rl_vis_botlin = 0;
+ fflush (rl_outstream);
+ rl_restart_output (1, 0);
+diff -Naur readline-6.3/readline.c readline-6.3.patched/readline.c
+--- readline-6.3/readline.c 2013-10-28 13:58:06.000000000 -0500
++++ readline-6.3.patched/readline.c 2014-04-18 15:51:38.247945883 -0500
+@@ -744,7 +744,8 @@
+ r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
+
+ RL_CHECK_SIGNALS ();
+- if (r == 0) /* success! */
++ /* We only treat values < 0 specially to simulate recursion. */
++ if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */
+ {
+ _rl_keyseq_chain_dispose ();
+ RL_UNSETSTATE (RL_STATE_MULTIKEY);
+@@ -964,7 +965,7 @@
+ #if defined (VI_MODE)
+ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
+ key != ANYOTHERKEY &&
+- rl_key_sequence_length == 1 && /* XXX */
++ _rl_dispatching_keymap == vi_movement_keymap &&
+ _rl_vi_textmod_command (key))
+ _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
+ #endif
+diff -Naur readline-6.3/rltypedefs.h readline-6.3.patched/rltypedefs.h
+--- readline-6.3/rltypedefs.h 2011-03-26 13:53:31.000000000 -0500
++++ readline-6.3.patched/rltypedefs.h 2014-04-18 15:51:38.250945845 -0500
+@@ -26,6 +26,25 @@
+ extern "C" {
+ #endif
+
++/* Old-style, attempt to mark as deprecated in some way people will notice. */
++
++#if !defined (_FUNCTION_DEF)
++# define _FUNCTION_DEF
++
++#if defined(__GNUC__) || defined(__clang__)
++typedef int Function () __attribute__ ((deprecated));
++typedef void VFunction () __attribute__ ((deprecated));
++typedef char *CPFunction () __attribute__ ((deprecated));
++typedef char **CPPFunction () __attribute__ ((deprecated));
++#else
++typedef int Function ();
++typedef void VFunction ();
++typedef char *CPFunction ();
++typedef char **CPPFunction ();
++#endif
++
++#endif /* _FUNCTION_DEF */
++
+ /* New style. */
+
+ #if !defined (_RL_FUNCTION_TYPEDEF)
+diff -Naur readline-6.3/util.c readline-6.3.patched/util.c
+--- readline-6.3/util.c 2013-09-02 12:36:12.000000000 -0500
++++ readline-6.3.patched/util.c 2014-04-18 15:51:38.248945871 -0500
+@@ -476,6 +476,7 @@
+ return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s)));
+ }
+
++#if defined (DEBUG)
+ #if defined (USE_VARARGS)
+ static FILE *_rl_tracefp;
+
+@@ -538,6 +539,7 @@
+ _rl_tracefp = fp;
+ }
+ #endif
++#endif /* DEBUG */
+
+
+ #if HAVE_DECL_AUDIT_USER_TTY && defined (ENABLE_TTY_AUDIT_SUPPORT)
diff --git a/var/spack/repos/builtin/packages/recordproto/package.py b/var/spack/repos/builtin/packages/recordproto/package.py
index 02018a76ff..dcbc0326e8 100644
--- a/var/spack/repos/builtin/packages/recordproto/package.py
+++ b/var/spack/repos/builtin/packages/recordproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Recordproto(Package):
+class Recordproto(AutotoolsPackage):
"""X Record Extension.
This extension defines a protocol for the recording and playback of user
@@ -38,8 +38,3 @@ class Recordproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/redundans/package.py b/var/spack/repos/builtin/packages/redundans/package.py
new file mode 100644
index 0000000000..71f83f623a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/redundans/package.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/spack/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 Redundans(Package):
+ """Redundans pipeline assists an assembly of heterozygous genomes."""
+
+ homepage = "https://github.com/Gabaldonlab/redundans"
+ url = "https://github.com/Gabaldonlab/redundans/archive/v0.13c.tar.gz"
+
+ version('0.13c', '2003fb7c70521f5e430553686fd1a594')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('py-pyscaf', type=('build', 'run'))
+ depends_on('py-fastaindex', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+ depends_on('sspace-standard')
+ depends_on('bwa')
+ depends_on('last')
+ depends_on('gapcloser')
+ depends_on('parallel')
+ depends_on('snap-berkeley')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('redundans.py', prefix.bin)
+ with working_dir('bin'):
+ install('fasta2homozygous.py', prefix.bin)
+ install('fasta2split.py', prefix.bin)
+ install('fastq2insert_size.py', prefix.bin)
+ install('fastq2mates.py', prefix.bin)
+ install('fastq2shuffled.py', prefix.bin)
+ install('fastq2sspace.py', prefix.bin)
+ install('filterReads.py', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/relion/package.py b/var/spack/repos/builtin/packages/relion/package.py
new file mode 100644
index 0000000000..ba006b9b43
--- /dev/null
+++ b/var/spack/repos/builtin/packages/relion/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 Relion(CMakePackage):
+ """RELION (for REgularised LIkelihood OptimisatioN, pronounce rely-on) is a
+ stand-alone computer program that employs an empirical Bayesian approach to
+ refinement of (multiple) 3D reconstructions or 2D class averages in
+ electron cryo-microscopy (cryo-EM)."""
+
+ homepage = "http://http://www2.mrc-lmb.cam.ac.uk/relion"
+ url = "https://github.com/3dem/relion"
+
+ version('develop', git='https://github.com/3dem/relion.git')
+
+ variant('gui', default=True, description="build the gui")
+ variant('cuda', default=False, description="enable compute on gpu")
+ variant('double', default=False, description="double precision (cpu) code")
+ variant('double-gpu', default=False, description="double precision (gpu) code")
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebInfo',
+ 'Profiling', 'Benchmarking'))
+
+ depends_on('mpi')
+ depends_on('fftw+float+double')
+ depends_on('fltk', when='+gui')
+ depends_on('cuda@8.0:8.99', when='+cuda')
+
+ def cmake_args(self):
+ args = [
+ '-DCMAKE_C_FLAGS=-g',
+ '-DCMAKE_CXX_FLAGS=-g',
+ '-DGUI=%s' % ('+gui' in self.spec),
+ '-DDoublePrec_CPU=%s' % ('+double' in self.spec),
+ '-DDoublePrec_GPU=%s' % ('+double-gpu' in self.spec),
+ ]
+ if '+cuda' in self.spec:
+ args += [
+ '-DCUDA=on',
+ '-DCUFFT=on',
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/rempi/package.py b/var/spack/repos/builtin/packages/rempi/package.py
new file mode 100644
index 0000000000..f6e2a2f3e5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rempi/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Rempi(AutotoolsPackage):
+ """ReMPI is a record-and-replay tool for MPI applications."""
+ homepage = "https://github.com/PRUNERS/ReMPI"
+ url = "https://github.com/PRUNERS/ReMPI/releases/download/v1.0.0/ReMPI-1.0.0.tar.gz"
+
+ version("1.0.0", "32c780a6a74627b5796bea161d4c4733")
+
+ depends_on("mpi")
+ depends_on("zlib")
+ depends_on("autoconf", type='build')
+ depends_on("automake", type='build')
+ depends_on("libtool", type='build')
diff --git a/var/spack/repos/builtin/packages/rename/package.py b/var/spack/repos/builtin/packages/rename/package.py
index 3538fd21cc..01bc35f073 100644
--- a/var/spack/repos/builtin/packages/rename/package.py
+++ b/var/spack/repos/builtin/packages/rename/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/rendercheck/package.py b/var/spack/repos/builtin/packages/rendercheck/package.py
index 07cc809e9a..65fcc7a312 100644
--- a/var/spack/repos/builtin/packages/rendercheck/package.py
+++ b/var/spack/repos/builtin/packages/rendercheck/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Rendercheck(Package):
+class Rendercheck(AutotoolsPackage):
"""rendercheck is a program to test a Render extension implementation
against separate calculations of expected output."""
@@ -40,9 +40,3 @@ class Rendercheck(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/renderproto/package.py b/var/spack/repos/builtin/packages/renderproto/package.py
index 10be4c941c..a6c91ab06b 100644
--- a/var/spack/repos/builtin/packages/renderproto/package.py
+++ b/var/spack/repos/builtin/packages/renderproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Renderproto(Package):
+class Renderproto(AutotoolsPackage):
"""X Rendering Extension.
This extension defines the protcol for a digital image composition as
@@ -38,8 +38,3 @@ class Renderproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/repeatmasker/package.py b/var/spack/repos/builtin/packages/repeatmasker/package.py
new file mode 100644
index 0000000000..c9713c7892
--- /dev/null
+++ b/var/spack/repos/builtin/packages/repeatmasker/package.py
@@ -0,0 +1,80 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+import inspect
+import distutils.dir_util
+
+
+class Repeatmasker(Package):
+ """RepeatMasker is a program that screens DNA sequences for interspersed
+ repeats and low complexity DNA sequences."""
+
+ homepage = "http://www.repeatmasker.org"
+ url = "http://www.repeatmasker.org/RepeatMasker-open-4-0-7.tar.gz"
+
+ version('4.0.7', '4dcbd7c88c5343e02d819f4b3e6527c6')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('hmmer')
+ depends_on('ncbi-rmblastn')
+ depends_on('trf')
+
+ def url_for_version(self, version):
+ url = 'http://www.repeatmasker.org/RepeatMasker-open-{0}.tar.gz'
+ return url.format(version.dashed)
+
+ def install(self, spec, prefix):
+ # Config questions consist of:
+ #
+ # <PRESS ENTER TO CONTINUE>
+ # Enter perl path
+ # Enter where repeatmasker is being configured from
+ # Enter trf path
+ # Add a Search Engine:
+ # 1. CrossMatch
+ # 2. RMBlast - NCBI Blast with RepeatMasker extensions
+ # 3. WUBlast/ABBlast (required by DupMasker)
+ # 4. HMMER3.1 & DFAM
+ # 5. Done
+ # Enter RMBlast path
+ # Do you want RMBlast to be your default search engine for
+ # Repeatmasker? (Y/N)
+ # Add a Search Engine: Done
+
+ config_answers = ['\n', '%s\n' % self.spec['perl'].prefix.bin.perl,
+ '%s\n' % self.stage.source_path,
+ '%s\n' % self.spec['trf'].prefix.bin.trf, '2\n',
+ '%s\n' % self.spec['ncbi-rmblastn'].prefix.bin,
+ 'Y\n', '5\n']
+
+ config_answers_filename = 'spack-config.in'
+
+ with open(config_answers_filename, 'w') as f:
+ f.writelines(config_answers)
+
+ with open(config_answers_filename, 'r') as f:
+ inspect.getmodule(self).perl('configure', input=f)
+
+ distutils.dir_util.copy_tree(".", prefix)
diff --git a/var/spack/repos/builtin/packages/resourceproto/package.py b/var/spack/repos/builtin/packages/resourceproto/package.py
index 4e0a495d83..4e58ae7f00 100644
--- a/var/spack/repos/builtin/packages/resourceproto/package.py
+++ b/var/spack/repos/builtin/packages/resourceproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Resourceproto(Package):
+class Resourceproto(AutotoolsPackage):
"""X Resource Extension.
This extension defines a protocol that allows a client to query the
@@ -38,8 +38,3 @@ class Resourceproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/revbayes/package.py b/var/spack/repos/builtin/packages/revbayes/package.py
new file mode 100644
index 0000000000..1ebbec534b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/revbayes/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 Revbayes(CMakePackage):
+ """Bayesian phylogenetic inference using probabilistic graphical models
+ and an interpreted language."""
+
+ homepage = "https://revbayes.github.io"
+ url = "https://github.com/revbayes/revbayes/archive/v1.0.4-release.tar.gz"
+
+ version('1.0.4', '5d6de96bcb3b2686b270856de3555a58')
+
+ variant('mpi', default=True, description='Enable MPI parallel support')
+
+ depends_on('boost')
+ depends_on('mpi', when='+mpi')
+
+ conflicts('%gcc@7.1.0:')
+
+ root_cmakelists_dir = 'projects/cmake/build'
+
+ @run_before('cmake')
+ def regenerate(self):
+ with working_dir(join_path('projects', 'cmake')):
+ mkdirp('build')
+ edit = FileFilter('regenerate.sh')
+ edit.filter('boost="true"', 'boost="false"')
+ if '+mpi' in self.spec:
+ edit.filter('mpi="false"', 'mpi="true"')
+ regenerate = Executable('./regenerate.sh')
+ regenerate()
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ if '+mpi' in spec:
+ install('rb-mpi', prefix.bin)
+ else:
+ install('rb', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/rgb/package.py b/var/spack/repos/builtin/packages/rgb/package.py
index ddc5419305..2b09a2c4a5 100644
--- a/var/spack/repos/builtin/packages/rgb/package.py
+++ b/var/spack/repos/builtin/packages/rgb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Rgb(Package):
+class Rgb(AutotoolsPackage):
"""X color name database.
This package includes both the list mapping X color names to RGB values
@@ -42,10 +42,3 @@ class Rgb(Package):
depends_on('xorg-server')
depends_on('xproto', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/rhash/package.py b/var/spack/repos/builtin/packages/rhash/package.py
new file mode 100644
index 0000000000..c2191f1f07
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rhash/package.py
@@ -0,0 +1,78 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+import glob
+from spack import *
+
+
+class Rhash(MakefilePackage):
+ """RHash is a console utility for computing and verifying hash sums of
+ files. It supports CRC32, MD4, MD5, SHA1, SHA256, SHA512, SHA3, Tiger,
+ TTH, Torrent BTIH, AICH, ED2K, GOST R 34.11-94, RIPEMD-160, HAS-160,
+ EDON-R 256/512, WHIRLPOOL and SNEFRU hash sums."""
+
+ homepage = "https://sourceforge.net/projects/rhash/"
+ url = "https://github.com/rhash/RHash/archive/v1.3.5.tar.gz"
+
+ version('1.3.5', 'f586644019c10c83c6b6835de4b99e74')
+
+ # For macOS build instructions, see:
+ # https://github.com/Homebrew/homebrew-core/blob/master/Formula/rhash.rb
+
+ def build(self, spec, prefix):
+ # Doesn't build shared libraries by default
+ make()
+
+ if spec.satisfies('platform=darwin'):
+ make('-C', 'librhash', 'dylib')
+ else:
+ make('lib-shared')
+
+ def check(self):
+ # Makefile has both `test` and `check` targets:
+ #
+ # * `test` - used to test that the build is working properly
+ # * `check` - used to check that the tarball is ready for upload
+ #
+ # Default implmentation is to run both `make test` and `make check`.
+ # `test` passes, but `check` fails, so only run `test`.
+ make('test')
+ make('test-static-lib')
+
+ if not self.spec.satisfies('platform=darwin'):
+ make('test-shared')
+ make('test-shared-lib')
+
+ def install(self, spec, prefix):
+ # Some things are installed to $(DESTDIR)$(PREFIX) while other things
+ # are installed to $DESTDIR/etc.
+ make('install', 'DESTDIR={0}'.format(prefix), 'PREFIX=')
+ make('install-lib-static', 'DESTDIR={0}'.format(prefix), 'PREFIX=')
+
+ if spec.satisfies('platform=darwin'):
+ libs = glob.glob('librhash/*.dylib')
+ for lib in libs:
+ install(lib, prefix.lib)
+ else:
+ make('install-lib-shared', 'DESTDIR={0}'.format(prefix), 'PREFIX=')
diff --git a/var/spack/repos/builtin/packages/rockstar/adjust_buildscript.patch b/var/spack/repos/builtin/packages/rockstar/adjust_buildscript.patch
new file mode 100644
index 0000000000..e9a18e4ee4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rockstar/adjust_buildscript.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index fafba4b..a21ef9e 100644
+--- a/Makefile
++++ b/Makefile
+@@ -6,7 +6,7 @@ PROFFLAGS = -lm -g -pg -O2 -std=c99
+ CC = gcc
+ CFILES = rockstar.c check_syscalls.c fof.c groupies.c subhalo_metric.c potential.c nfw.c jacobi.c fun_times.c interleaving.c universe_time.c hubble.c integrate.c distance.c config_vars.c config.c bounds.c inthash.c io/read_config.c client.c server.c merger.c inet/socket.c inet/rsocket.c inet/address.c io/meta_io.c io/io_internal.c io/io_ascii.c io/stringparse.c io/io_gadget.c io/io_generic.c io/io_art.c io/io_tipsy.c io/io_bgc2.c io/io_util.c io/io_arepo.c io/io_hdf5.c
+ DIST_FLAGS =
+-HDF5_FLAGS = -DH5_USE_16_API -lhdf5 -DENABLE_HDF5 -I/opt/local/include -L/opt/local/lib
++HDF5_FLAGS = -DH5_USE_16_API -lhdf5 -DENABLE_HDF5 -I$(HDF5_INC_DIR) -L$(HDF5_LIB_DIR)
+
+ all:
+ @make reg EXTRA_FLAGS="$(OFLAGS)"
diff --git a/var/spack/repos/builtin/packages/rockstar/package.py b/var/spack/repos/builtin/packages/rockstar/package.py
new file mode 100644
index 0000000000..2f8bfdc804
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rockstar/package.py
@@ -0,0 +1,69 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+from spack import *
+from distutils.dir_util import copy_tree
+
+
+class Rockstar(MakefilePackage):
+ """The Rockstar Halo Finder"""
+
+ homepage = "https://bitbucket.org/gfcstanford/rockstar"
+ url = "https://bitbucket.org/gfcstanford/rockstar"
+
+ version('develop', git='https://bitbucket.org/gfcstanford/rockstar.git')
+ version('yt', hg='https://bitbucket.org/MatthewTurk/rockstar')
+
+ variant('hdf5', description='Build rockstar with HDF5 support', default=False)
+
+ patch('adjust_buildscript.patch')
+
+ depends_on('hdf5', when='+hdf5')
+
+ def build(self, spec, prefix):
+ # Set environment appropriately for HDF5
+ if '+hdf5' in spec:
+ os.environ['HDF5_INC_DIR'] = spec['hdf5'].prefix.include
+ os.environ['HDF5_LIB_DIR'] = spec['hdf5'].prefix.lib
+
+ # Build depending on whether hdf5 is to be used
+ if '+hdf5' in spec:
+ make('with_hdf5')
+ else:
+ make()
+
+ # Build rockstar library
+ make('lib')
+
+ def install(self, spec, prefix):
+ # Install all files and directories
+ copy_tree(".", prefix)
+
+ mkdir(prefix.bin)
+ mkdir(prefix.lib)
+
+ install('rockstar', join_path(prefix.bin, 'rockstar'))
+ install('librockstar.so', join_path(prefix.lib, 'librockstar.so'))
diff --git a/var/spack/repos/builtin/packages/root/package.py b/var/spack/repos/builtin/packages/root/package.py
index 0f66dcebaa..a003d3d5e2 100644
--- a/var/spack/repos/builtin/packages/root/package.py
+++ b/var/spack/repos/builtin/packages/root/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,14 +27,24 @@ from spack import *
import sys
-class Root(Package):
+class Root(CMakePackage):
"""ROOT is a data analysis framework."""
+
homepage = "https://root.cern.ch"
- url = "https://root.cern.ch/download/root_v6.07.02.source.tar.gz"
+ url = "https://root.cern.ch/download/root_v6.09.02.source.tar.gz"
+
+ # Development versions
+ version('6.09.02', '4188dfeafb72df339a3d688fe92f57ec')
+
+ # Production versions
+ version('6.08.06', 'bcf0be2df31a317d25694ad2736df268', preferred=True)
+ # Old versions
+ version('6.06.08', '6ef0fe9bd9f88f3ce8890e3651142ee4')
version('6.06.06', '4308449892210c8d36e36924261fea26')
version('6.06.04', '55a2f98dd4cea79c9c4e32407c2d6d17')
version('6.06.02', 'e9b8b86838f65b0a78d8d02c66c2ec55')
+ version('5.34.36', '6a1ad549b3b79b10bbb1f116b49067ee')
if sys.platform == 'darwin':
patch('math_uint.patch', when='@6.06.02')
@@ -42,48 +52,71 @@ class Root(Package):
variant('graphviz', default=False, description='Enable graphviz support')
- depends_on("cmake", type='build')
- depends_on("pcre")
- depends_on("fftw")
- depends_on("graphviz", when="+graphviz")
- depends_on("python")
- depends_on("gsl")
- depends_on("libxml2+python")
- depends_on("jpeg")
- if sys.platform != 'darwin':
- depends_on("libpng")
- depends_on("openssl")
- depends_on("freetype")
-
- def install(self, spec, prefix):
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
- options = [source_directory]
- if '+debug' in spec:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
- else:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Release')
- options.append('-Dcxx14=on')
- options.append('-Dcocoa=off')
- options.append('-Dbonjour=off')
- options.append('-Dx11=on')
- options.extend(std_cmake_args)
+ depends_on('cmake@3.4.3:', type='build')
+ depends_on('pkg-config', type='build')
+
+ depends_on('binutils')
+ depends_on('zlib')
+ # depends_on('unuran')
+ depends_on('freetype')
+ depends_on('pcre')
+ depends_on('xz')
+ depends_on('libsm')
+ depends_on('libice')
+ depends_on('libx11')
+ depends_on('libxext')
+ depends_on('libxpm')
+ depends_on('libxft')
+ # depends_on('gif')
+ depends_on('libpng')
+ depends_on('jpeg')
+ depends_on('gsl')
+ depends_on('python@2.7:')
+ # depends_on('opengl')
+ depends_on('graphviz', when='+graphviz')
+ # depends_on('kerberos')
+ depends_on('libxml2+python')
+ depends_on('openssl')
+ # depends_on('castor')
+ # depends_on('rfio')
+ # depends_on('mysql')
+ # depends_on('oracle')
+ # depends_on('odbc')
+ # depends_on('postgresql')
+ depends_on('sqlite')
+ # depends_on('pythia')
+ depends_on('fftw')
+ depends_on('cfitsio')
+ # depends_on('monalisa')
+ # depends_on('xrootd')
+ # depends_on('gfal')
+ # depends_on('dcap')
+ # depends_on('ldap')
+ # depends_on('chirp')
+ # depends_on('hdfs')
+ # depends_on('davix')
+
+ # I was unable to build root with any Intel compiler
+ # See https://sft.its.cern.ch/jira/browse/ROOT-7517
+ conflicts('%intel')
+
+ def cmake_args(self):
+ args = [
+ '-Dcocoa=OFF',
+ '-Dbonjour=OFF',
+ '-Dx11=ON',
+ ]
+
if sys.platform == 'darwin':
- darwin_options = [
+ args.extend([
'-Dcastor=OFF',
'-Drfio=OFF',
- '-Ddcache=OFF']
- options.extend(darwin_options)
- with working_dir(build_directory, create=True):
- cmake(*options)
- make()
- make("install")
-
- def setup_dependent_environment(self, spack_env, run_env, dspec):
+ '-Ddcache=OFF',
+ ])
+
+ return args
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
spack_env.set('ROOTSYS', self.prefix)
- spack_env.set('ROOT_VERSION', 'v6')
+ spack_env.set('ROOT_VERSION', 'v{0}'.format(self.version.up_to(1)))
spack_env.prepend_path('PYTHONPATH', self.prefix.lib)
-
- def url_for_version(self, version):
- """Handle ROOT's unusual version string."""
- return "https://root.cern.ch/download/root_v%s.source.tar.gz" % version
diff --git a/var/spack/repos/builtin/packages/rose/package.py b/var/spack/repos/builtin/packages/rose/package.py
index 02b09f0126..8a7f22cf97 100644
--- a/var/spack/repos/builtin/packages/rose/package.py
+++ b/var/spack/repos/builtin/packages/rose/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -35,30 +35,67 @@ class Rose(Package):
(Developed at Lawrence Livermore National Lab)"""
homepage = "http://rosecompiler.org/"
- url = "https://github.com/rose-compiler/edg4x-rose"
+ url = "https://github.com/rose-compiler/rose/archive/v0.9.7.tar.gz"
+ version('0.9.7', 'e14ce5250078df4b09f4f40559d46c75')
version('master', branch='master',
- git='https://github.com/rose-compiler/edg4x-rose.git')
+ git='https://github.com/rose-compiler/rose.git')
patch('add_spack_compiler_recognition.patch')
depends_on("autoconf@2.69", type='build')
depends_on("automake@1.14", type='build')
depends_on("libtool@2.4", type='build')
- depends_on("boost@1.54.0")
- depends_on("jdk@8u25-linux-x64")
+ depends_on("boost@1.47.0:")
- def install(self, spec, prefix):
- # Bootstrap with autotools
+ variant('tests', default=False, description='Build the tests directory')
+
+ variant('binanalysis', default=False, description='Enable binary analysis tooling')
+ depends_on('libgcrypt', when='+binanalysis', type='build')
+ depends_on('py-binwalk', when='+binanalysis', type='run')
+
+ variant('c', default=True, description='Enable c language support')
+ variant('cxx', default=True, description='Enable c++ language support')
+
+ variant('fortran', default=False, description='Enable fortran language support')
+
+ variant('java', default=False, description='Enable java language support')
+ depends_on('java', when='+java')
+
+ variant('z3', default=False, description='Enable z3 theorem prover')
+ depends_on('z3', when='+z3')
+
+ build_directory = 'spack-build'
+
+ def autoreconf(self, spec, prefix):
bash = which('bash')
bash('build')
- # Configure, compile & install
- with working_dir('rose-build', create=True):
- boost = spec['boost']
+ @property
+ def languages(self):
+ spec = self.spec
+ langs = [
+ 'binaries' if '+binanalysis' in spec else '',
+ 'c' if '+c' in spec else '',
+ 'c++' if '+cxx' in spec else '',
+ 'java' if '+java' in spec else '',
+ 'fortran' if '+fortran' in spec else ''
+ ]
+ return list(filter(None, langs))
+
+ def configure_args(self):
+ spec = self.spec
+ cc = self.compiler.cc
+ cxx = self.compiler.cxx
+ return [
+ '--disable-boost-version-check',
+ "--with-alternate_backend_C_compiler={0}".format(cc),
+ "--with-alternate_backend_Cxx_compiler={0}".format(cxx),
+ "--with-boost={0}".format(spec['boost'].prefix),
+ "--enable-languages={0}".format(",".join(self.languages)),
+ "--with-z3={0}".format(spec['z3'].prefix) if '+z3' in spec else '',
+ '--disable-tests-directory' if '+tests' not in spec else '',
+ '--enable-tutorial-directory={0}'.format('no'),
+ ]
- configure = Executable('../configure')
- configure("--prefix=" + prefix,
- "--with-boost=" + boost.prefix,
- "--disable-boost-version-check")
- make("install-core")
+ install_targets = ["install-core"]
diff --git a/var/spack/repos/builtin/packages/rr/package.py b/var/spack/repos/builtin/packages/rr/package.py
new file mode 100644
index 0000000000..245744a6fa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rr/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Rr(CMakePackage):
+ """Application execution recorder, player and debugger"""
+ homepage = "http://rr-project.org/"
+ url = "https://github.com/mozilla/rr/archive/4.5.0.tar.gz"
+
+ version('4.5.0', '1ec0aed0559b81143f59a200eeb302ef')
+ version('4.4.0', '6d1cbb4fafbf6711114369907cf1efb1')
+ version('4.3.0', '31470564e8b7eb317f619e4ef2244082')
+
+ depends_on('gdb')
+ depends_on('git')
+ depends_on('zlib')
+ # depends_on('capnproto', when='@4.6:') # not yet in spack
+ # depends_on('libcapnp') # needed for future releases
+ depends_on('pkg-config', type='build')
+ depends_on('py-pexpect', type='build') # actually tests
+
+ # rr needs architecture Nehalem and beyond, how can spack
+ # test this?
+
+ # Only 'Release' is supported at the moment
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Release'))
+
+ def patch(self):
+ # because otherwise CMake would try and fail to set RPATH of
+ # rr_exec_stub
+ filter_file(
+ r'^(install\(TARGETS .*)\s*rr_exec_stub', r'\1', 'CMakeLists.txt')
+
+ def cmake_args(self):
+ return ['-Ddisable32bit=ON']
+
+ @run_after('install')
+ def install_stub(self):
+ with working_dir(self.build_directory):
+ mkdirp(self.prefix.bin)
+ install('bin/rr_exec_stub', self.prefix.bin)
diff --git a/var/spack/repos/builtin/packages/rsbench/package.py b/var/spack/repos/builtin/packages/rsbench/package.py
new file mode 100644
index 0000000000..91c8d6f71b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rsbench/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Rsbench(MakefilePackage):
+ """A mini-app to represent the multipole resonance representation lookup
+ cross section algorithm."""
+
+ homepage = "https://github.com/ANL-CESAR/RSBench"
+ url = "https://github.com/ANL-CESAR/RSBench/archive/v2.tar.gz"
+
+ version('2', '15a3ac5ea72529ac1ed9ed016ee68b4f')
+ version('0', '3427634dc5e7cd904d88f9955b371757')
+
+ tags = ['proxy-app']
+
+ build_directory = 'src'
+
+ @property
+ def build_targets(self):
+ targets = []
+
+ cflags = '-std=gnu99'
+ ldflags = '-lm'
+
+ if self.compiler.name == 'gcc':
+ cflags += ' -ffast-math '
+ elif self.compiler.name == 'intel':
+ cflags += ' -xhost -ansi-alias -no-prec-div '
+ elif self.compiler.name == 'pgi':
+ cflags += ' -fastsse '
+
+ cflags += self.compiler.openmp_flag
+
+ targets.append('CFLAGS={0}'.format(cflags))
+ targets.append('LDFLAGS={0}'.format(ldflags))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('src/rsbench', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/rsem/package.py b/var/spack/repos/builtin/packages/rsem/package.py
new file mode 100644
index 0000000000..2d29610b20
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rsem/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Rsem(MakefilePackage):
+ """RSEM is a software package for estimating gene and isoform expression
+ levels from RNA-Seq data."""
+
+ homepage = "http://deweylab.github.io/RSEM/"
+ url = "https://github.com/deweylab/RSEM/archive/v1.3.0.tar.gz"
+
+ version('1.3.0', '9728161625d339d022130e2428604bf5')
+
+ depends_on('r', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+ depends_on('python', type=('build', 'run'))
+ depends_on('bowtie')
+ depends_on('bowtie2')
+ depends_on('star')
+
+ def install(self, spec, prefix):
+ make('install', 'DESTDIR=%s' % prefix, 'prefix=')
diff --git a/var/spack/repos/builtin/packages/rstart/package.py b/var/spack/repos/builtin/packages/rstart/package.py
index 7b80e88ae7..2a0cf59e81 100644
--- a/var/spack/repos/builtin/packages/rstart/package.py
+++ b/var/spack/repos/builtin/packages/rstart/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Rstart(Package):
+class Rstart(AutotoolsPackage):
"""This package includes both the client and server sides implementing
the protocol described in the "A Flexible Remote Execution Protocol
Based on rsh" paper found in the specs/ subdirectory.
@@ -41,9 +41,3 @@ class Rstart(Package):
depends_on('xproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/rsync/package.py b/var/spack/repos/builtin/packages/rsync/package.py
index 4e741b255f..642f702ac0 100644
--- a/var/spack/repos/builtin/packages/rsync/package.py
+++ b/var/spack/repos/builtin/packages/rsync/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,10 @@
from spack import *
-class Rsync(Package):
+class Rsync(AutotoolsPackage):
"""An open source utility that provides fast incremental file transfer."""
homepage = "https://rsync.samba.org"
url = "https://download.samba.org/pub/rsync/rsync-3.1.1.tar.gz"
version('3.1.2', '0f758d7e000c0f7f7d3792610fad70cb')
version('3.1.1', '43bd6676f0b404326eee2d63be3cdcfe')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/rtags/add_string_iterator_erase_compile_check.patch b/var/spack/repos/builtin/packages/rtags/add_string_iterator_erase_compile_check.patch
new file mode 100644
index 0000000000..98ec67df5f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rtags/add_string_iterator_erase_compile_check.patch
@@ -0,0 +1,67 @@
+From e0cb0bfba240669e27d77ea4ac17a90fde1a03fd Mon Sep 17 00:00:00 2001
+From: Anders Bakken <agbakken@gmail.com>
+Date: Thu, 27 Jul 2017 20:55:19 -0700
+Subject: [PATCH] Add a compile test for proper c++11 support for std::string
+ and work around deficient stls.
+
+---
+ rct.cmake | 10 ++++++++++
+ rct/String.h | 10 ++++++++++
+ rct/rct-config.h.in | 1 +
+ 3 files changed, 21 insertions(+)
+
+diff --git a/src/rct/rct.cmake b/src/rct/rct.cmake
+index da102d2..30da945 100644
+--- a/src/rct/rct.cmake
++++ b/src/rct/rct.cmake
+@@ -287,6 +287,16 @@ check_cxx_source_runs("
+ return 0;
+ }" HAVE_UNORDERDED_MAP_WORKING_MOVE_CONSTRUCTOR)
+
++check_cxx_source_runs("
++ #include <string>
++
++ int main(int, char **)
++ {
++ std::string str = \"foobar testing\";
++ std::string::iterator it = str.erase(str.begin(), str.end());
++ return 0;
++ }" HAVE_STRING_ITERATOR_ERASE)
++
+ unset(CMAKE_REQUIRED_FLAGS)
+ unset(CMAKE_REQUIRED_LIBRARIES)
+
+diff --git a/src/rct/rct/String.h b/src/rct/rct/String.h
+index f8b9dbc..31b2012 100644
+--- a/src/rct/rct/String.h
++++ b/src/rct/rct/String.h
+@@ -454,7 +454,17 @@ class String
+
+ iterator erase(const_iterator begin, const_iterator end)
+ {
++#ifdef HAVE_STRING_ITERATOR_ERASE
+ return mString.erase(begin, end);
++#else
++ if (begin >= end) {
++ return mString.end();
++ }
++
++ const size_t offset = begin - mString.begin();
++ mString.erase(offset, end - begin);
++ return mString.begin() + offset;
++#endif
+ }
+
+ String& erase(size_t index = 0, size_t count = npos)
+diff --git a/src/rct/rct/rct-config.h.in b/src/rct/rct/rct-config.h.in
+index 9c67e2f..87c5b7c 100644
+--- a/src/rct/rct/rct-config.h.in
++++ b/src/rct/rct/rct-config.h.in
+@@ -20,6 +20,7 @@
+ #cmakedefine HAVE_SHMDEST
+ #cmakedefine HAVE_SCRIPTENGINE
+ #cmakedefine HAVE_UNORDERDED_MAP_WORKING_MOVE_CONSTRUCTOR
++#cmakedefine HAVE_HAVE_STRING_ITERATOR_ERASE
+ #if !defined(HAVE_EPOLL) && !defined(HAVE_KQUEUE)
+ #cmakedefine HAVE_SELECT
+ #endif
diff --git a/var/spack/repos/builtin/packages/rtags/package.py b/var/spack/repos/builtin/packages/rtags/package.py
new file mode 100644
index 0000000000..8e1a962209
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rtags/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Rtags(CMakePackage):
+ """RTags is a client/server application that indexes C/C++ code"""
+
+ homepage = "https://github.com/Andersbakken/rtags/"
+ url = "https://andersbakken.github.io/rtags-releases/rtags-2.12.tar.gz"
+
+ version('2.12', '84988aaff27915a79d4b4b57299f9a51')
+
+ depends_on("llvm@3.3: +clang")
+ depends_on("zlib")
+ depends_on("openssl")
+ depends_on("lua@5.3:")
+ depends_on("bash-completion")
+ depends_on("pkg-config", type='build')
+
+ patch("add_string_iterator_erase_compile_check.patch", when='@2.12')
+
+ def cmake_args(self):
+ args = ['-DCMAKE_EXPORT_COMPILE_COMMANDS=1',
+ '-DRTAGS_NO_ELISP_FILES=1',
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/rtax/package.py b/var/spack/repos/builtin/packages/rtax/package.py
new file mode 100644
index 0000000000..3e359d7346
--- /dev/null
+++ b/var/spack/repos/builtin/packages/rtax/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Rtax(Package):
+ """Rapid and accurate taxonomic classification of short paired-end
+ sequence reads from the 16S ribosomal RNA gene"""
+
+ homepage = "https://github.com/davidsoergel/rtax"
+ url = "http://static.davidsoergel.com/rtax-0.984.tgz"
+
+ version('0.984', 'e9dbbe4b3c26b0f0f6c14a5fb46aa587')
+
+ depends_on('usearch')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('rtax', prefix.bin)
+ install_tree('scripts', prefix.bin.scripts)
+ install_tree('greengenes', prefix.bin.greengenes)
diff --git a/var/spack/repos/builtin/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py
index 8dc314c171..1e3934df76 100644
--- a/var/spack/repos/builtin/packages/ruby/package.py
+++ b/var/spack/repos/builtin/packages/ruby/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -52,20 +52,20 @@ class Ruby(Package):
make()
make("install")
- def setup_dependent_environment(self, spack_env, run_env, extension_spec):
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
# TODO: do this only for actual extensions.
# Set GEM_PATH to include dependent gem directories
ruby_paths = []
- for d in extension_spec.traverse():
+ for d in dependent_spec.traverse():
if d.package.extends(self.spec):
ruby_paths.append(d.prefix)
spack_env.set_path('GEM_PATH', ruby_paths)
# The actual installation path for this gem
- spack_env.set('GEM_HOME', extension_spec.prefix)
+ spack_env.set('GEM_HOME', dependent_spec.prefix)
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""Called before ruby modules' install() methods. Sets GEM_HOME
and GEM_PATH to values appropriate for the package being built.
diff --git a/var/spack/repos/builtin/packages/rust-bindgen/package.py b/var/spack/repos/builtin/packages/rust-bindgen/package.py
index c411bc15d1..3c7e42ca8a 100644
--- a/var/spack/repos/builtin/packages/rust-bindgen/package.py
+++ b/var/spack/repos/builtin/packages/rust-bindgen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,9 +29,9 @@ import os
class RustBindgen(Package):
"""The rust programming language toolchain"""
homepage = "http://www.rust-lang.org"
- url = "https://github.com/crabtw/rust-bindgen"
+ url = "https://github.com/servo/rust-bindgen/archive/v0.20.5.tar.gz"
- version('0.16', tag='0.16', git='https://github.com/crabtw/rust-bindgen')
+ version('0.20.5', '3e4d70a5bec540324fdd95bc9e82bebc')
extends("rust")
depends_on("llvm")
diff --git a/var/spack/repos/builtin/packages/rust/package.py b/var/spack/repos/builtin/packages/rust/package.py
index 8a92fca634..219c82fa83 100644
--- a/var/spack/repos/builtin/packages/rust/package.py
+++ b/var/spack/repos/builtin/packages/rust/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -71,7 +71,7 @@ class Rust(Package):
make()
make("install")
- def setup_dependent_package(self, module, ext_spec):
+ def setup_dependent_package(self, module, dependent_spec):
"""
Called before python modules' install() methods.
diff --git a/var/spack/repos/builtin/packages/sabre/package.py b/var/spack/repos/builtin/packages/sabre/package.py
new file mode 100644
index 0000000000..b93b07be51
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sabre/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Sabre(MakefilePackage):
+ """Sabre is a tool that will demultiplex barcoded reads into separate
+ files. It will work on both single-end and paired-end data in fastq
+ format. It simply compares the provided barcodes with each read and
+ separates the read into its appropriate barcode file, after stripping
+ the barcode from the read (and also stripping the quality values of
+ the barcode bases). If a read does not have a recognized barcode,
+ then it is put into the unknown file.
+ """
+
+ homepage = "https://github.com/najoshi/sabre"
+ url = "https://github.com/najoshi/sabre"
+
+ version('2013-09-27', git='https://github.com/najoshi/sabre.git', commit='039a55e500ba07b7e6432ea6ec2ddcfb3471d949')
+
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('sabre', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/salmon/package.py b/var/spack/repos/builtin/packages/salmon/package.py
new file mode 100644
index 0000000000..a323aa1dab
--- /dev/null
+++ b/var/spack/repos/builtin/packages/salmon/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Salmon(CMakePackage):
+ """Salmon is a tool for quantifying the expression of transcripts using
+ RNA-seq data."""
+
+ homepage = "http://combine-lab.github.io/salmon/"
+ url = "https://github.com/COMBINE-lab/salmon/archive/v0.8.2.tar.gz"
+
+ version('0.8.2', 'ee512697bc44b13661a16d4e14cf0a00')
+
+ depends_on('boost')
+
+ def cmake_args(self):
+ args = ['-DBOOST_ROOT=%s' % self.spec['boost'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/sambamba/Makefile.patch b/var/spack/repos/builtin/packages/sambamba/Makefile.patch
new file mode 100644
index 0000000000..086a137569
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sambamba/Makefile.patch
@@ -0,0 +1,11 @@
+--- sambamba/Makefile.orig 2017-09-07 14:31:28.563896131 -0700
++++ sambamba/Makefile 2017-09-07 14:31:35.337912872 -0700
+@@ -20,7 +20,7 @@
+
+ else
+
+-LINK_CMD=gcc -Wl,--gc-sections -o build/sambamba build/sambamba.o $(STATIC_LIB_SUBCMD) -l:libphobos2-ldc.a -l:libdruntime-ldc.a -lrt -lpthread -lm
++LINK_CMD=gcc -Wl,--gc-sections -o build/sambamba build/sambamba.o $(STATIC_LIB_SUBCMD) -l:libphobos2-ldc.a -l:libdruntime-ldc.a -lrt -lpthread -lm -ldl
+ DMD_STATIC_LIBS=-L-Lhtslib -L-l:libhts.a -L-l:libphobos2.a -L-Llz4/lib -L-l:liblz4.a
+
+ define split-debug
diff --git a/var/spack/repos/builtin/packages/sambamba/package.py b/var/spack/repos/builtin/packages/sambamba/package.py
new file mode 100644
index 0000000000..ad8c68547c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sambamba/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 Sambamba(Package):
+ """Sambamba: process your BAM data faster (bioinformatics)"""
+
+ homepage = "http://lomereiter.github.io/sambamba/"
+
+ version('0.6.6', git='https://github.com/lomereiter/sambamba.git',
+ tag='v0.6.6', submodules=True)
+
+ depends_on('ldc~shared', type=('build', 'link'))
+ depends_on('python', type='build')
+
+ resource(
+ name='undeaD',
+ git='https://github.com/dlang/undeaD.git',
+ tag='v1.0.7',
+ )
+
+ patch('Makefile.patch')
+ parallel = False
+
+ def install(self, spec, prefix):
+ make('sambamba-ldmd2-64')
+ mkdirp(prefix.bin)
+ for filename in ('build/sambamba', 'build/sambamba.debug'):
+ install(filename, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/samrai/package.py b/var/spack/repos/builtin/packages/samrai/package.py
index e0648290d6..78b674213d 100644
--- a/var/spack/repos/builtin/packages/samrai/package.py
+++ b/var/spack/repos/builtin/packages/samrai/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Samrai(Package):
+class Samrai(AutotoolsPackage):
"""SAMRAI (Structured Adaptive Mesh Refinement Application Infrastructure)
is an object-oriented C++ software library enables exploration of
numerical, algorithmic, parallel computing, and software issues
@@ -33,10 +33,12 @@ class Samrai(Package):
(SAMR) technology in large-scale parallel application development.
"""
- homepage = "https://computation.llnl.gov/project/SAMRAI/"
- url = "https://computation.llnl.gov/project/SAMRAI/download/SAMRAI-v3.9.1.tar.gz"
+ homepage = "https://computation.llnl.gov/projects/samrai"
+ url = "https://computation.llnl.gov/projects/samrai/download/SAMRAI-v3.11.2.tar.gz"
list_url = homepage
+ version('3.11.2', 'd5f59f8efd755b23b797e46349428206')
+ version('3.10.0', 'ff5f5b8b4a35b52a1b7e37a74166c65a')
version('3.9.1', '232d04d0c995f5abf20d94350befd0b2')
version('3.8.0', 'c18fcffa706346bfa5828b36787ce5fe')
version('3.7.3', '12d574eacadf8c9a70f1bb4cd1a69df6')
@@ -49,29 +51,43 @@ class Samrai(Package):
version('3.3.2-beta', 'e598a085dab979498fcb6c110c4dd26c')
version('2.4.4', '04fb048ed0efe7c531ac10c81cc5f6ac')
- depends_on("mpi")
- depends_on("zlib")
- depends_on("hdf5+mpi")
- depends_on("boost")
+ # Debug mode reduces optimization, includes assertions, debug symbols
+ # and more print statements
+ variant('debug', default=False,
+ description='Compile with reduced optimization and debugging on')
+
+ depends_on('mpi')
+ depends_on('zlib')
+ depends_on('hdf5+mpi')
+ depends_on('boost')
+ depends_on('m4', type='build')
# don't build tools with gcc
patch('no-tool-build.patch', when='%gcc')
- # TODO: currently hard-coded to use openmpi - be careful!
- def install(self, spec, prefix):
- configure(
- "--prefix=%s" % prefix,
- "--with-CXX=%s" % spec['mpi'].prefix.bin + "/mpic++",
- "--with-CC=%s" % spec['mpi'].prefix.bin + "/mpicc",
- "--with-hdf5=%s" % spec['hdf5'].prefix,
- "--with-boost=%s" % spec['boost'].prefix,
- "--with-zlib=%s" % spec['zlib'].prefix,
- "--without-blas",
- "--without-lapack",
- "--with-hypre=no",
- "--with-petsc=no",
- "--enable-opt",
- "--disable-debug")
+ def configure_args(self):
+ options = []
+
+ options.extend([
+ '--with-CXX=%s' % self.spec['mpi'].mpicxx,
+ '--with-CC=%s' % self.spec['mpi'].mpicc,
+ '--with-F77=%s' % self.spec['mpi'].mpifc,
+ '--with-M4=%s' % self.spec['m4'].prefix,
+ '--with-hdf5=%s' % self.spec['hdf5'].prefix,
+ '--with-boost=%s' % self.spec['boost'].prefix,
+ '--with-zlib=%s' % self.spec['zlib'].prefix,
+ '--without-blas',
+ '--without-lapack',
+ '--with-hypre=no',
+ '--with-petsc=no'])
+
+ if '+debug' in self.spec:
+ options.extend([
+ '--disable-opt',
+ '--enable-debug'])
+ else:
+ options.extend([
+ '--enable-opt',
+ '--disable-debug'])
- make()
- make("install")
+ return options
diff --git a/var/spack/repos/builtin/packages/samtools/package.py b/var/spack/repos/builtin/packages/samtools/package.py
index b82a7e55d6..ae0acdde47 100644
--- a/var/spack/repos/builtin/packages/samtools/package.py
+++ b/var/spack/repos/builtin/packages/samtools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,17 +33,21 @@ class Samtools(Package):
homepage = "www.htslib.org"
url = "https://github.com/samtools/samtools/releases/download/1.3.1/samtools-1.3.1.tar.bz2"
+ version('1.6', 'b756f05fd5d1a7042074417edb8c9aea')
+ version('1.4', '8cbd7d2a0ec16d834babcd6c6d85d691')
version('1.3.1', 'a7471aa5a1eb7fc9cc4c6491d73c2d88')
version('1.2', '988ec4c3058a6ceda36503eebecd4122')
- depends_on("ncurses")
- depends_on("htslib", when='@1.3.1:') # htslib became standalone
- depends_on('zlib', when='@1.2') # needed for builtin htslib
+ depends_on('ncurses')
+ # htslib became standalone @1.3.1, must use corresponding version
+ depends_on('htslib@1.6', when='@1.6')
+ depends_on('htslib@1.4', when='@1.4')
+ depends_on('htslib@1.3.1', when='@1.3.1')
def install(self, spec, prefix):
if self.spec.version >= Version('1.3.1'):
configure('--prefix={0}'.format(prefix), '--with-ncurses',
- 'CURSES_LIB=-lncurses')
+ 'CURSES_LIB=-lncursesw')
make()
make('install')
else:
diff --git a/var/spack/repos/builtin/packages/sandbox/package.py b/var/spack/repos/builtin/packages/sandbox/package.py
new file mode 100644
index 0000000000..58c6696243
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sandbox/package.py
@@ -0,0 +1,34 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Sandbox(AutotoolsPackage):
+ """sandbox'd LD_PRELOAD hack by Gentoo Linux"""
+
+ homepage = "https://www.gentoo.org/proj/en/portage/sandbox/"
+ url = "https://dev.gentoo.org/~mgorny/dist/sandbox-2.12.tar.xz"
+
+ version('2.12', 'be97a391dd0696ab1813ca7aad455471')
diff --git a/var/spack/repos/builtin/packages/sas/package.py b/var/spack/repos/builtin/packages/sas/package.py
new file mode 100644
index 0000000000..f6a1cf4101
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sas/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Sas(CMakePackage):
+ """SAS (Static Analysis Suite) is a powerful tool for running static
+ analysis on C++ code."""
+
+ homepage = "https://github.com/dpiparo/SAS"
+ url = "https://github.com/dpiparo/SAS/archive/0.1.3.tar.gz"
+
+ version('0.2.0', 'e6fecfb71d9cdce342c8593f4728c9f0')
+ version('0.1.4', '20d7311258f2a59c9367ae1576c392b6')
+ version('0.1.3', '1e6572afcc03318d16d7321d40eec0fd')
+
+ depends_on('python@2.7:')
+ depends_on('llvm@3.5:')
+ depends_on('cmake@2.8:', type='build')
+
+ def cmake_args(self):
+ args = [
+ '-DLLVM_DEV_DIR=%s' % self.spec['llvm'].prefix
+ ]
+ return args
diff --git a/var/spack/repos/builtin/packages/satsuma2/package.py b/var/spack/repos/builtin/packages/satsuma2/package.py
new file mode 100644
index 0000000000..4859c97c0e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/satsuma2/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Satsuma2(CMakePackage):
+ """Satsuma2 is an optimsed version of Satsuma, a tool to reliably align
+ large and complex DNA sequences providing maximum sensitivity (to find
+ all there is to find), specificity (to only find real homology) and
+ speed (to accomodate the billions of base pairs in vertebrate genomes).
+ """
+
+ homepage = "https://github.com/bioinfologics/satsuma2"
+ url = "https://github.com/bioinfologics/satsuma2"
+
+ version('2016-11-22', git='https://github.com/bioinfologics/satsuma2.git', commit='da694aeecf352e344b790bea4a7aaa529f5b69e6')
+
+ def install(self, spec, prefix):
+ install_tree(join_path('spack-build', 'bin'), prefix.bin)
diff --git a/var/spack/repos/builtin/packages/ipp/package.py b/var/spack/repos/builtin/packages/savanna/package.py
index c48ace79c1..af2cdf9ed8 100644
--- a/var/spack/repos/builtin/packages/ipp/package.py
+++ b/var/spack/repos/builtin/packages/savanna/package.py
@@ -1,12 +1,12 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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
+# For details, see https://github.com/spack/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
@@ -23,28 +23,29 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
-import os
+from distutils.dir_util import copy_tree
-from spack.pkg.builtin.intel import IntelInstaller
+class Savanna(MakefilePackage):
+ """CODARcode Savanna runtime framework for high performance,
+ workflow management using Swift/T and ADIOS.
+ """
-class Ipp(IntelInstaller):
- """Intel Integrated Performance Primitives.
+ homepage = "https://github.com/CODARcode/savanna"
+ url = "https://github.com/CODARcode/savanna/archive/v0.5.tar.gz"
- Note: You will have to add the download file to a
- mirror so that Spack can find it. For instructions on how to set up a
- mirror, see http://spack.readthedocs.io/en/latest/mirrors.html"""
+ version('develop', git='https://github.com/CODARcode/savanna.git',
+ branch='master', submodules=True)
+ version('0.5', git='https://github.com/CODARcode/savanna.git',
+ tag='0.5', submodules=True)
- homepage = "https://software.intel.com/en-us/intel-ipp"
+ variant('tau', default=False, description='Enable TAU profiling support')
- version('9.0.3.210', '0e1520dd3de7f811a6ef6ebc7aa429a3',
- url="file://%s/l_ipp_9.0.3.210.tgz" % os.getcwd())
+ depends_on('mpi')
+ depends_on('stc')
+ depends_on('adios +fortran +zlib +sz +zfp +staging')
+ depends_on('mpix-launch-swift')
+ depends_on('tau', when='+tau')
def install(self, spec, prefix):
-
- self.intel_prefix = os.path.join(prefix, "pkg")
- IntelInstaller.install(self, spec, prefix)
-
- ipp_dir = os.path.join(self.intel_prefix, "ipp")
- for f in os.listdir(ipp_dir):
- os.symlink(os.path.join(ipp_dir, f), os.path.join(self.prefix, f))
+ copy_tree('.', prefix)
diff --git a/var/spack/repos/builtin/packages/saws/package.py b/var/spack/repos/builtin/packages/saws/package.py
new file mode 100644
index 0000000000..bda54644c6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/saws/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Saws(AutotoolsPackage):
+ """The Scientific Application Web server (SAWs) turns any C or C++
+ scientific or engineering application code into a webserver,
+ allowing one to examine (and even modify) the state of the
+ simulation with any browser from anywhere."""
+ homepage = "https://bitbucket.org/saws/saws/wiki/Home"
+
+ version('develop', git='https://bitbucket.org/saws/saws.git', tag='master')
+ version('0.1.0', git='https://bitbucket.org/saws/saws.git', tag='v0.1.0')
diff --git a/var/spack/repos/builtin/packages/sbt/package.py b/var/spack/repos/builtin/packages/sbt/package.py
index 977939c9df..baa93fa93a 100644
--- a/var/spack/repos/builtin/packages/sbt/package.py
+++ b/var/spack/repos/builtin/packages/sbt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,7 @@ class Sbt(Package):
version('0.13.12', 'cec3071d46ef13334c8097cc3467ff28')
- depends_on('jdk')
+ depends_on('java')
def install(self, spec, prefix):
shutil.copytree('bin', join_path(prefix, 'bin'), symlinks=True)
diff --git a/var/spack/repos/builtin/packages/scala/package.py b/var/spack/repos/builtin/packages/scala/package.py
new file mode 100644
index 0000000000..8c36f9e981
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scala/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Scala(Package):
+ """Scala is a general-purpose programming language providing support for
+ functional programming and a strong static type system. Designed to be
+ concise, many of Scala's design decisions were designed to build from
+ criticisms of Java.
+ """
+
+ homepage = "https://www.scala-lang.org/"
+ url = "https://downloads.lightbend.com/scala/2.12.1/scala-2.12.1.tgz"
+
+ version('2.12.1', '3eaecbce019b0fa3067503846e292b32')
+ version('2.11.11', '3f5b76001f60cbc31111ddb81de5ea07')
+ version('2.20.6', 'd79dc9fdc627b73289306bdaec81ca98')
+
+ depends_on('java')
+
+ def install(self, spec, prefix):
+
+ def install_dir(dirname):
+ install_tree(dirname, join_path(prefix, dirname))
+
+ install_dir('bin')
+ install_dir('lib')
+ install_dir('doc')
+ install_dir('man')
diff --git a/var/spack/repos/builtin/packages/scalasca/package.py b/var/spack/repos/builtin/packages/scalasca/package.py
index 228d814aed..21f50cf1fe 100644
--- a/var/spack/repos/builtin/packages/scalasca/package.py
+++ b/var/spack/repos/builtin/packages/scalasca/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Scalasca(Package):
+class Scalasca(AutotoolsPackage):
"""Scalasca is a software tool that supports the performance optimization
of parallel programs by measuring and analyzing their runtime
behavior. The analysis identifies potential performance
@@ -38,29 +38,34 @@ class Scalasca(Package):
homepage = "http://www.scalasca.org"
url = "http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz"
- version('2.2.2', '2bafce988b0522d18072f7771e491ab9',
- url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.2/dist/scalasca-2.2.2.tar.gz')
-
- version('2.1', 'bab9c2b021e51e2ba187feec442b96e6',
- url='http://apps.fz-juelich.de/scalasca/releases/scalasca/2.1/dist/scalasca-2.1.tar.gz')
+ version('2.3.1', 'a83ced912b9d2330004cb6b9cefa7585')
+ version('2.2.2', '2bafce988b0522d18072f7771e491ab9')
+ version('2.1', 'bab9c2b021e51e2ba187feec442b96e6')
depends_on("mpi")
- ##########
- # Hard-code dependencies for Scalasca according to what stated in the
- # release page
- # The OTF2 library path should be detected automatically from SCOREP
- # SCALASCA 2.2.2
- depends_on("scorep@1.4:", when='@2.2.2')
- depends_on("cube@4.3:", when='@2.2.2')
- # SCALASCA 2.1
- depends_on("scorep@1.3", when='@2.1')
- depends_on("cube@4.2:", when='@2.1')
- ##########
- def install(self, spec, prefix):
- configure_args = ["--prefix=%s" % prefix,
- "--with-cube=%s" % spec['cube'].prefix.bin,
- "--enable-shared"]
- configure(*configure_args)
- make()
- make("install")
+ # version 2.3
+ depends_on('cube@4.3:', when='@2.3:')
+ depends_on('otf2@2:', when='@2.3:')
+
+ # version 2.1+
+ depends_on('cube@4.2', when='@2.1:2.2.999')
+ depends_on('otf2@1.4', when='@2.1:2.2.999')
+
+ def url_for_version(self, version):
+ return 'http://apps.fz-juelich.de/scalasca/releases/scalasca/{0}/dist/scalasca-{1}.tar.gz'.format(version.up_to(2), version)
+
+ def configure_args(self):
+ spec = self.spec
+
+ config_args = ["--enable-shared"]
+
+ config_args.append("--with-cube=%s" % spec['cube'].prefix.bin)
+ config_args.append("--with-otf2=%s" % spec['otf2'].prefix.bin)
+
+ if self.spec['mpi'].name == 'openmpi':
+ config_args.append("--with-mpi=openmpi")
+ elif self.spec.satisfies('^mpich@3:'):
+ config_args.append("--with-mpi=mpich3")
+
+ return config_args
diff --git a/var/spack/repos/builtin/packages/scalpel/package.py b/var/spack/repos/builtin/packages/scalpel/package.py
new file mode 100644
index 0000000000..f7d2834732
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scalpel/package.py
@@ -0,0 +1,101 @@
+##############################################################################
+# 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/spack/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 Scalpel(MakefilePackage):
+ """Scalpel is a software package for detecting INDELs (INsertions and
+ DELetions) mutations in a reference genome which has been sequenced
+ with next-generation sequencing technology.
+ """
+
+ homepage = "http://scalpel.sourceforge.net/index.html"
+ url = "https://downloads.sourceforge.net/project/scalpel/scalpel-0.5.3.tar.gz"
+
+ version('0.5.3', '682c9f1cd6ab2cb11c6866f303c673f0')
+
+ depends_on('cmake')
+ depends_on('perl@5.10.0:')
+
+ # bamtools needs to build before the others.
+ parallel = False
+
+ @run_before('install')
+ def filter_sbang(self):
+ """Run before install so that the standard Spack sbang install hook
+ can fix up the path to the perl|python binary.
+ """
+
+ with working_dir(self.stage.source_path):
+ kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
+
+ match = '^#!/usr/bin/env perl'
+ perl = self.spec['perl'].command
+ substitute = "#!{perl}".format(perl=perl)
+ files = ['FindDenovos.pl', 'scalpel-export',
+ 'scalpel-discovery', 'FindVariants.pl',
+ 'FindSomatic.pl']
+ filter_file(match, substitute, *files, **kwargs)
+
+ # Scalpel doesn't actually *have* an install step. The authors
+ # expect you to unpack the tarball, build it in the resulting
+ # directory, and add that directory to your PATH. The Perl
+ # scripts use `FindBin` to discover the directory in which they
+ # live and they run their own dedicated copies of {bam,sam}tools
+ # and etc... by explicitly naming the executables in their directory.
+ #
+ # Rather than trying to fix their code I just copied the juicy
+ # bits into prefix.bin. It's not normal, but....
+ #
+ def install(self, spec, prefix):
+ destdir = prefix.bin # see the note above....
+
+ mkdirp(destdir)
+
+ files = ['FindSomatic.pl', 'HashesIO.pm', 'MLDBM.pm',
+ 'scalpel-export', 'Utils.pm', 'FindDenovos.pl',
+ 'FindVariants.pl', 'scalpel-discovery',
+ 'SequenceIO.pm', 'Usage.pm']
+ for f in files:
+ install(f, destdir)
+
+ dirs = ['Text', 'MLDBM', 'Parallel', ]
+ for d in dirs:
+ install_tree(d, join_path(destdir, d))
+
+ install_tree('bamtools-2.3.0/bin',
+ join_path(destdir, 'bamtools-2.3.0', 'bin'))
+ install_tree('bamtools-2.3.0/lib',
+ join_path(destdir, 'bamtools-2.3.0', 'lib'))
+
+ mkdirp(join_path(destdir, 'bcftools-1.1'))
+ install('bcftools-1.1/bcftools', join_path(destdir, 'bcftools-1.1'))
+
+ mkdirp(join_path(destdir, 'Microassembler'))
+ install('Microassembler/Microassembler',
+ join_path(destdir, 'Microassembler'))
+
+ mkdirp(join_path(destdir, 'samtools-1.1'))
+ install('samtools-1.1/samtools', join_path(destdir, 'samtools-1.1'))
diff --git a/var/spack/repos/builtin/packages/scons/package.py b/var/spack/repos/builtin/packages/scons/package.py
index 54f894da6f..8bf6ceddcc 100644
--- a/var/spack/repos/builtin/packages/scons/package.py
+++ b/var/spack/repos/builtin/packages/scons/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,7 +27,12 @@ from spack import *
class Scons(PythonPackage):
"""SCons is a software construction tool"""
+
homepage = "http://scons.org"
- url = "http://downloads.sourceforge.net/project/scons/scons/2.5.0/scons-2.5.0.tar.gz"
+ url = "https://pypi.io/packages/source/s/scons/scons-2.5.1.tar.gz"
+
+ version('2.5.1', '3eac81e5e8206304a9b4683c57665aa4')
+ version('2.5.0', 'bda5530a70a41a7831d83c8b191c021e')
- version('2.5.0', '9e00fa0df8f5ca5c5f5975b40e0ed354')
+ # Python 3 is not supported
+ depends_on('python@:2.8', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/scorec-core/package.py b/var/spack/repos/builtin/packages/scorec-core/package.py
new file mode 100644
index 0000000000..e629a63ebe
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scorec-core/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 ScorecCore(CMakePackage):
+ """The SCOREC Core is a set of C/C++ libraries for unstructured mesh
+ simulations on supercomputers.
+ """
+
+ homepage = 'https://www.scorec.rpi.edu/'
+ url = 'https://github.com/SCOREC/core.git'
+
+ version('develop', git=url)
+
+ depends_on('mpi')
+ depends_on('zoltan')
+ depends_on('cmake@3.0:', type='build')
+
+ @property
+ def std_cmake_args(self):
+ # Default cmake RPATH options causes build failure on bg-q
+ if self.spec.satisfies('platform=bgq'):
+ return ['-DCMAKE_INSTALL_PREFIX:PATH={0}'.format(self.prefix)]
+ else:
+ return self._std_args(self)
+
+ def cmake_args(self):
+ options = []
+ options.append('-DCMAKE_C_COMPILER=%s' % self.spec['mpi'].mpicc)
+ options.append('-DCMAKE_CXX_COMPILER=%s' % self.spec['mpi'].mpicxx)
+ options.append('-DENABLE_ZOLTAN=ON')
+
+ if self.compiler.name == 'xl':
+ options.append('-DSCOREC_EXTRA_CXX_FLAGS=%s' % '-qminimaltoc')
+
+ return options
diff --git a/var/spack/repos/builtin/packages/scorep/gcc7.patch b/var/spack/repos/builtin/packages/scorep/gcc7.patch
new file mode 100644
index 0000000000..7383ee15ba
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scorep/gcc7.patch
@@ -0,0 +1,42 @@
+diff -ru scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_gcc_version_compatibility.h scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_gcc_version_compatibility.h
+--- scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_gcc_version_compatibility.h 2017-08-15 14:46:27.353875030 +0200
++++ scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_gcc_version_compatibility.h 2017-08-15 14:52:18.458118812 +0200
+@@ -27,6 +27,11 @@
+ DECL_SECTION_NAME( decl ) = build_string( strlen( section ), section )
+ #endif
+
++#if SCOREP_GCC_PLUGIN_TARGET_VERSION < 7000
++#define SET_DECL_ALIGN( decl, align ) \
++ DECL_ALIGN( decl ) = ( align )
++#endif
++
+ #if SCOREP_GCC_PLUGIN_TARGET_VERSION >= 5000
+ #define varpool_finalize_decl( decl ) varpool_node::finalize_decl( decl )
+ #define cgraph_get_node( decl ) cgraph_node::get( decl )
+diff -ru scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_inst_descriptor.inc.c scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_inst_descriptor.inc.c
+--- scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_inst_descriptor.inc.c 2017-08-15 14:46:27.353875030 +0200
++++ scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_inst_descriptor.inc.c 2017-08-15 14:52:56.220854113 +0200
+@@ -194,7 +194,7 @@
+ TREE_TYPE( region_descr_value ) );
+
+ /* Align the struct generously, so that it works for 32 and 64 bit */
+- DECL_ALIGN( region_descr_var ) = 64 * BITS_PER_UNIT;
++ SET_DECL_ALIGN( region_descr_var, 64 * BITS_PER_UNIT );
+ DECL_USER_ALIGN( region_descr_var ) = 1;
+
+ /* The struct is 64 bytes, because of reserved entries */
+diff -ru scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_tree-flow.h scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_tree-flow.h
+--- scorep-3.1.orig/src/adapters/compiler/gcc-plugin/scorep_plugin_tree-flow.h 2017-08-15 14:46:27.353875030 +0200
++++ scorep-3.1/src/adapters/compiler/gcc-plugin/scorep_plugin_tree-flow.h 2017-08-15 14:49:26.163888408 +0200
+@@ -23,6 +23,11 @@
+ #include "stringpool.h"
+ #include "basic-block.h"
+ #include "tree-ssa-alias.h"
++
++#if SCOREP_GCC_PLUGIN_TARGET_VERSION >= 7000
++#include "tree-vrp.h"
++#endif
++
+ #include "tree-ssanames.h"
+ #include "internal-fn.h"
+ #include "gimple-expr.h"
diff --git a/var/spack/repos/builtin/packages/scorep/package.py b/var/spack/repos/builtin/packages/scorep/package.py
index e0f7972304..fd7da69442 100644
--- a/var/spack/repos/builtin/packages/scorep/package.py
+++ b/var/spack/repos/builtin/packages/scorep/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,25 +25,30 @@
from spack import *
-class Scorep(Package):
+class Scorep(AutotoolsPackage):
"""The Score-P measurement infrastructure is a highly scalable and
easy-to-use tool suite for profiling, event tracing, and online analysis
of HPC applications.
"""
homepage = "http://www.vi-hps.org/projects/score-p"
- url = "http://www.vi-hps.org/upload/packages/scorep/scorep-1.2.3.tar.gz"
+ url = "http://www.vi-hps.org/upload/packages/scorep/scorep-2.0.2.tar.gz"
- version('2.0.2', '8f00e79e1b5b96e511c5ebecd10b2888',
- url='http://www.vi-hps.org/upload/packages/scorep/scorep-2.0.2.tar.gz')
- version('1.4.2', '3b9a042b13bdd5836452354e6567f71e',
- url='http://www.vi-hps.org/upload/packages/scorep/scorep-1.4.2.tar.gz')
- version('1.3', '9db6f957b7f51fa01377a9537867a55c',
- url='http://www.vi-hps.org/upload/packages/scorep/scorep-1.3.tar.gz')
+ version('3.1', '065bf8eb08398e8146c895718ddb9145')
+ version('3.0', '44da8beaa3f71436a5f6fe51938aab2f')
+ version('2.0.2', '8f00e79e1b5b96e511c5ebecd10b2888')
+ version('1.4.2', '3b9a042b13bdd5836452354e6567f71e')
+ version('1.3', '9db6f957b7f51fa01377a9537867a55c')
+
+ patch('gcc7.patch')
##########
# Dependencies for SCORE-P are quite tight. See the homepage for more
# information.
+ # SCOREP 3
+ depends_on('otf2@2:', when='@3:')
+ depends_on('opari2@2:', when='@3:')
+ depends_on('cube@4.3:', when='@3:')
# SCOREP 2.0.2
depends_on('otf2@2.0', when='@2.0.2')
depends_on('opari2@2.0', when='@2.0.2')
@@ -60,20 +65,47 @@ class Scorep(Package):
depends_on("mpi")
depends_on("papi")
+ depends_on('pdt')
+
+ variant('shmem', default=False, description='Enable shmem tracing')
+
+ # Score-P requires a case-sensitive file system, and therefore
+ # does not work on macOS
+ # https://github.com/spack/spack/issues/1609
+ conflicts('platform=darwin')
+
+ def configure_args(self):
+ spec = self.spec
+
+ config_args = [
+ "--with-otf2=%s" % spec['otf2'].prefix.bin,
+ "--with-opari2=%s" % spec['opari2'].prefix.bin,
+ "--with-cube=%s" % spec['cube'].prefix.bin,
+ "--with-papi-header=%s" % spec['papi'].prefix.include,
+ "--with-papi-lib=%s" % spec['papi'].prefix.lib,
+ "--with-pdt=%s" % spec['pdt'].prefix.bin,
+ "--enable-shared"]
+
+ cname = spec.compiler.name
+ config_args.append('--with-nocross-compiler-suite={0}'.format(cname))
+
+ if spec.satisfies('^intel-mpi'):
+ config_args.append('--with-mpi=intel3')
+ elif spec.satisfies('^mpich') or spec.satisfies('^mvapich2'):
+ config_args.append('--with-mpi=mpich3')
+ elif spec.satisfies('^openmpi'):
+ config_args.append('--with-mpi=openmpi')
+
+ if '~shmem' in spec:
+ config_args.append("--without-shmem")
+
+ config_args.extend([
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
+ 'MPICC={0}'.format(spec['mpi'].mpicc),
+ 'MPICXX={0}'.format(spec['mpi'].mpicxx),
+ 'MPIF77={0}'.format(spec['mpi'].mpif77),
+ 'MPIFC={0}'.format(spec['mpi'].mpifc)
+ ])
- def install(self, spec, prefix):
- configure = Executable(join_path(self.stage.source_path, 'configure'))
- with working_dir('spack-build', create=True):
- configure_args = [
- "--prefix=%s" % prefix,
- "--with-otf2=%s" % spec['otf2'].prefix.bin,
- "--with-opari2=%s" % spec['opari2'].prefix.bin,
- "--with-cube=%s" % spec['cube'].prefix.bin,
- "--with-papi-header=%s" % spec['papi'].prefix.include,
- "--with-papi-lib=%s" % spec['papi'].prefix.lib,
- "--enable-shared",
- "CFLAGS=-fPIC",
- "CXXFLAGS=-fPIC"]
- configure(*configure_args)
- make()
- make("install")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/scotch/esmumps-ldflags-6.0.4.patch b/var/spack/repos/builtin/packages/scotch/esmumps-ldflags-6.0.4.patch
new file mode 100644
index 0000000000..e22ba17b34
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scotch/esmumps-ldflags-6.0.4.patch
@@ -0,0 +1,11 @@
+--- a/src/esmumps/Makefile 2017-06-21 10:53:31.595758201 +0200
++++ b/src/esmumps/Makefile 2017-06-21 10:54:30.811757141 +0200
+@@ -44,7 +44,7 @@
+ $(CC) $(CFLAGS) $(CLIBFLAGS) -I$(includedir) -c $(<) -o $(@)
+
+ %$(EXE) : %.c
+- $(CC) $(CFLAGS) -I$(includedir) $(<) -o $(@) -L$(libdir) $(LDFLAGS) -L. -l$(ESMUMPSLIB) -l$(SCOTCHLIB) -lscotch -l$(SCOTCHLIB)errexit -lm
++ $(CC) $(CFLAGS) -I$(includedir) $(<) -o $(@) -L$(libdir) -L. -l$(ESMUMPSLIB) -l$(SCOTCHLIB) -lscotch -l$(SCOTCHLIB)errexit -lm $(LDFLAGS)
+
+ ##
+ ## Project rules.
diff --git a/var/spack/repos/builtin/packages/scotch/nonthreaded-6.0.4.patch b/var/spack/repos/builtin/packages/scotch/nonthreaded-6.0.4.patch
new file mode 100644
index 0000000000..89d17e253e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scotch/nonthreaded-6.0.4.patch
@@ -0,0 +1,11 @@
+--- scotch_6.0.4.orig/src/libscotch/common.h 2015-03-01 10:14:02.000000000 +0100
++++ scotch_6.0.4/src/libscotch/common.h 2017-03-27 13:07:18.644221999 +0200
+@@ -306,6 +306,8 @@
+ ThreadLaunchStartFunc stafptr; /*+ Pointer to start routine +*/
+ ThreadLaunchJoinFunc joifptr; /*+ Pointer to join routine +*/
+ ThreadBarrier barrdat; /*+ Barrier data structure +*/
++#else
++ int thrdnbr; /* dummy for non-threaded */
+ #endif /* ((defined COMMON_PTHREAD) || (defined SCOTCH_PTHREAD)) */
+ } ThreadGroupHeader;
+
diff --git a/var/spack/repos/builtin/packages/scotch/package.py b/var/spack/repos/builtin/packages/scotch/package.py
index ca8e3e3fa0..48ae1490c8 100644
--- a/var/spack/repos/builtin/packages/scotch/package.py
+++ b/var/spack/repos/builtin/packages/scotch/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,7 +22,6 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
-import os
from spack import *
@@ -31,8 +30,7 @@ class Scotch(Package):
partitioning, graph clustering, and sparse matrix ordering."""
homepage = "http://www.labri.fr/perso/pelegrin/scotch/"
- url = "http://gforge.inria.fr/frs/download.php/latestfile/298/scotch_6.0.3.tar.gz"
- base_url = "http://gforge.inria.fr/frs/download.php/latestfile/298"
+ url = "http://gforge.inria.fr/frs/download.php/latestfile/298/scotch_6.0.4.tar.gz"
list_url = "http://gforge.inria.fr/frs/?group_id=248"
version('6.0.4', 'd58b825eb95e1db77efe8c6ff42d329f')
@@ -50,24 +48,55 @@ class Scotch(Package):
description='Build a shared version of the library')
variant('metis', default=True,
description='Build metis and parmetis wrapper libraries')
+ variant('int64', default=False,
+ description='Use int64_t for SCOTCH_Num typedef')
- depends_on('flex@:2.6.1', type='build')
+ # Does not build with flex 2.6.[23]
+ depends_on('flex@:2.6.1,2.6.4:', type='build')
depends_on('bison', type='build')
depends_on('mpi', when='+mpi')
depends_on('zlib', when='+compression')
+ # Version-specific patches
+ patch('nonthreaded-6.0.4.patch', when='@6.0.4')
+ patch('esmumps-ldflags-6.0.4.patch', when='@6.0.4')
+
+ # NOTE: In cross-compiling environment parallel build
+ # produces weird linker errors.
+ parallel = False
+
# NOTE: Versions of Scotch up to version 6.0.0 don't include support for
# building with 'esmumps' in their default packages. In order to enable
# support for this feature, we must grab the 'esmumps' enabled archives
# from the Scotch hosting site. These alternative archives include a
# superset of the behavior in their default counterparts, so we choose to
# always grab these versions for older Scotch versions for simplicity.
- def url_for_version(self, version):
- return super(Scotch, self).url_for_version(version)
-
@when('@:6.0.0')
def url_for_version(self, version):
- return '%s/scotch_%s_esmumps.tar.gz' % (Scotch.base_url, version)
+ url = "http://gforge.inria.fr/frs/download.php/latestfile/298/scotch_{0}_esmumps.tar.gz"
+ return url.format(version)
+
+ @property
+ def libs(self):
+
+ shared = '+shared' in self.spec
+ libraries = ['libscotch', 'libscotcherr']
+ zlibs = []
+
+ if '+mpi' in self.spec:
+ libraries = ['libptscotch', 'libptscotcherr'] + libraries
+ if '+esmumps' in self.spec:
+ libraries = ['libptesmumps'] + libraries
+ elif '~mpi+esmumps' in self.spec:
+ libraries = ['libesmumps'] + libraries
+
+ scotchlibs = find_libraries(
+ libraries, root=self.prefix, recurse=True, shared=shared
+ )
+ if '+compression' in self.spec:
+ zlibs = self.spec['zlib'].libs
+
+ return scotchlibs + zlibs
def patch(self):
self.configure()
@@ -83,9 +112,13 @@ class Scotch(Package):
'-DCOMMON_RANDOM_FIXED_SEED',
'-DSCOTCH_DETERMINISTIC',
'-DSCOTCH_RENAME',
- '-DIDXSIZE64'
+ '-DIDXSIZE64', # SCOTCH_Idx typedef: indices for addressing
]
+ # SCOTCH_Num typedef: size of integers in arguments
+ if '+int64' in self.spec:
+ cflags.append('-DINTSIZE64')
+
if self.spec.satisfies('platform=darwin'):
cflags.extend([
'-Drestrict=__restrict'
@@ -96,7 +129,9 @@ class Scotch(Package):
if self.spec.satisfies('platform=darwin'):
makefile_inc.extend([
'LIB = .dylib',
- 'CLIBFLAGS = -dynamiclib -fPIC',
+ 'CLIBFLAGS = -dynamiclib {0}'.format(
+ self.compiler.pic_flag
+ ),
'RANLIB = echo',
'AR = $(CC)',
'ARFLAGS = -dynamiclib $(LDFLAGS) -Wl,-install_name -Wl,%s/$(notdir $@) -undefined dynamic_lookup -o ' % prefix.lib # noqa
@@ -104,12 +139,12 @@ class Scotch(Package):
else:
makefile_inc.extend([
'LIB = .so',
- 'CLIBFLAGS = -shared -fPIC',
+ 'CLIBFLAGS = -shared {0}'.format(self.compiler.pic_flag),
'RANLIB = echo',
'AR = $(CC)',
'ARFLAGS = -shared $(LDFLAGS) -o'
])
- cflags.append('-fPIC')
+ cflags.append(self.compiler.pic_flag)
else:
makefile_inc.extend([
'LIB = .a',
@@ -137,12 +172,17 @@ class Scotch(Package):
if '+compression' in self.spec:
cflags.append('-DCOMMON_FILE_COMPRESS_GZ')
- ldflags.append('-L%s -lz' % (self.spec['zlib'].prefix.lib))
+ ldflags.append(' {0} '.format(self.spec['zlib'].libs.joined()))
cflags.append('-DCOMMON_PTHREAD')
+
+ # NOTE: bg-q platform needs -lpthread (and not -pthread)
+ # otherwise we get illegal instruction error during runtime
if self.spec.satisfies('platform=darwin'):
cflags.append('-DCOMMON_PTHREAD_BARRIER')
ldflags.append('-lm -pthread')
+ elif self.spec.satisfies('platform=bgq'):
+ ldflags.append('-lm -lrt -lpthread')
else:
ldflags.append('-lm -lrt -pthread')
@@ -150,8 +190,8 @@ class Scotch(Package):
# General Features #
- flex_path = os.path.join(self.spec['flex'].prefix.bin, 'flex')
- bison_path = os.path.join(self.spec['bison'].prefix.bin, 'bison')
+ flex_path = self.spec['flex'].command.path
+ bison_path = self.spec['bison'].command.path
makefile_inc.extend([
'EXE =',
'OBJ = .o',
@@ -217,4 +257,4 @@ class Scotch(Package):
install_tree('bin', prefix.bin)
install_tree('lib', prefix.lib)
install_tree('include', prefix.include)
- install_tree('man/man1', prefix.share_man1)
+ install_tree('man/man1', prefix.share.man.man1)
diff --git a/var/spack/repos/builtin/packages/scr/package.py b/var/spack/repos/builtin/packages/scr/package.py
index 2b01c60b3e..1f49f34969 100644
--- a/var/spack/repos/builtin/packages/scr/package.py
+++ b/var/spack/repos/builtin/packages/scr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,24 +24,123 @@
##############################################################################
from spack import *
+import os
+import shutil
-class Scr(Package):
+
+class Scr(CMakePackage):
"""SCR caches checkpoint data in storage on the compute nodes of a
Linux cluster to provide a fast, scalable checkpoint/restart
capability for MPI codes"""
- homepage = "https://computation.llnl.gov/project/scr/"
+ homepage = "http://computation.llnl.gov/projects/scalable-checkpoint-restart-for-mpi"
+
+ # NOTE: scr-v1.1.8 is built with autotools and is not properly build here.
+ # scr-v1.1.8 will be deprecated with the upcoming release of v1.2.0
+ # url = "https://github.com/LLNL/scr/releases/download/v1.1.8/scr-1.1.8.tar.gz"
+ # version('1.1.8', '6a0f11ad18e27fcfc00a271ff587b06e')
+
+ version('master', git='https://github.com/llnl/scr.git', branch='master')
+
+ depends_on('pdsh+static_modules', type=('build', 'run'))
+ depends_on('zlib')
+ depends_on('mpi')
+
+ variant('dtcmp', default=True,
+ description="Build with DTCMP. "
+ "Necessary to enable user directory naming at runtime")
+ depends_on('dtcmp', when="+dtcmp")
+
+ variant('libyogrt', default=True,
+ description="Build SCR with libyogrt for get_time_remaining.")
+ depends_on('libyogrt', when="+libyogrt")
+
+ # MySQL not yet in spack
+ # variant('mysql', default=True, decription="MySQL database for logging")
+ # depends_on('mysql', when="+mysql")
+
+ variant('scr_config', default='scr.conf',
+ description='Location for SCR to find its system config file. '
+ 'May be either absolute or relative to the install prefix')
+ variant('copy_config', default=None,
+ description='Location from which to copy SCR system config file. '
+ 'Must be an absolute path.')
+
+ variant('fortran', default=True,
+ description="Build SCR with fortran bindings")
+
+ variant('resource_manager', default='SLURM',
+ values=('SLURM', 'APRUN', 'PMIX', 'LSF', 'NONE'),
+ multi=False,
+ description="Resource manager for which to configure SCR.")
+
+ variant('async_api', default='NONE',
+ values=('NONE', 'CRAY_DW', 'IBM_BBAPI', 'INTEL_CPPR'),
+ multi=False,
+ description="Asynchronous data transfer API to use with SCR.")
+
+ variant('file_lock', default='FLOCK',
+ values=('FLOCK', 'FNCTL', 'NONE'),
+ multi=False,
+ description='File locking style for SCR.')
+
+ variant('cache_base', default='/tmp',
+ description='Compile time default location for checkpoint cache.')
+ variant('cntl_base', default='/tmp',
+ description='Compile time default location for control directory.')
+
+ def get_abs_path_rel_prefix(self, path):
+ # Return path if absolute, otherwise prepend prefix
+ if os.path.isabs(path):
+ return path
+ else:
+ return join_path(self.spec.prefix, path)
+
+ def cmake_args(self):
+ spec = self.spec
+ args = []
+
+ args.append('-DENABLE_FORTRAN={0}'.format('+fortran' in spec))
+
+ conf_path = self.get_abs_path_rel_prefix(
+ self.spec.variants['scr_config'].value)
+ args.append('-DCMAKE_SCR_CONFIG_FILE={0}'.format(conf_path))
+
+ # We uppercase the values for these to avoid unnecessary user error.
+ args.append('-DSCR_RESOURCE_MANAGER={0}'.format(
+ spec.variants['resource_manager'].value.upper()))
+
+ args.append('-DSCR_ASYNC_API={0}'.format(
+ spec.variants['async_api'].value.upper()))
+
+ args.append('-DSCR_FILE_LOCK={0}'.format(
+ spec.variants['file_lock'].value.upper()))
+
+ args.append('-DSCR_CACHE_BASE={0}'.format(
+ spec.variants['cache_base'].value))
+
+ args.append('-DSCR_CNTL_BASE={0}'.format(
+ spec.variants['cntl_base'].value))
+
+ args.append('-DWITH_PDSH_PREFIX={0}'.format(spec['pdsh'].prefix))
+
+ if "+dtcmp" in spec:
+ args.append('-DWITH_DTCMP_PREFIX={0}'.format(spec['dtcmp'].prefix))
+
+ if "+libyogrt" in spec:
+ args.append('-DWITH_YOGRT_PREFIX={0}'.format(
+ spec['libyogrt'].prefix))
- depends_on("mpi")
-# depends_on("dtcmp")
+ # if "+mysql" in spec:
+ # args.append('-DWITH_MYSQL_PREFIX={0}'.format(
+ # spec['mysql'].prefix))
- version('1.1-7', 'a5930e9ab27d1b7049447c2fd7734ebd',
- url='http://downloads.sourceforge.net/project/scalablecr/releases/scr-1.1-7.tar.gz')
- version('1.1.8', '6a0f11ad18e27fcfc00a271ff587b06e',
- url='https://github.com/hpc/scr/releases/download/v1.1.8/scr-1.1.8.tar.gz')
+ return args
- def install(self, spec, prefix):
- configure("--prefix=" + prefix,
- "--with-scr-config-file=" + prefix + "/etc/scr.conf")
- make()
- make("install")
+ @run_after('install')
+ def copy_config(self):
+ spec = self.spec
+ if spec.variants['copy_config'].value:
+ dest_path = self.get_abs_path_rel_prefix(
+ spec.variants['scr_config'].value)
+ shutil.copyfile(spec.variants['copy_config'].value, dest_path)
diff --git a/var/spack/repos/builtin/packages/screen/package.py b/var/spack/repos/builtin/packages/screen/package.py
index 7edfb44a4d..34bc952ec6 100644
--- a/var/spack/repos/builtin/packages/screen/package.py
+++ b/var/spack/repos/builtin/packages/screen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Screen(Package):
+class Screen(AutotoolsPackage):
"""Screen is a full-screen window manager that multiplexes a physical
terminal between several processes, typically interactive shells.
"""
@@ -51,8 +51,3 @@ class Screen(Package):
version('3.7.1', '27cdd29318446561ef7c966041cbd2c9')
depends_on('ncurses')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/scripts/package.py b/var/spack/repos/builtin/packages/scripts/package.py
index 7086cfd6fe..ddd184b44f 100644
--- a/var/spack/repos/builtin/packages/scripts/package.py
+++ b/var/spack/repos/builtin/packages/scripts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Scripts(Package):
+class Scripts(AutotoolsPackage):
"""Various X related scripts."""
homepage = "http://cgit.freedesktop.org/xorg/app/scripts"
@@ -37,9 +37,3 @@ class Scripts(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/scrnsaverproto/package.py b/var/spack/repos/builtin/packages/scrnsaverproto/package.py
index 3675fd0eff..71fe86abbc 100644
--- a/var/spack/repos/builtin/packages/scrnsaverproto/package.py
+++ b/var/spack/repos/builtin/packages/scrnsaverproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Scrnsaverproto(Package):
+class Scrnsaverproto(AutotoolsPackage):
"""MIT Screen Saver Extension.
This extension defines a protocol to control screensaver features
@@ -38,8 +38,3 @@ class Scrnsaverproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/sctk/package.py b/var/spack/repos/builtin/packages/sctk/package.py
new file mode 100644
index 0000000000..e64d2c79aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sctk/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+
+
+class Sctk(Package):
+ """The NIST Scoring Toolkit (SCTK) is a collection of software tools
+ designed to score benchmark test evaluations of Automatic Speech
+ Recognition (ASR) Systems. The toolkit is currently used by NIST,
+ benchmark test participants, and reserchers worldwide to as a
+ common scoring engine."""
+
+ homepage = "https://www.nist.gov/itl/iad/mig/tools"
+ url = "http://www.openslr.org/resources/4/sctk-2.4.10-20151007-1312Z.tar.bz2"
+
+ version('2.4.10', 'dd01ad49a33486a4754655d06177f646',
+ url='http://www.openslr.org/resources/4/sctk-2.4.10-20151007-1312Z.tar.bz2')
+ version('2.4.9', '8cdab2a1263fe103481e23776e2178a1',
+ url='http://www.openslr.org/resources/4/sctk-2.4.9-20141015-1634Z.tar.bz2')
+ version('2.4.8', '2385209185b584e28dc42ea2cd324478',
+ url='http://www.openslr.org/resources/4/sctk-2.4.8-20130429-2145.tar.bz2')
+ version('2.4.0', '77912e75304098ffcc6850ecf641d1a4',
+ url='http://www.openslr.org/resources/4/sctk-2.4.0-20091110-0958.tar.bz2')
+
+ def install(self, spec, prefix):
+ make('config')
+ make('all')
+ make('install')
+ mkdirp(prefix.bin)
+ copy_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sdl2-image/package.py b/var/spack/repos/builtin/packages/sdl2-image/package.py
index 5df207ac55..3986c59c1e 100644
--- a/var/spack/repos/builtin/packages/sdl2-image/package.py
+++ b/var/spack/repos/builtin/packages/sdl2-image/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Sdl2Image(Package):
+class Sdl2Image(AutotoolsPackage):
"""SDL is designed to provide the bare bones of creating a graphical
program. """
@@ -35,9 +35,3 @@ class Sdl2Image(Package):
version('2.0.1', 'd94b94555ba022fa249a53a021dc3606')
depends_on('sdl2')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/sdl2/package.py b/var/spack/repos/builtin/packages/sdl2/package.py
index 98f8861fed..272261f54c 100644
--- a/var/spack/repos/builtin/packages/sdl2/package.py
+++ b/var/spack/repos/builtin/packages/sdl2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Sdl2(Package):
+class Sdl2(CMakePackage):
"""Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and
graphics hardware via OpenGL and Direct3D."""
@@ -35,11 +35,4 @@ class Sdl2(Package):
version('2.0.5', 'd4055424d556b4a908aa76fad63abd3c')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('..', *std_cmake_args)
-
- make()
- make('install')
+ depends_on('cmake@2.8.5:', type='build')
diff --git a/var/spack/repos/builtin/packages/sed/package.py b/var/spack/repos/builtin/packages/sed/package.py
index f2a240e1b3..84c5c94ed9 100644
--- a/var/spack/repos/builtin/packages/sed/package.py
+++ b/var/spack/repos/builtin/packages/sed/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,9 @@
from spack import *
-class Sed(Package):
+class Sed(AutotoolsPackage):
"""GNU implementation of the famous stream editor."""
homepage = "http://www.gnu.org/software/sed/"
url = "http://ftpmirror.gnu.org/sed/sed-4.2.2.tar.bz2"
version('4.2.2', '7ffe1c7cdc3233e1e0c4b502df253974')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/seqprep/package.py b/var/spack/repos/builtin/packages/seqprep/package.py
new file mode 100644
index 0000000000..d4c75cc5fa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/seqprep/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Seqprep(MakefilePackage):
+ """SeqPrep is a program to merge paired end Illumina reads that are
+ overlapping into a single longer read."""
+
+ homepage = "https://github.com/jstjohn/SeqPrep"
+ url = "https://github.com/jstjohn/SeqPrep/archive/v1.3.2.tar.gz"
+
+ version('1.3.2', 'b6a4f5491dfdb0ce38bf791454151468')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('SeqPrep', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/seqtk/package.py b/var/spack/repos/builtin/packages/seqtk/package.py
index ca168c176c..6393d3e587 100644
--- a/var/spack/repos/builtin/packages/seqtk/package.py
+++ b/var/spack/repos/builtin/packages/seqtk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/serf/package.py b/var/spack/repos/builtin/packages/serf/package.py
index ebca74a3ab..5604b8b166 100644
--- a/var/spack/repos/builtin/packages/serf/package.py
+++ b/var/spack/repos/builtin/packages/serf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,31 +25,67 @@
from spack import *
-class Serf(Package):
+class Serf(SConsPackage):
"""Apache Serf - a high performance C-based HTTP client library
built upon the Apache Portable Runtime (APR) library"""
homepage = 'https://serf.apache.org/'
- url = 'https://archive.apache.org/dist/serf/serf-1.3.8.tar.bz2'
+ url = 'https://archive.apache.org/dist/serf/serf-1.3.9.tar.bz2'
+ version('1.3.9', '26015c63e3bbb108c1689bf2090e4c26351db674')
version('1.3.8', '1d45425ca324336ce2f4ae7d7b4cfbc5567c5446')
+ variant('debug', default=False,
+ description='Enable debugging info and strict compile warnings')
+
+ depends_on('scons@2.3.0:', type='build')
+
depends_on('apr')
depends_on('apr-util')
- depends_on('scons', type='build')
- depends_on('expat')
depends_on('openssl')
depends_on('zlib')
- def install(self, spec, prefix):
- options = ['PREFIX=%s' % prefix]
- options.append('APR=%s' % spec['apr'].prefix)
- options.append('APU=%s' % spec['apr-util'].prefix)
- options.append('OPENSSL=%s' % spec['openssl'].prefix)
- options.append('LINKFLAGS=-L%s/lib -L%s/lib' %
- (spec['expat'].prefix, spec['zlib'].prefix))
- options.append('CPPFLAGS=-I%s/include -I%s/include' %
- (spec['expat'].prefix, spec['zlib'].prefix))
-
- scons(*options)
- scons('install')
+ def build_args(self, spec, prefix):
+ args = [
+ 'PREFIX={0}'.format(prefix),
+ 'APR={0}'.format(spec['apr'].prefix),
+ 'APU={0}'.format(spec['apr-util'].prefix),
+ 'OPENSSL={0}'.format(spec['openssl'].prefix),
+ 'ZLIB={0}'.format(spec['zlib'].prefix),
+ ]
+
+ if '+debug' in spec:
+ args.append('DEBUG=yes')
+ else:
+ args.append('DEBUG=no')
+
+ # SCons doesn't pass Spack environment variables to the
+ # execution environment. Therefore, we can't use Spack's compiler
+ # wrappers. Use the actual compilers. SCons seems to RPATH things
+ # on its own anyway.
+ args.append('CC={0}'.format(self.compiler.cc))
+
+ return args
+
+ def test(self):
+ # FIXME: Several test failures:
+ #
+ # There were 14 failures:
+ # 1) test_ssl_trust_rootca
+ # 2) test_ssl_certificate_chain_with_anchor
+ # 3) test_ssl_certificate_chain_all_from_server
+ # 4) test_ssl_no_servercert_callback_allok
+ # 5) test_ssl_large_response
+ # 6) test_ssl_large_request
+ # 7) test_ssl_client_certificate
+ # 8) test_ssl_future_server_cert
+ # 9) test_setup_ssltunnel
+ # 10) test_ssltunnel_basic_auth
+ # 11) test_ssltunnel_basic_auth_server_has_keepalive_off
+ # 12) test_ssltunnel_basic_auth_proxy_has_keepalive_off
+ # 13) test_ssltunnel_basic_auth_proxy_close_conn_on_200resp
+ # 14) test_ssltunnel_digest_auth
+ #
+ # These seem to be related to:
+ # https://groups.google.com/forum/#!topic/serf-dev/YEFTTdF1Qwc
+ scons('check')
diff --git a/var/spack/repos/builtin/packages/sessreg/package.py b/var/spack/repos/builtin/packages/sessreg/package.py
index 2ab505cc7a..af3f001e70 100644
--- a/var/spack/repos/builtin/packages/sessreg/package.py
+++ b/var/spack/repos/builtin/packages/sessreg/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Sessreg(Package):
+class Sessreg(AutotoolsPackage):
"""Sessreg is a simple program for managing utmp/wtmp entries for X
sessions. It was originally written for use with xdm, but may also be
used with other display managers such as gdm or kdm."""
@@ -43,9 +43,3 @@ class Sessreg(Package):
kwargs = {'string': True}
filter_file('$(CPP) $(DEFS)', '$(CPP) -P $(DEFS)',
'man/Makefile.in', **kwargs)
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/setxkbmap/package.py b/var/spack/repos/builtin/packages/setxkbmap/package.py
index db365530c9..5a8a5ea345 100644
--- a/var/spack/repos/builtin/packages/setxkbmap/package.py
+++ b/var/spack/repos/builtin/packages/setxkbmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Setxkbmap(Package):
+class Setxkbmap(AutotoolsPackage):
"""setxkbmap is an X11 client to change the keymaps in the X server for a
specified keyboard to use the layout determined by the options listed
on the command line."""
@@ -40,9 +40,3 @@ class Setxkbmap(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/sga/package.py b/var/spack/repos/builtin/packages/sga/package.py
new file mode 100644
index 0000000000..2c38244675
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sga/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Sga(AutotoolsPackage):
+ """SGA is a de novo genome assembler based on the concept of string graphs.
+ The major goal of SGA is to be very memory efficient, which is achieved
+ by using a compressed representation of DNA sequence reads."""
+
+ homepage = "https://www.msi.umn.edu/sw/sga"
+ url = "https://github.com/jts/sga/archive/v0.10.15.tar.gz"
+
+ version('0.10.15', '990aed1593f8072650c6366e5cf32519')
+ version('0.10.14', '211edb372898d6515dcde98d17078b7b')
+ version('0.10.13', 'd4f6aefc48c940dba96cc6513649ecdd')
+ version('0.10.12', '993bc165b4c77b75a5a2fe01c200c0da')
+ version('0.10.11', 'b649da5471209f50df2d53f0f2bfa0ed')
+ version('0.10.10', '494ff18d82b34cdaf8432b48b0356aae')
+ version('0.10.9', 'c2111bfd278d8faaab19732aec79fa78')
+ version('0.10.8', '4d75f836eaae6018d993a0b75326014a')
+ version('0.10.3', 'b12d35b24ca8a63c4dcc9f5d7e7c4133')
+
+ depends_on('zlib')
+ depends_on('sparsehash')
+ depends_on('jemalloc')
+ depends_on('bamtools')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+
+ configure_directory = 'src'
+
+ def configure_args(self):
+ return [
+ '--with-sparsehash={0}'.format(self.spec['sparsehash'].prefix),
+ '--with-bamtools={0}'.format(self.spec['bamtools'].prefix),
+ '--with-jemalloc={0}'.format(self.spec['jemalloc'].prefix)
+ ]
diff --git a/var/spack/repos/builtin/packages/shapeit/package.py b/var/spack/repos/builtin/packages/shapeit/package.py
new file mode 100644
index 0000000000..4f0295cca1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/shapeit/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Shapeit(Package):
+ """SHAPEIT is a fast and accurate method for estimation of haplotypes (aka
+ phasing) from genotype or sequencing data."""
+
+ homepage = "https://mathgen.stats.ox.ac.uk/genetics_software/shapeit/shapeit.html"
+ url = "https://mathgen.stats.ox.ac.uk/genetics_software/shapeit/shapeit.v2.r837.GLIBCv2.12.Linux.dynamic.tgz"
+
+ version('2.837', '895873bb655a0a985cbfd870fdd1dd60')
+
+ def url_for_version(self, version):
+ url = 'https://mathgen.stats.ox.ac.uk/genetics_software/shapeit/shapeit.v{0}.r{1}.GLIBCv2.12.Linux.dynamic.tgz'
+ return url.format(version[0], version[1])
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('bin'):
+ install('shapeit', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/shared-mime-info/package.py b/var/spack/repos/builtin/packages/shared-mime-info/package.py
new file mode 100644
index 0000000000..80880eebc1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/shared-mime-info/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class SharedMimeInfo(AutotoolsPackage):
+ """Database of common MIME types."""
+
+ homepage = "https://freedesktop.org/wiki/Software/shared-mime-info"
+ url = "http://freedesktop.org/~hadess/shared-mime-info-1.8.tar.xz"
+
+ version('1.8', 'f6dcadce764605552fc956563efa058c')
+
+ parallel = False
+
+ depends_on('glib')
+ depends_on('libxml2')
+ depends_on('intltool', type='build')
+ depends_on('gettext', type='build')
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ spack_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
+ run_env.prepend_path("XDG_DATA_DIRS",
+ self.prefix.share)
diff --git a/var/spack/repos/builtin/packages/shiny-server/package.py b/var/spack/repos/builtin/packages/shiny-server/package.py
new file mode 100644
index 0000000000..2edd966825
--- /dev/null
+++ b/var/spack/repos/builtin/packages/shiny-server/package.py
@@ -0,0 +1,75 @@
+##############################################################################
+# 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/spack/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 ShinyServer(CMakePackage):
+ """Shiny server lets you put shiny web applications and interactive
+ documents online. Take your shiny apps and share them with your
+ organization or the world."""
+
+ #
+ # HEADS UP:
+ # 1. The shiny server installation step will download various node
+ # and npm bits from the net. They seem to have them well
+ # constrained ("npm shrinkwrap"?), but this package is not
+ # "air gappable".
+ # 2. Docs say that it requires 'gcc'. depends_on() won't do the
+ # right thing, it's Up To You.
+ #
+ homepage = "https://www.rstudio.com/products/shiny/shiny-server/"
+ url = "https://github.com/rstudio/shiny-server/archive/v1.5.3.838.tar.gz"
+
+ version('1.5.3.838', '96f20fdcdd94c9e9bb851baccb82b97f')
+
+ depends_on('python@:2.8') # docs say: "Really. 3.x will not work"
+ depends_on('cmake@2.8.10:')
+ depends_on('git')
+ depends_on('r+X')
+ depends_on('openssl')
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+
+ options.append("-DPYTHON=%s" % spec['python'].command.path)
+
+ return options
+
+ # Recompile the npm modules included in the project
+ @run_after('build')
+ def build_node(self):
+ bash = which('bash')
+ mkdirp('build')
+ bash('-c', 'bin/npm --python="$PYTHON" install')
+ bash('-c', 'bin/node ./ext/node/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js --python="$PYTHON" rebuild') # noqa: E501
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH',
+ join_path(self.prefix, 'shiny-server', 'bin'))
+ # shiny comes with its own pandoc; hook it up...
+ run_env.prepend_path('PATH',
+ join_path(self.prefix, 'shiny-server',
+ 'ext', 'pandoc', 'static'))
diff --git a/var/spack/repos/builtin/packages/shortstack/package.py b/var/spack/repos/builtin/packages/shortstack/package.py
new file mode 100644
index 0000000000..75d363e185
--- /dev/null
+++ b/var/spack/repos/builtin/packages/shortstack/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Shortstack(Package):
+ """ShortStack is a tool developed to process and analyze smallRNA-seq data
+ with respect to a reference genome, and output a comprehensive and
+ informative annotation of all discovered small RNA genes."""
+
+ homepage = "http://sites.psu.edu/axtell/software/shortstack/"
+ url = "https://github.com/MikeAxtell/ShortStack/archive/v3.8.3.tar.gz"
+
+ version('3.8.3', '3f21f494f799039f3fa88ea343f2d20d')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('samtools')
+ depends_on('viennarna')
+ depends_on('bowtie')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('ShortStack', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/showfont/package.py b/var/spack/repos/builtin/packages/showfont/package.py
index 232988193b..769c77f076 100644
--- a/var/spack/repos/builtin/packages/showfont/package.py
+++ b/var/spack/repos/builtin/packages/showfont/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Showfont(Package):
+class Showfont(AutotoolsPackage):
"""showfont displays data about a font from an X font server.
The information shown includes font information, font properties,
character metrics, and character bitmaps."""
@@ -39,9 +39,3 @@ class Showfont(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/sickle/package.py b/var/spack/repos/builtin/packages/sickle/package.py
new file mode 100644
index 0000000000..248f1ef3b9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sickle/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Sickle(MakefilePackage):
+ """Sickle is a tool that uses sliding windows along with quality and
+ length thresholds to determine when quality is sufficiently low to trim
+ the 3'-end of reads and also determines when the quality is
+ sufficiently high enough to trim the 5'-end of reads."""
+
+ homepage = "https://github.com/najoshi/sickle"
+ url = "https://github.com/najoshi/sickle/archive/v1.33.tar.gz"
+
+ version('1.33', '9e2ba812183e1515198c9e15c4cd2cd7')
+
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('sickle', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/signalp/package.py b/var/spack/repos/builtin/packages/signalp/package.py
new file mode 100644
index 0000000000..95197badfc
--- /dev/null
+++ b/var/spack/repos/builtin/packages/signalp/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Signalp(Package):
+ """SignalP predicts the presence and location of signal peptide cleavage
+ sites in amino acid sequences from different organisms: Gram-positive
+ bacteria, Gram-negative bacteria, and eukaryotes.
+ Note: A manual download is required for SignalP.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "http://www.cbs.dtu.dk/services/SignalP/"
+ url = "file://{0}/signalp-4.1f.Linux.tar.gz".format(os.getcwd())
+
+ version('4.1f', 'a9aeb66259202649c959846f3f4d9744')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('gnuplot')
+
+ def patch(self):
+ edit = FileFilter('signalp')
+ edit.filter("ENV{SIGNALP} = .*",
+ "ENV{SIGNALP} = '%s'" % self.prefix)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.share.man)
+ install('signalp', prefix)
+ install('signalp.1', prefix.share.man)
+ install_tree('bin', prefix.bin)
+ install_tree('lib', prefix.lib)
+ install_tree('syn', prefix.syn)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', prefix)
diff --git a/var/spack/repos/builtin/packages/silo/package.py b/var/spack/repos/builtin/packages/silo/package.py
index 691d53a9f1..763fc66383 100644
--- a/var/spack/repos/builtin/packages/silo/package.py
+++ b/var/spack/repos/builtin/packages/silo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -30,7 +30,7 @@ class Silo(Package):
data to binary, disk files."""
homepage = "http://wci.llnl.gov/simulation/computer-codes/silo"
- base_url = "https://wci.llnl.gov/content/assets/docs/simulation/computer-codes/silo"
+ url = "https://wci.llnl.gov/content/assets/docs/simulation/computer-codes/silo/silo-4.10.2/silo-4.10.2.tar.gz"
version('4.10.2', '9ceac777a2f2469ac8cef40f4fab49c8')
version('4.9', 'a83eda4f06761a86726e918fc55e782a')
@@ -40,11 +40,14 @@ class Silo(Package):
variant('shared', default=True, description='Build shared libraries')
variant('silex', default=False,
description='Builds Silex, a GUI for viewing Silo files')
+ variant('pic', default=True,
+ description='Produce position-independent code (for shared libs)')
- # silo uses the obsolete function H5Pset_fapl_mpiposix:
- depends_on("hdf5 @:1.8.12")
+ depends_on('hdf5')
depends_on('qt', when='+silex')
+ patch('remove-mpiposix.patch', when='@4.8:4.10.2')
+
def install(self, spec, prefix):
config_args = [
'--enable-fortran' if '+fortran' in spec else '--disable-fortran',
@@ -55,6 +58,12 @@ class Silo(Package):
if '+silex' in spec:
config_args.append('--with-Qt-dir=%s' % spec['qt'].prefix)
+ if '+pic' in spec:
+ config_args += [
+ 'CFLAGS={0}'.format(self.compiler.pic_flag),
+ 'CXXFLAGS={0}'.format(self.compiler.pic_flag),
+ 'FCFLAGS={0}'.format(self.compiler.pic_flag)]
+
configure(
'--prefix=%s' % prefix,
'--with-hdf5=%s,%s' % (spec['hdf5'].prefix.include,
@@ -66,6 +75,3 @@ class Silo(Package):
make()
make('install')
-
- def url_for_version(self, version):
- return '%s/silo-%s/silo-%s.tar.gz' % (Silo.base_url, version, version)
diff --git a/var/spack/repos/builtin/packages/silo/remove-mpiposix.patch b/var/spack/repos/builtin/packages/silo/remove-mpiposix.patch
new file mode 100644
index 0000000000..1c6449f0c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/silo/remove-mpiposix.patch
@@ -0,0 +1,40 @@
+Index: silo-llnl-4.9.1/src/hdf5_drv/silo_hdf5.c
+===================================================================
+--- silo-llnl-4.9.1.orig/src/hdf5_drv/silo_hdf5.c
++++ silo-llnl-4.9.1/src/hdf5_drv/silo_hdf5.c
+@@ -4717,16 +4717,7 @@ db_hdf5_process_file_options(opts_set_id
+
+ /* default HDF5 mpi drivers */
+ case DB_FILE_OPTS_H5_DEFAULT_MPIP:
+- {
+-#ifdef H5_HAVE_PARALLEL
+- h5status |= H5Pset_fapl_mpiposix(retval, MPI_COMM_SELF, TRUE);
+-#else
+- H5Pclose(retval);
+- return db_perror("HDF5 MPI VFD", E_NOTENABLEDINBUILD, me);
+-#endif
+- break;
+- }
+-
++ /* FALLTHROUGH */
+ case DB_FILE_OPTS_H5_DEFAULT_MPIO:
+ {
+ #ifdef H5_HAVE_PARALLEL
+@@ -4963,15 +4954,8 @@ db_hdf5_process_file_options(opts_set_id
+ if (p = DBGetOption(opts, DBOPT_H5_MPIP_NO_GPFS_HINTS))
+ use_gpfs_hints = FALSE;
+
+- if (vfd == DB_H5VFD_MPIO)
+- {
+- h5status |= H5Pset_fapl_mpio(retval, mpi_comm, mpi_info);
+- if (created_info) MPI_Info_free(&mpi_info);
+- }
+- else
+- {
+- h5status |= H5Pset_fapl_mpiposix(retval, mpi_comm, use_gpfs_hints);
+- }
++ h5status |= H5Pset_fapl_mpio(retval, mpi_comm, mpi_info);
++ if (created_info) MPI_Info_free(&mpi_info);
+ #else
+ H5Pclose(retval);
+ return db_perror("HDF5 MPI VFD", E_NOTENABLEDINBUILD, me);
diff --git a/var/spack/repos/builtin/packages/simplemoc/package.py b/var/spack/repos/builtin/packages/simplemoc/package.py
new file mode 100644
index 0000000000..8f6759b019
--- /dev/null
+++ b/var/spack/repos/builtin/packages/simplemoc/package.py
@@ -0,0 +1,68 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Simplemoc(MakefilePackage):
+ """The purpose of this mini-app is to demonstrate the performance
+ characterterics and viability of the Method of Characteristics (MOC)
+ for 3D neutron transport calculations in the context of full scale
+ light water reactor simulation."""
+
+ homepage = "https://github.com/ANL-CESAR/SimpleMOC/"
+ url = "https://github.com/ANL-CESAR/SimpleMOC/archive/master.tar.gz"
+
+ version('1.0', 'd8827221a4ae76e9766a32e16d143e60')
+
+ tags = ['proxy-app']
+
+ variant('mpi', default=True, description='Build with MPI support')
+
+ depends_on('mpi', when='+mpi')
+
+ build_directory = 'src'
+
+ @property
+ def build_targets(self):
+
+ targets = []
+
+ cflags = '-std=gnu99'
+ ldflags = '-lm'
+
+ if self.compiler.name == 'gcc' or self.compiler.name == 'intel':
+ cflags += ' ' + self.compiler.openmp_flag
+ if '+mpi' in self.spec:
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+
+ targets.append('CFLAGS={0}'.format(cflags))
+ targets.append('LDFLAGS={0}'.format(ldflags))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('src/SimpleMOC', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/simul/package.py b/var/spack/repos/builtin/packages/simul/package.py
new file mode 100644
index 0000000000..7ef8720dc9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/simul/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Simul(Package):
+ """simul is an MPI coordinated test of parallel
+ filesystem system calls and library functions. """
+
+ homepage = "https://github.com/LLNL/simul"
+ url = "https://github.com/LLNL/simul/archive/1.16.tar.gz"
+
+ version('1.16', 'd616c1046a170c1e1b7956c402d23a95')
+ version('1.15', 'a5744673c094a87c05c6f0799d1f496f')
+ version('1.14', 'f8c14f0bac15741e2af354e3f9a0e30f')
+ version('1.13', '8a80a62d569557715d6c9c326e39a8ef')
+
+ depends_on('mpi')
+
+ def install(self, spec, prefix):
+ filter_file('mpicc', '$(MPICC)', 'Makefile', string=True)
+ filter_file('inline void', 'void', 'simul.c', string=True)
+ make('simul')
+ mkdirp(prefix.bin)
+ install('simul', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/simulationio/package.py b/var/spack/repos/builtin/packages/simulationio/package.py
new file mode 100644
index 0000000000..b027f49584
--- /dev/null
+++ b/var/spack/repos/builtin/packages/simulationio/package.py
@@ -0,0 +1,63 @@
+##############################################################################
+# 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/spack/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 Simulationio(CMakePackage):
+ """SimulationIO: Efficient and convenient I/O for large PDE simulations"""
+ homepage = "https://github.com/eschnett/SimulationIO"
+ url = "https://github.com/eschnett/SimulationIO/archive/version/0.1.0.tar.gz"
+
+ version('1.0.0', '5cbf1d0084eb436d861ffcdd297eaa08')
+ version('0.1.0', '00f7dabc08ed1ab77858785ce0809f50')
+ version('develop',
+ git='https://github.com/eschnett/SimulationIO.git', branch='master')
+
+ variant('julia', default=False)
+ variant('python', default=True)
+
+ variant('pic', default=True,
+ description="Produce position-independent code")
+
+ depends_on('hdf5 +cxx @:1.10.0-patch1')
+ depends_on('julia', when='+julia', type=('build', 'run'))
+ depends_on('py-h5py', when='+python', type=('build', 'run'))
+ depends_on('py-numpy', when='+python', type=('build', 'run'))
+ depends_on('python@2.7:2.8', when='+python', type=('build', 'run'))
+ depends_on('swig', type='build')
+
+ extends('python')
+
+ def cmake_args(self):
+ spec = self.spec
+ options = []
+ if '+pic' in spec:
+ options.append("-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true")
+ return options
+
+ def check(self):
+ with working_dir(self.build_directory):
+ make("test", "CTEST_OUTPUT_ON_FAILURE=1")
diff --git a/var/spack/repos/builtin/packages/singularity/package.py b/var/spack/repos/builtin/packages/singularity/package.py
new file mode 100644
index 0000000000..810a811d39
--- /dev/null
+++ b/var/spack/repos/builtin/packages/singularity/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Singularity(AutotoolsPackage):
+ """Singularity is a container platform focused on supporting 'Mobility of
+ Compute'"""
+
+ homepage = "http://singularity.lbl.gov/"
+ url = "https://github.com/singularityware/singularity/archive/2.4.tar.gz"
+
+ version('2.4', 'd357ce68ef2f8149edd84155731531465dbe74148c37719f87f168fc39384377')
+ version('2.3.1', '292ff7fe3db09c854b8accf42f763f62')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
diff --git a/var/spack/repos/builtin/packages/slepc/package.py b/var/spack/repos/builtin/packages/slepc/package.py
index 17c512119c..ac8df77d50 100644
--- a/var/spack/repos/builtin/packages/slepc/package.py
+++ b/var/spack/repos/builtin/packages/slepc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,24 +32,33 @@ class Slepc(Package):
"""
homepage = "http://www.grycap.upv.es/slepc"
- url = "http://slepc.upv.es/download/download.php?filename=slepc-3.6.2.tar.gz"
+ url = "http://slepc.upv.es/download/distrib/slepc-3.6.2.tar.gz"
+ version('3.8.0', 'c58ccc4e852d1da01112466c48efa41f0839649f3a265925788237d76cd3d963')
+ version('3.7.4', '2fb782844e3bc265a8d181c3c3e2632a4ca073111c874c654f1365d33ca2eb8a')
version('3.7.3', '3ef9bcc645a10c1779d56b3500472ceb66df692e389d635087d30e7c46424df9')
version('3.7.1', '670216f263e3074b21e0623c01bc0f562fdc0bffcd7bd42dd5d8edbe73a532c2')
version('3.6.3', '384939d009546db37bc05ed81260c8b5ba451093bf891391d32eb7109ccff876')
version('3.6.2', '2ab4311bed26ccf7771818665991b2ea3a9b15f97e29fd13911ab1293e8e65df')
+ version('develop', git='https://bitbucket.org/slepc/slepc.git')
variant('arpack', default=True, description='Enables Arpack wrappers')
# NOTE: make sure PETSc and SLEPc use the same python.
- depends_on('python@2.6:2.7', type='build')
- depends_on('petsc@3.7:', when='@3.7.1:')
+ depends_on('python@2.6:2.8', type='build')
+ # Cannot mix release and development versions of SLEPc and PETSc:
+ depends_on('petsc@develop', when='@develop')
+ depends_on('petsc@3.8:3.8.99', when='@3.8:3.8.99')
+ depends_on('petsc@3.7:3.7.7', when='@3.7.1:3.7.4')
depends_on('petsc@3.6.3:3.6.4', when='@3.6.2:3.6.3')
- depends_on('arpack-ng~mpi', when='+arpack^petsc~mpi')
- depends_on('arpack-ng+mpi', when='+arpack^petsc+mpi')
+ depends_on('arpack-ng~mpi', when='+arpack^petsc~mpi~int64')
+ depends_on('arpack-ng+mpi', when='+arpack^petsc+mpi~int64')
patch('install_name_371.patch', when='@3.7.1')
+ # Arpack can not be used with 64bit integers.
+ conflicts('+arpack', when='^petsc+int64')
+
def install(self, spec, prefix):
# set SLEPC_DIR for installation
# Note that one should set the current (temporary) directory instead
diff --git a/var/spack/repos/builtin/packages/slurm/package.py b/var/spack/repos/builtin/packages/slurm/package.py
new file mode 100644
index 0000000000..ac0d6f2610
--- /dev/null
+++ b/var/spack/repos/builtin/packages/slurm/package.py
@@ -0,0 +1,109 @@
+##############################################################################
+# 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/spack/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 Slurm(AutotoolsPackage):
+ """Slurm is an open source, fault-tolerant, and highly scalable cluster
+ management and job scheduling system for large and small Linux clusters.
+
+ Slurm requires no kernel modifications for its operation and is relatively
+ self-contained. As a cluster workload manager, Slurm has three key
+ functions. First, it allocates exclusive and/or non-exclusive access to
+ resources (compute nodes) to users for some duration of time so they can
+ perform work. Second, it provides a framework for starting, executing,
+ and monitoring work (normally a parallel job) on the set of allocated
+ nodes. Finally, it arbitrates contention for resources by managing a
+ queue of pending work.
+ """
+
+ homepage = 'https://slurm.schedmd.com'
+ url = 'https://github.com/SchedMD/slurm/archive/slurm-17-02-6-1.tar.gz'
+
+ version('17-02-6-1', '8edbb9ad41819464350d9de013367020')
+
+ variant('gtk', default=False, description='Enable GTK+ support')
+ variant('mariadb', default=False, description='Use MariaDB instead of MySQL')
+
+ variant('hwloc', default=False, description='Enable hwloc support')
+ variant('hdf5', default=False, description='Enable hdf5 support')
+ variant('readline', default=True, description='Enable readline support')
+
+ # TODO: add variant for BG/Q and Cray support
+
+ # TODO: add support for checkpoint/restart (BLCR)
+
+ # TODO: add support for lua
+
+ depends_on('curl')
+ depends_on('glib')
+ depends_on('json-c')
+ depends_on('lz4')
+ depends_on('munge')
+ depends_on('openssl')
+ depends_on('pkg-config', type='build')
+ depends_on('readline')
+ depends_on('zlib')
+
+ depends_on('gtkplus+X', when='+gtk')
+ depends_on('hdf5', when='+hdf5')
+ depends_on('hwloc', when='+hwloc')
+ depends_on('mariadb', when='+mariadb')
+
+ def configure_args(self):
+
+ spec = self.spec
+
+ args = [
+ '--with-libcurl={0}'.format(spec['curl'].prefix),
+ '--with-json={0}'.format(spec['json-c'].prefix),
+ '--with-lz4={0}'.format(spec['lz4'].prefix),
+ '--with-munge={0}'.format(spec['munge'].prefix),
+ '--with-ssl={0}'.format(spec['openssl'].prefix),
+ '--with-zlib={0}'.format(spec['zlib'].prefix),
+ ]
+
+ if '~gtk' in spec:
+ args.append('--disable-gtktest')
+
+ if '+readline' in spec:
+ args.append('--with-readline={0}'.format(spec['readline'].prefix))
+ else:
+ args.append('--without-readline')
+
+ if '+hdf5' in spec:
+ args.append(
+ '--with-hdf5={0}'.format(spec['hdf5'].prefix.bin.h5cc)
+ )
+ else:
+ args.append('--without-hdf5')
+
+ if '+hwloc' in spec:
+ args.append('--with-hwloc={0}'.format(spec['hwloc'].prefix))
+ else:
+ args.append('--without-hwloc')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/smalt/package.py b/var/spack/repos/builtin/packages/smalt/package.py
new file mode 100644
index 0000000000..4c65afe20d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/smalt/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/spack/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 Smalt(AutotoolsPackage):
+ """SMALT aligns DNA sequencing reads with a reference genome."""
+
+ homepage = "http://www.sanger.ac.uk/science/tools/smalt-0"
+ url = "https://downloads.sourceforge.net/project/smalt/smalt-0.7.6.tar.gz"
+
+ version('0.7.6', 'c3215d70ba960c8fdc8e80191695c60b')
diff --git a/var/spack/repos/builtin/packages/smc/package.py b/var/spack/repos/builtin/packages/smc/package.py
new file mode 100644
index 0000000000..353e5f46b9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/smc/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Smc(MakefilePackage):
+ """A minimalist high-order finite difference algorithm
+ for combustion problems. It includes core discretizations
+ for advection, diffusive transport and chemical kinetics.
+ The models for computing diffusive transport coefficients
+ have been replaced by a simplified approximation
+ but the full structure of the discretization of
+ the diffusive terms have been preserved."""
+
+ homepage = "https://ccse.lbl.gov/ExaCT/index.html"
+ url = "https://ccse.lbl.gov/ExaCT/SMC.tar.gz"
+ tags = ['proxy-app']
+
+ version('master', '94a4ea94abbc5e61397c2a4d1fb56ed6')
+
+ variant(
+ 'mpi', default=True,
+ description='Build with MPI support')
+ variant(
+ 'openmp', default=True,
+ description='Build with OpenMP support')
+ variant(
+ 'debug', default=False,
+ description='Build with debugging')
+# variant(
+# 'mic', default=False,
+# description='Compile for Intel Xeon Phi')
+ variant(
+ 'k_use_automatic', default=True,
+ description='Some arrays in kernels.F90 will be automatic')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('gmake', type='build')
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter('GNUmakefile')
+ if '~mpi' in spec:
+ makefile.filter('MPI := t', '#')
+ if '~openmp' in spec:
+ makefile.filter('OMP := t', '#')
+ if '+debug' in spec:
+ makefile.filter('NDEBUG :=', '#')
+ if '~k_use_automatic' in spec:
+ makefile.filter('K_U.*:= t', '#')
+ if self.compiler.name == 'intel':
+ makefile.filter('COMP := .*', 'COMP := Intel')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ files = glob.glob(join_path(self.build_directory, '*.exe'))
+ for f in files:
+ install(f, prefix.bin)
+ install('inputs_SMC', prefix.bin)
+ install('README', prefix)
+ install('BoxLib.license.txt', prefix)
diff --git a/var/spack/repos/builtin/packages/smproxy/package.py b/var/spack/repos/builtin/packages/smproxy/package.py
index 5bdde800d4..571b25d4b6 100644
--- a/var/spack/repos/builtin/packages/smproxy/package.py
+++ b/var/spack/repos/builtin/packages/smproxy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Smproxy(Package):
+class Smproxy(AutotoolsPackage):
"""smproxy allows X applications that do not support X11R6 session
management to participate in an X11R6 session."""
@@ -41,9 +41,3 @@ class Smproxy(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/snakemake/package.py b/var/spack/repos/builtin/packages/snakemake/package.py
new file mode 100644
index 0000000000..d97dc47442
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snakemake/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Snakemake(PythonPackage):
+ """Snakemake is an MIT-licensed workflow management system."""
+
+ homepage = "https://snakemake.readthedocs.io/en/stable/"
+ url = "https://pypi.io/packages/source/s/snakemake/snakemake-3.11.2.tar.gz"
+
+ version('3.11.2', '6bf834526078522b38d271fdf73e6b22')
+
+ depends_on('python@3.3:')
+ depends_on('py-requests', type=('build', 'run'))
+ depends_on('py-setuptools', type=('build', 'run'))
+ depends_on('py-wrapt', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/snap-berkeley/package.py b/var/spack/repos/builtin/packages/snap-berkeley/package.py
new file mode 100644
index 0000000000..a6b1e08c47
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snap-berkeley/package.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/spack/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 SnapBerkeley(MakefilePackage):
+ """SNAP is a fast and accurate aligner for short DNA reads. It is
+ optimized for modern read lengths of 100 bases or higher, and takes
+ advantage of these reads to align data quickly through a hash-based
+ indexing scheme."""
+
+ homepage = "http://snap.cs.berkeley.edu/"
+ url = "https://github.com/amplab/snap/archive/v1.0beta.18.tar.gz"
+
+ version('1.0beta.18', '41e595fffa482e9eda1c3f69fb5dedeb')
+ version('0.15', 'a7d87cc822f052665a347ab0aa84d4de', preferred=True)
+
+ depends_on('zlib')
+
+ conflicts('%gcc@6:')
+ conflicts('%cce')
+ conflicts('%clang')
+ conflicts('%intel')
+ conflicts('%nag')
+ conflicts('%pgi')
+ conflicts('%xl')
+ conflicts('%xl_r')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ if self.spec.satisfies('@1.0beta.18:'):
+ install('snap-aligner', prefix.bin)
+ install('SNAPCommand', prefix.bin)
+ else:
+ install('snap', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/snap-korf/package.py b/var/spack/repos/builtin/packages/snap-korf/package.py
new file mode 100644
index 0000000000..68fb4c61ae
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snap-korf/package.py
@@ -0,0 +1,62 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class SnapKorf(MakefilePackage):
+ """SNAP is a general purpose gene finding program suitable for both
+ eukaryotic and prokaryotic genomes."""
+
+ homepage = "http://korflab.ucdavis.edu/software.html"
+ url = "http://korflab.ucdavis.edu/Software/snap-2013-11-29.tar.gz"
+
+ version('2013-11-29', 'dfdf48e37cdb32af4eecd9201506b6e3')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('boost')
+ depends_on('sqlite')
+ depends_on('sparsehash')
+
+ conflicts('%gcc@5:', when='@2013-11-29')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+
+ progs = ['snap', 'fathom', 'forge', 'depend', 'exonpairs', 'hmm-info']
+ for p in progs:
+ install(p, prefix.bin)
+
+ files = glob.iglob('*.pl')
+ for file in files:
+ install(file, prefix.bin)
+
+ install_tree('Zoe', prefix.Zoe)
+ install_tree('HMM', prefix.HMM)
+ install_tree('DNA', prefix.DNA)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('ZOE', self.prefix)
+ run_env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/snap/package.py b/var/spack/repos/builtin/packages/snap/package.py
new file mode 100644
index 0000000000..7bc88b812f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snap/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Snap(MakefilePackage):
+ """SNAP serves as a proxy application to model
+ the performance of a modern discrete ordinates
+ neutral particle transport application.
+ SNAP may be considered an update to Sweep3D,
+ intended for hybrid computing architectures.
+ It is modeled off the Los Alamos National Laboratory code PARTISN."""
+
+ homepage = "https://github.com/lanl/SNAP"
+ url = ""
+ tags = ['proxy-app']
+
+ version('master', git='https://github.com/lanl/SNAP.git')
+
+ variant('openmp', default=False, description='Build with OpenMP support')
+ variant('opt', default=True, description='Build with debugging')
+ variant('mpi', default=True, description='Build with MPI support')
+
+ depends_on('mpi', when='+mpi')
+
+ build_directory = 'src'
+
+ def edit(self, spec, prefix):
+ with working_dir(self.build_directory):
+ makefile = FileFilter('Makefile')
+ if '~opt' in spec:
+ makefile.filter('OPT = yes', 'OPT = no')
+ if '~mpi' in spec:
+ makefile.filter('MPI = yes', 'MPI = no')
+ if '~openmp' in spec:
+ makefile.filter('OPENMP = yes', 'OPENMP = no')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('src/gsnap', prefix.bin)
+ install_tree('qasnap', prefix.qasnap)
+ install('README.md', prefix)
diff --git a/var/spack/repos/builtin/packages/snappy/package.py b/var/spack/repos/builtin/packages/snappy/package.py
index 1e94980c92..a023b2ee95 100644
--- a/var/spack/repos/builtin/packages/snappy/package.py
+++ b/var/spack/repos/builtin/packages/snappy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,40 @@
from spack import *
-class Snappy(Package):
+class Snappy(CMakePackage):
"""A fast compressor/decompressor: https://code.google.com/p/snappy"""
- homepage = "https://code.google.com/p/snappy"
- url = "https://github.com/google/snappy/releases/download/1.1.3/snappy-1.1.3.tar.gz"
+ homepage = "https://github.com/google/snappy"
+ url = "https://github.com/google/snappy/archive/1.1.7.tar.gz"
- version('1.1.3', '7358c82f133dc77798e4c2062a749b73')
+ version('1.1.7', 'ee9086291c9ae8deb4dac5e0b85bf54a')
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
+ variant('shared', default=True, description='Build shared libraries')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ args = [
+ '-DCMAKE_INSTALL_LIBDIR:PATH={0}'.format(
+ self.prefix.lib),
+ '-DBUILD_SHARED_LIBS:BOOL={0}'.format(
+ 'ON' if '+shared' in spec else 'OFF')
+ ]
+
+ return args
+
+ @run_after('install')
+ def install_pkgconfig(self):
+ mkdirp(self.prefix.lib.pkgconfig)
+
+ with open(join_path(self.prefix.lib.pkgconfig, 'snappy.pc'), 'w') as f:
+ f.write('prefix={0}\n'.format(self.prefix))
+ f.write('exec_prefix=${prefix}\n')
+ f.write('libdir={0}\n'.format(self.prefix.lib))
+ f.write('includedir={0}\n'.format(self.prefix.include))
+ f.write('\n')
+ f.write('Name: Snappy\n')
+ f.write('Description: A fast compressor/decompressor.\n')
+ f.write('Version: {0}\n'.format(self.spec.version))
+ f.write('Cflags: -I${includedir}\n')
+ f.write('Libs: -L${libdir} -lsnappy\n')
diff --git a/var/spack/repos/builtin/packages/snbone/package.py b/var/spack/repos/builtin/packages/snbone/package.py
new file mode 100644
index 0000000000..eb493d9a16
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snbone/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Snbone(MakefilePackage):
+ """This application targets the primary computational solve burden of a SN,
+ continuous finite element based transport equation solver."""
+
+ homepage = "https://github.com/ANL-CESAR/"
+ url = "https://github.com/ANL-CESAR/SNbone.git"
+
+ version('develop', git='https://github.com/ANL-CESAR/SNbone.git')
+
+ tags = ['proxy-app']
+
+ depends_on('metis')
+
+ def build(self, spec, prefix):
+ working_dirs = ['src_c', 'src_fortran', 'src_makemesh',
+ 'src_processmesh']
+ for wdir in working_dirs:
+ with working_dir(wdir, create=False):
+ if self.compiler.name == 'gcc' and wdir == 'src_processmesh':
+ make('COMPILER=gfortran', 'METISLIB={0}'
+ .format(spec['metis'].prefix + '/lib/libmetis.so'))
+ elif self.compiler.name == 'intel':
+ make('COMPILER=intel', 'LDFLAGS=-lm')
+ else:
+ make('COMPILER=gfortran', 'LDFLAGS=-lm')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin.C)
+ mkdirp(prefix.bin.Fortran)
+ mkdirp(prefix.bin.MakeMesh)
+ mkdirp(prefix.bin.ProcessMesh)
+
+ install('src_c/SNaCFE.x', prefix.bin.C)
+ install('src_fortran/SNaCFE.x', prefix.bin.Fortran)
+ install('src_makemesh/makemesh.x', prefix.bin.MakeMesh)
+ install('src_processmesh/processmesh.x', prefix.bin.ProcessMesh)
diff --git a/var/spack/repos/builtin/packages/sniffles/package.py b/var/spack/repos/builtin/packages/sniffles/package.py
new file mode 100644
index 0000000000..caa6591a5e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sniffles/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Sniffles(CMakePackage):
+ """Structural variation caller using third generation sequencing."""
+
+ homepage = "https://github.com/fritzsedlazeck/Sniffles/wiki"
+ url = "https://github.com/fritzsedlazeck/Sniffles/archive/v1.0.5.tar.gz"
+
+ version('1.0.5', 'c2f2350d00418ba4d82c074e7f0b1832')
+
+ # the build process doesn't actually install anything, do it by hand
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ src = "bin/sniffles-core-{0}".format(spec.version.dotted)
+ binaries = ['sniffles', 'sniffles-debug']
+ for b in binaries:
+ install(join_path(src, b), join_path(prefix.bin, b))
diff --git a/var/spack/repos/builtin/packages/snptest/package.py b/var/spack/repos/builtin/packages/snptest/package.py
new file mode 100644
index 0000000000..57a49c5bec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/snptest/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Snptest(Package):
+ """SNPTEST is a program for the analysis of single SNP association in
+ genome-wide studies."""
+
+ homepage = "https://mathgen.stats.ox.ac.uk/genetics_software/snptest/snptest.html"
+ url = "http://www.well.ox.ac.uk/~gav/resources/snptest_v2.5.2_linux_x86_64_dynamic.tgz"
+
+ version('2.5.2', 'e3f2cc0351f260cf29369dc4f79a660a')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('snptest_v{0}'.format(self.version), prefix.bin)
diff --git a/var/spack/repos/builtin/packages/soap2/package.py b/var/spack/repos/builtin/packages/soap2/package.py
new file mode 100644
index 0000000000..9b34e35320
--- /dev/null
+++ b/var/spack/repos/builtin/packages/soap2/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Soap2(Package):
+ """Software for short oligonucleotide alignment."""
+
+ homepage = "http://soap.genomics.org.cn/soapaligner.html"
+ url = "http://soap.genomics.org.cn/down/soap2.21release.tar.gz"
+
+ version('2.21', '563b8b7235463b68413f9e841aa40779')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.share.man)
+ install('soap', prefix.bin)
+ install('2bwt-builder', prefix.bin)
+ install('soap.1', prefix.share.man)
+ install('soap.man', prefix.share.man)
diff --git a/var/spack/repos/builtin/packages/soapindel/package.py b/var/spack/repos/builtin/packages/soapindel/package.py
new file mode 100644
index 0000000000..1a6bd4ff8d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/soapindel/package.py
@@ -0,0 +1,53 @@
+##############################################################################
+# 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/spack/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 Soapindel(MakefilePackage):
+ """SOAPindel is focusing on calling indels from the next-generation
+ paired-end sequencing data."""
+
+ homepage = "http://soap.genomics.org.cn/soapindel.html"
+
+ version('2.1.7.17', '317ef494173969cdc6a8244dd87d06bd',
+ url='http://soap.genomics.org.cn/down/SOAPindel_20130918_2.1.7.17.zip')
+
+ depends_on('perl', type=('build', 'run'))
+
+ build_directory = 'indel_detection.release'
+
+ def install(self, spec, prefix):
+ with working_dir('indel_detection.release'):
+ install_tree('tools', prefix.tools)
+ mkdirp(prefix.lib)
+ install('affine_align.pm', prefix.lib)
+ install('indel_lib.pm', prefix.lib)
+ mkdirp(prefix.bin)
+ install('assemble_align', prefix.bin)
+ install('cluster_reads', prefix.bin)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PERL5LIB', self.prefix.lib)
+ run_env.prepend_path('PATH', self.prefix.tools)
diff --git a/var/spack/repos/builtin/packages/soapsnp/package.py b/var/spack/repos/builtin/packages/soapsnp/package.py
new file mode 100644
index 0000000000..34c56eebb2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/soapsnp/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Soapsnp(MakefilePackage):
+ """SOAPsnp uses a method based on Bayes' theorem (the reverse probability
+ model) to call consensus genotype by carefully considering the data
+ quality, alignment, and recurring experimental errors."""
+
+ homepage = "http://soap.genomics.org.cn/soapsnp.html"
+ url = "http://soap.genomics.org.cn/down/SOAPsnp-v1.03.tar.gz"
+
+ version('1.03', '8d69e196013657357ff840b611762ebc')
+
+ depends_on('boost')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('soapsnp', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/somatic-sniper/package.py b/var/spack/repos/builtin/packages/somatic-sniper/package.py
new file mode 100644
index 0000000000..40c66af214
--- /dev/null
+++ b/var/spack/repos/builtin/packages/somatic-sniper/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 SomaticSniper(CMakePackage):
+ """A tool to call somatic single nucleotide variants."""
+
+ homepage = "http://gmt.genome.wustl.edu/packages/somatic-sniper"
+ url = "https://github.com/genome/somatic-sniper/archive/v1.0.5.0.tar.gz"
+
+ version('1.0.5.0', '64bc2b001c9a8089f2a05900f8a0abfe')
+
+ depends_on('ncurses')
+
+ parallel = False
diff --git a/var/spack/repos/builtin/packages/sortmerna/package.py b/var/spack/repos/builtin/packages/sortmerna/package.py
new file mode 100644
index 0000000000..bd3136162b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sortmerna/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Sortmerna(CMakePackage):
+ """SortMeRNA is a program tool for filtering, mapping and OTU-picking NGS
+ reads in metatranscriptomic and metagenomic data"""
+
+ homepage = "https://github.com/biocore/sortmerna"
+ url = "https://github.com/biocore/sortmerna"
+
+ version('2017-07-13', git='https://github.com/biocore/sortmerna.git', commit='8bde6fa113a5d99a23ae81b48eeea6760e966094')
+
+ depends_on('zlib')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir(join_path('spack-build', 'src', 'indexdb')):
+ install('indexdb', prefix.bin)
+ with working_dir(join_path('spack-build', 'src', 'sortmerna')):
+ install('sortmerna', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sosflow/package.py b/var/spack/repos/builtin/packages/sosflow/package.py
new file mode 100644
index 0000000000..c3b99fd479
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sosflow/package.py
@@ -0,0 +1,51 @@
+##############################################################################
+# 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/spack/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 Sosflow(CMakePackage):
+ """SOSflow provides a flexible, scalable, and programmable framework for
+ observation, introspection, feedback, and control of HPC applications."""
+
+ homepage = "https://github.com/cdwdirect/sos_flow/wiki"
+ url = "https://github.com/cdwdirect/sos_flow.git"
+
+ version('spack', git='https://github.com/cdwdirect/sos_flow.git', tag='spack-build-v0.9901')
+
+ depends_on('libevpath')
+ depends_on('sqlite@3:')
+
+ def setup_environment(self, spack_env, run_env):
+ spack_env.set('SOS_HOST_KNOWN_AS', 'SPACK-SOS-BUILD')
+ spack_env.set('SOS_HOST_NODE_NAME', 'SPACK-SOS-NODE')
+ spack_env.set('SOS_HOST_DETAILED', 'SPACK-SOS-DETAILED')
+
+ run_env.set('SOS_ROOT', self.spec.prefix)
+ run_env.set('SOS_BUILD_DIR', self.spec.prefix)
+ run_env.set('SOS_CMD_PORT', '22500')
+ run_env.set('SOS_WORK', env['HOME'])
+ run_env.set('SOS_EVPATH_MEETUP', env['HOME'])
+ run_env.set('SOS_ENV_SET', 'true')
diff --git a/var/spack/repos/builtin/packages/sowing/package.py b/var/spack/repos/builtin/packages/sowing/package.py
index f7f6297488..668038255b 100644
--- a/var/spack/repos/builtin/packages/sowing/package.py
+++ b/var/spack/repos/builtin/packages/sowing/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,7 +26,7 @@
from spack import *
-class Sowing(Package):
+class Sowing(AutotoolsPackage):
"""Sowing generates Fortran interfaces and documentation for PETSc
and MPICH.
"""
@@ -36,7 +36,5 @@ class Sowing(Package):
version('1.1.23-p1', '65aaf3ae2a4c0f30d532fec291702e16')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
+ def build(self, spec, prefix):
make('ALL', parallel=False)
- make("install")
diff --git a/var/spack/repos/builtin/packages/sox/package.py b/var/spack/repos/builtin/packages/sox/package.py
new file mode 100644
index 0000000000..64c9803d52
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sox/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Sox(AutotoolsPackage):
+ """SoX, the Swiss Army knife of sound processing programs."""
+
+ homepage = "http://sox.sourceforge.net/Main/HomePage"
+ url = "https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2"
+
+ version('14.4.2', 'ba804bb1ce5c71dd484a102a5b27d0dd')
+
+ depends_on('bzip2')
+ depends_on('flac')
+ depends_on('id3lib')
+ depends_on('libvorbis')
+ depends_on('opus')
diff --git a/var/spack/repos/builtin/packages/spades/package.py b/var/spack/repos/builtin/packages/spades/package.py
new file mode 100644
index 0000000000..0748ef0618
--- /dev/null
+++ b/var/spack/repos/builtin/packages/spades/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Spades(CMakePackage):
+ """SPAdes - St. Petersburg genome assembler - is intended for both
+ standard isolates and single-cell MDA bacteria assemblies."""
+
+ homepage = "http://cab.spbu.ru/software/spades/"
+ url = "http://cab.spbu.ru/files/release3.10.1/SPAdes-3.10.1.tar.gz"
+
+ version('3.10.1', 'dcab7d145af81b59cc867562f27536c3')
+
+ depends_on('python', type=('build', 'run'))
+ depends_on('zlib')
+ depends_on('bzip2')
+
+ conflicts('%gcc@7.1.0:')
+
+ root_cmakelists_dir = 'src'
diff --git a/var/spack/repos/builtin/packages/spark/package.py b/var/spack/repos/builtin/packages/spark/package.py
index 84b63fa87f..9d7f793803 100644
--- a/var/spack/repos/builtin/packages/spark/package.py
+++ b/var/spack/repos/builtin/packages/spark/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,11 @@
# 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 *
-
+import re
import shutil
+from spack import *
+
class Spark(Package):
"""Apache Spark is a fast and general engine
@@ -33,17 +34,20 @@ class Spark(Package):
"""
homepage = "http://spark.apache.org"
- url = "http://mirrors.ocf.berkeley.edu/apache/spark/spark-2.0.0/spark-2.0.0-bin-without-hadoop.tgz"
+ url = "http://archive.apache.org/dist/spark/spark-2.0.0/spark-2.0.0-bin-without-hadoop.tgz"
variant('hadoop', default=False,
description='Build with Hadoop')
- depends_on('jdk', type=('build', 'run'))
+ depends_on('java', type=('build', 'run'))
depends_on('hadoop', when='+hadoop', type=('build', 'run'))
+ version('2.1.0', '21d4471e78250775b1fa7c0e6c3a1326')
+ version('2.0.2', '32110c1bb8f081359738742bd26bced1')
version('2.0.0', '8a5307d973da6949a385aefb6ff747bb')
version('1.6.2', '304394fbe2899211217f0cd9e9b2b5d9')
version('1.6.1', 'fcf4961649f15af1fea78c882e65b001')
+ version('1.6.0', '2c28edc89ca0067e63e525c04f7b1d89')
def install(self, spec, prefix):
@@ -64,11 +68,14 @@ class Spark(Package):
@when('+hadoop')
def setup_environment(self, spack_env, run_env):
- env['JAVA_HOME'] = self.spec['jdk'].prefix
+ env['JAVA_HOME'] = self.spec['java'].prefix
# spack_env.set('JAVA_HOME', self.spec['jdk'].prefix)
- hadoop_bin_path = join_path(self.spec['hadoop'].prefix.bin, 'hadoop')
- hadoop_bin = Executable(hadoop_bin_path)
- hadoop_classpath = hadoop_bin('classpath', return_output=True)
+ hadoop = self.spec['hadoop'].command
+ hadoop_classpath = hadoop('classpath', output=str)
+
+ # Remove whitespaces, as they can compromise syntax in
+ # module files
+ hadoop_classpath = re.sub('[\s+]', '', hadoop_classpath)
run_env.set('SPARK_DIST_CLASSPATH', hadoop_classpath)
diff --git a/var/spack/repos/builtin/packages/sparsehash/package.py b/var/spack/repos/builtin/packages/sparsehash/package.py
index e5abd42ae6..1d8b870bd5 100644
--- a/var/spack/repos/builtin/packages/sparsehash/package.py
+++ b/var/spack/repos/builtin/packages/sparsehash/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,9 @@
from spack import *
-class Sparsehash(Package):
+class Sparsehash(AutotoolsPackage):
"""Sparse and dense hash-tables for C++ by Google"""
homepage = "https://github.com/sparsehash/sparsehash"
url = "https://github.com/sparsehash/sparsehash/archive/sparsehash-2.0.3.tar.gz"
version('2.0.3', 'd8d5e2538c1c25577b3f066d7a55e99e')
-
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/sparta/package.py b/var/spack/repos/builtin/packages/sparta/package.py
new file mode 100644
index 0000000000..cfe6658f3b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sparta/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Sparta(Package):
+ """small RNA-PARE Target Analyzer (sPARTA) is a tool which utilizes
+ high-throughput sequencing to profile genome-wide cleavage
+ products."""
+
+ homepage = "https://github.com/atulkakrana/sPARTA.github"
+ url = "https://github.com/atulkakrana/sPARTA/archive/1.25.tar.gz"
+
+ version('1.25', '50fda66bf860f63ae8aef5e8fb997a75')
+
+ depends_on('bowtie2')
+ depends_on('python@3:', type=('build', 'run'))
+ depends_on('py-scipy', type=('build', 'run'))
+ depends_on('py-numpy', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('sPARTA.py', prefix.bin)
+ install('revFernoMap.py', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/spdlog/package.py b/var/spack/repos/builtin/packages/spdlog/package.py
index f9520219a3..9d952728db 100644
--- a/var/spack/repos/builtin/packages/spdlog/package.py
+++ b/var/spack/repos/builtin/packages/spdlog/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/spectrum-mpi/package.py b/var/spack/repos/builtin/packages/spectrum-mpi/package.py
new file mode 100644
index 0000000000..c2b08c0086
--- /dev/null
+++ b/var/spack/repos/builtin/packages/spectrum-mpi/package.py
@@ -0,0 +1,70 @@
+##############################################################################
+# Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC.
+# Produced at International Business Machines Corporation
+#
+# This file is part of Spack.
+# Created by Serban Maerean, serban@us.ibm.gov, All rights reserved.
+# LLNL-CODE-647188
+#
+# For details, see https://github.com/spack/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 SpectrumMpi(Package):
+ """
+ IBM MPI implementation from Spectrum MPI.
+
+ """
+
+ homepage = "http://www-03.ibm.com/systems/spectrum-computing/products/mpi"
+ url = "http://www-03.ibm.com/systems/spectrum-computing/products/mpi"
+
+ provides('mpi')
+
+ def install(self, spec, prefix):
+ raise InstallError('IBM MPI is not installable; it is vendor supplied')
+
+ def setup_dependent_package(self, module, dependent_spec):
+ # get the compiler names
+ if '%xl' in dependent_spec or '%xl_r' in dependent_spec:
+ self.spec.mpicc = join_path(self.prefix.bin, 'mpixlc')
+ self.spec.mpicxx = join_path(self.prefix.bin, 'mpixlC')
+ self.spec.mpif77 = join_path(self.prefix.bin, 'mpixlf')
+ self.spec.mpifc = join_path(self.prefix.bin, 'mpixlf')
+ else:
+ self.spec.mpicc = join_path(self.prefix.bin, 'mpicc')
+ self.spec.mpicxx = join_path(self.prefix.bin, 'mpicxx')
+ self.spec.mpif77 = join_path(self.prefix.bin, 'mpif77')
+ self.spec.mpifc = join_path(self.prefix.bin, 'mpif90')
+
+ def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
+ if '%xl' in dependent_spec or '%xl_r' in dependent_spec:
+ spack_env.set('MPICC', join_path(self.prefix.bin, 'mpixlc'))
+ spack_env.set('MPICXX', join_path(self.prefix.bin, 'mpixlC'))
+ spack_env.set('MPIF77', join_path(self.prefix.bin, 'mpixlf'))
+ spack_env.set('MPIF90', join_path(self.prefix.bin, 'mpixlf'))
+ else:
+ spack_env.set('MPICC', join_path(self.prefix.bin, 'mpicc'))
+ spack_env.set('MPICXX', join_path(self.prefix.bin, 'mpic++'))
+ spack_env.set('MPIF77', join_path(self.prefix.bin, 'mpif77'))
+ spack_env.set('MPIF90', join_path(self.prefix.bin, 'mpif90'))
+
+ spack_env.set('OMPI_CC', spack_cc)
+ spack_env.set('OMPI_CXX', spack_cxx)
+ spack_env.set('OMPI_FC', spack_fc)
+ spack_env.set('OMPI_F77', spack_f77)
diff --git a/var/spack/repos/builtin/packages/speex/package.py b/var/spack/repos/builtin/packages/speex/package.py
new file mode 100644
index 0000000000..6e0f50feec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/speex/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Speex(AutotoolsPackage):
+ """Speex is an Open Source/Free Software patent-free
+ audio compression format designed for speech."""
+
+ homepage = "https://speex.org"
+ url = "http://downloads.us.xiph.org/releases/speex/speex-1.2.0.tar.gz"
+
+ version('1.2.0', '8ab7bb2589110dfaf0ed7fa7757dc49c')
diff --git a/var/spack/repos/builtin/packages/sph2pipe/cmake.patch b/var/spack/repos/builtin/packages/sph2pipe/cmake.patch
new file mode 100644
index 0000000000..e5ff6dfc0c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sph2pipe/cmake.patch
@@ -0,0 +1,10 @@
+diff -ruN sph2pipe_v2.5.ori/CMakeLists.txt sph2pipe_v2.5/CMakeLists.txt
+--- sph2pipe_v2.5.ori/CMakeLists.txt 1970-01-01 08:00:00.000000000 +0800
++++ sph2pipe_v2.5/CMakeLists.txt 2017-03-27 17:33:27.000000000 +0800
+@@ -0,0 +1,6 @@
++PROJECT (SPH2PIPE)
++SET(SRC_LIST file_headers.c shorten_x.c sph2pipe.c)
++ADD_EXECUTABLE(sph2pipe ${SRC_LIST})
++TARGET_LINK_LIBRARIES(sph2pipe m)
++INSTALL(TARGETS sph2pipe
++ RUNTIME DESTINATION bin)
diff --git a/var/spack/repos/builtin/packages/sph2pipe/package.py b/var/spack/repos/builtin/packages/sph2pipe/package.py
new file mode 100644
index 0000000000..471461249a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sph2pipe/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Sph2pipe(CMakePackage):
+ """Sph2pipe is a portable tool for
+ converting SPHERE files to other formats."""
+
+ homepage = "https://www.ldc.upenn.edu/language-resources/tools/sphere-conversion-tools"
+ url = "https://www.ldc.upenn.edu/sites/www.ldc.upenn.edu/files/ctools/sph2pipe_v2.5.tar.gz"
+
+ version('2.5', '771d9143e9aec0a22c6a14e138974be2')
+
+ patch('cmake.patch')
diff --git a/var/spack/repos/builtin/packages/spherepack/package.py b/var/spack/repos/builtin/packages/spherepack/package.py
new file mode 100644
index 0000000000..792853b51d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/spherepack/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Spherepack(Package):
+ """SPHEREPACK - A Package for Modeling Geophysical Processes"""
+
+ homepage = "https://www2.cisl.ucar.edu/resources/legacy/spherepack"
+ url = "https://www2.cisl.ucar.edu/sites/default/files/spherepack3.2.tar"
+
+ version('3.2', '283627744f36253b4260efd7dfb7c762')
+
+ def install(self, spec, prefix):
+ if self.compiler.fc is None:
+ raise InstallError("SPHEREPACK requires a Fortran 90 compiler")
+ make("MAKE=make", "F90=f90 -O2", "AR=ar", "libspherepack")
+ make("MAKE=make", "F90=f90 -O2", "AR=ar", "testspherepack")
+ install_tree("lib", prefix.lib)
diff --git a/var/spack/repos/builtin/packages/spindle/package.py b/var/spack/repos/builtin/packages/spindle/package.py
index 213d41e970..1b863689c3 100644
--- a/var/spack/repos/builtin/packages/spindle/package.py
+++ b/var/spack/repos/builtin/packages/spindle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Spindle(Package):
+class Spindle(AutotoolsPackage):
"""Spindle improves the library-loading performance of dynamically
linked HPC applications. Without Spindle large MPI jobs can
overload on a shared file system when loading dynamically
@@ -33,13 +33,7 @@ class Spindle(Package):
"""
homepage = "https://computation.llnl.gov/project/spindle/"
url = "https://github.com/hpc/Spindle/archive/v0.8.1.tar.gz"
- list_url = "https://github.com/hpc/Spindle/releases"
version('0.8.1', 'f11793a6b9d8df2cd231fccb2857d912')
depends_on("launchmon")
-
- def install(self, spec, prefix):
- configure("--prefix=" + prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/spot/package.py b/var/spack/repos/builtin/packages/spot/package.py
index 096aa24c02..cd045dae68 100644
--- a/var/spack/repos/builtin/packages/spot/package.py
+++ b/var/spack/repos/builtin/packages/spot/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,19 +25,18 @@
from spack import *
-class Spot(Package):
+class Spot(AutotoolsPackage):
"""Spot is a C++11 library for omega-automata manipulation and model
checking."""
- homepage = "https://spot.lrde.epita.fr/index.html"
+ homepage = "https://spot.lrde.epita.fr/"
url = "http://www.lrde.epita.fr/dload/spot/spot-1.99.3.tar.gz"
version('1.99.3', 'd53adcb2d0fe7c69f45d4e595a58254e')
+ version('1.2.6', '799bf59ccdee646d12e00f0fe6c23902')
- # depends_on("gcc@4.8:", type='build')
- depends_on("python@3.2:")
+ variant('python', default=True, description='Enable python API')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
-
- make()
- make("install")
+ depends_on("python@3.3:", when='@1.99.5: +python')
+ depends_on("python@3.2:", when='@1.99: +python')
+ depends_on("python@2:", when='+python')
+ depends_on('boost', when='@:1.2.6')
diff --git a/var/spack/repos/builtin/packages/sqlite/package.py b/var/spack/repos/builtin/packages/sqlite/package.py
index c57ee72323..de949df998 100644
--- a/var/spack/repos/builtin/packages/sqlite/package.py
+++ b/var/spack/repos/builtin/packages/sqlite/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,25 +26,39 @@ from spack import *
from spack import architecture
-class Sqlite(Package):
+class Sqlite(AutotoolsPackage):
"""SQLite3 is an SQL database engine in a C library. Programs that
link the SQLite3 library can have SQL database access without
running a separate RDBMS process.
"""
homepage = "www.sqlite.org"
+ version('3.20.0', 'e262a28b73cc330e7e83520c8ce14e4d',
+ url='https://www.sqlite.org/2017/sqlite-autoconf-3200000.tar.gz')
+ version('3.18.0', 'a6687a8ae1f66abc8df739aeadecfd0c',
+ url='https://www.sqlite.org/2017/sqlite-autoconf-3180000.tar.gz')
+ version('3.8.10.2', 'a18bfc015cd49a1e7a961b7b77bc3b37',
+ url='https://www.sqlite.org/2015/sqlite-autoconf-3081002.tar.gz')
version('3.8.5', '0544ef6d7afd8ca797935ccc2685a9ed',
url='https://www.sqlite.org/2014/sqlite-autoconf-3080500.tar.gz')
+ depends_on('readline')
+
+ # On some platforms (e.g., PPC) the include chain includes termios.h which
+ # defines a macro B0. Sqlite has a shell.c source file that declares a
+ # variable named B0 and will fail to compile when the macro is found. The
+ # following patch undefines the macro in shell.c
+ patch('sqlite_b0.patch', when='@3.18.0')
+
def get_arch(self):
arch = architecture.Arch()
arch.platform = architecture.platform()
return str(arch.platform.target('default_target'))
- def install(self, spec, prefix):
- config = ["--prefix=" + prefix]
+ def configure_args(self):
+ args = []
+
if self.get_arch() == 'ppc64le':
- config.append("--build=powerpc64le-redhat-linux-gnu")
- configure(*config)
- make()
- make("install")
+ args.append('--build=powerpc64le-redhat-linux-gnu')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/sqlite/sqlite_b0.patch b/var/spack/repos/builtin/packages/sqlite/sqlite_b0.patch
new file mode 100644
index 0000000000..0be1bb95c1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sqlite/sqlite_b0.patch
@@ -0,0 +1,13 @@
+--- a/shell.c 2017-05-03 10:49:13.266276246 -0700
++++ b/shell.c 2017-05-03 10:51:34.868963321 -0700
+@@ -198,6 +198,10 @@
+ #define getrusage(A,B) memset(B,0,sizeof(*B))
+ #endif
+
++#ifdef B0
++#undef B0
++#endif
++
+ /* Saved resource information for the beginning of an operation */
+ static struct rusage sBegin; /* CPU time at start */
+ static sqlite3_int64 iBegin; /* Wall-clock time at start */
diff --git a/var/spack/repos/builtin/packages/squid/package.py b/var/spack/repos/builtin/packages/squid/package.py
new file mode 100644
index 0000000000..379aff577c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/squid/package.py
@@ -0,0 +1,33 @@
+##############################################################################
+# 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/spack/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 Squid(AutotoolsPackage):
+ """C function library for sequence analysis."""
+
+ homepage = "http://eddylab.org/software.html"
+
+ version('1.9g', 'b9bf480c65d01417b7894c82d094ce07', url='http://eddylab.org/software/squid/squid.tar.gz')
diff --git a/var/spack/repos/builtin/packages/sra-toolkit/package.py b/var/spack/repos/builtin/packages/sra-toolkit/package.py
new file mode 100644
index 0000000000..e1d5b54300
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sra-toolkit/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 SraToolkit(Package):
+ """The NCBI SRA Toolkit enables reading ("dumping") of sequencing files
+ from the SRA database and writing ("loading") files into the .sra
+ format."""
+
+ homepage = "https://trace.ncbi.nlm.nih.gov/Traces/sra"
+ url = "https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/2.8.2-1/sratoolkit.2.8.2-1-centos_linux64.tar.gz"
+
+ version('2.8.2-1', '3a2910754aea71aba5662804efff2a68')
+
+ def url_for_version(self, version):
+ url = 'https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/{0}/sratoolkit.{0}-centos_linux64.tar.gz'
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('example', prefix.example)
+ install_tree('schema', prefix.schema)
diff --git a/var/spack/repos/builtin/packages/sspace-longread/package.py b/var/spack/repos/builtin/packages/sspace-longread/package.py
new file mode 100644
index 0000000000..4eac8cf177
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sspace-longread/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class SspaceLongread(Package):
+ """SSPACE-LongRead is a stand-alone program for scaffolding pre-assembled
+ contigs using long reads
+
+ Note: A manual download is required for SSPACE-LongRead.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://www.baseclear.com/genomics/bioinformatics/basetools/SSPACE-longread"
+
+ version('1.1', '0bb5d8603d7ead4ff1596135a520cc26')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def url_for_version(self, version):
+ return "file://{0}/40SSPACE-LongRead_v{1}.tar.gz".format(
+ os.getcwd(), version.dashed)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('blasr', prefix.bin)
+ install('SSPACE-LongRead.pl', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sspace-standard/package.py b/var/spack/repos/builtin/packages/sspace-standard/package.py
new file mode 100644
index 0000000000..2724c1022f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sspace-standard/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class SspaceStandard(Package):
+ """SSPACE standard is a stand-alone program for scaffolding pre-assembled
+ contigs using NGS paired-read data
+
+ Note: A manual download is required for SSPACE-Standard.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://www.baseclear.com/genomics/bioinformatics/basetools/SSPACE"
+ url = "file://{0}/41SSPACE-STANDARD-3.0_linux-x86_64.tar.gz".format(os.getcwd())
+
+ version('3.0', '7e171b4861b9d514e80aafc3d9cdf554')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('bowtie', prefix.bowtie)
+ install_tree('bwa', prefix.bwa)
+ install_tree('dotlib', prefix.dotlib)
+ install_tree('tools', prefix.tools)
+ install('SSPACE_Standard_v{0}.pl'.format(self.version), prefix)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('SSPACE_HOME', prefix)
+ run_env.prepend_path('PATH', prefix)
diff --git a/var/spack/repos/builtin/packages/sst-dumpi/package.py b/var/spack/repos/builtin/packages/sst-dumpi/package.py
new file mode 100644
index 0000000000..6422013871
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sst-dumpi/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+#
+# Author: Samuel Knight <sknigh@sandia.gov>
+# Date: Feb 3, 2017
+#
+from spack import *
+
+
+class SstDumpi(AutotoolsPackage):
+ """The DUMPI package provides libraries to collect and read traces of MPI
+ applications. Traces are created by linking an application with a library
+ that uses the PMPI interface to intercept MPI calls. DUMPI records
+ signatures of all MPI-1 and MPI-2 subroutine calls, return values, request
+ information, and PAPI counters.
+ """
+
+ homepage = "http://sst.sandia.gov/about_dumpi.html"
+ url = "https://github.com/sstsimulator/sst-dumpi/archive/6.1.0.tar.gz"
+
+ depends_on('autoconf@1.68:', type='build')
+ depends_on('automake@1.11.1:', type='build')
+ depends_on('libtool@1.2.4:', type='build')
+ depends_on('m4', type='build')
+
+ version('master',
+ git='https://github.com/sstsimulator/sst-dumpi.git',
+ branch='master')
+
+ version('6.1.0', '31c3f40a697dc85bf23dd34270982319')
diff --git a/var/spack/repos/builtin/packages/sst-macro/package.py b/var/spack/repos/builtin/packages/sst-macro/package.py
new file mode 100644
index 0000000000..3fade2694f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sst-macro/package.py
@@ -0,0 +1,64 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+#
+# Author: Samuel Knight <sknigh@sandia.gov>
+# Date: Feb 3, 2017
+#
+from spack import *
+
+
+class SstMacro(AutotoolsPackage):
+ """The SST/macro software package provides a simulator for large-scale
+ parallel computer architectures for the coarse-grained study of
+ distributed-memory applications. The simulator is driven from either a
+ trace file or skeleton application. SST/macro's modular architecture can
+ be extended with additional network models, trace file formats,
+ software services, and processor models.
+ """
+
+ homepage = "http://sst.sandia.gov/about_sstmacro.html"
+ url = "https://github.com/sstsimulator/sst-macro/releases/download/v6.1.0_Final/sstmacro-6.1.0.tar.gz"
+
+ depends_on('boost@1.59:')
+ depends_on('autoconf@1.68:', type='build', when='@master')
+ depends_on('automake@1.11.1:', type='build', when='@master')
+ depends_on('libtool@1.2.4:', type='build', when='@master')
+ depends_on('m4', type='build', when='@master')
+
+ version('master',
+ git='https://github.com/sstsimulator/sst-macro.git',
+ branch='master')
+
+ version('6.1.0', '98b737be6326b8bd711de832ccd94d14',
+ url='https://github.com/sstsimulator/sst-macro/releases/download/v6.1.0_Final/sstmacro-6.1.0.tar.gz')
+
+ @run_before('autoreconf')
+ def bootstrap(self):
+ if '@master' in self.spec:
+ Executable('./bootstrap.sh')()
+
+ def configure_args(self):
+ args = ['--disable-regex']
+ return args
diff --git a/var/spack/repos/builtin/packages/stacks/package.py b/var/spack/repos/builtin/packages/stacks/package.py
new file mode 100644
index 0000000000..975e1c88b6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/stacks/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 Stacks(AutotoolsPackage):
+ """Stacks is a software pipeline for building loci from short-read
+ sequences, such as those generated on the Illumina platform."""
+
+ homepage = "http://catchenlab.life.illinois.edu/stacks/"
+ url = "http://catchenlab.life.illinois.edu/stacks/source/stacks-1.46.tar.gz"
+
+ version('1.46', '18b0568a4bba44fb4e5be0eb7ee2c08d')
+
+ variant('sparsehash', default=True, description='Improve Stacks memory usage with SparseHash')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('sparsehash', when='+sparsehash')
+
+ def configure_args(self):
+ args = []
+ if '+sparsehash' in self.spec:
+ args.append('--enable-sparsehash')
+ else:
+ args.append('--disable-sparsehash')
+ return args
diff --git a/var/spack/repos/builtin/packages/staden-io-lib/package.py b/var/spack/repos/builtin/packages/staden-io-lib/package.py
new file mode 100644
index 0000000000..3cb82061aa
--- /dev/null
+++ b/var/spack/repos/builtin/packages/staden-io-lib/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 StadenIoLib(AutotoolsPackage):
+ """Io_lib is a library for reading/writing various bioinformatics
+ file formats."""
+
+ homepage = "http://staden.sourceforge.net/"
+ url = "https://sourceforge.net/projects/staden/files/io_lib/1.14.8/io_lib-1.14.8.tar.gz/download"
+
+ version('1.14.8', 'fe5ee6aaec8111a5bc3ac584a0c0c0c7')
+
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/star-ccm-plus/package.py b/var/spack/repos/builtin/packages/star-ccm-plus/package.py
index ba1516b62a..cc230fe028 100644
--- a/var/spack/repos/builtin/packages/star-ccm-plus/package.py
+++ b/var/spack/repos/builtin/packages/star-ccm-plus/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,6 +31,7 @@ class StarCcmPlus(Package):
"""STAR-CCM+ (Computational Continuum Mechanics) CFD solver."""
homepage = "http://mdx.plm.automation.siemens.com/star-ccm-plus"
+ url = "file://{0}/STAR-CCM+11.06.010_02_linux-x86_64.tar.gz".format(os.getcwd())
version('11.06.010_02', 'd349c6ac8293d8e6e7a53533d695588f')
@@ -40,10 +41,6 @@ class StarCcmPlus(Package):
license_required = True
license_vars = ['CDLMD_LICENSE_FILE', 'LM_LICENSE_FILE']
- def url_for_version(self, version):
- return "file://{0}/STAR-CCM+{1}_linux-x86_64.tar.gz".format(
- os.getcwd(), version)
-
def install(self, spec, prefix):
# There is a known issue with the LaunchAnywhere application.
# Specifically, it cannot handle long prompts or prompts
diff --git a/var/spack/repos/builtin/packages/star/package.py b/var/spack/repos/builtin/packages/star/package.py
new file mode 100644
index 0000000000..3a21e5806e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/star/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Star(Package):
+ """STAR is an ultrafast universal RNA-seq aligner."""
+
+ homepage = "https://github.com/alexdobin/STAR"
+ url = "https://github.com/alexdobin/STAR/archive/2.5.3a.tar.gz"
+
+ version('2.5.3a', 'baf8d1b62a50482cfa13acb7652dc391',
+ url='https://github.com/alexdobin/STAR/archive/2.5.3a.tar.gz')
+ version('2.4.2a', '8b9345f2685a5ec30731e0868e86d506',
+ url='https://github.com/alexdobin/STAR/archive/STAR_2.4.2a.tar.gz')
+
+ def install(self, spec, prefix):
+ with working_dir('source'):
+ make('STAR', 'STARlong')
+ mkdirp(prefix.bin)
+ install('STAR', prefix.bin)
+ install('STARlong', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/stat/package.py b/var/spack/repos/builtin/packages/stat/package.py
index c511fcee70..f2733f8f61 100644
--- a/var/spack/repos/builtin/packages/stat/package.py
+++ b/var/spack/repos/builtin/packages/stat/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,19 @@
from spack import *
-class Stat(Package):
+class Stat(AutotoolsPackage):
"""Library to create, manipulate, and export graphs Graphlib."""
homepage = "http://paradyn.org/STAT/STAT.html"
url = "https://github.com/lee218llnl/stat/archive/v2.0.0.tar.gz"
+ version('3.0.1', 'dac6f23c3639a0b21f923dc6219ba385',
+ url='https://github.com/LLNL/STAT/files/911503/stat-3.0.1.zip')
+ version('3.0.0', 'a97cb235c266371c4a26329112de48a2',
+ url='https://github.com/LLNL/STAT/releases/download/v3.0.0/STAT-3.0.0.tar.gz')
version('2.2.0', '26bd69dd57a15afdd5d0ebdb0b7fb6fc')
version('2.1.0', 'ece26beaf057aa9134d62adcdda1ba91')
version('2.0.0', 'c7494210b0ba26b577171b92838e1a9b')
- version('3.0.0', 'a97cb235c266371c4a26329112de48a2',
- url='https://github.com/LLNL/STAT/releases/download/v3.0.0/STAT-3.0.0.tar.gz')
# TODO: dysect requires Dyninst patch for version 3.0.0b
variant('dysect', default=False, description="enable DySectAPI")
@@ -44,7 +46,6 @@ class Stat(Package):
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
- depends_on('libelf')
depends_on('libdwarf')
depends_on('dyninst', when='~dysect')
depends_on('dyninst@8.2.1+stat_dysect', when='+dysect')
@@ -53,27 +54,25 @@ class Stat(Package):
depends_on('graphviz', type=('build', 'link', 'run'))
depends_on('launchmon')
depends_on('mrnet')
- depends_on('python')
- depends_on('py-pygtk')
+ depends_on('python@:2.8')
+ depends_on('py-pygtk', type=('build', 'run'))
depends_on('swig')
depends_on('mpi', when='+examples')
patch('configure_mpicxx.patch', when='@2.1.0')
- def install(self, spec, prefix):
- configure_args = [
- "--enable-gui",
- "--prefix=%s" % prefix,
+ def configure_args(self):
+ spec = self.spec
+ args = [
"--with-launchmon=%s" % spec['launchmon'].prefix,
"--with-mrnet=%s" % spec['mrnet'].prefix,
"--with-graphlib=%s" % spec['graphlib'].prefix,
"--with-stackwalker=%s" % spec['dyninst'].prefix,
- "--with-libdwarf=%s" % spec['libdwarf'].prefix
+ "--with-libdwarf=%s" % spec['libdwarf'].prefix,
+ "--with-python=%s" % spec['python'].command.path,
]
if '+dysect' in spec:
- configure_args.append('--enable-dysectapi')
+ args.append('--enable-dysectapi')
if '~examples' in spec:
- configure_args.append('--disable-examples')
- configure(*configure_args)
-
- make("install")
+ args.append('--disable-examples')
+ return args
diff --git a/var/spack/repos/builtin/packages/stc/package.py b/var/spack/repos/builtin/packages/stc/package.py
new file mode 100644
index 0000000000..7a55b73873
--- /dev/null
+++ b/var/spack/repos/builtin/packages/stc/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# 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/spack/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 Stc(AutotoolsPackage):
+ """STC: The Swift-Turbine Compiler"""
+
+ homepage = 'http://swift-lang.org/Swift-T'
+ url = 'http://swift-lang.github.io/swift-t-downloads/stc-0.7.3.tar.gz'
+
+ version('0.7.3', '6bf769f406f6c33d1c134521373718d3')
+
+ depends_on('java')
+ depends_on('ant')
+ depends_on('turbine')
+
+ def configure_args(self):
+ args = ['--with-turbine=' + self.spec['turbine'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/stream/package.py b/var/spack/repos/builtin/packages/stream/package.py
index 8b3f32af8a..69ddfe5b07 100644
--- a/var/spack/repos/builtin/packages/stream/package.py
+++ b/var/spack/repos/builtin/packages/stream/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Stream(Package):
+class Stream(MakefilePackage):
"""The STREAM benchmark is a simple synthetic benchmark program that
measures sustainable memory bandwidth (in MB/s) and the corresponding
computation rate for simple vector kernels."""
@@ -36,7 +36,7 @@ class Stream(Package):
variant('openmp', default=False, description='Build with OpenMP support')
- def patch(self):
+ def edit(self, spec, prefix):
makefile = FileFilter('Makefile')
# Use the Spack compiler wrappers
@@ -54,8 +54,6 @@ class Stream(Package):
makefile.filter('FFLAGS = .*', 'FFLAGS = {0}'.format(fflags))
def install(self, spec, prefix):
- make()
-
# Manual installation
mkdir(prefix.bin)
install('stream_c.exe', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/strelka/package.py b/var/spack/repos/builtin/packages/strelka/package.py
new file mode 100644
index 0000000000..19c5de7dc8
--- /dev/null
+++ b/var/spack/repos/builtin/packages/strelka/package.py
@@ -0,0 +1,88 @@
+##############################################################################
+# 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/spack/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 Strelka(CMakePackage):
+ """Somatic and germline small variant caller for mapped sequencing
+ data."""
+
+ homepage = "https://github.com/Illumina/strelka"
+ url = "https://github.com/Illumina/strelka/releases/download/v2.8.2/strelka-2.8.2.release_src.tar.bz2"
+
+ version('2.8.2', 'c48753997fcf2e4edac4e9854495721e')
+
+ depends_on('python@2.4:')
+ depends_on('zlib')
+ depends_on('bzip2')
+ depends_on('cmake@2.8.5:')
+ depends_on('boost@1.56.0:')
+
+ @run_before('install')
+ def filter_sbang(self):
+ """Run before install so that the standard Spack sbang install hook
+ can fix up the path to the python binary.
+ """
+
+ match = '^#!/usr/bin/env python'
+ python = self.spec['python'].command
+ substitute = "#!{p}".format(p=python)
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ with working_dir('src'):
+ files = [
+ 'config/validate/validateJsonModelFromSchema.py',
+ 'srcqc/run_cppcheck.py',
+ 'python/libexec/cat.py',
+ 'python/libexec/sortVcf.py',
+ 'python/libexec/extractSmallIndelCandidates.py',
+ 'python/libexec/configureStrelkaNoiseWorkflow.py',
+ 'python/libexec/configureSequenceErrorCountsWorkflow.py',
+ 'python/libexec/vcfCmdlineSwapper.py',
+ 'python/libexec/mergeChromDepth.py',
+ 'python/scoringModelTraining/germline/bin/evs_learn.py',
+ 'python/scoringModelTraining/germline/bin/parseAnnotatedTrainingVcf.py', # noqa: E501
+ 'python/scoringModelTraining/germline/bin/filterTrainingVcf.py', # noqa: E501
+ 'python/scoringModelTraining/germline/bin/evs_exportmodel.py',
+ 'python/scoringModelTraining/germline/bin/evs_qq.py',
+ 'python/scoringModelTraining/germline/bin/evs_pr.py',
+ 'python/scoringModelTraining/germline/bin/evs_evaluate.py',
+ 'python/scoringModelTraining/somatic/bin/evs_random_sample_tpfp.py', # noqa: E501
+ 'python/scoringModelTraining/somatic/bin/evs_learn.py',
+ 'python/scoringModelTraining/somatic/bin/evs_random_split_csv.py', # noqa: E501
+ 'python/scoringModelTraining/somatic/bin/vcf_to_feature_csv.py', # noqa: E501
+ 'python/scoringModelTraining/somatic/bin/calc_features.py',
+ 'python/scoringModelTraining/somatic/bin/evs_exportmodel.py',
+ 'python/scoringModelTraining/somatic/bin/evs_pr.py',
+ 'python/scoringModelTraining/somatic/bin/evs_evaluate.py',
+ 'python/bin/configureStrelkaGermlineWorkflow.py',
+ 'python/bin/configureStrelkaSomaticWorkflow.py',
+ ]
+ filter_file(match, substitute, *files, **kwargs)
+
+ with working_dir('spack-build/redist'):
+ files = [
+ 'pyflow-1.1.18/src/pyflow.py',
+ ]
+ filter_file(match, substitute, *files, **kwargs)
diff --git a/var/spack/repos/builtin/packages/stress/package.py b/var/spack/repos/builtin/packages/stress/package.py
new file mode 100644
index 0000000000..497853f73b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/stress/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Stress(AutotoolsPackage):
+ """stress is a deliberately simple workload generator for POSIX systems.
+ It imposes a configurable amount of CPU, memory, I/O, and disk stress on
+ the system. It is written in C, and is free software licensed under the
+ GPLv2."""
+
+ homepage = "https://people.seas.harvard.edu/~apw/stress/"
+ url = "https://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz"
+
+ version('1.0.4', '890a4236dd1656792f3ef9a190cf99ef')
diff --git a/var/spack/repos/builtin/packages/stringtie/package.py b/var/spack/repos/builtin/packages/stringtie/package.py
new file mode 100644
index 0000000000..9e5a690a5d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/stringtie/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Stringtie(MakefilePackage):
+ """StringTie is a fast and highly efficient assembler of RNA-Seq alignments
+ into potential transcripts."""
+
+ homepage = "https://ccb.jhu.edu/software/stringtie"
+ url = "https://github.com/gpertea/stringtie/archive/v1.3.3b.tar.gz"
+
+ version('1.3.3b', '11a43260b18e4272182380e922445d88')
+
+ depends_on('samtools')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('stringtie', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/structure/package.py b/var/spack/repos/builtin/packages/structure/package.py
new file mode 100644
index 0000000000..cbfc1e9850
--- /dev/null
+++ b/var/spack/repos/builtin/packages/structure/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Structure(MakefilePackage):
+ """Structure is a free software package for using multi-locus genotype
+ data to investigate population structure."""
+
+ homepage = "http://web.stanford.edu/group/pritchardlab/structure.html"
+ url = "http://web.stanford.edu/group/pritchardlab/structure_software/release_versions/v2.3.4/structure_kernel_source.tar.gz"
+
+ version('2.3.4', '4e0591678cdbfe79347d272b5dceeda1')
+
+ depends_on('jdk', type=('build', 'run'))
+
+ def url_for_version(self, version):
+ url = "http://web.stanford.edu/group/pritchardlab/structure_software/release_versions/v{0}/structure_kernel_source.tar.gz"
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('structure', prefix.bin)
+ install('mainparams', prefix.bin)
+ install('extraparams', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sublime-text/package.py b/var/spack/repos/builtin/packages/sublime-text/package.py
index 81d8690db8..e28aa04c94 100644
--- a/var/spack/repos/builtin/packages/sublime-text/package.py
+++ b/var/spack/repos/builtin/packages/sublime-text/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,8 +33,8 @@ class SublimeText(Package):
homepage = "http://www.sublimetext.com/"
url = "https://download.sublimetext.com/sublime_text_3_build_3126_x64.tar.bz2"
- version('3126', 'acc34252b0ea7dff1f581c5db1564dcb')
- version('2.0.2', '699cd26d7fe0bada29eb1b2cd7b50e4b')
+ version('3_build_3126', 'acc34252b0ea7dff1f581c5db1564dcb')
+ version('2.0.2', '699cd26d7fe0bada29eb1b2cd7b50e4b')
# Sublime text comes as a pre-compiled binary.
# Since we can't link to Spack packages, we'll just have to
@@ -49,7 +49,7 @@ class SublimeText(Package):
depends_on('libxau', type='run')
def url_for_version(self, version):
- if version.up_to(1) == '2':
+ if version[0] == 2:
return "https://download.sublimetext.com/Sublime%20Text%20{0}%20x64.tar.bz2".format(version)
else:
return "https://download.sublimetext.com/sublime_text_3_build_{0}_x64.tar.bz2".format(version)
diff --git a/var/spack/repos/builtin/packages/subread/package.py b/var/spack/repos/builtin/packages/subread/package.py
new file mode 100644
index 0000000000..86c5efe42e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/subread/package.py
@@ -0,0 +1,52 @@
+##############################################################################
+# 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/spack/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 *
+import sys
+
+
+class Subread(MakefilePackage):
+ """The Subread software package is a tool kit for processing next-gen
+ sequencing data."""
+
+ homepage = "http://subread.sourceforge.net/"
+ url = "https://downloads.sourceforge.net/project/subread/subread-1.5.2/subread-1.5.2-source.tar.gz"
+
+ version('1.5.2', '817d2a46d87fcef885c8832475b8b247')
+
+ depends_on('zlib')
+
+ def build(self, spec, prefix):
+ plat = sys.platform
+ with working_dir('src'):
+ if plat.startswith('linux'):
+ make('-f', 'Makefile.Linux')
+ elif plat.startswith('darwin'):
+ make('-f', 'Makefile.MacOS')
+ else:
+ raise InstallError("The communication mechanism %s is not"
+ "supported" % plat)
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/subversion/package.py b/var/spack/repos/builtin/packages/subversion/package.py
index 02b7d96378..5d4b998b32 100644
--- a/var/spack/repos/builtin/packages/subversion/package.py
+++ b/var/spack/repos/builtin/packages/subversion/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -27,11 +27,15 @@ from spack import *
class Subversion(Package):
"""Apache Subversion - an open source version control system."""
- homepage = 'https://subversion.apache.org/'
- url = 'http://archive.apache.org/dist/subversion/subversion-1.8.13.tar.gz'
+ homepage = 'https://subversion.apache.org/'
+ url = 'http://archive.apache.org/dist/subversion/subversion-1.8.13.tar.gz'
- version('1.8.13', '8065b3698d799507fb72dd7926ed32b6')
+ version('1.9.5', 'ac9f8ee235f1b667dd6506864af8035aaedfc2d9')
version('1.9.3', 'a92bcfaec4e5038f82c74a7b5bbd2f46')
+ version('1.8.17', 'd1f8d45f97168d6271c58c5b25421cc32954c81b')
+ version('1.8.13', '8065b3698d799507fb72dd7926ed32b6')
+
+ variant('perl', default=False, description='Build with Perl bindings')
depends_on('apr')
depends_on('apr-util')
@@ -39,6 +43,10 @@ class Subversion(Package):
depends_on('sqlite')
depends_on('serf')
+ extends('perl', when='+perl')
+ depends_on('swig@1.3.24:3.0.0', when='+perl')
+ depends_on('perl-term-readkey', when='+perl')
+
# Optional: We need swig if we want the Perl, Python or Ruby
# bindings.
# depends_on('swig')
@@ -60,12 +68,29 @@ class Subversion(Package):
options.append('--with-zlib=%s' % spec['zlib'].prefix)
options.append('--with-sqlite=%s' % spec['sqlite'].prefix)
options.append('--with-serf=%s' % spec['serf'].prefix)
- # options.append('--with-swig=%s' % spec['swig'].prefix)
+
+ if 'swig' in spec:
+ options.append('--with-swig=%s' % spec['swig'].prefix)
+ if 'perl' in spec:
+ options.append('PERL=%s' % spec['perl'].command.path)
configure(*options)
make()
+ if self.run_tests:
+ make('check')
make('install')
+ if spec.satisfies('+perl'):
+ make('swig-pl')
+ if self.run_tests:
+ make('check-swig-pl')
+ make('install-swig-pl-lib')
+ with working_dir(join_path(
+ 'subversion', 'bindings', 'swig', 'perl', 'native')):
+ perl = which('perl')
+ perl('Makefile.PL', 'INSTALL_BASE=%s' % prefix)
+ make('install')
+
# python bindings
# make('swig-py',
# 'swig-pydir=/usr/lib/python2.7/site-packages/libsvn',
@@ -74,10 +99,6 @@ class Subversion(Package):
# 'swig-pydir=/usr/lib/python2.7/site-packages/libsvn',
# 'swig_pydir_extra=/usr/lib/python2.7/site-packages/svn')
- # perl bindings
- # make('swig-pl')
- # make('install-swig-pl')
-
# ruby bindings
# make('swig-rb')
# make('isntall-swig-rb')
diff --git a/var/spack/repos/builtin/packages/suite-sparse/package.py b/var/spack/repos/builtin/packages/suite-sparse/package.py
index aa22e1ecce..429a7f0706 100644
--- a/var/spack/repos/builtin/packages/suite-sparse/package.py
+++ b/var/spack/repos/builtin/packages/suite-sparse/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,11 +32,15 @@ class SuiteSparse(Package):
homepage = 'http://faculty.cse.tamu.edu/davis/suitesparse.html'
url = 'http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.1.tar.gz'
+ version('4.5.5', '0a5b38af0016f009409a9606d2f1b555')
+ version('4.5.4', 'f6ab689442e64a1624a47aa220072d1b')
version('4.5.3', '8ec57324585df3c6483ad7f556afccbd')
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
- variant('tbb', default=True, description='Build with Intel TBB')
- variant('fpic', default=True, description='Build position independent code (required to link with shared libraries)')
+ variant('tbb', default=False, description='Build with Intel TBB')
+ variant('pic', default=True, description='Build position independent code (required to link with shared libraries)')
+ variant('cuda', default=False, description='Build with CUDA')
+ variant('openmp', default=False, description='Build with OpenMP')
depends_on('blas')
depends_on('lapack')
@@ -46,7 +50,12 @@ class SuiteSparse(Package):
# flags does not seem to be used, which leads to linking errors on Linux.
depends_on('tbb', when='@4.5.3:+tbb')
- patch('tbb_453.patch', when='@4.5.3')
+ depends_on('cuda', when='+cuda')
+
+ patch('tbb_453.patch', when='@4.5.3:+tbb')
+
+ # This patch removes unsupported flags for pgi compiler
+ patch('pgi.patch', when='%pgi')
def install(self, spec, prefix):
# The build system of SuiteSparse is quite old-fashioned.
@@ -55,56 +64,57 @@ class SuiteSparse(Package):
# logic in it. Any kind of customization will need to go through
# filtering of that file
- make_args = ['INSTALL=%s' % prefix]
+ pic_flag = self.compiler.pic_flag if '+pic' in spec else ''
- # inject Spack compiler wrappers
- make_args.extend([
+ make_args = [
+ 'INSTALL=%s' % prefix,
+ # By default, the Makefile uses the Intel compilers if
+ # they are found. The AUTOCC flag disables this behavior,
+ # forcing it to use Spack's compiler wrappers.
'AUTOCC=no',
- 'CC=cc',
- 'CXX=c++',
- 'F77=f77',
- 'CUDA_ROOT =',
- 'GPU_BLAS_PATH =',
- 'GPU_CONFIG =',
- 'CUDA_PATH =',
- 'CUDART_LIB =',
- 'CUBLAS_LIB =',
- 'CUDA_INC_PATH =',
- 'NV20 =',
- 'NV30 =',
- 'NV35 =',
- 'NVCC = echo',
- 'NVCCFLAGS =',
- ])
- if '+fpic' in spec:
- make_args.extend(['CFLAGS=-fPIC', 'FFLAGS=-fPIC'])
-
- # use Spack's metis in CHOLMOD/Partition module,
- # otherwise internal Metis will be compiled
- make_args.extend([
- 'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib,
+ # CUDA=no does NOT disable cuda, it only disables internal search
+ # for CUDA_PATH. If in addition the latter is empty, then CUDA is
+ # completely disabled. See
+ # [SuiteSparse/SuiteSparse_config/SuiteSparse_config.mk] for more.
+ 'CUDA=no',
+ 'CUDA_PATH=%s' % (spec['cuda'].prefix if '+cuda' in spec else ''),
+ 'CFOPENMP=%s' % (self.compiler.openmp_flag
+ if '+openmp' in spec else ''),
+ 'CFLAGS=-O3 %s' % pic_flag,
+ # Both FFLAGS and F77FLAGS are used in SuiteSparse makefiles;
+ # FFLAGS is used in CHOLMOD, F77FLAGS is used in AMD and UMFPACK.
+ 'FFLAGS=%s' % pic_flag,
+ 'F77FLAGS=%s' % pic_flag,
+ # use Spack's metis in CHOLMOD/Partition module,
+ # otherwise internal Metis will be compiled
+ 'MY_METIS_LIB=%s' % spec['metis'].libs.ld_flags,
'MY_METIS_INC=%s' % spec['metis'].prefix.include,
- ])
+ # Make sure Spack's Blas/Lapack is used. Otherwise System's
+ # Blas/Lapack might be picked up. Need to add -lstdc++, following
+ # with the TCOV path of SparseSuite 4.5.1's Suitesparse_config.mk,
+ # even though this fix is ugly
+ 'BLAS=%s' % (spec['blas'].libs.ld_flags + (
+ '-lstdc++' if '@4.5.1' in spec else '')),
+ 'LAPACK=%s' % spec['lapack'].libs.ld_flags,
+ ]
+
+ # SuiteSparse defaults to using '-fno-common -fexceptions' in
+ # CFLAGS, but not all compilers use the same flags for these
+ # optimizations
+ if any([x in spec
+ for x in ('%clang', '%gcc', '%intel')]):
+ make_args += ['CFLAGS+=-fno-common -fexceptions']
+ elif '%pgi' in spec:
+ make_args += ['CFLAGS+=--exceptions']
+
+ if '%xl' in spec or '%xl_r' in spec:
+ make_args += ['CFLAGS+=-DBLAS_NO_UNDERSCORE']
# Intel TBB in SuiteSparseQR
if 'tbb' in spec:
- make_args.extend([
+ make_args += [
'SPQR_CONFIG=-DHAVE_TBB',
'TBB=-L%s -ltbb' % spec['tbb'].prefix.lib,
- ])
-
- # Make sure Spack's Blas/Lapack is used. Otherwise System's
- # Blas/Lapack might be picked up.
- blas = spec['blas'].blas_libs.ld_flags
- lapack = spec['lapack'].lapack_libs.ld_flags
- if '@4.5.1' in spec:
- # adding -lstdc++ is clearly an ugly way to do this, but it follows
- # with the TCOV path of SparseSuite 4.5.1's Suitesparse_config.mk
- blas += ' -lstdc++'
-
- make_args.extend([
- 'BLAS=%s' % blas,
- 'LAPACK=%s' % lapack
- ])
+ ]
make('install', *make_args)
diff --git a/var/spack/repos/builtin/packages/suite-sparse/pgi.patch b/var/spack/repos/builtin/packages/suite-sparse/pgi.patch
new file mode 100644
index 0000000000..f615a57674
--- /dev/null
+++ b/var/spack/repos/builtin/packages/suite-sparse/pgi.patch
@@ -0,0 +1,12 @@
+--- a/SuiteSparse_config/SuiteSparse_config.mk
++++ b/SuiteSparse_config/SuiteSparse_config.mk
+@@ -89,7 +89,8 @@
+
+ # The CF macro is used by SuiteSparse Makefiles as a combination of
+ # CFLAGS, CPPFLAGS, TARGET_ARCH, and system-dependent settings.
+- CF ?= $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OPTIMIZATION) -fexceptions -fPIC
++ #CF ?= $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OPTIMIZATION) -fexceptions -fPIC
++ CF ?= $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OPTIMIZATION) -fPIC
+
+ #---------------------------------------------------------------------------
+ # OpenMP is used in CHOLMOD
diff --git a/var/spack/repos/builtin/packages/sumaclust/package.py b/var/spack/repos/builtin/packages/sumaclust/package.py
new file mode 100644
index 0000000000..923fb347b4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sumaclust/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Sumaclust(MakefilePackage):
+ """Sumaclust aims to cluster sequences in a way that is fast and exact at
+ the same time."""
+
+ homepage = "https://git.metabarcoding.org/obitools/sumaclust"
+
+ version('1.0.20', '31c7583fbe2e3345d5fe3e9431d9b30c',
+ url="https://git.metabarcoding.org/obitools/sumaclust/uploads/69f757c42f2cd45212c587e87c75a00f/sumaclust_v1.0.20.tar.gz")
+
+ def build(self, spec, prefix):
+ make('CC={0}'.format(spack_cc))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('sumaclust', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/sundials/package.py b/var/spack/repos/builtin/packages/sundials/package.py
index 6ee247b7ea..16cbcbe34f 100644
--- a/var/spack/repos/builtin/packages/sundials/package.py
+++ b/var/spack/repos/builtin/packages/sundials/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -24,126 +24,351 @@
##############################################################################
from spack import *
import os
+import sys
-class Sundials(Package):
+class Sundials(CMakePackage):
"""SUNDIALS (SUite of Nonlinear and DIfferential/ALgebraic equation
Solvers)"""
- homepage = "http://computation.llnl.gov/casc/sundials/"
- url = "http://computation.llnl.gov/projects/sundials-suite-nonlinear-differential-algebraic-equation-solvers/download/sundials-2.6.2.tar.gz"
+ homepage = "https://computation.llnl.gov/projects/sundials"
+ url = "https://computation.llnl.gov/projects/sundials/download/sundials-2.7.0.tar.gz"
+ maintainers = ['cswoodward', 'gardner48']
+ # ==========================================================================
+ # Versions
+ # ==========================================================================
+
+ version('3.1.0', '1a84ca41c7f71067e03d519ddbcd9dae')
+ version('3.0.0', '5163a44cedd7398bddda442ba00313b8')
+ version('2.7.0', 'c304631b9bc82877d7b0e9f4d4fd94d3')
version('2.6.2', '3deeb0ede9f514184c6bd83ecab77d95')
- variant('mpi', default=True, description='Enable MPI support')
- variant('lapack', default=True,
- description='Build with external BLAS/LAPACK libraries')
- variant('klu', default=False,
- description='Build with SuiteSparse KLU libraries')
- variant('superlu', default=False,
- description='Build with SuperLU_MT libraries')
- variant('openmp', default=False, description='Enable OpenMP support')
- variant('pthread', default=True,
- description='Enable POSIX threads support')
-
- depends_on('cmake', type='build')
- depends_on('mpi', when='+mpi')
- depends_on('blas', when='+lapack')
- depends_on('lapack', when='+lapack')
- depends_on('suite-sparse', when='+klu')
- depends_on('superlu-mt+openmp', when='+superlu+openmp')
- depends_on('superlu-mt+pthread', when='+superlu+pthread')
-
- def install(self, spec, prefix):
- cmake_args = std_cmake_args[:]
- cmake_args.extend([
- '-DBUILD_SHARED_LIBS=ON',
- '-DCMAKE_C_FLAGS=-fPIC',
- '-DCMAKE_Fortran_FLAGS=-fPIC',
- '-DEXAMPLES_ENABLE=ON',
- '-DEXAMPLES_INSTALL=ON',
- '-DFCMIX_ENABLE=ON'
+ # ==========================================================================
+ # Variants
+ # ==========================================================================
+
+ # SUNDIALS solvers
+ sun_solvers = ['CVODE', 'CVODES', 'ARKODE', 'IDA', 'IDAS', 'KINSOL']
+
+ for pkg in sun_solvers:
+ variant(pkg, default=True,
+ description='Enable %s solver' % pkg)
+
+ # Real type
+ variant(
+ 'precision',
+ default='double',
+ description='real type precision',
+ values=('single', 'double', 'extended'),
+ multi=False
+ )
+
+ # Index type
+ variant('int64', default=False,
+ description='Use 64bit integers for indices')
+
+ # Parallelism
+ variant('mpi', default=True,
+ description='Enable MPI parallel vector')
+ variant('openmp', default=False,
+ description='Enable OpenMP parallel vector')
+ variant('pthread', default=False,
+ description='Enable Pthreads parallel vector')
+ variant('cuda', default=False,
+ description='Enable CUDA parallel vector')
+ variant('raja', default=False,
+ description='Enable RAJA parallel vector')
+
+ # External libraries
+ variant('lapack', default=False,
+ description='Enable LAPACK direct solvers')
+ variant('klu', default=False,
+ description='Enable KLU sparse, direct solver')
+ variant('superlu-mt', default=False,
+ description='Enable SuperLU_MT sparse, direct solver')
+ variant('hypre', default=False,
+ description='Enable Hypre MPI parallel vector')
+ variant('petsc', default=False,
+ description='Enable PETSc MPI parallel vector')
+
+ # Library type
+ variant('shared', default=True,
+ description='Build shared libraries')
+ variant('static', default=True,
+ description='Build static libraries')
+
+ # Fortran interface
+ variant('fcmix', default=False,
+ description='Enable Fortran interface')
+
+ # Examples
+ variant('examples-c', default=True,
+ description='Enable C examples')
+ variant('examples-cxx', default=False,
+ description='Enable C++ examples')
+ variant('examples-f77', default=True,
+ description='Enable Fortran 77 examples')
+ variant('examples-f90', default=False,
+ description='Enable Fortran 90 examples')
+ variant('examples-cuda', default=False,
+ description='Enable CUDA examples')
+ variant('examples-raja', default=False,
+ description='Enable RAJA examples')
+ variant('examples-install', default=True,
+ description='Install examples')
+
+ # Generic (std-c) math libraries (UNIX only)
+ variant('generic-math', default=True,
+ description='Use generic (std-c) math libraries on unix systems')
+
+ # ==========================================================================
+ # Conflicts
+ # ==========================================================================
+
+ # Options added after v2.6.2
+ conflicts('+hypre', when='@:2.6.2')
+ conflicts('+petsc', when='@:2.6.2')
+
+ # Options added after v2.7.0
+ conflicts('+cuda', when='@:2.7.0')
+ conflicts('+raja', when='@:2.7.0')
+ conflicts('~int64', when='@:2.7.0')
+ conflicts('+examples-cuda', when='@:2.7.0')
+ conflicts('+examples-raja', when='@:2.7.0')
+
+ # External libraries incompatible with 64-bit indices
+ conflicts('+lapack', when='@3.0.0: +int64')
+ conflicts('+hypre', when='+hypre@:2.6.1a +int64')
+
+ # External libraries incompatible with single precision
+ conflicts('+klu', when='precision=single')
+ conflicts('+hypre', when='+hypre@:2.12.0 precision=single')
+
+ # External libraries incompatible with extended (quad) precision
+ conflicts('+lapack', when='precision=extended')
+ conflicts('+superlu-mt', when='precision=extended')
+ conflicts('+klu', when='precision=extended')
+ conflicts('+hypre', when='+hypre@:2.12.0 precision=extended')
+
+ # External libraries that need to be built with MPI
+ conflicts('+hypre', when='~mpi')
+ conflicts('+petsc', when='~mpi')
+
+ # SuperLU_MT interface requires lapack for external blas (before v3.0.0)
+ conflicts('+superlu-mt', when='@:2.7.0 ~lapack')
+
+ # ==========================================================================
+ # Dependencies
+ # ==========================================================================
+
+ # Build dependencies
+ depends_on('cmake@2.8.1:', type='build')
+
+ # MPI related dependencies
+ depends_on('mpi', when='+mpi')
+ depends_on('mpi', when='+hypre')
+ depends_on('mpi', when='+petsc')
+
+ # Other parallelism dependencies
+ depends_on('cuda', when='+cuda')
+ depends_on('raja', when='+raja')
+
+ # External libraries
+ depends_on('blas', when='+lapack')
+ depends_on('lapack', when='+lapack')
+ depends_on('suite-sparse', when='+klu')
+
+ # Require that external libraries built with the same precision
+ depends_on('petsc~double~complex', when='+petsc precision=single')
+ depends_on('petsc+double~complex', when='+petsc precision=double')
+
+ # Require that external libraries built with the same index type
+ depends_on('hypre', when='+hypre')
+ depends_on('hypre~int64', when='+hypre ~int64')
+ depends_on('hypre+int64', when='+hypre +int64')
+ depends_on('petsc', when='+petsc')
+ depends_on('petsc~int64', when='+petsc ~int64')
+ depends_on('petsc+int64', when='+petsc +int64')
+
+ # Require that PETSc is built with MPI
+ depends_on('petsc+mpi', when='+petsc')
+
+ # Require that SuperLU_MT built with external blas
+ depends_on('superlu-mt+blas', when='+superlu-mt')
+
+ # ==========================================================================
+ # Patches
+ # ==========================================================================
+
+ # remove OpenMP header file and function from hypre vector test code
+ patch('test_nvector_parhyp.patch', when='@2.7.0:3.0.0')
+
+ # ==========================================================================
+ # SUNDIALS Settings
+ # ==========================================================================
+
+ def cmake_args(self):
+ spec = self.spec
+
+ def on_off(varstr):
+ return 'ON' if varstr in self.spec else 'OFF'
+
+ fortran_flag = self.compiler.pic_flag
+ if spec.satisfies('%clang platform=darwin'):
+ mpif77 = Executable(self.spec['mpi'].mpif77)
+ libgfortran = LibraryList(mpif77('--print-file-name',
+ 'libgfortran.a', output=str))
+ fortran_flag += ' ' + libgfortran.ld_flags
+
+ # List of CMake arguments
+ # Note: CMAKE_INSTALL_PREFIX and CMAKE_BUILD_TYPE are set automatically
+ args = []
+
+ # SUNDIALS solvers
+ for pkg in self.sun_solvers:
+ args.extend(['-DBUILD_%s=%s' % (pkg, on_off('+' + pkg))])
+
+ # precision
+ args.extend([
+ '-DSUNDIALS_PRECISION=%s' % spec.variants['precision'].value
+ ])
+
+ # index type (v3.0.0 or later)
+ if spec.satisfies('@3.0.0:'):
+ if '+int64' in spec:
+ args.extend(['-DSUNDIALS_INDEX_TYPE=int64_t'])
+ else:
+ args.extend(['-DSUNDIALS_INDEX_TYPE=int32_t'])
+
+ # Fortran interface
+ args.extend(['-DFCMIX_ENABLE=%s' % on_off('+fcmix')])
+
+ # library type
+ args.extend([
+ '-DBUILD_SHARED_LIBS=%s' % on_off('+shared'),
+ '-DBUILD_STATIC_LIBS=%s' % on_off('+static')
+ ])
+
+ # generic (std-c) math libraries
+ args.extend([
+ '-DUSE_GENERIC_MATH=%s' % on_off('+generic-math')
+ ])
+
+ # parallelism
+ args.extend([
+ '-DMPI_ENABLE=%s' % on_off('+mpi'),
+ '-DOPENMP_ENABLE=%s' % on_off('+openmp'),
+ '-DPTHREAD_ENABLE=%s' % on_off('+pthread'),
+ '-DCUDA_ENABLE=%s' % on_off('+cuda'),
+ '-DRAJA_ENABLE=%s' % on_off('+raja')
])
# MPI support
if '+mpi' in spec:
- cmake_args.extend([
- '-DMPI_ENABLE=ON',
- '-DMPI_MPICC={0}'.format(spec['mpi'].mpicc),
- '-DMPI_MPIF77={0}'.format(spec['mpi'].mpif77)
- ])
- else:
- cmake_args.append('-DMPI_ENABLE=OFF')
+ args.extend(['-DMPI_MPICC=%s' % spec['mpi'].mpicc])
+ if 'examples-cxx' in spec:
+ args.extend(['-DMPI_MPICXX=%s' % spec['mpi'].mpicxx])
+ if ('+fcmix' in spec) and ('+examples-f77' in spec):
+ args.extend(['-DMPI_MPIF77=%s' % spec['mpi'].mpif77])
+ if ('+fcmix' in spec) and ('+examples-f90' in spec):
+ args.extend(['-DMPI_MPIF90=%s' % spec['mpi'].mpifc])
# Building with LAPACK and BLAS
if '+lapack' in spec:
- cmake_args.extend([
+ args.extend([
'-DLAPACK_ENABLE=ON',
- '-DLAPACK_LIBRARIES={0}'.format(
- (spec['lapack'].lapack_libs +
- spec['blas'].blas_libs).joined(';')
- )
+ '-DLAPACK_LIBRARIES=%s'
+ % (spec['lapack'].libs + spec['blas'].libs).joined(';')
])
- else:
- cmake_args.append('-DLAPACK_ENABLE=OFF')
# Building with KLU
if '+klu' in spec:
- cmake_args.extend([
+ args.extend([
'-DKLU_ENABLE=ON',
- '-DKLU_INCLUDE_DIR={0}'.format(
- spec['suite-sparse'].prefix.include),
- '-DKLU_LIBRARY_DIR={0}'.format(
- spec['suite-sparse'].prefix.lib)
+ '-DKLU_INCLUDE_DIR=%s' % spec['suite-sparse'].prefix.include,
+ '-DKLU_LIBRARY_DIR=%s' % spec['suite-sparse'].prefix.lib
])
- else:
- cmake_args.append('-DKLU_ENABLE=OFF')
# Building with SuperLU_MT
- if '+superlu' in spec:
- cmake_args.extend([
+ if '+superlu-mt' in spec:
+ if spec.satisfies('@3.0.0:'):
+ args.extend([
+ '-DBLAS_ENABLE=ON',
+ '-DBLAS_LIBRARIES=%s' % spec['blas'].libs
+ ])
+ args.extend([
'-DSUPERLUMT_ENABLE=ON',
- '-DSUPERLUMT_INCLUDE_DIR={0}'.format(
- spec['superlu-mt'].prefix.include),
- '-DSUPERLUMT_LIBRARY_DIR={0}'.format(
- spec['superlu-mt'].prefix.lib)
+ '-DSUPERLUMT_INCLUDE_DIR=%s'
+ % spec['superlu-mt'].prefix.include,
+ '-DSUPERLUMT_LIBRARY_DIR=%s'
+ % spec['superlu-mt'].prefix.lib
])
- if '+openmp' in spec:
- cmake_args.append('-DSUPERLUMT_THREAD_TYPE=OpenMP')
- elif '+pthread' in spec:
- cmake_args.append('-DSUPERLUMT_THREAD_TYPE=Pthread')
+ if spec.satisfies('^superlu-mt+openmp'):
+ args.append('-DSUPERLUMT_THREAD_TYPE=OpenMP')
else:
- msg = 'You must choose either +openmp or +pthread when '
- msg += 'building with SuperLU_MT'
- raise RuntimeError(msg)
- else:
- cmake_args.append('-DSUPERLUMT_ENABLE=OFF')
+ args.append('-DSUPERLUMT_THREAD_TYPE=Pthread')
- # OpenMP support
- if '+openmp' in spec:
- cmake_args.append('-DOPENMP_ENABLE=ON')
- else:
- cmake_args.append('-DOPENMP_ENABLE=OFF')
+ # Building with Hypre
+ if '+hypre' in spec:
+ args.extend([
+ '-DHYPRE_ENABLE=ON',
+ '-DHYPRE_INCLUDE_DIR=%s' % spec['hypre'].prefix.include,
+ '-DHYPRE_LIBRARY_DIR=%s' % spec['hypre'].prefix.lib
+ ])
+
+ # Building with PETSc
+ if '+petsc' in spec:
+ args.extend([
+ '-DPETSC_ENABLE=ON',
+ '-DPETSC_INCLUDE_DIR=%s' % spec['petsc'].prefix.include,
+ '-DPETSC_LIBRARY_DIR=%s' % spec['petsc'].prefix.lib
+ ])
- # POSIX threads support
- if '+pthread' in spec:
- cmake_args.append('-DPTHREAD_ENABLE=ON')
+ # Examples
+ if spec.satisfies('@3.0.0:'):
+ args.extend([
+ '-DEXAMPLES_ENABLE_C=%s' % on_off('+examples-c'),
+ '-DEXAMPLES_ENABLE_CXX=%s' % on_off('+examples-cxx'),
+ '-DEXAMPLES_ENABLE_F77=%s' % on_off('+examples-f77'),
+ '-DEXAMPLES_ENABLE_F90=%s' % on_off('+examples-f90'),
+ '-DEXAMPLES_ENABLE_CUDA=%s' % on_off('+examples-cuda'),
+ '-DEXAMPLES_ENABLE_RAJA=%s' % on_off('+examples-raja')
+ ])
else:
- cmake_args.append('-DPTHREAD_ENABLE=OFF')
+ args.extend([
+ '-DEXAMPLES_ENABLE=%s' % on_off('+examples-c'),
+ '-DCXX_ENABLE=%s' % on_off('+examples-cxx'),
+ '-DF90_ENABLE=%s' % on_off('+examples-f90')
+ ])
+
+ args.extend([
+ '-DEXAMPLES_INSTALL=%s' % on_off('+examples-install')
+ ])
+
+ return args
- with working_dir('build', create=True):
- cmake('..', *cmake_args)
+ # ==========================================================================
+ # Post Install Actions
+ # ==========================================================================
- make()
- make('install')
+ @run_after('install')
+ def post_install(self):
+ """Run after install to fix install name of dynamic libraries
+ on Darwin to have full path and install the LICENSE file."""
+ spec = self.spec
+ prefix = self.spec.prefix
- install('LICENSE', prefix)
+ if (sys.platform == 'darwin'):
+ fix_darwin_install_name(prefix.lib)
- self.filter_compilers()
+ if spec.satisfies('@:3.0.0'):
+ install('LICENSE', prefix)
+ @run_after('install')
def filter_compilers(self):
- """Run after install to tell the Makefiles to use
- the compilers that Spack built the package with.
+ """Run after install to tell the example program Makefiles
+ to use the compilers that Spack built the package with.
If this isn't done, they'll have CC, CPP, and F77 set to
Spack's generic cc and f77. We want them to be bound to
@@ -153,26 +378,101 @@ class Sundials(Package):
dirname = os.path.join(self.prefix, 'examples')
cc_files = [
- 'arkode/C_serial/Makefile', 'arkode/C_parallel/Makefile',
- 'cvode/serial/Makefile', 'cvode/parallel/Makefile',
- 'cvodes/serial/Makefile', 'cvodes/parallel/Makefile',
- 'ida/serial/Makefile', 'ida/parallel/Makefile',
- 'idas/serial/Makefile', 'idas/parallel/Makefile',
- 'kinsol/serial/Makefile', 'kinsol/parallel/Makefile',
- 'nvector/serial/Makefile', 'nvector/parallel/Makefile',
- 'nvector/pthreads/Makefile'
+ 'arkode/C_openmp/Makefile',
+ 'arkode/C_parallel/Makefile',
+ 'arkode/C_parhyp/Makefile',
+ 'arkode/C_serial/Makefile',
+ 'cvode/C_openmp/Makefile',
+ 'cvode/parallel/Makefile',
+ 'cvode/parhyp/Makefile',
+ 'cvode/serial/Makefile',
+ 'cvodes/C_openmp/Makefile',
+ 'cvodes/parallel/Makefile',
+ 'cvodes/serial/Makefile',
+ 'ida/C_openmp/Makefile',
+ 'ida/parallel/Makefile',
+ 'ida/petsc/Makefile',
+ 'ida/serial/Makefile',
+ 'idas/C_openmp/Makefile',
+ 'idas/parallel/Makefile',
+ 'idas/serial/Makefile',
+ 'kinsol/C_openmp/Makefile',
+ 'kinsol/parallel/Makefile',
+ 'kinsol/serial/Makefile',
+ 'nvector/C_openmp/Makefile',
+ 'nvector/parallel/Makefile',
+ 'nvector/parhyp/Makefile',
+ 'nvector/petsc/Makefile',
+ 'nvector/pthreads/Makefile',
+ 'nvector/serial/Makefile',
+ 'sunlinsol/band/Makefile',
+ 'sunlinsol/dense/Makefile',
+ 'sunlinsol/klu/Makefile',
+ 'sunlinsol/lapackband/Makefile',
+ 'sunlinsol/lapackdense/Makefile',
+ 'sunlinsol/pcg/parallel/Makefile',
+ 'sunlinsol/pcg/serial/Makefile',
+ 'sunlinsol/spbcgs/parallel/Makefile',
+ 'sunlinsol/spbcgs/serial/Makefile',
+ 'sunlinsol/spfgmr/parallel/Makefile',
+ 'sunlinsol/spfgmr/serial/Makefile',
+ 'sunlinsol/spgmr/parallel/Makefile',
+ 'sunlinsol/spgmr/serial/Makefile',
+ 'sunlinsol/sptfqmr/parallel/Makefile',
+ 'sunlinsol/sptfqmr/serial/Makefile',
+ 'sunlinsol/superlumt/Makefile',
+ 'sunmatrix/band/Makefile',
+ 'sunmatrix/dense/Makefile',
+ 'sunmatrix/sparse/Makefile'
+ ]
+
+ cxx_files = [
+ 'arkode/CXX_parallel/Makefile',
+ 'arkode/CXX_serial/Makefile'
+ 'cvode/cuda/Makefile',
+ 'cvode/raja/Makefile',
+ 'nvector/cuda/Makefile',
+ 'nvector/raja/Makefile'
]
f77_files = [
- 'arkode/F77_serial/Makefile', 'cvode/fcmix_serial/Makefile',
- 'ida/fcmix_serial/Makefile', 'ida/fcmix_pthreads/Makefile',
+ 'arkode/F77_parallel/Makefile',
+ 'arkode/F77_serial/Makefile',
+ 'cvode/fcmix_parallel/Makefile',
+ 'cvode/fcmix_serial/Makefile',
+ 'ida/fcmix_openmp/Makefile',
+ 'ida/fcmix_parallel/Makefile',
+ 'ida/fcmix_pthreads/Makefile',
+ 'ida/fcmix_serial/Makefile',
+ 'kinsol/fcmix_parallel/Makefile',
'kinsol/fcmix_serial/Makefile'
]
+ f90_files = [
+ 'arkode/F90_parallel/Makefile',
+ 'arkode/F90_serial/Makefile'
+ ]
+
for filename in cc_files:
filter_file(os.environ['CC'], self.compiler.cc,
os.path.join(dirname, filename), **kwargs)
+ for filename in cc_files:
+ filter_file(r'^CPP\s*=.*', self.compiler.cc,
+ os.path.join(dirname, filename), **kwargs)
+
+ for filename in cxx_files:
+ filter_file(os.environ['CXX'], self.compiler.cxx,
+ os.path.join(dirname, filename), **kwargs)
+
+ for filename in cxx_files:
+ filter_file(r'^CPP\s*=.*', self.compiler.cc,
+ os.path.join(dirname, filename), **kwargs)
+
for filename in f77_files:
filter_file(os.environ['F77'], self.compiler.f77,
os.path.join(dirname, filename), **kwargs)
+
+ for filename in f90_files:
+ filter_file(os.environ['FC'], self.compiler.fc,
+ os.path.join(dirname, filename), **kwargs)
diff --git a/var/spack/repos/builtin/packages/sundials/test_nvector_parhyp.patch b/var/spack/repos/builtin/packages/sundials/test_nvector_parhyp.patch
new file mode 100644
index 0000000000..ecb71d4a5f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sundials/test_nvector_parhyp.patch
@@ -0,0 +1,18 @@
+--- a/examples/nvector/parhyp/test_nvector_parhyp.c
++++ b/examples/nvector/parhyp/test_nvector_parhyp.c
+@@ -24,7 +24,6 @@
+ #include "test_nvector.h"
+
+ #include <mpi.h>
+-#include <omp.h>
+
+ #if defined( SUNDIALS_HAVE_POSIX_TIMERS) && defined(_POSIX_TIMERS)
+ #include <time.h>
+@@ -74,7 +73,6 @@ int main(int argc, char *argv[])
+ /* printf("\nRunning with vector length %ld \n \n", veclen); */
+ /* Get processor number and total number of processes */
+ MPI_Init(&argc, &argv);
+- /* omp_set_num_threads(4); */
+ comm = MPI_COMM_WORLD;
+ MPI_Comm_size(comm, &nprocs);
+ MPI_Comm_rank(comm, &myid);
diff --git a/var/spack/repos/builtin/packages/superlu-dist/package.py b/var/spack/repos/builtin/packages/superlu-dist/package.py
index f076358e90..cc7058236a 100644
--- a/var/spack/repos/builtin/packages/superlu-dist/package.py
+++ b/var/spack/repos/builtin/packages/superlu-dist/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,9 +22,9 @@
# 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 *
import glob
import os
+from spack import *
class SuperluDist(Package):
@@ -34,6 +34,10 @@ class SuperluDist(Package):
url = "http://crd-legacy.lbl.gov/~xiaoye/SuperLU/superlu_dist_4.1.tar.gz"
version('develop', git='https://github.com/xiaoyeli/superlu_dist', tag='master')
+ version('xsdk-0.2.0', git='https://github.com/xiaoyeli/superlu_dist', tag='xsdk-0.2.0')
+ version('5.2.2', 'a685ef7fb7859b24c8c9d5d5f121a8a5')
+ version('5.2.1', 'af857778ffeb04aea02aa4843e6e8e1d')
+ version('5.1.3', '3a9e88a8469aa7f319f0364364b8da35')
version('5.1.1', '12638c631733a27dcbd87110e9f9cb1e')
version('5.1.0', '6bb86e630bd4bd8650243aed8fd92eb9')
version('5.0.0', '2b53baf1b0ddbd9fcf724992577f0670')
@@ -53,7 +57,7 @@ class SuperluDist(Package):
depends_on('metis@5:')
def install(self, spec, prefix):
- lapack_blas = spec['lapack'].lapack_libs + spec['blas'].blas_libs
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
makefile_inc = []
makefile_inc.extend([
'PLAT = _mac_x',
@@ -61,24 +65,31 @@ class SuperluDist(Package):
'DSUPERLULIB = $(DSuperLUroot)/lib/libsuperlu_dist.a',
'BLASDEF = -DUSE_VENDOR_BLAS',
'BLASLIB = %s' % lapack_blas.ld_flags,
- 'METISLIB = -L%s -lmetis' % spec['metis'].prefix.lib,
- 'PARMETISLIB = -L%s -lparmetis' % spec['parmetis'].prefix.lib,
+ 'METISLIB = %s' % spec['metis'].libs.ld_flags,
+ 'PARMETISLIB = %s' % spec['parmetis'].libs.ld_flags,
'FLIBS =',
'LIBS = $(DSUPERLULIB) $(BLASLIB) $(PARMETISLIB) $(METISLIB)', # noqa
'ARCH = ar',
'ARCHFLAGS = cr',
'RANLIB = true',
'CC = {0}'.format(self.spec['mpi'].mpicc),
- 'CFLAGS = -fPIC -std=c99 -O2 -I%s -I%s %s' % (
- spec['parmetis'].prefix.include,
- spec['metis'].prefix.include,
- '-D_LONGINT' if '+int64' in spec else ''),
- 'NOOPTS = -fPIC -std=c99',
+ 'CFLAGS = %s %s -O2 %s %s %s' % (
+ self.compiler.pic_flag,
+ '' if '%pgi' in spec else '-std=c99',
+ spec['parmetis'].headers.cpp_flags,
+ spec['metis'].headers.cpp_flags,
+ '-D_LONGINT' if '+int64' in spec and not
+ self.spec.satisfies('@5.2.0:') else ''),
+ 'XSDK_INDEX_SIZE = %s' % ('64' if '+int64' in spec else '32'),
+ 'NOOPTS = %s -std=c99' % (
+ self.compiler.pic_flag),
'FORTRAN = {0}'.format(self.spec['mpi'].mpif77),
'F90FLAGS = -O2',
'LOADER = {0}'.format(self.spec['mpi'].mpif77),
'LOADOPTS =',
- 'CDEFS = -DAdd_'
+ 'CDEFS = %s' % ("-DNoChange"
+ if '%xl' in spec or '%xl_r' in spec
+ else "-DAdd_")
])
with open('make.inc', 'w') as fh:
diff --git a/var/spack/repos/builtin/packages/superlu-mt/package.py b/var/spack/repos/builtin/packages/superlu-mt/package.py
index ea94c2d4c5..99ecdcc642 100644
--- a/var/spack/repos/builtin/packages/superlu-mt/package.py
+++ b/var/spack/repos/builtin/packages/superlu-mt/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -86,7 +86,7 @@ class SuperluMt(Package):
if '+blas' in spec:
config.extend([
'BLASDEF = -DUSE_VENDOR_BLAS',
- 'BLASLIB = {0}'.format(spec['blas'].blas_libs.ld_flags)
+ 'BLASLIB = {0}'.format(spec['blas'].libs.ld_flags)
])
else:
config.append('BLASLIB = ../lib/libblas$(PLAT).a')
diff --git a/var/spack/repos/builtin/packages/superlu/package.py b/var/spack/repos/builtin/packages/superlu/package.py
index 829949e504..72f13ffde7 100644
--- a/var/spack/repos/builtin/packages/superlu/package.py
+++ b/var/spack/repos/builtin/packages/superlu/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,8 +38,8 @@ class Superlu(Package):
version('5.2.1', '3a1a9bff20cb06b7d97c46d337504447')
version('4.3', 'b72c6309f25e9660133007b82621ba7c')
- variant('fpic', default=False,
- description='Build with position independent code')
+ variant('pic', default=True,
+ description='Build with position independent code')
depends_on('cmake', when='@5.2.1:', type='build')
depends_on('blas')
@@ -48,10 +48,10 @@ class Superlu(Package):
def install(self, spec, prefix):
cmake_args = [
'-Denable_blaslib=OFF',
- '-DBLAS_blas_LIBRARY={0}'.format(spec['blas'].blas_libs.joined())
+ '-DBLAS_blas_LIBRARY={0}'.format(spec['blas'].libs.joined())
]
- if '+fpic' in spec:
+ if '+pic' in spec:
cmake_args.extend([
'-DCMAKE_POSITION_INDEPENDENT_CODE=ON'
])
@@ -76,7 +76,7 @@ class Superlu(Package):
'SUPERLULIB = $(SuperLUroot)/lib/libsuperlu_{0}.a' \
.format(self.spec.version),
'BLASDEF = -DUSE_VENDOR_BLAS',
- 'BLASLIB = {0}'.format(spec['blas'].blas_libs.ld_flags),
+ 'BLASLIB = {0}'.format(spec['blas'].libs.ld_flags),
# or BLASLIB = -L/usr/lib64 -lblas
'TMGLIB = libtmglib.a',
'LIBS = $(SUPERLULIB) $(BLASLIB)',
@@ -89,7 +89,7 @@ class Superlu(Package):
'CDEFS = -DAdd_'
])
- if '+fpic' in spec:
+ if '+pic' in spec:
config.extend([
# Use these lines instead when pic_flag capability arrives
'CFLAGS = -O3 {0}'.format(self.compiler.pic_flag),
@@ -117,4 +117,4 @@ class Superlu(Package):
headers = glob.glob(join_path('SRC', '*.h'))
mkdir(prefix.include)
for h in headers:
- install(h, prefix.include)
+ install(h, prefix.include)
diff --git a/var/spack/repos/builtin/packages/sw4lite/package.py b/var/spack/repos/builtin/packages/sw4lite/package.py
new file mode 100644
index 0000000000..868fc88ec2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sw4lite/package.py
@@ -0,0 +1,98 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 *
+import glob
+
+
+class Sw4lite(MakefilePackage):
+ """Sw4lite is a bare bone version of SW4 intended for testing
+ performance optimizations in a few important numerical kernels of SW4."""
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ homepage = "https://geodynamics.org/cig/software/sw4"
+ url = "https://github.com/geodynamics/sw4lite/archive/v1.0.zip"
+
+ version('develop', git='https://github.com/geodynamics/sw4lite',
+ branch='master')
+ version('1.0', '3d911165f4f2ff6d5f9c1bd56ab6723f')
+
+ variant('openmp', default=True, description='Build with OpenMP support')
+ variant('precision', default='double', values=('float', 'double'),
+ multi=False, description='Floating point precision')
+ variant('ckernel', default=False, description='C or Fortran kernel')
+
+ depends_on('blas')
+ depends_on('lapack')
+ depends_on('mpi')
+
+ parallel = False
+
+ @property
+ def build_targets(self):
+ targets = []
+ spec = self.spec
+
+ if spec.variants['precision'].value == 'double':
+ cxxflags = ['-I../src', '-I../src/double']
+ else:
+ cxxflags = ['-I../src', '-I../src/float']
+ cflags = []
+ fflags = []
+
+ if '+openmp' in self.spec:
+ cflags.append('-DSW4_OPENMP')
+ cflags.append(self.compiler.openmp_flag)
+ cxxflags.append('-DSW4_OPENMP')
+ cxxflags.append(self.compiler.openmp_flag)
+ fflags.append(self.compiler.openmp_flag)
+
+ if spec.variants['ckernel'].value is True:
+ cxxflags.append('-DSW4_CROUTINES')
+ targets.append('ckernel=yes')
+
+ targets.append('FC=' + spec['mpi'].mpifc)
+ targets.append('CXX=' + spec['mpi'].mpicxx)
+
+ targets.append('CFLAGS={0}'.format(' '.join(cflags)))
+ targets.append('CXXFLAGS={0}'.format(' '.join(cxxflags)))
+ targets.append('FFLAGS={0}'.format(' '.join(fflags)))
+
+ targets.append('EXTRA_CXX_FLAGS=')
+ targets.append('EXTRA_FORT_FLAGS=')
+ lapack_blas = spec['lapack'].libs + spec['blas'].libs
+ if spec.satisfies('%gcc'):
+ targets.append('EXTRA_LINK_FLAGS={0} -lgfortran'
+ .format(lapack_blas.ld_flags))
+ else:
+ targets.append('EXTRA_LINK_FLAGS={0}'.format(lapack_blas.ld_flags))
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ exe_name = glob.glob('*/sw4lite')[0]
+ install(exe_name, prefix.bin)
+ install_tree('tests', prefix.tests)
diff --git a/var/spack/repos/builtin/packages/swarm/package.py b/var/spack/repos/builtin/packages/swarm/package.py
new file mode 100644
index 0000000000..0f52b9774e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/swarm/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Swarm(MakefilePackage):
+ """A robust and fast clustering method for amplicon-based studies."""
+
+ homepage = "https://github.com/torognes/swarm"
+ url = "https://github.com/torognes/swarm/archive/v2.1.13.tar.gz"
+
+ version('2.1.13', 'ab6aff0ba5d20a53b9f13f8f3d85839f')
+
+ build_directory = 'src'
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('scripts', prefix.scripts)
+ install_tree('man', prefix.share.man)
diff --git a/var/spack/repos/builtin/packages/swfft/package.py b/var/spack/repos/builtin/packages/swfft/package.py
new file mode 100644
index 0000000000..aeb7e00293
--- /dev/null
+++ b/var/spack/repos/builtin/packages/swfft/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Swfft(MakefilePackage):
+ """A stand-alone version of HACC's distributed-memory, pencil-decomposed,
+ parallel 3D FFT."""
+
+ homepage = 'https://xgitlab.cels.anl.gov/hacc/SWFFT'
+
+ url = "https://xgitlab.cels.anl.gov/hacc/SWFFT/repository/v1.0/archive.tar.gz"
+
+ version('1.0', '0fbc34544b97ba9c3fb19ef2d7a0f076')
+ version('develop', git='https://xgitlab.cels.anl.gov/hacc/SWFFT',
+ branch='master')
+
+ depends_on('mpi')
+ depends_on('fftw')
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('build/CheckDecomposition', prefix.bin)
+ install('build/TestDfft', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/swiftsim/package.py b/var/spack/repos/builtin/packages/swiftsim/package.py
index 1c424b5ca0..4f094c561f 100644
--- a/var/spack/repos/builtin/packages/swiftsim/package.py
+++ b/var/spack/repos/builtin/packages/swiftsim/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -58,13 +58,6 @@ class Swiftsim(AutotoolsPackage):
tty.warn('This is needed to clone SWIFT repository')
spack_env.set('GIT_SSL_NO_VERIFY', 1)
- def autoreconf(self, spec, prefix):
- libtoolize()
- aclocal()
- autoconf()
- autogen = Executable('./autogen.sh')
- autogen()
-
def configure_args(self):
return ['--prefix=%s' % self.prefix,
'--enable-mpi' if '+mpi' in self.spec else '--disable-mpi',
diff --git a/var/spack/repos/builtin/packages/swig/package.py b/var/spack/repos/builtin/packages/swig/package.py
index b43246dcee..e9148333de 100644
--- a/var/spack/repos/builtin/packages/swig/package.py
+++ b/var/spack/repos/builtin/packages/swig/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,10 +22,13 @@
# License along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
+import os
+
+
from spack import *
-class Swig(Package):
+class Swig(AutotoolsPackage):
"""SWIG is an interface compiler that connects programs written in
C and C++ with scripting languages such as Perl, Python, Ruby,
and Tcl. It works by taking the declarations found in C/C++
@@ -36,18 +39,22 @@ class Swig(Package):
application."""
homepage = "http://www.swig.org"
- url = "http://prdownloads.sourceforge.net/swig/swig-3.0.8.tar.gz"
+ url = "http://prdownloads.sourceforge.net/swig/swig-3.0.12.tar.gz"
+ version('3.0.12', '82133dfa7bba75ff9ad98a7046be687c')
+ version('3.0.11', '13732eb0f1ab2123d180db8425c1edea')
version('3.0.10', 'bb4ab8047159469add7d00910e203124')
- version('3.0.8', 'c96a1d5ecb13d38604d7e92148c73c97')
- version('3.0.2', '62f9b0d010cef36a13a010dc530d0d41')
+ version('3.0.8', 'c96a1d5ecb13d38604d7e92148c73c97')
+ version('3.0.2', '62f9b0d010cef36a13a010dc530d0d41')
version('2.0.12', 'c3fb0b2d710cc82ed0154b91e43085a4')
- version('2.0.2', 'eaf619a4169886923e5f828349504a29')
+ version('2.0.2', 'eaf619a4169886923e5f828349504a29')
version('1.3.40', '2df766c9e03e02811b1ab4bba1c7b9cc')
depends_on('pcre')
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
- make()
- make('install')
+ build_directory = 'spack-build'
+
+ @run_after('install')
+ def create_symlink(self):
+ with working_dir(self.prefix.bin):
+ os.symlink('swig', 'swig%i.0' % self.spec.version[0])
diff --git a/var/spack/repos/builtin/packages/symengine/package.py b/var/spack/repos/builtin/packages/symengine/package.py
index f3fc13474c..844e0c2e5e 100644
--- a/var/spack/repos/builtin/packages/symengine/package.py
+++ b/var/spack/repos/builtin/packages/symengine/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,91 +23,105 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
-class Symengine(Package):
+class Symengine(CMakePackage):
"""SymEngine is a fast symbolic manipulation library, written in C++."""
homepage = "https://github.com/symengine/symengine"
url = "https://github.com/symengine/symengine/archive/v0.2.0.tar.gz"
+ version('0.3.0', 'e61d7513cca4963cd062616891de54c6')
version('0.2.0', '45401561add36a13c1f0b0c5f8d7422d')
version('0.1.0', '41ad7daed61fc5a77c285eb6c7303425')
version('develop', git='https://github.com/symengine/symengine.git')
- variant('flint', default=True,
+ variant('boostmp', default=False,
+ description='Compile with Boost multi-precision integer library')
+ variant('flint', default=False,
description='Compile with Flint integer library')
+ variant('llvm', default=False,
+ description='Compile with LLVM JIT compiler support')
variant('mpc', default=True,
description='Compile with MPC library')
variant('mpfr', default=True,
description='Compile with MPFR library')
+ variant('openmp', default=False,
+ description='Enable OpenMP support')
variant('piranha', default=False,
description='Compile with Piranha integer library')
variant('thread_safe', default=True,
description='Enable thread safety option')
- variant('openmp', default=False,
- description='Enable OpenMP support')
variant('shared', default=True,
description='Enables the build of shared libraries')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
- # Build dependencies
- depends_on('cmake', type='build')
+ # NOTE: mpir is a drop-in replacement for gmp
+ # NOTE: [mpc,mpfr,flint,piranha] could also be built against mpir
+ depends_on('boost', when='+boostmp')
+ depends_on('gmp', when='~boostmp')
+ depends_on('llvm', when='+llvm')
+ depends_on('mpc', when='+mpc~boostmp')
+ depends_on('mpfr', when='+mpfr~boostmp')
+ depends_on('flint', when='+flint~boostmp')
+ depends_on('piranha', when='+piranha~flint~boostmp')
- # Other dependencies
- depends_on('gmp') # mpir is a drop-in replacement for this
- depends_on('mpc', when='+mpc') # Could also be built against mpir
- depends_on('mpfr', when='+mpfr') # Could also be built against mpir
- depends_on('flint', when='+flint') # Could also be built against mpir
- depends_on('piranha', when='+piranha~flint') # Could also be built against mpir # NOQA
-
- def install(self, spec, prefix):
+ def cmake_args(self):
+ spec = self.spec
options = []
- options.extend(std_cmake_args)
-
- # CMAKE_BUILD_TYPE should be Debug | Release
- for word in options[:]:
- if word.startswith('-DCMAKE_BUILD_TYPE'):
- options.remove(word)
# See https://github.com/symengine/symengine/blob/master/README.md
# for build options
options.extend([
- '-DCMAKE_BUILD_TYPE=Release',
'-DWITH_SYMENGINE_RCP:BOOL=ON',
'-DWITH_SYMENGINE_THREAD_SAFE:BOOL=%s' % (
'ON' if ('+thread_safe' or '+openmp') in spec else 'OFF'),
- '-DBUILD_TESTS:BOOL=ON',
+ '-DBUILD_TESTS:BOOL=%s' % (
+ 'ON' if self.run_tests else 'OFF'),
'-DBUILD_BENCHMARKS:BOOL=ON',
- '-DWITH_MPC:BOOL=%s' % (
- 'ON' if '+mpc' in spec else 'OFF'),
- '-DWITH_MPFR:BOOL=%s' % (
- 'ON' if '+mpfr' in spec else 'OFF'),
- '-DINTEGER_CLASS:STRING=gmp',
+ '-DWITH_LLVM:BOOL=%s' % (
+ 'ON' if '+llvm' in spec else 'OFF'),
'-DWITH_OPENMP:BOOL=%s' % (
'ON' if '+openmp' in spec else 'OFF'),
'-DBUILD_SHARED_LIBS:BOOL=%s' % (
'ON' if '+shared' in spec else 'OFF'),
])
- if '+flint' in spec:
+ if sys.platform == 'darwin':
options.extend([
- '-DWITH_FLINT:BOOL=ON',
- '-DINTEGER_CLASS:STRING=flint'
+ '-DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=on'
])
- elif '+piranha' in spec:
+
+ if '+boostmp' in spec:
options.extend([
- '-DWITH_PIRANHA:BOOL=ON',
- '-DINTEGER_CLASS:STRING=piranha'
+ '-DINTEGER_CLASS:STRING=boostmp',
+ '-DBoost_INCLUDE_DIR=%s' % spec['boost'].prefix.include,
+ '-DWITH_MPC:BOOL=OFF',
+ '-DWITH_MPFR:BOOL=OFF',
])
else:
options.extend([
- '-DINTEGER_CLASS:STRING=gmp'
+ '-DWITH_MPC:BOOL=%s' % (
+ 'ON' if '+mpc' in spec else 'OFF'),
+ '-DWITH_MPFR:BOOL=%s' % (
+ 'ON' if '+mpfr' in spec else 'OFF'),
])
+ if '+flint' in spec:
+ options.extend([
+ '-DWITH_FLINT:BOOL=ON',
+ '-DINTEGER_CLASS:STRING=flint'
+ ])
+ elif '+piranha' in spec:
+ options.extend([
+ '-DWITH_PIRANHA:BOOL=ON',
+ '-DINTEGER_CLASS:STRING=piranha'
+ ])
+ else:
+ options.extend([
+ '-DINTEGER_CLASS:STRING=gmp'
+ ])
- with working_dir('spack-build', create=True):
- cmake('..', *options)
-
- make()
- make('install')
- if self.run_tests:
- ctest()
+ return options
diff --git a/var/spack/repos/builtin/packages/sympol/package.py b/var/spack/repos/builtin/packages/sympol/package.py
index 7ce4995f03..215c23ae98 100644
--- a/var/spack/repos/builtin/packages/sympol/package.py
+++ b/var/spack/repos/builtin/packages/sympol/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,14 +26,14 @@
from spack import *
-class Sympol(Package):
+class Sympol(CMakePackage):
"""SymPol is a C++ tool to work with symmetric polyhedra"""
homepage = "http://www.math.uni-rostock.de/~rehn/software/sympol.html"
url = "http://www.math.uni-rostock.de/~rehn/software/sympol-0.1.8.tar.gz"
version('0.1.8', '7cba1997f8532c754cb7259bf70caacb')
- depends_on("cmake", type='build')
+ depends_on("cmake@2.6:", type="build")
depends_on("bliss")
depends_on("boost")
@@ -41,8 +41,3 @@ class Sympol(Package):
depends_on("lrslib")
patch("lrs_mp_close.patch")
-
- def install(self, spec, prefix):
- cmake(".", *std_cmake_args)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/sz/package.py b/var/spack/repos/builtin/packages/sz/package.py
new file mode 100644
index 0000000000..5ff44d18b2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/sz/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Sz(AutotoolsPackage):
+ """Error-bounded Lossy Compressor for HPC Data."""
+
+ homepage = "https://collab.cels.anl.gov/display/ESR/SZ"
+ url = "https://github.com/disheng222/SZ/archive/v1.4.11.0.tar.gz"
+
+ version('develop', git='https://github.com/disheng222/SZ.git',
+ branch='master')
+ version('1.4.11.0', '10dee28b3503821579ce35a50e352cc6')
+ version('1.4.10.0', '82e23dc5a51bcce1f70ba7e3b68a5965')
+ version('1.4.9.2', '028ce90165b7a4c4051d4c0189f193c0')
+
+ variant('fortran', default=False,
+ description='Enable fortran compilation')
+
+ def configure_args(self):
+ args = []
+ if '+fortran' in self.spec:
+ args += ['--enable-fortran']
+ else:
+ args += ['--disable-fortran']
+ return args
diff --git a/var/spack/repos/builtin/packages/tabix/package.py b/var/spack/repos/builtin/packages/tabix/package.py
new file mode 100644
index 0000000000..85c1b03e59
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tabix/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Tabix(MakefilePackage):
+ """Generic indexer for TAB-delimited genome position files"""
+
+ homepage = "https://github.com/samtools/tabix"
+ url = "https://github.com/samtools/tabix"
+
+ version('2013-12-16', git='https://github.com/samtools/tabix.git', commit='1ae158ac79b459f5feeed7490c67519b14ce9f35')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('python', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.share.man.man1)
+ install('tabix', prefix.bin)
+ install('bgzip', prefix.bin)
+ install('tabix.py', prefix.bin)
+ install('tabix.1', prefix.share.man.man1)
+ install('tabix.tex', prefix.share)
+ install('TabixReader.java', prefix.bin)
+ install('libtabix.a', prefix.lib)
+ install_tree('perl', prefix.perl)
+ install_tree('python', prefix.python)
diff --git a/var/spack/repos/builtin/packages/talloc/package.py b/var/spack/repos/builtin/packages/talloc/package.py
new file mode 100644
index 0000000000..b2d7160a00
--- /dev/null
+++ b/var/spack/repos/builtin/packages/talloc/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# 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/spack/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 Talloc(AutotoolsPackage):
+ """Talloc provides a hierarchical, reference counted memory pool system
+ with destructors. It is the core memory allocator used in Samba."""
+
+ homepage = "https://talloc.samba.org"
+ url = "https://www.samba.org/ftp/talloc/talloc-2.1.9.tar.gz"
+
+ version('2.1.9', '19ba14eba97d79a169fa92ea824d2b9e')
diff --git a/var/spack/repos/builtin/packages/tar/argp-pgi.patch b/var/spack/repos/builtin/packages/tar/argp-pgi.patch
new file mode 100644
index 0000000000..d4f2ccbdc9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tar/argp-pgi.patch
@@ -0,0 +1,25 @@
+From 8b3e22b18791f2148da46e60040fc4d9270936b5 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue, 14 Feb 2017 08:40:23 -0800
+Subject: argp: port to PGI 16.10
+
+* gnu/argp-pin.c (dummy): Declare as needed to make file nonempty.
+
+diff --git a/gnu/argp-pin.c b/gnu/argp-pin.c
+index 261191f..64d831d 100644
+--- a/gnu/argp-pin.c
++++ b/gnu/argp-pin.c
+@@ -24,3 +24,10 @@ char *program_invocation_short_name = 0;
+ #ifndef HAVE_PROGRAM_INVOCATION_NAME
+ char *program_invocation_name = 0;
+ #endif
++
++#if (defined HAVE_PROGRAM_INVOCATION_SHORT_NAME \
++ && defined HAVE_PROGRAM_INVOCATION_NAME)
++/* This declaration is solely to ensure that after preprocessing
++ this file is never empty. */
++typedef int dummy;
++#endif
+--
+cgit v1.0-41-gc330
+
diff --git a/var/spack/repos/builtin/packages/tar/config-pgi.patch b/var/spack/repos/builtin/packages/tar/config-pgi.patch
new file mode 100644
index 0000000000..fb6ebd5b2a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tar/config-pgi.patch
@@ -0,0 +1,10 @@
+--- a/config.h.in
++++ b/config.h.in
+@@ -2182,6 +2182,7 @@
+ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+ : (199901L <= __STDC_VERSION__ \
+ && !defined __HP_cc \
++ && !defined __PGI \
+ && !(defined __SUNPRO_C && __STDC__))) \
+ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+ # define _GL_INLINE inline
diff --git a/var/spack/repos/builtin/packages/tar/gnutar-configure-xattrs.patch b/var/spack/repos/builtin/packages/tar/gnutar-configure-xattrs.patch
index e5c183b720..8b65ebab22 100644
--- a/var/spack/repos/builtin/packages/tar/gnutar-configure-xattrs.patch
+++ b/var/spack/repos/builtin/packages/tar/gnutar-configure-xattrs.patch
@@ -1,3 +1,7 @@
+Fixes major build errors on macOS
+
+See http://lists.gnu.org/archive/html/bug-tar/2014-08/msg00001.html
+
diff --git a/Makefile.in b/Makefile.in
index f9f1d1d..b403e46 100644
--- a/Makefile.in
@@ -479,4 +483,4 @@ index 82b2d46..42daaef 100644
-tar_LDADD += -lattr
-endif
--
-1.9.3 \ No newline at end of file
+1.9.3
diff --git a/var/spack/repos/builtin/packages/tar/package.py b/var/spack/repos/builtin/packages/tar/package.py
index 7b6313827f..d6b660016a 100644
--- a/var/spack/repos/builtin/packages/tar/package.py
+++ b/var/spack/repos/builtin/packages/tar/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,13 +28,15 @@ from spack import *
class Tar(AutotoolsPackage):
"""GNU Tar provides the ability to create tar archives, as well as various
other kinds of manipulation."""
+
homepage = "https://www.gnu.org/software/tar/"
- url = "https://ftp.gnu.org/gnu/tar/tar-1.28.tar.gz"
+ url = "https://ftp.gnu.org/gnu/tar/tar-1.29.tar.gz"
version('1.29', 'cae466e6e58c7292355e7080248f244db3a4cf755f33f4fa25ca7f9a7ed09af0')
version('1.28', '6ea3dbea1f2b0409b234048e021a9fd7')
- # see http://lists.gnu.org/archive/html/bug-tar/2014-08/msg00001.html and
- # https://github.com/Homebrew/homebrew-core/commit/aef9a1792de4648d0322b4b04d32287532f046bb
- # TODO: when=sys.platform=='darwin' ?
+ patch('tar-pgi.patch', when='@1.29')
+ patch('config-pgi.patch', when='@:1.29')
+ patch('se-selinux.patch', when='@:1.29')
+ patch('argp-pgi.patch', when='@:1.29')
patch('gnutar-configure-xattrs.patch', when='@1.28')
diff --git a/var/spack/repos/builtin/packages/tar/se-selinux.patch b/var/spack/repos/builtin/packages/tar/se-selinux.patch
new file mode 100644
index 0000000000..1146b9838e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tar/se-selinux.patch
@@ -0,0 +1,66 @@
+From e041ac5f63e23b20c322f2777d6330074c8a7215 Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue, 14 Feb 2017 08:46:05 -0800
+Subject: selinux-h: port to PGI 16.10
+
+* gnu/se-selinux.in.h: Don't assume that include_next skips over
+duplicate -I DIR options.
+
+diff --git a/gnu/se-selinux.in.h b/gnu/se-selinux.in.h
+index cd19951..1cf7c00 100644
+--- a/gnu/se-selinux.in.h
++++ b/gnu/se-selinux.in.h
+@@ -14,26 +14,25 @@
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+-#ifndef _@GUARD_PREFIX@_SELINUX_SELINUX_H
+-# define _@GUARD_PREFIX@_SELINUX_SELINUX_H
+-
+-# if __GNUC__ >= 3
++#if __GNUC__ >= 3
+ @PRAGMA_SYSTEM_HEADER@
+-# endif
++#endif
+ @PRAGMA_COLUMNS@
+
+-# if HAVE_SELINUX_SELINUX_H
++#if HAVE_SELINUX_SELINUX_H
+
+ #@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@
+
+-# else
++#else
++# if !defined _@GUARD_PREFIX@_SELINUX_SELINUX_H
++# define _@GUARD_PREFIX@_SELINUX_SELINUX_H
+
+ # include <sys/types.h>
+ # include <errno.h>
+
+-#ifndef _GL_INLINE_HEADER_BEGIN
+- #error "Please include config.h first."
+-#endif
++# ifndef _GL_INLINE_HEADER_BEGIN
++ #error "Please include config.h first."
++# endif
+ _GL_INLINE_HEADER_BEGIN
+ # ifndef SE_SELINUX_INLINE
+ # define SE_SELINUX_INLINE _GL_INLINE
+@@ -114,10 +113,10 @@ matchpathcon_init_prefix (char const *path _GL_UNUSED_PARAMETER,
+ # define GNULIB_defined_security_types 1
+ # endif
+
+-#ifndef _GL_INLINE_HEADER_BEGIN
+- #error "Please include config.h first."
+-#endif
++# ifndef _GL_INLINE_HEADER_BEGIN
++ #error "Please include config.h first."
++# endif
+ _GL_INLINE_HEADER_BEGIN
+
+ # endif
+-#endif /* _@GUARD_PREFIX@_SELINUX_SELINUX_H */
++#endif
+--
+cgit v1.0-41-gc330
+
diff --git a/var/spack/repos/builtin/packages/tar/tar-pgi.patch b/var/spack/repos/builtin/packages/tar/tar-pgi.patch
new file mode 100644
index 0000000000..1cfed1839a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tar/tar-pgi.patch
@@ -0,0 +1,66 @@
+From 2be02a7c9afa5b4f01261e5b66c64217f7f3c29a Mon Sep 17 00:00:00 2001
+From: Paul Eggert <eggert@cs.ucla.edu>
+Date: Tue, 14 Feb 2017 08:55:05 -0800
+Subject: Fix incompatibility with PGI 16.10
+
+* src/tar.c (options): Fix incompatibility with the C standard,
+which says that arguments to macro calls cannot contain # directives.
+
+diff --git a/src/tar.c b/src/tar.c
+index fd29cd3..ea68c82 100644
+--- a/src/tar.c
++++ b/src/tar.c
+@@ -548,11 +548,11 @@ static struct argp_option options[] = {
+ N_("cancel the effect of --delay-directory-restore option"), GRID+1 },
+ {"sort", SORT_OPTION, N_("ORDER"), 0,
+ #if D_INO_IN_DIRENT
+- N_("directory sorting order: none (default), name or inode"
++ N_("directory sorting order: none (default), name or inode")
+ #else
+- N_("directory sorting order: none (default) or name"
++ N_("directory sorting order: none (default) or name")
+ #endif
+- ), GRID+1 },
++ , GRID+1 },
+ #undef GRID
+
+ #define GRID 55
+@@ -1758,7 +1758,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
+ case GROUP_MAP_OPTION:
+ group_map_read (arg);
+ break;
+-
++
+ case MODE_OPTION:
+ mode_option = mode_compile (arg);
+ if (!mode_option)
+@@ -1829,7 +1829,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
+ case OWNER_MAP_OPTION:
+ owner_map_read (arg);
+ break;
+-
++
+ case QUOTE_CHARS_OPTION:
+ for (;*arg; arg++)
+ set_char_quoting (NULL, *arg, 1);
+@@ -2123,7 +2123,7 @@ find_argp_option (struct argp *ap, int key)
+ {
+ struct argp_option const *p = NULL;
+ struct argp_child const *child;
+-
++
+ p = find_argp_option_key (ap->options, key);
+ if (!p && ap->children)
+ {
+@@ -2136,7 +2136,7 @@ find_argp_option (struct argp *ap, int key)
+ }
+ return p;
+ }
+-
++
+ static const char *tar_authors[] = {
+ "John Gilmore",
+ "Jay Fenlason",
+--
+cgit v1.0-41-gc330
+
diff --git a/var/spack/repos/builtin/packages/targetp/package.py b/var/spack/repos/builtin/packages/targetp/package.py
new file mode 100644
index 0000000000..5b7fde557c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/targetp/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Targetp(Package):
+ """TargetP predicts the subcellular location of eukaryotic protein sequences.
+
+ Note: A manual download is required for TargetP.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "http://www.cbs.dtu.dk/services/TargetP/"
+ url = "file://{0}/targetp-1.1b.Linux.tar.gz".format(os.getcwd())
+
+ version('1.1b', '80233d0056e11abfd22a4ce73d1808c6')
+
+ depends_on('perl', type='run')
+ depends_on('awk', type='run')
+ depends_on('chlorop')
+ depends_on('signalp')
+
+ def patch(self):
+ targetp = FileFilter('targetp')
+ targetp.filter('TARGETP=', '#TARGETP=')
+ targetp.filter('CHLOROP=/usr/cbs/bio/bin/chlorop',
+ self.spec['chlorop'].prefix.bin.chlorop)
+ targetp.filter('SIGNALP=/usr/cbs/bio/bin/signalp',
+ self.spec['signalp'].prefix.signalp)
+ targetp.filter('TMP=/scratch', 'TMP=/tmp')
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('etc', prefix.etc)
+ install_tree('how', prefix.how)
+ install_tree('test', prefix.test)
+ install_tree('tmp', prefix.tmp)
+ install('targetp', prefix.targetp)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('TARGETP', self.prefix)
+ run_env.prepend_path('PATH', self.prefix)
diff --git a/var/spack/repos/builtin/packages/task/package.py b/var/spack/repos/builtin/packages/task/package.py
index 785023fd03..b4fdd020de 100644
--- a/var/spack/repos/builtin/packages/task/package.py
+++ b/var/spack/repos/builtin/packages/task/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,22 +25,15 @@
from spack import *
-class Task(Package):
+class Task(CMakePackage):
"""Feature-rich console based todo list manager"""
homepage = "http://www.taskwarrior.org"
url = "http://taskwarrior.org/download/task-2.4.4.tar.gz"
version('2.4.4', '517450c4a23a5842df3e9905b38801b3')
- depends_on('cmake', type='build')
- depends_on("gnutls")
- depends_on("libuuid")
- # depends_on("gcc@4.8:")
+ depends_on('cmake@2.8:', type='build')
+ depends_on('gnutls')
+ depends_on('libuuid')
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('-DCMAKE_BUILD_TYPE=release',
- '..',
- *std_cmake_args)
- make()
- make("install")
+ conflicts('%gcc@:4.7')
diff --git a/var/spack/repos/builtin/packages/taskd/package.py b/var/spack/repos/builtin/packages/taskd/package.py
index bfe77aaa5c..56adbf619f 100644
--- a/var/spack/repos/builtin/packages/taskd/package.py
+++ b/var/spack/repos/builtin/packages/taskd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Taskd(Package):
+class Taskd(CMakePackage):
"""TaskWarrior task synchronization daemon"""
homepage = "http://www.taskwarrior.org"
@@ -33,14 +33,8 @@ class Taskd(Package):
version('1.1.0', 'ac855828c16f199bdbc45fbc227388d0')
- depends_on('cmake', type='build')
- depends_on("libuuid")
- depends_on("gnutls")
+ depends_on('libuuid')
+ depends_on('gnutls')
+ depends_on('cmake@2.8:', type='build')
- def install(self, spec, prefix):
- with working_dir('spack-build', create=True):
- cmake('-DCMAKE_BUILD_TYPE=release',
- '..',
- *std_cmake_args)
- make()
- make("install")
+ conflicts('%gcc@:4.7')
diff --git a/var/spack/repos/builtin/packages/tassel/package.py b/var/spack/repos/builtin/packages/tassel/package.py
new file mode 100644
index 0000000000..eb48897e0e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tassel/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Tassel(Package):
+ """TASSEL is a software package to evaluate traits associations,
+ evolutionary patterns, and linkage disequilibrium."""
+
+ homepage = "http://www.maizegenetics.net/tassel"
+ url = "https://bitbucket.org/tasseladmin/tassel-5-source/get/master.tar.gz"
+
+ version('2017-07-22', git='https://bitbucket.org/tasseladmin/tassel-5-standalone.git',
+ commit='ae96ae75c3c9a9e8026140b6c775fa4685bdf531')
+
+ depends_on('java', type=('build', 'run'))
+ depends_on('perl', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ install_tree('.', prefix.bin)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('CLASSPATH', prefix.bin.lib)
diff --git a/var/spack/repos/builtin/packages/tau/package.py b/var/spack/repos/builtin/packages/tau/package.py
index 991841f137..26b1e38b27 100644
--- a/var/spack/repos/builtin/packages/tau/package.py
+++ b/var/spack/repos/builtin/packages/tau/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/tcl/package.py b/var/spack/repos/builtin/packages/tcl/package.py
index d9b535305d..219c63e62b 100644
--- a/var/spack/repos/builtin/packages/tcl/package.py
+++ b/var/spack/repos/builtin/packages/tcl/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,9 @@ class Tcl(AutotoolsPackage):
that is truly cross platform, easily deployed and highly
extensible."""
homepage = "http://www.tcl.tk"
+ url = "http://prdownloads.sourceforge.net/tcl/tcl8.6.5-src.tar.gz"
+ version('8.6.6', '5193aea8107839a79df8ac709552ecb7')
version('8.6.5', '0e6426a4ca9401825fbc6ecf3d89a326')
version('8.6.4', 'd7cbb91f1ded1919370a30edd1534304')
version('8.6.3', 'db382feca91754b7f93da16dc4cdad1f')
@@ -42,20 +44,22 @@ class Tcl(AutotoolsPackage):
depends_on('zlib')
- def url_for_version(self, version):
- base_url = 'http://prdownloads.sourceforge.net/tcl'
- return '{0}/tcl{1}-src.tar.gz'.format(base_url, version)
+ configure_directory = 'unix'
- def setup_environment(self, spack_env, env):
+ def setup_environment(self, spack_env, run_env):
# When using Tkinter from within spack provided python+tk, python
# will not be able to find Tcl/Tk unless TCL_LIBRARY is set.
- env.set('TCL_LIBRARY', join_path(self.prefix.lib, 'tcl{0}'.format(
- self.spec.version.up_to(2))))
+ run_env.set('TCL_LIBRARY', join_path(self.prefix.lib, 'tcl{0}'.format(
+ self.spec.version.up_to(2))))
- def build_directory(self):
- return 'unix'
+ def install(self, spec, prefix):
+ with working_dir(self.build_directory):
+ make('install')
- @AutotoolsPackage.sanity_check('install')
+ # Some applications like Expect require private Tcl headers.
+ make('install-private-headers')
+
+ @run_after('install')
def symlink_tclsh(self):
with working_dir(self.prefix.bin):
symlink('tclsh{0}'.format(self.version.up_to(2)), 'tclsh')
diff --git a/var/spack/repos/builtin/packages/tcoffee/package.py b/var/spack/repos/builtin/packages/tcoffee/package.py
new file mode 100644
index 0000000000..667f876dd9
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tcoffee/package.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/spack/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 Tcoffee(MakefilePackage):
+ """T-Coffee is a multiple sequence alignment program."""
+
+ homepage = "http://www.tcoffee.org/"
+ url = "https://github.com/cbcrg/tcoffee"
+
+ version('2017-08-17', git='https://github.com/cbcrg/tcoffee.git', commit='f389b558e91d0f82e7db934d9a79ce285f853a71')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('blast-plus')
+ depends_on('dialign-tx')
+ depends_on('viennarna')
+ depends_on('clustalw')
+ depends_on('tmalign')
+ depends_on('muscle')
+ depends_on('mafft')
+ depends_on('pcma')
+ depends_on('poamsa')
+ depends_on('probconsrna')
+
+ build_directory = 'compile'
+
+ def build(self, spec, prefix):
+ with working_dir(self.build_directory):
+ make('t_coffee')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir(self.build_directory):
+ install('t_coffee', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/tcsh/package.py b/var/spack/repos/builtin/packages/tcsh/package.py
new file mode 100644
index 0000000000..84d0ed28b0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tcsh/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 Tcsh(AutotoolsPackage):
+ """Tcsh is an enhanced but completely compatible version of csh, the C
+ shell. Tcsh is a command language interpreter which can be used both as
+ an interactive login shell and as a shell script command processor. Tcsh
+ includes a command line editor, programmable word completion, spelling
+ correction, a history mechanism, job control and a C language like
+ syntax."""
+
+ homepage = "http://www.tcsh.org/"
+ url = "ftp://ftp.astron.com/pub/tcsh/tcsh-6.20.00.tar.gz"
+
+ version('6.20.00', '59d40ef40a68e790d95e182069431834')
+
+ def fedora_patch(commit, file, **kwargs):
+ prefix = 'https://src.fedoraproject.org/rpms/tcsh/raw/{0}/f/'.format(commit)
+ patch('{0}{1}'.format(prefix, file), **kwargs)
+
+ # Upstream patches
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-000-add-all-flags-for-gethost-build.patch', when='@6.20.00', sha256='f8266916189ebbdfbad5c2c28ac00ed25f07be70f054d9830eb84ba84b3d03ef')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-001-delay-arginp-interpreting.patch', when='@6.20.00', sha256='57c7a9b0d94dd41e4276b57b0a4a89d91303d36180c1068b9e3ab8f6149b18dd')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-002-type-of-read-in-prompt-confirm.patch', when='@6.20.00', sha256='837a6a82f815c0905cf7ea4c4ef0112f36396fc8b2138028204000178a1befa5')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-003-fix-out-of-bounds-read.patch', when='@6.20.00', sha256='f973bd33a7fd8af0002a9b8992216ffc04fdf2927917113e42e58f28b702dc14')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-004-do-not-use-old-pointer-tricks.patch', when='@6.20.00', sha256='333e111ed39f7452f904590b47b996812590b8818f1c51ad68407dc05a1b18b0')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-005-reset-fixes-numbering.patch', when='@6.20.00', sha256='d1b54b5c5432faed9791ffde813560e226896a68fc5933d066172bcf3b2eb8bd')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-006-cleanup-in-readme-files.patch', when='@6.20.00', sha256='b4e7428ac6c2918beacc1b73f33e784ac520ef981d87e98285610b1bfa299d7b')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-007-look-for-tgetent-in-libtinfo.patch', when='@6.20.00', sha256='e6c88ffc291c9d4bda4d6bedf3c9be89cb96ce7dc245163e251345221fa77216')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-008-guard-ascii-only-reversion.patch', when='@6.20.00', sha256='7ee195e4ce4c9eac81920843b4d4d27254bec7b43e0b744f457858a9f156e621')
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-009-fix-regexp-for-backlash-quoting-tests.patch', when='@6.20.00', sha256='d2358c930d5ab89e5965204dded499591b42a22d0a865e2149b8c0f1446fac34')
+
+ # Downstream patches
+ fedora_patch('8a6066c901fb4fc75013dd488ba958387f00c74d', 'tcsh-6.20.00-manpage-memoryuse.patch', sha256='3a4e60fe56a450632140c48acbf14d22850c1d72835bf441e3f8514d6c617a9f') # noqa: E501
+
+ depends_on('ncurses')
+
+ @run_after('install')
+ def link_csh(self):
+ symlink('tcsh', '{0}/csh'.format(self.prefix.bin))
+ symlink('tcsh.1', '{0}/csh.1'.format(self.prefix.share.man.man1))
diff --git a/var/spack/repos/builtin/packages/tealeaf/package.py b/var/spack/repos/builtin/packages/tealeaf/package.py
new file mode 100644
index 0000000000..c5031e9bd4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tealeaf/package.py
@@ -0,0 +1,77 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import glob
+
+from spack import *
+
+
+class Tealeaf(MakefilePackage):
+ """Proxy Application. TeaLeaf is a mini-app that solves
+ the linear heat conduction equation on a spatially decomposed
+ regularly grid using a 5 point stencil with implicit solvers.
+ """
+
+ homepage = "http://uk-mac.github.io/TeaLeaf/"
+ url = "http://mantevo.org/downloads/releaseTarballs/miniapps/TeaLeaf/TeaLeaf-1.0.tar.gz"
+
+ tags = ['proxy-app']
+
+ version('1.0', '02a907281ad2d09e70ca0a17551c6d79')
+
+ depends_on('mpi')
+
+ @property
+ def build_targets(self):
+ targets = [
+ '--directory=TeaLeaf_ref',
+ 'MPI_COMPILER={0}'.format(self.spec['mpi'].mpifc),
+ 'C_MPI_COMPILER={0}'.format(self.spec['mpi'].mpicc),
+ ]
+
+ if '%gcc' in self.spec:
+ targets.append('COMPILER=GNU')
+ elif '%cce' in self.spec:
+ targets.append('COMPILER=CRAY')
+ elif '%intel' in self.spec:
+ targets.append('COMPILER=INTEL')
+ elif '%pgi' in self.spec:
+ targets.append('COMPILER=PGI')
+ elif '%xl' in self.spec:
+ targets.append('COMPILER=XL')
+
+ return targets
+
+ def install(self, spec, prefix):
+ # Manual Installation
+ mkdirp(prefix.bin)
+ mkdirp(prefix.doc.tests)
+
+ install('README.md', prefix.doc)
+ install('TeaLeaf_ref/tea_leaf', prefix.bin)
+ install('TeaLeaf_ref/tea.in', prefix.bin)
+
+ for f in glob.glob('TeaLeaf_ref/*.in'):
+ install(f, prefix.doc.tests)
diff --git a/var/spack/repos/builtin/packages/tetgen/package.py b/var/spack/repos/builtin/packages/tetgen/package.py
index 6e5ed79c36..b7091c097c 100644
--- a/var/spack/repos/builtin/packages/tetgen/package.py
+++ b/var/spack/repos/builtin/packages/tetgen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,7 @@ class Tetgen(Package):
boundary conforming Delaunay meshes, and Voronoi paritions.
"""
- homepage = "http://www.tetgen.org"
+ homepage = "http://wias-berlin.de/software/tetgen/"
version('1.5.0', '3b9fd9cdec121e52527b0308f7aad5c1', url='http://www.tetgen.org/1.5/src/tetgen1.5.0.tar.gz')
version('1.4.3', 'd6a4bcdde2ac804f7ec66c29dcb63c18', url='http://www.tetgen.org/files/tetgen1.4.3.tar.gz')
diff --git a/var/spack/repos/builtin/packages/tethex/package.py b/var/spack/repos/builtin/packages/tethex/package.py
index 624942498e..4ebe564522 100644
--- a/var/spack/repos/builtin/packages/tethex/package.py
+++ b/var/spack/repos/builtin/packages/tethex/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Tethex(Package):
+class Tethex(CMakePackage):
"""Tethex is designed to convert triangular (in 2D) or tetrahedral (in 3D)
Gmsh's mesh to quadrilateral or hexahedral one respectively. These meshes
can be used in software packages working with hexahedrals only - for
@@ -35,15 +35,18 @@ class Tethex(Package):
homepage = "https://github.com/martemyev/tethex"
url = "https://github.com/martemyev/tethex/archive/v0.0.7.tar.gz"
+ maintainers = ['davydden']
+
version('0.0.7', '6c9e4a18a6637deb4400c6d77ec03184')
version('develop', git='https://github.com/martemyev/tethex.git')
- depends_on('cmake', type='build')
+ variant('build_type', default='Release',
+ description='The build type to build',
+ values=('Debug', 'Release'))
- def install(self, spec, prefix):
- cmake('.')
- make()
+ depends_on('cmake@2.8:', type='build')
+ def install(self, spec, prefix):
# install by hand
mkdirp(prefix.bin)
install('tethex', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/texinfo/package.py b/var/spack/repos/builtin/packages/texinfo/package.py
index e4fbc37235..47d65bcc80 100644
--- a/var/spack/repos/builtin/packages/texinfo/package.py
+++ b/var/spack/repos/builtin/packages/texinfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/texlive/package.py b/var/spack/repos/builtin/packages/texlive/package.py
index a960e5b68d..3b26d2de94 100644
--- a/var/spack/repos/builtin/packages/texlive/package.py
+++ b/var/spack/repos/builtin/packages/texlive/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -28,21 +28,24 @@ import os
class Texlive(Package):
"""TeX Live is a free software distribution for the TeX typesetting
- system"""
+ system. Heads up, it's is not a reproducible installation."""
homepage = "http://www.tug.org/texlive"
- # Pull from specific site because the texlive mirrors do not all
- # update in synchrony.
+ # Install from specific site because the texlive mirrors do not
+ # all update in synchrony.
#
# BEWARE: TexLive updates their installs frequently (probably why
- # they call it *Live*...). There is no good way to provide a
- # repeatable install of the package. We try to keep up with the
- # digest values, but don't be surprised if this package is
- # briefly unbuildable.
+ # they call it *Live*...). There is no good way to provide a
+ # repeatable install of the package.
#
- version('live', '01461ec2cc49fe0b14812eb67abbea46',
- url="http://ctan.math.utah.edu/ctan/tex-archive/systems/texlive/tlnet/install-tl-unx.tar.gz")
+ # We're now pulling the installation bits from tug.org's repo of
+ # historic bits. This means that the checksum for the installer
+ # itself is stable. Don't let that fool you though, it's still
+ # installing TeX **LIVE** from e.g. ctan.math.... below, which is
+ # not reproducible.
+ version('live', '8f8fc301514c08a89a2e97197369c648',
+ url='ftp://tug.org/historic/systems/texlive/2017/install-tl-unx.tar.gz')
# There does not seem to be a complete list of schemes.
# Examples include:
@@ -53,15 +56,24 @@ class Texlive(Package):
# minimal scheme (plain only)
# See:
# https://www.tug.org/texlive/doc/texlive-en/texlive-en.html#x1-25025r6
- variant('scheme', default="small",
- description='Package subset to install (e.g. full, small, basic)')
+ variant(
+ 'scheme',
+ default='small',
+ values=('minimal', 'basic', 'small', 'medium', 'full'),
+ description='Package subset to install'
+ )
depends_on('perl', type='build')
def install(self, spec, prefix):
+ # Using texlive's mirror system leads to mysterious problems,
+ # in lieu of being able to specify a repository as a variant, hardwire
+ # a particular (slow, but central) one for now.
+ _repository = 'http://ctan.math.washington.edu/tex-archive/systems/texlive/tlnet/'
env = os.environ
env['TEXLIVE_INSTALL_PREFIX'] = prefix
perl = which('perl')
scheme = spec.variants['scheme'].value
perl('./install-tl', '-scheme', scheme,
+ '-repository', _repository,
'-portable', '-profile', '/dev/null')
diff --git a/var/spack/repos/builtin/packages/the-platinum-searcher/package.py b/var/spack/repos/builtin/packages/the-platinum-searcher/package.py
index eeddf194ea..212bc0d75e 100644
--- a/var/spack/repos/builtin/packages/the-platinum-searcher/package.py
+++ b/var/spack/repos/builtin/packages/the-platinum-searcher/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/the-silver-searcher/package.py b/var/spack/repos/builtin/packages/the-silver-searcher/package.py
index c98e964efa..31b269e286 100644
--- a/var/spack/repos/builtin/packages/the-silver-searcher/package.py
+++ b/var/spack/repos/builtin/packages/the-silver-searcher/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,17 @@
from spack import *
-class TheSilverSearcher(Package):
+class TheSilverSearcher(AutotoolsPackage):
"""Fast recursive grep alternative"""
+
homepage = "http://geoff.greer.fm/ag/"
url = "http://geoff.greer.fm/ag/releases/the_silver_searcher-0.32.0.tar.gz"
+ version('2.1.0', '3e7207b060424174323236932bf76ec2')
version('0.32.0', '3fdfd5836924246073d5344257a06823')
version('0.30.0', '95e2e7859fab1156c835aff7413481db')
depends_on('pcre')
depends_on('xz')
+ depends_on('zlib')
depends_on('pkg-config', type='build')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
-
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/thrift/package.py b/var/spack/repos/builtin/packages/thrift/package.py
index 755f7a80b9..9e296123fd 100644
--- a/var/spack/repos/builtin/packages/thrift/package.py
+++ b/var/spack/repos/builtin/packages/thrift/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -38,6 +38,8 @@ class Thrift(Package):
homepage = "http://thrift.apache.org"
url = "http://apache.mirrors.ionfish.org/thrift/0.9.2/thrift-0.9.2.tar.gz"
+ version('0.10.0', '795c5dd192e310ffff38cfd9430d6b29')
+ version('0.9.3', '88d667a8ae870d5adeca8cb7d6795442')
version('0.9.2', '89f63cc4d0100912f4a1f8a9dee63678')
# Currently only support for c-family and python
@@ -46,7 +48,7 @@ class Thrift(Package):
variant('python', default=True,
description="Build support for python")
- depends_on('jdk')
+ depends_on('java')
depends_on('autoconf', type='build')
depends_on('automake', type='build')
depends_on('libtool', type='build')
@@ -63,7 +65,7 @@ class Thrift(Package):
def install(self, spec, prefix):
env['PY_PREFIX'] = prefix
- env['JAVA_HOME'] = spec['jdk'].prefix
+ env['JAVA_HOME'] = spec['java'].prefix
# configure options
options = ['--prefix=%s' % prefix]
diff --git a/var/spack/repos/builtin/packages/thrust/package.py b/var/spack/repos/builtin/packages/thrust/package.py
new file mode 100644
index 0000000000..c3d7c8dadb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/thrust/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# Copyright (c) 2013-2016, 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/spack/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 *
+
+
+class Thrust(Package):
+ """Thrust is a parallel algorithms library
+ which resembles the C++ Standard Template Library (STL)."""
+
+ homepage = "https://thrust.github.io"
+ url = "https://github.com/thrust/thrust/archive/1.8.2.tar.gz"
+
+ version('1.8.2', 'fc7fc807cba98640c816463b511fb53f')
+
+ def install(self, spec, prefix):
+ install_tree('doc', join_path(prefix, 'doc'))
+ install_tree('examples', join_path(prefix, 'examples'))
+ install_tree('thrust', join_path(prefix, 'include', 'thrust'))
diff --git a/var/spack/repos/builtin/packages/tig/package.py b/var/spack/repos/builtin/packages/tig/package.py
new file mode 100644
index 0000000000..18c0597c46
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tig/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Tig(AutotoolsPackage):
+ """Text-mode interface for git"""
+
+ homepage = "https://jonas.github.io/tig/"
+ url = "https://github.com/jonas/tig/releases/download/tig-2.2.2/tig-2.2.2.tar.gz"
+
+ version('2.2.2', '3b4a9f0fd8d18c1039863e6c4ace6e46')
+
+ depends_on('ncurses')
diff --git a/var/spack/repos/builtin/packages/tinyxml/package.py b/var/spack/repos/builtin/packages/tinyxml/package.py
index 1789d9022e..46f3c32a75 100644
--- a/var/spack/repos/builtin/packages/tinyxml/package.py
+++ b/var/spack/repos/builtin/packages/tinyxml/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,6 +23,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+from shutil import copyfile
import os.path
@@ -30,10 +31,14 @@ class Tinyxml(CMakePackage):
"""Simple, small, efficient, C++ XML parser"""
homepage = "http://grinninglizard.com/tinyxml/"
- url = "https://sourceforge.net/projects/tinyxml/files/tinyxml/2.6.2/tinyxml_2_6_2.tar.gz"
+ url = "https://downloads.sourceforge.net/project/tinyxml/tinyxml/2.6.2/tinyxml_2_6_2.tar.gz"
version('2.6.2', 'cba3f50dd657cb1434674a03b21394df9913d764')
+ def url_for_version(self, version):
+ url = "https://sourceforge.net/projects/tinyxml/files/tinyxml/{0}/tinyxml_{1}.tar.gz"
+ return url.format(version.dotted, version.underscored)
+
def patch(self):
copyfile(join_path(os.path.dirname(__file__),
"CMakeLists.txt"), "CMakeLists.txt")
diff --git a/var/spack/repos/builtin/packages/tinyxml2/package.py b/var/spack/repos/builtin/packages/tinyxml2/package.py
index d36bb5fa9b..d54418e099 100644
--- a/var/spack/repos/builtin/packages/tinyxml2/package.py
+++ b/var/spack/repos/builtin/packages/tinyxml2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/tk/package.py b/var/spack/repos/builtin/packages/tk/package.py
index 071db04e63..b03d07013a 100644
--- a/var/spack/repos/builtin/packages/tk/package.py
+++ b/var/spack/repos/builtin/packages/tk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -33,18 +33,16 @@ class Tk(AutotoolsPackage):
applications that run unchanged across Windows, Mac OS X, Linux
and more."""
homepage = "http://www.tcl.tk"
+ url = "http://prdownloads.sourceforge.net/tcl/tk8.6.5-src.tar.gz"
+ version('8.6.6', 'dd7dbb3a6523c42d05f6ab6e86096e99')
version('8.6.5', '11dbbd425c3e0201f20d6a51482ce6c4')
version('8.6.3', '85ca4dbf4dcc19777fd456f6ee5d0221')
- variant('X', default=False, description='Enable X11 support')
+ depends_on('tcl')
+ depends_on('libx11')
- depends_on("tcl")
- depends_on("libx11", when='+X')
-
- def url_for_version(self, version):
- base_url = "http://prdownloads.sourceforge.net/tcl"
- return "{0}/tk{1}-src.tar.gz".format(base_url, version)
+ configure_directory = 'unix'
def setup_environment(self, spack_env, run_env):
# When using Tkinter from within spack provided python+tk, python
@@ -52,9 +50,11 @@ class Tk(AutotoolsPackage):
run_env.set('TK_LIBRARY', join_path(self.prefix.lib, 'tk{0}'.format(
self.spec.version.up_to(2))))
- def build_directory(self):
- return 'unix'
-
def configure_args(self):
spec = self.spec
return ['--with-tcl={0}'.format(spec['tcl'].prefix.lib)]
+
+ @run_after('install')
+ def symlink_wish(self):
+ with working_dir(self.prefix.bin):
+ symlink('wish{0}'.format(self.version.up_to(2)), 'wish')
diff --git a/var/spack/repos/builtin/packages/tmalign/package.py b/var/spack/repos/builtin/packages/tmalign/package.py
new file mode 100644
index 0000000000..ac7df4fb15
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tmalign/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Tmalign(Package):
+ """TM-align is an algorithm for sequence-order independent protein
+ structure comparisons."""
+
+ homepage = "http://zhanglab.ccmb.med.umich.edu/TM-align"
+ url = "http://zhanglab.ccmb.med.umich.edu/TM-align/TM-align-C/TMalignc.tar.gz"
+
+ version('2016-05-25', 'c1027e4b65c07d1c5df9717de7417118')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('TMalign', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/tmhmm/package.py b/var/spack/repos/builtin/packages/tmhmm/package.py
new file mode 100644
index 0000000000..2fe2517444
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tmhmm/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Tmhmm(Package):
+ """Transmembrane helices in proteins
+
+ Note: A manual download is required for TMHMM.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "http://www.cbs.dtu.dk/cgi-bin/nph-sw_request?tmhmm"
+ url = "file://{0}/tmhmm-2.0c.Linux.tar.gz".format(os.getcwd())
+
+ version('2.0c', '359db0c4ecf84d1ade5786abe844d54e')
+
+ depends_on('perl', type='run')
+
+ def patch(self):
+ with working_dir('bin'):
+ tmhmm = FileFilter('tmhmmformat.pl')
+ tmhmm.filter('#!/usr/local/bin/perl -w',
+ '#!/usr/bin/env perl')
+ tmhmm = FileFilter('tmhmm')
+ tmhmm.filter('#!/usr/local/bin/perl',
+ '#!/usr/bin/env perl')
+
+ def install(self, spec, prefix):
+ install_tree('bin', prefix.bin)
+ install_tree('lib', prefix.lib)
diff --git a/var/spack/repos/builtin/packages/tmux/package.py b/var/spack/repos/builtin/packages/tmux/package.py
index 89c9751486..52c6c530d1 100644
--- a/var/spack/repos/builtin/packages/tmux/package.py
+++ b/var/spack/repos/builtin/packages/tmux/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,16 +25,19 @@
from spack import *
-class Tmux(Package):
- """tmux is a terminal multiplexer. What is a terminal multiplexer? It lets
- you switch easily between several programs in one terminal, detach them
- (they keep running in the background) and reattach them to a different
- terminal. And do a lot more.
+class Tmux(AutotoolsPackage):
+ """Tmux is a terminal multiplexer.
+
+ What is a terminal multiplexer? It lets you switch easily between several
+ programs in one terminal, detach them (they keep running in the
+ background) and reattach them to a different terminal. And do a lot more.
"""
homepage = "http://tmux.github.io"
url = "https://github.com/tmux/tmux/releases/download/2.2/tmux-2.2.tar.gz"
+ version('2.5', '4a5d73d96d8f11b0bdf9b6f15ab76d15')
+ version('2.4', '6165d3aca811a3225ef8afbd1afcf1c5')
version('2.3', 'fcfd1611d705d8b31df3c26ebc93bd3e')
version('2.2', 'bd95ee7205e489c62c616bb7af040099')
version('2.1', '74a2855695bccb51b6e301383ad4818c')
@@ -43,15 +46,5 @@ class Tmux(Package):
depends_on('libevent')
depends_on('ncurses')
- def install(self, spec, prefix):
- pkg_config_path = ':'.join([
- spec['libevent'].prefix,
- spec['ncurses'].prefix
- ])
-
- configure(
- "--prefix=%s" % prefix,
- "PKG_CONFIG_PATH=%s" % pkg_config_path)
-
- make()
- make("install")
+ def configure_args(self):
+ return ['LIBTINFO_LIBS=-lncurses']
diff --git a/var/spack/repos/builtin/packages/tmuxinator/package.py b/var/spack/repos/builtin/packages/tmuxinator/package.py
index 66da4006f2..0f79d1f5bf 100644
--- a/var/spack/repos/builtin/packages/tmuxinator/package.py
+++ b/var/spack/repos/builtin/packages/tmuxinator/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/tophat/package.py b/var/spack/repos/builtin/packages/tophat/package.py
new file mode 100644
index 0000000000..682e9581eb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tophat/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 Tophat(AutotoolsPackage):
+ """Spliced read mapper for RNA-Seq."""
+
+ homepage = "http://ccb.jhu.edu/software/tophat/index.shtml"
+ url = "https://github.com/infphilo/tophat/archive/v2.1.1.tar.gz"
+
+ version('2.1.1', 'ffd18de2f893a95eb7e9d0c5283d241f')
+
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
+
+ depends_on('boost@1.47:')
+ depends_on('bowtie2', type='run')
+
+ parallel = False
+
+ def configure_args(self):
+ return ["--with-boost={0}".format(self.spec['boost'].prefix)]
diff --git a/var/spack/repos/builtin/packages/tppred/package.py b/var/spack/repos/builtin/packages/tppred/package.py
new file mode 100644
index 0000000000..15bf756f7a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tppred/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 Tppred(Package):
+ """TPPRED is a software package for the prediction of mitochondrial
+ targeting peptides from protein primary sequence."""
+
+ homepage = "https://tppred2.biocomp.unibo.it/tppred2/default/software"
+ url = "http://biocomp.unibo.it/savojard/tppred2.tar.gz"
+
+ version('2.0', 'cd848569f6a8aa51d18fbe55fe45d624')
+
+ depends_on('python@2.7:2.999', type='run')
+ depends_on('py-scikit-learn@0.13.1', type='run')
+ depends_on('emboss')
+
+ def url_for_version(self, version):
+ url = 'http://biocomp.unibo.it/savojard/tppred{0}.tar.gz'
+ return url.format(version.up_to(1))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ with working_dir('bin'):
+ install('tppred2.py', prefix.bin)
+ install_tree('data', prefix.data)
+ install_tree('example', prefix.example)
+ install_tree('tppred2modules', prefix.modules)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('TPPRED_ROOT', prefix)
diff --git a/var/spack/repos/builtin/packages/transabyss/package.py b/var/spack/repos/builtin/packages/transabyss/package.py
new file mode 100644
index 0000000000..32a266f9f2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/transabyss/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Transabyss(Package):
+ """De novo assembly of RNAseq data using ABySS"""
+
+ homepage = "http://www.bcgsc.ca/platform/bioinfo/software/trans-abyss"
+ url = "http://www.bcgsc.ca/platform/bioinfo/software/trans-abyss/releases/1.5.5/transabyss-1.5.5.zip"
+
+ version('1.5.5', '9ebe0394243006f167135cac4df9bee6')
+
+ depends_on('abyss@1.5.2')
+ depends_on('python@2.7.6:', type=('build', 'run'))
+ depends_on('py-igraph@0.7.0:', type=('build', 'run'))
+ depends_on('blat')
+
+ def install(self, spec, prefix):
+ install('transabyss', prefix)
+ install('transabyss-merge', prefix)
+ install_tree('bin', prefix.bin)
+ install_tree('utilities', prefix.utilities)
diff --git a/var/spack/repos/builtin/packages/transdecoder/package.py b/var/spack/repos/builtin/packages/transdecoder/package.py
new file mode 100644
index 0000000000..022f205d67
--- /dev/null
+++ b/var/spack/repos/builtin/packages/transdecoder/package.py
@@ -0,0 +1,50 @@
+##############################################################################
+# 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/spack/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 Transdecoder(MakefilePackage):
+ """TransDecoder identifies candidate coding regions within transcript
+ sequences, such as those generated by de novo RNA-Seq transcript
+ assembly using Trinity, or constructed based on RNA-Seq alignments to
+ the genome using Tophat and Cufflinks."""
+
+ homepage = "http://transdecoder.github.io/"
+ url = "https://github.com/TransDecoder/TransDecoder/archive/v3.0.1.tar.gz"
+
+ version('3.0.1', 'f62b86a15fcb78b1dada9f80cc25f300')
+
+ depends_on('perl', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('TransDecoder.LongOrfs', prefix)
+ install('TransDecoder.Predict', prefix)
+ install_tree('PerlLib', prefix.PerlLib)
+ install_tree('util', prefix.util)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PATH', prefix.util.bin)
+ run_env.prepend_path('PATH', prefix)
diff --git a/var/spack/repos/builtin/packages/transposome/package.py b/var/spack/repos/builtin/packages/transposome/package.py
new file mode 100644
index 0000000000..63e7d47f41
--- /dev/null
+++ b/var/spack/repos/builtin/packages/transposome/package.py
@@ -0,0 +1,37 @@
+##############################################################################
+# 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/spack/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 Transposome(PerlPackage):
+ """A toolkit for annotation of transposable element families from
+ unassembled sequence reads."""
+
+ homepage = "https://sestaton.github.io/Transposome/"
+ url = "https://github.com/sestaton/Transposome/archive/v0.11.2.tar.gz"
+
+ version('0.11.2', '157c1fc090b0aa30050d03df885dcde0')
+
+ depends_on('blast-plus')
diff --git a/var/spack/repos/builtin/packages/transset/package.py b/var/spack/repos/builtin/packages/transset/package.py
index 0f60738741..52f83c6edf 100644
--- a/var/spack/repos/builtin/packages/transset/package.py
+++ b/var/spack/repos/builtin/packages/transset/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Transset(Package):
+class Transset(AutotoolsPackage):
"""transset is an utility for setting opacity property."""
homepage = "http://cgit.freedesktop.org/xorg/app/transset"
@@ -38,9 +38,3 @@ class Transset(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/trapproto/package.py b/var/spack/repos/builtin/packages/trapproto/package.py
index eebab74410..c7b2f3727d 100644
--- a/var/spack/repos/builtin/packages/trapproto/package.py
+++ b/var/spack/repos/builtin/packages/trapproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Trapproto(Package):
+class Trapproto(AutotoolsPackage):
"""X.org TrapProto protocol headers."""
homepage = "https://cgit.freedesktop.org/xorg/proto/trapproto"
url = "https://www.x.org/archive/individual/proto/trapproto-3.4.3.tar.gz"
version('3.4.3', '1344759ae8d7d923e64f5eec078a679b')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/tree/package.py b/var/spack/repos/builtin/packages/tree/package.py
index 795f8c997e..339ce2c139 100644
--- a/var/spack/repos/builtin/packages/tree/package.py
+++ b/var/spack/repos/builtin/packages/tree/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/trf/package.py b/var/spack/repos/builtin/packages/trf/package.py
new file mode 100644
index 0000000000..f02e30302d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trf/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Trf(Package):
+ """Tandem Repeats Finder is a program to locate and display tandem repeats
+ in DNA sequences.
+
+ Note: A manual download is required for TRF.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://tandem.bu.edu/trf/trf.html"
+
+ version('4.09', '0c594fe666e0332db1df9d160d7fabc8', expand=False,
+ url='file://{0}/trf409.linux64'.format(os.getcwd()))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('trf409.linux64', prefix.bin.trf)
diff --git a/var/spack/repos/builtin/packages/triangle/package.py b/var/spack/repos/builtin/packages/triangle/package.py
index f4ee9ca1c9..9e20a4d964 100644
--- a/var/spack/repos/builtin/packages/triangle/package.py
+++ b/var/spack/repos/builtin/packages/triangle/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/trilinos/package.py b/var/spack/repos/builtin/packages/trilinos/package.py
index 4b3412ce7a..db0b1b3ba6 100644
--- a/var/spack/repos/builtin/packages/trilinos/package.py
+++ b/var/spack/repos/builtin/packages/trilinos/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,9 +22,10 @@
# 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 *
import os
import sys
+from spack import *
+from spack.operating_systems.mac_os import macOS_version
# Trilinos is complicated to build, as an inspiration a couple of links to
# other repositories which build it:
@@ -43,13 +44,20 @@ class Trilinos(CMakePackage):
A unique design feature of Trilinos is its focus on packages.
"""
homepage = "https://trilinos.org/"
- base_url = "https://github.com/trilinos/Trilinos/archive"
+ url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-12-12-1.tar.gz"
+
+ maintainers = ['aprokop']
+
+ # ###################### Versions ##########################
+ version('xsdk-0.2.0',
+ git='https://github.com/trilinos/Trilinos.git', tag='xsdk-0.2.0')
version('develop',
git='https://github.com/trilinos/Trilinos.git', tag='develop')
version('master',
git='https://github.com/trilinos/Trilinos.git', tag='master')
- version('12.10.1', '40f28628b63310f9bd17c26d9ebe32b1')
+ version('12.12.1', 'ecd4606fa332212433c98bf950a69cc7')
+ version('12.10.1', '667333dbd7c0f031d47d7c5511fd0810')
version('12.8.1', '01c0026f1e2050842857db941060ecd5')
version('12.6.4', 'c2ea7b5aa0d10bcabdb9b9a6e3bac3ea')
version('12.6.3', '8de5cc00981a0ca0defea6199b2fe4c1')
@@ -62,11 +70,11 @@ class Trilinos(CMakePackage):
version('11.14.2', 'e7c3cdbbfe3279a8a68838b873ad6d51')
version('11.14.1', 'b7760b142eef66c79ed13de7c9560f81')
- def url_for_version(self, version):
- return '%s/trilinos-release-%s.tar.gz' % \
- (Trilinos.base_url, version.dashed)
+ # ###################### Variants ##########################
- variant('xsdkflags', default=False,
+ variant('alloptpkgs', default=False,
+ description='Compile with all optional packages')
+ variant('xsdkflags', default=False,
description='Compile using the default xSDK configuration')
variant('metis', default=True,
description='Compile with METIS and ParMETIS')
@@ -74,34 +82,129 @@ class Trilinos(CMakePackage):
description='Compile with support for MUMPS solvers')
variant('superlu-dist', default=True,
description='Compile with SuperluDist solvers')
- variant('superlu', default=False,
+ variant('superlu', default=False,
description='Compile with SuperLU solvers')
variant('hypre', default=True,
description='Compile with Hypre preconditioner')
- variant('hdf5', default=True, description='Compile with HDF5')
+ variant('hdf5', default=True,
+ description='Compile with HDF5')
variant('suite-sparse', default=True,
description='Compile with SuiteSparse solvers')
# not everyone has py-numpy activated, keep it disabled by default to avoid
# configure errors
- variant('python', default=False, description='Build python wrappers')
+ variant('python', default=False,
+ description='Build python wrappers')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
- variant('boost', default=True, description='Compile with Boost')
+ variant('boost', default=True,
+ description='Compile with Boost')
+ variant('tpetra', default=True,
+ description='Compile with Tpetra')
+ variant('epetra', default=True,
+ description='Compile with Epetra')
+ variant('epetraext', default=True,
+ description='Compile with EpetraExt')
+ variant('exodus', default=True,
+ description='Compile with Exodus from SEACAS')
+ variant('pnetcdf', default=False,
+ description='Compile with parallel-netcdf')
+ variant('zlib', default=False,
+ description='Compile with zlib')
+ variant('stk', default=False,
+ description='Compile with STK')
+ variant('teuchos', default=True,
+ description='Compile with Teuchos')
+ variant('belos', default=True,
+ description='Compile with Belos')
+ variant('zoltan', default=True,
+ description='Compile with Zoltan')
+ variant('zoltan2', default=True,
+ description='Compile with Zoltan2')
+ variant('amesos', default=True,
+ description='Compile with Amesos')
+ variant('amesos2', default=True,
+ description='Compile with Amesos2')
+ variant('anasazi', default=True,
+ description='Compile with Anasazi')
+ variant('ifpack', default=True,
+ description='Compile with Ifpack')
+ variant('ifpack2', default=True,
+ description='Compile with Ifpack2')
+ variant('muelu', default=True,
+ description='Compile with Muelu')
+ variant('fortran', default=True,
+ description='Compile with Fortran support')
+ variant('ml', default=True,
+ description='Compile with ML')
+ variant('gtest', default=True,
+ description='Compile with Gtest')
+ variant('aztec', default=True,
+ description='Compile with Aztec')
+ variant('sacado', default=True,
+ description='Compile with Sacado')
+ variant('x11', default=False,
+ description='Compile with X11')
+ variant('instantiate', default=True,
+ description='Compile with explicit instantiation')
+ variant('instantiate_cmplx', default=False,
+ description='Compile with explicit instantiation for complex')
+ variant('dtk', default=False,
+ description='Enable DataTransferKit')
+ variant('fortrilinos', default=False,
+ description='Enable ForTrilinos')
+ variant('openmp', default=False,
+ description='Enable OpenMP')
+ variant('rol', default=False,
+ description='Enable ROL')
+ variant('nox', default=False,
+ description='Enable NOX')
+ variant('shards', default=False,
+ description='Enable Shards')
+ variant('intrepid', default=False,
+ description='Enable Intrepid')
+ variant('intrepid2', default=False,
+ description='Enable Intrepid2')
+
+ resource(name='dtk',
+ git='https://github.com/ornl-cees/DataTransferKit',
+ tag='master',
+ placement='DataTransferKit',
+ when='+dtk')
+ resource(name='fortrilinos',
+ git='https://github.com/trilinos/ForTrilinos',
+ tag='develop',
+ placement='packages/ForTrilinos',
+ when='+fortrilinos')
+
+ conflicts('+dtk', when='~tpetra')
+ conflicts('+fortrilinos', when='~fortran')
+ conflicts('+fortrilinos', when='@:99')
+ conflicts('+fortrilinos', when='@master')
+ # Can only use one type of SuperLU
+ conflicts('+superlu-dist', when='+superlu')
+ # For Trilinos v11 we need to force SuperLUDist=OFF, since only the
+ # deprecated SuperLUDist v3.3 together with an Amesos patch is working.
+ conflicts('+superlu-dist', when='@11.4.1:11.14.3')
+ # PnetCDF was only added after v12.10.1
+ conflicts('+pnetcdf', when='@0:12.10.1')
+
+ # ###################### Dependencies ##########################
- # Everything should be compiled with -fpic
+ # Everything should be compiled position independent (-fpic)
depends_on('blas')
depends_on('lapack')
depends_on('boost', when='+boost')
+ depends_on('boost', when='+dtk')
depends_on('matio')
depends_on('glm')
depends_on('metis@5:', when='+metis')
depends_on('suite-sparse', when='+suite-sparse')
+ depends_on('zlib', when="+zlib")
# MPI related dependencies
depends_on('mpi')
- depends_on('netcdf+mpi')
+ depends_on('netcdf+mpi', when="~pnetcdf")
+ depends_on('netcdf+mpi+parallel-netcdf', when="+pnetcdf@master,12.12.1:")
depends_on('parmetis', when='+metis')
# Trilinos' Tribits config system is limited which makes it very tricky to
# link Amesos with static MUMPS, see
@@ -112,73 +215,179 @@ class Trilinos(CMakePackage):
# work at the end. But let's avoid all this by simply using shared libs
depends_on('mumps@5.0:+mpi+shared', when='+mumps')
depends_on('scalapack', when='+mumps')
+ depends_on('superlu-dist', when='+superlu-dist')
depends_on('superlu-dist@:4.3', when='@:12.6.1+superlu-dist')
- depends_on('superlu-dist', when='@12.6.2:+superlu-dist')
- depends_on('superlu+fpic@4.3', when='+superlu')
- depends_on('hypre~internal-superlu', when='+hypre')
- depends_on('hdf5+mpi', when='+hdf5')
+ depends_on('superlu-dist@develop', when='@develop+superlu-dist')
+ depends_on('superlu-dist@xsdk-0.2.0', when='@xsdk-0.2.0+superlu-dist')
+ depends_on('superlu+pic@4.3', when='+superlu')
+ # Trilinos can not be built against 64bit int hypre
+ depends_on('hypre~internal-superlu~int64', when='+hypre')
+ depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0+hypre')
+ depends_on('hypre@develop~internal-superlu', when='@develop+hypre')
+ # FIXME: concretizer bug? 'hl' req by netcdf is affecting this code.
+ depends_on('hdf5+hl+mpi', when='+hdf5')
depends_on('python', when='+python')
- depends_on('py-numpy', when='+python')
+ depends_on('py-numpy', when='+python', type=('build', 'run'))
depends_on('swig', when='+python')
- patch('umfpack_from_suitesparse.patch', when='@:12.8.1')
-
- # check that the combination of variants makes sense
- def variants_check(self):
- if '+superlu-dist' in self.spec and self.spec.satisfies('@:11.4.3'):
- # For Trilinos v11 we need to force SuperLUDist=OFF, since only the
- # deprecated SuperLUDist v3.3 together with an Amesos patch is
- # working.
- raise RuntimeError('The superlu-dist variant can only be used' +
- ' with Trilinos @12.0.1:')
- if '+superlu-dist' in self.spec and '+superlu' in self.spec:
- # Only choose one type of superlu
- raise RuntimeError('The superlu-dist and superlu variant' +
- ' cannot be used together')
+ patch('umfpack_from_suitesparse.patch', when='@11.14.1:12.8.1')
+ patch('xlf_seacas.patch', when='@12.10.1%xl')
+ patch('xlf_seacas.patch', when='@12.10.1%xl_r')
+
+ def url_for_version(self, version):
+ url = "https://github.com/trilinos/Trilinos/archive/trilinos-release-{0}.tar.gz"
+ return url.format(version.dashed)
def cmake_args(self):
spec = self.spec
- self.variants_check()
cxx_flags = []
options = []
+ # #################### Base Settings #######################
+
mpi_bin = spec['mpi'].prefix.bin
- # Note: -DXYZ_LIBRARY_NAMES= needs semicolon separated list of names
- blas = spec['blas'].blas_libs
- lapack = spec['lapack'].lapack_libs
options.extend([
- '-DTrilinos_ENABLE_ALL_PACKAGES:BOOL=ON',
- '-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=ON',
'-DTrilinos_VERBOSE_CONFIGURE:BOOL=OFF',
'-DTrilinos_ENABLE_TESTS:BOOL=OFF',
'-DTrilinos_ENABLE_EXAMPLES:BOOL=OFF',
- '-DCMAKE_BUILD_TYPE:STRING=%s' % (
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
+ '-DTrilinos_ENABLE_CXX11:BOOL=ON',
'-DBUILD_SHARED_LIBS:BOOL=%s' % (
'ON' if '+shared' in spec else 'OFF'),
+
+ # The following can cause problems on systems that don't have
+ # static libraries available for things like dl and pthreads
+ # for example when trying to build static libs
+ # '-DTPL_FIND_SHARED_LIBS:BOOL=%s' % (
+ # 'ON' if '+shared' in spec else 'OFF'),
+ # '-DTrilinos_LINK_SEARCH_START_STATIC:BOOL=%s' % (
+ # 'OFF' if '+shared' in spec else 'ON'),
+
+ # Force Trilinos to use the MPI wrappers instead of raw compilers
+ # this is needed on Apple systems that require full resolution of
+ # all symbols when linking shared libraries
'-DTPL_ENABLE_MPI:BOOL=ON',
- '-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix,
+ '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
+ '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
+ '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc,
+ '-DMPI_BASE_DIR:PATH=%s' % spec['mpi'].prefix
+ ])
+
+ # ################## Trilinos Packages #####################
+
+ options.extend([
+ '-DTrilinos_ENABLE_ALL_OPTIONAL_PACKAGES:BOOL=%s' % (
+ 'ON' if '+alloptpkgs' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Tpetra:BOOL=%s' % (
+ 'ON' if '+tpetra' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Epetra:BOOL=%s' % (
+ 'ON' if '+epetra' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_EpetraExt:BOOL=%s' % (
+ 'ON' if '+epetraext' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_ML:BOOL=%s' % (
+ 'ON' if '+ml' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_AztecOO:BOOL=%s' % (
+ 'ON' if '+aztec' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Sacado:BOOL=%s' % (
+ 'ON' if '+sacado' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Belos:BOOL=%s' % (
+ 'ON' if '+belos' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Zoltan:BOOL=%s' % (
+ 'ON' if '+zoltan' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Zoltan2:BOOL=%s' % (
+ 'ON' if '+zoltan2' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Amesos:BOOL=%s' % (
+ 'ON' if '+amesos' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Amesos2:BOOL=%s' % (
+ 'ON' if '+amesos2' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_MueLu:BOOL=%s' % (
+ 'ON' if '+muelu' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Ifpack:BOOL=%s' % (
+ 'ON' if '+ifpack' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Ifpack2:BOOL=%s' % (
+ 'ON' if '+ifpack2' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Gtest:BOOL=%s' % (
+ 'ON' if '+gtest' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Teuchos:BOOL=%s' % (
+ 'ON' if '+teuchos' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Anasazi:BOOL=%s' % (
+ 'ON' if '+anasazi' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_ROL:BOOL=%s' % (
+ 'ON' if '+rol' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_NOX:BOOL=%s' % (
+ 'ON' if '+nox' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Shards=%s' % (
+ 'ON' if '+shards' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Intrepid=%s' % (
+ 'ON' if '+intrepid' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_Intrepid2=%s' % (
+ 'ON' if '+intrepid2' in spec else 'OFF'),
+ ])
+
+ if '+xsdkflags' in spec:
+ options.extend(['-DUSE_XSDK_DEFAULTS=YES'])
+
+ if '+stk' in spec:
+ # Currently these are fairly specific to the Nalu package
+ # They can likely change when necessary in the future
+ options.extend([
+ '-DTrilinos_ENABLE_STKMesh:BOOL=ON',
+ '-DTrilinos_ENABLE_STKSimd:BOOL=ON',
+ '-DTrilinos_ENABLE_STKIO:BOOL=ON',
+ '-DTrilinos_ENABLE_STKTransfer:BOOL=ON',
+ '-DTrilinos_ENABLE_STKSearch:BOOL=ON',
+ '-DTrilinos_ENABLE_STKUtil:BOOL=ON',
+ '-DTrilinos_ENABLE_STKTopology:BOOL=ON',
+ '-DTrilinos_ENABLE_STKUnit_tests:BOOL=ON',
+ '-DTrilinos_ENABLE_STKUnit_test_utils:BOOL=ON',
+ '-DTrilinos_ENABLE_STKClassic:BOOL=OFF'
+ ])
+
+ if '+dtk' in spec:
+ options.extend([
+ '-DTrilinos_EXTRA_REPOSITORIES:STRING=DataTransferKit',
+ '-DTpetra_INST_INT_UNSIGNED_LONG:BOOL=ON',
+ '-DTrilinos_ENABLE_DataTransferKit:BOOL=ON'
+ ])
+
+ if '+exodus' in spec:
+ # Currently these are fairly specific to the Nalu package
+ # They can likely change when necessary in the future
+ options.extend([
+ '-DTrilinos_ENABLE_SEACAS:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASExodus:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASEpu:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASExodiff:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASNemspread:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASNemslice:BOOL=ON',
+ '-DTrilinos_ENABLE_SEACASIoss:BOOL=ON'
+ ])
+ else:
+ options.extend([
+ '-DTrilinos_ENABLE_SEACAS:BOOL=OFF',
+ '-DTrilinos_ENABLE_SEACASExodus:BOOL=OFF'
+ ])
+
+ # ######################### TPLs #############################
+
+ blas = spec['blas'].libs
+ lapack = spec['lapack'].libs
+ # Note: -DXYZ_LIBRARY_NAMES= needs semicolon separated list of names
+ options.extend([
'-DTPL_ENABLE_BLAS=ON',
'-DBLAS_LIBRARY_NAMES=%s' % ';'.join(blas.names),
'-DBLAS_LIBRARY_DIRS=%s' % ';'.join(blas.directories),
'-DTPL_ENABLE_LAPACK=ON',
'-DLAPACK_LIBRARY_NAMES=%s' % ';'.join(lapack.names),
'-DLAPACK_LIBRARY_DIRS=%s' % ';'.join(lapack.directories),
- '-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION:BOOL=ON',
- '-DTrilinos_ENABLE_CXX11:BOOL=ON',
'-DTPL_ENABLE_Netcdf:BOOL=ON',
- '-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % self.prefix
+ '-DNetCDF_ROOT:PATH=%s' % spec['netcdf'].prefix,
+ '-DTPL_ENABLE_X11:BOOL=%s' % (
+ 'ON' if '+x11' in spec else 'OFF'),
+ '-DTrilinos_ENABLE_PyTrilinos:BOOL=%s' % (
+ 'ON' if '+python' in spec else 'OFF'),
])
- # Force Trilinos to use the MPI wrappers instead of raw compilers
- # this is needed on Apple systems that require full resolution of
- # all symbols when linking shared libraries
- options.extend([
- '-DCMAKE_C_COMPILER=%s' % spec['mpi'].mpicc,
- '-DCMAKE_CXX_COMPILER=%s' % spec['mpi'].mpicxx,
- '-DCMAKE_Fortran_COMPILER=%s' % spec['mpi'].mpifc
- ])
if '+hypre' in spec:
options.extend([
'-DTPL_ENABLE_HYPRE:BOOL=ON',
@@ -186,25 +395,6 @@ class Trilinos(CMakePackage):
'-DHYPRE_LIBRARY_DIRS:PATH=%s' % spec['hypre'].prefix.lib
])
- if spec.satisfies('%intel') and spec.satisfies('@12.6.2'):
- # Panzer uses some std:chrono that is not recognized by Intel
- # Don't know which (maybe all) Trilinos versions this applies to
- # Don't know which (maybe all) Intel versions this applies to
- options.extend([
- '-DTrilinos_ENABLE_Panzer:BOOL=OFF'
- ])
-
- if '+xsdkflags' in spec:
- options.extend(['-DUSE_XSDK_DEFAULTS=YES'])
- if '+hdf5' in spec:
- options.extend([
- '-DTPL_ENABLE_HDF5:BOOL=ON',
- '-DHDF5_INCLUDE_DIRS:PATH=%s' % spec['hdf5'].prefix.include,
- '-DHDF5_LIBRARY_DIRS:PATH=%s' % spec['hdf5'].prefix.lib
- ])
- else:
- options.extend(['-DTPL_ENABLE_HDF5:BOOL=OFF'])
-
if '+boost' in spec:
options.extend([
'-DTPL_ENABLE_Boost:BOOL=ON',
@@ -223,18 +413,6 @@ class Trilinos(CMakePackage):
else:
options.extend(['-DTPL_ENABLE_HDF5:BOOL=OFF'])
- # Fortran lib
- if spec.satisfies('%gcc') or spec.satisfies('%clang'):
- libgfortran = os.path.dirname(os.popen(
- '%s --print-file-name libgfortran.a' %
- join_path(mpi_bin, 'mpif90')).read())
- options.extend([
- '-DTrilinos_EXTRA_LINK_FLAGS:STRING=-L%s/ -lgfortran' % (
- libgfortran),
- '-DTrilinos_ENABLE_Fortran=ON'
- ])
-
- # suite-sparse related
if '+suite-sparse' in spec:
options.extend([
# FIXME: Trilinos seems to be looking for static libs only,
@@ -259,7 +437,6 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_UMFPACK:BOOL=OFF',
])
- # metis / parmetis
if '+metis' in spec:
options.extend([
'-DTPL_ENABLE_METIS:BOOL=ON',
@@ -279,16 +456,16 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_ParMETIS:BOOL=OFF',
])
- # mumps / scalapack
if '+mumps' in spec:
+ scalapack = spec['scalapack'].libs
options.extend([
'-DTPL_ENABLE_MUMPS:BOOL=ON',
'-DMUMPS_LIBRARY_DIRS=%s' % spec['mumps'].prefix.lib,
# order is important!
'-DMUMPS_LIBRARY_NAMES=dmumps;mumps_common;pord',
'-DTPL_ENABLE_SCALAPACK:BOOL=ON',
- # FIXME: for MKL it's mkl_scalapack_lp64;mkl_blacs_mpich_lp64
- '-DSCALAPACK_LIBRARY_NAMES=scalapack'
+ '-DSCALAPACK_LIBRARY_NAMES=%s' % ';'.join(scalapack.names),
+ '-DSCALAPACK_LIBRARY_DIRS=%s' % ';'.join(scalapack.directories)
])
# see
# https://github.com/trilinos/Trilinos/blob/master/packages/amesos/README-MUMPS
@@ -301,7 +478,6 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_SCALAPACK:BOOL=OFF',
])
- # superlu-dist:
if '+superlu-dist' in spec:
# Amesos, conflicting types of double and complex SLU_D
# see
@@ -328,7 +504,6 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_SuperLUDist:BOOL=OFF',
])
- # superlu:
if '+superlu' in spec:
options.extend([
'-DTPL_ENABLE_SuperLU:BOOL=ON',
@@ -342,14 +517,91 @@ class Trilinos(CMakePackage):
'-DTPL_ENABLE_SuperLU:BOOL=OFF',
])
- # python
- if '+python' in spec:
+ if '+pnetcdf' in spec:
options.extend([
- '-DTrilinos_ENABLE_PyTrilinos:BOOL=ON'
+ '-DTPL_ENABLE_Pnetcdf:BOOL=ON',
+ '-DTPL_Netcdf_Enables_Netcdf4:BOOL=ON',
+ '-DTPL_Netcdf_PARALLEL:BOOL=ON',
+ '-DPNetCDF_ROOT:PATH=%s' % spec['parallel-netcdf'].prefix
])
else:
options.extend([
- '-DTrilinos_ENABLE_PyTrilinos:BOOL=OFF'
+ '-DTPL_ENABLE_Pnetcdf:BOOL=OFF'
+ ])
+
+ if '+zlib' in spec:
+ options.extend([
+ '-DTPL_ENABLE_Zlib:BOOL=ON',
+ '-DZlib_ROOT:PATH=%s' % spec['zlib'].prefix,
+ ])
+ else:
+ options.extend([
+ '-DTPL_ENABLE_Zlib:BOOL=OFF'
+ ])
+
+ # ################# Miscellaneous Stuff ######################
+
+ # OpenMP
+ if '+openmp' in spec:
+ options.extend([
+ '-DTrilinos_ENABLE_OpenMP:BOOL=ON',
+ '-DKokkos_ENABLE_OpenMP:BOOL=ON'
+ ])
+ if '+tpetra' in spec:
+ options.extend([
+ '-DTpetra_INST_OPENMP:BOOL=ON'
+ ])
+
+ # Fortran lib
+ if '+fortran' in spec:
+ if spec.satisfies('%gcc') or spec.satisfies('%clang'):
+ libgfortran = os.path.dirname(os.popen(
+ '%s --print-file-name libgfortran.a' %
+ join_path(mpi_bin, 'mpif90')).read())
+ options.extend([
+ '-DTrilinos_EXTRA_LINK_FLAGS:STRING=-L%s/ -lgfortran' % (
+ libgfortran),
+ '-DTrilinos_ENABLE_Fortran=ON'
+ ])
+
+ # Explicit instantiation
+ if '+instantiate' in spec:
+ options.extend([
+ '-DTrilinos_ENABLE_EXPLICIT_INSTANTIATION:BOOL=ON'
+ ])
+ if '+tpetra' in spec:
+ options.extend([
+ '-DTpetra_INST_DOUBLE:BOOL=ON',
+ '-DTpetra_INST_INT_LONG:BOOL=ON'
+ '-DTpetra_INST_COMPLEX_DOUBLE=%s' % (
+ 'ON' if '+instantiate_cmplx' in spec else 'OFF'
+ )
+ ])
+
+ # disable due to compiler / config errors:
+ if spec.satisfies('%xl') or spec.satisfies('%xl_r'):
+ options.extend([
+ '-DTrilinos_ENABLE_Pamgen:BOOL=OFF',
+ '-DTrilinos_ENABLE_Stokhos:BOOL=OFF'
+ ])
+
+ if sys.platform == 'darwin':
+ options.extend([
+ '-DTrilinos_ENABLE_FEI=OFF'
+ ])
+
+ if sys.platform == 'darwin' and macOS_version() >= Version('10.12'):
+ # use @rpath on Sierra due to limit of dynamic loader
+ options.append('-DCMAKE_MACOSX_RPATH=ON')
+ else:
+ options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s' % prefix.lib)
+
+ if spec.satisfies('%intel') and spec.satisfies('@12.6.2'):
+ # Panzer uses some std:chrono that is not recognized by Intel
+ # Don't know which (maybe all) Trilinos versions this applies to
+ # Don't know which (maybe all) Intel versions this applies to
+ options.extend([
+ '-DTrilinos_ENABLE_Panzer:BOOL=OFF'
])
# collect CXX flags:
@@ -359,17 +611,12 @@ class Trilinos(CMakePackage):
# disable due to compiler / config errors:
options.extend([
- '-DTrilinos_ENABLE_SEACAS=OFF',
- '-DTrilinos_ENABLE_Pike=OFF',
- '-DTrilinos_ENABLE_STK=OFF'
+ '-DTrilinos_ENABLE_Pike=OFF'
])
- if sys.platform == 'darwin':
- options.extend([
- '-DTrilinos_ENABLE_FEI=OFF'
- ])
+
return options
- @CMakePackage.sanity_check('install')
+ @run_after('install')
def filter_python(self):
# When trilinos is built with Python, libpytrilinos is included
# through cmake configure files. Namely, Trilinos_LIBRARIES in
diff --git a/var/spack/repos/builtin/packages/trilinos/xlf_seacas.patch b/var/spack/repos/builtin/packages/trilinos/xlf_seacas.patch
new file mode 100644
index 0000000000..04e84d93fb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trilinos/xlf_seacas.patch
@@ -0,0 +1,12 @@
+--- a/packages/seacas/cmake/FortranSettings.cmake 2017-06-26 15:28:54.660570160 -0400
++++ b/pacakges/seacas/cmake/FortranSettings.cmake 2017-06-26 15:28:05.650565259 -0400
+@@ -7,7 +7,7 @@
+ IF ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU")
+ SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fcray-pointer -fdefault-real-8 -fdefault-integer-8 -fno-range-check")
+ ELSEIF ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "XL")
+- SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -WF,-D__XLF__ -qintsize=8 -qrealsize=8")
++ SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfixed -WF,-D__XLF__ -qintsize=8 -qrealsize=8")
+ ELSE()
+ SET(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -r8 -i8")
+ ENDIF()
+
diff --git a/var/spack/repos/builtin/packages/trimgalore/package.py b/var/spack/repos/builtin/packages/trimgalore/package.py
new file mode 100644
index 0000000000..e1dca34f43
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trimgalore/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Trimgalore(Package):
+ """Trim Galore! is a wrapper around Cutadapt and FastQC to consistently
+ apply adapter and quality trimming to FastQ files, with extra
+ functionality for RRBS data."""
+
+ homepage = "https://github.com/FelixKrueger/TrimGalore"
+ url = "https://github.com/FelixKrueger/TrimGalore/archive/0.4.4.tar.gz"
+
+ version('0.4.4', 'aae1b807b48e38bae7074470203997bb')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('py-cutadapt', type=('build', 'run'))
+ depends_on('fastqc')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('trim_galore', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/trimmomatic/package.py b/var/spack/repos/builtin/packages/trimmomatic/package.py
new file mode 100644
index 0000000000..da741d5017
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trimmomatic/package.py
@@ -0,0 +1,65 @@
+##############################################################################
+# 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/spack/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 *
+from distutils.dir_util import copy_tree
+from shutil import copyfile
+import os.path
+
+
+class Trimmomatic(Package):
+ """A flexible read trimming tool for Illumina NGS data."""
+
+ homepage = "http://www.usadellab.org/cms/?page=trimmomatic"
+ url = "http://www.usadellab.org/cms/uploads/supplementary/Trimmomatic/Trimmomatic-0.36.zip"
+
+ # Older version aren't explicitly made available, but the URL
+ # works as we'd like it to, so...
+ version('0.36', '8549130d86b6f0382b1a71a2eb45de39')
+ version('0.33', '924fc8eb38fdff71740a0e05d32d6a2b')
+
+ depends_on('java@8:', type='run')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ jar_file = 'trimmomatic-{v}.jar'.format(v=self.version.dotted)
+ install(jar_file, prefix.bin)
+
+ # Put the adapter files someplace sensible
+ copy_tree('adapters', join_path(self.prefix.share, 'adapters'))
+
+ # Set up a helper script to call java on the jar file,
+ # explicitly codes the path for java and the jar file.
+ script_sh = join_path(os.path.dirname(__file__), "trimmomatic.sh")
+ script = join_path(prefix.bin, "trimmomatic")
+ copyfile(script_sh, script)
+ set_executable(script)
+
+ # Munge the helper script to explicitly point to java and the
+ # jar file.
+ java = join_path(self.spec['java'].prefix, 'bin', 'java')
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('trimmomatic.jar', join_path(prefix.bin, jar_file),
+ script, **kwargs)
diff --git a/var/spack/repos/builtin/packages/trimmomatic/trimmomatic.sh b/var/spack/repos/builtin/packages/trimmomatic/trimmomatic.sh
new file mode 100644
index 0000000000..88990aa3ec
--- /dev/null
+++ b/var/spack/repos/builtin/packages/trimmomatic/trimmomatic.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the trimmomatic.jar file
+java $JAVA_ARGS $JAVA_OPTS -jar trimmomatic.jar "$@"
diff --git a/var/spack/repos/builtin/packages/turbine/package.py b/var/spack/repos/builtin/packages/turbine/package.py
new file mode 100644
index 0000000000..d12fa0a41c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/turbine/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Turbine(AutotoolsPackage):
+ """Turbine: The Swift/T runtime"""
+
+ homepage = 'http://swift-lang.org/Swift-T'
+ url = 'http://swift-lang.github.io/swift-t-downloads/turbine-1.0.0.tar.gz'
+
+ version('1.0.0', '7ed56d65d6db0bfe15a439d818b4259e')
+
+ depends_on('adlbx')
+ depends_on('tcl')
+ depends_on('zsh', type='run')
+
+ def configure_args(self):
+ args = ['--with-c-utils=' + self.spec['exmcutils'].prefix,
+ '--with-adlb=' + self.spec['adlbx'].prefix,
+ '--with-tcl=' + self.spec['tcl'].prefix,
+ '--with-mpi=' + self.spec['mpi'].prefix]
+ return args
diff --git a/var/spack/repos/builtin/packages/turbomole/package.py b/var/spack/repos/builtin/packages/turbomole/package.py
index cf14259da4..14af3e4bdf 100644
--- a/var/spack/repos/builtin/packages/turbomole/package.py
+++ b/var/spack/repos/builtin/packages/turbomole/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/tut/package.py b/var/spack/repos/builtin/packages/tut/package.py
new file mode 100644
index 0000000000..c0d2bbcc8f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tut/package.py
@@ -0,0 +1,43 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Tut(WafPackage):
+ """TUT is a small and portable unit test framework for C++."""
+
+ homepage = "http://mrzechonek.github.io/tut-framework/"
+ url = "https://github.com/mrzechonek/tut-framework/tarball/2016-12-19"
+
+ version('2016-12-19', '8b1967fa295ae1ce4d4431c2f811e521')
+
+ def build_args(self):
+ args = []
+
+ if self.run_tests:
+ # Run unit tests
+ args.append('--test')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/twm/package.py b/var/spack/repos/builtin/packages/twm/package.py
index 3e37f4903d..b467420c82 100644
--- a/var/spack/repos/builtin/packages/twm/package.py
+++ b/var/spack/repos/builtin/packages/twm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Twm(Package):
+class Twm(AutotoolsPackage):
"""twm is a window manager for the X Window System. It provides
titlebars, shaped windows, several forms of icon management,
user-defined macro functions, click-to-type and pointer-driven
@@ -48,9 +48,3 @@ class Twm(Package):
depends_on('flex', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/tycho2/package.py b/var/spack/repos/builtin/packages/tycho2/package.py
new file mode 100644
index 0000000000..0f54c2e661
--- /dev/null
+++ b/var/spack/repos/builtin/packages/tycho2/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Tycho2(MakefilePackage):
+ """A neutral particle transport mini-app to study performance of sweeps
+ on unstructured, 3D tetrahedral meshes.
+ """
+ homepage = "https://github.com/lanl/tycho2"
+ url = "https://github.com/lanl/tycho2/tarball/v0.1"
+
+ version('develop', git='https://github.com/lanl/tycho2', branch='master')
+
+ depends_on("mpi")
+
+ def patch(self):
+ # make.inc is included by Makefile to set MPICC, but we that
+ # through build_targets() below, so any empty include file is fine.
+ touch('make.inc')
+
+ @property
+ def build_targets(self):
+ targets = [
+ 'MPICC={0} -std=c++11 {1}'.format(self.spec['mpi'].mpicxx,
+ self.compiler.openmp_flag)
+ ]
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('sweep.x', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/typhonio/package.py b/var/spack/repos/builtin/packages/typhonio/package.py
new file mode 100644
index 0000000000..35fe269fd6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/typhonio/package.py
@@ -0,0 +1,60 @@
+##############################################################################
+# 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/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 Typhonio(CMakePackage):
+ """TyphonIO is a library of routines that perform input/output (I/O)
+ of scientific data within application codes"""
+
+ homepage = "http://uk-mac.github.io/typhonio/"
+ url = "https://github.com/UK-MAC/typhonio/archive/v1.6_CMake.tar.gz"
+
+ version('1.6_CMake', '8e8b2940a57874205e6d451856db5c2755884bf9')
+ version('develop', git='https://github.com/UK-MAC/typhonio.git',
+ branch='cmake_build')
+
+ variant('build_type', default='Release', description='The build type to build',
+ values=('Debug', 'Release'))
+ variant('fortran', default=False, description='Enable Fortran support')
+ variant('shared', default=False, description='Build shared libraries')
+ variant('docs', default=False, description='Build user guide and doxygen documentation')
+
+ depends_on('mpi')
+ depends_on('hdf5')
+
+ def cmake_args(self):
+ spec = self.spec
+ cmake_args = []
+
+ if "+fortran" in spec:
+ cmake_args.append("-DBUILD_FORTRAN_LIBRARY=ON")
+ if "+shared" in spec:
+ cmake_args.append("-DBUILD_TIO_SHARED=ON")
+ if "+docs" in spec:
+ cmake_args.append("-DBUILD_DOXYGEN_DOCS=ON")
+ cmake_args.append("-DBUILD_USER_GUIDE=ON")
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/uberftp/package.py b/var/spack/repos/builtin/packages/uberftp/package.py
index b0c6c8a42f..040434f1b1 100644
--- a/var/spack/repos/builtin/packages/uberftp/package.py
+++ b/var/spack/repos/builtin/packages/uberftp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Uberftp(Package):
+class Uberftp(AutotoolsPackage):
"""UberFTP is an interactive (text-based) client for GridFTP"""
homepage = "http://toolkit.globus.org/grid_software/data/uberftp.php"
@@ -36,9 +36,3 @@ class Uberftp(Package):
version('2_6', '784210976f259f9d19c0798c19778d34')
depends_on('globus-toolkit')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/udunits2/package.py b/var/spack/repos/builtin/packages/udunits2/package.py
index cfc8e30c41..0e273f60ab 100644
--- a/var/spack/repos/builtin/packages/udunits2/package.py
+++ b/var/spack/repos/builtin/packages/udunits2/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,11 +29,10 @@ class Udunits2(AutotoolsPackage):
"""Automated units conversion"""
homepage = "http://www.unidata.ucar.edu/software/udunits"
- url = "ftp://ftp.unidata.ucar.edu/pub/udunits/udunits-2.2.21.tar.gz"
+ url = "https://www.gfd-dennou.org/arch/ucar/unidata/pub/udunits/udunits-2.2.24.tar.gz"
- version('2.2.21', '1f6d3375efc1f124790a4efb7102cdb7')
+ version('2.2.24', '898b90dc1890f172c493406d0f26f531')
+ version('2.2.23', '9f66006accecd621a4c3eda4ba9fa7c9')
+ version('2.2.21', '1585a5efb2c40c00601abab036a81299')
depends_on('expat')
-
- depends_on('bison', type='build')
- depends_on('flex', type='build')
diff --git a/var/spack/repos/builtin/packages/uncrustify/package.py b/var/spack/repos/builtin/packages/uncrustify/package.py
index c3182d0dc8..fdd7a49ec7 100644
--- a/var/spack/repos/builtin/packages/uncrustify/package.py
+++ b/var/spack/repos/builtin/packages/uncrustify/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Uncrustify(Package):
+class Uncrustify(AutotoolsPackage):
"""Source Code Beautifier for C, C++, C#, ObjectiveC, Java, and others."""
homepage = "http://uncrustify.sourceforge.net/"
url = "http://downloads.sourceforge.net/project/uncrustify/uncrustify/uncrustify-0.61/uncrustify-0.61.tar.gz"
version('0.61', 'b6140106e74c64e831d0b1c4b6cf7727')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/unibilium/package.py b/var/spack/repos/builtin/packages/unibilium/package.py
index 943e4737e1..74cea8c8e2 100644
--- a/var/spack/repos/builtin/packages/unibilium/package.py
+++ b/var/spack/repos/builtin/packages/unibilium/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/unison/package.py b/var/spack/repos/builtin/packages/unison/package.py
index 181e1e6410..3d94ca7f49 100644
--- a/var/spack/repos/builtin/packages/unison/package.py
+++ b/var/spack/repos/builtin/packages/unison/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -34,7 +34,7 @@ class Unison(Package):
other."""
homepage = "https://www.cis.upenn.edu/~bcpierce/unison/"
- url = "https://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.3.tar.gz"
+ url = "https://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz"
version('2.48.4', '5334b78c7e68169df7de95f4c6c4b60f')
diff --git a/var/spack/repos/builtin/packages/units/package.py b/var/spack/repos/builtin/packages/units/package.py
new file mode 100644
index 0000000000..502dc999b7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/units/package.py
@@ -0,0 +1,36 @@
+##############################################################################
+# 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/spack/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 Units(AutotoolsPackage):
+ """GNU units converts between different systems of units"""
+
+ homepage = "https://www.gnu.org/software/units/"
+ url = "https://ftp.gnu.org/gnu/units/units-2.13.tar.gz"
+
+ version('2.13', '5cbf2a6af76e94ba0ac55fc8d99d5a3e')
+
+ depends_on('python', type=('build', 'run'))
diff --git a/var/spack/repos/builtin/packages/unixodbc/package.py b/var/spack/repos/builtin/packages/unixodbc/package.py
index 15de127b7e..30a771cdf2 100644
--- a/var/spack/repos/builtin/packages/unixodbc/package.py
+++ b/var/spack/repos/builtin/packages/unixodbc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,18 +25,15 @@
from spack import *
-class Unixodbc(Package):
+class Unixodbc(AutotoolsPackage):
"""ODBC is an open specification for providing application developers with
a predictable API with which to access Data Sources. Data Sources include
SQL Servers and any Data Source with an ODBC Driver."""
homepage = "http://www.unixodbc.org/"
- url = "ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz"
+ url = "http://www.unixodbc.org/unixODBC-2.3.4.tar.gz"
version('2.3.4', 'bd25d261ca1808c947cb687e2034be81')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
+ depends_on('libiconv')
+ depends_on('libtool')
diff --git a/var/spack/repos/builtin/packages/usearch/package.py b/var/spack/repos/builtin/packages/usearch/package.py
new file mode 100644
index 0000000000..b426376404
--- /dev/null
+++ b/var/spack/repos/builtin/packages/usearch/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Usearch(Package):
+ """USEARCH is a unique sequence analysis tool with thousands of users
+ world-wide.
+
+ Note: A manual download is required for USEARCH.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "http://www.drive5.com/usearch/"
+
+ version('10.0.240', '05192b6d5e291530c190a19a3cc82b53', expand=False)
+
+ def url_for_version(self, version):
+ return "file://{0}/usearch{1}_i86linux32".format(os.getcwd(), version)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('usearch{0}_i86linux32'.format(self.version),
+ prefix.bin.usearch)
diff --git a/var/spack/repos/builtin/packages/util-linux/package.py b/var/spack/repos/builtin/packages/util-linux/package.py
index 99af170ca1..f013737347 100644
--- a/var/spack/repos/builtin/packages/util-linux/package.py
+++ b/var/spack/repos/builtin/packages/util-linux/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,20 +25,29 @@
from spack import *
-class UtilLinux(Package):
+class UtilLinux(AutotoolsPackage):
"""Util-linux is a suite of essential utilities for any Linux system."""
homepage = "http://freecode.com/projects/util-linux"
- url = "https://www.kernel.org/pub/linux/utils/util-linux/v2.25/util-linux-2.25.tar.gz"
+ url = "https://www.kernel.org/pub/linux/utils/util-linux/v2.29/util-linux-2.29.2.tar.gz"
+ list_url = "https://www.kernel.org/pub/linux/utils/util-linux"
+ list_depth = 1
- version('2.25', 'f6d7fc6952ec69c4dc62c8d7c59c1d57')
+ version('2.29.2', '24e0c67aac6f5c2535208866a42aeea2')
+ version('2.29.1', 'c7d5c111ef6bc5df65659e0b523ac9d9')
+ version('2.25', 'f6d7fc6952ec69c4dc62c8d7c59c1d57')
- depends_on("python@2.7:")
+ depends_on('python@2.7:')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "PKG_CONFIG_PATH=%s/pkgconfig" % spec['python'].prefix.lib,
- "--disable-use-tty-group")
+ def url_for_version(self, version):
+ url = "https://www.kernel.org/pub/linux/utils/util-linux/v{0}/util-linux-{1}.tar.gz"
+ return url.format(version.up_to(2), version)
- make()
- make("install")
+ def configure_args(self):
+ spec = self.spec
+
+ return [
+ 'PKG_CONFIG_PATH={0}'.format(
+ join_path(spec['python'].prefix.lib, 'pkgconfig')),
+ '--disable-use-tty-group',
+ ]
diff --git a/var/spack/repos/builtin/packages/util-macros/package.py b/var/spack/repos/builtin/packages/util-macros/package.py
index 486d4463b0..e49987a57f 100644
--- a/var/spack/repos/builtin/packages/util-macros/package.py
+++ b/var/spack/repos/builtin/packages/util-macros/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,17 +25,13 @@
from spack import *
-class UtilMacros(Package):
+class UtilMacros(AutotoolsPackage):
"""This is a set of autoconf macros used by the configure.ac scripts in
other Xorg modular packages, and is needed to generate new versions
of their configure scripts with autoconf."""
homepage = "http://cgit.freedesktop.org/xorg/util/macros/"
- url = "https://www.x.org/archive/individual/util/util-macros-1.19.0.tar.bz2"
+ url = "https://www.x.org/archive/individual/util/util-macros-1.19.1.tar.bz2"
+ version('1.19.1', '6e76e546a4e580f15cebaf8019ef1625')
version('1.19.0', '1cf984125e75f8204938d998a8b6c1e1')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/uuid/package.py b/var/spack/repos/builtin/packages/uuid/package.py
index 5bcf59d9bf..5ad2e75341 100644
--- a/var/spack/repos/builtin/packages/uuid/package.py
+++ b/var/spack/repos/builtin/packages/uuid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/valgrind/package.py b/var/spack/repos/builtin/packages/valgrind/package.py
index e7ae227c27..b950e1cffd 100644
--- a/var/spack/repos/builtin/packages/valgrind/package.py
+++ b/var/spack/repos/builtin/packages/valgrind/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -22,11 +22,11 @@
# 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 *
+import sys
-class Valgrind(Package):
+class Valgrind(AutotoolsPackage):
"""An instrumentation framework for building dynamic analysis.
There are Valgrind tools that can automatically detect many memory
@@ -40,20 +40,39 @@ class Valgrind(Package):
homepage = "http://valgrind.org/"
url = "http://valgrind.org/downloads/valgrind-3.11.0.tar.bz2"
+ version('3.12.0', '6eb03c0c10ea917013a7622e483d61bb')
version('3.11.0', '4ea62074da73ae82e0162d6550d3f129')
version('3.10.1', '60ddae962bc79e7c95cfc4667245707f')
version('3.10.0', '7c311a72a20388aceced1aa5573ce970')
+ version('develop', svn='svn://svn.valgrind.org/valgrind/trunk')
- variant('mpi', default=True, description='Activates MPI support for valgrind')
+ variant('mpi', default=True,
+ description='Activates MPI support for valgrind')
variant('boost', default=True,
description='Activates boost support for valgrind')
depends_on('mpi', when='+mpi')
depends_on('boost', when='+boost')
- def install(self, spec, prefix):
- options = ['--prefix=%s' % prefix,
- '--enable-ubsan']
- configure(*options)
- make()
- make("install")
+ depends_on("autoconf", type='build', when='@develop')
+ depends_on("automake", type='build', when='@develop')
+ depends_on("libtool", type='build', when='@develop')
+
+ # Apply the patch suggested here:
+ # http://valgrind.10908.n7.nabble.com/Unable-to-compile-on-Mac-OS-X-10-11-td57237.html
+ patch('valgrind_3_12_0_osx.patch', when='@3.12.0 platform=darwin')
+
+ def configure_args(self):
+ spec = self.spec
+ options = []
+ if not (spec.satisfies('%clang') and sys.platform == 'darwin'):
+ # Otherwise with (Apple's) clang there is a linker error:
+ # clang: error: unknown argument: '-static-libubsan'
+ options.append('--enable-ubsan')
+
+ if sys.platform == 'darwin':
+ options.extend([
+ '--build=amd64-darwin',
+ '--enable-only64bit'
+ ])
+ return options
diff --git a/var/spack/repos/builtin/packages/valgrind/valgrind_3_12_0_osx.patch b/var/spack/repos/builtin/packages/valgrind/valgrind_3_12_0_osx.patch
new file mode 100644
index 0000000000..109cbc31f7
--- /dev/null
+++ b/var/spack/repos/builtin/packages/valgrind/valgrind_3_12_0_osx.patch
@@ -0,0 +1,13 @@
+diff --git a/coregrind/m_main.c b/coregrind/m_main.c
+index d008ab3..42d8f30 100644
+--- a/coregrind/m_main.c
++++ b/coregrind/m_main.c
+@@ -4058,7 +4058,7 @@ UWord voucher_mach_msg_set ( UWord arg1 )
+
+ #endif
+
+-#if defined(VGO_darwin) && DARWIN_VERS == DARWIN_10_10
++#if defined(VGO_darwin)
+
+ /* This might also be needed for > DARWIN_10_10, but I have no way
+ to test for that. Hence '==' rather than '>=' in the version
diff --git a/var/spack/repos/builtin/packages/vampirtrace/package.py b/var/spack/repos/builtin/packages/vampirtrace/package.py
new file mode 100644
index 0000000000..bc53cc6008
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vampirtrace/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/spack/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 Vampirtrace(AutotoolsPackage):
+ """VampirTrace is an open source library that allows detailed logging of
+ program execution for parallel applications using message passing (MPI)
+ and threads (OpenMP, Pthreads)."""
+
+ homepage = "https://tu-dresden.de/zih/forschung/projekte/vampirtrace"
+ url = "http://wwwpub.zih.tu-dresden.de/~mlieber/dcount/dcount.php?package=vampirtrace&get=VampirTrace-5.14.4.tar.gz"
+
+ version('5.14.4', '1c92b23169df9bcc860e5fc737dbc9c9')
+
+ variant('mpi', default=True, description='Enable MPI support')
+
+ depends_on('mpi', when='+mpi')
+ depends_on('otf')
+ depends_on('papi')
+ depends_on('zlib')
+
+ def patch(self):
+ path = 'tools/vtwrapper/vt{0}-wrapper-data.txt.in'
+
+ for wrapper in ('cc', 'c++', 'fort'):
+ filter_file('@VT_WRAPPER_OPARI_TAB_COMPILER@',
+ '@VT_WRAPPER_CC_COMPILER@',
+ path.format(wrapper))
+
+ def configure_args(self):
+ spec = self.spec
+ compiler = self.compiler
+
+ args = [
+ '--with-extern-otf',
+ '--with-extern-otf-dir={0}'.format(spec['otf'].prefix),
+ '--with-papi-dir={0}'.format(spec['papi'].prefix),
+ '--with-zlib-dir={0}'.format(spec['zlib'].prefix),
+ '--with-wrapper-cc-compiler={0}'.format(compiler.cc),
+ '--with-wrapper-cc-cpp={0} -E'.format(compiler.cc),
+ '--with-wrapper-cxx-compiler={0}'.format(compiler.cxx),
+ '--with-wrapper-cxx-cpp={0} -E'.format(compiler.cxx),
+ '--with-wrapper-fc-compiler={0}'.format(compiler.fc),
+ '--with-wrapper-fc-cpp={0} -E'.format(compiler.fc)
+ ]
+
+ if '+mpi' in spec:
+ args.append('--with-mpi-dir={0}'.format(spec['mpi'].prefix))
+
+ return args
diff --git a/var/spack/repos/builtin/packages/vardictjava/package.py b/var/spack/repos/builtin/packages/vardictjava/package.py
new file mode 100644
index 0000000000..66745a6a58
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vardictjava/package.py
@@ -0,0 +1,47 @@
+##############################################################################
+# 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/spack/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 *
+import glob
+
+
+class Vardictjava(Package):
+ """VarDictJava is a variant discovery program written in Java.
+ It is a partial Java port of VarDict variant caller."""
+
+ homepage = "https://github.com/AstraZeneca-NGS/VarDictJava"
+ url = "https://github.com/AstraZeneca-NGS/VarDictJava/releases/download/v1.5.1/VarDict-1.5.1.tar"
+
+ version('1.5.1', '8c0387bcc1f7dc696b04e926c48b27e6')
+
+ depends_on('java@8:', type='run')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('bin/VarDict', prefix.bin)
+
+ mkdirp(prefix.lib)
+ files = [x for x in glob.glob("lib/*jar")]
+ for f in files:
+ install(f, prefix.lib)
diff --git a/var/spack/repos/builtin/packages/varscan/package.py b/var/spack/repos/builtin/packages/varscan/package.py
new file mode 100644
index 0000000000..0ce5c6b634
--- /dev/null
+++ b/var/spack/repos/builtin/packages/varscan/package.py
@@ -0,0 +1,59 @@
+##############################################################################
+# 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/spack/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 *
+import os.path
+
+
+class Varscan(Package):
+ """Variant calling and somatic mutation/CNV detection for next-generation
+ sequencing data"""
+
+ homepage = "http://dkoboldt.github.io/varscan/"
+ url = "https://github.com/dkoboldt/varscan/releases/download/2.4.2/VarScan.v2.4.2.jar"
+
+ version('2.4.2', '4b810741505a8145a7f8f9f6791bbacf', expand=False)
+
+ depends_on('java', type=('build', 'run'))
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ mkdirp(prefix.jar)
+ jar_file = 'VarScan.v{v}.jar'.format(v=self.version.dotted)
+ install(jar_file, prefix.jar)
+
+ script_sh = join_path(os.path.dirname(__file__), "varscan.sh")
+ script = prefix.bin.varscan
+ install(script_sh, script)
+ set_executable(script)
+
+ java = join_path(self.spec['java'].prefix, 'bin', 'java')
+ kwargs = {'ignore_absent': False, 'backup': False, 'string': False}
+ filter_file('^java', java, script, **kwargs)
+ filter_file('varscan.jar', join_path(prefix.jar, jar_file),
+ script, **kwargs)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.set('VARSCAN_HOME', self.prefix)
+ run_env.set('CLASSPATH', self.prefix.jar)
diff --git a/var/spack/repos/builtin/packages/varscan/varscan.sh b/var/spack/repos/builtin/packages/varscan/varscan.sh
new file mode 100644
index 0000000000..71824a46c6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/varscan/varscan.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# convenience wrapper for the astral jar file
+java $JAVA_ARGS $JAVA_OPTS -jar varscan.jar "$@"
diff --git a/var/spack/repos/builtin/packages/vc/package.py b/var/spack/repos/builtin/packages/vc/package.py
new file mode 100644
index 0000000000..048955205b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vc/package.py
@@ -0,0 +1,41 @@
+##############################################################################
+# 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/spack/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 Vc(CMakePackage):
+ """SIMD Vector Classes for C++"""
+
+ homepage = "https://github.com/VcDevel/Vc"
+ url = "https://github.com/VcDevel/Vc/archive/1.3.0.tar.gz"
+
+ version('1.3.0', '77efc1c16691c7925d4b58f9b30cf03b')
+ version('1.2.0', 'a5236df286b845d2fee5ef1e4d27549f')
+ version('1.1.0', 'e354c1e3ea1d674b6f2af9c6fd230d81')
+
+ variant('build_type', default='RelWithDebInfo',
+ description='The build type to build',
+ values=('Debug', 'Release', 'RelWithDebug',
+ 'RelWithDebInfo', 'MinSizeRel'))
diff --git a/var/spack/repos/builtin/packages/vcftools/package.py b/var/spack/repos/builtin/packages/vcftools/package.py
new file mode 100644
index 0000000000..f62702a0eb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vcftools/package.py
@@ -0,0 +1,75 @@
+##############################################################################
+# 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/spack/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 Vcftools(AutotoolsPackage):
+ """VCFtools is a program package designed for working with VCF files,
+ such as those generated by the 1000 Genomes Project. The aim of
+ VCFtools is to provide easily accessible methods for working
+ with complex genetic variation data in the form of VCF files.
+ """
+
+ homepage = "https://vcftools.github.io/"
+ url = "https://github.com/vcftools/vcftools/releases/download/v0.1.14/vcftools-0.1.14.tar.gz"
+
+ # this is "a pre-release"
+ # version('0.1.15', '61045197848dea20a0158d2faf02e5be')
+ version('0.1.14', 'a110662535651caa6cc8c876216a9f77')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('zlib')
+
+ # this needs to be in sync with what setup_environment adds to
+ # PERL5LIB below
+ def configure_args(self):
+ return ['--with-pmdir={0}'.format(self.prefix.lib)]
+
+ @run_before('install')
+ def filter_sbang(self):
+ """Run before install so that the standard Spack sbang install hook
+ can fix up the path to the perl binary.
+ """
+
+ with working_dir('src/perl'):
+ match = '^#!/usr/bin/env perl'
+ perl = join_path(self.spec['perl'].prefix.bin, 'perl')
+ substitute = "#!{perl}".format(perl=perl)
+ # tab-to-vcf added in 0.1.15
+ files = ['fill-aa', 'fill-an-ac', 'fill-fs',
+ 'fill-ref-md5', 'tab-to-vcf', 'vcf-annotate',
+ 'vcf-compare', 'vcf-concat', 'vcf-consensus',
+ 'vcf-contrast', 'vcf-convert',
+ 'vcf-fix-newlines', 'vcf-fix-ploidy',
+ 'vcf-indel-stats', 'vcf-isec', 'vcf-merge',
+ 'vcf-phased-join', 'vcf-query',
+ 'vcf-shuffle-cols', 'vcf-sort', 'vcf-stats',
+ 'vcf-subset', 'vcf-to-tab', 'vcf-tstv',
+ 'vcf-validator', ]
+ kwargs = {'ignore_absent': True, 'backup': False, 'string': False}
+ filter_file(match, substitute, *files, **kwargs)
+
+ def setup_environment(self, spack_env, run_env):
+ run_env.prepend_path('PERL5LIB', self.prefix.lib)
diff --git a/var/spack/repos/builtin/packages/vcsh/package.py b/var/spack/repos/builtin/packages/vcsh/package.py
new file mode 100644
index 0000000000..76cdaf3b7b
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vcsh/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Vcsh(Package):
+ """config manager based on git"""
+ homepage = "https://github.com/RichiH/vcsh"
+ url = "https://github.com/RichiH/vcsh/archive/v1.20151229.tar.gz"
+
+ version('1.20151229-1', '85c18fb15e5837d417b22980683e69ed')
+ version('1.20151229', '61edf032807bba98c41c62bb2bd3d497')
+ version('1.20150502', 'a6c75b5754e04bd74ae701967bb38e19')
+ version('1.20141026', 'e8f42a9dbb7460f641545bea5ca1cbc4')
+ version('1.20141025', '93c7fad67ab4300d76d753a32c300831')
+
+ depends_on('git', type='run')
+
+ # vcsh provides a makefile, if needed the install method should be adapted
+ def install(self, spec, prefix):
+ install('vcsh', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/vdt/package.py b/var/spack/repos/builtin/packages/vdt/package.py
new file mode 100644
index 0000000000..1ff2d014e3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vdt/package.py
@@ -0,0 +1,38 @@
+##############################################################################
+# 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/spack/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 Vdt(CMakePackage):
+ """Vectorised math. A collection of fast and inline implementations of
+ mathematical functions."""
+
+ homepage = "https://github.com/dpiparo/vdt"
+ url = "https://github.com/dpiparo/vdt/archive/v0.3.9.tar.gz"
+
+ version('0.3.9', '80a2d73a82f7ef8257a8206ca22dd145')
+ version('0.3.8', '25b07c72510aaa95fffc11e33579061c')
+ version('0.3.7', 'd2621d4c489894fd1fe8e056d9a0a67c')
+ version('0.3.6', '6eaff3bbbd5175332ccbd66cd71a741d')
diff --git a/var/spack/repos/builtin/packages/vecgeom/package.py b/var/spack/repos/builtin/packages/vecgeom/package.py
new file mode 100644
index 0000000000..05c1519220
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vecgeom/package.py
@@ -0,0 +1,54 @@
+##############################################################################
+# 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/spack/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 *
+import platform
+
+
+class Vecgeom(CMakePackage):
+ """The vectorized geometry library for particle-detector simulation
+ (toolkits)."""
+
+ homepage = "https://gitlab.cern.ch/VecGeom/VecGeom"
+
+ version('0.3.rc', git='https://gitlab.cern.ch/VecGeom/VecGeom.git',
+ tag='v0.3.rc')
+
+ depends_on('cmake@3.5:', type='build')
+
+ def cmake_args(self):
+ options = [
+ '-DBACKEND=Scalar',
+ '-DGEANT4=OFF',
+ '-DUSOLIDS=ON',
+ '-DUSOLIDS_VECGEOM=ON'
+ ]
+
+ arch = platform.machine()
+ if arch == 'x86_64':
+ options.append('-DVECGEOM_VECTOR=sse4.2')
+ else:
+ options.append('-DVECGEOM_VECTOR=' + arch)
+ return options
diff --git a/var/spack/repos/builtin/packages/veclibfort/package.py b/var/spack/repos/builtin/packages/veclibfort/package.py
index b906d4f9c9..e57384fd2c 100644
--- a/var/spack/repos/builtin/packages/veclibfort/package.py
+++ b/var/spack/repos/builtin/packages/veclibfort/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -45,26 +45,30 @@ class Veclibfort(Package):
provides('lapack')
@property
- def blas_libs(self):
+ def libs(self):
shared = True if '+shared' in self.spec else False
return find_libraries(
- ['libvecLibFort'], root=self.prefix, shared=shared, recurse=True
+ 'libvecLibFort', root=self.prefix, shared=shared, recurse=True
)
- @property
- def lapack_libs(self):
- return self.blas_libs
-
def install(self, spec, prefix):
if sys.platform != 'darwin':
raise InstallError('vecLibFort can be installed on macOS only')
- make('all')
- make('PREFIX=%s' % prefix, 'install')
+ filter_file(r'^PREFIX=.*', '', 'Makefile')
+
+ make_args = []
+
+ if spec.satisfies('%gcc@6:'):
+ make_args += ['CFLAGS=-flax-vector-conversions']
+
+ make_args += ['PREFIX=%s' % prefix, 'install']
+
+ make(*make_args)
# test
fc = which('fc')
flags = ['-o', 'tester', '-O', 'tester.f90']
- flags.extend(self.lapack_libs.ld_flags.split())
+ flags.extend(spec['veclibfort'].libs.ld_flags.split())
fc(*flags)
Executable('./tester')()
diff --git a/var/spack/repos/builtin/packages/vegas2/package.py b/var/spack/repos/builtin/packages/vegas2/package.py
new file mode 100644
index 0000000000..ad452b3384
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vegas2/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# 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/spack/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 Vegas2(Package):
+ """"VEGAS2 is an extension that uses 1,000 Genomes data to model SNP
+ correlations across the autosomes and chromosome X"""
+
+ homepage = "https://vegas2.qimrberghofer.edu.au/"
+ url = "https://vegas2.qimrberghofer.edu.au/vegas2v2"
+
+ version('2', '815d80b86e9e294f99332bb5181e897a', expand=False)
+
+ depends_on('perl', type='run')
+ depends_on('r', type='run')
+ depends_on('plink')
+ depends_on('r-mvtnorm', type='run')
+ depends_on('r-corpcor', type='run')
+
+ def url_for_version(self, version):
+ url = 'https://vegas2.qimrberghofer.edu.au/vegas2v{0}'
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('vegas2v{0}'.format(self.version), prefix.bin)
diff --git a/var/spack/repos/builtin/packages/velvet/package.py b/var/spack/repos/builtin/packages/velvet/package.py
new file mode 100644
index 0000000000..45e10f4ce2
--- /dev/null
+++ b/var/spack/repos/builtin/packages/velvet/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Velvet(MakefilePackage):
+ """Velvet is a de novo genomic assembler specially designed for short read
+ sequencing technologies."""
+
+ homepage = "http://www.ebi.ac.uk/~zerbino/velvet/"
+ url = "http://www.ebi.ac.uk/~zerbino/velvet/velvet_1.2.10.tgz"
+
+ version('1.2.10', '6e28c4b9bedc5f7ab2b947e7266a02f6')
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('velvetg', prefix.bin)
+ install('velveth', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/videoproto/package.py b/var/spack/repos/builtin/packages/videoproto/package.py
index 93b0e61ca4..21a40f98ff 100644
--- a/var/spack/repos/builtin/packages/videoproto/package.py
+++ b/var/spack/repos/builtin/packages/videoproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Videoproto(Package):
+class Videoproto(AutotoolsPackage):
"""X Video Extension.
This extension provides a protocol for a video output mechanism,
@@ -38,8 +38,3 @@ class Videoproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/viennarna/package.py b/var/spack/repos/builtin/packages/viennarna/package.py
new file mode 100644
index 0000000000..c3fad661db
--- /dev/null
+++ b/var/spack/repos/builtin/packages/viennarna/package.py
@@ -0,0 +1,61 @@
+##############################################################################
+# 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/spack/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 Viennarna(AutotoolsPackage):
+ """The ViennaRNA Package consists of a C code library and several
+ stand-alone programs for the prediction and comparison of RNA secondary
+ structures.
+ """
+
+ homepage = "https://www.tbi.univie.ac.at/RNA/"
+ url = "https://www.tbi.univie.ac.at/RNA/download/sourcecode/2_3_x/ViennaRNA-2.3.5.tar.gz"
+
+ version('2.3.5', '4542120adae9b7abb605e2304c2a1326')
+
+ variant('sse', default=True, description='Enable SSE in order to substantially speed up execution')
+ variant('perl', default=True, description='Build ViennaRNA with Perl interface')
+ variant('python', default=True, description='Build ViennaRNA with Python interface')
+
+ depends_on('perl', type=('build', 'run'))
+ depends_on('python', type=('build', 'run'))
+ depends_on('libsvm')
+ depends_on('gsl')
+
+ def url_for_version(self, version):
+ url = 'https://www.tbi.univie.ac.at/RNA/download/sourcecode/{0}_x/ViennaRNA-{1}.tar.gz'
+ return url.format(version.up_to(2).underscored, version)
+
+ def configure_args(self):
+
+ args = self.enable_or_disable('sse')
+ args += self.with_or_without('python')
+ args += self.with_or_without('perl')
+
+ if 'python@3:' in self.spec:
+ args.append('--with-python3')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/viewres/package.py b/var/spack/repos/builtin/packages/viewres/package.py
index 3a32555075..0929dace52 100644
--- a/var/spack/repos/builtin/packages/viewres/package.py
+++ b/var/spack/repos/builtin/packages/viewres/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Viewres(Package):
+class Viewres(AutotoolsPackage):
"""viewres displays a tree showing the widget class hierarchy of the
Athena Widget Set (libXaw)."""
@@ -40,9 +40,3 @@ class Viewres(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/vim/package.py b/var/spack/repos/builtin/packages/vim/package.py
index e2542c3f56..d216cb0aed 100644
--- a/var/spack/repos/builtin/packages/vim/package.py
+++ b/var/spack/repos/builtin/packages/vim/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Vim(Package):
+class Vim(AutotoolsPackage):
"""Vim is a highly configurable text editor built to enable efficient text
editing. It is an improved version of the vi editor distributed with most
UNIX systems. Vim is often called a "programmer's editor," and so useful
@@ -37,6 +37,8 @@ class Vim(Package):
homepage = "http://www.vim.org"
url = "https://github.com/vim/vim/archive/v8.0.0134.tar.gz"
+ version('8.0.0503', '82b77bd5cb38b70514bed47cfe033b8c')
+ version('8.0.0454', '4030bf677bdfbd14efb588e4d9a24128')
version('8.0.0134', 'c74668d25c2acc85d655430dd60886cd')
version('7.4.2367', 'a0a7bc394f7ab1d95571fe6ab05da3ea')
@@ -50,15 +52,24 @@ class Vim(Package):
variant('ruby', default=False, description="build with Ruby")
depends_on('ruby', when='+ruby')
+ variant('lua', default=False, description="build with Lua")
+ depends_on('lua', when='+lua')
+
+ variant('perl', default=False, description="build with Perl")
+ depends_on('perl', when='+perl')
+
variant('cscope', default=False, description="build with cscope support")
depends_on('cscope', when='+cscope', type='run')
+ # TODO: Once better support for multi-valued variants is added, add
+ # support for auto/no/gtk2/gnome2/gtk3/motif/athena/neXtaw/photon/carbon
variant('gui', default=False, description="build with gui (gvim)")
- # virtual dependency?
+ variant('x', default=False, description="use the X Window System")
depends_on('ncurses', when="@7.4:")
- def install(self, spec, prefix):
+ def configure_args(self):
+ spec = self.spec
feature_set = None
for fs in self.feature_sets:
if "+" + fs in spec:
@@ -77,26 +88,50 @@ class Vim(Package):
if feature_set is None:
feature_set = 'normal'
- configure_args = []
+ configure_args = ["--enable-fail-if-missing"]
+
+ configure_args.append("--with-tlib=ncursesw")
+
configure_args.append("--with-features=" + feature_set)
if '+python' in spec:
configure_args.append("--enable-pythoninterp=yes")
else:
- configure_args.append("--enable-pythoninterp=dynamic")
+ configure_args.append("--enable-pythoninterp=no")
if '+ruby' in spec:
configure_args.append("--enable-rubyinterp=yes")
else:
- configure_args.append("--enable-rubyinterp=dynamic")
+ configure_args.append("--enable-rubyinterp=no")
+
+ if '+lua' in spec:
+ configure_args.append("--enable-luainterp=yes")
+ configure_args.append("--with-lua-prefix=%s" % spec['lua'].prefix)
+ else:
+ configure_args.append("--enable-luainterp=no")
+
+ if '+perl' in spec:
+ configure_args.append("--enable-perlinterp=yes")
+ else:
+ configure_args.append("--enable-perlinterp=no")
if '+gui' in spec:
configure_args.append("--enable-gui=auto")
+ else:
+ configure_args.append("--enable-gui=no")
+
+ if '+x' in spec:
+ configure_args.append("--with-x")
+ else:
+ configure_args.append("--without-x")
if '+cscope' in spec:
configure_args.append("--enable-cscope")
- configure("--prefix=%s" % prefix, *configure_args)
+ return configure_args
- make()
- make("install")
+ # Run the install phase with -j 1. There seems to be a problem with
+ # parallel builds that results in the creation of the links (e.g. view)
+ # to the vim binary silently failing.
+ def install(self, spec, prefix):
+ make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/virtualgl/package.py b/var/spack/repos/builtin/packages/virtualgl/package.py
new file mode 100644
index 0000000000..c80eea5345
--- /dev/null
+++ b/var/spack/repos/builtin/packages/virtualgl/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# 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/spack/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 Virtualgl(CMakePackage):
+ """VirtualGL redirects 3D commands from a Unix/Linux OpenGL application
+ onto a server-side GPU and converts the rendered 3D images into a video
+ stream with which remote clients can interact to view and control the
+ 3D application in real time."""
+
+ homepage = "http://www.virtualgl.org/Main/HomePage"
+ url = "http://downloads.sourceforge.net/project/virtualgl/2.5.2/VirtualGL-2.5.2.tar.gz"
+
+ version('2.5.2', '1a9f404f4a35afa9f56381cb33ed210c')
+
+ depends_on("libjpeg-turbo")
+ # virtualgl require OpenGL but also wants to link libglu
+ # on systems without development packages, provide with spack and depends
+ # on mesa-glu, but we do not want Mesa OpenGL sw emulation, so added
+ # variant on mesa-glu to disable dependencies on sw emulated OpenGL
+ depends_on("mesa-glu~mesa")
diff --git a/var/spack/repos/builtin/packages/visit/package.py b/var/spack/repos/builtin/packages/visit/package.py
index 48a3762a2a..56dec99eec 100644
--- a/var/spack/repos/builtin/packages/visit/package.py
+++ b/var/spack/repos/builtin/packages/visit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,39 +25,37 @@
from spack import *
-class Visit(Package):
+class Visit(CMakePackage):
"""VisIt is an Open Source, interactive, scalable, visualization,
animation and analysis tool."""
homepage = "https://wci.llnl.gov/simulation/computer-codes/visit/"
url = "http://portal.nersc.gov/project/visit/releases/2.10.1/visit2.10.1.tar.gz"
+ version('2.12.2', '355779b1dbf440cdd548526eecd77b60')
version('2.10.3', 'a1082a6f6dab3e2dcb58993603456c2b')
version('2.10.2', '253de0837a9d69fb689befc98ea4d068')
version('2.10.1', '3cbca162fdb0249f17c4456605c4211e')
- depends_on('cmake', type='build')
+ depends_on('cmake@3.0:', type='build')
depends_on('vtk@6.1.0~opengl2')
depends_on('qt@4.8.6')
depends_on('python')
depends_on('silo+shared')
depends_on('hdf5~mpi')
- def install(self, spec, prefix):
- qt_bin = spec['qt'].prefix.bin
+ root_cmakelists_dir = 'src'
- with working_dir('spack-build', create=True):
- cmake_args = std_cmake_args[:]
- cmake_args.extend([
- '-DVTK_MAJOR_VERSION=6',
- '-DVTK_MINOR_VERSION=1',
- '-DVISIT_USE_GLEW=OFF',
- '-DVISIT_LOC_QMAKE_EXE:FILEPATH={0}/qmake-qt4'.format(qt_bin),
- '-DPYTHON_DIR:PATH={0}'.format(spec['python'].prefix),
- '-DVISIT_SILO_DIR:PATH={0}'.format(spec['silo'].prefix),
- '-DVISIT_HDF5_DIR:PATH={0}'.format(spec['hdf5'].prefix),
- '-DVISIT_VTK_DIR:PATH={0}'.format(spec['vtk'].prefix),
- ])
+ def cmake_args(self):
+ spec = self.spec
+ qt_bin = spec['qt'].prefix.bin
- cmake(join_path('..', 'src'), *cmake_args)
- make()
- make('install')
+ return [
+ '-DVTK_MAJOR_VERSION={0}'.format(spec['vtk'].version[0]),
+ '-DVTK_MINOR_VERSION={0}'.format(spec['vtk'].version[1]),
+ '-DVISIT_USE_GLEW=OFF',
+ '-DVISIT_LOC_QMAKE_EXE:FILEPATH={0}/qmake-qt4'.format(qt_bin),
+ '-DPYTHON_DIR:PATH={0}'.format(spec['python'].home),
+ '-DVISIT_SILO_DIR:PATH={0}'.format(spec['silo'].prefix),
+ '-DVISIT_HDF5_DIR:PATH={0}'.format(spec['hdf5'].prefix),
+ '-DVISIT_VTK_DIR:PATH={0}'.format(spec['vtk'].prefix),
+ ]
diff --git a/var/spack/repos/builtin/packages/vizglow/package.py b/var/spack/repos/builtin/packages/vizglow/package.py
index 9e4506b05a..b35af35164 100644
--- a/var/spack/repos/builtin/packages/vizglow/package.py
+++ b/var/spack/repos/builtin/packages/vizglow/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -39,20 +39,73 @@ class Vizglow(Package):
homepage = "http://esgeetech.com/products/vizglow-plasma-modeling/"
- version('2.2a-15', 'be2b5044f30f2b2c3bbe87a0037bf228', expand=False,
+ version('2.2alpha20', '2bef890c66f3a44aaf96f7c96788c89e', expand=False,
+ url="file://{0}/VizGlow_v2.2alpha20-Linux-x86_64-R09December2016-Install".format(os.getcwd()))
+ version('2.2alpha17', '1de268564363e0ee86f9ffff1c3b82e1', expand=False,
+ url="file://{0}/VizGlow_v2.2alpha17-R21November2016-Linux-x86_64-Install".format(os.getcwd()))
+ version('2.2alpha15', 'be2b5044f30f2b2c3bbe87a0037bf228', expand=False,
url="file://{0}/VizGlow_v2.2alpha15-Linux-x86_64-R31October2016-Install".format(os.getcwd()))
+ # depends_on('mesa') # TODO: mesa build doesn't work for me
+ depends_on('zlib')
+ depends_on('freetype')
+ depends_on('fontconfig')
+ depends_on('libxrender')
+ depends_on('xterm')
+ # Can't get mozjs to build, packagekit -> polkit -> mozjs
+ # depends_on('packagekit+gtk')
+ depends_on('libcanberra+gtk')
+
# Licensing
license_required = True
license_comment = '#'
license_files = ['esgeelm.lic']
license_vars = ['ESGEE_LICENSE_FILE']
+ def configure(self, prefix):
+ # Dictionary of responses
+ responses = {
+ 'CreateDesktopShortcut': 'No',
+ 'CreateQuickLaunchShortcut': 'No',
+ 'InstallDir': prefix
+ }
+
+ # Write response file
+ with open('spack-responses.txt', 'w') as response_file:
+ for key in responses:
+ response_file.write('{0}: {1}\n'.format(key, responses[key]))
+
def install(self, spec, prefix):
+ self.configure(prefix)
+
installer = glob.glob('VizGlow*Install')[0]
chmod = which('chmod')
chmod('+x', installer)
installer = Executable(installer)
- installer('--mode', 'silent', '--prefix', prefix)
+ installer('--mode', 'silent', '--response-file', 'spack-responses.txt')
+
+ self.filter_ld_library_path(spec, prefix)
+
+ def filter_ld_library_path(self, spec, prefix):
+ """Run after install to inject dependencies into LD_LIBRARY_PATH.
+
+ If we don't do this, the run files will clear the LD_LIBRARY_PATH.
+ Since the installer is a binary file, we have no means of specifying
+ an RPATH to use."""
+
+ files = glob.glob(prefix + '/binaries/*.run')
+
+ ld_library_path = ':'.join([
+ spec['zlib'].prefix.lib,
+ spec['freetype'].prefix.lib,
+ spec['fontconfig'].prefix.lib,
+ spec['libxrender'].prefix.lib,
+ spec['libcanberra'].prefix.lib
+ ])
+
+ for runfile in files:
+ filter_file('(export LD_LIBRARY_PATH=)$',
+ r'\1{0}'.format(ld_library_path),
+ runfile)
diff --git a/var/spack/repos/builtin/packages/vmatch/package.py b/var/spack/repos/builtin/packages/vmatch/package.py
new file mode 100644
index 0000000000..e58f9fbb22
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vmatch/package.py
@@ -0,0 +1,42 @@
+##############################################################################
+# 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/spack/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 Vmatch(Package):
+ """Vmatch is a versatile software tool for efficiently solving large scale
+ sequence matching tasks"""
+
+ homepage = "http://www.vmatch.de/"
+ url = "http://www.vmatch.de/distributions/vmatch-2.3.0-Linux_x86_64-64bit.tar.gz"
+
+ version('2.3.0', '592a4f941239494d892f3c6ff21a1423')
+
+ def url_for_version(self, version):
+ url = 'http://www.vmatch.de/distributions/vmatch-{0}-Linux_x86_64-64bit.tar.gz'
+ return url.format(version)
+
+ def install(self, spec, prefix):
+ install_tree(self.stage.source_path, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/voropp/package.py b/var/spack/repos/builtin/packages/voropp/package.py
new file mode 100644
index 0000000000..e88c20d864
--- /dev/null
+++ b/var/spack/repos/builtin/packages/voropp/package.py
@@ -0,0 +1,44 @@
+##############################################################################
+# 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/spack/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 Voropp(MakefilePackage):
+ """Voro++ is a open source software library for the computation of the
+ Voronoi diagram, a widely-used tessellation that has applications in many
+ scientific fields."""
+
+ homepage = "http://math.lbl.gov/voro++/about.html"
+ url = "http://math.lbl.gov/voro++/download/dir/voro++-0.4.6.tar.gz"
+
+ version('0.4.6', '2338b824c3b7b25590e18e8df5d68af9')
+
+ def edit(self, spec, prefix):
+ filter_file(r'CC=g\+\+',
+ 'CC={0}'.format(self.compiler.cxx),
+ 'config.mk')
+ filter_file(r'PREFIX=/usr/local',
+ 'PREFIX={0}'.format(self.prefix),
+ 'config.mk')
diff --git a/var/spack/repos/builtin/packages/votca-csg/package.py b/var/spack/repos/builtin/packages/votca-csg/package.py
new file mode 100644
index 0000000000..5c827ad36d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/votca-csg/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# Copyright (c) 2017, The VOTCA Development Team (http://www.votca.org)
+#
+# 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/spack/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 VotcaCsg(CMakePackage):
+ """Versatile Object-oriented Toolkit for Coarse-graining
+ Applications (VOTCA) is a package intended to reduce the amount of
+ routine work when doing systematic coarse-graining of various
+ systems. The core is written in C++.
+
+ This package contains the VOTCA coarse-graining engine.
+ """
+ homepage = "http://www.votca.org"
+ url = "https://github.com/votca/csg/tarball/v1.4"
+
+ version('develop', git='https://github.com/votca/csg', branch='master')
+ version('1.4', 'd009e761e5e3afd51eed89c420610a67')
+ version('1.4.1', 'e4195d69db2036e9d76f22115ae31f81')
+
+ depends_on("cmake@2.8:", type='build')
+ depends_on("votca-tools@1.4:1.4.999", when='@1.4:1.4.999')
+ depends_on("votca-tools@develop", when='@develop')
+ depends_on("gromacs~mpi@5.1:")
diff --git a/var/spack/repos/builtin/packages/votca-ctp/package.py b/var/spack/repos/builtin/packages/votca-ctp/package.py
new file mode 100644
index 0000000000..f02c7eb564
--- /dev/null
+++ b/var/spack/repos/builtin/packages/votca-ctp/package.py
@@ -0,0 +1,45 @@
+##############################################################################
+# Copyright (c) 2017, The VOTCA Development Team (http://www.votca.org)
+#
+# 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/spack/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 VotcaCtp(CMakePackage):
+ """Versatile Object-oriented Toolkit for Coarse-graining
+ Applications (VOTCA) is a package intended to reduce the amount of
+ routine work when doing systematic coarse-graining of various
+ systems. The core is written in C++.
+
+ This package contains the VOTCA charge transport engine.
+ """
+ homepage = "http://www.votca.org"
+ # No release yet
+ # url = "https://github.com/votca/ctp/tarball/v1.4"
+
+ version('develop', git='https://github.com/votca/ctp', branch='master')
+
+ depends_on("cmake@2.8:", type='build')
+ depends_on("votca-tools@develop", when='@develop')
+ depends_on("votca-csg@develop", when='@develop')
+ depends_on("votca-moo@develop", when='@develop')
diff --git a/var/spack/repos/builtin/packages/votca-moo/package.py b/var/spack/repos/builtin/packages/votca-moo/package.py
new file mode 100644
index 0000000000..308d28aab1
--- /dev/null
+++ b/var/spack/repos/builtin/packages/votca-moo/package.py
@@ -0,0 +1,43 @@
+#############################################################################
+# Copyright (c) 2017, The VOTCA Development Team (http://www.votca.org)
+#
+# 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/spack/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 VotcaMoo(CMakePackage):
+ """Versatile Object-oriented Toolkit for Coarse-graining
+ Applications (VOTCA) is a package intended to reduce the amount of
+ routine work when doing systematic coarse-graining of various
+ systems. The core is written in C++.
+
+ This package contains the VOTCA molecular orbital module.
+ """
+ homepage = "http://www.votca.org"
+ # No release yet
+ # url = "https://github.com/votca/moo/tarball/v1.4"
+
+ version('develop', git='https://github.com/votca/moo', branch='master')
+
+ depends_on("cmake@2.8:", type='build')
+ depends_on("votca-tools@develop", when='@develop')
diff --git a/var/spack/repos/builtin/packages/votca-tools/package.py b/var/spack/repos/builtin/packages/votca-tools/package.py
new file mode 100644
index 0000000000..9eb7fd147a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/votca-tools/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# Copyright (c) 2017, The VOTCA Development Team (http://www.votca.org)
+#
+# 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/spack/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 VotcaTools(CMakePackage):
+ """Versatile Object-oriented Toolkit for Coarse-graining
+ Applications (VOTCA) is a package intended to reduce the amount of
+ routine work when doing systematic coarse-graining of various
+ systems. The core is written in C++.
+
+ This package contains the basic tools library of VOTCA.
+ """
+ homepage = "http://www.votca.org"
+ url = "https://github.com/votca/tools/tarball/v1.4"
+
+ version('develop', git='https://github.com/votca/tools', branch='master')
+ version('1.4', 'cd47868e9f28e2c7b9d01f95aa0185ca')
+ version('1.4.1', '3176b72f8a41ec053cc740a5398e7dc4')
+
+ depends_on("cmake@2.8:", type='build')
+ depends_on("expat")
+ depends_on("fftw")
+ depends_on("gsl")
+ depends_on("boost")
+ depends_on("sqlite")
diff --git a/var/spack/repos/builtin/packages/votca-xtp/package.py b/var/spack/repos/builtin/packages/votca-xtp/package.py
new file mode 100644
index 0000000000..e2b8ee059e
--- /dev/null
+++ b/var/spack/repos/builtin/packages/votca-xtp/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# Copyright (c) 2017, The VOTCA Development Team (http://www.votca.org)
+#
+# 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/spack/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 *
+
+
+class VotcaXtp(CMakePackage):
+ """Versatile Object-oriented Toolkit for Coarse-graining
+ Applications (VOTCA) is a package intended to reduce the amount of
+ routine work when doing systematic coarse-graining of various
+ systems. The core is written in C++.
+
+ This package contains the VOTCA exciton transport engine.
+ """
+ homepage = "http://www.votca.org"
+ url = "https://github.com/votca/xtp/tarball/v1.4"
+
+ version('develop', git='https://github.com/votca/xtp', branch='master')
+ version('1.4.1', '31a2dbd8bd48bf337bc88b20ab312050')
+
+ depends_on("cmake@2.8:", type='build')
+ depends_on("votca-tools@develop", when='@develop')
+ depends_on("votca-tools@1.4:1.4.999", when='@1.4:1.4.999')
+ depends_on("votca-csg@develop", when='@develop')
+ depends_on("votca-csg@1.4:1.4.999", when='@1.4:1.4.999')
+ depends_on("votca-ctp@develop", when='@develop')
+ depends_on("votca-moo@develop", when='@develop')
diff --git a/var/spack/repos/builtin/packages/vpfft/package.py b/var/spack/repos/builtin/packages/vpfft/package.py
new file mode 100644
index 0000000000..1de6bdcfe4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vpfft/package.py
@@ -0,0 +1,67 @@
+##############################################################################
+# 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/spack/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 Vpfft(MakefilePackage):
+ """Proxy Application. VPFFT is an implementation of a mesoscale
+ micromechanical materials model. By solving the viscoplasticity
+ model, VPFFT simulates the evolution of a material under deformation.
+ The solution time to the viscoplasticity model, described by a set
+ of partial differential equations, is significantly reduced by the
+ application of Fast Fourier Transform in the VPFFT algorithm.
+ """
+
+ homepage = "http://www.exmatex.org/vpfft.html"
+ url = "https://github.com/exmatex/VPFFT/archive/master.tar.gz"
+ tag = ['proxy-app']
+
+ version('develop', git='https://github.com/exmatex/VPFFT.git')
+
+ depends_on('eigen')
+ depends_on('fftw')
+ depends_on('mpi')
+
+ @property
+ def build_targets(self):
+ targets = [
+ "--file=Makefile.make",
+ "EIGEN_PATH={0}".format(
+ join_path(
+ self.spec['eigen'].prefix.include,
+ 'eigen{0}'.format(
+ self.spec['eigen'].version.up_to(1)))),
+ "FFTW_PATH={0}".format(self.spec['fftw'].prefix),
+ "CC={0}".format(self.spec['mpi'].mpicxx)
+ ]
+ return targets
+
+ def install(self, spec, prefix):
+ mkdirp(prefix.bin)
+ install('VPFFT++', prefix.bin)
+ install('README.md', prefix)
+ install('README.make', prefix)
+ install('README-license.txt', prefix)
+ install_tree('docs', prefix.docs)
diff --git a/var/spack/repos/builtin/packages/vpic/package.py b/var/spack/repos/builtin/packages/vpic/package.py
new file mode 100644
index 0000000000..b5be3c6b82
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vpic/package.py
@@ -0,0 +1,49 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Vpic(CMakePackage):
+ """VPIC is a general purpose particle-in-cell simulation code for modeling
+ kinetic plasmas in one, two, or three spatial dimensions. It employs a
+ second-order, explicit, leapfrog algorithm to update charged particle
+ positions and velocities in order to solve the relativistic kinetic
+ equation for each species in the plasma, along with a full Maxwell
+ description for the electric and magnetic fields evolved via a second-
+ order finite-difference-time-domain (FDTD) solve.
+ """
+ homepage = "https://github.com/lanl/vpic"
+ url = "https://github.com/lanl/vpic/tarball/v1.0"
+
+ version('develop', git='https://github.com/lanl/vpic', branch='master', submodules=True)
+
+ depends_on("cmake@3.1:", type='build')
+ depends_on('mpi')
+
+ def cmake_args(self):
+ options = ['-DENABLE_INTEGRATED_TESTS=ON', '-DENABLE_UNIT_TESTS=ON']
+
+ return options
diff --git a/var/spack/repos/builtin/packages/vsearch/package.py b/var/spack/repos/builtin/packages/vsearch/package.py
new file mode 100644
index 0000000000..8a69123d17
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vsearch/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 Vsearch(AutotoolsPackage):
+ """VSEARCH is a versatile open-source tool for metagenomics."""
+
+ homepage = "https://github.com/torognes/vsearch"
+ url = "https://github.com/torognes/vsearch/archive/v2.4.3.tar.gz"
+
+ version('2.4.3', '8f57210fe447a781078fde06e6402650')
+
+ depends_on('m4', type='build')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
diff --git a/var/spack/repos/builtin/packages/vtk/package.py b/var/spack/repos/builtin/packages/vtk/package.py
index c2d5ff399f..0ab9a1a131 100644
--- a/var/spack/repos/builtin/packages/vtk/package.py
+++ b/var/spack/repos/builtin/packages/vtk/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,14 +26,16 @@
from spack import *
-class Vtk(Package):
+class Vtk(CMakePackage):
"""The Visualization Toolkit (VTK) is an open-source, freely
available software system for 3D computer graphics, image
processing and visualization. """
homepage = "http://www.vtk.org"
- base_url = "http://www.vtk.org/files/release"
+ url = "http://www.vtk.org/files/release/7.1/VTK-7.1.0.tar.gz"
+ list_url = "http://www.vtk.org/download/"
+ version('7.1.0', 'a7e814c1db503d896af72458c2d0228f')
version('7.0.0', '5fe35312db5fb2341139b8e4955c367d')
version('6.3.0', '0231ca4840408e9dd60af48b314c5b6d')
version('6.1.0', '25e4dfb3bad778722dcaec80cd5dab7d')
@@ -42,58 +44,62 @@ class Vtk(Package):
variant('opengl2', default=True, description='Build with OpenGL2 instead of OpenGL as rendering backend')
variant('python', default=False, description='Build the python modules')
- patch('gcc.patch')
+ patch('gcc.patch', when='@6.1.0')
- depends_on('cmake', type='build')
depends_on('qt')
+ depends_on('hdf5')
+ depends_on('netcdf')
+ depends_on('netcdf-cxx')
extends('python', when='+python')
- depends_on('python', when='+python')
- def url_for_version(self, ver):
- return '{0}/{1}/VTK-{2}.tar.gz'.format(Vtk.base_url, ver.up_to(2), ver)
-
- def install(self, spec, prefix):
- def feature_to_bool(feature, on='ON', off='OFF'):
- return on if '+{0}'.format(feature) in spec else off
-
- with working_dir('spack-build', create=True):
- opengl_ver = 'OpenGL{0}'.format('2' if '+opengl2' in spec else '')
- qt_ver = spec['qt'].version.up_to(1)
- qt_bin = spec['qt'].prefix.bin
-
- cmake_args = std_cmake_args[:]
+ def url_for_version(self, version):
+ url = "http://www.vtk.org/files/release/{0}/VTK-{1}.tar.gz"
+ return url.format(version.up_to(2), version)
+
+ def cmake_args(self):
+ spec = self.spec
+
+ opengl_ver = 'OpenGL{0}'.format('2' if '+opengl2' in spec else '')
+ qt_ver = spec['qt'].version.up_to(1)
+ qt_bin = spec['qt'].prefix.bin
+
+ cmake_args = std_cmake_args[:]
+ cmake_args.extend([
+ '-DBUILD_SHARED_LIBS=ON',
+ '-DVTK_RENDERING_BACKEND:STRING={0}'.format(opengl_ver),
+ '-DVTK_USE_SYSTEM_HDF5=ON',
+ '-DVTK_USE_SYSTEM_NETCDF=ON',
+ '-DNETCDF_DIR={0}'.format(spec['netcdf'].prefix),
+ '-DNETCDF_C_ROOT={0}'.format(spec['netcdf'].prefix),
+ '-DNETCDF_CXX_ROOT={0}'.format(spec['netcdf-cxx'].prefix),
+
+ # Enable/Disable wrappers for Python.
+ '-DVTK_WRAP_PYTHON={0}'.format(
+ 'ON' if '+python' in spec else 'OFF'),
+
+ # Disable wrappers for other languages.
+ '-DVTK_WRAP_JAVA=OFF',
+ '-DVTK_WRAP_TCL=OFF',
+
+ # Enable Qt support here.
+ '-DVTK_QT_VERSION:STRING={0}'.format(qt_ver),
+ '-DQT_QMAKE_EXECUTABLE:PATH={0}/qmake'.format(qt_bin),
+ '-DVTK_Group_Qt:BOOL=ON',
+ ])
+
+ # NOTE: The following definitions are required in order to allow
+ # VTK to build with qt~webkit versions (see the documentation for
+ # more info: http://www.vtk.org/Wiki/VTK/Tutorials/QtSetup).
+ if '~webkit' in spec['qt']:
cmake_args.extend([
- '-DBUILD_SHARED_LIBS=ON',
- '-DVTK_RENDERING_BACKEND:STRING={0}'.format(opengl_ver),
-
- # Enable/Disable wrappers for Python.
- '-DVTK_WRAP_PYTHON={0}'.format(feature_to_bool('python')),
-
- # Disable wrappers for other languages.
- '-DVTK_WRAP_JAVA=OFF',
- '-DVTK_WRAP_TCL=OFF',
-
- # Enable Qt support here.
- '-DVTK_QT_VERSION:STRING={0}'.format(qt_ver),
- '-DQT_QMAKE_EXECUTABLE:PATH={0}/qmake'.format(qt_bin),
- '-DVTK_Group_Qt:BOOL=ON',
+ '-DVTK_Group_Qt:BOOL=OFF',
+ '-DModule_vtkGUISupportQt:BOOL=ON',
+ '-DModule_vtkGUISupportQtOpenGL:BOOL=ON',
])
- # NOTE: The following definitions are required in order to allow
- # VTK to build with qt~webkit versions (see the documentation for
- # more info: http://www.vtk.org/Wiki/VTK/Tutorials/QtSetup).
- if '~webkit' in spec['qt']:
- cmake_args.extend([
- '-DVTK_Group_Qt:BOOL=OFF',
- '-DModule_vtkGUISupportQt:BOOL=ON',
- '-DModule_vtkGUISupportQtOpenGL:BOOL=ON',
- ])
-
- if spec.satisfies('@:6.1.0'):
- cmake_args.append('-DCMAKE_C_FLAGS=-DGLX_GLXEXT_LEGACY')
- cmake_args.append('-DCMAKE_CXX_FLAGS=-DGLX_GLXEXT_LEGACY')
-
- cmake('..', *cmake_args)
- make()
- make('install')
+ if spec.satisfies('@:6.1.0'):
+ cmake_args.append('-DCMAKE_C_FLAGS=-DGLX_GLXEXT_LEGACY')
+ cmake_args.append('-DCMAKE_CXX_FLAGS=-DGLX_GLXEXT_LEGACY')
+
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/vtkh/package.py b/var/spack/repos/builtin/packages/vtkh/package.py
new file mode 100644
index 0000000000..9073c1f6f3
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vtkh/package.py
@@ -0,0 +1,97 @@
+##############################################################################
+# 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/spack/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 Vtkh(Package):
+ """VTK-h is a toolkit of scientific visualization algorithms for emerging
+ processor architectures. VTK-h brings together several projects like VTK-m
+ and DIY2 to provide a toolkit with hybrid parallel capabilities."""
+
+ homepage = "https://github.com/Alpine-DAV/vtk-h"
+ url = "https://github.com/Alpine-DAV/vtk-h"
+
+ version('master',
+ git='https://github.com/Alpine-DAV/vtk-h.git',
+ branch='master',
+ submodules=True)
+
+ maintainers = ['cyrush']
+
+ variant("mpi", default=True, description="build mpi support")
+ variant("tbb", default=True, description="build tbb support")
+ variant("cuda", default=False, description="build cuda support")
+
+ depends_on("cmake")
+
+ depends_on("mpi", when="+mpi")
+ depends_on("tbb", when="+tbb")
+ depends_on("cuda", when="+cuda")
+
+ depends_on("vtkm@master")
+ depends_on("vtkm@master+tbb", when="+tbb")
+ depends_on("vtkm@master+cuda", when="+cuda")
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake_args = ["../src",
+ "-DVTKM_DIR={0}".format(spec["vtkm"].prefix),
+ "-DENABLE_TESTS=OFF",
+ "-DBUILD_TESTING=OFF"]
+ # mpi support
+ if "+mpi" in spec:
+ mpicc = spec['mpi'].mpicc
+ mpicxx = spec['mpi'].mpicxx
+ cmake_args.extend(["-DMPI_C_COMPILER={0}".format(mpicc),
+ "-DMPI_CXX_COMPILER={0}".format(mpicxx)])
+
+ # tbb support
+ if "+tbb" in spec:
+ cmake_args.append("-DTBB_DIR={0}".format(spec["tbb"].prefix))
+
+ # cuda support
+ if "+cuda" in spec:
+ cmake_args.append("-DENABLE_CUDA=ON")
+ # this fix is necessary if compiling platform has cuda, but
+ # no devices (this common for front end nodes on hpc clusters)
+ # we choose kepler as a lowest common denominator
+ cmake_args.append("-DVTKm_CUDA_Architecture=kepler")
+
+ # use release, instead of release with debug symbols b/c vtkh libs
+ # can overwhelm compilers with too many symbols
+ for arg in std_cmake_args:
+ if arg.count("CMAKE_BUILD_TYPE") == 0:
+ cmake_args.extend(std_cmake_args)
+ cmake_args.append("-DCMAKE_BUILD_TYPE=Release")
+ cmake(*cmake_args)
+ if "+cuda" in spec:
+ # avoid issues with make -j and FindCuda deps
+ # likely a ordering issue that needs to be resolved
+ # in vtk-h
+ make(parallel=False)
+ else:
+ make()
+ make("install")
diff --git a/var/spack/repos/builtin/packages/vtkm/package.py b/var/spack/repos/builtin/packages/vtkm/package.py
new file mode 100644
index 0000000000..c1bc968f85
--- /dev/null
+++ b/var/spack/repos/builtin/packages/vtkm/package.py
@@ -0,0 +1,83 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class Vtkm(Package):
+ """VTK-m is a toolkit of scientific visualization algorithms for emerging
+ processor architectures. VTK-m supports the fine-grained concurrency for
+ data analysis and visualization algorithms required to drive extreme scale
+ computing by providing abstract models for data and execution that can be
+ applied to a variety of algorithms across many different processor
+ architectures."""
+
+ homepage = "https://m.vtk.org/"
+ url = "https://gitlab.kitware.com/vtk/vtk-m/repository/v1.1.0/archive.tar.gz"
+
+ version('1.1.0', "6aab1c0885f6ffaaffcf07930873d0df")
+
+ version('master',
+ git='https://gitlab.kitware.com/vtk/vtk-m.git',
+ branch='master')
+
+ variant("cuda", default=False, description="build cuda support")
+ variant("tbb", default=True, description="build TBB support")
+
+ depends_on("cmake")
+ depends_on("tbb", when="+tbb")
+ depends_on("cuda", when="+cuda")
+
+ def install(self, spec, prefix):
+ with working_dir('spack-build', create=True):
+ cmake_args = ["../",
+ "-DVTKm_ENABLE_TESTING=OFF",
+ "-DVTKm_BUILD_RENDERING=ON",
+ "-DVTKm_USE_64BIT_IDS=OFF",
+ "-DVTKm_USE_DOUBLE_PRECISION=ON"]
+ # tbb support
+ if "+tbb" in spec:
+ # vtk-m detectes tbb via TBB_ROOT env var
+ os.environ["TBB_ROOT"] = spec["tbb"].prefix
+ cmake_args.append("-DVTKm_ENABLE_TBB=ON")
+
+ # cuda support
+ if "+cuda" in spec:
+ cmake_args.append("-DVTKm_ENABLE_CUDA=ON")
+ # this fix is necessary if compiling platform has cuda, but
+ # no devices (this common for front end nodes on hpc clusters)
+ # we choose kepler as a lowest common denominator
+ cmake_args.append("-DVTKm_CUDA_Architecture=kepler")
+
+ # use release, instead of release with debug symbols b/c vtkm libs
+ # can overwhelm compilers with too many symbols
+ for arg in std_cmake_args:
+ if arg.count("CMAKE_BUILD_TYPE") == 0:
+ cmake_args.extend(std_cmake_args)
+ cmake_args.append("-DCMAKE_BUILD_TYPE=Release")
+ cmake(*cmake_args)
+ make()
+ make("install")
diff --git a/var/spack/repos/builtin/packages/wannier90/package.py b/var/spack/repos/builtin/packages/wannier90/package.py
index 119d2cf769..c940d6c171 100644
--- a/var/spack/repos/builtin/packages/wannier90/package.py
+++ b/var/spack/repos/builtin/packages/wannier90/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -29,7 +29,7 @@ import shutil
from spack import *
-class Wannier90(Package):
+class Wannier90(MakefilePackage):
"""Wannier90 calculates maximally-localised Wannier functions (MLWFs).
Wannier90 is released under the GNU General Public License.
@@ -37,6 +37,7 @@ class Wannier90(Package):
homepage = 'http://wannier.org'
url = 'http://wannier.org/code/wannier90-2.0.1.tar.gz'
+ version('2.1.0', '07a81c002b41d6d0f97857e55c57d769')
version('2.0.1', '4edd742506eaba93317249d33261fb22')
depends_on('mpi')
@@ -45,66 +46,71 @@ class Wannier90(Package):
parallel = False
- def install(self, spec, prefix):
+ build_targets = [
+ 'wannier', 'post', 'lib', 'w90chk2chk', 'w90vdw', 'w90pov'
+ ]
+
+ @property
+ def makefile_name(self):
+ # Older versions use 'make.sys'
+ filename = 'make.sys'
+
+ # While newer search for 'make.inc'
+ if self.spec.satisfies('@2.1.0:'):
+ filename = 'make.inc'
+
+ abspath = join_path(self.stage.source_path, filename)
+ return abspath
- lapack = self.spec['lapack'].lapack_libs
- blas = self.spec['blas'].blas_libs
+ def edit(self, spec, prefix):
+
+ lapack = self.spec['lapack'].libs
+ blas = self.spec['blas'].libs
substitutions = {
'@F90': spack_fc,
'@MPIF90': self.spec['mpi'].mpifc,
'@LIBS': (lapack + blas).joined()
}
- #######
- # TODO : this part is replicated in PEXSI
- # TODO : and may be a common pattern for Editable Makefiles
- # TODO : see #1186
+
template = join_path(
os.path.dirname(inspect.getmodule(self).__file__),
'make.sys'
)
- makefile = join_path(
- self.stage.source_path,
- 'make.sys'
- )
- shutil.copy(template, makefile)
+ shutil.copy(template, self.makefile_name)
for key, value in substitutions.items():
- filter_file(key, value, makefile)
- ######
+ filter_file(key, value, self.makefile_name)
+
+ def install(self, spec, prefix):
- make('wannier')
mkdirp(self.prefix.bin)
+ mkdirp(self.prefix.lib)
+
install(
join_path(self.stage.source_path, 'wannier90.x'),
join_path(self.prefix.bin, 'wannier90.x')
)
- make('post')
install(
join_path(self.stage.source_path, 'postw90.x'),
join_path(self.prefix.bin, 'postw90.x')
)
- make('lib')
- mkdirp(self.prefix.lib)
install(
join_path(self.stage.source_path, 'libwannier.a'),
join_path(self.prefix.lib, 'libwannier.a')
)
- make('w90chk2chk')
install(
join_path(self.stage.source_path, 'w90chk2chk.x'),
join_path(self.prefix.bin, 'w90chk2chk.x')
)
- make('w90vdw')
install(
join_path(self.stage.source_path, 'utility', 'w90vdw', 'w90vdw.x'),
join_path(self.prefix.bin, 'w90vdw.x')
)
- make('w90pov')
install(
join_path(self.stage.source_path, 'utility', 'w90pov', 'w90pov'),
join_path(self.prefix.bin, 'w90pov')
diff --git a/var/spack/repos/builtin/packages/wget/package.py b/var/spack/repos/builtin/packages/wget/package.py
index aff771b723..03e0c86cf3 100644
--- a/var/spack/repos/builtin/packages/wget/package.py
+++ b/var/spack/repos/builtin/packages/wget/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,27 +25,73 @@
from spack import *
-class Wget(Package):
+class Wget(AutotoolsPackage):
"""GNU Wget is a free software package for retrieving files using
- HTTP, HTTPS and FTP, the most widely-used Internet protocols. It
- is a non-interactive commandline tool, so it may easily be called
- from scripts, cron jobs, terminals without X-Windows support,
- etc."""
+ HTTP, HTTPS and FTP, the most widely-used Internet protocols. It is a
+ non-interactive commandline tool, so it may easily be called from scripts,
+ cron jobs, terminals without X-Windows support, etc."""
homepage = "http://www.gnu.org/software/wget/"
- url = "http://ftp.gnu.org/gnu/wget/wget-1.16.tar.gz"
-
- version('1.17', 'c4c4727766f24ac716936275014a0536')
- version('1.16', '293a37977c41b5522f781d3a3a078426')
-
- depends_on("openssl")
-
- def install(self, spec, prefix):
- configure(
- "--prefix=%s" % prefix,
- "--with-ssl=openssl",
- "OPENSSL_CFLAGS=-I%s" % spec['openssl'].prefix.include,
- "OPENSSL_LIBS=-L%s -lssl -lcrypto -lz" % spec[
- 'openssl'].prefix.lib)
- make()
- make("install")
+ url = "http://ftp.gnu.org/gnu/wget/wget-1.19.1.tar.gz"
+
+ version('1.19.1', '87cea36b7161fd43e3fd51a4e8b89689')
+ version('1.17', 'c4c4727766f24ac716936275014a0536')
+ version('1.16', '293a37977c41b5522f781d3a3a078426')
+
+ variant('ssl', default='openssl', values=('gnutls', 'openssl'),
+ description='Specify SSL backend')
+ variant('zlib', default=True,
+ description='Enable zlib support')
+ variant('libpsl', default=False,
+ description='Enable support for libpsl cookie checking')
+ variant('pcre', default=False,
+ description='Enable PCRE style regular expressions')
+ variant('python', default=False,
+ description='Enable Python support')
+
+ depends_on('gnutls', when='ssl=gnutls')
+ depends_on('openssl', when='ssl=openssl')
+
+ depends_on('gettext', type='build')
+ depends_on('python@3:', type='build', when='+python')
+
+ depends_on('zlib', when='+zlib')
+ depends_on('libpsl', when='+libpsl')
+ depends_on('pcre', when='+pcre')
+
+ depends_on('perl@5.12.0:', type='build')
+ depends_on('pkg-config@0.9.0:', type='build')
+
+ # TODO: Add a 'test' deptype
+ # depends_on('valgrind', type='test')
+
+ build_directory = 'spack-build'
+
+ def configure_args(self):
+ spec = self.spec
+
+ args = [
+ '--with-ssl={0}'.format(spec.variants['ssl'].value),
+ ]
+
+ if '+zlib' in spec:
+ args.append('--with-zlib')
+ else:
+ args.append('--without-zlib')
+
+ if '+libpsl' in spec:
+ args.append('--with-libpsl')
+ else:
+ args.append('--without-libpsl')
+
+ if '+pcre' in spec:
+ args.append('--enable-pcre')
+ else:
+ args.append('--disable-pcre')
+
+ if self.run_tests:
+ args.append('--enable-valgrind-tests')
+ else:
+ args.append('--disable-valgrind-tests')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/windowswmproto/package.py b/var/spack/repos/builtin/packages/windowswmproto/package.py
index f163d1afb0..70f1aae995 100644
--- a/var/spack/repos/builtin/packages/windowswmproto/package.py
+++ b/var/spack/repos/builtin/packages/windowswmproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Windowswmproto(Package):
+class Windowswmproto(AutotoolsPackage):
"""This module provides the definition of the WindowsWM extension to the
X11 protocol, used for coordination between an X11 server and the
Microsoft Windows native window manager.
@@ -37,8 +37,3 @@ class Windowswmproto(Package):
url = "https://www.x.org/archive/individual/proto/windowswmproto-1.0.4.tar.gz"
version('1.0.4', '558db92a8e4e1b07e9c62eca3f04dd8d')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/wt/package.py b/var/spack/repos/builtin/packages/wt/package.py
new file mode 100644
index 0000000000..36eefdf2c0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/wt/package.py
@@ -0,0 +1,95 @@
+##############################################################################
+# 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/spack/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 Wt(CMakePackage):
+ """Wt, C++ Web Toolkit.
+
+ Wt is a C++ library for developing web applications."""
+
+ homepage = "http://www.webtoolkit.eu/wt"
+ url = "https://github.com/emweb/wt/archive/3.3.7.tar.gz"
+
+ version('3.3.7', '09858901f2dcf5c3d36a9237daba3e3f')
+ version('master', branch='master',
+ git='https://github.com/emweb/wt.git')
+
+ # wt builds in parallel, but requires more than 5 GByte RAM per -j <njob>
+ # which most machines do not provide and crash the build
+ parallel = False
+
+ variant('openssl', default=True,
+ description='SSL and WebSockets support in the built-in httpd, '
+ 'the HTTP(S) client, and additional cryptographic '
+ 'hashes in the authentication module')
+ variant('libharu', default=True, description='painting to PDF')
+ # variant('graphicsmagick', default=True,
+ # description='painting to PNG, GIF')
+ variant('sqlite', default=False, description='create SQLite3 DBO')
+ variant('mariadb', default=False, description='create MariaDB/MySQL DBO')
+ variant('postgresql', default=False, description='create PostgreSQL DBO')
+ # variant('firebird', default=False, description='create Firebird DBO')
+ variant('pango', default=True,
+ description='improved font support in PDF and raster image '
+ 'painting')
+ variant('zlib', default=True,
+ description='compression in the built-in httpd')
+ # variant('fastcgi', default=False,
+ # description='FastCGI connector via libfcgi++')
+
+ depends_on('boost@1.46.1:')
+ depends_on('openssl', when='+openssl')
+ depends_on('libharu', when='+libharu')
+ depends_on('sqlite', when='+sqlite')
+ depends_on('mariadb', when='+mariadb')
+ depends_on('postgresql', when='+postgresql')
+ depends_on('pango', when='+pango')
+ depends_on('zlib', when='+zlib')
+
+ def cmake_args(self):
+ spec = self.spec
+
+ cmake_args = [
+ '-DBUILD_EXAMPLES:BOOL=OFF',
+ '-DCONNECTOR_FCGI:BOOL=OFF',
+ '-DENABLE_OPENGL:BOOL=OFF',
+ '-DENABLE_QT4:BOOL=OFF'
+ ]
+ cmake_args.extend([
+ '-DENABLE_SSL:BOOL={0}'.format((
+ 'ON' if '+openssl' in spec else 'OFF')),
+ '-DENABLE_HARU:BOOL={0}'.format((
+ 'ON' if '+libharu' in spec else 'OFF')),
+ '-DENABLE_PANGO:BOOL={0}'.format((
+ 'ON' if '+pango' in spec else 'OFF')),
+ '-DENABLE_SQLITE:BOOL={0}'.format((
+ 'ON' if '+sqlite' in spec else 'OFF')),
+ '-DENABLE_MYSQL:BOOL={0}'.format((
+ 'ON' if '+mariadb' in spec else 'OFF')),
+ '-DENABLE_POSTGRES:BOOL={0}'.format((
+ 'ON' if '+postgres' in spec else 'OFF'))
+ ])
+ return cmake_args
diff --git a/var/spack/repos/builtin/packages/wx/package.py b/var/spack/repos/builtin/packages/wx/package.py
index 42d39df9e6..fc42b5153f 100644
--- a/var/spack/repos/builtin/packages/wx/package.py
+++ b/var/spack/repos/builtin/packages/wx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -23,9 +23,10 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
##############################################################################
from spack import *
+import sys
-class Wx(Package):
+class Wx(AutotoolsPackage):
"""wxWidgets is a C++ library that lets developers create
applications for Windows, Mac OS X, Linux and other platforms
with a single code base. It has popular language bindings for
@@ -41,18 +42,27 @@ class Wx(Package):
version('3.0.2', '6461eab4428c0a8b9e41781b8787510484dea800')
version('3.0.1', '73e58521d6871c9f4d1e7974c6e3a81629fddcf8')
- depends_on('gtkplus')
+ version('develop', git='https://github.com/wxWidgets/wxWidgets.git', branch='master')
- def make_wx(self):
- make()
+ depends_on('pkg-config', type='build')
+ depends_on('gtkplus')
@when('@:3.0.2')
- def make_wx(self):
+ def build(self, spec, prefix):
make(parallel=False)
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix, "--enable-unicode",
- "--disable-precomp-headers")
+ def configure_args(self):
+ spec = self.spec
+ options = [
+ '--enable-unicode',
+ '--disable-precomp-headers'
+ ]
+
+ # see http://trac.wxwidgets.org/ticket/17639
+ if spec.satisfies('@:3.1.0') and sys.platform == 'darwin':
+ options.extend([
+ '--disable-qtkit',
+ '--disable-mediactrl'
+ ])
- self.make_wx()
- make("install")
+ return options
diff --git a/var/spack/repos/builtin/packages/wxpropgrid/package.py b/var/spack/repos/builtin/packages/wxpropgrid/package.py
index cc9ff445d6..7df30895fc 100644
--- a/var/spack/repos/builtin/packages/wxpropgrid/package.py
+++ b/var/spack/repos/builtin/packages/wxpropgrid/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/x11perf/package.py b/var/spack/repos/builtin/packages/x11perf/package.py
index 91db1e8a59..b5a2e9344b 100644
--- a/var/spack/repos/builtin/packages/x11perf/package.py
+++ b/var/spack/repos/builtin/packages/x11perf/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class X11perf(Package):
+class X11perf(AutotoolsPackage):
"""Simple X server performance benchmarker."""
homepage = "http://cgit.freedesktop.org/xorg/app/x11perf"
@@ -41,9 +41,3 @@ class X11perf(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xapian-core/package.py b/var/spack/repos/builtin/packages/xapian-core/package.py
new file mode 100644
index 0000000000..8ea340a55a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xapian-core/package.py
@@ -0,0 +1,39 @@
+##############################################################################
+# 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/spack/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 XapianCore(AutotoolsPackage):
+ """Xapian is a highly adaptable toolkit which allows developers to easily
+ add advanced indexing and search facilities to their own applications.
+ It supports the Probabilistic Information Retrieval model and also
+ supports a rich set of boolean query operators."""
+
+ homepage = "https://xapian.org"
+ url = "http://oligarchy.co.uk/xapian/1.4.3/xapian-core-1.4.3.tar.xz"
+
+ version('1.4.3', '143f72693219f7fc5913815ed858f295')
+
+ depends_on('zlib')
diff --git a/var/spack/repos/builtin/packages/xauth/package.py b/var/spack/repos/builtin/packages/xauth/package.py
index 6d6a03c899..ac02ba48b9 100644
--- a/var/spack/repos/builtin/packages/xauth/package.py
+++ b/var/spack/repos/builtin/packages/xauth/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xauth(Package):
+class Xauth(AutotoolsPackage):
"""The xauth program is used to edit and display the authorization
information used in connecting to the X server."""
@@ -43,9 +43,4 @@ class Xauth(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- # make('check') # TODO: add package for cmdtest build dependency
- make('install')
+ # TODO: add package for cmdtest test dependency
diff --git a/var/spack/repos/builtin/packages/xbacklight/package.py b/var/spack/repos/builtin/packages/xbacklight/package.py
index f1a9ecc124..2f4057ee80 100644
--- a/var/spack/repos/builtin/packages/xbacklight/package.py
+++ b/var/spack/repos/builtin/packages/xbacklight/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xbacklight(Package):
+class Xbacklight(AutotoolsPackage):
"""Xbacklight is used to adjust the backlight brightness where supported.
It uses the RandR extension to find all outputs on the X server
supporting backlight brightness control and changes them all in the
@@ -41,9 +41,3 @@ class Xbacklight(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xbiff/package.py b/var/spack/repos/builtin/packages/xbiff/package.py
index f5c53c5997..7d85e59fbf 100644
--- a/var/spack/repos/builtin/packages/xbiff/package.py
+++ b/var/spack/repos/builtin/packages/xbiff/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xbiff(Package):
+class Xbiff(AutotoolsPackage):
"""xbiff provides graphical notification of new e-mail.
It only handles mail stored in a filesystem accessible file,
not via IMAP, POP or other remote access protocols."""
@@ -43,9 +43,3 @@ class Xbiff(Package):
depends_on('xbitmaps', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xbitmaps/package.py b/var/spack/repos/builtin/packages/xbitmaps/package.py
index 1c6fb79d3a..6282ce7041 100644
--- a/var/spack/repos/builtin/packages/xbitmaps/package.py
+++ b/var/spack/repos/builtin/packages/xbitmaps/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xbitmaps(Package):
+class Xbitmaps(AutotoolsPackage):
"""The xbitmaps package contains bitmap images used by multiple
applications built in Xorg."""
@@ -36,8 +36,3 @@ class Xbitmaps(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcalc/package.py b/var/spack/repos/builtin/packages/xcalc/package.py
index a470d1c9d0..5218ecac99 100644
--- a/var/spack/repos/builtin/packages/xcalc/package.py
+++ b/var/spack/repos/builtin/packages/xcalc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xcalc(Package):
+class Xcalc(AutotoolsPackage):
"""xcalc is a scientific calculator X11 client that can emulate a TI-30
or an HP-10C."""
@@ -41,9 +41,3 @@ class Xcalc(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-demo/package.py b/var/spack/repos/builtin/packages/xcb-demo/package.py
index 62433e3b32..7a2c2f65f4 100644
--- a/var/spack/repos/builtin/packages/xcb-demo/package.py
+++ b/var/spack/repos/builtin/packages/xcb-demo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbDemo(Package):
+class XcbDemo(AutotoolsPackage):
"""xcb-demo: A collection of demo programs that use the XCB library."""
homepage = "https://xcb.freedesktop.org/"
@@ -40,12 +40,5 @@ class XcbDemo(Package):
depends_on('pkg-config@0.9.0:', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- # FIXME: crashes with the following error message
- # X11/XCB/xcb.h: No such file or directory
-
- make()
- make('check')
- make('install')
+ # FIXME: crashes with the following error message
+ # X11/XCB/xcb.h: No such file or directory
diff --git a/var/spack/repos/builtin/packages/xcb-proto/package.py b/var/spack/repos/builtin/packages/xcb-proto/package.py
index d2ac54d34f..9cb2480b17 100644
--- a/var/spack/repos/builtin/packages/xcb-proto/package.py
+++ b/var/spack/repos/builtin/packages/xcb-proto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbProto(Package):
+class XcbProto(AutotoolsPackage):
"""xcb-proto provides the XML-XCB protocol descriptions that libxcb uses to
generate the majority of its code and API."""
@@ -35,10 +35,7 @@ class XcbProto(Package):
version('1.12', '5ee1ec124ea8d56bd9e83b8e9e0b84c4')
version('1.11', 'c8c6cb72c84f58270f4db1f39607f66a')
- extends('python')
+ # TODO: uncomment once build deps can be resolved separately
+ # extends('python')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- # make('check') # fails xmllint validation
- make('install')
+ patch('xcb-proto-1.12-schema-1.patch', when='@1.12')
diff --git a/var/spack/repos/builtin/packages/xcb-proto/xcb-proto-1.12-schema-1.patch b/var/spack/repos/builtin/packages/xcb-proto/xcb-proto-1.12-schema-1.patch
new file mode 100644
index 0000000000..2a0b69255c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xcb-proto/xcb-proto-1.12-schema-1.patch
@@ -0,0 +1,52 @@
+Submitted By: Bruce Dubbs <bdubbs at linuxfromscratch dot org>
+Date: 2016-06-01
+Initial Package Version: 1.12
+Upstream Status: Not Committed
+Origin: https://lists.freedesktop.org/archives/xcb/2016-February/010676.html
+Description: Fixes make check
+
+
+--- a/src/xcb.xsd
++++ b/src/xcb.xsd
+@@ -44,6 +44,15 @@ authorization from the authors.
+ <xsd:complexType>
+ <xsd:attribute name="bytes" type="xsd:integer" use="optional" />
+ <xsd:attribute name="align" type="xsd:integer" use="optional" />
++ <xsd:attribute name="serialize" type="xsd:boolean" use="optional" />
++ </xsd:complexType>
++ </xsd:element>
++
++ <!-- Alignment -->
++ <xsd:element name="required_start_align" >
++ <xsd:complexType>
++ <xsd:attribute name="align" type="xsd:integer" use="required" />
++ <xsd:attribute name="offset" type="xsd:integer" use="optional" />
+ </xsd:complexType>
+ </xsd:element>
+
+@@ -76,14 +85,13 @@ authorization from the authors.
+ <xsd:sequence>
+ <!-- switch(expression) -->
+ <xsd:group ref="expression" minOccurs="1" maxOccurs="1" />
++ <xsd:element ref="required_start_align" minOccurs="0" maxOccurs="1" />
+ <xsd:choice>
+ <!-- bitcase expression - bit test -->
+ <xsd:element name="bitcase" type="caseexpr" minOccurs="0" maxOccurs="unbounded" />
+ <!-- case expression - value test -->
+ <xsd:element name="case" type="caseexpr" minOccurs="0" maxOccurs="unbounded" />
+ </xsd:choice>
+- <!-- default: -->
+- <xsd:group ref="fields" minOccurs="0" maxOccurs="1" />
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string" use="required" />
+ </xsd:complexType>
+@@ -201,6 +209,7 @@ authorization from the authors.
+ <xsd:element ref="field" />
+ <xsd:element ref="list" />
+ <xsd:element ref="fd" />
++ <xsd:element ref="required_start_align" />
+ </xsd:choice>
+ </xsd:group>
+
+
+
diff --git a/var/spack/repos/builtin/packages/xcb-util-cursor/package.py b/var/spack/repos/builtin/packages/xcb-util-cursor/package.py
index b25fb181a6..64faa37207 100644
--- a/var/spack/repos/builtin/packages/xcb-util-cursor/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-cursor/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilCursor(Package):
+class XcbUtilCursor(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -43,9 +43,3 @@ class XcbUtilCursor(Package):
depends_on('xcb-util-image')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util-errors/package.py b/var/spack/repos/builtin/packages/xcb-util-errors/package.py
index c287a0ec6e..07aa424ddc 100644
--- a/var/spack/repos/builtin/packages/xcb-util-errors/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-errors/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilErrors(Package):
+class XcbUtilErrors(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -42,10 +42,3 @@ class XcbUtilErrors(Package):
depends_on('xcb-proto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util-image/package.py b/var/spack/repos/builtin/packages/xcb-util-image/package.py
index 4413c7e11d..a9f2f2263a 100644
--- a/var/spack/repos/builtin/packages/xcb-util-image/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-image/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilImage(Package):
+class XcbUtilImage(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -43,10 +43,3 @@ class XcbUtilImage(Package):
depends_on('xproto@7.0.8:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('check')
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util-keysyms/package.py b/var/spack/repos/builtin/packages/xcb-util-keysyms/package.py
index 0de6391b18..3901624e9a 100644
--- a/var/spack/repos/builtin/packages/xcb-util-keysyms/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-keysyms/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilKeysyms(Package):
+class XcbUtilKeysyms(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -42,9 +42,3 @@ class XcbUtilKeysyms(Package):
depends_on('xproto@7.0.8:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util-renderutil/package.py b/var/spack/repos/builtin/packages/xcb-util-renderutil/package.py
index d41c88206c..e9a325e83c 100644
--- a/var/spack/repos/builtin/packages/xcb-util-renderutil/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-renderutil/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilRenderutil(Package):
+class XcbUtilRenderutil(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -41,9 +41,3 @@ class XcbUtilRenderutil(Package):
depends_on('libxcb@1.4:')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util-wm/package.py b/var/spack/repos/builtin/packages/xcb-util-wm/package.py
index ef3db06aec..5d9a5e3932 100644
--- a/var/spack/repos/builtin/packages/xcb-util-wm/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util-wm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtilWm(Package):
+class XcbUtilWm(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -41,9 +41,3 @@ class XcbUtilWm(Package):
depends_on('libxcb@1.4:')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcb-util/package.py b/var/spack/repos/builtin/packages/xcb-util/package.py
index 820592a319..c8ac0d40ab 100644
--- a/var/spack/repos/builtin/packages/xcb-util/package.py
+++ b/var/spack/repos/builtin/packages/xcb-util/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XcbUtil(Package):
+class XcbUtil(AutotoolsPackage):
"""The XCB util modules provides a number of libraries which sit on top
of libxcb, the core X protocol library, and some of the extension
libraries. These experimental libraries provide convenience functions
@@ -41,9 +41,3 @@ class XcbUtil(Package):
depends_on('libxcb@1.4:')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xclip/package.py b/var/spack/repos/builtin/packages/xclip/package.py
new file mode 100644
index 0000000000..d685d1f07c
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xclip/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Xclip(AutotoolsPackage):
+ """xclip is a command line utility that is designed to run on any system
+ with an X11 implementation. It provides an interface to X selections
+ ("the clipboard") from the command line. It can read data from standard
+ in or a file and place it in an X selection for pasting into other X
+ applications. xclip can also print an X selection to standard out,
+ which can then be redirected to a file or another program."""
+
+ homepage = "https://github.com/astrand/xclip"
+ url = "https://github.com/astrand/xclip"
+
+ version('0.13', git='https://github.com/astrand/xclip', commit='9aa7090c3b8b437c6489edca32ae43d82e0c1281')
+
+ depends_on('libxmu')
+ depends_on('libx11')
+ depends_on('autoconf', type='build')
+ depends_on('automake', type='build')
+ depends_on('libtool', type='build')
+ depends_on('m4', type='build')
diff --git a/var/spack/repos/builtin/packages/xclipboard/package.py b/var/spack/repos/builtin/packages/xclipboard/package.py
index d9af19da71..bad81a9a96 100644
--- a/var/spack/repos/builtin/packages/xclipboard/package.py
+++ b/var/spack/repos/builtin/packages/xclipboard/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xclipboard(Package):
+class Xclipboard(AutotoolsPackage):
"""xclipboard is used to collect and display text selections that are
sent to the CLIPBOARD by other clients. It is typically used to save
CLIPBOARD selections for later use. It stores each CLIPBOARD
@@ -45,9 +45,3 @@ class Xclipboard(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xclock/package.py b/var/spack/repos/builtin/packages/xclock/package.py
index 5bd38826db..47614e50e1 100644
--- a/var/spack/repos/builtin/packages/xclock/package.py
+++ b/var/spack/repos/builtin/packages/xclock/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xclock(Package):
+class Xclock(AutotoolsPackage):
"""xclock is the classic X Window System clock utility. It displays
the time in analog or digital form, continuously updated at a
frequency which may be specified by the user."""
@@ -46,9 +46,3 @@ class Xclock(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcmiscproto/package.py b/var/spack/repos/builtin/packages/xcmiscproto/package.py
index 2b15d1b3e7..92c1b886a5 100644
--- a/var/spack/repos/builtin/packages/xcmiscproto/package.py
+++ b/var/spack/repos/builtin/packages/xcmiscproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xcmiscproto(Package):
+class Xcmiscproto(AutotoolsPackage):
"""XC-MISC Extension.
This extension defines a protocol that provides Xlib two ways to query
@@ -38,8 +38,3 @@ class Xcmiscproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcmsdb/package.py b/var/spack/repos/builtin/packages/xcmsdb/package.py
index 4d12e3a843..b59a254262 100644
--- a/var/spack/repos/builtin/packages/xcmsdb/package.py
+++ b/var/spack/repos/builtin/packages/xcmsdb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xcmsdb(Package):
+class Xcmsdb(AutotoolsPackage):
"""xcmsdb is used to load, query, or remove Device Color Characterization
data stored in properties on the root window of the screen as
specified in section 7, Device Color Characterization, of the
@@ -40,9 +40,3 @@ class Xcmsdb(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcompmgr/package.py b/var/spack/repos/builtin/packages/xcompmgr/package.py
index fc5bbb4b9c..dc8aa398b1 100644
--- a/var/spack/repos/builtin/packages/xcompmgr/package.py
+++ b/var/spack/repos/builtin/packages/xcompmgr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xcompmgr(Package):
+class Xcompmgr(AutotoolsPackage):
"""xcompmgr is a sample compositing manager for X servers supporting the
XFIXES, DAMAGE, RENDER, and COMPOSITE extensions. It enables basic
eye-candy effects."""
@@ -43,9 +43,3 @@ class Xcompmgr(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xconsole/package.py b/var/spack/repos/builtin/packages/xconsole/package.py
index f86fe753b6..2c130091d3 100644
--- a/var/spack/repos/builtin/packages/xconsole/package.py
+++ b/var/spack/repos/builtin/packages/xconsole/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xconsole(Package):
+class Xconsole(AutotoolsPackage):
"""xconsole displays in a X11 window the messages which are usually sent
to /dev/console."""
@@ -42,9 +42,3 @@ class Xconsole(Package):
depends_on('xproto@7.0.17:')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xcursor-themes/package.py b/var/spack/repos/builtin/packages/xcursor-themes/package.py
index 7c38c9999c..112d63c274 100644
--- a/var/spack/repos/builtin/packages/xcursor-themes/package.py
+++ b/var/spack/repos/builtin/packages/xcursor-themes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
diff --git a/var/spack/repos/builtin/packages/xcursorgen/package.py b/var/spack/repos/builtin/packages/xcursorgen/package.py
index 4e43844646..c2b808b0af 100644
--- a/var/spack/repos/builtin/packages/xcursorgen/package.py
+++ b/var/spack/repos/builtin/packages/xcursorgen/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xcursorgen(Package):
+class Xcursorgen(AutotoolsPackage):
"""xcursorgen prepares X11 cursor sets for use with libXcursor."""
homepage = "http://cgit.freedesktop.org/xorg/app/xcursorgen"
@@ -39,9 +39,3 @@ class Xcursorgen(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xdbedizzy/package.py b/var/spack/repos/builtin/packages/xdbedizzy/package.py
index 7a8f97401f..9e21e54ca6 100644
--- a/var/spack/repos/builtin/packages/xdbedizzy/package.py
+++ b/var/spack/repos/builtin/packages/xdbedizzy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xdbedizzy(Package):
+class Xdbedizzy(AutotoolsPackage):
"""xdbedizzy is a demo of the X11 Double Buffer Extension (DBE)
creating a double buffered spinning scene."""
@@ -39,9 +39,3 @@ class Xdbedizzy(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xditview/package.py b/var/spack/repos/builtin/packages/xditview/package.py
index 3fececd12e..5111de58af 100644
--- a/var/spack/repos/builtin/packages/xditview/package.py
+++ b/var/spack/repos/builtin/packages/xditview/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xditview(Package):
+class Xditview(AutotoolsPackage):
"""xditview displays ditroff output on an X display."""
homepage = "http://cgit.freedesktop.org/xorg/app/xditview"
@@ -40,9 +40,3 @@ class Xditview(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xdm/package.py b/var/spack/repos/builtin/packages/xdm/package.py
index d42ced9a57..8f1b544f6d 100644
--- a/var/spack/repos/builtin/packages/xdm/package.py
+++ b/var/spack/repos/builtin/packages/xdm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xdm(Package):
+class Xdm(AutotoolsPackage):
"""X Display Manager / XDMCP server."""
homepage = "http://cgit.freedesktop.org/xorg/app/xdm"
@@ -46,9 +46,3 @@ class Xdm(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xdpyinfo/package.py b/var/spack/repos/builtin/packages/xdpyinfo/package.py
index c69af3b357..ab5935b474 100644
--- a/var/spack/repos/builtin/packages/xdpyinfo/package.py
+++ b/var/spack/repos/builtin/packages/xdpyinfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xdpyinfo(Package):
+class Xdpyinfo(AutotoolsPackage):
"""xdpyinfo is a utility for displaying information about an X server.
It is used to examine the capabilities of a server, the predefined
@@ -44,11 +44,8 @@ class Xdpyinfo(Package):
depends_on('libxcb')
depends_on('xproto@7.0.22:', type='build')
+ depends_on('recordproto', type='build')
+ depends_on('inputproto', type='build')
+ depends_on('fixesproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xdriinfo/package.py b/var/spack/repos/builtin/packages/xdriinfo/package.py
index 7548175f6f..86645072c0 100644
--- a/var/spack/repos/builtin/packages/xdriinfo/package.py
+++ b/var/spack/repos/builtin/packages/xdriinfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xdriinfo(Package):
+class Xdriinfo(AutotoolsPackage):
"""xdriinfo - query configuration information of X11 DRI drivers."""
homepage = "http://cgit.freedesktop.org/xorg/app/xdriinfo"
@@ -44,9 +44,3 @@ class Xdriinfo(Package):
depends_on('glproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xedit/package.py b/var/spack/repos/builtin/packages/xedit/package.py
index da5f28809f..752fbf61d5 100644
--- a/var/spack/repos/builtin/packages/xedit/package.py
+++ b/var/spack/repos/builtin/packages/xedit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xedit(Package):
+class Xedit(AutotoolsPackage):
"""Xedit is a simple text editor for X."""
homepage = "https://cgit.freedesktop.org/xorg/app/xedit"
@@ -40,9 +40,3 @@ class Xedit(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xerces-c/package.py b/var/spack/repos/builtin/packages/xerces-c/package.py
index 9f3ad8a4dc..3e832784f8 100644
--- a/var/spack/repos/builtin/packages/xerces-c/package.py
+++ b/var/spack/repos/builtin/packages/xerces-c/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,21 +25,17 @@
from spack import *
-class XercesC(Package):
+class XercesC(AutotoolsPackage):
"""Xerces-C++ is a validating XML parser written in a portable subset of
C++. Xerces-C++ makes it easy to give your application the ability to read
and write XML data. A shared library is provided for parsing, generating,
manipulating, and validating XML documents using the DOM, SAX, and SAX2
- APIs.
- """
+ APIs."""
homepage = "https://xerces.apache.org/xerces-c"
- url = "https://www.apache.org/dist/xerces/c/3/sources/xerces-c-3.1.4.tar.bz2"
+ url = "https://archive.apache.org/dist/xerces/c/3/sources/xerces-c-3.1.4.tar.bz2"
+
version('3.1.4', 'd04ae9d8b2dee2157c6db95fa908abfd')
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix,
- "--disable-network")
- make("clean")
- make()
- make("install")
+ def configure_args(self):
+ return ['--disable-network']
diff --git a/var/spack/repos/builtin/packages/xev/package.py b/var/spack/repos/builtin/packages/xev/package.py
index 5727d4e428..fbccb0e103 100644
--- a/var/spack/repos/builtin/packages/xev/package.py
+++ b/var/spack/repos/builtin/packages/xev/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xev(Package):
+class Xev(AutotoolsPackage):
"""xev creates a window and then asks the X server to send it X11 events
whenever anything happens to the window (such as it being moved,
resized, typed in, clicked in, etc.). You can also attach it to an
@@ -45,9 +45,3 @@ class Xev(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xextproto/package.py b/var/spack/repos/builtin/packages/xextproto/package.py
index 9c1c123527..d02c1935c2 100644
--- a/var/spack/repos/builtin/packages/xextproto/package.py
+++ b/var/spack/repos/builtin/packages/xextproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xextproto(Package):
+class Xextproto(AutotoolsPackage):
"""X Protocol Extensions."""
homepage = "http://cgit.freedesktop.org/xorg/proto/xextproto"
@@ -37,8 +37,3 @@ class Xextproto(Package):
depends_on('util-macros', type='build')
parallel = False
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xeyes/package.py b/var/spack/repos/builtin/packages/xeyes/package.py
index cfea92fda3..232f46212b 100644
--- a/var/spack/repos/builtin/packages/xeyes/package.py
+++ b/var/spack/repos/builtin/packages/xeyes/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xeyes(Package):
+class Xeyes(AutotoolsPackage):
"""xeyes - a follow the mouse X demo, using the X SHAPE extension"""
homepage = "http://cgit.freedesktop.org/xorg/app/xeyes"
@@ -41,9 +41,3 @@ class Xeyes(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86bigfontproto/package.py b/var/spack/repos/builtin/packages/xf86bigfontproto/package.py
index 6c1dc8f37d..4a1315b617 100644
--- a/var/spack/repos/builtin/packages/xf86bigfontproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86bigfontproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Xf86bigfontproto(Package):
+class Xf86bigfontproto(AutotoolsPackage):
"""X.org XF86BigFontProto protocol headers."""
homepage = "https://cgit.freedesktop.org/xorg/proto/xf86bigfontproto"
url = "https://www.x.org/archive/individual/proto/xf86bigfontproto-1.2.0.tar.gz"
version('1.2.0', '91b0733ff4cbe55808d96073258aa3d1')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86dga/package.py b/var/spack/repos/builtin/packages/xf86dga/package.py
index 8add6fbca7..3768fced15 100644
--- a/var/spack/repos/builtin/packages/xf86dga/package.py
+++ b/var/spack/repos/builtin/packages/xf86dga/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xf86dga(Package):
+class Xf86dga(AutotoolsPackage):
"""dga is a simple test client for the XFree86-DGA extension."""
homepage = "http://cgit.freedesktop.org/xorg/app/xf86dga"
@@ -38,9 +38,3 @@ class Xf86dga(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86dgaproto/package.py b/var/spack/repos/builtin/packages/xf86dgaproto/package.py
index 05b64c9534..88cd07c286 100644
--- a/var/spack/repos/builtin/packages/xf86dgaproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86dgaproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Xf86dgaproto(Package):
+class Xf86dgaproto(AutotoolsPackage):
"""X.org XF86DGAProto protocol headers."""
homepage = "https://cgit.freedesktop.org/xorg/proto/xf86dgaproto"
url = "https://www.x.org/archive/individual/proto/xf86dgaproto-2.1.tar.gz"
version('2.1', '1fe79dc07857ad3e1fb8b8f2bdd70d1b')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86driproto/package.py b/var/spack/repos/builtin/packages/xf86driproto/package.py
index 655d1bc60b..4877440649 100644
--- a/var/spack/repos/builtin/packages/xf86driproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86driproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xf86driproto(Package):
+class Xf86driproto(AutotoolsPackage):
"""XFree86 Direct Rendering Infrastructure Extension.
This extension defines a protocol to allow user applications to access
@@ -39,8 +39,3 @@ class Xf86driproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86miscproto/package.py b/var/spack/repos/builtin/packages/xf86miscproto/package.py
index 4b7e279077..60e1db78bf 100644
--- a/var/spack/repos/builtin/packages/xf86miscproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86miscproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xf86miscproto(Package):
+class Xf86miscproto(AutotoolsPackage):
"""This package includes the protocol definitions of the "XFree86-Misc"
extension to the X11 protocol. The "XFree86-Misc" extension is
supported by the XFree86 X server and versions of the Xorg X server
@@ -35,8 +35,3 @@ class Xf86miscproto(Package):
url = "https://www.x.org/archive/individual/proto/xf86miscproto-0.9.3.tar.gz"
version('0.9.3', 'c6432f04f84929c94fa05b3a466c489d')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86rushproto/package.py b/var/spack/repos/builtin/packages/xf86rushproto/package.py
index bdd192970b..6b29e07c6a 100644
--- a/var/spack/repos/builtin/packages/xf86rushproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86rushproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,15 +25,10 @@
from spack import *
-class Xf86rushproto(Package):
+class Xf86rushproto(AutotoolsPackage):
"""X.org XF86RushProto protocol headers."""
homepage = "https://cgit.freedesktop.org/xorg/proto/xf86rushproto"
url = "https://www.x.org/archive/individual/proto/xf86rushproto-1.1.2.tar.gz"
version('1.1.2', '6a6389473332ace01146cccfef228576')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xf86vidmodeproto/package.py b/var/spack/repos/builtin/packages/xf86vidmodeproto/package.py
index ece389f9e6..f8ce028474 100644
--- a/var/spack/repos/builtin/packages/xf86vidmodeproto/package.py
+++ b/var/spack/repos/builtin/packages/xf86vidmodeproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xf86vidmodeproto(Package):
+class Xf86vidmodeproto(AutotoolsPackage):
"""XFree86 Video Mode Extension.
This extension defines a protocol for dynamically configuring modelines
@@ -38,8 +38,3 @@ class Xf86vidmodeproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfd/package.py b/var/spack/repos/builtin/packages/xfd/package.py
index 669cd83bf5..024f8ce141 100644
--- a/var/spack/repos/builtin/packages/xfd/package.py
+++ b/var/spack/repos/builtin/packages/xfd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfd(Package):
+class Xfd(AutotoolsPackage):
"""xfd - display all the characters in a font using either the
X11 core protocol or libXft2."""
@@ -44,9 +44,3 @@ class Xfd(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfindproxy/package.py b/var/spack/repos/builtin/packages/xfindproxy/package.py
index e4b83433c4..fc12753133 100644
--- a/var/spack/repos/builtin/packages/xfindproxy/package.py
+++ b/var/spack/repos/builtin/packages/xfindproxy/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfindproxy(Package):
+class Xfindproxy(AutotoolsPackage):
"""xfindproxy is used to locate available X11 proxy services.
It utilizes the Proxy Management Protocol to communicate with a proxy
@@ -45,9 +45,3 @@ class Xfindproxy(Package):
depends_on('xproxymanagementprotocol', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfontsel/package.py b/var/spack/repos/builtin/packages/xfontsel/package.py
index 772ff8d570..2a615216d5 100644
--- a/var/spack/repos/builtin/packages/xfontsel/package.py
+++ b/var/spack/repos/builtin/packages/xfontsel/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfontsel(Package):
+class Xfontsel(AutotoolsPackage):
"""xfontsel application provides a simple way to display the X11 core
protocol fonts known to your X server, examine samples of each, and
retrieve the X Logical Font Description ("XLFD") full name for a font."""
@@ -42,9 +42,3 @@ class Xfontsel(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfs/package.py b/var/spack/repos/builtin/packages/xfs/package.py
index 72429dee90..6846c320e2 100644
--- a/var/spack/repos/builtin/packages/xfs/package.py
+++ b/var/spack/repos/builtin/packages/xfs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfs(Package):
+class Xfs(AutotoolsPackage):
"""X Font Server."""
homepage = "http://cgit.freedesktop.org/xorg/app/xfs"
@@ -37,12 +37,7 @@ class Xfs(Package):
depends_on('font-util')
depends_on('xproto@7.0.17:', type='build')
+ depends_on('fontsproto', type='build')
depends_on('xtrans', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfsinfo/package.py b/var/spack/repos/builtin/packages/xfsinfo/package.py
index b31ad1c1e0..8f8ec13247 100644
--- a/var/spack/repos/builtin/packages/xfsinfo/package.py
+++ b/var/spack/repos/builtin/packages/xfsinfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfsinfo(Package):
+class Xfsinfo(AutotoolsPackage):
"""xfsinfo is a utility for displaying information about an X font
server. It is used to examine the capabilities of a server, the
predefined values for various parameters used in communicating between
@@ -42,9 +42,3 @@ class Xfsinfo(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xfwp/package.py b/var/spack/repos/builtin/packages/xfwp/package.py
index 5f073a8806..b0c8fa9158 100644
--- a/var/spack/repos/builtin/packages/xfwp/package.py
+++ b/var/spack/repos/builtin/packages/xfwp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xfwp(Package):
+class Xfwp(AutotoolsPackage):
"""xfwp proxies X11 protocol connections, such as through a firewall."""
homepage = "http://cgit.freedesktop.org/xorg/app/xfwp"
@@ -40,11 +40,5 @@ class Xfwp(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- # FIXME: fails with the error message:
- # io.c:1039:7: error: implicit declaration of function 'swab'
-
- make()
- make('install')
+ # FIXME: fails with the error message:
+ # io.c:1039:7: error: implicit declaration of function 'swab'
diff --git a/var/spack/repos/builtin/packages/xgamma/package.py b/var/spack/repos/builtin/packages/xgamma/package.py
index b8abec293a..b417a47c1c 100644
--- a/var/spack/repos/builtin/packages/xgamma/package.py
+++ b/var/spack/repos/builtin/packages/xgamma/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xgamma(Package):
+class Xgamma(AutotoolsPackage):
"""xgamma allows X users to query and alter the gamma correction of a
monitor via the X video mode extension (XFree86-VidModeExtension)."""
@@ -40,9 +40,3 @@ class Xgamma(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xgc/package.py b/var/spack/repos/builtin/packages/xgc/package.py
index 608e6e0360..0b507332da 100644
--- a/var/spack/repos/builtin/packages/xgc/package.py
+++ b/var/spack/repos/builtin/packages/xgc/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xgc(Package):
+class Xgc(AutotoolsPackage):
"""xgc is an X11 graphics demo that shows various features of the X11
core protocol graphics primitives."""
@@ -41,9 +41,3 @@ class Xgc(Package):
depends_on('bison', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xhost/package.py b/var/spack/repos/builtin/packages/xhost/package.py
index f01c481ee7..072a5a29b1 100644
--- a/var/spack/repos/builtin/packages/xhost/package.py
+++ b/var/spack/repos/builtin/packages/xhost/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xhost(Package):
+class Xhost(AutotoolsPackage):
"""xhost is used to manage the list of host names or user names
allowed to make connections to the X server."""
@@ -41,9 +41,3 @@ class Xhost(Package):
depends_on('xproto@7.0.22:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xineramaproto/package.py b/var/spack/repos/builtin/packages/xineramaproto/package.py
index baededbb25..b05e26254b 100644
--- a/var/spack/repos/builtin/packages/xineramaproto/package.py
+++ b/var/spack/repos/builtin/packages/xineramaproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xineramaproto(Package):
+class Xineramaproto(AutotoolsPackage):
"""X Xinerama Extension.
This is an X extension that allows multiple physical screens controlled
@@ -38,8 +38,3 @@ class Xineramaproto(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xinit/package.py b/var/spack/repos/builtin/packages/xinit/package.py
index 9f3bc09229..03487e44a2 100644
--- a/var/spack/repos/builtin/packages/xinit/package.py
+++ b/var/spack/repos/builtin/packages/xinit/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xinit(Package):
+class Xinit(AutotoolsPackage):
"""The xinit program is used to start the X Window System server and a
first client program on systems that are not using a display manager
such as xdm."""
@@ -40,9 +40,3 @@ class Xinit(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xinput/package.py b/var/spack/repos/builtin/packages/xinput/package.py
index 3c4fb35503..2a441d545d 100644
--- a/var/spack/repos/builtin/packages/xinput/package.py
+++ b/var/spack/repos/builtin/packages/xinput/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xinput(Package):
+class Xinput(AutotoolsPackage):
"""xinput is a utility to configure and test XInput devices."""
homepage = "http://cgit.freedesktop.org/xorg/app/xinput"
@@ -40,11 +40,8 @@ class Xinput(Package):
depends_on('libxinerama')
depends_on('inputproto@2.1.99.1:', type='build')
+ depends_on('fixesproto', type='build')
+ depends_on('randrproto', type='build')
+ depends_on('xineramaproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkbcomp/package.py b/var/spack/repos/builtin/packages/xkbcomp/package.py
index e6e8875fa7..2385bb75e9 100644
--- a/var/spack/repos/builtin/packages/xkbcomp/package.py
+++ b/var/spack/repos/builtin/packages/xkbcomp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkbcomp(Package):
+class Xkbcomp(AutotoolsPackage):
"""The X Keyboard (XKB) Extension essentially replaces the core protocol
definition of a keyboard. The extension makes it possible to specify
clearly and explicitly most aspects of keyboard behaviour on a per-key
@@ -45,9 +45,3 @@ class Xkbcomp(Package):
depends_on('bison', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkbdata/package.py b/var/spack/repos/builtin/packages/xkbdata/package.py
index fc84631e36..cb35f1ae3a 100644
--- a/var/spack/repos/builtin/packages/xkbdata/package.py
+++ b/var/spack/repos/builtin/packages/xkbdata/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkbdata(Package):
+class Xkbdata(AutotoolsPackage):
"""The XKB data files for the various keyboard models, layouts,
and locales."""
@@ -35,9 +35,3 @@ class Xkbdata(Package):
version('1.0.1', 'a7e0fbc9cc84c621243c777694388064')
depends_on('xkbcomp', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkbevd/package.py b/var/spack/repos/builtin/packages/xkbevd/package.py
index 462d989db2..8ca91494b1 100644
--- a/var/spack/repos/builtin/packages/xkbevd/package.py
+++ b/var/spack/repos/builtin/packages/xkbevd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkbevd(Package):
+class Xkbevd(AutotoolsPackage):
"""XKB event daemon demo."""
homepage = "http://cgit.freedesktop.org/xorg/app/xkbevd"
@@ -39,9 +39,3 @@ class Xkbevd(Package):
depends_on('bison', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkbprint/package.py b/var/spack/repos/builtin/packages/xkbprint/package.py
index dc92ac4126..8d5205843f 100644
--- a/var/spack/repos/builtin/packages/xkbprint/package.py
+++ b/var/spack/repos/builtin/packages/xkbprint/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkbprint(Package):
+class Xkbprint(AutotoolsPackage):
"""xkbprint generates a printable or encapsulated PostScript description
of an XKB keyboard description."""
@@ -40,9 +40,3 @@ class Xkbprint(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkbutils/package.py b/var/spack/repos/builtin/packages/xkbutils/package.py
index a4c6c97578..c4f604407a 100644
--- a/var/spack/repos/builtin/packages/xkbutils/package.py
+++ b/var/spack/repos/builtin/packages/xkbutils/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkbutils(Package):
+class Xkbutils(AutotoolsPackage):
"""xkbutils is a collection of small utilities utilizing the XKeyboard
(XKB) extension to the X11 protocol."""
@@ -42,9 +42,3 @@ class Xkbutils(Package):
depends_on('inputproto', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkeyboard-config/package.py b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
index 3ad7ea197c..5995a7eae7 100644
--- a/var/spack/repos/builtin/packages/xkeyboard-config/package.py
+++ b/var/spack/repos/builtin/packages/xkeyboard-config/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XkeyboardConfig(Package):
+class XkeyboardConfig(AutotoolsPackage):
"""This project provides a consistent, well-structured, frequently
released, open source database of keyboard configuration data. The
project is targeted to XKB-based systems."""
@@ -49,9 +49,3 @@ class XkeyboardConfig(Package):
# gmsgfmt
# perl@5.8.1:
# perl XML::Parser
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xkill/package.py b/var/spack/repos/builtin/packages/xkill/package.py
index 061d756eec..37ee488071 100644
--- a/var/spack/repos/builtin/packages/xkill/package.py
+++ b/var/spack/repos/builtin/packages/xkill/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xkill(Package):
+class Xkill(AutotoolsPackage):
"""xkill is a utility for forcing the X server to close connections to
clients. This program is very dangerous, but is useful for aborting
programs that have displayed undesired windows on a user's screen."""
@@ -41,9 +41,3 @@ class Xkill(Package):
depends_on('xproto@7.0.22:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xload/package.py b/var/spack/repos/builtin/packages/xload/package.py
index 2fc91043b5..cda2ab21a7 100644
--- a/var/spack/repos/builtin/packages/xload/package.py
+++ b/var/spack/repos/builtin/packages/xload/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xload(Package):
+class Xload(AutotoolsPackage):
"""xload displays a periodically updating histogram of the
system load average."""
@@ -42,9 +42,3 @@ class Xload(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xlogo/package.py b/var/spack/repos/builtin/packages/xlogo/package.py
index 77f5bd3639..aca6a47df8 100644
--- a/var/spack/repos/builtin/packages/xlogo/package.py
+++ b/var/spack/repos/builtin/packages/xlogo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xlogo(Package):
+class Xlogo(AutotoolsPackage):
"""The xlogo program simply displays the X Window System logo."""
homepage = "http://cgit.freedesktop.org/xorg/app/xlogo"
@@ -45,9 +45,3 @@ class Xlogo(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xlsatoms/package.py b/var/spack/repos/builtin/packages/xlsatoms/package.py
index 8722b57c8c..b85fac8660 100644
--- a/var/spack/repos/builtin/packages/xlsatoms/package.py
+++ b/var/spack/repos/builtin/packages/xlsatoms/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xlsatoms(Package):
+class Xlsatoms(AutotoolsPackage):
"""xlsatoms lists the interned atoms defined on an X11 server."""
homepage = "http://cgit.freedesktop.org/xorg/app/xlsatoms"
@@ -38,9 +38,3 @@ class Xlsatoms(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xlsclients/package.py b/var/spack/repos/builtin/packages/xlsclients/package.py
index 3714de2706..6deb2c88e8 100644
--- a/var/spack/repos/builtin/packages/xlsclients/package.py
+++ b/var/spack/repos/builtin/packages/xlsclients/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xlsclients(Package):
+class Xlsclients(AutotoolsPackage):
"""xlsclients is a utility for listing information about the client
applications running on a X11 server."""
@@ -39,9 +39,3 @@ class Xlsclients(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xlsfonts/package.py b/var/spack/repos/builtin/packages/xlsfonts/package.py
index 011ca5aa0e..15761e2d9f 100644
--- a/var/spack/repos/builtin/packages/xlsfonts/package.py
+++ b/var/spack/repos/builtin/packages/xlsfonts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xlsfonts(Package):
+class Xlsfonts(AutotoolsPackage):
"""xlsfonts lists fonts available from an X server via the X11
core protocol."""
@@ -39,9 +39,3 @@ class Xlsfonts(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmag/package.py b/var/spack/repos/builtin/packages/xmag/package.py
index 27843299c8..5a8ae6e961 100644
--- a/var/spack/repos/builtin/packages/xmag/package.py
+++ b/var/spack/repos/builtin/packages/xmag/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xmag(Package):
+class Xmag(AutotoolsPackage):
"""xmag displays a magnified snapshot of a portion of an X11 screen."""
homepage = "http://cgit.freedesktop.org/xorg/app/xmag"
@@ -40,9 +40,3 @@ class Xmag(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xman/package.py b/var/spack/repos/builtin/packages/xman/package.py
index 629a457edc..df11504f69 100644
--- a/var/spack/repos/builtin/packages/xman/package.py
+++ b/var/spack/repos/builtin/packages/xman/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xman(Package):
+class Xman(AutotoolsPackage):
"""xman is a graphical manual page browser using the Athena Widgets (Xaw)
toolkit."""
@@ -40,9 +40,3 @@ class Xman(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmessage/package.py b/var/spack/repos/builtin/packages/xmessage/package.py
index 9b2ee5102e..dee5d86e21 100644
--- a/var/spack/repos/builtin/packages/xmessage/package.py
+++ b/var/spack/repos/builtin/packages/xmessage/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xmessage(Package):
+class Xmessage(AutotoolsPackage):
"""xmessage displays a message or query in a window. The user can click
on an "okay" button to dismiss it or can select one of several buttons
to answer a question. xmessage can also exit after a specified time."""
@@ -40,9 +40,3 @@ class Xmessage(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmh/package.py b/var/spack/repos/builtin/packages/xmh/package.py
index cdde63e149..65873360c2 100644
--- a/var/spack/repos/builtin/packages/xmh/package.py
+++ b/var/spack/repos/builtin/packages/xmh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xmh(Package):
+class Xmh(AutotoolsPackage):
"""The xmh program provides a graphical user interface to the
MH Message Handling System. To actually do things with your
mail, it makes calls to the MH package."""
@@ -43,9 +43,3 @@ class Xmh(Package):
depends_on('xbitmaps@1.1.0:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmlto/package.py b/var/spack/repos/builtin/packages/xmlto/package.py
index 0dbc81de32..b1122d8ef6 100644
--- a/var/spack/repos/builtin/packages/xmlto/package.py
+++ b/var/spack/repos/builtin/packages/xmlto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,22 +25,16 @@
from spack import *
-class Xmlto(Package):
+class Xmlto(AutotoolsPackage):
"""Utility xmlto is a simple shell script for converting XML files to various
formats. It serves as easy to use command line frontend to make fine output
without remembering many long options and searching for the syntax of the
backends."""
- homepage = "http://cyberelk.net/tim/software/xmlto/"
- url = "https://fedorahosted.org/releases/x/m/xmlto/xmlto-0.0.28.tar.gz"
+ homepage = "https://pagure.io/xmlto"
+ url = "https://releases.pagure.org/xmlto/xmlto-0.0.28.tar.gz"
version('0.0.28', 'a1fefad9d83499a15576768f60f847c6')
# FIXME: missing a lot of dependencies
depends_on('libxslt')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmodmap/package.py b/var/spack/repos/builtin/packages/xmodmap/package.py
index abe40dbb43..62582df6f2 100644
--- a/var/spack/repos/builtin/packages/xmodmap/package.py
+++ b/var/spack/repos/builtin/packages/xmodmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xmodmap(Package):
+class Xmodmap(AutotoolsPackage):
"""The xmodmap program is used to edit and display the keyboard modifier
map and keymap table that are used by client applications to convert
event keycodes into keysyms. It is usually run from the user's
@@ -42,9 +42,3 @@ class Xmodmap(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xmore/package.py b/var/spack/repos/builtin/packages/xmore/package.py
index 8f8ccd7138..0b76828999 100644
--- a/var/spack/repos/builtin/packages/xmore/package.py
+++ b/var/spack/repos/builtin/packages/xmore/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xmore(Package):
+class Xmore(AutotoolsPackage):
"""xmore - plain text display program for the X Window System."""
homepage = "http://cgit.freedesktop.org/xorg/app/xmore"
@@ -38,9 +38,3 @@ class Xmore(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xorg-cf-files/package.py b/var/spack/repos/builtin/packages/xorg-cf-files/package.py
index c7b22d904f..edeba12f0e 100644
--- a/var/spack/repos/builtin/packages/xorg-cf-files/package.py
+++ b/var/spack/repos/builtin/packages/xorg-cf-files/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XorgCfFiles(Package):
+class XorgCfFiles(AutotoolsPackage):
"""The xorg-cf-files package contains the data files for the imake utility,
defining the known settings for a wide variety of platforms (many of which
have not been verified or tested in over a decade), and for many of the
@@ -37,8 +37,3 @@ class XorgCfFiles(Package):
version('1.0.6', 'c0ce98377c70d95fb48e1bd856109bf8')
depends_on('pkg-config@0.9.0:', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xorg-docs/package.py b/var/spack/repos/builtin/packages/xorg-docs/package.py
index 5c320bba7b..bb67538f0a 100644
--- a/var/spack/repos/builtin/packages/xorg-docs/package.py
+++ b/var/spack/repos/builtin/packages/xorg-docs/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XorgDocs(Package):
+class XorgDocs(AutotoolsPackage):
"""This package provides miscellaneous documentation for the X Window
System that doesn't better fit into other packages.
@@ -40,9 +40,3 @@ class XorgDocs(Package):
depends_on('util-macros', type='build')
depends_on('xorg-sgml-doctools@1.8:', type='build')
depends_on('xmlto', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xorg-gtest/package.py b/var/spack/repos/builtin/packages/xorg-gtest/package.py
index 6978d610d3..594ba2a3bd 100644
--- a/var/spack/repos/builtin/packages/xorg-gtest/package.py
+++ b/var/spack/repos/builtin/packages/xorg-gtest/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XorgGtest(Package):
+class XorgGtest(AutotoolsPackage):
"""Provides a Google Test environment for starting and stopping
a X server for testing purposes."""
@@ -43,9 +43,3 @@ class XorgGtest(Package):
# TODO: may be missing evemu package?
# TODO: what is the difference between xorg-gtest and googletest packages?
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xorg-server/package.py b/var/spack/repos/builtin/packages/xorg-server/package.py
index 9d9b49f9c2..6b616bfe43 100644
--- a/var/spack/repos/builtin/packages/xorg-server/package.py
+++ b/var/spack/repos/builtin/packages/xorg-server/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XorgServer(Package):
+class XorgServer(AutotoolsPackage):
"""X.Org Server is the free and open source implementation of the display
server for the X Window System stewarded by the X.Org Foundation."""
@@ -100,9 +100,3 @@ class XorgServer(Package):
# LIBUDEV="libudev >= 143"
# LIBSELINUX="libselinux >= 2.0.86"
# LIBDBUS="dbus-1 >= 1.0"
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xorg-sgml-doctools/package.py b/var/spack/repos/builtin/packages/xorg-sgml-doctools/package.py
index c2e5797efa..1adc06dc41 100644
--- a/var/spack/repos/builtin/packages/xorg-sgml-doctools/package.py
+++ b/var/spack/repos/builtin/packages/xorg-sgml-doctools/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class XorgSgmlDoctools(Package):
+class XorgSgmlDoctools(AutotoolsPackage):
"""This package provides a common set of SGML entities and XML/CSS style
sheets used in building/formatting the documentation provided in other
X.Org packages."""
@@ -37,9 +37,3 @@ class XorgSgmlDoctools(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xphelloworld/package.py b/var/spack/repos/builtin/packages/xphelloworld/package.py
index 6d445d69be..10f9be36df 100644
--- a/var/spack/repos/builtin/packages/xphelloworld/package.py
+++ b/var/spack/repos/builtin/packages/xphelloworld/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xphelloworld(Package):
+class Xphelloworld(AutotoolsPackage):
"""Xprint sample applications."""
homepage = "http://cgit.freedesktop.org/xorg/app/xphelloworld"
@@ -46,9 +46,3 @@ class Xphelloworld(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xplor-nih/package.py b/var/spack/repos/builtin/packages/xplor-nih/package.py
new file mode 100644
index 0000000000..3be84ebf22
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xplor-nih/package.py
@@ -0,0 +1,48 @@
+##############################################################################
+# 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/spack/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 *
+import os
+
+
+class XplorNih(Package):
+ """XPLOR-NIH is a structure determination program.
+
+ Note: A manual download is required for XPLOR-NIH.
+ Spack will search your current directory for the download file.
+ Alternatively, add this file to a mirror so that Spack can find it.
+ For instructions on how to set up a mirror, see
+ http://spack.readthedocs.io/en/latest/mirrors.html"""
+
+ homepage = "https://nmr.cit.nih.gov/xplor-nih/"
+
+ version('2.45', 'ab3e046604beb0effc89a1adb7bab438')
+
+ depends_on('python', type=('build', 'run'))
+
+ def url_for_version(self, version):
+ return "file://{0}/xplor-nih-{1}-Linux_x86_64.tar.gz".format(os.getcwd(), version)
+
+ def install(self, spec, prefix):
+ install_tree(self.stage.source_path, prefix.bin)
diff --git a/var/spack/repos/builtin/packages/xplsprinters/package.py b/var/spack/repos/builtin/packages/xplsprinters/package.py
index 55de272a33..0757de82ba 100644
--- a/var/spack/repos/builtin/packages/xplsprinters/package.py
+++ b/var/spack/repos/builtin/packages/xplsprinters/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xplsprinters(Package):
+class Xplsprinters(AutotoolsPackage):
"""List Xprint printers."""
homepage = "http://cgit.freedesktop.org/xorg/app/xplsprinters"
@@ -39,9 +39,3 @@ class Xplsprinters(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xpr/package.py b/var/spack/repos/builtin/packages/xpr/package.py
index 669693e084..5d246e957a 100644
--- a/var/spack/repos/builtin/packages/xpr/package.py
+++ b/var/spack/repos/builtin/packages/xpr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xpr(Package):
+class Xpr(AutotoolsPackage):
"""xpr takes as input a window dump file produced by xwd
and formats it for output on various types of printers."""
@@ -40,9 +40,3 @@ class Xpr(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xprehashprinterlist/package.py b/var/spack/repos/builtin/packages/xprehashprinterlist/package.py
index 4578c3c191..65701b180f 100644
--- a/var/spack/repos/builtin/packages/xprehashprinterlist/package.py
+++ b/var/spack/repos/builtin/packages/xprehashprinterlist/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xprehashprinterlist(Package):
+class Xprehashprinterlist(AutotoolsPackage):
"""Rehash list of Xprint printers."""
homepage = "http://cgit.freedesktop.org/xorg/app/xprehashprinterlist"
@@ -38,9 +38,3 @@ class Xprehashprinterlist(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xprop/package.py b/var/spack/repos/builtin/packages/xprop/package.py
index 0e1a591bcb..359ed6d6f1 100644
--- a/var/spack/repos/builtin/packages/xprop/package.py
+++ b/var/spack/repos/builtin/packages/xprop/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xprop(Package):
+class Xprop(AutotoolsPackage):
"""xprop is a command line tool to display and/or set window and font
properties of an X server."""
@@ -39,9 +39,3 @@ class Xprop(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xproto/package.py b/var/spack/repos/builtin/packages/xproto/package.py
index 67074a6993..2396e2966f 100644
--- a/var/spack/repos/builtin/packages/xproto/package.py
+++ b/var/spack/repos/builtin/packages/xproto/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xproto(Package):
+class Xproto(AutotoolsPackage):
"""X Window System Core Protocol.
This package provides the headers and specification documents defining
@@ -36,14 +36,15 @@ class Xproto(Package):
common definitions and porting layer."""
homepage = "http://cgit.freedesktop.org/xorg/proto/x11proto"
- url = "https://www.x.org/archive/individual/proto/xproto-7.0.29.tar.gz"
+ url = "https://www.x.org/archive/individual/proto/xproto-7.0.31.tar.gz"
+ version('7.0.31', '04b925bf9e472c80f9212615cd684f1e')
version('7.0.29', '16a78dd2c5ad73011105c96235f6a0af')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
+ # Installation fails in parallel
+ # See https://github.com/spack/spack/issues/4805
+ make('install', parallel=False)
diff --git a/var/spack/repos/builtin/packages/xproxymanagementprotocol/package.py b/var/spack/repos/builtin/packages/xproxymanagementprotocol/package.py
index e5bfcb8cbc..2f70146e00 100644
--- a/var/spack/repos/builtin/packages/xproxymanagementprotocol/package.py
+++ b/var/spack/repos/builtin/packages/xproxymanagementprotocol/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xproxymanagementprotocol(Package):
+class Xproxymanagementprotocol(AutotoolsPackage):
"""The Proxy Management Protocol is an ICE based protocol that provides a
way for application servers to easily locate proxy services available to
them."""
@@ -34,8 +34,3 @@ class Xproxymanagementprotocol(Package):
url = "https://www.x.org/archive/individual/proto/xproxymanagementprotocol-1.0.3.tar.gz"
version('1.0.3', 'c4ab05a6174b4e9b6ae5b7cfbb6d718e')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xqilla/package.py b/var/spack/repos/builtin/packages/xqilla/package.py
new file mode 100644
index 0000000000..0c63fa6c3f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xqilla/package.py
@@ -0,0 +1,56 @@
+##############################################################################
+# 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/spack/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 Xqilla(AutotoolsPackage):
+ """XQilla is an XQuery and XPath 2 library and command line utility
+ written in C++, implemented on top of the Xerces-C library."""
+
+ homepage = "http://xqilla.sourceforge.net/HomePage"
+ url = "https://downloads.sourceforge.net/project/xqilla/XQilla-2.3.3.tar.gz"
+
+ version('2.3.3', '8ece20348687b6529bb934c17067803c')
+
+ variant('debug', default=False, description='Build a debugging version.')
+ variant('shared', default=True, description='Build shared libraries.')
+
+ depends_on('xerces-c')
+
+ def configure_args(self):
+ args = ['--with-xerces={0}'.format(self.spec['xerces-c'].prefix)]
+
+ if '+shared' in self.spec:
+ args.extend(['--enable-shared=yes',
+ '--enable-static=no'])
+ else:
+ args.extend(['--enable-shared=no',
+ '--enable-static=yes',
+ '--with-pic'])
+
+ if '+debug' in self.spec:
+ args.append('--enable-debug')
+
+ return args
diff --git a/var/spack/repos/builtin/packages/xrandr/package.py b/var/spack/repos/builtin/packages/xrandr/package.py
index 35e21c6047..4aeb34d020 100644
--- a/var/spack/repos/builtin/packages/xrandr/package.py
+++ b/var/spack/repos/builtin/packages/xrandr/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xrandr(Package):
+class Xrandr(AutotoolsPackage):
"""xrandr - primitive command line interface to X11 Resize, Rotate, and
Reflect (RandR) extension."""
@@ -41,9 +41,3 @@ class Xrandr(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xrdb/package.py b/var/spack/repos/builtin/packages/xrdb/package.py
index 93847a19a0..075e04e9dc 100644
--- a/var/spack/repos/builtin/packages/xrdb/package.py
+++ b/var/spack/repos/builtin/packages/xrdb/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xrdb(Package):
+class Xrdb(AutotoolsPackage):
"""xrdb - X server resource database utility."""
homepage = "http://cgit.freedesktop.org/xorg/app/xrdb"
@@ -39,9 +39,3 @@ class Xrdb(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xrefresh/package.py b/var/spack/repos/builtin/packages/xrefresh/package.py
index f99810beea..76a094779e 100644
--- a/var/spack/repos/builtin/packages/xrefresh/package.py
+++ b/var/spack/repos/builtin/packages/xrefresh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xrefresh(Package):
+class Xrefresh(AutotoolsPackage):
"""xrefresh - refresh all or part of an X screen."""
homepage = "http://cgit.freedesktop.org/xorg/app/xrefresh"
@@ -38,9 +38,3 @@ class Xrefresh(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xrootd/package.py b/var/spack/repos/builtin/packages/xrootd/package.py
index db076dbc56..94ee3eda46 100644
--- a/var/spack/repos/builtin/packages/xrootd/package.py
+++ b/var/spack/repos/builtin/packages/xrootd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -26,27 +26,16 @@
from spack import *
-class Xrootd(Package):
+class Xrootd(CMakePackage):
"""The XROOTD project aims at giving high performance, scalable fault
tolerant access to data repositories of many kinds."""
homepage = "http://xrootd.org"
- url = "http://xrootd.org/download/v4.3.0/xrootd-4.3.0.tar.gz"
+ url = "http://xrootd.org/download/v4.6.0/xrootd-4.6.0.tar.gz"
+ version('4.6.0', '5d60aade2d995b68fe0c46896bc4a5d1')
+ version('4.5.0', 'd485df3d4a991e1c35efa4bf9ef663d7')
+ version('4.4.1', '72b0842f802ccc94dede4ac5ab2a589e')
+ version('4.4.0', '58f55e56801d3661d753ff5fd33dbcc9')
version('4.3.0', '39c2fab9f632f35e12ff607ccaf9e16c')
- depends_on('cmake', type='build')
-
- def install(self, spec, prefix):
- options = []
- options.extend(std_cmake_args)
-
- build_directory = join_path(self.stage.path, 'spack-build')
- source_directory = self.stage.source_path
-
- if '+debug' in spec:
- options.append('-DCMAKE_BUILD_TYPE:STRING=Debug')
-
- with working_dir(build_directory, create=True):
- cmake(source_directory, *options)
- make()
- make("install")
+ depends_on('cmake@2.6:', type='build')
diff --git a/var/spack/repos/builtin/packages/xrx/package.py b/var/spack/repos/builtin/packages/xrx/package.py
index 4457c2f164..fba6a88df1 100644
--- a/var/spack/repos/builtin/packages/xrx/package.py
+++ b/var/spack/repos/builtin/packages/xrx/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xrx(Package):
+class Xrx(AutotoolsPackage):
"""The remote execution (RX) service specifies a MIME format for invoking
applications remotely, for example via a World Wide Web browser. This
RX format specifies a syntax for listing network services required by
@@ -49,9 +49,3 @@ class Xrx(Package):
depends_on('xproxymanagementprotocol', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsbench/package.py b/var/spack/repos/builtin/packages/xsbench/package.py
new file mode 100644
index 0000000000..345d566bc0
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xsbench/package.py
@@ -0,0 +1,66 @@
+##############################################################################
+# 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/spack/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 *
+
+
+class Xsbench(MakefilePackage):
+ """XSBench is a mini-app representing a key computational
+ kernel of the Monte Carlo neutronics application OpenMC.
+ A full explanation of the theory and purpose of XSBench
+ is provided in docs/XSBench_Theory.pdf."""
+
+ homepage = "https://github.com/ANL-CESAR/XSBench/"
+ url = "https://github.com/ANL-CESAR/XSBench/archive/v13.tar.gz"
+
+ tags = ['proxy-app', 'ecp-proxy-app']
+
+ version('14', '94d5d28eb031fd4ef35507c9c1862169')
+ version('13', '72a92232d2f5777fb52f5ea4082aff37')
+
+ variant('mpi', default=False, description='Build with MPI support')
+
+ depends_on('mpi', when='+mpi')
+
+ build_directory = 'src'
+
+ @property
+ def build_targets(self):
+
+ targets = []
+
+ cflags = '-std=gnu99'
+ if '+mpi' in self.spec:
+ targets.append('CC={0}'.format(self.spec['mpi'].mpicc))
+
+ cflags += ' ' + self.compiler.openmp_flag
+ targets.append('CFLAGS={0}'.format(cflags))
+ targets.append('LDFLAGS=-lm')
+
+ return targets
+
+ def install(self, spec, prefix):
+ mkdir(prefix.bin)
+ install('src/XSBench', prefix.bin)
diff --git a/var/spack/repos/builtin/packages/xscope/package.py b/var/spack/repos/builtin/packages/xscope/package.py
index cf33c9767e..c851fcf5f3 100644
--- a/var/spack/repos/builtin/packages/xscope/package.py
+++ b/var/spack/repos/builtin/packages/xscope/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xscope(Package):
+class Xscope(AutotoolsPackage):
"""XSCOPE -- a program to monitor X11/Client conversations."""
homepage = "http://cgit.freedesktop.org/xorg/app/xscope"
@@ -37,9 +37,3 @@ class Xscope(Package):
depends_on('xtrans', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsdk/package.py b/var/spack/repos/builtin/packages/xsdk/package.py
new file mode 100644
index 0000000000..901613f77d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xsdk/package.py
@@ -0,0 +1,84 @@
+##############################################################################
+# 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/spack/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
+##############################################################################
+
+import os
+from spack import *
+
+
+class Xsdk(Package):
+ """Xsdk is a suite of Department of Energy (DOE) packages for numerical
+ simulation. This is a Spack bundle package that installs the xSDK
+ packages
+ """
+
+ homepage = "http://xsdk.info"
+
+ # Dummy url since Spack complains if I don't list something, will be
+ # removed when metapackage is available
+ url = 'https://bitbucket.org/saws/saws/get/master.tar.gz'
+
+ version('develop', 'a52dc710c744afa0b71429b8ec9425bc')
+ version('xsdk-0.2.0', 'a52dc710c744afa0b71429b8ec9425bc')
+
+ depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0')
+ depends_on('hypre@develop~internal-superlu', when='@develop')
+
+ depends_on('superlu-dist@xsdk-0.2.0', when='@xsdk-0.2.0')
+ depends_on('superlu-dist@develop', when='@develop')
+
+ depends_on('trilinos@xsdk-0.2.0+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan2~amesos2~exodus',
+ when='@xsdk-0.2.0')
+ depends_on('trilinos@develop+xsdkflags+hypre+superlu-dist+metis+hdf5~mumps+boost~suite-sparse~tpetra~ifpack2~zoltan2~amesos2~exodus',
+ when='@develop')
+
+ depends_on('petsc@xsdk-0.2.0+trilinos+mpi+hypre+superlu-dist+metis+hdf5~mumps~boost+double~int64',
+ when='@xsdk-0.2.0')
+ depends_on('petsc@develop+trilinos+mpi+hypre+superlu-dist+metis+hdf5~mumps~boost+double~int64',
+ when='@develop')
+
+ depends_on('pflotran@xsdk-0.2.0', when='@xsdk-0.2.0')
+ depends_on('pflotran@develop', when='@develop')
+
+ depends_on('alquimia@xsdk-0.2.0', when='@xsdk-0.2.0')
+ depends_on('alquimia@develop', when='@develop')
+
+ # xSDKTrilinos depends on the version of Trilinos built with
+ # +tpetra which is turned off for faster xSDK
+ # depends_on('xsdktrilinos@xsdk-0.2.0', when='@xsdk-0.2.0')
+ # depends_on('xsdktrilinos@develop', when='@develop')
+
+ variant('debug', default=False, description='Compile in debug mode')
+
+ # How do we propagate debug flag to all depends on packages ?
+ # If I just do spack install xsdk+debug will that propogate it down?
+
+ # Dummy install for now, will be removed when metapackage is available
+ def install(self, spec, prefix):
+ # Prevent the error message
+ # ==> Error: Install failed for xsdk. Nothing was installed!
+ # ==> Error: Installation process had nonzero exit code : 256
+ with open(os.path.join(spec.prefix, 'bundle-package.txt'), 'w') as out:
+ out.write('This is a bundle\n')
+ out.close()
diff --git a/var/spack/repos/builtin/packages/xsdktrilinos/package.py b/var/spack/repos/builtin/packages/xsdktrilinos/package.py
index ea49054435..cc75589937 100644
--- a/var/spack/repos/builtin/packages/xsdktrilinos/package.py
+++ b/var/spack/repos/builtin/packages/xsdktrilinos/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,33 +32,36 @@ class Xsdktrilinos(CMakePackage):
Trilinos.
"""
homepage = "https://trilinos.org/"
- base_url = "https://github.com/trilinos/xSDKTrilinos/archive"
+ url = "https://github.com/trilinos/xSDKTrilinos/archive/trilinos-release-12-8-1.tar.gz"
version('develop', git='https://github.com/trilinos/xSDKTrilinos.git', tag='master')
+ version('xsdk-0.2.0', git='https://github.com/trilinos/xSDKTrilinos.git', tag='xsdk-0.2.0')
version('12.8.1', '9cc338ded17d1e10ea6c0dc18b22dcd4')
version('12.6.4', '44c4c54ccbac73bb8939f68797b9454a')
- def url_for_version(self, version):
- return '%s/trilinos-release-%s.tar.gz' % \
- (Xsdktrilinos.base_url, version.dashed)
-
variant('hypre', default=True,
description='Compile with Hypre preconditioner')
variant('petsc', default=True,
description='Compile with PETSc solvers')
variant('shared', default=True,
description='Enables the build of shared libraries')
- variant('debug', default=False,
- description='Builds a debug version of the libraries')
# MPI related dependencies
depends_on('mpi')
depends_on('hypre~internal-superlu', when='+hypre')
- depends_on('petsc+mpi~complex', when='+petsc')
+ depends_on('hypre@xsdk-0.2.0~internal-superlu', when='@xsdk-0.2.0+hypre')
+ depends_on('hypre@develop~internal-superlu', when='@develop+hypre')
+ depends_on('petsc@xsdk-0.2.0+mpi~complex', when='@xsdk-0.2.0+petsc')
+ depends_on('petsc@develop+mpi~complex', when='@develop+petsc')
depends_on('trilinos@12.6.4', when='@12.6.4')
depends_on('trilinos@12.8.1', when='@12.8.1')
+ depends_on('trilinos@xsdk-0.2.0', when='@xsdk-0.2.0')
depends_on('trilinos@develop', when='@develop')
+ def url_for_version(self, version):
+ url = "https://github.com/trilinos/xSDKTrilinos/archive/trilinos-release-{0}.tar.gz"
+ return url.format(version.dashed)
+
def cmake_args(self):
spec = self.spec
@@ -70,8 +73,6 @@ class Xsdktrilinos(CMakePackage):
'-DxSDKTrilinos_ENABLE_TESTS:BOOL=ON',
'-DxSDKTrilinos_ENABLE_EXAMPLES:BOOL=ON',
'-DTrilinos_INSTALL_DIR=%s' % spec['trilinos'].prefix,
- '-DCMAKE_BUILD_TYPE:STRING=%s' % (
- 'DEBUG' if '+debug' in spec else 'RELEASE'),
'-DBUILD_SHARED_LIBS:BOOL=%s' % (
'ON' if '+shared' in spec else 'OFF'),
'-DTPL_ENABLE_MPI:BOOL=ON',
diff --git a/var/spack/repos/builtin/packages/xset/package.py b/var/spack/repos/builtin/packages/xset/package.py
index 462bea8cfe..8488ded70c 100644
--- a/var/spack/repos/builtin/packages/xset/package.py
+++ b/var/spack/repos/builtin/packages/xset/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xset(Package):
+class Xset(AutotoolsPackage):
"""User preference utility for X."""
homepage = "http://cgit.freedesktop.org/xorg/app/xset"
@@ -39,9 +39,3 @@ class Xset(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsetmode/package.py b/var/spack/repos/builtin/packages/xsetmode/package.py
index f05fd0f123..e4d9b1a6a0 100644
--- a/var/spack/repos/builtin/packages/xsetmode/package.py
+++ b/var/spack/repos/builtin/packages/xsetmode/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xsetmode(Package):
+class Xsetmode(AutotoolsPackage):
"""Set the mode for an X Input device."""
homepage = "http://cgit.freedesktop.org/xorg/app/xsetmode"
@@ -38,9 +38,3 @@ class Xsetmode(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsetpointer/package.py b/var/spack/repos/builtin/packages/xsetpointer/package.py
index e9bf2fc9fe..296dae801b 100644
--- a/var/spack/repos/builtin/packages/xsetpointer/package.py
+++ b/var/spack/repos/builtin/packages/xsetpointer/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xsetpointer(Package):
+class Xsetpointer(AutotoolsPackage):
"""Set an X Input device as the main pointer."""
homepage = "http://cgit.freedesktop.org/xorg/app/xsetpointer"
@@ -39,9 +39,3 @@ class Xsetpointer(Package):
depends_on('inputproto@1.4:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsetroot/package.py b/var/spack/repos/builtin/packages/xsetroot/package.py
index 3e62d41e9b..1468aa7e2e 100644
--- a/var/spack/repos/builtin/packages/xsetroot/package.py
+++ b/var/spack/repos/builtin/packages/xsetroot/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xsetroot(Package):
+class Xsetroot(AutotoolsPackage):
"""xsetroot - root window parameter setting utility for X."""
homepage = "http://cgit.freedesktop.org/xorg/app/xsetroot"
@@ -41,9 +41,3 @@ class Xsetroot(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xsm/package.py b/var/spack/repos/builtin/packages/xsm/package.py
index 9d9c896365..0bbd3ec805 100644
--- a/var/spack/repos/builtin/packages/xsm/package.py
+++ b/var/spack/repos/builtin/packages/xsm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xsm(Package):
+class Xsm(AutotoolsPackage):
"""X Session Manager."""
homepage = "http://cgit.freedesktop.org/xorg/app/xsm"
@@ -41,9 +41,3 @@ class Xsm(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xstdcmap/package.py b/var/spack/repos/builtin/packages/xstdcmap/package.py
index bb19bdff1a..9b8d4a1641 100644
--- a/var/spack/repos/builtin/packages/xstdcmap/package.py
+++ b/var/spack/repos/builtin/packages/xstdcmap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xstdcmap(Package):
+class Xstdcmap(AutotoolsPackage):
"""The xstdcmap utility can be used to selectively define standard colormap
properties. It is intended to be run from a user's X startup script to
create standard colormap definitions in order to facilitate sharing of
@@ -42,9 +42,3 @@ class Xstdcmap(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xterm/package.py b/var/spack/repos/builtin/packages/xterm/package.py
new file mode 100644
index 0000000000..8c24931d7a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/xterm/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 Xterm(AutotoolsPackage):
+ """The xterm program is a terminal emulator for the X Window System. It
+ provides DEC VT102 and Tektronix 4014 compatible terminals for programs
+ that can't use the window system directly."""
+
+ homepage = "http://invisible-island.net/xterm/"
+ url = "http://invisible-island.net/xterm/xterm-327.tgz"
+
+ version('327', '3c32e931adcad44e64e57892e75d9e02')
+
+ depends_on('libxft')
+ depends_on('fontconfig')
+ depends_on('libxaw')
+ depends_on('libxmu')
+ depends_on('libxt')
+ depends_on('libx11')
+ depends_on('libxinerama')
+ depends_on('libxpm')
+ depends_on('libice')
+ depends_on('freetype')
+ depends_on('libxrender')
+ depends_on('libxext')
+ depends_on('libsm')
+ depends_on('libxcb')
+ depends_on('libxau')
+ depends_on('bzip2')
+
+ depends_on('pkg-config', type='build')
diff --git a/var/spack/repos/builtin/packages/xtrans/package.py b/var/spack/repos/builtin/packages/xtrans/package.py
index ed46059d9d..186e3587e6 100644
--- a/var/spack/repos/builtin/packages/xtrans/package.py
+++ b/var/spack/repos/builtin/packages/xtrans/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xtrans(Package):
+class Xtrans(AutotoolsPackage):
"""xtrans is a library of code that is shared among various X packages to
handle network protocol transport in a modular fashion, allowing a
single place to add new transport types. It is used by the X server,
@@ -38,8 +38,3 @@ class Xtrans(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make('install')
diff --git a/var/spack/repos/builtin/packages/xtrap/package.py b/var/spack/repos/builtin/packages/xtrap/package.py
index 405ec2f848..ef297e9e6d 100644
--- a/var/spack/repos/builtin/packages/xtrap/package.py
+++ b/var/spack/repos/builtin/packages/xtrap/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xtrap(Package):
+class Xtrap(AutotoolsPackage):
"""XTrap sample clients."""
homepage = "http://cgit.freedesktop.org/xorg/app/xtrap"
@@ -38,9 +38,3 @@ class Xtrap(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xts/package.py b/var/spack/repos/builtin/packages/xts/package.py
index c3993cf391..985a35bd5a 100644
--- a/var/spack/repos/builtin/packages/xts/package.py
+++ b/var/spack/repos/builtin/packages/xts/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xts(Package):
+class Xts(AutotoolsPackage):
"""This is a revamped version of X Test Suite (XTS) which removes some of
the ugliness of building and running the tests."""
@@ -50,11 +50,5 @@ class Xts(Package):
depends_on('xset', type='build')
depends_on('xdpyinfo', type='build')
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- # FIXME: Crashes during compilation
- # error: redeclaration of enumerator 'XawChainTop'
-
- make()
- make('install')
+ # FIXME: Crashes during compilation
+ # error: redeclaration of enumerator 'XawChainTop'
diff --git a/var/spack/repos/builtin/packages/xvidtune/package.py b/var/spack/repos/builtin/packages/xvidtune/package.py
index ac5352df5f..573c027627 100644
--- a/var/spack/repos/builtin/packages/xvidtune/package.py
+++ b/var/spack/repos/builtin/packages/xvidtune/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xvidtune(Package):
+class Xvidtune(AutotoolsPackage):
"""xvidtune is a client interface to the X server video mode
extension (XFree86-VidModeExtension)."""
@@ -42,9 +42,3 @@ class Xvidtune(Package):
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xvinfo/package.py b/var/spack/repos/builtin/packages/xvinfo/package.py
index 359f1f23de..358573dcbe 100644
--- a/var/spack/repos/builtin/packages/xvinfo/package.py
+++ b/var/spack/repos/builtin/packages/xvinfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xvinfo(Package):
+class Xvinfo(AutotoolsPackage):
"""xvinfo prints out the capabilities of any video adaptors associated
with the display that are accessible through the X-Video extension."""
@@ -40,9 +40,3 @@ class Xvinfo(Package):
depends_on('xproto@7.0.25:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xwd/package.py b/var/spack/repos/builtin/packages/xwd/package.py
index d1f9ee1dfb..0b992365be 100644
--- a/var/spack/repos/builtin/packages/xwd/package.py
+++ b/var/spack/repos/builtin/packages/xwd/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xwd(Package):
+class Xwd(AutotoolsPackage):
"""xwd - dump an image of an X window."""
homepage = "http://cgit.freedesktop.org/xorg/app/xwd"
@@ -39,9 +39,3 @@ class Xwd(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xwininfo/package.py b/var/spack/repos/builtin/packages/xwininfo/package.py
index bba97ca671..bba7088166 100644
--- a/var/spack/repos/builtin/packages/xwininfo/package.py
+++ b/var/spack/repos/builtin/packages/xwininfo/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xwininfo(Package):
+class Xwininfo(AutotoolsPackage):
"""xwininfo prints information about windows on an X server. Various
information is displayed depending on which options are selected."""
@@ -40,9 +40,3 @@ class Xwininfo(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xwud/package.py b/var/spack/repos/builtin/packages/xwud/package.py
index a30d55b7c6..b4b92cd214 100644
--- a/var/spack/repos/builtin/packages/xwud/package.py
+++ b/var/spack/repos/builtin/packages/xwud/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Xwud(Package):
+class Xwud(AutotoolsPackage):
"""xwud allows X users to display in a window an image saved in a
specially formatted dump file, such as produced by xwd."""
@@ -39,9 +39,3 @@ class Xwud(Package):
depends_on('xproto@7.0.17:', type='build')
depends_on('pkg-config@0.9.0:', type='build')
depends_on('util-macros', type='build')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- make('install')
diff --git a/var/spack/repos/builtin/packages/xz/package.py b/var/spack/repos/builtin/packages/xz/package.py
index 8b0609f50e..04d91c76ac 100644
--- a/var/spack/repos/builtin/packages/xz/package.py
+++ b/var/spack/repos/builtin/packages/xz/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,21 +25,15 @@
from spack import *
-class Xz(Package):
+class Xz(AutotoolsPackage):
"""XZ Utils is free general-purpose data compression software with
high compression ratio. XZ Utils were written for POSIX-like
systems, but also work on some not-so-POSIX systems. XZ Utils are
the successor to LZMA Utils."""
homepage = "http://tukaani.org/xz/"
url = "http://tukaani.org/xz/xz-5.2.0.tar.bz2"
+ list_url = "http://tukaani.org/xz/old.html"
- version('5.2.0', '867cc8611760240ebf3440bd6e170bb9')
+ version('5.2.3', '1592e7ca3eece099b03b35f4d9179e7c')
version('5.2.2', 'f90c9a0c8b259aee2234c4e0d7fd70af')
-
- def install(self, spec, prefix):
- configure('--prefix={0}'.format(prefix))
-
- make()
- if self.run_tests:
- make('check')
- make('install')
+ version('5.2.0', '867cc8611760240ebf3440bd6e170bb9')
diff --git a/var/spack/repos/builtin/packages/yajl/package.py b/var/spack/repos/builtin/packages/yajl/package.py
new file mode 100644
index 0000000000..604144c6e5
--- /dev/null
+++ b/var/spack/repos/builtin/packages/yajl/package.py
@@ -0,0 +1,35 @@
+##############################################################################
+# Copyright (c) 2017, Los Alamos National Security, LLC
+# Produced at the Los Alamos 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/spack/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 Yajl(CMakePackage):
+ """Yet Another JSON Library (YAJL)"""
+
+ homepage = "http://lloyd.github.io/yajl/"
+ url = "https://github.com/lloyd/yajl/archive/2.1.0.zip"
+
+ version('develop', git='https://github.com/lloyd/yajl.git', branch='master')
+ version('2.1.0', '5eb9c16539bf354b937fcb20e263d1eb')
diff --git a/var/spack/repos/builtin/packages/yaml-cpp/package.py b/var/spack/repos/builtin/packages/yaml-cpp/package.py
index 0ced7c89fc..aaf6ab0a53 100644
--- a/var/spack/repos/builtin/packages/yaml-cpp/package.py
+++ b/var/spack/repos/builtin/packages/yaml-cpp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -32,8 +32,11 @@ class YamlCpp(CMakePackage):
url = "https://github.com/jbeder/yaml-cpp/archive/yaml-cpp-0.5.3.tar.gz"
version('0.5.3', '4e47733d98266e46a1a73ae0a72954eb')
+ version('develop', git='https://github.com/jbeder/yaml-cpp', branch='master')
- variant('fpic', default=False,
+ variant('shared', default=True,
+ description='Enable build of shared libraries')
+ variant('pic', default=True,
description='Build with position independent code')
depends_on('boost', when='@:0.5.3')
@@ -42,9 +45,11 @@ class YamlCpp(CMakePackage):
spec = self.spec
options = []
- if '+fpic' in spec:
- options.extend([
- '-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true'
- ])
+ options.extend([
+ '-DBUILD_SHARED_LIBS:BOOL=%s' % (
+ 'ON' if '+shared' in spec else 'OFF'),
+ '-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=%s' % (
+ 'ON' if '+pic' in spec else 'OFF'),
+ ])
return options
diff --git a/var/spack/repos/builtin/packages/yasm/package.py b/var/spack/repos/builtin/packages/yasm/package.py
index f14bdbcee7..0d35e41e04 100644
--- a/var/spack/repos/builtin/packages/yasm/package.py
+++ b/var/spack/repos/builtin/packages/yasm/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Yasm(Package):
+class Yasm(AutotoolsPackage):
"""Yasm is a complete rewrite of the NASM-2.11.06 assembler. It
supports the x86 and AMD64 instruction sets, accepts NASM and
GAS assembler syntaxes and outputs binary, ELF32 and ELF64
@@ -34,8 +34,3 @@ class Yasm(Package):
url = "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz"
version('1.3.0', 'fc9e586751ff789b34b1f21d572d96af')
-
- def install(self, spec, prefix):
- configure("--prefix=%s" % prefix)
- make()
- make("install")
diff --git a/var/spack/repos/builtin/packages/yorick/package.py b/var/spack/repos/builtin/packages/yorick/package.py
index 52a4d8787d..c30f9ca4ed 100644
--- a/var/spack/repos/builtin/packages/yorick/package.py
+++ b/var/spack/repos/builtin/packages/yorick/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -31,7 +31,7 @@ import glob
class Yorick(Package):
"""Yorick is an interpreted programming language for scientific simulations
or calculations, postprocessing or steering large simulation codes,
- interactive scientific graphics, and reading, writing, or translating
+ interactive scientific graphics, and reading, writing, or translating
files of numbers. Yorick includes an interactive graphics package, and a
binary file package capable of translating to and from the raw numeric
formats of all modern computers. Yorick is written in ANSI C and runs on
@@ -39,9 +39,9 @@ class Yorick(Package):
"""
homepage = "http://dhmunro.github.io/yorick-doc/"
- url = "https://github.com/dhmunro/yorick/archive/y_2_2_04.tar.gz"
+ url = "https://github.com/dhmunro/yorick/archive/y_2_2_04.tar.gz"
- version('2.2.04', md5='1b5b0da6ad81b2d9dba64d991ec17939')
+ version('2.2.04', '1b5b0da6ad81b2d9dba64d991ec17939')
version('master', branch='master',
git='https://github.com/dhmunro/yorick.git')
version('f90-plugin', branch='f90-plugin',
@@ -51,6 +51,12 @@ class Yorick(Package):
depends_on('libx11', when='+X')
+ extendable = True
+
+ def url_for_version(self, version):
+ url = "https://github.com/dhmunro/yorick/archive/y_{0}.tar.gz"
+ return url.format(version.underscored)
+
def install(self, spec, prefix):
os.environ['FORTRAN_LINKAGE'] = '-Df_linkage'
diff --git a/var/spack/repos/builtin/packages/z3/package.py b/var/spack/repos/builtin/packages/z3/package.py
new file mode 100644
index 0000000000..2234b7e596
--- /dev/null
+++ b/var/spack/repos/builtin/packages/z3/package.py
@@ -0,0 +1,55 @@
+##############################################################################
+# 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/spack/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 Z3(MakefilePackage):
+ """Z3 is a theorem prover from Microsoft Research.
+ It is licensed under the MIT license."""
+
+ homepage = "https://github.com/Z3Prover/z3/wiki"
+ url = "https://github.com/Z3Prover/z3/archive/z3-4.5.0.tar.gz"
+
+ version('4.5.0', 'f332befa0d66d81818a06279a0973e25')
+ version('4.4.1', '4336a9df24f090e711c6d42fd4e2b1fc')
+ version('4.4.0', '2bcbb0381cc1572cace99aac8af08990')
+
+ phases = ['bootstrap', 'build', 'install']
+
+ variant('python', default=False, description='Enable python support')
+ depends_on('python', when='+python')
+
+ build_directory = 'build'
+
+ def configure_args(self):
+ spec = self.spec
+ return [
+ '--python' if '+python' in spec else ''
+ ]
+
+ def bootstrap(self, spec, prefix):
+ options = ['--prefix={0}'.format(prefix)] + self.configure_args()
+ spec['python'].command('scripts/mk_make.py', *options)
diff --git a/var/spack/repos/builtin/packages/zeromq/package.py b/var/spack/repos/builtin/packages/zeromq/package.py
index cafd3c2125..f48e868891 100644
--- a/var/spack/repos/builtin/packages/zeromq/package.py
+++ b/var/spack/repos/builtin/packages/zeromq/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,11 +25,15 @@
from spack import *
-class Zeromq(Package):
+class Zeromq(AutotoolsPackage):
""" The ZMQ networking/concurrency library and core API """
homepage = "http://zguide.zeromq.org/"
url = "http://download.zeromq.org/zeromq-4.1.2.tar.gz"
+ version('develop', branch='master',
+ git='https://github.com/zeromq/libzmq.git')
+ version('4.2.2', '52499909b29604c1e47a86f1cb6a9115',
+ url='https://github.com/zeromq/libzmq/releases/download/v4.2.2/zeromq-4.2.2.tar.gz')
version('4.1.4', 'a611ecc93fffeb6d058c0e6edf4ad4fb')
version('4.1.2', '159c0c56a895472f02668e692d122685')
version('4.1.1', '0a4b44aa085644f25c177f79dc13f253')
@@ -40,8 +44,19 @@ class Zeromq(Package):
depends_on("libsodium")
depends_on("libsodium@:1.0.3", when='@:4.1.2')
- def install(self, spec, prefix):
- configure("--with-libsodium", "--prefix=%s" % prefix)
+ depends_on('autoconf', type='build', when='@develop')
+ depends_on('automake', type='build', when='@develop')
+ depends_on('libtool', type='build', when='@develop')
+ depends_on('pkg-config', type='build', when='@develop')
- make()
- make("install")
+ @when('@develop')
+ def autoreconf(self, spec, prefix):
+ bash = which('bash')
+ bash('./autogen.sh')
+
+ def configure_args(self):
+ config_args = ['--with-libsodium']
+ if 'clang' in self.compiler.cc:
+ config_args.append("CFLAGS=-Wno-gnu")
+ config_args.append("CXXFLAGS=-Wno-gnu")
+ return config_args
diff --git a/var/spack/repos/builtin/packages/zfp/package.py b/var/spack/repos/builtin/packages/zfp/package.py
index a898ab03d3..704dc9dc72 100644
--- a/var/spack/repos/builtin/packages/zfp/package.py
+++ b/var/spack/repos/builtin/packages/zfp/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,29 +25,63 @@
from spack import *
-class Zfp(Package):
+class Zfp(MakefilePackage):
"""zfp is an open source C library for compressed floating-point arrays
that supports very high throughput read and write random acces,
target error bounds or bit rates. Although bit-for-bit lossless
compression is not always possible, zfp is usually accurate to
within machine epsilon in near-lossless mode, and is often orders
- of magnitude more accurate than other lossy compressors.
-
+ of magnitude more accurate than other lossy compressors. Versions
+ of zfp 0.5.1 or newer also support compression of integer data.
"""
- homepage = "http://computation.llnl.gov/projects/floating-point-compression"
- url = "http://computation.llnl.gov/projects/floating-point-compression/download/zfp-0.5.0.tar.gz"
+ homepage = 'http://computation.llnl.gov/projects/floating-point-compression'
+ url = 'http://computation.llnl.gov/projects/floating-point-compression/download/zfp-0.5.1.tar.gz'
+ version('0.5.1', '0ed7059a9b480635e0dd33745e213d17')
version('0.5.0', '2ab29a852e65ad85aae38925c5003654')
+ variant('bsws',
+ default='64',
+ values=('8', '16', '32', '64'),
+ multi=False,
+ description='Bit stream word size: use smaller for finer ' \
+ 'rate granularity. Use 8 for H5Z-ZFP filter.')
+
+ variant('shared', default=True,
+ description='Build shared versions of the library')
+
+ def edit(self, spec, prefix):
+ config_file = FileFilter('Config')
+ config_file.filter(
+ '^\s*#\s*DEFS\s*\+=\s*-DBIT_STREAM_WORD_TYPE\s*=\s*uint8',
+ 'DEFS += -DBIT_STREAM_WORD_TYPE=uint%s' %
+ spec.variants['bsws'].value)
+
+ def build(self, spec, prefix):
+ with working_dir('src'):
+ if '~shared' in spec:
+ make('static')
+ else:
+ make('shared')
+
def install(self, spec, prefix):
- make("shared")
+ incdir = 'include' if spec.satisfies('@0.5.1:') else 'inc'
- # No install provided
+ # Note: ZFP package does not provide an install target
mkdirp(prefix.lib)
mkdirp(prefix.include)
- install('lib/libzfp.so', prefix.lib)
- install('inc/zfp.h', prefix.include)
- install('inc/types.h', prefix.include)
- install('inc/bitstream.h', prefix.include)
- install('inc/system.h', prefix.include)
+ # Note: ZFP package builds .so files even on OSX
+ if '~shared' in spec:
+ install('lib/libzfp.a', prefix.lib)
+ else:
+ install('lib/libzfp.so', prefix.lib)
+ install('%s/zfp.h' % incdir, prefix.include)
+ install('%s/bitstream.h' % incdir, prefix.include)
+ if spec.satisfies('@0.5.1:'):
+ mkdirp('%s/zfp' % prefix.include)
+ install('%s/zfp/system.h' % incdir, '%s/zfp' % prefix.include)
+ install('%s/zfp/types.h' % incdir, '%s/zfp' % prefix.include)
+ else:
+ install('%s/types.h' % incdir, prefix.include)
+ install('%s/system.h' % incdir, prefix.include)
diff --git a/var/spack/repos/builtin/packages/zip/package.py b/var/spack/repos/builtin/packages/zip/package.py
new file mode 100644
index 0000000000..255f254dee
--- /dev/null
+++ b/var/spack/repos/builtin/packages/zip/package.py
@@ -0,0 +1,46 @@
+##############################################################################
+# 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/spack/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 Zip(MakefilePackage):
+ """Zip is a compression and file packaging/archive utility."""
+
+ homepage = 'http://www.info-zip.org/Zip.html'
+ url = 'http://downloads.sourceforge.net/infozip/zip30.tar.gz'
+
+ version('3.0', '7b74551e63f8ee6aab6fbc86676c0d37')
+
+ depends_on('bzip2')
+
+ def url_for_version(self, version):
+ return 'http://downloads.sourceforge.net/infozip/zip{0}.tar.gz'.format(version.joined)
+
+ make_args = ['-f', 'unix/Makefile']
+ build_targets = make_args + ['generic']
+
+ @property
+ def install_targets(self):
+ return self.make_args + ['prefix={0}'.format(self.prefix), 'install']
diff --git a/var/spack/repos/builtin/packages/zlib/package.py b/var/spack/repos/builtin/packages/zlib/package.py
index ea758e0188..4898bf2b77 100644
--- a/var/spack/repos/builtin/packages/zlib/package.py
+++ b/var/spack/repos/builtin/packages/zlib/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,22 +25,51 @@
from spack import *
-class Zlib(AutotoolsPackage):
+# Although zlib comes with a configure script, it does not use Autotools
+# The AutotoolsPackage causes zlib to fail to build with PGI
+class Zlib(Package):
"""A free, general-purpose, legally unencumbered lossless
data-compression library."""
homepage = "http://zlib.net"
- url = "http://zlib.net/fossils/zlib-1.2.10.tar.gz"
+ # URL must remain http:// so Spack can bootstrap curl
+ url = "http://zlib.net/fossils/zlib-1.2.11.tar.gz"
- version('1.2.10', 'd9794246f853d15ce0fcbf79b9a3cf13')
- # author had this to say about 1.2.9....
- # Due to the bug fixes, any installations of 1.2.9 should be immediately
- # replaced with 1.2.10.
+ version('1.2.11', '1c9f62f0778697a09d36121ead88e08e')
+ # Due to the bug fixes, any installations of 1.2.9 or 1.2.10 should be
+ # immediately replaced with 1.2.11.
version('1.2.8', '44d667c142d7cda120332623eab69f40')
+ version('1.2.3', 'debc62758716a169df9f62e6ab2bc634')
variant('pic', default=True,
description='Produce position-independent code (for shared libs)')
+ variant('shared', default=True,
+ description='Enables the build of shared libraries.')
+ variant('optimize', default=True,
+ description='Enable -O2 for a more optimized lib')
+
+ patch('w_patch.patch', when="@1.2.11%cce")
+
+ @property
+ def libs(self):
+ shared = '+shared' in self.spec
+ return find_libraries(
+ ['libz'], root=self.prefix, recurse=True, shared=shared
+ )
def setup_environment(self, spack_env, run_env):
if '+pic' in self.spec:
- spack_env.set('CFLAGS', self.compiler.pic_flag)
+ spack_env.append_flags('CFLAGS', self.compiler.pic_flag)
+ if '+optimize' in self.spec:
+ spack_env.append_flags('CFLAGS', '-O2')
+
+ def install(self, spec, prefix):
+ config_args = []
+ if '~shared' in spec:
+ config_args.append('--static')
+ configure('--prefix={0}'.format(prefix), *config_args)
+
+ make()
+ if self.run_tests:
+ make('check')
+ make('install')
diff --git a/var/spack/repos/builtin/packages/zlib/w_patch.patch b/var/spack/repos/builtin/packages/zlib/w_patch.patch
new file mode 100644
index 0000000000..756cff6a78
--- /dev/null
+++ b/var/spack/repos/builtin/packages/zlib/w_patch.patch
@@ -0,0 +1,13 @@
+diff --git a/configure b/configure
+index e974d1f..ed26a63 100755
+--- a/configure
++++ b/configure
+@@ -409,7 +409,7 @@ EOF
+ if test $shared -eq 1; then
+ echo Checking for shared library support... | tee -a configure.log
+ # we must test in two steps (cc then ld), required at least on SunOS 4.x
+- if try $CC -w -c $SFLAGS $test.c &&
++ if try $CC -c $SFLAGS $test.c &&
+ try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
+ echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
+ elif test -z "$old_cc" -a -z "$old_cflags"; then
diff --git a/var/spack/repos/builtin/packages/zoltan/package.py b/var/spack/repos/builtin/packages/zoltan/package.py
index 8d4dd321b0..eb393d3990 100644
--- a/var/spack/repos/builtin/packages/zoltan/package.py
+++ b/var/spack/repos/builtin/packages/zoltan/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -41,7 +41,7 @@ class Zoltan(Package):
"""
homepage = "http://www.cs.sandia.gov/zoltan"
- base_url = "http://www.cs.sandia.gov/~kddevin/Zoltan_Distributions"
+ url = "http://www.cs.sandia.gov/~kddevin/Zoltan_Distributions/zoltan_distrib_v3.83.tar.gz"
version('3.83', '1ff1bc93f91e12f2c533ddb01f2c095f')
version('3.8', '9d8fba8a990896881b85351d4327c4a9')
@@ -56,9 +56,6 @@ class Zoltan(Package):
depends_on('mpi', when='+mpi')
- def url_for_version(self, version):
- return '%s/zoltan_distrib_v%s.tar.gz' % (Zoltan.base_url, version)
-
def install(self, spec, prefix):
# FIXME: The older Zoltan versions fail to compile the F90 MPI wrappers
# because of some complicated generic type problem.
@@ -79,7 +76,7 @@ class Zoltan(Package):
if '+shared' in spec:
config_args.append('RANLIB=echo')
config_args.append('--with-ar=$(CXX) -shared $(LDFLAGS) -o')
- config_cflags.append('-fPIC')
+ config_cflags.append(self.compiler.pic_flag)
if spec.satisfies('%gcc'):
config_args.append('--with-libs={0}'.format('-lgfortran'))
@@ -88,9 +85,18 @@ class Zoltan(Package):
config_args.append('CXX={0}'.format(spec['mpi'].mpicxx))
config_args.append('FC={0}'.format(spec['mpi'].mpifc))
- mpi_libs = ' -l'.join(self.get_mpi_libs())
config_args.append('--with-mpi={0}'.format(spec['mpi'].prefix))
- config_args.append('--with-mpi-libs=-l{0}'.format(mpi_libs))
+
+ mpi_libs = self.get_mpi_libs()
+
+ # NOTE: Some external mpi installations may have empty lib
+ # directory (e.g. bg-q). In this case we need to explicitly
+ # pass empty library name.
+ if mpi_libs:
+ mpi_libs = ' -l'.join(mpi_libs)
+ config_args.append('--with-mpi-libs=-l{0}'.format(mpi_libs))
+ else:
+ config_args.append('--with-mpi-libs= ')
# NOTE: Early versions of Zoltan come packaged with a few embedded
# library packages (e.g. ParMETIS, Scotch), which messes with Spack's
diff --git a/var/spack/repos/builtin/packages/zsh/package.py b/var/spack/repos/builtin/packages/zsh/package.py
index a70d307be9..53b3c7d536 100644
--- a/var/spack/repos/builtin/packages/zsh/package.py
+++ b/var/spack/repos/builtin/packages/zsh/package.py
@@ -1,13 +1,13 @@
##############################################################################
-# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
+# 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.
+# For details, see https://github.com/spack/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
@@ -25,7 +25,7 @@
from spack import *
-class Zsh(Package):
+class Zsh(AutotoolsPackage):
"""Zsh is a shell designed for interactive use, although it is also a
powerful scripting language. Many of the useful features of bash, ksh, and
tcsh were incorporated into zsh; many original features were added.
@@ -34,12 +34,24 @@ class Zsh(Package):
homepage = "http://www.zsh.org"
url = "http://downloads.sourceforge.net/project/zsh/zsh/5.1.1/zsh-5.1.1.tar.gz"
+ version('5.3.1', checksum='d583fbca0c2410bf9542ce8a651c26ca')
version('5.1.1', checksum='8ba28a9ef82e40c3a271602f18343b2f')
+ # Testing for terminal related things causes failures in e.g. Jenkins.
+ # See e.g. https://www.zsh.org/mla/users/2003/msg00845.html,
+ # although the name of the option has evolved since then.
+ variant('skip-tcsetpgrp-test', default=True,
+ description="Skip configure's tcsetpgrp test")
+
depends_on("pcre")
+ depends_on("ncurses")
- def install(self, spec, prefix):
- configure('--prefix=%s' % prefix)
+ def configure_args(self):
+ if '+skip-tcsetpgrp-test' in self.spec:
+ # assert that we have a functional tcsetpgrp
+ args = ['--with-tcsetpgrp']
+ else:
+ # let configure run it's test and see what's what
+ args = []
- make()
- make("install")
+ return args
diff --git a/var/spack/repos/builtin/packages/zstd/package.py b/var/spack/repos/builtin/packages/zstd/package.py
new file mode 100644
index 0000000000..9387311fbb
--- /dev/null
+++ b/var/spack/repos/builtin/packages/zstd/package.py
@@ -0,0 +1,40 @@
+##############################################################################
+# 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/spack/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 Zstd(MakefilePackage):
+ """Zstandard, or zstd as short version, is a fast lossless compression
+ algorithm, targeting real-time compression scenarios at zlib-level and
+ better compression ratios."""
+
+ homepage = "http://facebook.github.io/zstd/"
+ url = "https://github.com/facebook/zstd/archive/v1.1.2.tar.gz"
+
+ version('1.3.0', '888660a850e33c2dcc7c4f9d0b04d347')
+ version('1.1.2', '4c57a080d194bdaac83f2d3251fc7ffc')
+
+ def install(self, spec, prefix):
+ make('install', 'PREFIX={0}'.format(prefix))